[{"data":1,"prerenderedAt":173147},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-01-lerobot101-act-suan-fa-fu-xian\u002Fch5-huggingface-ren-zheng-yu-cang-ku-zhun-bei":3,"wiki-doc-nav":212},{"id":4,"title":5,"body":6,"description":204,"extension":205,"meta":206,"navigation":207,"path":208,"seo":209,"stem":210,"__hash__":211},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":8,"toc":199},"minimark",[9,14,19,27,32,35,93,99,103,153,158,162,165,175,180,185,190,195],[10,11,13],"h1",{"id":12},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[15,16,18],"h2",{"id":17},"_51-生成访问令牌","5.1 生成访问令牌",[20,21,22],"p",{},[23,24],"img",{"alt":25,"src":26},"","..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[20,28,29],{},[23,30],{"alt":25,"src":31},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[20,33,34],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[36,37,41],"pre",{"className":38,"code":39,"language":40,"meta":25,"style":25},"language-bash shiki shiki-themes github-light github-dark","export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n","bash",[42,43,44,64],"code",{"__ignoreMap":25},[45,46,49,53,57,60],"span",{"class":47,"line":48},"line",1,[45,50,52],{"class":51},"szBVR","export",[45,54,56],{"class":55},"sVt8B"," HF_TOKEN",[45,58,59],{"class":51},"=",[45,61,63],{"class":62},"sZZnC","\"your_huggingface_token\"\n",[45,65,67,71,74,77,81,84,87,90],{"class":47,"line":66},2,[45,68,70],{"class":69},"sScJk","hf",[45,72,73],{"class":62}," auth",[45,75,76],{"class":62}," login",[45,78,80],{"class":79},"sj4cs"," --token",[45,82,83],{"class":62}," \"",[45,85,86],{"class":55},"$HF_TOKEN",[45,88,89],{"class":62},"\"",[45,91,92],{"class":79}," --add-to-git-credential\n",[20,94,95,98],{},[42,96,97],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[15,100,102],{"id":101},"_52-验证登录","5.2 验证登录",[36,104,106],{"className":38,"code":105,"language":40,"meta":25,"style":25},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[42,107,108,140],{"__ignoreMap":25},[45,109,110,113,115,118,120,122,125,128,131,134,137],{"class":47,"line":48},[45,111,112],{"class":55},"HF_USER",[45,114,59],{"class":51},[45,116,117],{"class":55},"$(",[45,119,70],{"class":69},[45,121,73],{"class":62},[45,123,124],{"class":62}," whoami",[45,126,127],{"class":51}," |",[45,129,130],{"class":69}," head",[45,132,133],{"class":79}," -n",[45,135,136],{"class":79}," 1",[45,138,139],{"class":55},")\n",[45,141,142,145,147,150],{"class":47,"line":66},[45,143,144],{"class":79},"echo",[45,146,83],{"class":62},[45,148,149],{"class":55},"$HF_USER",[45,151,152],{"class":62},"\"\n",[20,154,155],{},[23,156],{"alt":25,"src":157},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[15,159,161],{"id":160},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[20,163,164],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[166,167,168,172],"ul",{},[169,170,171],"li",{},"Dataset Repo（用于上传演示数据）",[169,173,174],{},"Model Repo（用于上传训练后的 ACT 权重）",[20,176,177],{},[23,178],{"alt":25,"src":179},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[20,181,182],{},[23,183],{"alt":25,"src":184},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[20,186,187],{},[23,188],{"alt":25,"src":189},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[20,191,192],{},[23,193],{"alt":25,"src":194},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[196,197,198],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html 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":25,"searchDepth":66,"depth":66,"links":200},[201,202,203],{"id":17,"depth":66,"text":18},{"id":101,"depth":66,"text":102},{"id":160,"depth":66,"text":161},null,"md",{},true,"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":5,"description":204},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",[213,5312,6420,7840,10828,12179,13668,14757,23520,23532,24129,24155,24279,24520,24585,24603,24616,24663,24787,24956,25155,25287,25492,25628,25723,25760,25773,26083,26824,27532,27553,28573,30204,30355,30368,30380,30681,50493,50508,50525,50558,53430,76778,92923,92944,93057,93178,93948,94611,94972,95010,95116,95216,95259,95285,95346,97000,97101,97126,97617,98117,99197,99480,100222,100724,100736,102752,104416,105919,107617,109534,111453,113475,116945,117377,117840,118589,121533,121881,121903,122259,125566,125578,125981,126004,126151,126318,126523,126824,127381,128038,129969,131567,132216,133710,135141,136376,138070,139822,142232,142348,143283,143494,144379,145614,145842,145855,147010,149422,151790,155111,157588,159232,161009,163022,166074,168254,170781,172975],{"id":214,"title":215,"body":216,"description":25,"extension":205,"meta":5307,"navigation":207,"path":5308,"seo":5309,"stem":5310,"__hash__":5311},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":217,"toc":5279},[218,221,225,228,232,244,248,253,256,259,262,265,268,295,299,302,305,308,311,362,366,384,386,400,403,411,414,1276,1283,1299,1303,1394,1398,1404,1493,1497,1535,1539,1603,1607,1611,1617,1628,1632,1637,1641,1646,1650,1655,1659,1663,1668,1938,1943,2081,2086,2342,2345,2353,2357,2362,2465,2468,2774,2783,2884,2887,2890,2893,2896,3156,3161,3301,3304,3483,3486,3614,3617,3769,3773,3778,3781,3792,3800,3803,3910,3914,3918,3923,3973,3978,3983,4007,4012,4065,4068,4073,4250,4255,4540,4545,4942,4946,4951,5008,5013,5021,5024,5164,5167,5276],[10,219,215],{"id":220},"_1基础入门",[15,222,224],{"id":223},"_11注释","1.1注释",[20,226,227],{},"\u002F\u002F或者\u002F* *\u002F",[15,229,231],{"id":230},"_12命名","1.2命名",[233,234,235,238,241],"ol",{},[169,236,237],{},"字母数字下划线",[169,239,240],{},"开头必须是字母或_",[169,242,243],{},"不能使用关键词",[15,245,247],{"id":246},"_13数据类型","1.3数据类型",[249,250,252],"h3",{"id":251},"_131整形","1.3.1整形",[20,254,255],{},"short 短整形 2",[20,257,258],{},"int 整形 4",[20,260,261],{},"long 长整形 win4 linux32位4 linux64位8",[20,263,264],{},"long long 长长整形 8",[20,266,267],{},"利用sizeof可以求数据类型占用的内存空间大小",[36,269,273],{"className":270,"code":271,"language":272,"meta":25,"style":25},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[42,274,275,288],{"__ignoreMap":25},[45,276,277,280,283,286],{"class":47,"line":48},[45,278,279],{"class":51},"sizeof",[45,281,282],{"class":55},"(",[45,284,285],{"class":51},"int",[45,287,139],{"class":55},[45,289,290,292],{"class":47,"line":66},[45,291,279],{"class":51},[45,293,294],{"class":55},"(num)\n",[249,296,298],{"id":297},"_132浮点型","1.3.2浮点型",[20,300,301],{},"float 单精度 4节 7位有效数字",[20,303,304],{},"double 双精度 8节 15-16有效数字",[20,306,307],{},"默认情况下，输出一个小数，会显示6位有效数字",[20,309,310],{},"注意点：",[36,312,314],{"className":270,"code":313,"language":272,"meta":25,"style":25},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[42,315,316,339],{"__ignoreMap":25},[45,317,318,321,324,326,329,332,335],{"class":47,"line":48},[45,319,320],{"class":51},"float",[45,322,323],{"class":55}," f1",[45,325,59],{"class":51},[45,327,328],{"class":79},"3.14",[45,330,331],{"class":51},"f",[45,333,334],{"class":55},";",[45,336,338],{"class":337},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[45,340,341,343,346,348,351,354,357,359],{"class":47,"line":66},[45,342,320],{"class":51},[45,344,345],{"class":55}," f2",[45,347,59],{"class":51},[45,349,350],{"class":79},"3",[45,352,353],{"class":51},"e",[45,355,356],{"class":79},"2",[45,358,334],{"class":55},[45,360,361],{"class":337}," \u002F\u002F科学记数法\n",[249,363,365],{"id":364},"_133字符型","1.3.3字符型",[36,367,369],{"className":270,"code":368,"language":272,"meta":25,"style":25},"char ch='a'\n",[42,370,371],{"__ignoreMap":25},[45,372,373,376,379,381],{"class":47,"line":48},[45,374,375],{"class":51},"char",[45,377,378],{"class":55}," ch",[45,380,59],{"class":51},[45,382,383],{"class":62},"'a'\n",[20,385,310],{},[233,387,388,391,394,397],{},[169,389,390],{},"在显示字符型变量时，只能单引号，双引号x",[169,392,393],{},"单引号内只能一个字符，不能字符串",[169,395,396],{},"c和c++字符型变量只占用一个字符",[169,398,399],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[20,401,402],{},"ASCII码大致由以下两部分组成：",[233,404,405,408],{},[169,406,407],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[169,409,410],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[20,412,413],{},"ASCII码表格：",[415,416,417,461],"table",{},[418,419,420],"thead",{},[421,422,423,431,436,440,445,449,453,457],"tr",{},[424,425,426,430],"th",{},[427,428,429],"strong",{},"ASCII","值",[424,432,433],{},[427,434,435],{},"控制字符",[424,437,438,430],{},[427,439,429],{},[424,441,442],{},[427,443,444],{},"字符",[424,446,447,430],{},[427,448,429],{},[424,450,451],{},[427,452,444],{},[424,454,455,430],{},[427,456,429],{},[424,458,459],{},[427,460,444],{},[462,463,464,491,517,541,566,592,617,642,668,693,719,745,771,796,822,848,874,898,923,948,973,998,1023,1048,1073,1098,1123,1149,1174,1199,1224,1250],"tbody",{},[421,465,466,470,473,476,479,482,485,488],{},[467,468,469],"td",{},"0",[467,471,472],{},"NUT",[467,474,475],{},"32",[467,477,478],{},"(space)",[467,480,481],{},"64",[467,483,484],{},"@",[467,486,487],{},"96",[467,489,490],{},"、",[421,492,493,496,499,502,505,508,511,514],{},[467,494,495],{},"1",[467,497,498],{},"SOH",[467,500,501],{},"33",[467,503,504],{},"!",[467,506,507],{},"65",[467,509,510],{},"A",[467,512,513],{},"97",[467,515,516],{},"a",[421,518,519,521,524,527,529,532,535,538],{},[467,520,356],{},[467,522,523],{},"STX",[467,525,526],{},"34",[467,528,89],{},[467,530,531],{},"66",[467,533,534],{},"B",[467,536,537],{},"98",[467,539,540],{},"b",[421,542,543,545,548,551,554,557,560,563],{},[467,544,350],{},[467,546,547],{},"ETX",[467,549,550],{},"35",[467,552,553],{},"#",[467,555,556],{},"67",[467,558,559],{},"C",[467,561,562],{},"99",[467,564,565],{},"c",[421,567,568,571,574,577,580,583,586,589],{},[467,569,570],{},"4",[467,572,573],{},"EOT",[467,575,576],{},"36",[467,578,579],{},"$",[467,581,582],{},"68",[467,584,585],{},"D",[467,587,588],{},"100",[467,590,591],{},"d",[421,593,594,597,600,603,606,609,612,615],{},[467,595,596],{},"5",[467,598,599],{},"ENQ",[467,601,602],{},"37",[467,604,605],{},"%",[467,607,608],{},"69",[467,610,611],{},"E",[467,613,614],{},"101",[467,616,353],{},[421,618,619,622,625,628,631,634,637,640],{},[467,620,621],{},"6",[467,623,624],{},"ACK",[467,626,627],{},"38",[467,629,630],{},"&",[467,632,633],{},"70",[467,635,636],{},"F",[467,638,639],{},"102",[467,641,331],{},[421,643,644,647,650,653,656,659,662,665],{},[467,645,646],{},"7",[467,648,649],{},"BEL",[467,651,652],{},"39",[467,654,655],{},",",[467,657,658],{},"71",[467,660,661],{},"G",[467,663,664],{},"103",[467,666,667],{},"g",[421,669,670,673,676,679,681,684,687,690],{},[467,671,672],{},"8",[467,674,675],{},"BS",[467,677,678],{},"40",[467,680,282],{},[467,682,683],{},"72",[467,685,686],{},"H",[467,688,689],{},"104",[467,691,692],{},"h",[421,694,695,698,701,704,707,710,713,716],{},[467,696,697],{},"9",[467,699,700],{},"HT",[467,702,703],{},"41",[467,705,706],{},")",[467,708,709],{},"73",[467,711,712],{},"I",[467,714,715],{},"105",[467,717,718],{},"i",[421,720,721,724,727,730,733,736,739,742],{},[467,722,723],{},"10",[467,725,726],{},"LF",[467,728,729],{},"42",[467,731,732],{},"*",[467,734,735],{},"74",[467,737,738],{},"J",[467,740,741],{},"106",[467,743,744],{},"j",[421,746,747,750,753,756,759,762,765,768],{},[467,748,749],{},"11",[467,751,752],{},"VT",[467,754,755],{},"43",[467,757,758],{},"+",[467,760,761],{},"75",[467,763,764],{},"K",[467,766,767],{},"107",[467,769,770],{},"k",[421,772,773,776,779,782,784,787,790,793],{},[467,774,775],{},"12",[467,777,778],{},"FF",[467,780,781],{},"44",[467,783,655],{},[467,785,786],{},"76",[467,788,789],{},"L",[467,791,792],{},"108",[467,794,795],{},"l",[421,797,798,801,804,807,810,813,816,819],{},[467,799,800],{},"13",[467,802,803],{},"CR",[467,805,806],{},"45",[467,808,809],{},"-",[467,811,812],{},"77",[467,814,815],{},"M",[467,817,818],{},"109",[467,820,821],{},"m",[421,823,824,827,830,833,836,839,842,845],{},[467,825,826],{},"14",[467,828,829],{},"SO",[467,831,832],{},"46",[467,834,835],{},".",[467,837,838],{},"78",[467,840,841],{},"N",[467,843,844],{},"110",[467,846,847],{},"n",[421,849,850,853,856,859,862,865,868,871],{},[467,851,852],{},"15",[467,854,855],{},"SI",[467,857,858],{},"47",[467,860,861],{},"\u002F",[467,863,864],{},"79",[467,866,867],{},"O",[467,869,870],{},"111",[467,872,873],{},"o",[421,875,876,879,882,885,887,890,893,896],{},[467,877,878],{},"16",[467,880,881],{},"DLE",[467,883,884],{},"48",[467,886,469],{},[467,888,889],{},"80",[467,891,892],{},"P",[467,894,895],{},"112",[467,897,20],{},[421,899,900,903,906,909,911,914,917,920],{},[467,901,902],{},"17",[467,904,905],{},"DCI",[467,907,908],{},"49",[467,910,495],{},[467,912,913],{},"81",[467,915,916],{},"Q",[467,918,919],{},"113",[467,921,922],{},"q",[421,924,925,928,931,934,936,939,942,945],{},[467,926,927],{},"18",[467,929,930],{},"DC2",[467,932,933],{},"50",[467,935,356],{},[467,937,938],{},"82",[467,940,941],{},"R",[467,943,944],{},"114",[467,946,947],{},"r",[421,949,950,953,956,959,961,964,967,970],{},[467,951,952],{},"19",[467,954,955],{},"DC3",[467,957,958],{},"51",[467,960,350],{},[467,962,963],{},"83",[467,965,966],{},"S",[467,968,969],{},"115",[467,971,972],{},"s",[421,974,975,978,981,984,986,989,992,995],{},[467,976,977],{},"20",[467,979,980],{},"DC4",[467,982,983],{},"52",[467,985,570],{},[467,987,988],{},"84",[467,990,991],{},"T",[467,993,994],{},"116",[467,996,997],{},"t",[421,999,1000,1003,1006,1009,1011,1014,1017,1020],{},[467,1001,1002],{},"21",[467,1004,1005],{},"NAK",[467,1007,1008],{},"53",[467,1010,596],{},[467,1012,1013],{},"85",[467,1015,1016],{},"U",[467,1018,1019],{},"117",[467,1021,1022],{},"u",[421,1024,1025,1028,1031,1034,1036,1039,1042,1045],{},[467,1026,1027],{},"22",[467,1029,1030],{},"SYN",[467,1032,1033],{},"54",[467,1035,621],{},[467,1037,1038],{},"86",[467,1040,1041],{},"V",[467,1043,1044],{},"118",[467,1046,1047],{},"v",[421,1049,1050,1053,1056,1059,1061,1064,1067,1070],{},[467,1051,1052],{},"23",[467,1054,1055],{},"TB",[467,1057,1058],{},"55",[467,1060,646],{},[467,1062,1063],{},"87",[467,1065,1066],{},"W",[467,1068,1069],{},"119",[467,1071,1072],{},"w",[421,1074,1075,1078,1081,1084,1086,1089,1092,1095],{},[467,1076,1077],{},"24",[467,1079,1080],{},"CAN",[467,1082,1083],{},"56",[467,1085,672],{},[467,1087,1088],{},"88",[467,1090,1091],{},"X",[467,1093,1094],{},"120",[467,1096,1097],{},"x",[421,1099,1100,1103,1106,1109,1111,1114,1117,1120],{},[467,1101,1102],{},"25",[467,1104,1105],{},"EM",[467,1107,1108],{},"57",[467,1110,697],{},[467,1112,1113],{},"89",[467,1115,1116],{},"Y",[467,1118,1119],{},"121",[467,1121,1122],{},"y",[421,1124,1125,1128,1131,1134,1137,1140,1143,1146],{},[467,1126,1127],{},"26",[467,1129,1130],{},"SUB",[467,1132,1133],{},"58",[467,1135,1136],{},":",[467,1138,1139],{},"90",[467,1141,1142],{},"Z",[467,1144,1145],{},"122",[467,1147,1148],{},"z",[421,1150,1151,1154,1157,1160,1162,1165,1168,1171],{},[467,1152,1153],{},"27",[467,1155,1156],{},"ESC",[467,1158,1159],{},"59",[467,1161,334],{},[467,1163,1164],{},"91",[467,1166,1167],{},"[",[467,1169,1170],{},"123",[467,1172,1173],{},"{",[421,1175,1176,1179,1182,1185,1188,1191,1193,1196],{},[467,1177,1178],{},"28",[467,1180,1181],{},"FS",[467,1183,1184],{},"60",[467,1186,1187],{},"\u003C",[467,1189,1190],{},"92",[467,1192,861],{},[467,1194,1195],{},"124",[467,1197,1198],{},"|",[421,1200,1201,1204,1207,1210,1212,1215,1218,1221],{},[467,1202,1203],{},"29",[467,1205,1206],{},"GS",[467,1208,1209],{},"61",[467,1211,59],{},[467,1213,1214],{},"93",[467,1216,1217],{},"]",[467,1219,1220],{},"125",[467,1222,1223],{},"}",[421,1225,1226,1229,1232,1235,1238,1241,1244,1247],{},[467,1227,1228],{},"30",[467,1230,1231],{},"RS",[467,1233,1234],{},"62",[467,1236,1237],{},">",[467,1239,1240],{},"94",[467,1242,1243],{},"^",[467,1245,1246],{},"126",[467,1248,1249],{},"`",[421,1251,1252,1255,1258,1261,1264,1267,1270,1273],{},[467,1253,1254],{},"31",[467,1256,1257],{},"US",[467,1259,1260],{},"63",[467,1262,1263],{},"?",[467,1265,1266],{},"95",[467,1268,1269],{},"_",[467,1271,1272],{},"127",[467,1274,1275],{},"DEL",[20,1277,1278,1279,1282],{},"ASCII 码大致由以下",[427,1280,1281],{},"两部分组","成：",[166,1284,1285,1292],{},[169,1286,1287,1288,1291],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[427,1289,1290],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[169,1293,1294,1295,1298],{},"ASCII 打印字符：数字 ",[427,1296,1297],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[249,1300,1302],{"id":1301},"_134转义字符","1.3.4转义字符",[36,1304,1306],{"className":270,"code":1305,"language":272,"meta":25,"style":25},"\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",[42,1307,1308,1313,1329,1344,1350,1364,1370],{"__ignoreMap":25},[45,1309,1310],{"class":47,"line":48},[45,1311,1312],{"class":337},"\u002F\u002F换行符\n",[45,1314,1315,1318,1321,1324,1326],{"class":47,"line":66},[45,1316,1317],{"class":55},"cout ",[45,1319,1320],{"class":51},"\u003C\u003C",[45,1322,1323],{"class":62},"\"hello world\u002Fn\"",[45,1325,334],{"class":55},[45,1327,1328],{"class":337}," \u002F\u002F就等同于如下：\n",[45,1330,1332,1334,1336,1339,1341],{"class":47,"line":1331},3,[45,1333,1317],{"class":55},[45,1335,1320],{"class":51},[45,1337,1338],{"class":62},"\"hello world\"",[45,1340,1320],{"class":51},[45,1342,1343],{"class":55},"endl;\n",[45,1345,1347],{"class":47,"line":1346},4,[45,1348,1349],{"class":337},"\u002F\u002F反斜杠\n",[45,1351,1353,1355,1357,1360,1362],{"class":47,"line":1352},5,[45,1354,1317],{"class":55},[45,1356,1320],{"class":51},[45,1358,1359],{"class":62},"\"\u002F\u002F\"",[45,1361,1320],{"class":51},[45,1363,1343],{"class":55},[45,1365,1367],{"class":47,"line":1366},6,[45,1368,1369],{"class":337},"\u002F\u002F水平制表符\n",[45,1371,1373,1375,1377,1380,1383,1386,1388,1391],{"class":47,"line":1372},7,[45,1374,1317],{"class":55},[45,1376,1320],{"class":51},[45,1378,1379],{"class":62},"\"aaaa",[45,1381,1382],{"class":79},"\\t",[45,1384,1385],{"class":62},"helloworld\"",[45,1387,1320],{"class":51},[45,1389,1390],{"class":55},"endl;",[45,1392,1393],{"class":337}," \u002F\u002F输出窗口时有对齐效果\n",[249,1395,1397],{"id":1396},"_135字符串型","1.3.5字符串型",[20,1399,1400,1401,1403],{},"char 变量名",[45,1402],{},"=\"字符串值\"",[36,1405,1407],{"className":270,"code":1406,"language":272,"meta":25,"style":25},"\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",[42,1408,1409,1414,1419,1424,1429,1443,1456,1461,1467,1479],{"__ignoreMap":25},[45,1410,1411],{"class":47,"line":48},[45,1412,1413],{"class":337},"\u002F\u002Fc风格字符串\n",[45,1415,1416],{"class":47,"line":66},[45,1417,1418],{"class":337},"\u002F\u002F注意事项：\n",[45,1420,1421],{"class":47,"line":1331},[45,1422,1423],{"class":337},"\u002F\u002F1.char字符串名[]\n",[45,1425,1426],{"class":47,"line":1346},[45,1427,1428],{"class":337},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[45,1430,1431,1433,1436,1438,1440],{"class":47,"line":1352},[45,1432,375],{"class":51},[45,1434,1435],{"class":55}," str[]",[45,1437,59],{"class":51},[45,1439,1338],{"class":62},[45,1441,1442],{"class":55},";\n",[45,1444,1445,1447,1449,1452,1454],{"class":47,"line":1366},[45,1446,1317],{"class":55},[45,1448,1320],{"class":51},[45,1450,1451],{"class":55},"str",[45,1453,1320],{"class":51},[45,1455,1343],{"class":55},[45,1457,1458],{"class":47,"line":1372},[45,1459,1460],{"class":337},"\u002F\u002Fc++风格字符串\n",[45,1462,1464],{"class":47,"line":1463},8,[45,1465,1466],{"class":337},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[45,1468,1470,1473,1475,1477],{"class":47,"line":1469},9,[45,1471,1472],{"class":55},"string str2",[45,1474,59],{"class":51},[45,1476,1338],{"class":62},[45,1478,1442],{"class":55},[45,1480,1482,1484,1486,1489,1491],{"class":47,"line":1481},10,[45,1483,1317],{"class":55},[45,1485,1320],{"class":51},[45,1487,1488],{"class":55},"str2",[45,1490,1320],{"class":51},[45,1492,1343],{"class":55},[249,1494,1496],{"id":1495},"_136布尔类型bool","1.3.6布尔类型bool",[36,1498,1500],{"className":270,"code":1499,"language":272,"meta":25,"style":25},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[42,1501,1502,1517],{"__ignoreMap":25},[45,1503,1504,1507,1510,1512,1515],{"class":47,"line":48},[45,1505,1506],{"class":51},"bool",[45,1508,1509],{"class":55}," flag",[45,1511,59],{"class":51},[45,1513,1514],{"class":79},"true",[45,1516,1442],{"class":55},[45,1518,1519,1522,1525,1528,1530,1532],{"class":47,"line":66},[45,1520,1521],{"class":55},"cout",[45,1523,1524],{"class":51},"\u003C\u003Csizeof",[45,1526,1527],{"class":55},"(flag)",[45,1529,1320],{"class":51},[45,1531,1390],{"class":55},[45,1533,1534],{"class":337}," \u002F\u002F查看布尔占内存空间\n",[15,1536,1538],{"id":1537},"_14键盘输入cin","1.4键盘输入cin",[36,1540,1542],{"className":270,"code":1541,"language":272,"meta":25,"style":25},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[42,1543,1544,1557,1574,1585],{"__ignoreMap":25},[45,1545,1546,1548,1551,1553,1555],{"class":47,"line":48},[45,1547,285],{"class":51},[45,1549,1550],{"class":55}," a",[45,1552,59],{"class":51},[45,1554,469],{"class":79},[45,1556,1442],{"class":55},[45,1558,1559,1561,1563,1566,1568,1570,1572],{"class":47,"line":66},[45,1560,1521],{"class":55},[45,1562,1320],{"class":51},[45,1564,1565],{"class":62},"\"请给整型变量a赋值\"",[45,1567,1320],{"class":51},[45,1569,516],{"class":55},[45,1571,1320],{"class":51},[45,1573,1343],{"class":55},[45,1575,1576,1579,1582],{"class":47,"line":1331},[45,1577,1578],{"class":55},"cin ",[45,1580,1581],{"class":51},">>",[45,1583,1584],{"class":55}," a;\n",[45,1586,1587,1589,1591,1594,1597,1599,1601],{"class":47,"line":1346},[45,1588,1317],{"class":55},[45,1590,1320],{"class":51},[45,1592,1593],{"class":62}," \"整型变量a=\"",[45,1595,1596],{"class":51}," \u003C\u003C",[45,1598,516],{"class":55},[45,1600,1320],{"class":51},[45,1602,1343],{"class":55},[15,1604,1606],{"id":1605},"_15运算符","1.5运算符",[249,1608,1610],{"id":1609},"_151算术运算符","1.5.1算术运算符",[20,1612,1613,1616],{},[23,1614],{"alt":25,"src":1615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[233,1618,1619,1622,1625],{},[169,1620,1621],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[169,1623,1624],{},"两个小数不可以做取模运算",[169,1626,1627],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[249,1629,1631],{"id":1630},"_152赋值运算符","1.5.2赋值运算符",[20,1633,1634],{},[23,1635],{"alt":25,"src":1636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[249,1638,1640],{"id":1639},"_153比较运算符","1.5.3比较运算符",[20,1642,1643],{},[23,1644],{"alt":25,"src":1645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[249,1647,1649],{"id":1648},"_154逻辑运算符","1.5.4逻辑运算符",[20,1651,1652],{},[23,1653],{"alt":25,"src":1654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[15,1656,1658],{"id":1657},"_16程序流程结构","1.6程序流程结构",[249,1660,1662],{"id":1661},"_161选择结构","1.6.1选择结构",[233,1664,1665],{},[169,1666,1667],{},"if语句\n单行、多行、多条件if语句",[36,1669,1671],{"className":270,"code":1670,"language":272,"meta":25,"style":25},"\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",[42,1672,1673,1678,1693,1698,1712,1717,1722,1731,1744,1748,1761,1766,1772,1777,1791,1796,1802,1823,1828,1842,1847,1876,1881,1898,1903,1908,1913,1927,1932],{"__ignoreMap":25},[45,1674,1675],{"class":47,"line":48},[45,1676,1677],{"class":337},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[45,1679,1680,1683,1686,1688,1691],{"class":47,"line":66},[45,1681,1682],{"class":51},"if",[45,1684,1685],{"class":55},"(score",[45,1687,1237],{"class":51},[45,1689,1690],{"class":79},"600",[45,1692,139],{"class":55},[45,1694,1695],{"class":47,"line":1331},[45,1696,1697],{"class":55},"{\n",[45,1699,1700,1703,1705,1708,1710],{"class":47,"line":1346},[45,1701,1702],{"class":55},"    cout",[45,1704,1320],{"class":51},[45,1706,1707],{"class":62},"'这是单行if语句'",[45,1709,1320],{"class":51},[45,1711,1343],{"class":55},[45,1713,1714],{"class":47,"line":1352},[45,1715,1716],{"class":55},"}\n",[45,1718,1719],{"class":47,"line":1366},[45,1720,1721],{"class":337},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[45,1723,1724,1726,1728],{"class":47,"line":1372},[45,1725,1578],{"class":55},[45,1727,1581],{"class":51},[45,1729,1730],{"class":55}," score\n",[45,1732,1733,1735,1737,1740,1742],{"class":47,"line":1463},[45,1734,1682],{"class":51},[45,1736,1685],{"class":55},[45,1738,1739],{"class":51},"\u003C=",[45,1741,1690],{"class":79},[45,1743,139],{"class":55},[45,1745,1746],{"class":47,"line":1469},[45,1747,1697],{"class":55},[45,1749,1750,1752,1754,1757,1759],{"class":47,"line":1481},[45,1751,1702],{"class":55},[45,1753,1581],{"class":51},[45,1755,1756],{"class":62},"\"小于等于600\"",[45,1758,1320],{"class":51},[45,1760,1343],{"class":55},[45,1762,1764],{"class":47,"line":1763},11,[45,1765,1716],{"class":55},[45,1767,1769],{"class":47,"line":1768},12,[45,1770,1771],{"class":51},"else\n",[45,1773,1775],{"class":47,"line":1774},13,[45,1776,1697],{"class":55},[45,1778,1780,1782,1784,1787,1789],{"class":47,"line":1779},14,[45,1781,1702],{"class":55},[45,1783,1581],{"class":51},[45,1785,1786],{"class":62},"\"大于600\"",[45,1788,1581],{"class":51},[45,1790,1343],{"class":55},[45,1792,1794],{"class":47,"line":1793},15,[45,1795,1716],{"class":55},[45,1797,1799],{"class":47,"line":1798},16,[45,1800,1801],{"class":337},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[45,1803,1805,1807,1810,1812,1814,1817,1819,1821],{"class":47,"line":1804},17,[45,1806,1682],{"class":51},[45,1808,1809],{"class":55}," (",[45,1811,469],{"class":79},[45,1813,1187],{"class":51},[45,1815,1816],{"class":55},"num",[45,1818,1187],{"class":51},[45,1820,588],{"class":79},[45,1822,139],{"class":55},[45,1824,1826],{"class":47,"line":1825},18,[45,1827,1697],{"class":55},[45,1829,1831,1833,1835,1838,1840],{"class":47,"line":1830},19,[45,1832,1702],{"class":55},[45,1834,1320],{"class":51},[45,1836,1837],{"class":62},"\"小于100\"",[45,1839,1320],{"class":51},[45,1841,1343],{"class":55},[45,1843,1845],{"class":47,"line":1844},20,[45,1846,1716],{"class":55},[45,1848,1850,1853,1856,1859,1862,1864,1867,1869,1871,1874],{"class":47,"line":1849},21,[45,1851,1852],{"class":51},"else",[45,1854,1855],{"class":51}," if",[45,1857,1858],{"class":55}," (nmu",[45,1860,1861],{"class":51},">=",[45,1863,588],{"class":79},[45,1865,1866],{"class":51},"&&",[45,1868,1816],{"class":55},[45,1870,1187],{"class":51},[45,1872,1873],{"class":79},"200",[45,1875,139],{"class":55},[45,1877,1879],{"class":47,"line":1878},22,[45,1880,1697],{"class":55},[45,1882,1884,1886,1888,1891,1893,1895],{"class":47,"line":1883},23,[45,1885,1702],{"class":55},[45,1887,1320],{"class":51},[45,1889,1890],{"class":62},"\"不小于100且小于200\"",[45,1892,1320],{"class":51},[45,1894,1390],{"class":55},[45,1896,1897],{"class":337}," \u002F\u002F可以无限else if,python中是elif：\n",[45,1899,1901],{"class":47,"line":1900},24,[45,1902,1716],{"class":55},[45,1904,1906],{"class":47,"line":1905},25,[45,1907,1771],{"class":51},[45,1909,1911],{"class":47,"line":1910},26,[45,1912,1697],{"class":55},[45,1914,1916,1918,1920,1923,1925],{"class":47,"line":1915},27,[45,1917,1702],{"class":55},[45,1919,1320],{"class":51},[45,1921,1922],{"class":62},"\"不小于200\"",[45,1924,1320],{"class":51},[45,1926,1343],{"class":55},[45,1928,1930],{"class":47,"line":1929},28,[45,1931,1716],{"class":55},[45,1933,1935],{"class":47,"line":1934},29,[45,1936,1937],{"class":337},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[233,1939,1940],{"start":66},[169,1941,1942],{},"三目运算符",[36,1944,1946],{"className":270,"code":1945,"language":272,"meta":25,"style":25},"\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",[42,1947,1948,1953,1958,1984,2006,2023,2028,2051,2066],{"__ignoreMap":25},[45,1949,1950],{"class":47,"line":48},[45,1951,1952],{"class":337},"\u002F\u002F创建三个变量a,b,c\n",[45,1954,1955],{"class":47,"line":66},[45,1956,1957],{"class":337},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[45,1959,1960,1962,1964,1966,1968,1971,1973,1975,1978,1980,1982],{"class":47,"line":1331},[45,1961,285],{"class":51},[45,1963,1550],{"class":55},[45,1965,59],{"class":51},[45,1967,977],{"class":79},[45,1969,1970],{"class":55},",b",[45,1972,59],{"class":51},[45,1974,723],{"class":79},[45,1976,1977],{"class":55},",c",[45,1979,59],{"class":51},[45,1981,469],{"class":79},[45,1983,1442],{"class":55},[45,1985,1986,1988,1990,1993,1995,1997,1999,2001,2003],{"class":47,"line":1346},[45,1987,565],{"class":55},[45,1989,59],{"class":51},[45,1991,1992],{"class":55},"(a",[45,1994,1237],{"class":51},[45,1996,540],{"class":55},[45,1998,1263],{"class":51},[45,2000,516],{"class":55},[45,2002,1136],{"class":51},[45,2004,2005],{"class":55},"b)\n",[45,2007,2008,2010,2012,2015,2017,2019,2021],{"class":47,"line":1352},[45,2009,1521],{"class":55},[45,2011,1320],{"class":51},[45,2013,2014],{"class":62},"\"c=\"",[45,2016,1320],{"class":51},[45,2018,565],{"class":55},[45,2020,1320],{"class":51},[45,2022,1343],{"class":55},[45,2024,2025],{"class":47,"line":1366},[45,2026,2027],{"class":337},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[45,2029,2030,2032,2034,2036,2038,2040,2042,2045,2047,2049],{"class":47,"line":1372},[45,2031,1992],{"class":55},[45,2033,1237],{"class":51},[45,2035,540],{"class":55},[45,2037,1263],{"class":51},[45,2039,516],{"class":55},[45,2041,1136],{"class":51},[45,2043,2044],{"class":55},"b)",[45,2046,59],{"class":51},[45,2048,588],{"class":79},[45,2050,1442],{"class":55},[45,2052,2053,2055,2057,2059,2061,2063],{"class":47,"line":1463},[45,2054,1521],{"class":55},[45,2056,1320],{"class":51},[45,2058,516],{"class":55},[45,2060,1320],{"class":51},[45,2062,1390],{"class":55},[45,2064,2065],{"class":337}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[45,2067,2068,2070,2072,2074,2076,2078],{"class":47,"line":1469},[45,2069,1521],{"class":55},[45,2071,1320],{"class":51},[45,2073,540],{"class":55},[45,2075,1320],{"class":51},[45,2077,1390],{"class":55},[45,2079,2080],{"class":337}," \u002F\u002F10   a>b,b还是原值\n",[233,2082,2083],{"start":1331},[169,2084,2085],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[36,2087,2089],{"className":270,"code":2088,"language":272,"meta":25,"style":25},"\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",[42,2090,2091,2096,2104,2117,2127,2131,2145,2158,2168,2176,2181,2206,2227,2249,2270,2292,2313,2333,2338],{"__ignoreMap":25},[45,2092,2093],{"class":47,"line":48},[45,2094,2095],{"class":337},"\u002F\u002F案例-电影打分\n",[45,2097,2098,2101],{"class":47,"line":66},[45,2099,2100],{"class":51},"#include",[45,2102,2103],{"class":62},"\u003Ciostream>\n",[45,2105,2106,2109,2112,2115],{"class":47,"line":1331},[45,2107,2108],{"class":51},"using",[45,2110,2111],{"class":51}," namespace",[45,2113,2114],{"class":69}," std",[45,2116,1442],{"class":55},[45,2118,2119,2121,2124],{"class":47,"line":1346},[45,2120,285],{"class":51},[45,2122,2123],{"class":69}," main",[45,2125,2126],{"class":55},"()\n",[45,2128,2129],{"class":47,"line":1352},[45,2130,1697],{"class":55},[45,2132,2133,2136,2139,2141,2143],{"class":47,"line":1366},[45,2134,2135],{"class":51},"    int",[45,2137,2138],{"class":55}," score",[45,2140,59],{"class":51},[45,2142,469],{"class":79},[45,2144,1442],{"class":55},[45,2146,2147,2149,2151,2154,2156],{"class":47,"line":1372},[45,2148,1702],{"class":55},[45,2150,1320],{"class":51},[45,2152,2153],{"class":62},"\"电影打分：\"",[45,2155,1320],{"class":51},[45,2157,1343],{"class":55},[45,2159,2160,2163,2165],{"class":47,"line":1463},[45,2161,2162],{"class":55},"    cin",[45,2164,1581],{"class":51},[45,2166,2167],{"class":55},"score;\n",[45,2169,2170,2173],{"class":47,"line":1469},[45,2171,2172],{"class":51},"    switch",[45,2174,2175],{"class":55},"(score)\n",[45,2177,2178],{"class":47,"line":1481},[45,2179,2180],{"class":55},"    {\n",[45,2182,2183,2186,2189,2192,2194,2197,2199,2201,2204],{"class":47,"line":1763},[45,2184,2185],{"class":51},"        case",[45,2187,2188],{"class":79}," 10",[45,2190,2191],{"class":55},":cout",[45,2193,1320],{"class":51},[45,2195,2196],{"class":62},"\"经典\"",[45,2198,1320],{"class":51},[45,2200,1390],{"class":55},[45,2202,2203],{"class":51},"break",[45,2205,1442],{"class":55},[45,2207,2208,2210,2213,2215,2217,2219,2221,2223,2225],{"class":47,"line":1768},[45,2209,2185],{"class":51},[45,2211,2212],{"class":79}," 9",[45,2214,2191],{"class":55},[45,2216,1320],{"class":51},[45,2218,2196],{"class":62},[45,2220,1320],{"class":51},[45,2222,1390],{"class":55},[45,2224,2203],{"class":51},[45,2226,1442],{"class":55},[45,2228,2229,2231,2234,2236,2238,2241,2243,2245,2247],{"class":47,"line":1774},[45,2230,2185],{"class":51},[45,2232,2233],{"class":79}," 8",[45,2235,2191],{"class":55},[45,2237,1320],{"class":51},[45,2239,2240],{"class":62},"\"非常好\"",[45,2242,1320],{"class":51},[45,2244,1390],{"class":55},[45,2246,2203],{"class":51},[45,2248,1442],{"class":55},[45,2250,2251,2253,2256,2258,2260,2262,2264,2266,2268],{"class":47,"line":1779},[45,2252,2185],{"class":51},[45,2254,2255],{"class":79}," 7",[45,2257,2191],{"class":55},[45,2259,1320],{"class":51},[45,2261,2240],{"class":62},[45,2263,1320],{"class":51},[45,2265,1390],{"class":55},[45,2267,2203],{"class":51},[45,2269,1442],{"class":55},[45,2271,2272,2274,2277,2279,2281,2284,2286,2288,2290],{"class":47,"line":1793},[45,2273,2185],{"class":51},[45,2275,2276],{"class":79}," 6",[45,2278,2191],{"class":55},[45,2280,1320],{"class":51},[45,2282,2283],{"class":62},"\"一般\"",[45,2285,1320],{"class":51},[45,2287,1390],{"class":55},[45,2289,2203],{"class":51},[45,2291,1442],{"class":55},[45,2293,2294,2296,2299,2301,2303,2305,2307,2309,2311],{"class":47,"line":1798},[45,2295,2185],{"class":51},[45,2297,2298],{"class":79}," 5",[45,2300,2191],{"class":55},[45,2302,1320],{"class":51},[45,2304,2283],{"class":62},[45,2306,1320],{"class":51},[45,2308,1390],{"class":55},[45,2310,2203],{"class":51},[45,2312,1442],{"class":55},[45,2314,2315,2318,2320,2322,2325,2327,2329,2331],{"class":47,"line":1804},[45,2316,2317],{"class":51},"        default",[45,2319,2191],{"class":55},[45,2321,1320],{"class":51},[45,2323,2324],{"class":62},"\"烂片\"",[45,2326,1320],{"class":51},[45,2328,1390],{"class":55},[45,2330,2203],{"class":51},[45,2332,1442],{"class":55},[45,2334,2335],{"class":47,"line":1825},[45,2336,2337],{"class":55},"    }\n",[45,2339,2340],{"class":47,"line":1830},[45,2341,1716],{"class":55},[20,2343,2344],{},"if和switch区别：",[166,2346,2347,2350],{},[169,2348,2349],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[169,2351,2352],{},"switch优点：结构清晰，执行效率高",[249,2354,2356],{"id":2355},"_162循环结构","1.6.2循环结构",[233,2358,2359],{},[169,2360,2361],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[36,2363,2365],{"className":270,"code":2364,"language":272,"meta":25,"style":25},"\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",[42,2366,2367,2372,2380,2384,2397,2411,2415,2435,2445,2449,2461],{"__ignoreMap":25},[45,2368,2369],{"class":47,"line":48},[45,2370,2371],{"class":337},"\u002F\u002F打印0-9数字\n",[45,2373,2374,2376,2378],{"class":47,"line":66},[45,2375,285],{"class":51},[45,2377,2123],{"class":69},[45,2379,2126],{"class":55},[45,2381,2382],{"class":47,"line":1331},[45,2383,1697],{"class":55},[45,2385,2386,2388,2391,2393,2395],{"class":47,"line":1346},[45,2387,2135],{"class":51},[45,2389,2390],{"class":55}," num",[45,2392,59],{"class":51},[45,2394,469],{"class":79},[45,2396,1442],{"class":55},[45,2398,2399,2402,2405,2407,2409],{"class":47,"line":1352},[45,2400,2401],{"class":51},"    while",[45,2403,2404],{"class":55},"(num",[45,2406,1187],{"class":51},[45,2408,723],{"class":79},[45,2410,139],{"class":55},[45,2412,2413],{"class":47,"line":1366},[45,2414,2180],{"class":55},[45,2416,2417,2420,2423,2425,2427,2429,2432],{"class":47,"line":1372},[45,2418,2419],{"class":69},"       std",[45,2421,2422],{"class":55},"::cout",[45,2424,1320],{"class":51},[45,2426,1816],{"class":55},[45,2428,1320],{"class":51},[45,2430,2431],{"class":69},"std",[45,2433,2434],{"class":55},"::endl;\n",[45,2436,2437,2440,2443],{"class":47,"line":1463},[45,2438,2439],{"class":55},"        num",[45,2441,2442],{"class":51},"++",[45,2444,1442],{"class":55},[45,2446,2447],{"class":47,"line":1469},[45,2448,2337],{"class":55},[45,2450,2451,2454,2456,2459],{"class":47,"line":1481},[45,2452,2453],{"class":69},"    system",[45,2455,282],{"class":55},[45,2457,2458],{"class":62},"\"pause\"",[45,2460,139],{"class":55},[45,2462,2463],{"class":47,"line":1763},[45,2464,1716],{"class":55},[20,2466,2467],{},"注意：写好循环条件，避免死循环情况",[36,2469,2471],{"className":270,"code":2470,"language":272,"meta":25,"style":25},"\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",[42,2472,2473,2478,2485,2492,2502,2510,2514,2519,2546,2551,2556,2564,2591,2596,2601,2614,2624,2628,2638,2643,2656,2661,2675,2680,2695,2699,2712,2716,2721,2725,2739,2747,2752,2758,2764,2769],{"__ignoreMap":25},[45,2474,2475],{"class":47,"line":48},[45,2476,2477],{"class":337},"\u002F\u002F循环结构-猜数字\n",[45,2479,2480,2482],{"class":47,"line":66},[45,2481,2100],{"class":51},[45,2483,2484],{"class":62}," \u003Ciostream>\n",[45,2486,2487,2489],{"class":47,"line":1331},[45,2488,2100],{"class":51},[45,2490,2491],{"class":62}," \u003Cctime>\n",[45,2493,2494,2496,2498,2500],{"class":47,"line":1346},[45,2495,2108],{"class":51},[45,2497,2111],{"class":51},[45,2499,2114],{"class":69},[45,2501,1442],{"class":55},[45,2503,2504,2506,2508],{"class":47,"line":1352},[45,2505,285],{"class":51},[45,2507,2123],{"class":69},[45,2509,2126],{"class":55},[45,2511,2512],{"class":47,"line":1366},[45,2513,1697],{"class":55},[45,2515,2516],{"class":47,"line":1372},[45,2517,2518],{"class":337},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[45,2520,2521,2524,2527,2530,2533,2535,2538,2540,2543],{"class":47,"line":1463},[45,2522,2523],{"class":69},"    srand",[45,2525,2526],{"class":55},"((",[45,2528,2529],{"class":51},"unsigned",[45,2531,2532],{"class":51}," int",[45,2534,706],{"class":55},[45,2536,2537],{"class":69},"time",[45,2539,282],{"class":55},[45,2541,2542],{"class":79},"NULL",[45,2544,2545],{"class":55},"));\n",[45,2547,2548],{"class":47,"line":1469},[45,2549,2550],{"emptyLinePlaceholder":207},"\n",[45,2552,2553],{"class":47,"line":1481},[45,2554,2555],{"class":337},"    \u002F\u002F1.系统生成随机数\n",[45,2557,2558,2561],{"class":47,"line":1763},[45,2559,2560],{"class":337},"    \u002F\u002Frand()%100",[45,2562,2563],{"class":337}," \u002F\u002F生成0-99的随机数\n",[45,2565,2566,2568,2570,2572,2575,2578,2580,2582,2584,2586,2588],{"class":47,"line":1768},[45,2567,2135],{"class":51},[45,2569,2390],{"class":55},[45,2571,59],{"class":51},[45,2573,2574],{"class":69},"rand",[45,2576,2577],{"class":55},"()",[45,2579,605],{"class":51},[45,2581,588],{"class":79},[45,2583,758],{"class":51},[45,2585,495],{"class":79},[45,2587,334],{"class":55},[45,2589,2590],{"class":337}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[45,2592,2593],{"class":47,"line":1774},[45,2594,2595],{"class":337},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[45,2597,2598],{"class":47,"line":1779},[45,2599,2600],{"class":337},"    \u002F\u002F2.玩家猜测\n",[45,2602,2603,2605,2608,2610,2612],{"class":47,"line":1793},[45,2604,2135],{"class":51},[45,2606,2607],{"class":55}," val",[45,2609,59],{"class":51},[45,2611,469],{"class":79},[45,2613,1442],{"class":55},[45,2615,2616,2618,2620,2622],{"class":47,"line":1798},[45,2617,2401],{"class":51},[45,2619,1809],{"class":55},[45,2621,495],{"class":79},[45,2623,139],{"class":55},[45,2625,2626],{"class":47,"line":1804},[45,2627,2180],{"class":55},[45,2629,2630,2633,2635],{"class":47,"line":1825},[45,2631,2632],{"class":55},"        cin",[45,2634,1581],{"class":51},[45,2636,2637],{"class":55},"val;\n",[45,2639,2640],{"class":47,"line":1830},[45,2641,2642],{"class":337},"        \u002F\u002F3.判断玩家猜测\n",[45,2644,2645,2648,2651,2653],{"class":47,"line":1844},[45,2646,2647],{"class":51},"        if",[45,2649,2650],{"class":55},"(val",[45,2652,1187],{"class":51},[45,2654,2655],{"class":55},"num) \n",[45,2657,2658],{"class":47,"line":1849},[45,2659,2660],{"class":55},"        {\n",[45,2662,2663,2666,2668,2671,2673],{"class":47,"line":1878},[45,2664,2665],{"class":55},"            cout",[45,2667,1320],{"class":51},[45,2669,2670],{"class":62},"\"猜小了！\"",[45,2672,1320],{"class":51},[45,2674,1343],{"class":55},[45,2676,2677],{"class":47,"line":1883},[45,2678,2679],{"class":55},"        }\n",[45,2681,2682,2685,2687,2690,2692],{"class":47,"line":1900},[45,2683,2684],{"class":51},"        else",[45,2686,1855],{"class":51},[45,2688,2689],{"class":55}," (val",[45,2691,1237],{"class":51},[45,2693,2694],{"class":55},"num)\n",[45,2696,2697],{"class":47,"line":1905},[45,2698,2660],{"class":55},[45,2700,2701,2703,2705,2708,2710],{"class":47,"line":1910},[45,2702,2665],{"class":55},[45,2704,1320],{"class":51},[45,2706,2707],{"class":62},"\"猜大了！\"",[45,2709,1320],{"class":51},[45,2711,1343],{"class":55},[45,2713,2714],{"class":47,"line":1915},[45,2715,2679],{"class":55},[45,2717,2718],{"class":47,"line":1929},[45,2719,2720],{"class":51},"        else\n",[45,2722,2723],{"class":47,"line":1934},[45,2724,2660],{"class":55},[45,2726,2728,2730,2732,2735,2737],{"class":47,"line":2727},30,[45,2729,2665],{"class":55},[45,2731,1320],{"class":51},[45,2733,2734],{"class":62},"\"猜对了！\"",[45,2736,1320],{"class":51},[45,2738,1343],{"class":55},[45,2740,2742,2745],{"class":47,"line":2741},31,[45,2743,2744],{"class":51},"            break",[45,2746,1442],{"class":55},[45,2748,2750],{"class":47,"line":2749},32,[45,2751,2679],{"class":55},[45,2753,2755],{"class":47,"line":2754},33,[45,2756,2757],{"class":337},"        \u002F\u002F猜对 退出游戏\n",[45,2759,2761],{"class":47,"line":2760},34,[45,2762,2763],{"class":337},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[45,2765,2767],{"class":47,"line":2766},35,[45,2768,2337],{"class":55},[45,2770,2772],{"class":47,"line":2771},36,[45,2773,1716],{"class":55},[233,2775,2776],{"start":66},[169,2777,2778,2779,2782],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[427,2780,2781],{},"do...while会先执行一次循环语句","，在判断循环语句",[36,2784,2786],{"className":270,"code":2785,"language":272,"meta":25,"style":25},"\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",[42,2787,2788,2793,2801,2805,2817,2825,2829,2846,2853,2857,2870,2880],{"__ignoreMap":25},[45,2789,2790],{"class":47,"line":48},[45,2791,2792],{"class":337},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[45,2794,2795,2797,2799],{"class":47,"line":66},[45,2796,285],{"class":51},[45,2798,2123],{"class":69},[45,2800,2126],{"class":55},[45,2802,2803],{"class":47,"line":1331},[45,2804,1697],{"class":55},[45,2806,2807,2809,2811,2813,2815],{"class":47,"line":1346},[45,2808,2135],{"class":51},[45,2810,2390],{"class":55},[45,2812,59],{"class":51},[45,2814,469],{"class":79},[45,2816,1442],{"class":55},[45,2818,2819,2822],{"class":47,"line":1352},[45,2820,2821],{"class":51},"    do",[45,2823,2824],{"class":55}," \n",[45,2826,2827],{"class":47,"line":1366},[45,2828,2180],{"class":55},[45,2830,2831,2834,2836,2838,2840,2842,2844],{"class":47,"line":1372},[45,2832,2833],{"class":69},"        std",[45,2835,2422],{"class":55},[45,2837,1320],{"class":51},[45,2839,1816],{"class":55},[45,2841,1320],{"class":51},[45,2843,2431],{"class":69},[45,2845,2434],{"class":55},[45,2847,2848,2850],{"class":47,"line":1463},[45,2849,2439],{"class":55},[45,2851,2852],{"class":51},"++\n",[45,2854,2855],{"class":47,"line":1469},[45,2856,2337],{"class":55},[45,2858,2859,2861,2863,2865,2867],{"class":47,"line":1481},[45,2860,2401],{"class":51},[45,2862,2404],{"class":55},[45,2864,1187],{"class":51},[45,2866,723],{"class":79},[45,2868,2869],{"class":55},");\n",[45,2871,2872,2874,2876,2878],{"class":47,"line":1763},[45,2873,2453],{"class":69},[45,2875,282],{"class":55},[45,2877,2458],{"class":62},[45,2879,2869],{"class":55},[45,2881,2882],{"class":47,"line":1768},[45,2883,1716],{"class":55},[20,2885,2886],{},"案例-水仙花数",[20,2888,2889],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[20,2891,2892],{},"例如：1^3+5^3+3^3=153",[20,2894,2895],{},"请用do...while语句，求出所有3位数的水仙花数",[36,2897,2899],{"className":270,"code":2898,"language":272,"meta":25,"style":25},"#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",[42,2900,2901,2907,2917,2925,2929,2934,2946,2952,2956,2961,2977,2993,3009,3024,3043,3058,3106,3110,3122,3126,3134,3138,3152],{"__ignoreMap":25},[45,2902,2903,2905],{"class":47,"line":48},[45,2904,2100],{"class":51},[45,2906,2484],{"class":62},[45,2908,2909,2911,2913,2915],{"class":47,"line":66},[45,2910,2108],{"class":51},[45,2912,2111],{"class":51},[45,2914,2114],{"class":69},[45,2916,1442],{"class":55},[45,2918,2919,2921,2923],{"class":47,"line":1331},[45,2920,285],{"class":51},[45,2922,2123],{"class":69},[45,2924,2126],{"class":55},[45,2926,2927],{"class":47,"line":1346},[45,2928,1697],{"class":55},[45,2930,2931],{"class":47,"line":1352},[45,2932,2933],{"class":337},"    \u002F\u002F1.先打印所有三位数字\n",[45,2935,2936,2938,2940,2942,2944],{"class":47,"line":1366},[45,2937,2135],{"class":51},[45,2939,2390],{"class":55},[45,2941,59],{"class":51},[45,2943,588],{"class":79},[45,2945,1442],{"class":55},[45,2947,2948,2950],{"class":47,"line":1372},[45,2949,2821],{"class":51},[45,2951,2824],{"class":55},[45,2953,2954],{"class":47,"line":1463},[45,2955,2180],{"class":55},[45,2957,2958],{"class":47,"line":1469},[45,2959,2960],{"class":337},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[45,2962,2963,2966,2968,2970,2972,2974],{"class":47,"line":1481},[45,2964,2965],{"class":51},"        int",[45,2967,1550],{"class":55},[45,2969,59],{"class":51},[45,2971,469],{"class":79},[45,2973,334],{"class":55},[45,2975,2976],{"class":337}," \u002F\u002F个位\n",[45,2978,2979,2981,2984,2986,2988,2990],{"class":47,"line":1763},[45,2980,2965],{"class":51},[45,2982,2983],{"class":55}," b",[45,2985,59],{"class":51},[45,2987,469],{"class":79},[45,2989,334],{"class":55},[45,2991,2992],{"class":337}," \u002F\u002F十位\n",[45,2994,2995,2997,3000,3002,3004,3006],{"class":47,"line":1768},[45,2996,2965],{"class":51},[45,2998,2999],{"class":55}," c",[45,3001,59],{"class":51},[45,3003,469],{"class":79},[45,3005,334],{"class":55},[45,3007,3008],{"class":337}," \u002F\u002F百位\n",[45,3010,3011,3014,3016,3018,3020,3022],{"class":47,"line":1774},[45,3012,3013],{"class":55},"        a",[45,3015,59],{"class":51},[45,3017,1816],{"class":55},[45,3019,605],{"class":51},[45,3021,723],{"class":79},[45,3023,1442],{"class":55},[45,3025,3026,3029,3031,3033,3035,3037,3039,3041],{"class":47,"line":1779},[45,3027,3028],{"class":55},"        b",[45,3030,59],{"class":51},[45,3032,1816],{"class":55},[45,3034,861],{"class":51},[45,3036,723],{"class":79},[45,3038,605],{"class":51},[45,3040,723],{"class":79},[45,3042,1442],{"class":55},[45,3044,3045,3048,3050,3052,3054,3056],{"class":47,"line":1793},[45,3046,3047],{"class":55},"        c",[45,3049,59],{"class":51},[45,3051,1816],{"class":55},[45,3053,861],{"class":51},[45,3055,588],{"class":79},[45,3057,1442],{"class":55},[45,3059,3060,3062,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082,3084,3086,3088,3090,3092,3094,3097,3100,3103],{"class":47,"line":1798},[45,3061,2647],{"class":51},[45,3063,1992],{"class":55},[45,3065,732],{"class":51},[45,3067,516],{"class":55},[45,3069,732],{"class":51},[45,3071,516],{"class":55},[45,3073,758],{"class":51},[45,3075,540],{"class":55},[45,3077,732],{"class":51},[45,3079,540],{"class":55},[45,3081,732],{"class":51},[45,3083,540],{"class":55},[45,3085,758],{"class":51},[45,3087,565],{"class":55},[45,3089,732],{"class":51},[45,3091,565],{"class":55},[45,3093,732],{"class":51},[45,3095,3096],{"class":55},"c ",[45,3098,3099],{"class":51},"==",[45,3101,3102],{"class":55}," num)",[45,3104,3105],{"class":337}," \u002F\u002F如果是水仙花数，才打印\n",[45,3107,3108],{"class":47,"line":1804},[45,3109,2660],{"class":55},[45,3111,3112,3114,3116,3118,3120],{"class":47,"line":1825},[45,3113,2665],{"class":55},[45,3115,1320],{"class":51},[45,3117,1816],{"class":55},[45,3119,1320],{"class":51},[45,3121,1343],{"class":55},[45,3123,3124],{"class":47,"line":1830},[45,3125,2679],{"class":55},[45,3127,3128,3130,3132],{"class":47,"line":1844},[45,3129,2439],{"class":55},[45,3131,2442],{"class":51},[45,3133,1442],{"class":55},[45,3135,3136],{"class":47,"line":1849},[45,3137,2337],{"class":55},[45,3139,3140,3142,3145,3147,3150],{"class":47,"line":1878},[45,3141,2401],{"class":51},[45,3143,3144],{"class":55}," (num ",[45,3146,1187],{"class":51},[45,3148,3149],{"class":79}," 1000",[45,3151,2869],{"class":55},[45,3153,3154],{"class":47,"line":1883},[45,3155,1716],{"class":55},[233,3157,3158],{"start":1331},[169,3159,3160],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[36,3162,3164],{"className":270,"code":3163,"language":272,"meta":25,"style":25},"\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",[42,3165,3166,3171,3200,3204,3216,3220,3225,3236,3243,3247,3261,3265,3272,3276,3288,3297],{"__ignoreMap":25},[45,3167,3168],{"class":47,"line":48},[45,3169,3170],{"class":337},"\u002F\u002F从数字0-9打印\n",[45,3172,3173,3176,3178,3180,3183,3185,3187,3190,3192,3194,3196,3198],{"class":47,"line":66},[45,3174,3175],{"class":51},"for",[45,3177,282],{"class":55},[45,3179,285],{"class":51},[45,3181,3182],{"class":55}," i",[45,3184,59],{"class":51},[45,3186,469],{"class":79},[45,3188,3189],{"class":55},";i",[45,3191,1187],{"class":51},[45,3193,723],{"class":79},[45,3195,3189],{"class":55},[45,3197,2442],{"class":51},[45,3199,139],{"class":55},[45,3201,3202],{"class":47,"line":1331},[45,3203,1697],{"class":55},[45,3205,3206,3208,3210,3212,3214],{"class":47,"line":1346},[45,3207,1702],{"class":55},[45,3209,1320],{"class":51},[45,3211,718],{"class":55},[45,3213,1320],{"class":51},[45,3215,1343],{"class":55},[45,3217,3218],{"class":47,"line":1352},[45,3219,1716],{"class":55},[45,3221,3222],{"class":47,"line":1366},[45,3223,3224],{"class":337},"\u002F\u002F上式可以进行拆分\n",[45,3226,3227,3229,3231,3233],{"class":47,"line":1372},[45,3228,285],{"class":51},[45,3230,3182],{"class":55},[45,3232,59],{"class":51},[45,3234,3235],{"class":79},"0\n",[45,3237,3238,3240],{"class":47,"line":1463},[45,3239,3175],{"class":51},[45,3241,3242],{"class":55},"(;;;)\n",[45,3244,3245],{"class":47,"line":1469},[45,3246,1697],{"class":55},[45,3248,3249,3252,3255,3257,3259],{"class":47,"line":1481},[45,3250,3251],{"class":51},"    if",[45,3253,3254],{"class":55},"(i",[45,3256,1861],{"class":51},[45,3258,723],{"class":79},[45,3260,139],{"class":55},[45,3262,3263],{"class":47,"line":1763},[45,3264,2180],{"class":55},[45,3266,3267,3270],{"class":47,"line":1768},[45,3268,3269],{"class":51},"        break",[45,3271,1442],{"class":55},[45,3273,3274],{"class":47,"line":1774},[45,3275,2337],{"class":55},[45,3277,3278,3280,3282,3284,3286],{"class":47,"line":1779},[45,3279,1702],{"class":55},[45,3281,1320],{"class":51},[45,3283,718],{"class":55},[45,3285,1320],{"class":51},[45,3287,1343],{"class":55},[45,3289,3290,3293,3295],{"class":47,"line":1793},[45,3291,3292],{"class":55},"    i",[45,3294,2442],{"class":51},[45,3296,1442],{"class":55},[45,3298,3299],{"class":47,"line":1798},[45,3300,1716],{"class":55},[20,3302,3303],{},"小练习",[36,3305,3307],{"className":270,"code":3306,"language":272,"meta":25,"style":25},"#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",[42,3308,3309,3315,3325,3333,3337,3342,3347,3375,3379,3384,3389,3430,3434,3447,3451,3455,3459,3471,3475,3479],{"__ignoreMap":25},[45,3310,3311,3313],{"class":47,"line":48},[45,3312,2100],{"class":51},[45,3314,2103],{"class":62},[45,3316,3317,3319,3321,3323],{"class":47,"line":66},[45,3318,2108],{"class":51},[45,3320,2111],{"class":51},[45,3322,2114],{"class":69},[45,3324,1442],{"class":55},[45,3326,3327,3329,3331],{"class":47,"line":1331},[45,3328,285],{"class":51},[45,3330,2123],{"class":69},[45,3332,2126],{"class":55},[45,3334,3335],{"class":47,"line":1346},[45,3336,1697],{"class":55},[45,3338,3339],{"class":47,"line":1352},[45,3340,3341],{"class":337},"    \u002F\u002F敲桌子案例\n",[45,3343,3344],{"class":47,"line":1366},[45,3345,3346],{"class":337},"    \u002F\u002F1.先输出1-100的数字\n",[45,3348,3349,3352,3354,3356,3358,3360,3362,3365,3367,3369,3371,3373],{"class":47,"line":1372},[45,3350,3351],{"class":51},"    for",[45,3353,282],{"class":55},[45,3355,285],{"class":51},[45,3357,3182],{"class":55},[45,3359,59],{"class":51},[45,3361,495],{"class":79},[45,3363,3364],{"class":55},"; i",[45,3366,1739],{"class":51},[45,3368,588],{"class":79},[45,3370,3364],{"class":55},[45,3372,2442],{"class":51},[45,3374,139],{"class":55},[45,3376,3377],{"class":47,"line":1463},[45,3378,2180],{"class":55},[45,3380,3381],{"class":47,"line":1469},[45,3382,3383],{"class":337},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[45,3385,3386],{"class":47,"line":1481},[45,3387,3388],{"class":337},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[45,3390,3391,3393,3395,3397,3399,3401,3403,3406,3408,3410,3412,3414,3416,3418,3420,3422,3424,3426,3428],{"class":47,"line":1763},[45,3392,2647],{"class":51},[45,3394,3254],{"class":55},[45,3396,605],{"class":51},[45,3398,646],{"class":79},[45,3400,3099],{"class":51},[45,3402,469],{"class":79},[45,3404,3405],{"class":51}," ||",[45,3407,3182],{"class":55},[45,3409,605],{"class":51},[45,3411,723],{"class":79},[45,3413,3099],{"class":51},[45,3415,646],{"class":79},[45,3417,3405],{"class":51},[45,3419,3182],{"class":55},[45,3421,861],{"class":51},[45,3423,723],{"class":79},[45,3425,3099],{"class":51},[45,3427,646],{"class":79},[45,3429,139],{"class":55},[45,3431,3432],{"class":47,"line":1768},[45,3433,2660],{"class":55},[45,3435,3436,3438,3440,3443,3445],{"class":47,"line":1774},[45,3437,2665],{"class":55},[45,3439,1320],{"class":51},[45,3441,3442],{"class":62},"\"敲桌子\"",[45,3444,1320],{"class":51},[45,3446,1343],{"class":55},[45,3448,3449],{"class":47,"line":1779},[45,3450,2679],{"class":55},[45,3452,3453],{"class":47,"line":1793},[45,3454,2720],{"class":51},[45,3456,3457],{"class":47,"line":1798},[45,3458,2660],{"class":55},[45,3460,3461,3463,3465,3467,3469],{"class":47,"line":1804},[45,3462,2665],{"class":55},[45,3464,1320],{"class":51},[45,3466,718],{"class":55},[45,3468,1320],{"class":51},[45,3470,1343],{"class":55},[45,3472,3473],{"class":47,"line":1825},[45,3474,2679],{"class":55},[45,3476,3477],{"class":47,"line":1830},[45,3478,2337],{"class":55},[45,3480,3481],{"class":47,"line":1844},[45,3482,1716],{"class":55},[20,3484,3485],{},"嵌套实现星图",[36,3487,3489],{"className":270,"code":3488,"language":272,"meta":25,"style":25},"#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",[42,3490,3491,3497,3507,3515,3519,3545,3549,3578,3582,3593,3597,3606,3610],{"__ignoreMap":25},[45,3492,3493,3495],{"class":47,"line":48},[45,3494,2100],{"class":51},[45,3496,2103],{"class":62},[45,3498,3499,3501,3503,3505],{"class":47,"line":66},[45,3500,2108],{"class":51},[45,3502,2111],{"class":51},[45,3504,2114],{"class":69},[45,3506,1442],{"class":55},[45,3508,3509,3511,3513],{"class":47,"line":1331},[45,3510,285],{"class":51},[45,3512,2123],{"class":69},[45,3514,2126],{"class":55},[45,3516,3517],{"class":47,"line":1346},[45,3518,1697],{"class":55},[45,3520,3521,3523,3525,3527,3529,3531,3533,3535,3537,3539,3541,3543],{"class":47,"line":1352},[45,3522,3351],{"class":51},[45,3524,1809],{"class":55},[45,3526,285],{"class":51},[45,3528,3182],{"class":55},[45,3530,59],{"class":51},[45,3532,469],{"class":79},[45,3534,3189],{"class":55},[45,3536,1187],{"class":51},[45,3538,723],{"class":79},[45,3540,3189],{"class":55},[45,3542,2442],{"class":51},[45,3544,139],{"class":55},[45,3546,3547],{"class":47,"line":1366},[45,3548,2180],{"class":55},[45,3550,3551,3554,3556,3558,3561,3563,3565,3568,3570,3572,3574,3576],{"class":47,"line":1372},[45,3552,3553],{"class":51},"        for",[45,3555,1809],{"class":55},[45,3557,285],{"class":51},[45,3559,3560],{"class":55}," j",[45,3562,59],{"class":51},[45,3564,469],{"class":79},[45,3566,3567],{"class":55},";j",[45,3569,1187],{"class":51},[45,3571,723],{"class":79},[45,3573,3567],{"class":55},[45,3575,2442],{"class":51},[45,3577,139],{"class":55},[45,3579,3580],{"class":47,"line":1463},[45,3581,2660],{"class":55},[45,3583,3584,3586,3588,3591],{"class":47,"line":1469},[45,3585,2665],{"class":55},[45,3587,1320],{"class":51},[45,3589,3590],{"class":62},"\"*\"",[45,3592,1442],{"class":55},[45,3594,3595],{"class":47,"line":1481},[45,3596,2679],{"class":55},[45,3598,3599,3602,3604],{"class":47,"line":1763},[45,3600,3601],{"class":55},"        cout",[45,3603,1320],{"class":51},[45,3605,1343],{"class":55},[45,3607,3608],{"class":47,"line":1768},[45,3609,2337],{"class":55},[45,3611,3612],{"class":47,"line":1774},[45,3613,1716],{"class":55},[20,3615,3616],{},"乘法口诀表",[36,3618,3620],{"className":270,"code":3619,"language":272,"meta":25,"style":25},"#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",[42,3621,3622,3628,3638,3646,3650,3676,3680,3705,3709,3749,3753,3761,3765],{"__ignoreMap":25},[45,3623,3624,3626],{"class":47,"line":48},[45,3625,2100],{"class":51},[45,3627,2484],{"class":62},[45,3629,3630,3632,3634,3636],{"class":47,"line":66},[45,3631,2108],{"class":51},[45,3633,2111],{"class":51},[45,3635,2114],{"class":69},[45,3637,1442],{"class":55},[45,3639,3640,3642,3644],{"class":47,"line":1331},[45,3641,285],{"class":51},[45,3643,2123],{"class":69},[45,3645,2126],{"class":55},[45,3647,3648],{"class":47,"line":1346},[45,3649,1697],{"class":55},[45,3651,3652,3654,3656,3658,3660,3662,3664,3666,3668,3670,3672,3674],{"class":47,"line":1352},[45,3653,3351],{"class":51},[45,3655,282],{"class":55},[45,3657,285],{"class":51},[45,3659,3182],{"class":55},[45,3661,59],{"class":51},[45,3663,495],{"class":79},[45,3665,3189],{"class":55},[45,3667,1187],{"class":51},[45,3669,723],{"class":79},[45,3671,3189],{"class":55},[45,3673,2442],{"class":51},[45,3675,139],{"class":55},[45,3677,3678],{"class":47,"line":1366},[45,3679,2180],{"class":55},[45,3681,3682,3684,3686,3688,3690,3692,3694,3696,3698,3701,3703],{"class":47,"line":1372},[45,3683,3553],{"class":51},[45,3685,282],{"class":55},[45,3687,285],{"class":51},[45,3689,3560],{"class":55},[45,3691,59],{"class":51},[45,3693,495],{"class":79},[45,3695,3567],{"class":55},[45,3697,1739],{"class":51},[45,3699,3700],{"class":55},"i;j",[45,3702,2442],{"class":51},[45,3704,139],{"class":55},[45,3706,3707],{"class":47,"line":1463},[45,3708,2660],{"class":55},[45,3710,3711,3713,3715,3717,3719,3721,3723,3725,3727,3730,3732,3734,3736,3738,3740,3743,3745,3747],{"class":47,"line":1469},[45,3712,2665],{"class":55},[45,3714,1320],{"class":51},[45,3716,744],{"class":55},[45,3718,1320],{"class":51},[45,3720,3590],{"class":62},[45,3722,1320],{"class":51},[45,3724,718],{"class":55},[45,3726,1320],{"class":51},[45,3728,3729],{"class":62},"\"=\"",[45,3731,1320],{"class":51},[45,3733,718],{"class":55},[45,3735,732],{"class":51},[45,3737,744],{"class":55},[45,3739,1320],{"class":51},[45,3741,3742],{"class":62},"'",[45,3744,1382],{"class":79},[45,3746,3742],{"class":62},[45,3748,1442],{"class":55},[45,3750,3751],{"class":47,"line":1481},[45,3752,2679],{"class":55},[45,3754,3755,3757,3759],{"class":47,"line":1763},[45,3756,3601],{"class":55},[45,3758,1320],{"class":51},[45,3760,1343],{"class":55},[45,3762,3763],{"class":47,"line":1768},[45,3764,2337],{"class":55},[45,3766,3767],{"class":47,"line":1774},[45,3768,1716],{"class":55},[249,3770,3772],{"id":3771},"_163跳出语句","1.6.3跳出语句",[233,3774,3775],{},[169,3776,3777],{},"break语句\n作用：用于跳出选择结构或者循环结构",[20,3779,3780],{},"break使用时机：",[166,3782,3783,3786,3789],{},[169,3784,3785],{},"出现在switch条件语句中，作用是终止case并跳出switch",[169,3787,3788],{},"出现在循环结构中，作用是跳出当前的循环结构",[169,3790,3791],{},"出现在嵌套循环中，跳出最近的内层循环语句",[233,3793,3794,3797],{"start":66},[169,3795,3796],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[169,3798,3799],{},"goto语句\n语法：goto 标记;",[20,3801,3802],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[36,3804,3806],{"className":270,"code":3805,"language":272,"meta":25,"style":25},"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",[42,3807,3808,3816,3820,3833,3843,3856,3869,3882,3890,3906],{"__ignoreMap":25},[45,3809,3810,3812,3814],{"class":47,"line":48},[45,3811,285],{"class":51},[45,3813,2123],{"class":69},[45,3815,2126],{"class":55},[45,3817,3818],{"class":47,"line":66},[45,3819,1697],{"class":55},[45,3821,3822,3824,3826,3829,3831],{"class":47,"line":1331},[45,3823,1702],{"class":55},[45,3825,1320],{"class":51},[45,3827,3828],{"class":62},"\"1\"",[45,3830,1320],{"class":51},[45,3832,1343],{"class":55},[45,3834,3835,3838,3841],{"class":47,"line":1346},[45,3836,3837],{"class":51},"    goto",[45,3839,3840],{"class":69}," FLAG",[45,3842,1442],{"class":55},[45,3844,3845,3847,3849,3852,3854],{"class":47,"line":1352},[45,3846,1702],{"class":55},[45,3848,1320],{"class":51},[45,3850,3851],{"class":62},"\"2\"",[45,3853,1320],{"class":51},[45,3855,1343],{"class":55},[45,3857,3858,3860,3862,3865,3867],{"class":47,"line":1366},[45,3859,1702],{"class":55},[45,3861,1320],{"class":51},[45,3863,3864],{"class":62},"\"3\"",[45,3866,1320],{"class":51},[45,3868,1343],{"class":55},[45,3870,3871,3873,3875,3878,3880],{"class":47,"line":1372},[45,3872,1702],{"class":55},[45,3874,1320],{"class":51},[45,3876,3877],{"class":62},"\"4\"",[45,3879,1320],{"class":51},[45,3881,1343],{"class":55},[45,3883,3884,3887],{"class":47,"line":1463},[45,3885,3886],{"class":69},"    FLAG",[45,3888,3889],{"class":55},":\n",[45,3891,3892,3894,3896,3899,3901,3903],{"class":47,"line":1469},[45,3893,1702],{"class":55},[45,3895,1320],{"class":51},[45,3897,3898],{"class":62},"\"5\"",[45,3900,1320],{"class":51},[45,3902,1390],{"class":55},[45,3904,3905],{"class":337},"\u002F\u002F跳过了2,3,4,直接到5\n",[45,3907,3908],{"class":47,"line":1481},[45,3909,1716],{"class":55},[15,3911,3913],{"id":3912},"_17数组","1.7数组",[249,3915,3917],{"id":3916},"_171一维数组","1.7.1一维数组",[233,3919,3920],{},[169,3921,3922],{},"一维数组定义方式",[415,3924,3925,3935],{},[418,3926,3927],{},[421,3928,3929,3932],{},[424,3930,3931],{},"方式",[424,3933,3934],{},"注意事项",[462,3936,3937,3951,3961],{},[421,3938,3939,3945],{},[467,3940,3941,3942,334],{},"数据类型 数组名",[45,3943,3944],{},"数组长度",[467,3946,3947,3948,3950],{},"这种方式是先定义再arr",[45,3949,718],{},"赋值",[421,3952,3953,3958],{},[467,3954,3941,3955,3957],{},[45,3956,3944],{},"={值1,值2....};",[467,3959,3960],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[421,3962,3963,3967],{},[467,3964,3941,3965,3957],{},[45,3966],{},[467,3968,3969,3970,3972],{},"int arr",[45,3971],{},";这是不正确的，按照这样的方式定义必须有初始长度",[233,3974,3975],{"start":66},[169,3976,3977],{},"一维数组数组名\n用途：",[166,3979,3980],{},[169,3981,3982],{},"1.可以统计整个数组在内存中的长度：",[36,3984,3986],{"className":270,"code":3985,"language":272,"meta":25,"style":25},"sizeof(arr);\nsizeof(arr[0]);\n",[42,3987,3988,3995],{"__ignoreMap":25},[45,3989,3990,3992],{"class":47,"line":48},[45,3991,279],{"class":51},[45,3993,3994],{"class":55},"(arr);\n",[45,3996,3997,3999,4002,4004],{"class":47,"line":66},[45,3998,279],{"class":51},[45,4000,4001],{"class":55},"(arr[",[45,4003,469],{"class":79},[45,4005,4006],{"class":55},"]);\n",[166,4008,4009],{},[169,4010,4011],{},"2.可以获取数组在内存中的首地址:",[36,4013,4015],{"className":270,"code":4014,"language":272,"meta":25,"style":25},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[42,4016,4017,4022,4035,4040],{"__ignoreMap":25},[45,4018,4019],{"class":47,"line":48},[45,4020,4021],{"class":337},"\u002F\u002F查看16进制的首地址\n",[45,4023,4024,4026,4028,4031,4033],{"class":47,"line":66},[45,4025,1521],{"class":55},[45,4027,1320],{"class":51},[45,4029,4030],{"class":55},"arr",[45,4032,1320],{"class":51},[45,4034,1343],{"class":55},[45,4036,4037],{"class":47,"line":1331},[45,4038,4039],{"class":337},"\u002F\u002F看10进制数\n",[45,4041,4042,4044,4046,4048,4050,4052,4054,4057,4059,4061,4063],{"class":47,"line":1346},[45,4043,1521],{"class":55},[45,4045,1320],{"class":51},[45,4047,282],{"class":55},[45,4049,285],{"class":51},[45,4051,706],{"class":55},[45,4053,630],{"class":51},[45,4055,4056],{"class":55},"arr[",[45,4058,469],{"class":79},[45,4060,1217],{"class":55},[45,4062,1320],{"class":51},[45,4064,1343],{"class":55},[20,4066,4067],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[166,4069,4070],{},[169,4071,4072],{},"1️⃣五只小猪称体重",[36,4074,4076],{"className":270,"code":4075,"language":272,"meta":25,"style":25},"#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",[42,4077,4078,4084,4094,4102,4106,4146,4159,4185,4189,4201,4205,4215,4219,4223,4236,4246],{"__ignoreMap":25},[45,4079,4080,4082],{"class":47,"line":48},[45,4081,2100],{"class":51},[45,4083,2103],{"class":62},[45,4085,4086,4088,4090,4092],{"class":47,"line":66},[45,4087,2108],{"class":51},[45,4089,2111],{"class":51},[45,4091,2114],{"class":69},[45,4093,1442],{"class":55},[45,4095,4096,4098,4100],{"class":47,"line":1331},[45,4097,285],{"class":51},[45,4099,2123],{"class":69},[45,4101,2126],{"class":55},[45,4103,4104],{"class":47,"line":1346},[45,4105,1697],{"class":55},[45,4107,4108,4110,4113,4115,4117,4119,4121,4124,4126,4129,4131,4133,4135,4138,4140,4143],{"class":47,"line":1352},[45,4109,2135],{"class":51},[45,4111,4112],{"class":55}," arr[",[45,4114,596],{"class":79},[45,4116,1217],{"class":55},[45,4118,59],{"class":51},[45,4120,1173],{"class":55},[45,4122,4123],{"class":79},"300",[45,4125,655],{"class":55},[45,4127,4128],{"class":79},"350",[45,4130,655],{"class":55},[45,4132,1873],{"class":79},[45,4134,655],{"class":55},[45,4136,4137],{"class":79},"400",[45,4139,655],{"class":55},[45,4141,4142],{"class":79},"250",[45,4144,4145],{"class":55},"};\n",[45,4147,4148,4150,4153,4155,4157],{"class":47,"line":1366},[45,4149,2135],{"class":51},[45,4151,4152],{"class":55}," tmp",[45,4154,59],{"class":51},[45,4156,469],{"class":79},[45,4158,1442],{"class":55},[45,4160,4161,4163,4165,4167,4169,4171,4173,4175,4177,4179,4181,4183],{"class":47,"line":1372},[45,4162,3351],{"class":51},[45,4164,1809],{"class":55},[45,4166,285],{"class":51},[45,4168,3182],{"class":55},[45,4170,59],{"class":51},[45,4172,469],{"class":79},[45,4174,3189],{"class":55},[45,4176,1187],{"class":51},[45,4178,596],{"class":79},[45,4180,3189],{"class":55},[45,4182,2442],{"class":51},[45,4184,139],{"class":55},[45,4186,4187],{"class":47,"line":1463},[45,4188,2180],{"class":55},[45,4190,4191,4193,4196,4198],{"class":47,"line":1469},[45,4192,2647],{"class":51},[45,4194,4195],{"class":55},"(tmp",[45,4197,1187],{"class":51},[45,4199,4200],{"class":55},"arr[i])\n",[45,4202,4203],{"class":47,"line":1481},[45,4204,2660],{"class":55},[45,4206,4207,4210,4212],{"class":47,"line":1763},[45,4208,4209],{"class":55},"            tmp",[45,4211,59],{"class":51},[45,4213,4214],{"class":55},"arr[i];\n",[45,4216,4217],{"class":47,"line":1768},[45,4218,2679],{"class":55},[45,4220,4221],{"class":47,"line":1774},[45,4222,2337],{"class":55},[45,4224,4225,4227,4229,4232,4234],{"class":47,"line":1779},[45,4226,1702],{"class":55},[45,4228,1320],{"class":51},[45,4230,4231],{"class":55},"tmp",[45,4233,1320],{"class":51},[45,4235,1343],{"class":55},[45,4237,4238,4241,4244],{"class":47,"line":1793},[45,4239,4240],{"class":51},"    return",[45,4242,4243],{"class":79}," 0",[45,4245,1442],{"class":55},[45,4247,4248],{"class":47,"line":1798},[45,4249,1716],{"class":55},[166,4251,4252],{},[169,4253,4254],{},"2️⃣数组元素逆置",[36,4256,4258],{"className":270,"code":4257,"language":272,"meta":25,"style":25},"\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",[42,4259,4260,4265,4271,4281,4289,4293,4328,4344,4376,4389,4394,4399,4411,4421,4431,4436,4445,4455,4460,4465,4492,4496,4512,4516,4527,4536],{"__ignoreMap":25},[45,4261,4262],{"class":47,"line":48},[45,4263,4264],{"class":337},"\u002F\u002F元素逆置\n",[45,4266,4267,4269],{"class":47,"line":66},[45,4268,2100],{"class":51},[45,4270,2103],{"class":62},[45,4272,4273,4275,4277,4279],{"class":47,"line":1331},[45,4274,2108],{"class":51},[45,4276,2111],{"class":51},[45,4278,2114],{"class":69},[45,4280,1442],{"class":55},[45,4282,4283,4285,4287],{"class":47,"line":1346},[45,4284,285],{"class":51},[45,4286,2123],{"class":69},[45,4288,2126],{"class":55},[45,4290,4291],{"class":47,"line":1352},[45,4292,1697],{"class":55},[45,4294,4295,4298,4300,4302,4304,4306,4308,4310,4312,4314,4316,4318,4320,4322,4324,4326],{"class":47,"line":1366},[45,4296,4297],{"class":51},"   int",[45,4299,4112],{"class":55},[45,4301,596],{"class":79},[45,4303,1217],{"class":55},[45,4305,59],{"class":51},[45,4307,1173],{"class":55},[45,4309,495],{"class":79},[45,4311,655],{"class":55},[45,4313,356],{"class":79},[45,4315,655],{"class":55},[45,4317,350],{"class":79},[45,4319,655],{"class":55},[45,4321,570],{"class":79},[45,4323,655],{"class":55},[45,4325,596],{"class":79},[45,4327,4145],{"class":55},[45,4329,4330,4332,4335,4337,4339,4341],{"class":47,"line":1372},[45,4331,4297],{"class":51},[45,4333,4334],{"class":55}," start",[45,4336,59],{"class":51},[45,4338,469],{"class":79},[45,4340,334],{"class":55},[45,4342,4343],{"class":337},"\u002F\u002F起始下标\n",[45,4345,4346,4348,4351,4354,4357,4360,4362,4364,4367,4369,4371,4373],{"class":47,"line":1463},[45,4347,4297],{"class":51},[45,4349,4350],{"class":55}," end",[45,4352,4353],{"class":51},"=sizeof",[45,4355,4356],{"class":55},"(arr)",[45,4358,4359],{"class":51},"\u002Fsizeof",[45,4361,4001],{"class":55},[45,4363,469],{"class":79},[45,4365,4366],{"class":55},"])",[45,4368,809],{"class":51},[45,4370,495],{"class":79},[45,4372,334],{"class":55},[45,4374,4375],{"class":337},"\u002F\u002F结束下标\n",[45,4377,4378,4381,4384,4386],{"class":47,"line":1469},[45,4379,4380],{"class":51},"   while",[45,4382,4383],{"class":55}," (start",[45,4385,1187],{"class":51},[45,4387,4388],{"class":55},"end)\n",[45,4390,4391],{"class":47,"line":1481},[45,4392,4393],{"class":55},"   {\n",[45,4395,4396],{"class":47,"line":1763},[45,4397,4398],{"class":337},"    \u002F\u002F实现元素互换代码\n",[45,4400,4401,4403,4406,4408],{"class":47,"line":1768},[45,4402,2135],{"class":51},[45,4404,4405],{"class":55}," temp",[45,4407,59],{"class":51},[45,4409,4410],{"class":55},"arr[start];\n",[45,4412,4413,4416,4418],{"class":47,"line":1774},[45,4414,4415],{"class":55},"    arr[start]",[45,4417,59],{"class":51},[45,4419,4420],{"class":55},"arr[end];\n",[45,4422,4423,4426,4428],{"class":47,"line":1779},[45,4424,4425],{"class":55},"    arr[end]",[45,4427,59],{"class":51},[45,4429,4430],{"class":55},"temp;\n",[45,4432,4433],{"class":47,"line":1793},[45,4434,4435],{"class":337},"    \u002F\u002F下标更新\n",[45,4437,4438,4441,4443],{"class":47,"line":1798},[45,4439,4440],{"class":55},"    start",[45,4442,2442],{"class":51},[45,4444,1442],{"class":55},[45,4446,4447,4450,4453],{"class":47,"line":1804},[45,4448,4449],{"class":55},"    end",[45,4451,4452],{"class":51},"--",[45,4454,1442],{"class":55},[45,4456,4457],{"class":47,"line":1825},[45,4458,4459],{"class":55},"   }\n",[45,4461,4462],{"class":47,"line":1830},[45,4463,4464],{"class":337},"   \u002F\u002F输出逆置后的数组\n",[45,4466,4467,4470,4472,4474,4476,4478,4480,4482,4484,4486,4488,4490],{"class":47,"line":1844},[45,4468,4469],{"class":51},"   for",[45,4471,1809],{"class":55},[45,4473,285],{"class":51},[45,4475,3182],{"class":55},[45,4477,59],{"class":51},[45,4479,469],{"class":79},[45,4481,3189],{"class":55},[45,4483,1187],{"class":51},[45,4485,596],{"class":79},[45,4487,3189],{"class":55},[45,4489,2442],{"class":51},[45,4491,139],{"class":55},[45,4493,4494],{"class":47,"line":1849},[45,4495,4393],{"class":55},[45,4497,4498,4500,4502,4505,4507,4510],{"class":47,"line":1878},[45,4499,1702],{"class":55},[45,4501,1320],{"class":51},[45,4503,4504],{"class":55},"arr[i]",[45,4506,1320],{"class":51},[45,4508,4509],{"class":62},"\" \"",[45,4511,1442],{"class":55},[45,4513,4514],{"class":47,"line":1883},[45,4515,4459],{"class":55},[45,4517,4518,4521,4523,4525],{"class":47,"line":1900},[45,4519,4520],{"class":69},"   system",[45,4522,282],{"class":55},[45,4524,2458],{"class":62},[45,4526,2869],{"class":55},[45,4528,4529,4532,4534],{"class":47,"line":1905},[45,4530,4531],{"class":51},"   return",[45,4533,4243],{"class":79},[45,4535,1442],{"class":55},[45,4537,4538],{"class":47,"line":1910},[45,4539,1716],{"class":55},[166,4541,4542],{},[169,4543,4544],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[36,4546,4548],{"className":270,"code":4547,"language":272,"meta":25,"style":25},"\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",[42,4549,4550,4555,4561,4571,4579,4583,4635,4648,4674,4678,4692,4696,4701,4706,4736,4740,4745,4779,4783,4788,4808,4813,4825,4841,4856,4861,4865,4869,4882,4908,4912,4926,4930,4938],{"__ignoreMap":25},[45,4551,4552],{"class":47,"line":48},[45,4553,4554],{"class":337},"\u002F\u002F冒泡排序,升序\n",[45,4556,4557,4559],{"class":47,"line":66},[45,4558,2100],{"class":51},[45,4560,2103],{"class":62},[45,4562,4563,4565,4567,4569],{"class":47,"line":1331},[45,4564,2108],{"class":51},[45,4566,2111],{"class":51},[45,4568,2114],{"class":69},[45,4570,1442],{"class":55},[45,4572,4573,4575,4577],{"class":47,"line":1346},[45,4574,285],{"class":51},[45,4576,2123],{"class":69},[45,4578,2126],{"class":55},[45,4580,4581],{"class":47,"line":1352},[45,4582,1697],{"class":55},[45,4584,4585,4587,4589,4591,4594,4596,4599,4601,4603,4605,4607,4609,4611,4613,4615,4617,4619,4621,4623,4625,4627,4629,4631,4633],{"class":47,"line":1366},[45,4586,2135],{"class":51},[45,4588,4112],{"class":55},[45,4590,697],{"class":79},[45,4592,4593],{"class":55},"] ",[45,4595,59],{"class":51},[45,4597,4598],{"class":55}," {",[45,4600,570],{"class":79},[45,4602,655],{"class":55},[45,4604,356],{"class":79},[45,4606,655],{"class":55},[45,4608,672],{"class":79},[45,4610,655],{"class":55},[45,4612,469],{"class":79},[45,4614,655],{"class":55},[45,4616,596],{"class":79},[45,4618,655],{"class":55},[45,4620,646],{"class":79},[45,4622,655],{"class":55},[45,4624,495],{"class":79},[45,4626,655],{"class":55},[45,4628,350],{"class":79},[45,4630,655],{"class":55},[45,4632,697],{"class":79},[45,4634,4145],{"class":55},[45,4636,4637,4639,4641,4644,4646],{"class":47,"line":1372},[45,4638,1702],{"class":55},[45,4640,1320],{"class":51},[45,4642,4643],{"class":62},"\"排序前：\"",[45,4645,1320],{"class":51},[45,4647,1343],{"class":55},[45,4649,4650,4652,4654,4656,4658,4660,4662,4664,4666,4668,4670,4672],{"class":47,"line":1463},[45,4651,3351],{"class":51},[45,4653,1809],{"class":55},[45,4655,285],{"class":51},[45,4657,3182],{"class":55},[45,4659,59],{"class":51},[45,4661,469],{"class":79},[45,4663,3189],{"class":55},[45,4665,1187],{"class":51},[45,4667,697],{"class":79},[45,4669,3189],{"class":55},[45,4671,2442],{"class":51},[45,4673,139],{"class":55},[45,4675,4676],{"class":47,"line":1469},[45,4677,2180],{"class":55},[45,4679,4680,4682,4684,4686,4688,4690],{"class":47,"line":1481},[45,4681,3601],{"class":55},[45,4683,1320],{"class":51},[45,4685,4504],{"class":55},[45,4687,1320],{"class":51},[45,4689,4509],{"class":62},[45,4691,1442],{"class":55},[45,4693,4694],{"class":47,"line":1763},[45,4695,2337],{"class":55},[45,4697,4698],{"class":47,"line":1768},[45,4699,4700],{"class":337},"    \u002F\u002F开始冒泡排序\n",[45,4702,4703],{"class":47,"line":1774},[45,4704,4705],{"class":337},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[45,4707,4708,4710,4712,4714,4716,4718,4720,4722,4724,4726,4728,4730,4732,4734],{"class":47,"line":1779},[45,4709,3351],{"class":51},[45,4711,1809],{"class":55},[45,4713,285],{"class":51},[45,4715,3182],{"class":55},[45,4717,59],{"class":51},[45,4719,469],{"class":79},[45,4721,3189],{"class":55},[45,4723,1187],{"class":51},[45,4725,697],{"class":79},[45,4727,809],{"class":51},[45,4729,495],{"class":79},[45,4731,3189],{"class":55},[45,4733,2442],{"class":51},[45,4735,139],{"class":55},[45,4737,4738],{"class":47,"line":1793},[45,4739,2180],{"class":55},[45,4741,4742],{"class":47,"line":1798},[45,4743,4744],{"class":337},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[45,4746,4747,4749,4751,4753,4755,4757,4759,4761,4763,4765,4767,4769,4771,4773,4775,4777],{"class":47,"line":1804},[45,4748,3553],{"class":51},[45,4750,1809],{"class":55},[45,4752,285],{"class":51},[45,4754,3560],{"class":55},[45,4756,59],{"class":51},[45,4758,469],{"class":79},[45,4760,3567],{"class":55},[45,4762,1187],{"class":51},[45,4764,697],{"class":79},[45,4766,809],{"class":51},[45,4768,718],{"class":55},[45,4770,809],{"class":51},[45,4772,495],{"class":79},[45,4774,3567],{"class":55},[45,4776,2442],{"class":51},[45,4778,139],{"class":55},[45,4780,4781],{"class":47,"line":1825},[45,4782,2660],{"class":55},[45,4784,4785],{"class":47,"line":1830},[45,4786,4787],{"class":337},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[45,4789,4790,4793,4796,4798,4801,4803,4805],{"class":47,"line":1844},[45,4791,4792],{"class":51},"            if",[45,4794,4795],{"class":55},"(arr[j]",[45,4797,1237],{"class":51},[45,4799,4800],{"class":55},"arr[j",[45,4802,758],{"class":51},[45,4804,495],{"class":79},[45,4806,4807],{"class":55},"])\n",[45,4809,4810],{"class":47,"line":1849},[45,4811,4812],{"class":55},"            {\n",[45,4814,4815,4818,4820,4822],{"class":47,"line":1878},[45,4816,4817],{"class":51},"                int",[45,4819,4405],{"class":55},[45,4821,59],{"class":51},[45,4823,4824],{"class":55},"arr[j];\n",[45,4826,4827,4830,4832,4834,4836,4838],{"class":47,"line":1883},[45,4828,4829],{"class":55},"                arr[j]",[45,4831,59],{"class":51},[45,4833,4800],{"class":55},[45,4835,758],{"class":51},[45,4837,495],{"class":79},[45,4839,4840],{"class":55},"];\n",[45,4842,4843,4846,4848,4850,4852,4854],{"class":47,"line":1900},[45,4844,4845],{"class":55},"                arr[j",[45,4847,758],{"class":51},[45,4849,495],{"class":79},[45,4851,1217],{"class":55},[45,4853,59],{"class":51},[45,4855,4430],{"class":55},[45,4857,4858],{"class":47,"line":1905},[45,4859,4860],{"class":55},"            }\n",[45,4862,4863],{"class":47,"line":1910},[45,4864,2679],{"class":55},[45,4866,4867],{"class":47,"line":1915},[45,4868,2337],{"class":55},[45,4870,4871,4873,4875,4878,4880],{"class":47,"line":1929},[45,4872,1702],{"class":55},[45,4874,1320],{"class":51},[45,4876,4877],{"class":62},"\"排序后：\"",[45,4879,1320],{"class":51},[45,4881,1343],{"class":55},[45,4883,4884,4886,4888,4890,4892,4894,4896,4898,4900,4902,4904,4906],{"class":47,"line":1934},[45,4885,3351],{"class":51},[45,4887,1809],{"class":55},[45,4889,285],{"class":51},[45,4891,3182],{"class":55},[45,4893,59],{"class":51},[45,4895,469],{"class":79},[45,4897,3189],{"class":55},[45,4899,1187],{"class":51},[45,4901,697],{"class":79},[45,4903,3189],{"class":55},[45,4905,2442],{"class":51},[45,4907,139],{"class":55},[45,4909,4910],{"class":47,"line":2727},[45,4911,2180],{"class":55},[45,4913,4914,4916,4918,4920,4922,4924],{"class":47,"line":2741},[45,4915,3601],{"class":55},[45,4917,1320],{"class":51},[45,4919,4504],{"class":55},[45,4921,1320],{"class":51},[45,4923,4509],{"class":62},[45,4925,1442],{"class":55},[45,4927,4928],{"class":47,"line":2749},[45,4929,2337],{"class":55},[45,4931,4932,4934,4936],{"class":47,"line":2754},[45,4933,4240],{"class":51},[45,4935,4243],{"class":79},[45,4937,1442],{"class":55},[45,4939,4940],{"class":47,"line":2760},[45,4941,1716],{"class":55},[249,4943,4945],{"id":4944},"_172二维数组","1.7.2二维数组",[233,4947,4948],{},[169,4949,4950],{},"二维数组的四种定义方式",[415,4952,4953,4962],{},[418,4954,4955],{},[421,4956,4957,4960],{},[424,4958,4959],{},"序号",[424,4961,3931],{},[462,4963,4964,4974,4983,4992,5001],{},[421,4965,4966,4968],{},[467,4967,495],{},[467,4969,4970,4971,334],{},"数据类型 数组名[行数]",[45,4972,4973],{},"列数",[421,4975,4976,4978],{},[467,4977,356],{},[467,4979,4970,4980,4982],{},[45,4981,4973],{},"={ {数据1,数据2}，{数据3，数据4}... }",[421,4984,4985,4987],{},[467,4986,350],{},[467,4988,4970,4989,4991],{},[45,4990,4973],{},"={数据1,数据2,数据3...}",[421,4993,4994,4996],{},[467,4995,570],{},[467,4997,4998,4999,4991],{},"数据类型 数组名[]",[45,5000,4973],{},[421,5002,5003,5006],{},[467,5004,5005],{},"注意：不能只省略列数",[467,5007],{},[233,5009,5010],{"start":66},[169,5011,5012],{},"二维数组数组名",[166,5014,5015,5018],{},[169,5016,5017],{},"1.查看二维数组所占内存空间",[169,5019,5020],{},"2.获取二维数组首地址",[20,5022,5023],{},"已知二维数组，求二维数组的行数与列数",[36,5025,5027],{"className":270,"code":5026,"language":272,"meta":25,"style":25},"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",[42,5028,5029,5037,5041,5059,5063,5081,5097,5102,5127,5160],{"__ignoreMap":25},[45,5030,5031,5033,5035],{"class":47,"line":48},[45,5032,285],{"class":51},[45,5034,2123],{"class":69},[45,5036,2126],{"class":55},[45,5038,5039],{"class":47,"line":66},[45,5040,1697],{"class":55},[45,5042,5043,5045,5047,5049,5052,5054,5056],{"class":47,"line":1331},[45,5044,2135],{"class":51},[45,5046,4112],{"class":55},[45,5048,356],{"class":79},[45,5050,5051],{"class":55},"][",[45,5053,350],{"class":79},[45,5055,1217],{"class":55},[45,5057,5058],{"class":51},"=\n",[45,5060,5061],{"class":47,"line":1346},[45,5062,2180],{"class":55},[45,5064,5065,5068,5070,5072,5074,5076,5078],{"class":47,"line":1352},[45,5066,5067],{"class":55},"        {",[45,5069,495],{"class":79},[45,5071,655],{"class":55},[45,5073,356],{"class":79},[45,5075,655],{"class":55},[45,5077,350],{"class":79},[45,5079,5080],{"class":55},"},\n",[45,5082,5083,5085,5087,5089,5091,5093,5095],{"class":47,"line":1366},[45,5084,5067],{"class":55},[45,5086,570],{"class":79},[45,5088,655],{"class":55},[45,5090,596],{"class":79},[45,5092,655],{"class":55},[45,5094,621],{"class":79},[45,5096,1716],{"class":55},[45,5098,5099],{"class":47,"line":1372},[45,5100,5101],{"class":55},"    };\n",[45,5103,5104,5106,5108,5111,5113,5115,5117,5119,5121,5123,5125],{"class":47,"line":1463},[45,5105,1702],{"class":55},[45,5107,1320],{"class":51},[45,5109,5110],{"class":62},"\"二维数组的行数\"",[45,5112,1524],{"class":51},[45,5114,4356],{"class":55},[45,5116,4359],{"class":51},[45,5118,4001],{"class":55},[45,5120,469],{"class":79},[45,5122,4366],{"class":55},[45,5124,1320],{"class":51},[45,5126,1343],{"class":55},[45,5128,5129,5131,5133,5136,5138,5140,5142,5144,5146,5148,5150,5152,5154,5156,5158],{"class":47,"line":1469},[45,5130,1702],{"class":55},[45,5132,1320],{"class":51},[45,5134,5135],{"class":62},"\"二维数组的列数\"",[45,5137,1524],{"class":51},[45,5139,4001],{"class":55},[45,5141,469],{"class":79},[45,5143,4366],{"class":55},[45,5145,4359],{"class":51},[45,5147,4001],{"class":55},[45,5149,469],{"class":79},[45,5151,5051],{"class":55},[45,5153,469],{"class":79},[45,5155,4366],{"class":55},[45,5157,1320],{"class":51},[45,5159,1343],{"class":55},[45,5161,5162],{"class":47,"line":1481},[45,5163,1716],{"class":55},[20,5165,5166],{},"查看二维数组首地址",[36,5168,5170],{"className":270,"code":5169,"language":272,"meta":25,"style":25},"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",[42,5171,5172,5189,5215,5240],{"__ignoreMap":25},[45,5173,5174,5176,5178,5181,5183,5185,5187],{"class":47,"line":48},[45,5175,1521],{"class":55},[45,5177,1320],{"class":51},[45,5179,5180],{"class":62},"\"二维数组首地址：\"",[45,5182,1320],{"class":51},[45,5184,4030],{"class":55},[45,5186,1320],{"class":51},[45,5188,1343],{"class":55},[45,5190,5191,5193,5195,5198,5200,5202,5204,5207,5209,5211,5213],{"class":47,"line":66},[45,5192,1521],{"class":55},[45,5194,1320],{"class":51},[45,5196,5197],{"class":62},"\"二维数组第一行的首地址：\"",[45,5199,1320],{"class":51},[45,5201,282],{"class":55},[45,5203,285],{"class":51},[45,5205,5206],{"class":55},")arr[",[45,5208,469],{"class":79},[45,5210,1217],{"class":55},[45,5212,1320],{"class":51},[45,5214,1343],{"class":55},[45,5216,5217,5219,5221,5224,5226,5228,5230,5232,5234,5236,5238],{"class":47,"line":1331},[45,5218,1521],{"class":55},[45,5220,1320],{"class":51},[45,5222,5223],{"class":62},"\"二维数组第二行的首地址：\"",[45,5225,1320],{"class":51},[45,5227,282],{"class":55},[45,5229,285],{"class":51},[45,5231,5206],{"class":55},[45,5233,495],{"class":79},[45,5235,1217],{"class":55},[45,5237,1320],{"class":51},[45,5239,1343],{"class":55},[45,5241,5242,5244,5246,5249,5251,5253,5255,5257,5259,5261,5263,5265,5267,5269,5271,5273],{"class":47,"line":1346},[45,5243,1521],{"class":55},[45,5245,1320],{"class":51},[45,5247,5248],{"class":62},"\"二维数组第一个元素的首地址:\"",[45,5250,1320],{"class":51},[45,5252,282],{"class":55},[45,5254,285],{"class":51},[45,5256,706],{"class":55},[45,5258,630],{"class":51},[45,5260,4056],{"class":55},[45,5262,469],{"class":79},[45,5264,5051],{"class":55},[45,5266,469],{"class":79},[45,5268,1217],{"class":55},[45,5270,1320],{"class":51},[45,5272,1390],{"class":55},[45,5274,5275],{"class":337},"\u002F\u002F对于数，要加取址符\n",[196,5277,5278],{},"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":25,"searchDepth":66,"depth":66,"links":5280},[5281,5282,5283,5291,5292,5298,5303],{"id":223,"depth":66,"text":224},{"id":230,"depth":66,"text":231},{"id":246,"depth":66,"text":247,"children":5284},[5285,5286,5287,5288,5289,5290],{"id":251,"depth":1331,"text":252},{"id":297,"depth":1331,"text":298},{"id":364,"depth":1331,"text":365},{"id":1301,"depth":1331,"text":1302},{"id":1396,"depth":1331,"text":1397},{"id":1495,"depth":1331,"text":1496},{"id":1537,"depth":66,"text":1538},{"id":1605,"depth":66,"text":1606,"children":5293},[5294,5295,5296,5297],{"id":1609,"depth":1331,"text":1610},{"id":1630,"depth":1331,"text":1631},{"id":1639,"depth":1331,"text":1640},{"id":1648,"depth":1331,"text":1649},{"id":1657,"depth":66,"text":1658,"children":5299},[5300,5301,5302],{"id":1661,"depth":1331,"text":1662},{"id":2355,"depth":1331,"text":2356},{"id":3771,"depth":1331,"text":3772},{"id":3912,"depth":66,"text":3913,"children":5304},[5305,5306],{"id":3916,"depth":1331,"text":3917},{"id":4944,"depth":1331,"text":4945},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":215,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5313,"title":5314,"body":5315,"description":25,"extension":205,"meta":6415,"navigation":207,"path":6416,"seo":6417,"stem":6418,"__hash__":6419},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5316,"toc":6407},[5317,5320,5324,5332,5340,5343,5409,5413,5416,5492,5496,5499,5502,5505,5718,5722,5727,5791,5796,5863,5868,5959,5962,6067,6071,6074,6080,6224,6228,6231,6245,6248,6293,6296,6404],[10,5318,5314],{"id":5319},"_2函数",[15,5321,5323],{"id":5322},"_21函数概述","2.1函数概述",[233,5325,5326,5329],{},[169,5327,5328],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[169,5330,5331],{},"语法：",[36,5333,5338],{"className":5334,"code":5336,"language":5337,"meta":25},[5335],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[42,5339,5336],{"__ignoreMap":25},[20,5341,5342],{},"小案例",[36,5344,5346],{"className":270,"code":5345,"language":272,"meta":25,"style":25},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[42,5347,5348,5353,5377,5381,5398,5405],{"__ignoreMap":25},[45,5349,5350],{"class":47,"line":48},[45,5351,5352],{"class":337},"\u002F\u002Fnum1,num2形参\n",[45,5354,5355,5357,5360,5362,5364,5368,5370,5372,5375],{"class":47,"line":66},[45,5356,285],{"class":51},[45,5358,5359],{"class":69}," add",[45,5361,282],{"class":55},[45,5363,285],{"class":51},[45,5365,5367],{"class":5366},"s4XuR"," num1",[45,5369,655],{"class":55},[45,5371,285],{"class":51},[45,5373,5374],{"class":5366}," num2",[45,5376,139],{"class":55},[45,5378,5379],{"class":47,"line":1331},[45,5380,1697],{"class":55},[45,5382,5383,5385,5388,5390,5393,5395],{"class":47,"line":1346},[45,5384,2135],{"class":51},[45,5386,5387],{"class":55}," sum",[45,5389,59],{"class":51},[45,5391,5392],{"class":55},"num1",[45,5394,758],{"class":51},[45,5396,5397],{"class":55},"num2;\n",[45,5399,5400,5402],{"class":47,"line":1352},[45,5401,4240],{"class":51},[45,5403,5404],{"class":55}," sum;\n",[45,5406,5407],{"class":47,"line":1366},[45,5408,1716],{"class":55},[15,5410,5412],{"id":5411},"_22函数调用","2.2函数调用",[20,5414,5415],{},"调用刚刚写的求和函数",[36,5417,5419],{"className":270,"code":5418,"language":272,"meta":25,"style":25},"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",[42,5420,5421,5429,5433,5438,5450,5462,5471,5476,5488],{"__ignoreMap":25},[45,5422,5423,5425,5427],{"class":47,"line":48},[45,5424,285],{"class":51},[45,5426,2123],{"class":69},[45,5428,2126],{"class":55},[45,5430,5431],{"class":47,"line":66},[45,5432,1697],{"class":55},[45,5434,5435],{"class":47,"line":1331},[45,5436,5437],{"class":337},"    \u002F\u002Fa,b实参\n",[45,5439,5440,5442,5444,5446,5448],{"class":47,"line":1346},[45,5441,2135],{"class":51},[45,5443,1550],{"class":55},[45,5445,59],{"class":51},[45,5447,469],{"class":79},[45,5449,1442],{"class":55},[45,5451,5452,5454,5456,5458,5460],{"class":47,"line":1352},[45,5453,2135],{"class":51},[45,5455,2983],{"class":55},[45,5457,59],{"class":51},[45,5459,469],{"class":79},[45,5461,1442],{"class":55},[45,5463,5464,5466,5468],{"class":47,"line":1366},[45,5465,2162],{"class":55},[45,5467,1581],{"class":51},[45,5469,5470],{"class":55},"a,b;\n",[45,5472,5473],{"class":47,"line":1372},[45,5474,5475],{"class":337},"    \u002F\u002F调用函数时，实参值传给了形参\n",[45,5477,5478,5480,5482,5485],{"class":47,"line":1463},[45,5479,1702],{"class":55},[45,5481,1320],{"class":51},[45,5483,5484],{"class":69},"add",[45,5486,5487],{"class":55},"(a,b);\n",[45,5489,5490],{"class":47,"line":1469},[45,5491,1716],{"class":55},[15,5493,5495],{"id":5494},"_23值传递","2.3值传递",[20,5497,5498],{},"值传递就是函数调用时实参将数值传给形参",[20,5500,5501],{},"值传递时，如果形参发生任何改变，不会影响实参",[20,5503,5504],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[36,5506,5508],{"className":270,"code":5507,"language":272,"meta":25,"style":25},"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",[42,5509,5510,5532,5536,5549,5566,5584,5595,5604,5613,5626,5642,5658,5667,5671,5679,5683,5695,5707,5714],{"__ignoreMap":25},[45,5511,5512,5515,5518,5520,5522,5524,5526,5528,5530],{"class":47,"line":48},[45,5513,5514],{"class":51},"void",[45,5516,5517],{"class":69}," swap",[45,5519,282],{"class":55},[45,5521,285],{"class":51},[45,5523,5367],{"class":5366},[45,5525,655],{"class":55},[45,5527,285],{"class":51},[45,5529,5374],{"class":5366},[45,5531,139],{"class":55},[45,5533,5534],{"class":47,"line":66},[45,5535,1697],{"class":55},[45,5537,5538,5540,5542,5545,5547],{"class":47,"line":1331},[45,5539,1702],{"class":55},[45,5541,1320],{"class":51},[45,5543,5544],{"class":62},"\"交换前：\"",[45,5546,1320],{"class":51},[45,5548,1343],{"class":55},[45,5550,5551,5553,5555,5558,5560,5562,5564],{"class":47,"line":1346},[45,5552,1702],{"class":55},[45,5554,1320],{"class":51},[45,5556,5557],{"class":62},"\"num1=\"",[45,5559,1320],{"class":51},[45,5561,5392],{"class":55},[45,5563,1320],{"class":51},[45,5565,1343],{"class":55},[45,5567,5568,5570,5572,5575,5577,5580,5582],{"class":47,"line":1352},[45,5569,1702],{"class":55},[45,5571,1320],{"class":51},[45,5573,5574],{"class":62},"\"num2=\"",[45,5576,1320],{"class":51},[45,5578,5579],{"class":55},"num2",[45,5581,1320],{"class":51},[45,5583,1343],{"class":55},[45,5585,5586,5588,5590,5592],{"class":47,"line":1366},[45,5587,2135],{"class":51},[45,5589,4405],{"class":55},[45,5591,59],{"class":51},[45,5593,5594],{"class":55},"num1;\n",[45,5596,5597,5600,5602],{"class":47,"line":1372},[45,5598,5599],{"class":55},"    num1",[45,5601,59],{"class":51},[45,5603,5397],{"class":55},[45,5605,5606,5609,5611],{"class":47,"line":1463},[45,5607,5608],{"class":55},"    num2",[45,5610,59],{"class":51},[45,5612,4430],{"class":55},[45,5614,5615,5617,5619,5622,5624],{"class":47,"line":1469},[45,5616,1702],{"class":55},[45,5618,1320],{"class":51},[45,5620,5621],{"class":62},"\"交换后：\"",[45,5623,1320],{"class":51},[45,5625,1343],{"class":55},[45,5627,5628,5630,5632,5634,5636,5638,5640],{"class":47,"line":1481},[45,5629,1702],{"class":55},[45,5631,1320],{"class":51},[45,5633,5557],{"class":62},[45,5635,1320],{"class":51},[45,5637,5392],{"class":55},[45,5639,1320],{"class":51},[45,5641,1343],{"class":55},[45,5643,5644,5646,5648,5650,5652,5654,5656],{"class":47,"line":1763},[45,5645,1702],{"class":55},[45,5647,1320],{"class":51},[45,5649,5574],{"class":62},[45,5651,1320],{"class":51},[45,5653,5579],{"class":55},[45,5655,1320],{"class":51},[45,5657,1343],{"class":55},[45,5659,5660,5662,5664],{"class":47,"line":1768},[45,5661,4240],{"class":51},[45,5663,334],{"class":55},[45,5665,5666],{"class":337},"\u002F\u002F或者不写\n",[45,5668,5669],{"class":47,"line":1774},[45,5670,1716],{"class":55},[45,5672,5673,5675,5677],{"class":47,"line":1779},[45,5674,285],{"class":51},[45,5676,2123],{"class":69},[45,5678,2126],{"class":55},[45,5680,5681],{"class":47,"line":1793},[45,5682,1697],{"class":55},[45,5684,5685,5687,5689,5691,5693],{"class":47,"line":1798},[45,5686,2135],{"class":51},[45,5688,1550],{"class":55},[45,5690,59],{"class":51},[45,5692,723],{"class":79},[45,5694,1442],{"class":55},[45,5696,5697,5699,5701,5703,5705],{"class":47,"line":1804},[45,5698,2135],{"class":51},[45,5700,2983],{"class":55},[45,5702,59],{"class":51},[45,5704,977],{"class":79},[45,5706,1442],{"class":55},[45,5708,5709,5712],{"class":47,"line":1825},[45,5710,5711],{"class":69},"    swap",[45,5713,5487],{"class":55},[45,5715,5716],{"class":47,"line":1830},[45,5717,1716],{"class":55},[15,5719,5721],{"id":5720},"_24函数的常见形式","2.4函数的常见形式",[233,5723,5724],{},[169,5725,5726],{},"无参无返",[36,5728,5730],{"className":270,"code":5729,"language":272,"meta":25,"style":25},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[42,5731,5732,5741,5745,5758,5762,5770,5774,5779,5787],{"__ignoreMap":25},[45,5733,5734,5736,5739],{"class":47,"line":48},[45,5735,5514],{"class":51},[45,5737,5738],{"class":69}," test01",[45,5740,2126],{"class":55},[45,5742,5743],{"class":47,"line":66},[45,5744,1697],{"class":55},[45,5746,5747,5749,5751,5754,5756],{"class":47,"line":1331},[45,5748,1702],{"class":55},[45,5750,1320],{"class":51},[45,5752,5753],{"class":62},"\"你好\"",[45,5755,1320],{"class":51},[45,5757,1343],{"class":55},[45,5759,5760],{"class":47,"line":1346},[45,5761,1716],{"class":55},[45,5763,5764,5766,5768],{"class":47,"line":1352},[45,5765,285],{"class":51},[45,5767,2123],{"class":69},[45,5769,2126],{"class":55},[45,5771,5772],{"class":47,"line":1366},[45,5773,1697],{"class":55},[45,5775,5776],{"class":47,"line":1372},[45,5777,5778],{"class":337},"    \u002F\u002F函数调用\n",[45,5780,5781,5784],{"class":47,"line":1463},[45,5782,5783],{"class":69},"    test01",[45,5785,5786],{"class":55},"();\n",[45,5788,5789],{"class":47,"line":1469},[45,5790,1716],{"class":55},[233,5792,5793],{"start":66},[169,5794,5795],{},"有参无返",[36,5797,5799],{"className":270,"code":5798,"language":272,"meta":25,"style":25},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[42,5800,5801,5816,5820,5832,5836,5844,5848,5859],{"__ignoreMap":25},[45,5802,5803,5805,5808,5810,5812,5814],{"class":47,"line":48},[45,5804,5514],{"class":51},[45,5806,5807],{"class":69}," test02",[45,5809,282],{"class":55},[45,5811,285],{"class":51},[45,5813,1550],{"class":5366},[45,5815,139],{"class":55},[45,5817,5818],{"class":47,"line":66},[45,5819,1697],{"class":55},[45,5821,5822,5824,5826,5828,5830],{"class":47,"line":1331},[45,5823,1702],{"class":55},[45,5825,1320],{"class":51},[45,5827,5753],{"class":62},[45,5829,1320],{"class":51},[45,5831,1343],{"class":55},[45,5833,5834],{"class":47,"line":1346},[45,5835,1716],{"class":55},[45,5837,5838,5840,5842],{"class":47,"line":1352},[45,5839,285],{"class":51},[45,5841,2123],{"class":69},[45,5843,2126],{"class":55},[45,5845,5846],{"class":47,"line":1366},[45,5847,1697],{"class":55},[45,5849,5850,5853,5855,5857],{"class":47,"line":1372},[45,5851,5852],{"class":69},"    test02",[45,5854,282],{"class":55},[45,5856,588],{"class":79},[45,5858,2869],{"class":55},[45,5860,5861],{"class":47,"line":1463},[45,5862,1716],{"class":55},[233,5864,5865],{"start":1331},[169,5866,5867],{},"无参有返",[36,5869,5871],{"className":270,"code":5870,"language":272,"meta":25,"style":25},"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",[42,5872,5873,5882,5886,5898,5907,5911,5919,5923,5936,5955],{"__ignoreMap":25},[45,5874,5875,5877,5880],{"class":47,"line":48},[45,5876,285],{"class":51},[45,5878,5879],{"class":69}," test03",[45,5881,2126],{"class":55},[45,5883,5884],{"class":47,"line":66},[45,5885,1697],{"class":55},[45,5887,5888,5890,5892,5894,5896],{"class":47,"line":1331},[45,5889,1702],{"class":55},[45,5891,1320],{"class":51},[45,5893,5753],{"class":62},[45,5895,1320],{"class":51},[45,5897,1343],{"class":55},[45,5899,5900,5902,5905],{"class":47,"line":1346},[45,5901,4240],{"class":51},[45,5903,5904],{"class":79}," 100",[45,5906,1442],{"class":55},[45,5908,5909],{"class":47,"line":1352},[45,5910,1716],{"class":55},[45,5912,5913,5915,5917],{"class":47,"line":1366},[45,5914,285],{"class":51},[45,5916,2123],{"class":69},[45,5918,2126],{"class":55},[45,5920,5921],{"class":47,"line":1372},[45,5922,1697],{"class":55},[45,5924,5925,5927,5929,5931,5934],{"class":47,"line":1463},[45,5926,2135],{"class":51},[45,5928,5367],{"class":55},[45,5930,59],{"class":51},[45,5932,5933],{"class":69},"test03",[45,5935,5786],{"class":55},[45,5937,5938,5940,5942,5944,5946,5948,5950,5952],{"class":47,"line":1469},[45,5939,1702],{"class":55},[45,5941,1320],{"class":51},[45,5943,5557],{"class":62},[45,5945,1320],{"class":51},[45,5947,5392],{"class":55},[45,5949,1320],{"class":51},[45,5951,1390],{"class":55},[45,5953,5954],{"class":337}," \u002F\u002F100\n",[45,5956,5957],{"class":47,"line":1481},[45,5958,1716],{"class":55},[20,5960,5961],{},"4.有参有返",[36,5963,5965],{"className":270,"code":5964,"language":272,"meta":25,"style":25},"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",[42,5966,5967,5982,5986,5999,6005,6009,6018,6022,6034,6048,6063],{"__ignoreMap":25},[45,5968,5969,5971,5974,5976,5978,5980],{"class":47,"line":48},[45,5970,285],{"class":51},[45,5972,5973],{"class":69}," test04",[45,5975,282],{"class":55},[45,5977,285],{"class":51},[45,5979,1550],{"class":5366},[45,5981,139],{"class":55},[45,5983,5984],{"class":47,"line":66},[45,5985,1697],{"class":55},[45,5987,5988,5990,5992,5995,5997],{"class":47,"line":1331},[45,5989,1702],{"class":55},[45,5991,1320],{"class":51},[45,5993,5994],{"class":62},"\"hello\"",[45,5996,1320],{"class":51},[45,5998,1343],{"class":55},[45,6000,6001,6003],{"class":47,"line":1346},[45,6002,4240],{"class":51},[45,6004,1584],{"class":55},[45,6006,6007],{"class":47,"line":1352},[45,6008,1716],{"class":55},[45,6010,6011,6013,6016],{"class":47,"line":1366},[45,6012,285],{"class":51},[45,6014,6015],{"class":69}," mian",[45,6017,2126],{"class":55},[45,6019,6020],{"class":47,"line":1372},[45,6021,1697],{"class":55},[45,6023,6024,6026,6028,6030,6032],{"class":47,"line":1463},[45,6025,2135],{"class":51},[45,6027,2983],{"class":55},[45,6029,59],{"class":51},[45,6031,495],{"class":79},[45,6033,1442],{"class":55},[45,6035,6036,6038,6040,6042,6045],{"class":47,"line":1469},[45,6037,2135],{"class":51},[45,6039,2999],{"class":55},[45,6041,59],{"class":51},[45,6043,6044],{"class":69},"test04",[45,6046,6047],{"class":55},"(b);\n",[45,6049,6050,6052,6054,6056,6058,6060],{"class":47,"line":1481},[45,6051,1702],{"class":55},[45,6053,1320],{"class":51},[45,6055,565],{"class":55},[45,6057,1320],{"class":51},[45,6059,1390],{"class":55},[45,6061,6062],{"class":337}," \u002F\u002F1\n",[45,6064,6065],{"class":47,"line":1763},[45,6066,1716],{"class":55},[15,6068,6070],{"id":6069},"_25函数的声明","2.5函数的声明",[20,6072,6073],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[20,6075,6076,6077],{},"函数的",[427,6078,6079],{},"声明可以多次，但是函数的定义只能有一次",[36,6081,6083],{"className":270,"code":6082,"language":272,"meta":25,"style":25},"\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",[42,6084,6085,6090,6095,6120,6129,6133,6145,6157,6173,6177,6197,6201,6220],{"__ignoreMap":25},[45,6086,6087],{"class":47,"line":48},[45,6088,6089],{"class":337},"\u002F\u002F函数声明\n",[45,6091,6092],{"class":47,"line":66},[45,6093,6094],{"class":337},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[45,6096,6097,6099,6102,6104,6106,6108,6110,6112,6114,6117],{"class":47,"line":1331},[45,6098,285],{"class":51},[45,6100,6101],{"class":69}," max",[45,6103,282],{"class":55},[45,6105,285],{"class":51},[45,6107,1550],{"class":5366},[45,6109,655],{"class":55},[45,6111,285],{"class":51},[45,6113,2983],{"class":5366},[45,6115,6116],{"class":55},");",[45,6118,6119],{"class":337},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[45,6121,6122,6124,6126],{"class":47,"line":1346},[45,6123,285],{"class":51},[45,6125,2123],{"class":69},[45,6127,6128],{"class":55},"() \n",[45,6130,6131],{"class":47,"line":1352},[45,6132,1697],{"class":55},[45,6134,6135,6137,6139,6141,6143],{"class":47,"line":1366},[45,6136,2135],{"class":51},[45,6138,1550],{"class":55},[45,6140,59],{"class":51},[45,6142,723],{"class":79},[45,6144,1442],{"class":55},[45,6146,6147,6149,6151,6153,6155],{"class":47,"line":1372},[45,6148,2135],{"class":51},[45,6150,2983],{"class":55},[45,6152,59],{"class":51},[45,6154,977],{"class":79},[45,6156,1442],{"class":55},[45,6158,6159,6161,6163,6166,6169,6171],{"class":47,"line":1463},[45,6160,1702],{"class":55},[45,6162,1320],{"class":51},[45,6164,6165],{"class":69},"max",[45,6167,6168],{"class":55},"(a,b)",[45,6170,1320],{"class":51},[45,6172,1343],{"class":55},[45,6174,6175],{"class":47,"line":1469},[45,6176,1716],{"class":55},[45,6178,6179,6181,6183,6185,6187,6189,6191,6193,6195],{"class":47,"line":1481},[45,6180,285],{"class":51},[45,6182,6101],{"class":69},[45,6184,282],{"class":55},[45,6186,285],{"class":51},[45,6188,1550],{"class":5366},[45,6190,655],{"class":55},[45,6192,285],{"class":51},[45,6194,2983],{"class":5366},[45,6196,139],{"class":55},[45,6198,6199],{"class":47,"line":1763},[45,6200,1697],{"class":55},[45,6202,6203,6205,6207,6209,6211,6213,6215,6217],{"class":47,"line":1768},[45,6204,4240],{"class":51},[45,6206,1550],{"class":55},[45,6208,1237],{"class":51},[45,6210,540],{"class":55},[45,6212,1263],{"class":51},[45,6214,516],{"class":55},[45,6216,1136],{"class":51},[45,6218,6219],{"class":55},"b;\n",[45,6221,6222],{"class":47,"line":1774},[45,6223,1716],{"class":55},[15,6225,6227],{"id":6226},"_26函数的分文件编写","2.6函数的分文件编写",[20,6229,6230],{},"4个步骤：",[166,6232,6233,6236,6239,6242],{},[169,6234,6235],{},"1.创建后缀名为.h的头文件",[169,6237,6238],{},"2.创建后缀名为.cpp的源文件",[169,6240,6241],{},"3.在头文件中写函数的定义",[169,6243,6244],{},"4.在源文件中写函数的定义\n示例：",[20,6246,6247],{},"头文件：swap.h",[36,6249,6251],{"className":270,"code":6250,"language":272,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[42,6252,6253,6259,6269,6273],{"__ignoreMap":25},[45,6254,6255,6257],{"class":47,"line":48},[45,6256,2100],{"class":51},[45,6258,2103],{"class":62},[45,6260,6261,6263,6265,6267],{"class":47,"line":66},[45,6262,2108],{"class":51},[45,6264,2111],{"class":51},[45,6266,2114],{"class":69},[45,6268,1442],{"class":55},[45,6270,6271],{"class":47,"line":1331},[45,6272,6089],{"class":337},[45,6274,6275,6277,6279,6281,6283,6285,6287,6289,6291],{"class":47,"line":1346},[45,6276,5514],{"class":51},[45,6278,5517],{"class":69},[45,6280,282],{"class":55},[45,6282,285],{"class":51},[45,6284,1550],{"class":5366},[45,6286,655],{"class":55},[45,6288,285],{"class":51},[45,6290,2983],{"class":5366},[45,6292,2869],{"class":55},[20,6294,6295],{},"源文件：swap.cpp",[36,6297,6299],{"className":270,"code":6298,"language":272,"meta":25,"style":25},"#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",[42,6300,6301,6308,6313,6333,6337,6348,6357,6366,6383,6400],{"__ignoreMap":25},[45,6302,6303,6305],{"class":47,"line":48},[45,6304,2100],{"class":51},[45,6306,6307],{"class":62}," \"swap.h\"\n",[45,6309,6310],{"class":47,"line":66},[45,6311,6312],{"class":337},"\u002F\u002F函数的定义\n",[45,6314,6315,6317,6319,6321,6323,6325,6327,6329,6331],{"class":47,"line":1331},[45,6316,5514],{"class":51},[45,6318,5517],{"class":69},[45,6320,282],{"class":55},[45,6322,285],{"class":51},[45,6324,1550],{"class":5366},[45,6326,655],{"class":55},[45,6328,285],{"class":51},[45,6330,2983],{"class":5366},[45,6332,139],{"class":55},[45,6334,6335],{"class":47,"line":1346},[45,6336,1697],{"class":55},[45,6338,6339,6341,6343,6345],{"class":47,"line":1352},[45,6340,2135],{"class":51},[45,6342,4405],{"class":55},[45,6344,59],{"class":51},[45,6346,6347],{"class":55},"a;\n",[45,6349,6350,6353,6355],{"class":47,"line":1366},[45,6351,6352],{"class":55},"    a",[45,6354,59],{"class":51},[45,6356,6219],{"class":55},[45,6358,6359,6362,6364],{"class":47,"line":1372},[45,6360,6361],{"class":55},"    b",[45,6363,59],{"class":51},[45,6365,4430],{"class":55},[45,6367,6368,6370,6372,6375,6377,6379,6381],{"class":47,"line":1463},[45,6369,1702],{"class":55},[45,6371,1320],{"class":51},[45,6373,6374],{"class":62},"\"a=\"",[45,6376,1320],{"class":51},[45,6378,516],{"class":55},[45,6380,1320],{"class":51},[45,6382,1343],{"class":55},[45,6384,6385,6387,6389,6392,6394,6396,6398],{"class":47,"line":1469},[45,6386,1702],{"class":55},[45,6388,1320],{"class":51},[45,6390,6391],{"class":62},"\"b=\"",[45,6393,1320],{"class":51},[45,6395,540],{"class":55},[45,6397,1320],{"class":51},[45,6399,1343],{"class":55},[45,6401,6402],{"class":47,"line":1481},[45,6403,1716],{"class":55},[196,6405,6406],{},"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":25,"searchDepth":66,"depth":66,"links":6408},[6409,6410,6411,6412,6413,6414],{"id":5322,"depth":66,"text":5323},{"id":5411,"depth":66,"text":5412},{"id":5494,"depth":66,"text":5495},{"id":5720,"depth":66,"text":5721},{"id":6069,"depth":66,"text":6070},{"id":6226,"depth":66,"text":6227},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5314,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6421,"title":6422,"body":6423,"description":6430,"extension":205,"meta":7835,"navigation":207,"path":7836,"seo":7837,"stem":7838,"__hash__":7839},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6424,"toc":7825},[6425,6428,6431,6435,6597,6601,6604,6607,6610,6613,6753,6757,6760,6763,6766,6831,6835,6840,6907,6910,6914,6917,6928,6933,6953,6956,6961,6980,6983,6987,7006,7009,7013,7248,7252,7255,7258,7261,7423,7426,7430,7433,7439,7822],[10,6426,6422],{"id":6427},"_3指针",[20,6429,6430],{},"通过指针保存一个地址，指针就是个地址",[15,6432,6434],{"id":6433},"_31定义指针","3.1定义指针",[36,6436,6438],{"className":270,"code":6437,"language":272,"meta":25,"style":25},"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",[42,6439,6440,6448,6452,6457,6469,6474,6482,6492,6510,6530,6534,6539,6544,6549,6563,6579,6593],{"__ignoreMap":25},[45,6441,6442,6444,6446],{"class":47,"line":48},[45,6443,285],{"class":51},[45,6445,2123],{"class":69},[45,6447,2126],{"class":55},[45,6449,6450],{"class":47,"line":66},[45,6451,1697],{"class":55},[45,6453,6454],{"class":47,"line":1331},[45,6455,6456],{"class":337},"    \u002F\u002F1.定义指针\n",[45,6458,6459,6461,6463,6465,6467],{"class":47,"line":1346},[45,6460,2135],{"class":51},[45,6462,1550],{"class":55},[45,6464,59],{"class":51},[45,6466,723],{"class":79},[45,6468,1442],{"class":55},[45,6470,6471],{"class":47,"line":1352},[45,6472,6473],{"class":337},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[45,6475,6476,6479],{"class":47,"line":1366},[45,6477,6478],{"class":51},"    int*",[45,6480,6481],{"class":55},"p;\n",[45,6483,6484,6487,6490],{"class":47,"line":1372},[45,6485,6486],{"class":55},"    p",[45,6488,6489],{"class":51},"=&",[45,6491,6347],{"class":55},[45,6493,6494,6496,6498,6501,6504,6506,6508],{"class":47,"line":1463},[45,6495,1702],{"class":55},[45,6497,1320],{"class":51},[45,6499,6500],{"class":62},"\"a的地址为：\"",[45,6502,6503],{"class":51},"\u003C\u003C&",[45,6505,516],{"class":55},[45,6507,1320],{"class":51},[45,6509,1343],{"class":55},[45,6511,6512,6514,6516,6519,6521,6523,6525,6527],{"class":47,"line":1469},[45,6513,1702],{"class":55},[45,6515,1320],{"class":51},[45,6517,6518],{"class":62},"\"指针p为：\"",[45,6520,1320],{"class":51},[45,6522,20],{"class":55},[45,6524,1320],{"class":51},[45,6526,1390],{"class":55},[45,6528,6529],{"class":337},"\u002F\u002F指针p表示的就是a的地址\n",[45,6531,6532],{"class":47,"line":1481},[45,6533,2550],{"emptyLinePlaceholder":207},[45,6535,6536],{"class":47,"line":1763},[45,6537,6538],{"class":337},"    \u002F\u002F2.使用指针\n",[45,6540,6541],{"class":47,"line":1768},[45,6542,6543],{"class":337},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[45,6545,6546],{"class":47,"line":1774},[45,6547,6548],{"class":337},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[45,6550,6551,6554,6556,6558,6561],{"class":47,"line":1779},[45,6552,6553],{"class":51},"    *",[45,6555,20],{"class":55},[45,6557,59],{"class":51},[45,6559,6560],{"class":79},"1000",[45,6562,1442],{"class":55},[45,6564,6565,6567,6570,6572,6574,6576],{"class":47,"line":1793},[45,6566,1702],{"class":55},[45,6568,6569],{"class":51},"\u003C\u003C*",[45,6571,20],{"class":55},[45,6573,1320],{"class":51},[45,6575,1390],{"class":55},[45,6577,6578],{"class":337},"\u002F\u002F1000\n",[45,6580,6581,6583,6585,6587,6589,6591],{"class":47,"line":1798},[45,6582,1702],{"class":55},[45,6584,1320],{"class":51},[45,6586,516],{"class":55},[45,6588,1320],{"class":51},[45,6590,1390],{"class":55},[45,6592,6578],{"class":337},[45,6594,6595],{"class":47,"line":1804},[45,6596,1716],{"class":55},[15,6598,6600],{"id":6599},"_32指针所占的内存空间","3.2指针所占的内存空间",[20,6602,6603],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[20,6605,6606],{},"在32位操作系统下：占用4个字节空间",[20,6608,6609],{},"在64位操作系统下：占用8个字节空间",[20,6611,6612],{},"上方是不管啥数据类型的",[36,6614,6616],{"className":270,"code":6615,"language":272,"meta":25,"style":25},"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",[42,6617,6618,6626,6630,6635,6647,6652,6657,6662,6675,6697,6723,6749],{"__ignoreMap":25},[45,6619,6620,6622,6624],{"class":47,"line":48},[45,6621,285],{"class":51},[45,6623,2123],{"class":69},[45,6625,2126],{"class":55},[45,6627,6628],{"class":47,"line":66},[45,6629,1697],{"class":55},[45,6631,6632],{"class":47,"line":1331},[45,6633,6634],{"class":337},"    \u002F\u002F指针所占内存空间\n",[45,6636,6637,6639,6641,6643,6645],{"class":47,"line":1346},[45,6638,2135],{"class":51},[45,6640,1550],{"class":55},[45,6642,59],{"class":51},[45,6644,723],{"class":79},[45,6646,1442],{"class":55},[45,6648,6649],{"class":47,"line":1352},[45,6650,6651],{"class":337},"    \u002F\u002Fint *p;\n",[45,6653,6654],{"class":47,"line":1366},[45,6655,6656],{"class":337},"    \u002F\u002Fp=&a;\n",[45,6658,6659],{"class":47,"line":1372},[45,6660,6661],{"class":337},"    \u002F\u002F上述可以写为以下：\n",[45,6663,6664,6666,6669,6671,6673],{"class":47,"line":1463},[45,6665,2135],{"class":51},[45,6667,6668],{"class":51}," *",[45,6670,20],{"class":55},[45,6672,6489],{"class":51},[45,6674,6347],{"class":55},[45,6676,6677,6680,6682,6685,6687,6690,6692,6694],{"class":47,"line":1469},[45,6678,6679],{"class":55},"    cout ",[45,6681,1320],{"class":51},[45,6683,6684],{"class":62},"\"sizeof(int *)\"",[45,6686,1524],{"class":51},[45,6688,6689],{"class":55},"(p)",[45,6691,1320],{"class":51},[45,6693,1390],{"class":55},[45,6695,6696],{"class":337},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[45,6698,6699,6701,6703,6705,6707,6709,6711,6713,6715,6717,6720],{"class":47,"line":1481},[45,6700,6679],{"class":55},[45,6702,1320],{"class":51},[45,6704,6684],{"class":62},[45,6706,1524],{"class":51},[45,6708,282],{"class":55},[45,6710,285],{"class":51},[45,6712,6668],{"class":51},[45,6714,706],{"class":55},[45,6716,1320],{"class":51},[45,6718,6719],{"class":55},"endl",[45,6721,6722],{"class":337},"  \u002F\u002F4字节(32位的话)\n",[45,6724,6725,6727,6729,6732,6734,6736,6738,6740,6742,6744,6746],{"class":47,"line":1763},[45,6726,6679],{"class":55},[45,6728,1320],{"class":51},[45,6730,6731],{"class":62},"\"sizeof(char *)\"",[45,6733,1524],{"class":51},[45,6735,282],{"class":55},[45,6737,375],{"class":51},[45,6739,6668],{"class":51},[45,6741,706],{"class":55},[45,6743,1320],{"class":51},[45,6745,1390],{"class":55},[45,6747,6748],{"class":337}," \u002F\u002F4字节(32位的话)\n",[45,6750,6751],{"class":47,"line":1768},[45,6752,1716],{"class":55},[15,6754,6756],{"id":6755},"_33空指针","3.3空指针",[20,6758,6759],{},"空指针：指针变量指向内存中编号为0的空间",[20,6761,6762],{},"用途：初始化指针变量",[20,6764,6765],{},"注意：空指针指向的内存是不可以访问的",[36,6767,6769],{"className":270,"code":6768,"language":272,"meta":25,"style":25},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[42,6770,6771,6779,6783,6788,6802,6807,6822,6827],{"__ignoreMap":25},[45,6772,6773,6775,6777],{"class":47,"line":48},[45,6774,285],{"class":51},[45,6776,2123],{"class":69},[45,6778,2126],{"class":55},[45,6780,6781],{"class":47,"line":66},[45,6782,1697],{"class":55},[45,6784,6785],{"class":47,"line":1331},[45,6786,6787],{"class":337},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[45,6789,6790,6792,6794,6796,6798,6800],{"class":47,"line":1346},[45,6791,2135],{"class":51},[45,6793,6668],{"class":51},[45,6795,20],{"class":55},[45,6797,59],{"class":51},[45,6799,2542],{"class":79},[45,6801,1442],{"class":55},[45,6803,6804],{"class":47,"line":1352},[45,6805,6806],{"class":337},"    \u002F\u002F2.空指针不能进行访问\n",[45,6808,6809,6811,6813,6815,6817,6819],{"class":47,"line":1366},[45,6810,6553],{"class":51},[45,6812,20],{"class":55},[45,6814,59],{"class":51},[45,6816,588],{"class":79},[45,6818,334],{"class":55},[45,6820,6821],{"class":337},"\u002F\u002F直接报错，压根不能访问\n",[45,6823,6824],{"class":47,"line":1372},[45,6825,6826],{"class":337},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[45,6828,6829],{"class":47,"line":1463},[45,6830,1716],{"class":55},[15,6832,6834],{"id":6833},"_34野指针","3.4野指针",[20,6836,6837],{},[427,6838,6839],{},"指针变量指向非法的内存空间",[36,6841,6843],{"className":270,"code":6842,"language":272,"meta":25,"style":25},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[42,6844,6845,6853,6857,6886,6891,6903],{"__ignoreMap":25},[45,6846,6847,6849,6851],{"class":47,"line":48},[45,6848,285],{"class":51},[45,6850,2123],{"class":69},[45,6852,2126],{"class":55},[45,6854,6855],{"class":47,"line":66},[45,6856,1697],{"class":55},[45,6858,6859,6861,6863,6865,6867,6869,6871,6873,6875,6878,6881,6883],{"class":47,"line":1331},[45,6860,2135],{"class":51},[45,6862,6668],{"class":51},[45,6864,20],{"class":55},[45,6866,59],{"class":51},[45,6868,282],{"class":55},[45,6870,285],{"class":51},[45,6872,6668],{"class":51},[45,6874,706],{"class":55},[45,6876,6877],{"class":51},"0x",[45,6879,6880],{"class":79},"1100",[45,6882,334],{"class":55},[45,6884,6885],{"class":337}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[45,6887,6888],{"class":47,"line":1346},[45,6889,6890],{"class":337},"    \u002F\u002F访问野指针报错\n",[45,6892,6893,6895,6897,6899,6901],{"class":47,"line":1352},[45,6894,1702],{"class":55},[45,6896,6569],{"class":51},[45,6898,20],{"class":55},[45,6900,1320],{"class":51},[45,6902,1343],{"class":55},[45,6904,6905],{"class":47,"line":1366},[45,6906,1716],{"class":55},[20,6908,6909],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[15,6911,6913],{"id":6912},"_35const修饰指针","3.5const修饰指针",[20,6915,6916],{},"三种情况：",[166,6918,6919,6922,6925],{},[169,6920,6921],{},"const修饰指针 常量指针",[169,6923,6924],{},"const修饰常量 指针常量",[169,6926,6927],{},"const即修饰指针，又修饰常量",[233,6929,6930],{},[169,6931,6932],{},"常量指针",[36,6934,6936],{"className":270,"code":6935,"language":272,"meta":25,"style":25},"const int *p=&a;\n",[42,6937,6938],{"__ignoreMap":25},[45,6939,6940,6943,6945,6947,6949,6951],{"class":47,"line":48},[45,6941,6942],{"class":51},"const",[45,6944,2532],{"class":51},[45,6946,6668],{"class":51},[45,6948,20],{"class":55},[45,6950,6489],{"class":51},[45,6952,6347],{"class":55},[20,6954,6955],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[233,6957,6958],{"start":66},[169,6959,6960],{},"指针常量",[36,6962,6964],{"className":270,"code":6963,"language":272,"meta":25,"style":25},"int *const p=&a;\n",[42,6965,6966],{"__ignoreMap":25},[45,6967,6968,6970,6973,6976,6978],{"class":47,"line":48},[45,6969,285],{"class":51},[45,6971,6972],{"class":51}," *const",[45,6974,6975],{"class":55}," p",[45,6977,6489],{"class":51},[45,6979,6347],{"class":55},[20,6981,6982],{},"指针的指向不可以改，指针指向的值可以改",[233,6984,6985],{"start":1331},[169,6986,6927],{},[36,6988,6990],{"className":270,"code":6989,"language":272,"meta":25,"style":25},"const int *const p=&a;\n",[42,6991,6992],{"__ignoreMap":25},[45,6993,6994,6996,6998,7000,7002,7004],{"class":47,"line":48},[45,6995,6942],{"class":51},[45,6997,2532],{"class":51},[45,6999,6972],{"class":51},[45,7001,6975],{"class":55},[45,7003,6489],{"class":51},[45,7005,6347],{"class":55},[20,7007,7008],{},"指针的指向和指针指向的值都不可以改变",[15,7010,7012],{"id":7011},"_36指针和数组","3.6指针和数组",[36,7014,7016],{"className":270,"code":7015,"language":272,"meta":25,"style":25},"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",[42,7017,7018,7026,7030,7035,7089,7110,7126,7142,7153,7170,7175,7189,7215,7219,7231,7240,7244],{"__ignoreMap":25},[45,7019,7020,7022,7024],{"class":47,"line":48},[45,7021,285],{"class":51},[45,7023,2123],{"class":69},[45,7025,2126],{"class":55},[45,7027,7028],{"class":47,"line":66},[45,7029,1697],{"class":55},[45,7031,7032],{"class":47,"line":1331},[45,7033,7034],{"class":337},"    \u002F\u002F利用指针访问数组中的元素\n",[45,7036,7037,7039,7041,7043,7045,7047,7049,7051,7053,7055,7057,7059,7061,7063,7065,7067,7069,7071,7073,7075,7077,7079,7081,7083,7085,7087],{"class":47,"line":1346},[45,7038,2135],{"class":51},[45,7040,4112],{"class":55},[45,7042,723],{"class":79},[45,7044,1217],{"class":55},[45,7046,59],{"class":51},[45,7048,1173],{"class":55},[45,7050,495],{"class":79},[45,7052,655],{"class":55},[45,7054,356],{"class":79},[45,7056,655],{"class":55},[45,7058,350],{"class":79},[45,7060,655],{"class":55},[45,7062,570],{"class":79},[45,7064,655],{"class":55},[45,7066,596],{"class":79},[45,7068,655],{"class":55},[45,7070,621],{"class":79},[45,7072,655],{"class":55},[45,7074,646],{"class":79},[45,7076,655],{"class":55},[45,7078,672],{"class":79},[45,7080,655],{"class":55},[45,7082,697],{"class":79},[45,7084,655],{"class":55},[45,7086,723],{"class":79},[45,7088,4145],{"class":55},[45,7090,7091,7093,7095,7098,7100,7102,7104,7106,7108],{"class":47,"line":1352},[45,7092,1702],{"class":55},[45,7094,1320],{"class":51},[45,7096,7097],{"class":62},"\"数组的第一个元素为：\"",[45,7099,1320],{"class":51},[45,7101,4056],{"class":55},[45,7103,469],{"class":79},[45,7105,1217],{"class":55},[45,7107,1320],{"class":51},[45,7109,1343],{"class":55},[45,7111,7112,7114,7116,7118,7120,7123],{"class":47,"line":1366},[45,7113,2135],{"class":51},[45,7115,6668],{"class":51},[45,7117,20],{"class":55},[45,7119,59],{"class":51},[45,7121,7122],{"class":55},"arr;",[45,7124,7125],{"class":337},"\u002F\u002F注意数才要加取地址符号&\n",[45,7127,7128,7130,7132,7134,7136,7138,7140],{"class":47,"line":1372},[45,7129,1702],{"class":55},[45,7131,1320],{"class":51},[45,7133,7097],{"class":62},[45,7135,6569],{"class":51},[45,7137,20],{"class":55},[45,7139,1320],{"class":51},[45,7141,1343],{"class":55},[45,7143,7144,7146,7148,7150],{"class":47,"line":1463},[45,7145,6486],{"class":55},[45,7147,2442],{"class":51},[45,7149,334],{"class":55},[45,7151,7152],{"class":337}," \u002F\u002F让指针向后偏移4个字节\n",[45,7154,7155,7157,7159,7162,7164,7166,7168],{"class":47,"line":1469},[45,7156,1702],{"class":55},[45,7158,1320],{"class":51},[45,7160,7161],{"class":62},"\"数组的第二个元素为：\"",[45,7163,6569],{"class":51},[45,7165,20],{"class":55},[45,7167,1320],{"class":51},[45,7169,1343],{"class":55},[45,7171,7172],{"class":47,"line":1481},[45,7173,7174],{"class":337},"    \u002F\u002F利用指针遍历数组\n",[45,7176,7177,7179,7181,7184,7186],{"class":47,"line":1763},[45,7178,2135],{"class":51},[45,7180,6668],{"class":51},[45,7182,7183],{"class":55},"p2",[45,7185,59],{"class":51},[45,7187,7188],{"class":55},"arr;\n",[45,7190,7191,7193,7195,7197,7199,7201,7203,7205,7207,7209,7211,7213],{"class":47,"line":1768},[45,7192,3351],{"class":51},[45,7194,1809],{"class":55},[45,7196,285],{"class":51},[45,7198,3182],{"class":55},[45,7200,59],{"class":51},[45,7202,469],{"class":79},[45,7204,3189],{"class":55},[45,7206,1187],{"class":51},[45,7208,723],{"class":79},[45,7210,3189],{"class":55},[45,7212,2442],{"class":51},[45,7214,139],{"class":55},[45,7216,7217],{"class":47,"line":1774},[45,7218,2180],{"class":55},[45,7220,7221,7223,7225,7227,7229],{"class":47,"line":1779},[45,7222,3601],{"class":55},[45,7224,6569],{"class":51},[45,7226,7183],{"class":55},[45,7228,1320],{"class":51},[45,7230,1343],{"class":55},[45,7232,7233,7236,7238],{"class":47,"line":1793},[45,7234,7235],{"class":55},"        p2",[45,7237,2442],{"class":51},[45,7239,1442],{"class":55},[45,7241,7242],{"class":47,"line":1798},[45,7243,2337],{"class":55},[45,7245,7246],{"class":47,"line":1804},[45,7247,1716],{"class":55},[15,7249,7251],{"id":7250},"_37指针和函数","3.7指针和函数",[20,7253,7254],{},"利用指针做函数参数，可以修改实参的值",[20,7256,7257],{},"值传递：只改变形参，不改变实参",[20,7259,7260],{},"地址传递：",[36,7262,7264],{"className":270,"code":7263,"language":272,"meta":25,"style":25},"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",[42,7265,7266,7291,7295,7307,7318,7328,7332,7340,7344,7356,7368,7373,7389,7404,7419],{"__ignoreMap":25},[45,7267,7268,7270,7272,7274,7276,7278,7281,7283,7285,7287,7289],{"class":47,"line":48},[45,7269,5514],{"class":51},[45,7271,5517],{"class":69},[45,7273,282],{"class":55},[45,7275,285],{"class":51},[45,7277,6668],{"class":51},[45,7279,7280],{"class":5366},"p1",[45,7282,655],{"class":55},[45,7284,285],{"class":51},[45,7286,6668],{"class":51},[45,7288,7183],{"class":5366},[45,7290,139],{"class":55},[45,7292,7293],{"class":47,"line":66},[45,7294,1697],{"class":55},[45,7296,7297,7299,7301,7304],{"class":47,"line":1331},[45,7298,2135],{"class":51},[45,7300,4405],{"class":55},[45,7302,7303],{"class":51},"=*",[45,7305,7306],{"class":55},"p1;\n",[45,7308,7309,7311,7313,7315],{"class":47,"line":1346},[45,7310,6553],{"class":51},[45,7312,7280],{"class":55},[45,7314,7303],{"class":51},[45,7316,7317],{"class":55},"p2;\n",[45,7319,7320,7322,7324,7326],{"class":47,"line":1352},[45,7321,6553],{"class":51},[45,7323,7183],{"class":55},[45,7325,59],{"class":51},[45,7327,4430],{"class":55},[45,7329,7330],{"class":47,"line":1366},[45,7331,1716],{"class":55},[45,7333,7334,7336,7338],{"class":47,"line":1372},[45,7335,285],{"class":51},[45,7337,2123],{"class":69},[45,7339,2126],{"class":55},[45,7341,7342],{"class":47,"line":1463},[45,7343,1697],{"class":55},[45,7345,7346,7348,7350,7352,7354],{"class":47,"line":1469},[45,7347,2135],{"class":51},[45,7349,1550],{"class":55},[45,7351,59],{"class":51},[45,7353,723],{"class":79},[45,7355,1442],{"class":55},[45,7357,7358,7360,7362,7364,7366],{"class":47,"line":1481},[45,7359,2135],{"class":51},[45,7361,2983],{"class":55},[45,7363,59],{"class":51},[45,7365,977],{"class":79},[45,7367,1442],{"class":55},[45,7369,7370],{"class":47,"line":1763},[45,7371,7372],{"class":337},"    \u002F\u002F地址传递\n",[45,7374,7375,7377,7379,7381,7384,7386],{"class":47,"line":1768},[45,7376,5711],{"class":69},[45,7378,282],{"class":55},[45,7380,630],{"class":51},[45,7382,7383],{"class":55},"a,",[45,7385,630],{"class":51},[45,7387,7388],{"class":55},"b);\n",[45,7390,7391,7393,7395,7397,7399,7401],{"class":47,"line":1774},[45,7392,1702],{"class":55},[45,7394,1320],{"class":51},[45,7396,516],{"class":55},[45,7398,1320],{"class":51},[45,7400,1390],{"class":55},[45,7402,7403],{"class":337},"\u002F\u002F20\n",[45,7405,7406,7408,7410,7412,7414,7416],{"class":47,"line":1779},[45,7407,1702],{"class":55},[45,7409,1320],{"class":51},[45,7411,540],{"class":55},[45,7413,1320],{"class":51},[45,7415,1390],{"class":55},[45,7417,7418],{"class":337},"\u002F\u002F10\n",[45,7420,7421],{"class":47,"line":1793},[45,7422,1716],{"class":55},[20,7424,7425],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[15,7427,7429],{"id":7428},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[20,7431,7432],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[20,7434,7435,7436,7438],{},"例如数组：int arr",[45,7437,723],{},"={4,3,6,9,1,2,10,8,7,5}",[36,7440,7442],{"className":270,"code":7441,"language":272,"meta":25,"style":25},"#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",[42,7443,7444,7450,7460,7484,7488,7519,7523,7557,7561,7579,7583,7594,7609,7624,7628,7632,7636,7640,7644,7652,7656,7661,7715,7727,7739,7744,7752,7756,7761,7786,7790,7805,7814,7818],{"__ignoreMap":25},[45,7445,7446,7448],{"class":47,"line":48},[45,7447,2100],{"class":51},[45,7449,2103],{"class":62},[45,7451,7452,7454,7456,7458],{"class":47,"line":66},[45,7453,2108],{"class":51},[45,7455,2111],{"class":51},[45,7457,2114],{"class":69},[45,7459,1442],{"class":55},[45,7461,7462,7464,7467,7469,7471,7473,7475,7477,7479,7482],{"class":47,"line":1331},[45,7463,5514],{"class":51},[45,7465,7466],{"class":69}," bubbleSort",[45,7468,282],{"class":55},[45,7470,285],{"class":51},[45,7472,6668],{"class":51},[45,7474,20],{"class":5366},[45,7476,655],{"class":55},[45,7478,285],{"class":51},[45,7480,7481],{"class":5366}," len",[45,7483,139],{"class":55},[45,7485,7486],{"class":47,"line":1346},[45,7487,1697],{"class":55},[45,7489,7490,7492,7494,7496,7498,7500,7502,7504,7506,7509,7511,7513,7515,7517],{"class":47,"line":1352},[45,7491,3351],{"class":51},[45,7493,282],{"class":55},[45,7495,285],{"class":51},[45,7497,3182],{"class":55},[45,7499,59],{"class":51},[45,7501,469],{"class":79},[45,7503,3189],{"class":55},[45,7505,1187],{"class":51},[45,7507,7508],{"class":55},"len",[45,7510,809],{"class":51},[45,7512,495],{"class":79},[45,7514,3189],{"class":55},[45,7516,2442],{"class":51},[45,7518,139],{"class":55},[45,7520,7521],{"class":47,"line":1366},[45,7522,2180],{"class":55},[45,7524,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543,7545,7547,7549,7551,7553,7555],{"class":47,"line":1372},[45,7526,3553],{"class":51},[45,7528,282],{"class":55},[45,7530,285],{"class":51},[45,7532,3560],{"class":55},[45,7534,59],{"class":51},[45,7536,469],{"class":79},[45,7538,3567],{"class":55},[45,7540,1187],{"class":51},[45,7542,7508],{"class":55},[45,7544,809],{"class":51},[45,7546,718],{"class":55},[45,7548,809],{"class":51},[45,7550,495],{"class":79},[45,7552,3567],{"class":55},[45,7554,2442],{"class":51},[45,7556,139],{"class":55},[45,7558,7559],{"class":47,"line":1463},[45,7560,2660],{"class":55},[45,7562,7563,7565,7568,7570,7573,7575,7577],{"class":47,"line":1469},[45,7564,4792],{"class":51},[45,7566,7567],{"class":55},"(p[j]",[45,7569,1237],{"class":51},[45,7571,7572],{"class":55},"p[j",[45,7574,758],{"class":51},[45,7576,495],{"class":79},[45,7578,4807],{"class":55},[45,7580,7581],{"class":47,"line":1481},[45,7582,4812],{"class":55},[45,7584,7585,7587,7589,7591],{"class":47,"line":1763},[45,7586,4817],{"class":51},[45,7588,4405],{"class":55},[45,7590,59],{"class":51},[45,7592,7593],{"class":55},"p[j];\n",[45,7595,7596,7599,7601,7603,7605,7607],{"class":47,"line":1768},[45,7597,7598],{"class":55},"                p[j]",[45,7600,59],{"class":51},[45,7602,7572],{"class":55},[45,7604,758],{"class":51},[45,7606,495],{"class":79},[45,7608,4840],{"class":55},[45,7610,7611,7614,7616,7618,7620,7622],{"class":47,"line":1774},[45,7612,7613],{"class":55},"                p[j",[45,7615,758],{"class":51},[45,7617,495],{"class":79},[45,7619,1217],{"class":55},[45,7621,59],{"class":51},[45,7623,4430],{"class":55},[45,7625,7626],{"class":47,"line":1779},[45,7627,4860],{"class":55},[45,7629,7630],{"class":47,"line":1793},[45,7631,2679],{"class":55},[45,7633,7634],{"class":47,"line":1798},[45,7635,2337],{"class":55},[45,7637,7638],{"class":47,"line":1804},[45,7639,1716],{"class":55},[45,7641,7642],{"class":47,"line":1825},[45,7643,2550],{"emptyLinePlaceholder":207},[45,7645,7646,7648,7650],{"class":47,"line":1830},[45,7647,285],{"class":51},[45,7649,2123],{"class":69},[45,7651,2126],{"class":55},[45,7653,7654],{"class":47,"line":1844},[45,7655,1697],{"class":55},[45,7657,7658],{"class":47,"line":1849},[45,7659,7660],{"class":337},"    \u002F\u002F 1.创建数组\n",[45,7662,7663,7665,7667,7669,7671,7673,7675,7677,7679,7681,7683,7685,7687,7689,7691,7693,7695,7697,7699,7701,7703,7705,7707,7709,7711,7713],{"class":47,"line":1878},[45,7664,2135],{"class":51},[45,7666,4112],{"class":55},[45,7668,723],{"class":79},[45,7670,1217],{"class":55},[45,7672,59],{"class":51},[45,7674,1173],{"class":55},[45,7676,570],{"class":79},[45,7678,655],{"class":55},[45,7680,350],{"class":79},[45,7682,655],{"class":55},[45,7684,621],{"class":79},[45,7686,655],{"class":55},[45,7688,697],{"class":79},[45,7690,655],{"class":55},[45,7692,495],{"class":79},[45,7694,655],{"class":55},[45,7696,356],{"class":79},[45,7698,655],{"class":55},[45,7700,723],{"class":79},[45,7702,655],{"class":55},[45,7704,672],{"class":79},[45,7706,655],{"class":55},[45,7708,646],{"class":79},[45,7710,655],{"class":55},[45,7712,596],{"class":79},[45,7714,4145],{"class":55},[45,7716,7717,7719,7721,7723,7725],{"class":47,"line":1883},[45,7718,2135],{"class":51},[45,7720,7481],{"class":55},[45,7722,59],{"class":51},[45,7724,723],{"class":79},[45,7726,1442],{"class":55},[45,7728,7729,7731,7733,7735,7737],{"class":47,"line":1900},[45,7730,2135],{"class":51},[45,7732,6668],{"class":51},[45,7734,20],{"class":55},[45,7736,59],{"class":51},[45,7738,7188],{"class":55},[45,7740,7741],{"class":47,"line":1905},[45,7742,7743],{"class":337},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[45,7745,7746,7749],{"class":47,"line":1910},[45,7747,7748],{"class":69},"    bubbleSort",[45,7750,7751],{"class":55},"(p,len);\n",[45,7753,7754],{"class":47,"line":1915},[45,7755,2550],{"emptyLinePlaceholder":207},[45,7757,7758],{"class":47,"line":1929},[45,7759,7760],{"class":337},"    \u002F\u002F 3.打印排序后的数组\n",[45,7762,7763,7765,7767,7769,7771,7773,7775,7777,7779,7782,7784],{"class":47,"line":1934},[45,7764,3351],{"class":51},[45,7766,1809],{"class":55},[45,7768,285],{"class":51},[45,7770,3182],{"class":55},[45,7772,59],{"class":51},[45,7774,469],{"class":79},[45,7776,3364],{"class":55},[45,7778,1187],{"class":51},[45,7780,7781],{"class":55},"len; i",[45,7783,2442],{"class":51},[45,7785,139],{"class":55},[45,7787,7788],{"class":47,"line":2727},[45,7789,2180],{"class":55},[45,7791,7792,7794,7796,7798,7800,7803],{"class":47,"line":2741},[45,7793,3601],{"class":55},[45,7795,6569],{"class":51},[45,7797,20],{"class":55},[45,7799,1320],{"class":51},[45,7801,7802],{"class":62},"\"\"",[45,7804,1442],{"class":55},[45,7806,7807,7810,7812],{"class":47,"line":2749},[45,7808,7809],{"class":55},"        p",[45,7811,2442],{"class":51},[45,7813,1442],{"class":55},[45,7815,7816],{"class":47,"line":2754},[45,7817,2337],{"class":55},[45,7819,7820],{"class":47,"line":2760},[45,7821,1716],{"class":55},[196,7823,7824],{},"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":25,"searchDepth":66,"depth":66,"links":7826},[7827,7828,7829,7830,7831,7832,7833,7834],{"id":6433,"depth":66,"text":6434},{"id":6599,"depth":66,"text":6600},{"id":6755,"depth":66,"text":6756},{"id":6833,"depth":66,"text":6834},{"id":6912,"depth":66,"text":6913},{"id":7011,"depth":66,"text":7012},{"id":7250,"depth":66,"text":7251},{"id":7428,"depth":66,"text":7429},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6422,"description":6430},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7841,"title":7842,"body":7843,"description":7850,"extension":205,"meta":10823,"navigation":207,"path":10824,"seo":10825,"stem":10826,"__hash__":10827},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7844,"toc":10814},[7845,7848,7851,7855,7858,7861,7872,8210,8213,8217,8220,8227,8482,8486,8489,8492,8647,8651,8654,8657,8863,8867,8870,9173,9176,9184,9188,9191,9342,9344,9355,9412,9416,9421,10077,10085,10088,10182,10185,10805,10811],[10,7846,7842],{"id":7847},"_4结构体",[20,7849,7850],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[15,7852,7854],{"id":7853},"_41结构体定义与使用","4.1结构体定义与使用",[20,7856,7857],{},"语法：struct 结构体名 {结构体成员列表}；",[20,7859,7860],{},"通过结构体创建变量的方式：",[166,7862,7863,7866,7869],{},[169,7864,7865],{},"struct 结构体名 变量名",[169,7867,7868],{},"struct 结构体名 变量名={成员1值，成员2值...}",[169,7870,7871],{},"定义结构体时顺便创建变量",[36,7873,7875],{"className":270,"code":7874,"language":272,"meta":25,"style":25},"#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",[42,7876,7877,7883,7893,7900,7905,7913,7917,7922,7926,7931,7936,7941,7948,7953,7960,7964,7971,7975,7979,7983,7987,7991,7995,8001,8005,8011,8019,8027,8031,8036,8041,8052,8057,8069,8080,8091,8096,8120,8125,8131,8158,8163,8169,8181,8193,8205],{"__ignoreMap":25},[45,7878,7879,7881],{"class":47,"line":48},[45,7880,2100],{"class":51},[45,7882,2103],{"class":62},[45,7884,7885,7887,7889,7891],{"class":47,"line":66},[45,7886,2108],{"class":51},[45,7888,2111],{"class":51},[45,7890,2114],{"class":69},[45,7892,1442],{"class":55},[45,7894,7895,7897],{"class":47,"line":1331},[45,7896,2100],{"class":51},[45,7898,7899],{"class":62},"\u003Cstring>\n",[45,7901,7902],{"class":47,"line":1346},[45,7903,7904],{"class":337},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[45,7906,7907,7910],{"class":47,"line":1352},[45,7908,7909],{"class":51},"struct",[45,7911,7912],{"class":69}," Student\n",[45,7914,7915],{"class":47,"line":1366},[45,7916,1697],{"class":55},[45,7918,7919],{"class":47,"line":1372},[45,7920,7921],{"class":337},"    \u002F\u002F成员列表\n",[45,7923,7924],{"class":47,"line":1463},[45,7925,2550],{"emptyLinePlaceholder":207},[45,7927,7928],{"class":47,"line":1469},[45,7929,7930],{"class":337},"    \u002F\u002F姓名\n",[45,7932,7933],{"class":47,"line":1481},[45,7934,7935],{"class":55},"    string name;\n",[45,7937,7938],{"class":47,"line":1763},[45,7939,7940],{"class":337},"    \u002F\u002F年龄\n",[45,7942,7943,7945],{"class":47,"line":1768},[45,7944,2135],{"class":51},[45,7946,7947],{"class":55}," age;\n",[45,7949,7950],{"class":47,"line":1774},[45,7951,7952],{"class":337},"    \u002F\u002F分数\n",[45,7954,7955,7957],{"class":47,"line":1779},[45,7956,2135],{"class":51},[45,7958,7959],{"class":55}," score;\n",[45,7961,7962],{"class":47,"line":1793},[45,7963,4145],{"class":55},[45,7965,7966,7968],{"class":47,"line":1798},[45,7967,7909],{"class":51},[45,7969,7970],{"class":69}," School\n",[45,7972,7973],{"class":47,"line":1804},[45,7974,1697],{"class":55},[45,7976,7977],{"class":47,"line":1825},[45,7978,7921],{"class":337},[45,7980,7981],{"class":47,"line":1830},[45,7982,2550],{"emptyLinePlaceholder":207},[45,7984,7985],{"class":47,"line":1844},[45,7986,7930],{"class":337},[45,7988,7989],{"class":47,"line":1849},[45,7990,7935],{"class":55},[45,7992,7993],{"class":47,"line":1878},[45,7994,7940],{"class":337},[45,7996,7997,7999],{"class":47,"line":1883},[45,7998,2135],{"class":51},[45,8000,7947],{"class":55},[45,8002,8003],{"class":47,"line":1900},[45,8004,7952],{"class":337},[45,8006,8007,8009],{"class":47,"line":1905},[45,8008,2135],{"class":51},[45,8010,7959],{"class":55},[45,8012,8013,8016],{"class":47,"line":1910},[45,8014,8015],{"class":55},"} s3;",[45,8017,8018],{"class":337}," \u002F\u002F创建结构体时就创建了变量\n",[45,8020,8021,8023,8025],{"class":47,"line":1915},[45,8022,285],{"class":51},[45,8024,2123],{"class":69},[45,8026,2126],{"class":55},[45,8028,8029],{"class":47,"line":1929},[45,8030,1697],{"class":55},[45,8032,8033],{"class":47,"line":1934},[45,8034,8035],{"class":337},"    \u002F\u002F2.通过学生类型创建具体学生\n",[45,8037,8038],{"class":47,"line":2727},[45,8039,8040],{"class":337},"    \u002F\u002F2.1 struct Student s1;\n",[45,8042,8043,8046,8049],{"class":47,"line":2741},[45,8044,8045],{"class":51},"    struct",[45,8047,8048],{"class":69}," Student",[45,8050,8051],{"class":55}," s1;\n",[45,8053,8054],{"class":47,"line":2749},[45,8055,8056],{"class":337},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[45,8058,8059,8062,8064,8067],{"class":47,"line":2754},[45,8060,8061],{"class":55},"    s1.name",[45,8063,59],{"class":51},[45,8065,8066],{"class":62},"\"张三\"",[45,8068,1442],{"class":55},[45,8070,8071,8074,8076,8078],{"class":47,"line":2760},[45,8072,8073],{"class":55},"    s1.age",[45,8075,59],{"class":51},[45,8077,927],{"class":79},[45,8079,1442],{"class":55},[45,8081,8082,8085,8087,8089],{"class":47,"line":2766},[45,8083,8084],{"class":55},"    s1.score",[45,8086,59],{"class":51},[45,8088,531],{"class":79},[45,8090,1442],{"class":55},[45,8092,8093],{"class":47,"line":2771},[45,8094,8095],{"class":337},"    \u002F\u002F输出结果\n",[45,8097,8099,8101,8103,8106,8108,8111,8113,8116,8118],{"class":47,"line":8098},37,[45,8100,1702],{"class":55},[45,8102,1320],{"class":51},[45,8104,8105],{"class":55},"s1.name",[45,8107,1320],{"class":51},[45,8109,8110],{"class":55},"s1.age",[45,8112,1320],{"class":51},[45,8114,8115],{"class":55},"s1.score",[45,8117,1320],{"class":51},[45,8119,1343],{"class":55},[45,8121,8123],{"class":47,"line":8122},38,[45,8124,2550],{"emptyLinePlaceholder":207},[45,8126,8128],{"class":47,"line":8127},39,[45,8129,8130],{"class":337},"    \u002F\u002F2.2 struct Student s2={...}\n",[45,8132,8134,8136,8138,8141,8143,8145,8148,8150,8152,8154,8156],{"class":47,"line":8133},40,[45,8135,8045],{"class":51},[45,8137,8048],{"class":69},[45,8139,8140],{"class":55}," s2",[45,8142,59],{"class":51},[45,8144,1173],{"class":55},[45,8146,8147],{"class":62},"\"王五\"",[45,8149,655],{"class":55},[45,8151,927],{"class":79},[45,8153,655],{"class":55},[45,8155,531],{"class":79},[45,8157,4145],{"class":55},[45,8159,8161],{"class":47,"line":8160},41,[45,8162,2550],{"emptyLinePlaceholder":207},[45,8164,8166],{"class":47,"line":8165},42,[45,8167,8168],{"class":337},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[45,8170,8172,8175,8177,8179],{"class":47,"line":8171},43,[45,8173,8174],{"class":55},"    s3.name",[45,8176,59],{"class":51},[45,8178,3828],{"class":62},[45,8180,1442],{"class":55},[45,8182,8184,8187,8189,8191],{"class":47,"line":8183},44,[45,8185,8186],{"class":55},"    s3.age",[45,8188,59],{"class":51},[45,8190,927],{"class":79},[45,8192,1442],{"class":55},[45,8194,8196,8199,8201,8203],{"class":47,"line":8195},45,[45,8197,8198],{"class":55},"    s3.score",[45,8200,59],{"class":51},[45,8202,977],{"class":79},[45,8204,1442],{"class":55},[45,8206,8208],{"class":47,"line":8207},46,[45,8209,1716],{"class":55},[20,8211,8212],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[15,8214,8216],{"id":8215},"_42结构体数组","4.2结构体数组",[20,8218,8219],{},"将自定义的结构体放入到数组中方便维护",[20,8221,8222,8223,8226],{},"语法：struct 结构体名 数组名",[45,8224,8225],{},"元素个数","={ {}，{},...{} };",[36,8228,8230],{"className":270,"code":8229,"language":272,"meta":25,"style":25},"#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",[42,8231,8232,8238,8248,8254,8259,8265,8269,8273,8279,8285,8289,8293,8301,8305,8310,8325,8329,8345,8361,8365,8370,8386,8401,8416,8421,8447,8451,8474,8478],{"__ignoreMap":25},[45,8233,8234,8236],{"class":47,"line":48},[45,8235,2100],{"class":51},[45,8237,2103],{"class":62},[45,8239,8240,8242,8244,8246],{"class":47,"line":66},[45,8241,2108],{"class":51},[45,8243,2111],{"class":51},[45,8245,2114],{"class":69},[45,8247,1442],{"class":55},[45,8249,8250,8252],{"class":47,"line":1331},[45,8251,2100],{"class":51},[45,8253,7899],{"class":62},[45,8255,8256],{"class":47,"line":1346},[45,8257,8258],{"class":337},"\u002F\u002F1.定义结构体\n",[45,8260,8261,8263],{"class":47,"line":1352},[45,8262,7909],{"class":51},[45,8264,7912],{"class":69},[45,8266,8267],{"class":47,"line":1366},[45,8268,1697],{"class":55},[45,8270,8271],{"class":47,"line":1372},[45,8272,7935],{"class":55},[45,8274,8275,8277],{"class":47,"line":1463},[45,8276,2135],{"class":51},[45,8278,7947],{"class":55},[45,8280,8281,8283],{"class":47,"line":1469},[45,8282,2135],{"class":51},[45,8284,7959],{"class":55},[45,8286,8287],{"class":47,"line":1481},[45,8288,2550],{"emptyLinePlaceholder":207},[45,8290,8291],{"class":47,"line":1763},[45,8292,4145],{"class":55},[45,8294,8295,8297,8299],{"class":47,"line":1768},[45,8296,285],{"class":51},[45,8298,2123],{"class":69},[45,8300,2126],{"class":55},[45,8302,8303],{"class":47,"line":1774},[45,8304,1697],{"class":55},[45,8306,8307],{"class":47,"line":1779},[45,8308,8309],{"class":337},"    \u002F\u002F2.创建结构体数组\n",[45,8311,8312,8314,8316,8319,8321,8323],{"class":47,"line":1793},[45,8313,8045],{"class":51},[45,8315,8048],{"class":69},[45,8317,8318],{"class":55}," stuArray[",[45,8320,356],{"class":79},[45,8322,1217],{"class":55},[45,8324,5058],{"class":51},[45,8326,8327],{"class":47,"line":1798},[45,8328,2180],{"class":55},[45,8330,8331,8333,8335,8337,8339,8341,8343],{"class":47,"line":1804},[45,8332,5067],{"class":55},[45,8334,8066],{"class":62},[45,8336,655],{"class":55},[45,8338,927],{"class":79},[45,8340,655],{"class":55},[45,8342,588],{"class":79},[45,8344,5080],{"class":55},[45,8346,8347,8349,8351,8353,8355,8357,8359],{"class":47,"line":1825},[45,8348,5067],{"class":55},[45,8350,3828],{"class":62},[45,8352,655],{"class":55},[45,8354,852],{"class":79},[45,8356,655],{"class":55},[45,8358,852],{"class":79},[45,8360,1716],{"class":55},[45,8362,8363],{"class":47,"line":1830},[45,8364,2337],{"class":55},[45,8366,8367],{"class":47,"line":1844},[45,8368,8369],{"class":337},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[45,8371,8372,8375,8377,8380,8382,8384],{"class":47,"line":1849},[45,8373,8374],{"class":55},"    stuArray[",[45,8376,495],{"class":79},[45,8378,8379],{"class":55},"].name",[45,8381,59],{"class":51},[45,8383,3851],{"class":62},[45,8385,1442],{"class":55},[45,8387,8388,8390,8392,8395,8397,8399],{"class":47,"line":1878},[45,8389,8374],{"class":55},[45,8391,495],{"class":79},[45,8393,8394],{"class":55},"].age",[45,8396,59],{"class":51},[45,8398,356],{"class":79},[45,8400,1442],{"class":55},[45,8402,8403,8405,8407,8410,8412,8414],{"class":47,"line":1883},[45,8404,8374],{"class":55},[45,8406,495],{"class":79},[45,8408,8409],{"class":55},"].score",[45,8411,59],{"class":51},[45,8413,356],{"class":79},[45,8415,1442],{"class":55},[45,8417,8418],{"class":47,"line":1900},[45,8419,8420],{"class":337},"    \u002F\u002F4.遍历结构体数组\n",[45,8422,8423,8425,8427,8429,8431,8433,8435,8437,8439,8441,8443,8445],{"class":47,"line":1905},[45,8424,3351],{"class":51},[45,8426,1809],{"class":55},[45,8428,285],{"class":51},[45,8430,3182],{"class":55},[45,8432,59],{"class":51},[45,8434,469],{"class":79},[45,8436,3189],{"class":55},[45,8438,1187],{"class":51},[45,8440,356],{"class":79},[45,8442,3189],{"class":55},[45,8444,2442],{"class":51},[45,8446,139],{"class":55},[45,8448,8449],{"class":47,"line":1910},[45,8450,2180],{"class":55},[45,8452,8453,8455,8457,8460,8462,8465,8467,8470,8472],{"class":47,"line":1915},[45,8454,3601],{"class":55},[45,8456,1320],{"class":51},[45,8458,8459],{"class":55},"stuArray[i].name",[45,8461,1320],{"class":51},[45,8463,8464],{"class":55},"stuArray[i].age",[45,8466,1320],{"class":51},[45,8468,8469],{"class":55},"stuArray[i].score",[45,8471,1320],{"class":51},[45,8473,1343],{"class":55},[45,8475,8476],{"class":47,"line":1929},[45,8477,2337],{"class":55},[45,8479,8480],{"class":47,"line":1934},[45,8481,1716],{"class":55},[15,8483,8485],{"id":8484},"_43结构体指针","4.3结构体指针",[20,8487,8488],{},"作用：通过指针访问结构体中的成员",[20,8490,8491],{},"利用操作符->可以通过结构体指针访问结构体属性",[36,8493,8495],{"className":270,"code":8494,"language":272,"meta":25,"style":25},"#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",[42,8496,8497,8503,8513,8519,8523,8529,8533,8537,8543,8549,8553,8561,8565,8570,8595,8600,8615,8620,8643],{"__ignoreMap":25},[45,8498,8499,8501],{"class":47,"line":48},[45,8500,2100],{"class":51},[45,8502,2103],{"class":62},[45,8504,8505,8507,8509,8511],{"class":47,"line":66},[45,8506,2108],{"class":51},[45,8508,2111],{"class":51},[45,8510,2114],{"class":69},[45,8512,1442],{"class":55},[45,8514,8515,8517],{"class":47,"line":1331},[45,8516,2100],{"class":51},[45,8518,7899],{"class":62},[45,8520,8521],{"class":47,"line":1346},[45,8522,8258],{"class":337},[45,8524,8525,8527],{"class":47,"line":1352},[45,8526,7909],{"class":51},[45,8528,7912],{"class":69},[45,8530,8531],{"class":47,"line":1366},[45,8532,1697],{"class":55},[45,8534,8535],{"class":47,"line":1372},[45,8536,7935],{"class":55},[45,8538,8539,8541],{"class":47,"line":1463},[45,8540,2135],{"class":51},[45,8542,7947],{"class":55},[45,8544,8545,8547],{"class":47,"line":1469},[45,8546,2135],{"class":51},[45,8548,7959],{"class":55},[45,8550,8551],{"class":47,"line":1481},[45,8552,4145],{"class":55},[45,8554,8555,8557,8559],{"class":47,"line":1763},[45,8556,285],{"class":51},[45,8558,2123],{"class":69},[45,8560,2126],{"class":55},[45,8562,8563],{"class":47,"line":1768},[45,8564,1697],{"class":55},[45,8566,8567],{"class":47,"line":1774},[45,8568,8569],{"class":337},"    \u002F\u002F创建学生结构体变量\n",[45,8571,8572,8574,8576,8579,8581,8583,8585,8587,8589,8591,8593],{"class":47,"line":1779},[45,8573,8045],{"class":51},[45,8575,8048],{"class":69},[45,8577,8578],{"class":55}," s",[45,8580,59],{"class":51},[45,8582,1173],{"class":55},[45,8584,8066],{"class":62},[45,8586,655],{"class":55},[45,8588,927],{"class":79},[45,8590,655],{"class":55},[45,8592,1873],{"class":79},[45,8594,4145],{"class":55},[45,8596,8597],{"class":47,"line":1793},[45,8598,8599],{"class":337},"    \u002F\u002F通过指针指向结构体变量\n",[45,8601,8602,8604,8606,8608,8610,8612],{"class":47,"line":1798},[45,8603,8045],{"class":51},[45,8605,8048],{"class":69},[45,8607,6668],{"class":51},[45,8609,20],{"class":55},[45,8611,6489],{"class":51},[45,8613,8614],{"class":55},"s\n",[45,8616,8617],{"class":47,"line":1804},[45,8618,8619],{"class":337},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[45,8621,8622,8624,8626,8629,8631,8634,8636,8639,8641],{"class":47,"line":1825},[45,8623,1702],{"class":55},[45,8625,1320],{"class":51},[45,8627,8628],{"class":55},"p->name",[45,8630,1320],{"class":51},[45,8632,8633],{"class":55},"p->age",[45,8635,1320],{"class":51},[45,8637,8638],{"class":55},"p->score",[45,8640,1320],{"class":51},[45,8642,1343],{"class":55},[45,8644,8645],{"class":47,"line":1830},[45,8646,1716],{"class":55},[15,8648,8650],{"id":8649},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[20,8652,8653],{},"作用：结构体中的成员可以是另一个结构体",[20,8655,8656],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[36,8658,8660],{"className":270,"code":8659,"language":272,"meta":25,"style":25},"#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",[42,8661,8662,8668,8678,8684,8689,8697,8701,8705,8711,8717,8721,8726,8733,8737,8744,8748,8754,8759,8763,8771,8775,8780,8785,8790,8801,8813,8824,8837,8848,8859],{"__ignoreMap":25},[45,8663,8664,8666],{"class":47,"line":48},[45,8665,2100],{"class":51},[45,8667,2103],{"class":62},[45,8669,8670,8672,8674,8676],{"class":47,"line":66},[45,8671,2108],{"class":51},[45,8673,2111],{"class":51},[45,8675,2114],{"class":69},[45,8677,1442],{"class":55},[45,8679,8680,8682],{"class":47,"line":1331},[45,8681,2100],{"class":51},[45,8683,7899],{"class":62},[45,8685,8686],{"class":47,"line":1346},[45,8687,8688],{"class":337},"\u002F\u002F定义学生结构体\n",[45,8690,8691,8693,8695],{"class":47,"line":1352},[45,8692,7909],{"class":51},[45,8694,8048],{"class":69},[45,8696,2824],{"class":55},[45,8698,8699],{"class":47,"line":1366},[45,8700,1697],{"class":55},[45,8702,8703],{"class":47,"line":1372},[45,8704,7935],{"class":55},[45,8706,8707,8709],{"class":47,"line":1463},[45,8708,2135],{"class":51},[45,8710,7947],{"class":55},[45,8712,8713,8715],{"class":47,"line":1469},[45,8714,2135],{"class":51},[45,8716,7959],{"class":55},[45,8718,8719],{"class":47,"line":1481},[45,8720,1716],{"class":55},[45,8722,8723],{"class":47,"line":1763},[45,8724,8725],{"class":337},"\u002F\u002F定义老师结构体\n",[45,8727,8728,8730],{"class":47,"line":1768},[45,8729,7909],{"class":51},[45,8731,8732],{"class":69}," Teacher\n",[45,8734,8735],{"class":47,"line":1774},[45,8736,1697],{"class":55},[45,8738,8739,8741],{"class":47,"line":1779},[45,8740,2135],{"class":51},[45,8742,8743],{"class":55}," id;\n",[45,8745,8746],{"class":47,"line":1793},[45,8747,7935],{"class":55},[45,8749,8750,8752],{"class":47,"line":1798},[45,8751,2135],{"class":51},[45,8753,7947],{"class":55},[45,8755,8756],{"class":47,"line":1804},[45,8757,8758],{"class":55},"    Student stu;\n",[45,8760,8761],{"class":47,"line":1825},[45,8762,1716],{"class":55},[45,8764,8765,8767,8769],{"class":47,"line":1830},[45,8766,285],{"class":51},[45,8768,2123],{"class":69},[45,8770,6128],{"class":55},[45,8772,8773],{"class":47,"line":1844},[45,8774,1697],{"class":55},[45,8776,8777],{"class":47,"line":1849},[45,8778,8779],{"class":337},"    \u002F\u002F结构体嵌套结构体\n",[45,8781,8782],{"class":47,"line":1878},[45,8783,8784],{"class":337},"    \u002F\u002F创建老师\n",[45,8786,8787],{"class":47,"line":1883},[45,8788,8789],{"class":55},"    Teacher t;\n",[45,8791,8792,8795,8797,8799],{"class":47,"line":1900},[45,8793,8794],{"class":55},"    t.id",[45,8796,59],{"class":51},[45,8798,588],{"class":79},[45,8800,1442],{"class":55},[45,8802,8803,8806,8808,8811],{"class":47,"line":1905},[45,8804,8805],{"class":55},"    t.name",[45,8807,59],{"class":51},[45,8809,8810],{"class":62},"\"老王\"",[45,8812,1442],{"class":55},[45,8814,8815,8818,8820,8822],{"class":47,"line":1910},[45,8816,8817],{"class":55},"    t.age",[45,8819,59],{"class":51},[45,8821,927],{"class":79},[45,8823,1442],{"class":55},[45,8825,8826,8829,8831,8834],{"class":47,"line":1915},[45,8827,8828],{"class":55},"    t.stu.name",[45,8830,59],{"class":51},[45,8832,8833],{"class":62},"\"小王\"",[45,8835,8836],{"class":55},"；\n",[45,8838,8839,8842,8844,8846],{"class":47,"line":1929},[45,8840,8841],{"class":55},"    t.stu.age",[45,8843,59],{"class":51},[45,8845,977],{"class":79},[45,8847,1442],{"class":55},[45,8849,8850,8853,8855,8857],{"class":47,"line":1934},[45,8851,8852],{"class":55},"    t.stu.score",[45,8854,59],{"class":51},[45,8856,621],{"class":79},[45,8858,1442],{"class":55},[45,8860,8861],{"class":47,"line":2727},[45,8862,1716],{"class":55},[15,8864,8866],{"id":8865},"_45结构体做函数参数","4.5结构体做函数参数",[20,8868,8869],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[36,8871,8873],{"className":270,"code":8872,"language":272,"meta":25,"style":25},"#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",[42,8874,8875,8881,8891,8897,8903,8907,8911,8917,8923,8927,8932,8937,8954,8958,8991,8995,9000,9019,9023,9054,9058,9066,9070,9079,9091,9103,9115,9128,9136,9149,9161,9169],{"__ignoreMap":25},[45,8876,8877,8879],{"class":47,"line":48},[45,8878,2100],{"class":51},[45,8880,2103],{"class":62},[45,8882,8883,8885,8887,8889],{"class":47,"line":66},[45,8884,2108],{"class":51},[45,8886,2111],{"class":51},[45,8888,2114],{"class":69},[45,8890,1442],{"class":55},[45,8892,8893,8895],{"class":47,"line":1331},[45,8894,2100],{"class":51},[45,8896,7899],{"class":62},[45,8898,8899,8901],{"class":47,"line":1346},[45,8900,7909],{"class":51},[45,8902,7912],{"class":69},[45,8904,8905],{"class":47,"line":1352},[45,8906,1697],{"class":55},[45,8908,8909],{"class":47,"line":1366},[45,8910,7935],{"class":55},[45,8912,8913,8915],{"class":47,"line":1372},[45,8914,2135],{"class":51},[45,8916,7947],{"class":55},[45,8918,8919,8921],{"class":47,"line":1463},[45,8920,2135],{"class":51},[45,8922,7959],{"class":55},[45,8924,8925],{"class":47,"line":1469},[45,8926,4145],{"class":55},[45,8928,8929],{"class":47,"line":1481},[45,8930,8931],{"class":337},"\u002F\u002F打印学生信息的函数\n",[45,8933,8934],{"class":47,"line":1763},[45,8935,8936],{"class":337},"\u002F\u002F值传递\n",[45,8938,8939,8941,8944,8946,8948,8950,8952],{"class":47,"line":1768},[45,8940,5514],{"class":51},[45,8942,8943],{"class":69}," printStudent1",[45,8945,282],{"class":55},[45,8947,7909],{"class":51},[45,8949,8048],{"class":69},[45,8951,8578],{"class":5366},[45,8953,139],{"class":55},[45,8955,8956],{"class":47,"line":1774},[45,8957,1697],{"class":55},[45,8959,8960,8962,8964,8967,8969,8972,8974,8977,8979,8981,8983,8986,8988],{"class":47,"line":1779},[45,8961,6679],{"class":55},[45,8963,1320],{"class":51},[45,8965,8966],{"class":55}," s.name ",[45,8968,1320],{"class":51},[45,8970,8971],{"class":62}," \" \"",[45,8973,1596],{"class":51},[45,8975,8976],{"class":55}," s.age ",[45,8978,1320],{"class":51},[45,8980,8971],{"class":62},[45,8982,1596],{"class":51},[45,8984,8985],{"class":55}," s.score ",[45,8987,1320],{"class":51},[45,8989,8990],{"class":55}," endl;\n",[45,8992,8993],{"class":47,"line":1793},[45,8994,1716],{"class":55},[45,8996,8997],{"class":47,"line":1798},[45,8998,8999],{"class":337},"\u002F\u002F地址传递\n",[45,9001,9002,9004,9007,9009,9011,9013,9015,9017],{"class":47,"line":1804},[45,9003,5514],{"class":51},[45,9005,9006],{"class":69}," printStudent2",[45,9008,282],{"class":55},[45,9010,7909],{"class":51},[45,9012,8048],{"class":69},[45,9014,6668],{"class":51},[45,9016,972],{"class":5366},[45,9018,139],{"class":55},[45,9020,9021],{"class":47,"line":1825},[45,9022,1697],{"class":55},[45,9024,9025,9027,9029,9032,9034,9036,9038,9041,9043,9045,9047,9050,9052],{"class":47,"line":1830},[45,9026,6679],{"class":55},[45,9028,1320],{"class":51},[45,9030,9031],{"class":55}," s->name ",[45,9033,1320],{"class":51},[45,9035,8971],{"class":62},[45,9037,1596],{"class":51},[45,9039,9040],{"class":55}," s->age ",[45,9042,1320],{"class":51},[45,9044,8971],{"class":62},[45,9046,1596],{"class":51},[45,9048,9049],{"class":55}," s->score ",[45,9051,1320],{"class":51},[45,9053,8990],{"class":55},[45,9055,9056],{"class":47,"line":1844},[45,9057,1716],{"class":55},[45,9059,9060,9062,9064],{"class":47,"line":1849},[45,9061,285],{"class":51},[45,9063,2123],{"class":69},[45,9065,2126],{"class":55},[45,9067,9068],{"class":47,"line":1878},[45,9069,1697],{"class":55},[45,9071,9072,9074,9076],{"class":47,"line":1883},[45,9073,8045],{"class":51},[45,9075,8048],{"class":69},[45,9077,9078],{"class":55}," s;\n",[45,9080,9081,9084,9086,9089],{"class":47,"line":1900},[45,9082,9083],{"class":55},"    s.name ",[45,9085,59],{"class":51},[45,9087,9088],{"class":62}," \"张三\"",[45,9090,1442],{"class":55},[45,9092,9093,9096,9098,9101],{"class":47,"line":1905},[45,9094,9095],{"class":55},"    s.age ",[45,9097,59],{"class":51},[45,9099,9100],{"class":79}," 20",[45,9102,1442],{"class":55},[45,9104,9105,9108,9110,9113],{"class":47,"line":1910},[45,9106,9107],{"class":55},"    s.score ",[45,9109,59],{"class":51},[45,9111,9112],{"class":79}," 85",[45,9114,1442],{"class":55},[45,9116,9117,9119,9121,9124,9126],{"class":47,"line":1915},[45,9118,1702],{"class":55},[45,9120,1320],{"class":51},[45,9122,9123],{"class":62},"\"值传递:\"",[45,9125,1320],{"class":51},[45,9127,1343],{"class":55},[45,9129,9130,9133],{"class":47,"line":1929},[45,9131,9132],{"class":69},"    printStudent1",[45,9134,9135],{"class":55},"(s);\n",[45,9137,9138,9140,9142,9145,9147],{"class":47,"line":1934},[45,9139,1702],{"class":55},[45,9141,1320],{"class":51},[45,9143,9144],{"class":62},"\"地址传递:\"",[45,9146,1320],{"class":51},[45,9148,1343],{"class":55},[45,9150,9151,9154,9156,9158],{"class":47,"line":2727},[45,9152,9153],{"class":69},"    printStudent2",[45,9155,282],{"class":55},[45,9157,630],{"class":51},[45,9159,9160],{"class":55},"s); \n",[45,9162,9163,9165,9167],{"class":47,"line":2741},[45,9164,4240],{"class":51},[45,9166,4243],{"class":79},[45,9168,1442],{"class":55},[45,9170,9171],{"class":47,"line":2749},[45,9172,1716],{"class":55},[20,9174,9175],{},"注意：",[166,9177,9178,9181],{},[169,9179,9180],{},"1.先定义结构体，不要在函数中写结构体的定义",[169,9182,9183],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[15,9185,9187],{"id":9186},"_46结构体中const使用场景","4.6结构体中const使用场景",[20,9189,9190],{},"用const防止误操作",[36,9192,9194],{"className":270,"code":9193,"language":272,"meta":25,"style":25},"#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",[42,9195,9196,9202,9212,9218,9223,9227,9231,9237,9243,9247,9263,9267,9290,9294,9302,9306,9327,9334,9338],{"__ignoreMap":25},[45,9197,9198,9200],{"class":47,"line":48},[45,9199,2100],{"class":51},[45,9201,2103],{"class":62},[45,9203,9204,9206,9208,9210],{"class":47,"line":66},[45,9205,2108],{"class":51},[45,9207,2111],{"class":51},[45,9209,2114],{"class":69},[45,9211,1442],{"class":55},[45,9213,9214,9216],{"class":47,"line":1331},[45,9215,2100],{"class":51},[45,9217,7899],{"class":62},[45,9219,9220],{"class":47,"line":1346},[45,9221,9222],{"class":55},"sctuct Student\n",[45,9224,9225],{"class":47,"line":1352},[45,9226,1697],{"class":55},[45,9228,9229],{"class":47,"line":1366},[45,9230,7935],{"class":55},[45,9232,9233,9235],{"class":47,"line":1372},[45,9234,2135],{"class":51},[45,9236,7947],{"class":55},[45,9238,9239,9241],{"class":47,"line":1463},[45,9240,2135],{"class":51},[45,9242,7959],{"class":55},[45,9244,9245],{"class":47,"line":1469},[45,9246,4145],{"class":55},[45,9248,9249,9251,9254,9256,9259,9261],{"class":47,"line":1481},[45,9250,5514],{"class":51},[45,9252,9253],{"class":69}," printStudents",[45,9255,282],{"class":55},[45,9257,9258],{"class":69},"student",[45,9260,8578],{"class":5366},[45,9262,139],{"class":55},[45,9264,9265],{"class":47,"line":1763},[45,9266,1697],{"class":55},[45,9268,9269,9271,9273,9276,9278,9281,9283,9286,9288],{"class":47,"line":1768},[45,9270,1702],{"class":55},[45,9272,1320],{"class":51},[45,9274,9275],{"class":55},"s.name",[45,9277,1320],{"class":51},[45,9279,9280],{"class":55},"s.age",[45,9282,1320],{"class":51},[45,9284,9285],{"class":55},"s.score",[45,9287,1320],{"class":51},[45,9289,1343],{"class":55},[45,9291,9292],{"class":47,"line":1774},[45,9293,1716],{"class":55},[45,9295,9296,9298,9300],{"class":47,"line":1779},[45,9297,285],{"class":51},[45,9299,2123],{"class":69},[45,9301,6128],{"class":55},[45,9303,9304],{"class":47,"line":1793},[45,9305,1697],{"class":55},[45,9307,9308,9311,9313,9315,9317,9319,9321,9323,9325],{"class":47,"line":1798},[45,9309,9310],{"class":55},"    Student s",[45,9312,59],{"class":51},[45,9314,1173],{"class":55},[45,9316,8066],{"class":62},[45,9318,655],{"class":55},[45,9320,927],{"class":79},[45,9322,655],{"class":55},[45,9324,927],{"class":79},[45,9326,4145],{"class":55},[45,9328,9329,9332],{"class":47,"line":1804},[45,9330,9331],{"class":69},"    printStudent",[45,9333,9135],{"class":55},[45,9335,9336],{"class":47,"line":1825},[45,9337,2550],{"emptyLinePlaceholder":207},[45,9339,9340],{"class":47,"line":1830},[45,9341,1716],{"class":55},[20,9343,9175],{},[166,9345,9346,9349,9352],{},[169,9347,9348],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[169,9350,9351],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[169,9353,9354],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[36,9356,9358],{"className":270,"code":9357,"language":272,"meta":25,"style":25},"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",[42,9359,9360,9379,9383,9388,9408],{"__ignoreMap":25},[45,9361,9362,9364,9366,9368,9370,9373,9375,9377],{"class":47,"line":48},[45,9363,5514],{"class":51},[45,9365,9253],{"class":69},[45,9367,282],{"class":55},[45,9369,6942],{"class":51},[45,9371,9372],{"class":69}," student",[45,9374,6668],{"class":51},[45,9376,972],{"class":5366},[45,9378,139],{"class":55},[45,9380,9381],{"class":47,"line":66},[45,9382,1697],{"class":55},[45,9384,9385],{"class":47,"line":1331},[45,9386,9387],{"class":337},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[45,9389,9390,9392,9394,9396,9398,9400,9402,9404,9406],{"class":47,"line":1346},[45,9391,1702],{"class":55},[45,9393,1320],{"class":51},[45,9395,9275],{"class":55},[45,9397,1320],{"class":51},[45,9399,9280],{"class":55},[45,9401,1320],{"class":51},[45,9403,9285],{"class":55},[45,9405,1320],{"class":51},[45,9407,1343],{"class":55},[45,9409,9410],{"class":47,"line":1352},[45,9411,1716],{"class":55},[15,9413,9415],{"id":9414},"_47案例","4.7案例",[233,9417,9418],{},[169,9419,9420],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[36,9422,9424],{"className":270,"code":9423,"language":272,"meta":25,"style":25},"#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",[42,9425,9426,9432,9442,9448,9455,9459,9465,9469,9474,9480,9486,9490,9494,9500,9504,9509,9514,9527,9531,9536,9562,9566,9578,9605,9609,9621,9631,9635,9640,9669,9673,9685,9694,9721,9732,9742,9746,9750,9754,9759,9783,9787,9811,9815,9834,9860,9864,9888,9911,9935,9940,9945,9950,9959,9964,9970,9991,9997,10011,10017,10044,10053,10059,10067,10072],{"__ignoreMap":25},[45,9427,9428,9430],{"class":47,"line":48},[45,9429,2100],{"class":51},[45,9431,2103],{"class":62},[45,9433,9434,9436,9438,9440],{"class":47,"line":66},[45,9435,2108],{"class":51},[45,9437,2111],{"class":51},[45,9439,2114],{"class":69},[45,9441,1442],{"class":55},[45,9443,9444,9446],{"class":47,"line":1331},[45,9445,2100],{"class":51},[45,9447,7899],{"class":62},[45,9449,9450,9452],{"class":47,"line":1346},[45,9451,2100],{"class":51},[45,9453,9454],{"class":62},"\u003Cctime>\n",[45,9456,9457],{"class":47,"line":1352},[45,9458,8688],{"class":337},[45,9460,9461,9463],{"class":47,"line":1366},[45,9462,7909],{"class":51},[45,9464,7912],{"class":69},[45,9466,9467],{"class":47,"line":1372},[45,9468,1697],{"class":55},[45,9470,9471],{"class":47,"line":1463},[45,9472,9473],{"class":55},"    string sName;\n",[45,9475,9476,9478],{"class":47,"line":1469},[45,9477,2135],{"class":51},[45,9479,7947],{"class":55},[45,9481,9482,9484],{"class":47,"line":1481},[45,9483,2135],{"class":51},[45,9485,7959],{"class":55},[45,9487,9488],{"class":47,"line":1763},[45,9489,4145],{"class":55},[45,9491,9492],{"class":47,"line":1768},[45,9493,8725],{"class":337},[45,9495,9496,9498],{"class":47,"line":1774},[45,9497,7909],{"class":51},[45,9499,8732],{"class":69},[45,9501,9502],{"class":47,"line":1779},[45,9503,1697],{"class":55},[45,9505,9506],{"class":47,"line":1793},[45,9507,9508],{"class":55},"    string tName;\n",[45,9510,9511],{"class":47,"line":1798},[45,9512,9513],{"class":337},"    \u002F\u002F学生数组\n",[45,9515,9516,9518,9520,9523,9525],{"class":47,"line":1804},[45,9517,8045],{"class":51},[45,9519,8048],{"class":69},[45,9521,9522],{"class":55}," sArray[",[45,9524,596],{"class":79},[45,9526,4840],{"class":55},[45,9528,9529],{"class":47,"line":1825},[45,9530,4145],{"class":55},[45,9532,9533],{"class":47,"line":1830},[45,9534,9535],{"class":337},"\u002F\u002F给老师和学生赋值的函数\n",[45,9537,9538,9540,9543,9545,9547,9550,9553,9556,9558,9560],{"class":47,"line":1844},[45,9539,5514],{"class":51},[45,9541,9542],{"class":69}," allocateSpace",[45,9544,282],{"class":55},[45,9546,7909],{"class":51},[45,9548,9549],{"class":69}," Teacher",[45,9551,9552],{"class":5366}," tArray",[45,9554,9555],{"class":55},"[],",[45,9557,285],{"class":51},[45,9559,7481],{"class":5366},[45,9561,139],{"class":55},[45,9563,9564],{"class":47,"line":1849},[45,9565,1697],{"class":55},[45,9567,9568,9571,9573,9576],{"class":47,"line":1878},[45,9569,9570],{"class":55},"    string nameSeed",[45,9572,59],{"class":51},[45,9574,9575],{"class":62},"\"ABCDE\"",[45,9577,1442],{"class":55},[45,9579,9580,9582,9584,9586,9589,9591,9593,9596,9598,9601,9603],{"class":47,"line":1883},[45,9581,3351],{"class":51},[45,9583,1809],{"class":55},[45,9585,285],{"class":51},[45,9587,9588],{"class":55}," i ",[45,9590,59],{"class":51},[45,9592,4243],{"class":79},[45,9594,9595],{"class":55},"; i ",[45,9597,1187],{"class":51},[45,9599,9600],{"class":55}," len; i",[45,9602,2442],{"class":51},[45,9604,139],{"class":55},[45,9606,9607],{"class":47,"line":1900},[45,9608,2180],{"class":55},[45,9610,9611,9614,9616,9619],{"class":47,"line":1905},[45,9612,9613],{"class":55},"        tArray[i].tName ",[45,9615,59],{"class":51},[45,9617,9618],{"class":62}," \"Teacher_\"",[45,9620,1442],{"class":55},[45,9622,9623,9625,9628],{"class":47,"line":1910},[45,9624,9613],{"class":55},[45,9626,9627],{"class":51},"+=",[45,9629,9630],{"class":55},"nameSeed[i];\n",[45,9632,9633],{"class":47,"line":1915},[45,9634,2550],{"emptyLinePlaceholder":207},[45,9636,9637],{"class":47,"line":1929},[45,9638,9639],{"class":337},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[45,9641,9642,9644,9646,9648,9651,9653,9655,9658,9660,9662,9665,9667],{"class":47,"line":1934},[45,9643,3553],{"class":51},[45,9645,1809],{"class":55},[45,9647,285],{"class":51},[45,9649,9650],{"class":55}," j ",[45,9652,59],{"class":51},[45,9654,4243],{"class":79},[45,9656,9657],{"class":55},"; j ",[45,9659,1187],{"class":51},[45,9661,2298],{"class":79},[45,9663,9664],{"class":55},"; j",[45,9666,2442],{"class":51},[45,9668,139],{"class":55},[45,9670,9671],{"class":47,"line":2727},[45,9672,2660],{"class":55},[45,9674,9675,9678,9680,9683],{"class":47,"line":2741},[45,9676,9677],{"class":55},"            tArray[i].sArray[j].sName ",[45,9679,59],{"class":51},[45,9681,9682],{"class":62}," \"Student_\"",[45,9684,1442],{"class":55},[45,9686,9687,9689,9691],{"class":47,"line":2749},[45,9688,9677],{"class":55},[45,9690,9627],{"class":51},[45,9692,9693],{"class":55}," nameSeed[j];\n",[45,9695,9696,9699,9702,9704,9706,9708,9710,9712,9714,9716,9718],{"class":47,"line":2754},[45,9697,9698],{"class":51},"            int",[45,9700,9701],{"class":55}," random",[45,9703,59],{"class":51},[45,9705,2574],{"class":69},[45,9707,2577],{"class":55},[45,9709,605],{"class":51},[45,9711,1184],{"class":79},[45,9713,758],{"class":51},[45,9715,678],{"class":79},[45,9717,334],{"class":55},[45,9719,9720],{"class":337},"\u002F\u002F40~99\n",[45,9722,9723,9726,9728,9730],{"class":47,"line":2760},[45,9724,9725],{"class":55},"            tArray[i].sArray[j].age ",[45,9727,59],{"class":51},[45,9729,9100],{"class":79},[45,9731,1442],{"class":55},[45,9733,9734,9737,9739],{"class":47,"line":2766},[45,9735,9736],{"class":55},"            tArray[i].sArray[j].score ",[45,9738,59],{"class":51},[45,9740,9741],{"class":55}," random;\n",[45,9743,9744],{"class":47,"line":2771},[45,9745,2679],{"class":55},[45,9747,9748],{"class":47,"line":8098},[45,9749,2337],{"class":55},[45,9751,9752],{"class":47,"line":8122},[45,9753,1716],{"class":55},[45,9755,9756],{"class":47,"line":8127},[45,9757,9758],{"class":337},"\u002F\u002F打印所有信息的函数\n",[45,9760,9761,9763,9766,9768,9770,9772,9774,9777,9779,9781],{"class":47,"line":8133},[45,9762,5514],{"class":51},[45,9764,9765],{"class":69}," printInfo",[45,9767,282],{"class":55},[45,9769,7909],{"class":51},[45,9771,9549],{"class":69},[45,9773,9552],{"class":5366},[45,9775,9776],{"class":55},"[], ",[45,9778,285],{"class":51},[45,9780,7481],{"class":5366},[45,9782,139],{"class":55},[45,9784,9785],{"class":47,"line":8160},[45,9786,1697],{"class":55},[45,9788,9789,9791,9793,9795,9797,9799,9801,9803,9805,9807,9809],{"class":47,"line":8165},[45,9790,3351],{"class":51},[45,9792,1809],{"class":55},[45,9794,285],{"class":51},[45,9796,9588],{"class":55},[45,9798,59],{"class":51},[45,9800,4243],{"class":79},[45,9802,9595],{"class":55},[45,9804,1187],{"class":51},[45,9806,9600],{"class":55},[45,9808,2442],{"class":51},[45,9810,139],{"class":55},[45,9812,9813],{"class":47,"line":8171},[45,9814,2180],{"class":55},[45,9816,9817,9820,9822,9825,9827,9830,9832],{"class":47,"line":8183},[45,9818,9819],{"class":55},"        cout ",[45,9821,1320],{"class":51},[45,9823,9824],{"class":62}," \"Teacher: \"",[45,9826,1596],{"class":51},[45,9828,9829],{"class":55}," tArray[i].tName ",[45,9831,1320],{"class":51},[45,9833,8990],{"class":55},[45,9835,9836,9838,9840,9842,9844,9846,9848,9850,9852,9854,9856,9858],{"class":47,"line":8195},[45,9837,3553],{"class":51},[45,9839,1809],{"class":55},[45,9841,285],{"class":51},[45,9843,9650],{"class":55},[45,9845,59],{"class":51},[45,9847,4243],{"class":79},[45,9849,9657],{"class":55},[45,9851,1187],{"class":51},[45,9853,2298],{"class":79},[45,9855,9664],{"class":55},[45,9857,2442],{"class":51},[45,9859,139],{"class":55},[45,9861,9862],{"class":47,"line":8207},[45,9863,2660],{"class":55},[45,9865,9867,9870,9872,9874,9876,9879,9881,9884,9886],{"class":47,"line":9866},47,[45,9868,9869],{"class":55},"            cout ",[45,9871,1320],{"class":51},[45,9873,83],{"class":62},[45,9875,1382],{"class":79},[45,9877,9878],{"class":62},"Student: \"",[45,9880,1596],{"class":51},[45,9882,9883],{"class":55}," tArray[i].sArray[j].sName",[45,9885,1320],{"class":51},[45,9887,1343],{"class":55},[45,9889,9891,9893,9895,9897,9899,9902,9904,9907,9909],{"class":47,"line":9890},48,[45,9892,9869],{"class":55},[45,9894,1320],{"class":51},[45,9896,83],{"class":62},[45,9898,1382],{"class":79},[45,9900,9901],{"class":62},"Age: \"",[45,9903,1596],{"class":51},[45,9905,9906],{"class":55}," tArray[i].sArray[j].age ",[45,9908,1320],{"class":51},[45,9910,8990],{"class":55},[45,9912,9914,9916,9918,9920,9922,9925,9927,9930,9932],{"class":47,"line":9913},49,[45,9915,9869],{"class":55},[45,9917,1320],{"class":51},[45,9919,83],{"class":62},[45,9921,1382],{"class":79},[45,9923,9924],{"class":62},"Score: \"",[45,9926,1596],{"class":51},[45,9928,9929],{"class":55}," tArray[i].sArray[j].score ",[45,9931,1320],{"class":51},[45,9933,9934],{"class":55}," endl;   \n",[45,9936,9938],{"class":47,"line":9937},50,[45,9939,2679],{"class":55},[45,9941,9943],{"class":47,"line":9942},51,[45,9944,2337],{"class":55},[45,9946,9948],{"class":47,"line":9947},52,[45,9949,1716],{"class":55},[45,9951,9953,9955,9957],{"class":47,"line":9952},53,[45,9954,285],{"class":51},[45,9956,2123],{"class":69},[45,9958,2126],{"class":55},[45,9960,9962],{"class":47,"line":9961},54,[45,9963,1697],{"class":55},[45,9965,9967],{"class":47,"line":9966},55,[45,9968,9969],{"class":337},"    \u002F\u002F随机数种子\n",[45,9971,9973,9975,9977,9979,9981,9983,9985,9987,9989],{"class":47,"line":9972},56,[45,9974,2523],{"class":69},[45,9976,2526],{"class":55},[45,9978,2529],{"class":51},[45,9980,2532],{"class":51},[45,9982,706],{"class":55},[45,9984,2537],{"class":69},[45,9986,282],{"class":55},[45,9988,2542],{"class":79},[45,9990,2545],{"class":55},[45,9992,9994],{"class":47,"line":9993},57,[45,9995,9996],{"class":337},"    \u002F\u002F1.创建3名老师的数组\n",[45,9998,10000,10002,10004,10007,10009],{"class":47,"line":9999},58,[45,10001,8045],{"class":51},[45,10003,9549],{"class":69},[45,10005,10006],{"class":55}," tArray[",[45,10008,350],{"class":79},[45,10010,4840],{"class":55},[45,10012,10014],{"class":47,"line":10013},59,[45,10015,10016],{"class":337},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[45,10018,10020,10022,10025,10027,10030,10033,10035,10037,10040,10042],{"class":47,"line":10019},60,[45,10021,2135],{"class":51},[45,10023,10024],{"class":55}," len ",[45,10026,59],{"class":51},[45,10028,10029],{"class":51}," sizeof",[45,10031,10032],{"class":55},"(tArray) ",[45,10034,861],{"class":51},[45,10036,10029],{"class":51},[45,10038,10039],{"class":55},"(tArray[",[45,10041,469],{"class":79},[45,10043,4006],{"class":55},[45,10045,10047,10050],{"class":47,"line":10046},61,[45,10048,10049],{"class":69},"    allocateSpace",[45,10051,10052],{"class":55},"(tArray, len);\n",[45,10054,10056],{"class":47,"line":10055},62,[45,10057,10058],{"class":337},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[45,10060,10062,10065],{"class":47,"line":10061},63,[45,10063,10064],{"class":69},"    printInfo",[45,10066,10052],{"class":55},[45,10068,10070],{"class":47,"line":10069},64,[45,10071,2550],{"emptyLinePlaceholder":207},[45,10073,10075],{"class":47,"line":10074},65,[45,10076,1716],{"class":55},[233,10078,10079],{"start":66},[169,10080,10081,10084],{},[427,10082,10083],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[20,10086,10087],{},"五名英雄信息如下：",[36,10089,10093],{"className":10090,"code":10091,"language":10092,"meta":25,"style":25},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[42,10094,10095,10113,10130,10147,10164],{"__ignoreMap":25},[45,10096,10097,10099,10102,10104,10106,10108,10111],{"class":47,"line":48},[45,10098,5067],{"class":55},[45,10100,10101],{"class":62},"\"刘备\"",[45,10103,655],{"class":55},[45,10105,1052],{"class":79},[45,10107,655],{"class":55},[45,10109,10110],{"class":62},"\"男\"",[45,10112,5080],{"class":55},[45,10114,10115,10117,10120,10122,10124,10126,10128],{"class":47,"line":66},[45,10116,5067],{"class":55},[45,10118,10119],{"class":62},"\"关羽\"",[45,10121,655],{"class":55},[45,10123,1027],{"class":79},[45,10125,655],{"class":55},[45,10127,10110],{"class":62},[45,10129,5080],{"class":55},[45,10131,10132,10134,10137,10139,10141,10143,10145],{"class":47,"line":1331},[45,10133,5067],{"class":55},[45,10135,10136],{"class":62},"\"张飞\"",[45,10138,655],{"class":55},[45,10140,977],{"class":79},[45,10142,655],{"class":55},[45,10144,10110],{"class":62},[45,10146,5080],{"class":55},[45,10148,10149,10151,10154,10156,10158,10160,10162],{"class":47,"line":1346},[45,10150,5067],{"class":55},[45,10152,10153],{"class":62},"\"赵云\"",[45,10155,655],{"class":55},[45,10157,1002],{"class":79},[45,10159,655],{"class":55},[45,10161,10110],{"class":62},[45,10163,5080],{"class":55},[45,10165,10166,10168,10171,10173,10175,10177,10180],{"class":47,"line":1352},[45,10167,5067],{"class":55},[45,10169,10170],{"class":62},"\"貂蝉\"",[45,10172,655],{"class":55},[45,10174,952],{"class":79},[45,10176,655],{"class":55},[45,10178,10179],{"class":62},"\"女\"",[45,10181,5080],{"class":55},[20,10183,10184],{},"代码：",[36,10186,10188],{"className":270,"code":10187,"language":272,"meta":25,"style":25},"#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",[42,10189,10190,10196,10206,10212,10219,10223,10227,10233,10238,10242,10247,10270,10274,10299,10303,10336,10341,10370,10375,10390,10416,10436,10441,10446,10450,10454,10459,10481,10485,10509,10513,10575,10579,10583,10591,10595,10600,10611,10615,10631,10647,10663,10679,10695,10699,10719,10741,10746,10759,10766,10771,10777,10782,10795,10801],{"__ignoreMap":25},[45,10191,10192,10194],{"class":47,"line":48},[45,10193,2100],{"class":51},[45,10195,2103],{"class":62},[45,10197,10198,10200,10202,10204],{"class":47,"line":66},[45,10199,2108],{"class":51},[45,10201,2111],{"class":51},[45,10203,2114],{"class":69},[45,10205,1442],{"class":55},[45,10207,10208,10210],{"class":47,"line":1331},[45,10209,2100],{"class":51},[45,10211,7899],{"class":62},[45,10213,10214,10216],{"class":47,"line":1346},[45,10215,7909],{"class":51},[45,10217,10218],{"class":69}," Sanguo\n",[45,10220,10221],{"class":47,"line":1352},[45,10222,1697],{"class":55},[45,10224,10225],{"class":47,"line":1366},[45,10226,7935],{"class":55},[45,10228,10229,10231],{"class":47,"line":1372},[45,10230,2135],{"class":51},[45,10232,7947],{"class":55},[45,10234,10235],{"class":47,"line":1463},[45,10236,10237],{"class":55},"    string gender;\n",[45,10239,10240],{"class":47,"line":1469},[45,10241,4145],{"class":55},[45,10243,10244],{"class":47,"line":1481},[45,10245,10246],{"class":337},"\u002F\u002F定义排序函数\n",[45,10248,10249,10251,10253,10255,10258,10260,10262,10264,10266,10268],{"class":47,"line":1763},[45,10250,5514],{"class":51},[45,10252,7466],{"class":69},[45,10254,282],{"class":55},[45,10256,10257],{"class":69},"Sanguo",[45,10259,6668],{"class":51},[45,10261,972],{"class":5366},[45,10263,655],{"class":55},[45,10265,285],{"class":51},[45,10267,7481],{"class":5366},[45,10269,139],{"class":55},[45,10271,10272],{"class":47,"line":1768},[45,10273,1697],{"class":55},[45,10275,10276,10278,10280,10282,10284,10286,10288,10290,10292,10295,10297],{"class":47,"line":1774},[45,10277,3351],{"class":51},[45,10279,282],{"class":55},[45,10281,285],{"class":51},[45,10283,3182],{"class":55},[45,10285,59],{"class":51},[45,10287,469],{"class":79},[45,10289,3189],{"class":55},[45,10291,1187],{"class":51},[45,10293,10294],{"class":55},"len;i",[45,10296,2442],{"class":51},[45,10298,139],{"class":55},[45,10300,10301],{"class":47,"line":1779},[45,10302,2180],{"class":55},[45,10304,10305,10308,10310,10312,10314,10316,10318,10320,10322,10324,10326,10328,10330,10332,10334],{"class":47,"line":1793},[45,10306,10307],{"class":51},"     for",[45,10309,1809],{"class":55},[45,10311,285],{"class":51},[45,10313,3560],{"class":55},[45,10315,59],{"class":51},[45,10317,469],{"class":79},[45,10319,3567],{"class":55},[45,10321,1187],{"class":51},[45,10323,7508],{"class":55},[45,10325,809],{"class":51},[45,10327,495],{"class":79},[45,10329,809],{"class":51},[45,10331,3700],{"class":55},[45,10333,2442],{"class":51},[45,10335,139],{"class":55},[45,10337,10338],{"class":47,"line":1798},[45,10339,10340],{"class":55},"     {\n",[45,10342,10343,10346,10349,10351,10354,10356,10359,10361,10363,10365,10367],{"class":47,"line":1804},[45,10344,10345],{"class":51},"         if",[45,10347,10348],{"class":55}," ((s",[45,10350,758],{"class":51},[45,10352,10353],{"class":55},"j)->age ",[45,10355,1237],{"class":51},[45,10357,10358],{"class":55}," (s",[45,10360,758],{"class":51},[45,10362,744],{"class":55},[45,10364,758],{"class":51},[45,10366,495],{"class":79},[45,10368,10369],{"class":55},")->age)\n",[45,10371,10372],{"class":47,"line":1825},[45,10373,10374],{"class":55},"         {\n",[45,10376,10377,10380,10382,10385,10387],{"class":47,"line":1830},[45,10378,10379],{"class":55},"             Sanguo temp",[45,10381,7303],{"class":51},[45,10383,10384],{"class":55},"(s",[45,10386,758],{"class":51},[45,10388,10389],{"class":55},"j);\n",[45,10391,10392,10395,10397,10399,10402,10404,10406,10408,10410,10412,10414],{"class":47,"line":1844},[45,10393,10394],{"class":51},"             *",[45,10396,10384],{"class":55},[45,10398,758],{"class":51},[45,10400,10401],{"class":55},"j)",[45,10403,7303],{"class":51},[45,10405,10384],{"class":55},[45,10407,758],{"class":51},[45,10409,744],{"class":55},[45,10411,758],{"class":51},[45,10413,495],{"class":79},[45,10415,2869],{"class":55},[45,10417,10418,10420,10422,10424,10426,10428,10430,10432,10434],{"class":47,"line":1849},[45,10419,10394],{"class":51},[45,10421,10384],{"class":55},[45,10423,758],{"class":51},[45,10425,744],{"class":55},[45,10427,758],{"class":51},[45,10429,495],{"class":79},[45,10431,706],{"class":55},[45,10433,59],{"class":51},[45,10435,4430],{"class":55},[45,10437,10438],{"class":47,"line":1878},[45,10439,10440],{"class":55},"         }\n",[45,10442,10443],{"class":47,"line":1883},[45,10444,10445],{"class":55},"     }\n",[45,10447,10448],{"class":47,"line":1900},[45,10449,2337],{"class":55},[45,10451,10452],{"class":47,"line":1905},[45,10453,1716],{"class":55},[45,10455,10456],{"class":47,"line":1910},[45,10457,10458],{"class":337},"\u002F\u002F定义打印函数\n",[45,10460,10461,10463,10465,10467,10469,10471,10473,10475,10477,10479],{"class":47,"line":1915},[45,10462,5514],{"class":51},[45,10464,9765],{"class":69},[45,10466,282],{"class":55},[45,10468,10257],{"class":69},[45,10470,6668],{"class":51},[45,10472,972],{"class":5366},[45,10474,655],{"class":55},[45,10476,285],{"class":51},[45,10478,7481],{"class":5366},[45,10480,139],{"class":55},[45,10482,10483],{"class":47,"line":1929},[45,10484,1697],{"class":55},[45,10486,10487,10489,10491,10493,10495,10497,10499,10501,10503,10505,10507],{"class":47,"line":1934},[45,10488,3351],{"class":51},[45,10490,1809],{"class":55},[45,10492,285],{"class":51},[45,10494,3182],{"class":55},[45,10496,59],{"class":51},[45,10498,469],{"class":79},[45,10500,3189],{"class":55},[45,10502,1187],{"class":51},[45,10504,10294],{"class":55},[45,10506,2442],{"class":51},[45,10508,139],{"class":55},[45,10510,10511],{"class":47,"line":2727},[45,10512,2180],{"class":55},[45,10514,10515,10517,10519,10521,10523,10526,10528,10530,10532,10535,10537,10539,10541,10544,10546,10548,10550,10553,10555,10557,10559,10562,10564,10566,10568,10571,10573],{"class":47,"line":2741},[45,10516,3601],{"class":55},[45,10518,1320],{"class":51},[45,10520,89],{"class":62},[45,10522,1382],{"class":79},[45,10524,10525],{"class":62},"姓名：\"",[45,10527,1320],{"class":51},[45,10529,10384],{"class":55},[45,10531,758],{"class":51},[45,10533,10534],{"class":55},"i)->name",[45,10536,1320],{"class":51},[45,10538,89],{"class":62},[45,10540,1382],{"class":79},[45,10542,10543],{"class":62},"年龄：\"",[45,10545,1320],{"class":51},[45,10547,10384],{"class":55},[45,10549,758],{"class":51},[45,10551,10552],{"class":55},"i)->age",[45,10554,1320],{"class":51},[45,10556,89],{"class":62},[45,10558,1382],{"class":79},[45,10560,10561],{"class":62},"性别：\"",[45,10563,1320],{"class":51},[45,10565,10384],{"class":55},[45,10567,758],{"class":51},[45,10569,10570],{"class":55},"i)->gender",[45,10572,1320],{"class":51},[45,10574,1343],{"class":55},[45,10576,10577],{"class":47,"line":2749},[45,10578,2337],{"class":55},[45,10580,10581],{"class":47,"line":2754},[45,10582,1716],{"class":55},[45,10584,10585,10587,10589],{"class":47,"line":2760},[45,10586,285],{"class":51},[45,10588,2123],{"class":69},[45,10590,2126],{"class":55},[45,10592,10593],{"class":47,"line":2766},[45,10594,1697],{"class":55},[45,10596,10597],{"class":47,"line":2771},[45,10598,10599],{"class":337},"    \u002F\u002F定义结构体变量\n",[45,10601,10602,10605,10607,10609],{"class":47,"line":8098},[45,10603,10604],{"class":55},"    Sanguo s1[",[45,10606,596],{"class":79},[45,10608,1217],{"class":55},[45,10610,5058],{"class":51},[45,10612,10613],{"class":47,"line":8122},[45,10614,2180],{"class":55},[45,10616,10617,10619,10621,10623,10625,10627,10629],{"class":47,"line":8127},[45,10618,5067],{"class":55},[45,10620,10101],{"class":62},[45,10622,655],{"class":55},[45,10624,1052],{"class":79},[45,10626,655],{"class":55},[45,10628,10110],{"class":62},[45,10630,5080],{"class":55},[45,10632,10633,10635,10637,10639,10641,10643,10645],{"class":47,"line":8133},[45,10634,5067],{"class":55},[45,10636,10119],{"class":62},[45,10638,655],{"class":55},[45,10640,1027],{"class":79},[45,10642,655],{"class":55},[45,10644,10110],{"class":62},[45,10646,5080],{"class":55},[45,10648,10649,10651,10653,10655,10657,10659,10661],{"class":47,"line":8160},[45,10650,5067],{"class":55},[45,10652,10136],{"class":62},[45,10654,655],{"class":55},[45,10656,977],{"class":79},[45,10658,655],{"class":55},[45,10660,10110],{"class":62},[45,10662,5080],{"class":55},[45,10664,10665,10667,10669,10671,10673,10675,10677],{"class":47,"line":8165},[45,10666,5067],{"class":55},[45,10668,10153],{"class":62},[45,10670,655],{"class":55},[45,10672,1002],{"class":79},[45,10674,655],{"class":55},[45,10676,10110],{"class":62},[45,10678,5080],{"class":55},[45,10680,10681,10683,10685,10687,10689,10691,10693],{"class":47,"line":8171},[45,10682,5067],{"class":55},[45,10684,10170],{"class":62},[45,10686,655],{"class":55},[45,10688,952],{"class":79},[45,10690,655],{"class":55},[45,10692,10179],{"class":62},[45,10694,5080],{"class":55},[45,10696,10697],{"class":47,"line":8183},[45,10698,5101],{"class":55},[45,10700,10701,10703,10705,10707,10710,10712,10715,10717],{"class":47,"line":8195},[45,10702,2135],{"class":51},[45,10704,7481],{"class":55},[45,10706,4353],{"class":51},[45,10708,10709],{"class":55},"(s1)",[45,10711,4359],{"class":51},[45,10713,10714],{"class":55},"(s1[",[45,10716,469],{"class":79},[45,10718,4006],{"class":55},[45,10720,10721,10724,10726,10729,10731,10734,10737,10739],{"class":47,"line":8207},[45,10722,10723],{"class":55},"    Sanguo ",[45,10725,732],{"class":51},[45,10727,10728],{"class":55},"s ",[45,10730,59],{"class":51},[45,10732,10733],{"class":51}," &",[45,10735,10736],{"class":55},"s1[",[45,10738,469],{"class":79},[45,10740,4840],{"class":55},[45,10742,10743],{"class":47,"line":9866},[45,10744,10745],{"class":337},"    \u002F\u002F排序前：\n",[45,10747,10748,10750,10752,10755,10757],{"class":47,"line":9890},[45,10749,6679],{"class":55},[45,10751,1320],{"class":51},[45,10753,10754],{"class":62}," \"排序前：\"",[45,10756,1596],{"class":51},[45,10758,8990],{"class":55},[45,10760,10761,10763],{"class":47,"line":9913},[45,10762,10064],{"class":69},[45,10764,10765],{"class":55},"(s,len);\n",[45,10767,10768],{"class":47,"line":9937},[45,10769,10770],{"class":337},"    \u002F\u002F调用排序函数\n",[45,10772,10773,10775],{"class":47,"line":9942},[45,10774,7748],{"class":69},[45,10776,10765],{"class":55},[45,10778,10779],{"class":47,"line":9947},[45,10780,10781],{"class":337},"    \u002F\u002F排序后\n",[45,10783,10784,10786,10788,10791,10793],{"class":47,"line":9952},[45,10785,6679],{"class":55},[45,10787,1320],{"class":51},[45,10789,10790],{"class":62}," \"排序后：\"",[45,10792,1596],{"class":51},[45,10794,8990],{"class":55},[45,10796,10797,10799],{"class":47,"line":9961},[45,10798,10064],{"class":69},[45,10800,10765],{"class":55},[45,10802,10803],{"class":47,"line":9966},[45,10804,1716],{"class":55},[20,10806,10807,10808,10810],{},"注意：使用指针时直接用传首地址**&s",[45,10809,469],{},"**",[196,10812,10813],{},"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":25,"searchDepth":66,"depth":66,"links":10815},[10816,10817,10818,10819,10820,10821,10822],{"id":7853,"depth":66,"text":7854},{"id":8215,"depth":66,"text":8216},{"id":8484,"depth":66,"text":8485},{"id":8649,"depth":66,"text":8650},{"id":8865,"depth":66,"text":8866},{"id":9186,"depth":66,"text":9187},{"id":9414,"depth":66,"text":9415},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7842,"description":7850},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10829,"title":10830,"body":10831,"description":25,"extension":205,"meta":12174,"navigation":207,"path":12175,"seo":12176,"stem":12177,"__hash__":12178},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10832,"toc":12168},[10833,10836,10840,10846,10860,10865,10868,10872,10879,10885,10888,10895,10901,10906,10909,10912,10915,11479,11482,11496,11500,11505,11521,11661,11664,11670,11673,11678,11686,11794,11797,11802,11805,11810,11813,11819,11822,12165],[10,10834,10830],{"id":10835},"_5程序内存模型",[15,10837,10839],{"id":10838},"_51内存分区模型","5.1内存分区模型",[20,10841,10842,10843],{},"C++程序在执行时，将内存大方向划分为",[427,10844,10845],{},"4个区域",[166,10847,10848,10851,10854,10857],{},[169,10849,10850],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[169,10852,10853],{},"全局区：存放全局变量和静态变量以及常量",[169,10855,10856],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[169,10858,10859],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[20,10861,10862],{},[427,10863,10864],{},"内存四区意义：",[20,10866,10867],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[249,10869,10871],{"id":10870},"_511程序运行前","5.1.1程序运行前",[20,10873,10874,10875,10878],{},"​\t在程序编译后，生成了exe可执行程序，",[427,10876,10877],{},"未执行该程序前","分为两个区域",[20,10880,10881,10882],{},"​\t",[427,10883,10884],{},"代码区：",[20,10886,10887],{},"​\t\t存放 CPU 执行的机器指令",[20,10889,10890,10891,10894],{},"​\t\t代码区是",[427,10892,10893],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[20,10896,10890,10897,10900],{},[427,10898,10899],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[20,10902,10881,10903],{},[427,10904,10905],{},"全局区：",[20,10907,10908],{},"​\t\t全局变量和静态变量存放在此.",[20,10910,10911],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[20,10913,10914],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[36,10916,10918],{"className":270,"code":10917,"language":272,"meta":25,"style":25},"\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",[42,10919,10920,10925,10938,10951,10955,10960,10975,10990,10994,11003,11007,11012,11025,11038,11042,11047,11073,11099,11103,11130,11156,11160,11165,11181,11196,11200,11226,11252,11256,11281,11306,11310,11336,11362,11366,11382,11397,11423,11449,11453,11463,11467,11475],{"__ignoreMap":25},[45,10921,10922],{"class":47,"line":48},[45,10923,10924],{"class":337},"\u002F\u002F全局变量\n",[45,10926,10927,10929,10932,10934,10936],{"class":47,"line":66},[45,10928,285],{"class":51},[45,10930,10931],{"class":55}," g_a ",[45,10933,59],{"class":51},[45,10935,2188],{"class":79},[45,10937,1442],{"class":55},[45,10939,10940,10942,10945,10947,10949],{"class":47,"line":1331},[45,10941,285],{"class":51},[45,10943,10944],{"class":55}," g_b ",[45,10946,59],{"class":51},[45,10948,2188],{"class":79},[45,10950,1442],{"class":55},[45,10952,10953],{"class":47,"line":1346},[45,10954,2550],{"emptyLinePlaceholder":207},[45,10956,10957],{"class":47,"line":1352},[45,10958,10959],{"class":337},"\u002F\u002F全局常量\n",[45,10961,10962,10964,10966,10969,10971,10973],{"class":47,"line":1366},[45,10963,6942],{"class":51},[45,10965,2532],{"class":51},[45,10967,10968],{"class":55}," c_g_a ",[45,10970,59],{"class":51},[45,10972,2188],{"class":79},[45,10974,1442],{"class":55},[45,10976,10977,10979,10981,10984,10986,10988],{"class":47,"line":1372},[45,10978,6942],{"class":51},[45,10980,2532],{"class":51},[45,10982,10983],{"class":55}," c_g_b ",[45,10985,59],{"class":51},[45,10987,2188],{"class":79},[45,10989,1442],{"class":55},[45,10991,10992],{"class":47,"line":1463},[45,10993,2550],{"emptyLinePlaceholder":207},[45,10995,10996,10998,11000],{"class":47,"line":1469},[45,10997,285],{"class":51},[45,10999,2123],{"class":69},[45,11001,11002],{"class":55},"() {\n",[45,11004,11005],{"class":47,"line":1481},[45,11006,2550],{"emptyLinePlaceholder":207},[45,11008,11009],{"class":47,"line":1763},[45,11010,11011],{"class":337},"    \u002F\u002F局部变量\n",[45,11013,11014,11016,11019,11021,11023],{"class":47,"line":1768},[45,11015,2135],{"class":51},[45,11017,11018],{"class":55}," a ",[45,11020,59],{"class":51},[45,11022,2188],{"class":79},[45,11024,1442],{"class":55},[45,11026,11027,11029,11032,11034,11036],{"class":47,"line":1774},[45,11028,2135],{"class":51},[45,11030,11031],{"class":55}," b ",[45,11033,59],{"class":51},[45,11035,2188],{"class":79},[45,11037,1442],{"class":55},[45,11039,11040],{"class":47,"line":1779},[45,11041,2550],{"emptyLinePlaceholder":207},[45,11043,11044],{"class":47,"line":1793},[45,11045,11046],{"class":337},"    \u002F\u002F打印地址\n",[45,11048,11049,11051,11053,11056,11058,11060,11062,11064,11066,11069,11071],{"class":47,"line":1798},[45,11050,6679],{"class":55},[45,11052,1320],{"class":51},[45,11054,11055],{"class":62}," \"局部变量a地址为： \"",[45,11057,1596],{"class":51},[45,11059,1809],{"class":55},[45,11061,285],{"class":51},[45,11063,706],{"class":55},[45,11065,630],{"class":51},[45,11067,11068],{"class":55},"a ",[45,11070,1320],{"class":51},[45,11072,8990],{"class":55},[45,11074,11075,11077,11079,11082,11084,11086,11088,11090,11092,11095,11097],{"class":47,"line":1804},[45,11076,6679],{"class":55},[45,11078,1320],{"class":51},[45,11080,11081],{"class":62}," \"局部变量b地址为： \"",[45,11083,1596],{"class":51},[45,11085,1809],{"class":55},[45,11087,285],{"class":51},[45,11089,706],{"class":55},[45,11091,630],{"class":51},[45,11093,11094],{"class":55},"b ",[45,11096,1320],{"class":51},[45,11098,8990],{"class":55},[45,11100,11101],{"class":47,"line":1825},[45,11102,2550],{"emptyLinePlaceholder":207},[45,11104,11105,11107,11109,11112,11114,11117,11119,11121,11123,11126,11128],{"class":47,"line":1830},[45,11106,6679],{"class":55},[45,11108,1320],{"class":51},[45,11110,11111],{"class":62}," \"全局变量g_a地址为： \"",[45,11113,1596],{"class":51},[45,11115,11116],{"class":55},"  (",[45,11118,285],{"class":51},[45,11120,706],{"class":55},[45,11122,630],{"class":51},[45,11124,11125],{"class":55},"g_a ",[45,11127,1320],{"class":51},[45,11129,8990],{"class":55},[45,11131,11132,11134,11136,11139,11141,11143,11145,11147,11149,11152,11154],{"class":47,"line":1844},[45,11133,6679],{"class":55},[45,11135,1320],{"class":51},[45,11137,11138],{"class":62}," \"全局变量g_b地址为： \"",[45,11140,1596],{"class":51},[45,11142,11116],{"class":55},[45,11144,285],{"class":51},[45,11146,706],{"class":55},[45,11148,630],{"class":51},[45,11150,11151],{"class":55},"g_b ",[45,11153,1320],{"class":51},[45,11155,8990],{"class":55},[45,11157,11158],{"class":47,"line":1849},[45,11159,2550],{"emptyLinePlaceholder":207},[45,11161,11162],{"class":47,"line":1878},[45,11163,11164],{"class":337},"    \u002F\u002F静态变量\n",[45,11166,11167,11170,11172,11175,11177,11179],{"class":47,"line":1883},[45,11168,11169],{"class":51},"    static",[45,11171,2532],{"class":51},[45,11173,11174],{"class":55}," s_a ",[45,11176,59],{"class":51},[45,11178,2188],{"class":79},[45,11180,1442],{"class":55},[45,11182,11183,11185,11187,11190,11192,11194],{"class":47,"line":1900},[45,11184,11169],{"class":51},[45,11186,2532],{"class":51},[45,11188,11189],{"class":55}," s_b ",[45,11191,59],{"class":51},[45,11193,2188],{"class":79},[45,11195,1442],{"class":55},[45,11197,11198],{"class":47,"line":1905},[45,11199,2550],{"emptyLinePlaceholder":207},[45,11201,11202,11204,11206,11209,11211,11213,11215,11217,11219,11222,11224],{"class":47,"line":1910},[45,11203,6679],{"class":55},[45,11205,1320],{"class":51},[45,11207,11208],{"class":62}," \"静态变量s_a地址为： \"",[45,11210,1596],{"class":51},[45,11212,1809],{"class":55},[45,11214,285],{"class":51},[45,11216,706],{"class":55},[45,11218,630],{"class":51},[45,11220,11221],{"class":55},"s_a ",[45,11223,1320],{"class":51},[45,11225,8990],{"class":55},[45,11227,11228,11230,11232,11235,11237,11239,11241,11243,11245,11248,11250],{"class":47,"line":1915},[45,11229,6679],{"class":55},[45,11231,1320],{"class":51},[45,11233,11234],{"class":62}," \"静态变量s_b地址为： \"",[45,11236,1596],{"class":51},[45,11238,1809],{"class":55},[45,11240,285],{"class":51},[45,11242,706],{"class":55},[45,11244,630],{"class":51},[45,11246,11247],{"class":55},"s_b ",[45,11249,1320],{"class":51},[45,11251,8990],{"class":55},[45,11253,11254],{"class":47,"line":1929},[45,11255,2550],{"emptyLinePlaceholder":207},[45,11257,11258,11260,11262,11265,11267,11269,11271,11273,11275,11277,11279],{"class":47,"line":1934},[45,11259,6679],{"class":55},[45,11261,1320],{"class":51},[45,11263,11264],{"class":62}," \"字符串常量地址为： \"",[45,11266,1596],{"class":51},[45,11268,1809],{"class":55},[45,11270,285],{"class":51},[45,11272,706],{"class":55},[45,11274,630],{"class":51},[45,11276,1338],{"class":62},[45,11278,1596],{"class":51},[45,11280,8990],{"class":55},[45,11282,11283,11285,11287,11289,11291,11293,11295,11297,11299,11302,11304],{"class":47,"line":2727},[45,11284,6679],{"class":55},[45,11286,1320],{"class":51},[45,11288,11264],{"class":62},[45,11290,1596],{"class":51},[45,11292,1809],{"class":55},[45,11294,285],{"class":51},[45,11296,706],{"class":55},[45,11298,630],{"class":51},[45,11300,11301],{"class":62},"\"hello world1\"",[45,11303,1596],{"class":51},[45,11305,8990],{"class":55},[45,11307,11308],{"class":47,"line":2741},[45,11309,2550],{"emptyLinePlaceholder":207},[45,11311,11312,11314,11316,11319,11321,11323,11325,11327,11329,11332,11334],{"class":47,"line":2749},[45,11313,6679],{"class":55},[45,11315,1320],{"class":51},[45,11317,11318],{"class":62}," \"全局常量c_g_a地址为： \"",[45,11320,1596],{"class":51},[45,11322,1809],{"class":55},[45,11324,285],{"class":51},[45,11326,706],{"class":55},[45,11328,630],{"class":51},[45,11330,11331],{"class":55},"c_g_a ",[45,11333,1320],{"class":51},[45,11335,8990],{"class":55},[45,11337,11338,11340,11342,11345,11347,11349,11351,11353,11355,11358,11360],{"class":47,"line":2754},[45,11339,6679],{"class":55},[45,11341,1320],{"class":51},[45,11343,11344],{"class":62}," \"全局常量c_g_b地址为： \"",[45,11346,1596],{"class":51},[45,11348,1809],{"class":55},[45,11350,285],{"class":51},[45,11352,706],{"class":55},[45,11354,630],{"class":51},[45,11356,11357],{"class":55},"c_g_b ",[45,11359,1320],{"class":51},[45,11361,8990],{"class":55},[45,11363,11364],{"class":47,"line":2760},[45,11365,2550],{"emptyLinePlaceholder":207},[45,11367,11368,11371,11373,11376,11378,11380],{"class":47,"line":2766},[45,11369,11370],{"class":51},"    const",[45,11372,2532],{"class":51},[45,11374,11375],{"class":55}," c_l_a ",[45,11377,59],{"class":51},[45,11379,2188],{"class":79},[45,11381,1442],{"class":55},[45,11383,11384,11386,11388,11391,11393,11395],{"class":47,"line":2771},[45,11385,11370],{"class":51},[45,11387,2532],{"class":51},[45,11389,11390],{"class":55}," c_l_b ",[45,11392,59],{"class":51},[45,11394,2188],{"class":79},[45,11396,1442],{"class":55},[45,11398,11399,11401,11403,11406,11408,11410,11412,11414,11416,11419,11421],{"class":47,"line":8098},[45,11400,6679],{"class":55},[45,11402,1320],{"class":51},[45,11404,11405],{"class":62}," \"局部常量c_l_a地址为： \"",[45,11407,1596],{"class":51},[45,11409,1809],{"class":55},[45,11411,285],{"class":51},[45,11413,706],{"class":55},[45,11415,630],{"class":51},[45,11417,11418],{"class":55},"c_l_a ",[45,11420,1320],{"class":51},[45,11422,8990],{"class":55},[45,11424,11425,11427,11429,11432,11434,11436,11438,11440,11442,11445,11447],{"class":47,"line":8122},[45,11426,6679],{"class":55},[45,11428,1320],{"class":51},[45,11430,11431],{"class":62}," \"局部常量c_l_b地址为： \"",[45,11433,1596],{"class":51},[45,11435,1809],{"class":55},[45,11437,285],{"class":51},[45,11439,706],{"class":55},[45,11441,630],{"class":51},[45,11443,11444],{"class":55},"c_l_b ",[45,11446,1320],{"class":51},[45,11448,8990],{"class":55},[45,11450,11451],{"class":47,"line":8127},[45,11452,2550],{"emptyLinePlaceholder":207},[45,11454,11455,11457,11459,11461],{"class":47,"line":8133},[45,11456,2453],{"class":69},[45,11458,282],{"class":55},[45,11460,2458],{"class":62},[45,11462,2869],{"class":55},[45,11464,11465],{"class":47,"line":8160},[45,11466,2550],{"emptyLinePlaceholder":207},[45,11468,11469,11471,11473],{"class":47,"line":8165},[45,11470,4240],{"class":51},[45,11472,4243],{"class":79},[45,11474,1442],{"class":55},[45,11476,11477],{"class":47,"line":8171},[45,11478,1716],{"class":55},[20,11480,11481],{},"总结：",[166,11483,11484,11487,11490,11493],{},[169,11485,11486],{},"c++中程序运行前分为全局区和代码区",[169,11488,11489],{},"代码区特点是共享和只读",[169,11491,11492],{},"全局区中存放全局变量、静态变量、常量",[169,11494,11495],{},"常量区中存放const修饰的全局常量和字符串常量",[249,11497,11499],{"id":11498},"_512程序运行后","5.1.2程序运行后",[233,11501,11502],{},[169,11503,11504],{},"栈区：",[166,11506,11507,11514],{},[169,11508,11509,11510,11513],{},"由编译器自动分配释放, 存放",[427,11511,11512],{},"函数的参数值,局部变量","等",[169,11515,11516,11517,11520],{},"注意事项：",[427,11518,11519],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[36,11522,11524],{"className":270,"code":11523,"language":272,"meta":25,"style":25},"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",[42,11525,11526,11537,11541,11556,11568,11572,11576,11584,11589,11604,11622,11639,11649,11657],{"__ignoreMap":25},[45,11527,11528,11530,11532,11535],{"class":47,"line":48},[45,11529,285],{"class":51},[45,11531,6668],{"class":51},[45,11533,11534],{"class":69}," func",[45,11536,2126],{"class":55},[45,11538,11539],{"class":47,"line":66},[45,11540,1697],{"class":55},[45,11542,11543,11545,11547,11549,11551,11553],{"class":47,"line":1331},[45,11544,2135],{"class":51},[45,11546,11018],{"class":55},[45,11548,59],{"class":51},[45,11550,2188],{"class":79},[45,11552,334],{"class":55},[45,11554,11555],{"class":337}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[45,11557,11558,11560,11562,11565],{"class":47,"line":1346},[45,11559,4240],{"class":51},[45,11561,10733],{"class":51},[45,11563,11564],{"class":55},"a;",[45,11566,11567],{"class":337}," \u002F\u002F放回局部变量的地址\n",[45,11569,11570],{"class":47,"line":1352},[45,11571,1716],{"class":55},[45,11573,11574],{"class":47,"line":1366},[45,11575,2550],{"emptyLinePlaceholder":207},[45,11577,11578,11580,11582],{"class":47,"line":1372},[45,11579,285],{"class":51},[45,11581,2123],{"class":69},[45,11583,11002],{"class":55},[45,11585,11586],{"class":47,"line":1463},[45,11587,11588],{"class":337},"    \u002F\u002F接受func的返回值\n",[45,11590,11591,11593,11595,11598,11600,11602],{"class":47,"line":1469},[45,11592,2135],{"class":51},[45,11594,6668],{"class":51},[45,11596,11597],{"class":55},"p ",[45,11599,59],{"class":51},[45,11601,11534],{"class":69},[45,11603,5786],{"class":55},[45,11605,11606,11608,11610,11612,11614,11616,11619],{"class":47,"line":1481},[45,11607,6679],{"class":55},[45,11609,1320],{"class":51},[45,11611,6668],{"class":51},[45,11613,11597],{"class":55},[45,11615,1320],{"class":51},[45,11617,11618],{"class":55}," endl;",[45,11620,11621],{"class":337}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[45,11623,11624,11626,11628,11630,11632,11634,11636],{"class":47,"line":1763},[45,11625,6679],{"class":55},[45,11627,1320],{"class":51},[45,11629,6668],{"class":51},[45,11631,11597],{"class":55},[45,11633,1320],{"class":51},[45,11635,11618],{"class":55},[45,11637,11638],{"class":337}," \u002F\u002F第二次这个数据不再保留\n",[45,11640,11641,11643,11645,11647],{"class":47,"line":1768},[45,11642,2453],{"class":69},[45,11644,282],{"class":55},[45,11646,2458],{"class":62},[45,11648,2869],{"class":55},[45,11650,11651,11653,11655],{"class":47,"line":1774},[45,11652,4240],{"class":51},[45,11654,4243],{"class":79},[45,11656,1442],{"class":55},[45,11658,11659],{"class":47,"line":1779},[45,11660,1716],{"class":55},[20,11662,11663],{},"输出结果：",[20,11665,11666],{},[23,11667],{"alt":11668,"src":11669},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[20,11671,11672],{},"总结：不要返回局部变量的地址",[233,11674,11675],{"start":66},[169,11676,11677],{},"堆区",[166,11679,11680,11683],{},[169,11681,11682],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[169,11684,11685],{},"在c++中主要利用new在堆区开辟内存",[36,11687,11689],{"className":270,"code":11688,"language":272,"meta":25,"style":25},"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",[42,11690,11691,11706,11710,11715,11736,11743,11747,11755,11759,11764,11778,11790],{"__ignoreMap":25},[45,11692,11693,11695,11698,11701,11703],{"class":47,"line":48},[45,11694,285],{"class":51},[45,11696,11697],{"class":51},"  *",[45,11699,11700],{"class":69},"func",[45,11702,2577],{"class":55},[45,11704,11705],{"class":337},"  \u002F\u002F函数返回指针\n",[45,11707,11708],{"class":47,"line":66},[45,11709,1697],{"class":55},[45,11711,11712],{"class":47,"line":1331},[45,11713,11714],{"class":337},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[45,11716,11717,11719,11721,11723,11725,11728,11730,11732,11734],{"class":47,"line":1346},[45,11718,4297],{"class":51},[45,11720,6668],{"class":51},[45,11722,20],{"class":55},[45,11724,59],{"class":51},[45,11726,11727],{"class":51}," new",[45,11729,2532],{"class":51},[45,11731,282],{"class":55},[45,11733,723],{"class":79},[45,11735,2869],{"class":55},[45,11737,11738,11740],{"class":47,"line":1352},[45,11739,4531],{"class":51},[45,11741,11742],{"class":55}," p;\n",[45,11744,11745],{"class":47,"line":1366},[45,11746,1716],{"class":55},[45,11748,11749,11751,11753],{"class":47,"line":1372},[45,11750,285],{"class":51},[45,11752,2123],{"class":69},[45,11754,2126],{"class":55},[45,11756,11757],{"class":47,"line":1463},[45,11758,1697],{"class":55},[45,11760,11761],{"class":47,"line":1469},[45,11762,11763],{"class":337},"    \u002F\u002F在堆区开辟数据\n",[45,11765,11766,11768,11770,11772,11774,11776],{"class":47,"line":1481},[45,11767,2135],{"class":51},[45,11769,6668],{"class":51},[45,11771,20],{"class":55},[45,11773,59],{"class":51},[45,11775,11700],{"class":69},[45,11777,5786],{"class":55},[45,11779,11780,11782,11784,11786,11788],{"class":47,"line":1763},[45,11781,1702],{"class":55},[45,11783,6569],{"class":51},[45,11785,20],{"class":55},[45,11787,1320],{"class":51},[45,11789,1343],{"class":55},[45,11791,11792],{"class":47,"line":1768},[45,11793,1716],{"class":55},[20,11795,11796],{},"图片展示：",[20,11798,11799],{},[23,11800],{"alt":11668,"src":11801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[20,11803,11804],{},"堆区内存由程序员管生死！！！",[233,11806,11807],{"start":1331},[169,11808,11809],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[20,11811,11812],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[20,11814,11815,11816],{},"​语法：",[42,11817,11818],{}," new 数据类型",[20,11820,11821],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[36,11823,11825],{"className":270,"code":11824,"language":272,"meta":25,"style":25},"\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",[42,11826,11827,11832,11842,11846,11851,11856,11878,11882,11890,11894,11908,11920,11932,11944,11949,11954,11965,11969,11974,11982,11986,11991,12013,12039,12043,12061,12065,12091,12095,12107,12111,12116,12121,12129,12133,12137,12145,12149,12155,12161],{"__ignoreMap":25},[45,11828,11829],{"class":47,"line":48},[45,11830,11831],{"class":337},"\u002F\u002F1.new的基本语法\n",[45,11833,11834,11836,11838,11840],{"class":47,"line":66},[45,11835,285],{"class":51},[45,11837,6668],{"class":51},[45,11839,11700],{"class":69},[45,11841,2126],{"class":55},[45,11843,11844],{"class":47,"line":1331},[45,11845,1697],{"class":55},[45,11847,11848],{"class":47,"line":1346},[45,11849,11850],{"class":337},"    \u002F\u002F在堆区创建整型数据\n",[45,11852,11853],{"class":47,"line":1352},[45,11854,11855],{"class":337},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[45,11857,11858,11860,11862,11864,11867,11869,11871,11873,11875],{"class":47,"line":1366},[45,11859,2135],{"class":51},[45,11861,6668],{"class":51},[45,11863,20],{"class":55},[45,11865,11866],{"class":51},"=new",[45,11868,2532],{"class":51},[45,11870,282],{"class":55},[45,11872,723],{"class":79},[45,11874,6116],{"class":55},[45,11876,11877],{"class":337},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[45,11879,11880],{"class":47,"line":1372},[45,11881,1716],{"class":55},[45,11883,11884,11886,11888],{"class":47,"line":1463},[45,11885,5514],{"class":51},[45,11887,5738],{"class":69},[45,11889,2126],{"class":55},[45,11891,11892],{"class":47,"line":1469},[45,11893,1697],{"class":55},[45,11895,11896,11898,11900,11902,11904,11906],{"class":47,"line":1481},[45,11897,2135],{"class":51},[45,11899,6668],{"class":51},[45,11901,20],{"class":55},[45,11903,59],{"class":51},[45,11905,11700],{"class":69},[45,11907,5786],{"class":55},[45,11909,11910,11912,11914,11916,11918],{"class":47,"line":1763},[45,11911,1702],{"class":55},[45,11913,6569],{"class":51},[45,11915,20],{"class":55},[45,11917,1320],{"class":51},[45,11919,1343],{"class":55},[45,11921,11922,11924,11926,11928,11930],{"class":47,"line":1768},[45,11923,1702],{"class":55},[45,11925,6569],{"class":51},[45,11927,20],{"class":55},[45,11929,1320],{"class":51},[45,11931,1343],{"class":55},[45,11933,11934,11936,11938,11940,11942],{"class":47,"line":1774},[45,11935,1702],{"class":55},[45,11937,6569],{"class":51},[45,11939,20],{"class":55},[45,11941,1320],{"class":51},[45,11943,1343],{"class":55},[45,11945,11946],{"class":47,"line":1779},[45,11947,11948],{"class":337},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[45,11950,11951],{"class":47,"line":1793},[45,11952,11953],{"class":337},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[45,11955,11956,11959,11962],{"class":47,"line":1798},[45,11957,11958],{"class":51},"    delete",[45,11960,11961],{"class":55}," p;",[45,11963,11964],{"class":337},"\u002F\u002F删除这块地址\n",[45,11966,11967],{"class":47,"line":1804},[45,11968,1716],{"class":55},[45,11970,11971],{"class":47,"line":1825},[45,11972,11973],{"class":337},"\u002F\u002F2.在堆区利用new开辟数组\n",[45,11975,11976,11978,11980],{"class":47,"line":1830},[45,11977,5514],{"class":51},[45,11979,5807],{"class":69},[45,11981,2126],{"class":55},[45,11983,11984],{"class":47,"line":1844},[45,11985,1697],{"class":55},[45,11987,11988],{"class":47,"line":1849},[45,11989,11990],{"class":337},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[45,11992,11993,11995,11997,11999,12001,12003,12005,12007,12010],{"class":47,"line":1878},[45,11994,2135],{"class":51},[45,11996,6668],{"class":51},[45,11998,4030],{"class":55},[45,12000,11866],{"class":51},[45,12002,2532],{"class":51},[45,12004,1167],{"class":55},[45,12006,723],{"class":79},[45,12008,12009],{"class":55},"];",[45,12011,12012],{"class":337},"\u002F\u002F10代表数组有10个元素\n",[45,12014,12015,12017,12019,12021,12023,12025,12027,12029,12031,12033,12035,12037],{"class":47,"line":1883},[45,12016,3351],{"class":51},[45,12018,1809],{"class":55},[45,12020,285],{"class":51},[45,12022,3182],{"class":55},[45,12024,59],{"class":51},[45,12026,469],{"class":79},[45,12028,3189],{"class":55},[45,12030,1187],{"class":51},[45,12032,723],{"class":79},[45,12034,3189],{"class":55},[45,12036,2442],{"class":51},[45,12038,139],{"class":55},[45,12040,12041],{"class":47,"line":1900},[45,12042,2180],{"class":55},[45,12044,12045,12048,12050,12052,12054,12056,12058],{"class":47,"line":1905},[45,12046,12047],{"class":55},"        arr[i]",[45,12049,59],{"class":51},[45,12051,718],{"class":55},[45,12053,758],{"class":51},[45,12055,588],{"class":79},[45,12057,334],{"class":55},[45,12059,12060],{"class":337},"\u002F\u002F给10个元素赋值100～109\n",[45,12062,12063],{"class":47,"line":1910},[45,12064,2337],{"class":55},[45,12066,12067,12069,12071,12073,12075,12077,12079,12081,12083,12085,12087,12089],{"class":47,"line":1915},[45,12068,3351],{"class":51},[45,12070,1809],{"class":55},[45,12072,285],{"class":51},[45,12074,3182],{"class":55},[45,12076,59],{"class":51},[45,12078,469],{"class":79},[45,12080,3189],{"class":55},[45,12082,1187],{"class":51},[45,12084,723],{"class":79},[45,12086,3189],{"class":55},[45,12088,2442],{"class":51},[45,12090,139],{"class":55},[45,12092,12093],{"class":47,"line":1929},[45,12094,2180],{"class":55},[45,12096,12097,12099,12101,12103,12105],{"class":47,"line":1934},[45,12098,3601],{"class":55},[45,12100,1320],{"class":51},[45,12102,4504],{"class":55},[45,12104,1320],{"class":51},[45,12106,1343],{"class":55},[45,12108,12109],{"class":47,"line":2727},[45,12110,2337],{"class":55},[45,12112,12113],{"class":47,"line":2741},[45,12114,12115],{"class":337},"    \u002F\u002F释放堆区数组\n",[45,12117,12118],{"class":47,"line":2749},[45,12119,12120],{"class":337},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[45,12122,12123,12126],{"class":47,"line":2754},[45,12124,12125],{"class":51},"    delete[]",[45,12127,12128],{"class":55}," arr;\n",[45,12130,12131],{"class":47,"line":2760},[45,12132,1716],{"class":55},[45,12134,12135],{"class":47,"line":2766},[45,12136,2550],{"emptyLinePlaceholder":207},[45,12138,12139,12141,12143],{"class":47,"line":2771},[45,12140,285],{"class":51},[45,12142,2123],{"class":69},[45,12144,2126],{"class":55},[45,12146,12147],{"class":47,"line":8098},[45,12148,1697],{"class":55},[45,12150,12151,12153],{"class":47,"line":8122},[45,12152,5783],{"class":69},[45,12154,5786],{"class":55},[45,12156,12157,12159],{"class":47,"line":8127},[45,12158,5852],{"class":69},[45,12160,5786],{"class":55},[45,12162,12163],{"class":47,"line":8133},[45,12164,1716],{"class":55},[196,12166,12167],{},"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":25,"searchDepth":66,"depth":66,"links":12169},[12170],{"id":10838,"depth":66,"text":10839,"children":12171},[12172,12173],{"id":10870,"depth":1331,"text":10871},{"id":11498,"depth":1331,"text":11499},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10830,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12180,"title":12181,"body":12182,"description":25,"extension":205,"meta":13663,"navigation":207,"path":13664,"seo":13665,"stem":13666,"__hash__":13667},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12183,"toc":13655},[12184,12187,12191,12194,12197,12366,12370,12375,12392,12397,12549,12553,12556,12559,12953,12957,12960,12965,12968,13280,13284,13290,13450,13452,13460,13464,13467,13474,13652],[10,12185,12181],{"id":12186},"_6引用",[15,12188,12190],{"id":12189},"_61引用基本用法","6.1引用基本用法",[20,12192,12193],{},"引用的本质：给变量起别名",[20,12195,12196],{},"语法：数据类型 &别名=原名",[36,12198,12200],{"className":270,"code":12199,"language":272,"meta":25,"style":25},"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",[42,12201,12202,12210,12214,12226,12238,12242,12261,12280,12284,12295,12299,12318,12336,12340,12350,12354,12362],{"__ignoreMap":25},[45,12203,12204,12206,12208],{"class":47,"line":48},[45,12205,285],{"class":51},[45,12207,2123],{"class":69},[45,12209,11002],{"class":55},[45,12211,12212],{"class":47,"line":66},[45,12213,2550],{"emptyLinePlaceholder":207},[45,12215,12216,12218,12220,12222,12224],{"class":47,"line":1331},[45,12217,2135],{"class":51},[45,12219,11018],{"class":55},[45,12221,59],{"class":51},[45,12223,2188],{"class":79},[45,12225,1442],{"class":55},[45,12227,12228,12230,12232,12234,12236],{"class":47,"line":1346},[45,12229,2135],{"class":51},[45,12231,10733],{"class":51},[45,12233,11094],{"class":55},[45,12235,59],{"class":51},[45,12237,1584],{"class":55},[45,12239,12240],{"class":47,"line":1352},[45,12241,2550],{"emptyLinePlaceholder":207},[45,12243,12244,12246,12248,12251,12253,12255,12257,12259],{"class":47,"line":1366},[45,12245,6679],{"class":55},[45,12247,1320],{"class":51},[45,12249,12250],{"class":62}," \"a = \"",[45,12252,1596],{"class":51},[45,12254,11018],{"class":55},[45,12256,1320],{"class":51},[45,12258,11618],{"class":55},[45,12260,7418],{"class":337},[45,12262,12263,12265,12267,12270,12272,12274,12276,12278],{"class":47,"line":1372},[45,12264,6679],{"class":55},[45,12266,1320],{"class":51},[45,12268,12269],{"class":62}," \"b = \"",[45,12271,1596],{"class":51},[45,12273,11031],{"class":55},[45,12275,1320],{"class":51},[45,12277,11618],{"class":55},[45,12279,7418],{"class":337},[45,12281,12282],{"class":47,"line":1463},[45,12283,2550],{"emptyLinePlaceholder":207},[45,12285,12286,12289,12291,12293],{"class":47,"line":1469},[45,12287,12288],{"class":55},"    b ",[45,12290,59],{"class":51},[45,12292,5904],{"class":79},[45,12294,1442],{"class":55},[45,12296,12297],{"class":47,"line":1481},[45,12298,2550],{"emptyLinePlaceholder":207},[45,12300,12301,12303,12305,12307,12309,12311,12313,12315],{"class":47,"line":1763},[45,12302,6679],{"class":55},[45,12304,1320],{"class":51},[45,12306,12250],{"class":62},[45,12308,1596],{"class":51},[45,12310,11018],{"class":55},[45,12312,1320],{"class":51},[45,12314,11618],{"class":55},[45,12316,12317],{"class":337},"\u002F\u002F100\n",[45,12319,12320,12322,12324,12326,12328,12330,12332,12334],{"class":47,"line":1768},[45,12321,6679],{"class":55},[45,12323,1320],{"class":51},[45,12325,12269],{"class":62},[45,12327,1596],{"class":51},[45,12329,11031],{"class":55},[45,12331,1320],{"class":51},[45,12333,11618],{"class":55},[45,12335,12317],{"class":337},[45,12337,12338],{"class":47,"line":1774},[45,12339,2550],{"emptyLinePlaceholder":207},[45,12341,12342,12344,12346,12348],{"class":47,"line":1779},[45,12343,2453],{"class":69},[45,12345,282],{"class":55},[45,12347,2458],{"class":62},[45,12349,2869],{"class":55},[45,12351,12352],{"class":47,"line":1793},[45,12353,2550],{"emptyLinePlaceholder":207},[45,12355,12356,12358,12360],{"class":47,"line":1798},[45,12357,4240],{"class":51},[45,12359,4243],{"class":79},[45,12361,1442],{"class":55},[45,12363,12364],{"class":47,"line":1804},[45,12365,1716],{"class":55},[15,12367,12369],{"id":12368},"_62引用的注意事项","6.2引用的注意事项",[233,12371,12372],{},[169,12373,12374],{},"引用必须要初始化",[36,12376,12378],{"className":270,"code":12377,"language":272,"meta":25,"style":25},"int &b;\u002F\u002F非常错误！\n",[42,12379,12380],{"__ignoreMap":25},[45,12381,12382,12384,12386,12389],{"class":47,"line":48},[45,12383,285],{"class":51},[45,12385,10733],{"class":51},[45,12387,12388],{"class":55},"b;",[45,12390,12391],{"class":337},"\u002F\u002F非常错误！\n",[233,12393,12394],{"start":66},[169,12395,12396],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[36,12398,12400],{"className":270,"code":12399,"language":272,"meta":25,"style":25},"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",[42,12401,12402,12410,12422,12434,12442,12458,12471,12489,12507,12527,12537,12545],{"__ignoreMap":25},[45,12403,12404,12406,12408],{"class":47,"line":48},[45,12405,285],{"class":51},[45,12407,2123],{"class":69},[45,12409,11002],{"class":55},[45,12411,12412,12414,12416,12418,12420],{"class":47,"line":66},[45,12413,2135],{"class":51},[45,12415,11018],{"class":55},[45,12417,59],{"class":51},[45,12419,2188],{"class":79},[45,12421,1442],{"class":55},[45,12423,12424,12426,12428,12430,12432],{"class":47,"line":1331},[45,12425,2135],{"class":51},[45,12427,11031],{"class":55},[45,12429,59],{"class":51},[45,12431,9100],{"class":79},[45,12433,1442],{"class":55},[45,12435,12436,12439],{"class":47,"line":1346},[45,12437,12438],{"class":337},"    \u002F\u002Fint &c;",[45,12440,12441],{"class":337}," \u002F\u002F错误，引用必须初始化\n",[45,12443,12444,12446,12448,12450,12452,12455],{"class":47,"line":1352},[45,12445,2135],{"class":51},[45,12447,10733],{"class":51},[45,12449,3096],{"class":55},[45,12451,59],{"class":51},[45,12453,12454],{"class":55}," a;",[45,12456,12457],{"class":337}," \u002F\u002F一旦初始化后，就不可以更改\n",[45,12459,12460,12463,12465,12468],{"class":47,"line":1366},[45,12461,12462],{"class":55},"    c ",[45,12464,59],{"class":51},[45,12466,12467],{"class":55}," b;",[45,12469,12470],{"class":337}," \u002F\u002F这是赋值操作，不是更改引用\n",[45,12472,12473,12475,12477,12479,12481,12483,12485,12487],{"class":47,"line":1372},[45,12474,6679],{"class":55},[45,12476,1320],{"class":51},[45,12478,12250],{"class":62},[45,12480,1596],{"class":51},[45,12482,11018],{"class":55},[45,12484,1320],{"class":51},[45,12486,11618],{"class":55},[45,12488,7403],{"class":337},[45,12490,12491,12493,12495,12497,12499,12501,12503,12505],{"class":47,"line":1463},[45,12492,6679],{"class":55},[45,12494,1320],{"class":51},[45,12496,12269],{"class":62},[45,12498,1596],{"class":51},[45,12500,11031],{"class":55},[45,12502,1320],{"class":51},[45,12504,11618],{"class":55},[45,12506,7403],{"class":337},[45,12508,12509,12511,12513,12516,12518,12521,12523,12525],{"class":47,"line":1469},[45,12510,6679],{"class":55},[45,12512,1320],{"class":51},[45,12514,12515],{"class":62}," \"c = \"",[45,12517,1596],{"class":51},[45,12519,12520],{"class":55}," c ",[45,12522,1320],{"class":51},[45,12524,11618],{"class":55},[45,12526,7403],{"class":337},[45,12528,12529,12531,12533,12535],{"class":47,"line":1481},[45,12530,2453],{"class":69},[45,12532,282],{"class":55},[45,12534,2458],{"class":62},[45,12536,2869],{"class":55},[45,12538,12539,12541,12543],{"class":47,"line":1763},[45,12540,4240],{"class":51},[45,12542,4243],{"class":79},[45,12544,1442],{"class":55},[45,12546,12547],{"class":47,"line":1768},[45,12548,1716],{"class":55},[15,12550,12552],{"id":12551},"_63引用做函数参数","6.3引用做函数参数",[20,12554,12555],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[20,12557,12558],{},"优点：可以简化指针修改实参",[36,12560,12562],{"className":270,"code":12561,"language":272,"meta":25,"style":25},"\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",[42,12563,12564,12569,12592,12603,12613,12622,12626,12630,12635,12657,12669,12681,12691,12695,12699,12704,12726,12736,12744,12752,12756,12760,12768,12772,12784,12796,12800,12811,12837,12841,12861,12885,12889,12899,12923,12927,12937,12941,12949],{"__ignoreMap":25},[45,12565,12566],{"class":47,"line":48},[45,12567,12568],{"class":337},"\u002F\u002F1. 值传递\n",[45,12570,12571,12573,12576,12578,12580,12582,12585,12587,12589],{"class":47,"line":66},[45,12572,5514],{"class":51},[45,12574,12575],{"class":69}," mySwap01",[45,12577,282],{"class":55},[45,12579,285],{"class":51},[45,12581,1550],{"class":5366},[45,12583,12584],{"class":55},", ",[45,12586,285],{"class":51},[45,12588,2983],{"class":5366},[45,12590,12591],{"class":55},") {\n",[45,12593,12594,12596,12599,12601],{"class":47,"line":1331},[45,12595,2135],{"class":51},[45,12597,12598],{"class":55}," temp ",[45,12600,59],{"class":51},[45,12602,1584],{"class":55},[45,12604,12605,12608,12610],{"class":47,"line":1346},[45,12606,12607],{"class":55},"    a ",[45,12609,59],{"class":51},[45,12611,12612],{"class":55}," b;\n",[45,12614,12615,12617,12619],{"class":47,"line":1352},[45,12616,12288],{"class":55},[45,12618,59],{"class":51},[45,12620,12621],{"class":55}," temp;\n",[45,12623,12624],{"class":47,"line":1366},[45,12625,1716],{"class":55},[45,12627,12628],{"class":47,"line":1372},[45,12629,2550],{"emptyLinePlaceholder":207},[45,12631,12632],{"class":47,"line":1463},[45,12633,12634],{"class":337},"\u002F\u002F2. 地址传递\n",[45,12636,12637,12639,12642,12644,12647,12649,12651,12653,12655],{"class":47,"line":1469},[45,12638,5514],{"class":51},[45,12640,12641],{"class":69}," mySwap02",[45,12643,282],{"class":55},[45,12645,12646],{"class":51},"int*",[45,12648,1550],{"class":5366},[45,12650,12584],{"class":55},[45,12652,12646],{"class":51},[45,12654,2983],{"class":5366},[45,12656,12591],{"class":55},[45,12658,12659,12661,12663,12665,12667],{"class":47,"line":1481},[45,12660,2135],{"class":51},[45,12662,12598],{"class":55},[45,12664,59],{"class":51},[45,12666,6668],{"class":51},[45,12668,6347],{"class":55},[45,12670,12671,12673,12675,12677,12679],{"class":47,"line":1763},[45,12672,6553],{"class":51},[45,12674,11068],{"class":55},[45,12676,59],{"class":51},[45,12678,6668],{"class":51},[45,12680,6219],{"class":55},[45,12682,12683,12685,12687,12689],{"class":47,"line":1768},[45,12684,6553],{"class":51},[45,12686,11094],{"class":55},[45,12688,59],{"class":51},[45,12690,12621],{"class":55},[45,12692,12693],{"class":47,"line":1774},[45,12694,1716],{"class":55},[45,12696,12697],{"class":47,"line":1779},[45,12698,2550],{"emptyLinePlaceholder":207},[45,12700,12701],{"class":47,"line":1793},[45,12702,12703],{"class":337},"\u002F\u002F3. 引用传递\n",[45,12705,12706,12708,12711,12713,12716,12718,12720,12722,12724],{"class":47,"line":1798},[45,12707,5514],{"class":51},[45,12709,12710],{"class":69}," mySwap03",[45,12712,282],{"class":55},[45,12714,12715],{"class":51},"int&",[45,12717,1550],{"class":5366},[45,12719,12584],{"class":55},[45,12721,12715],{"class":51},[45,12723,2983],{"class":5366},[45,12725,12591],{"class":55},[45,12727,12728,12730,12732,12734],{"class":47,"line":1804},[45,12729,2135],{"class":51},[45,12731,12598],{"class":55},[45,12733,59],{"class":51},[45,12735,1584],{"class":55},[45,12737,12738,12740,12742],{"class":47,"line":1825},[45,12739,12607],{"class":55},[45,12741,59],{"class":51},[45,12743,12612],{"class":55},[45,12745,12746,12748,12750],{"class":47,"line":1830},[45,12747,12288],{"class":55},[45,12749,59],{"class":51},[45,12751,12621],{"class":55},[45,12753,12754],{"class":47,"line":1844},[45,12755,1716],{"class":55},[45,12757,12758],{"class":47,"line":1849},[45,12759,2550],{"emptyLinePlaceholder":207},[45,12761,12762,12764,12766],{"class":47,"line":1878},[45,12763,285],{"class":51},[45,12765,2123],{"class":69},[45,12767,11002],{"class":55},[45,12769,12770],{"class":47,"line":1883},[45,12771,2550],{"emptyLinePlaceholder":207},[45,12773,12774,12776,12778,12780,12782],{"class":47,"line":1900},[45,12775,2135],{"class":51},[45,12777,11018],{"class":55},[45,12779,59],{"class":51},[45,12781,2188],{"class":79},[45,12783,1442],{"class":55},[45,12785,12786,12788,12790,12792,12794],{"class":47,"line":1905},[45,12787,2135],{"class":51},[45,12789,11031],{"class":55},[45,12791,59],{"class":51},[45,12793,9100],{"class":79},[45,12795,1442],{"class":55},[45,12797,12798],{"class":47,"line":1910},[45,12799,2550],{"emptyLinePlaceholder":207},[45,12801,12802,12805,12808],{"class":47,"line":1915},[45,12803,12804],{"class":69},"    mySwap01",[45,12806,12807],{"class":55},"(a, b);",[45,12809,12810],{"class":337},"\u002F\u002F值传递，形参不会修饰实参\n",[45,12812,12813,12815,12817,12820,12822,12824,12826,12829,12831,12833,12835],{"class":47,"line":1929},[45,12814,6679],{"class":55},[45,12816,1320],{"class":51},[45,12818,12819],{"class":62}," \"a:\"",[45,12821,1596],{"class":51},[45,12823,11018],{"class":55},[45,12825,1320],{"class":51},[45,12827,12828],{"class":62}," \" b:\"",[45,12830,1596],{"class":51},[45,12832,11031],{"class":55},[45,12834,1320],{"class":51},[45,12836,8990],{"class":55},[45,12838,12839],{"class":47,"line":1934},[45,12840,2550],{"emptyLinePlaceholder":207},[45,12842,12843,12846,12848,12850,12853,12855,12858],{"class":47,"line":2727},[45,12844,12845],{"class":69},"    mySwap02",[45,12847,282],{"class":55},[45,12849,630],{"class":51},[45,12851,12852],{"class":55},"a, ",[45,12854,630],{"class":51},[45,12856,12857],{"class":55},"b);",[45,12859,12860],{"class":337},"\u002F\u002F地址传递，形参会修饰实参\n",[45,12862,12863,12865,12867,12869,12871,12873,12875,12877,12879,12881,12883],{"class":47,"line":2741},[45,12864,6679],{"class":55},[45,12866,1320],{"class":51},[45,12868,12819],{"class":62},[45,12870,1596],{"class":51},[45,12872,11018],{"class":55},[45,12874,1320],{"class":51},[45,12876,12828],{"class":62},[45,12878,1596],{"class":51},[45,12880,11031],{"class":55},[45,12882,1320],{"class":51},[45,12884,8990],{"class":55},[45,12886,12887],{"class":47,"line":2749},[45,12888,2550],{"emptyLinePlaceholder":207},[45,12890,12891,12894,12896],{"class":47,"line":2754},[45,12892,12893],{"class":69},"    mySwap03",[45,12895,12807],{"class":55},[45,12897,12898],{"class":337},"\u002F\u002F引用传递，形参会修饰实参\n",[45,12900,12901,12903,12905,12907,12909,12911,12913,12915,12917,12919,12921],{"class":47,"line":2760},[45,12902,6679],{"class":55},[45,12904,1320],{"class":51},[45,12906,12819],{"class":62},[45,12908,1596],{"class":51},[45,12910,11018],{"class":55},[45,12912,1320],{"class":51},[45,12914,12828],{"class":62},[45,12916,1596],{"class":51},[45,12918,11031],{"class":55},[45,12920,1320],{"class":51},[45,12922,8990],{"class":55},[45,12924,12925],{"class":47,"line":2766},[45,12926,2550],{"emptyLinePlaceholder":207},[45,12928,12929,12931,12933,12935],{"class":47,"line":2771},[45,12930,2453],{"class":69},[45,12932,282],{"class":55},[45,12934,2458],{"class":62},[45,12936,2869],{"class":55},[45,12938,12939],{"class":47,"line":8098},[45,12940,2550],{"emptyLinePlaceholder":207},[45,12942,12943,12945,12947],{"class":47,"line":8122},[45,12944,4240],{"class":51},[45,12946,4243],{"class":79},[45,12948,1442],{"class":55},[45,12950,12951],{"class":47,"line":8127},[45,12952,1716],{"class":55},[15,12954,12956],{"id":12955},"_64引用做函数的返回值","6.4引用做函数的返回值",[20,12958,12959],{},"作用：引用是可以作为函数的返回值存在的",[20,12961,9175,12962],{},[427,12963,12964],{},"不要返回局部变量引用",[20,12966,12967],{},"用法：函数调用作为左值",[36,12969,12971],{"className":10090,"code":12970,"language":10092,"meta":25,"style":25},"\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",[42,12972,12973,12978,12986,13001,13007,13011,13015,13020,13028,13045,13051,13055,13059,13067,13071,13076,13090,13110,13129,13133,13138,13151,13171,13189,13193,13209,13213,13232,13250,13254,13264,13268,13276],{"__ignoreMap":25},[45,12974,12975],{"class":47,"line":48},[45,12976,12977],{"class":337},"\u002F\u002F返回局部变量引用\n",[45,12979,12980,12982,12984],{"class":47,"line":66},[45,12981,12715],{"class":51},[45,12983,5738],{"class":69},[45,12985,11002],{"class":55},[45,12987,12988,12990,12992,12994,12996,12998],{"class":47,"line":1331},[45,12989,2135],{"class":51},[45,12991,11018],{"class":55},[45,12993,59],{"class":51},[45,12995,2188],{"class":79},[45,12997,334],{"class":55},[45,12999,13000],{"class":337}," \u002F\u002F局部变量\n",[45,13002,13003,13005],{"class":47,"line":1346},[45,13004,4240],{"class":51},[45,13006,1584],{"class":55},[45,13008,13009],{"class":47,"line":1352},[45,13010,1716],{"class":55},[45,13012,13013],{"class":47,"line":1366},[45,13014,2550],{"emptyLinePlaceholder":207},[45,13016,13017],{"class":47,"line":1372},[45,13018,13019],{"class":337},"\u002F\u002F返回静态变量引用\n",[45,13021,13022,13024,13026],{"class":47,"line":1463},[45,13023,12715],{"class":51},[45,13025,5807],{"class":69},[45,13027,11002],{"class":55},[45,13029,13030,13032,13034,13036,13038,13040,13042],{"class":47,"line":1469},[45,13031,11169],{"class":51},[45,13033,2532],{"class":51},[45,13035,11018],{"class":55},[45,13037,59],{"class":51},[45,13039,9100],{"class":79},[45,13041,334],{"class":55},[45,13043,13044],{"class":337},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[45,13046,13047,13049],{"class":47,"line":1481},[45,13048,4240],{"class":51},[45,13050,1584],{"class":55},[45,13052,13053],{"class":47,"line":1763},[45,13054,1716],{"class":55},[45,13056,13057],{"class":47,"line":1768},[45,13058,2550],{"emptyLinePlaceholder":207},[45,13060,13061,13063,13065],{"class":47,"line":1774},[45,13062,285],{"class":51},[45,13064,2123],{"class":69},[45,13066,11002],{"class":55},[45,13068,13069],{"class":47,"line":1779},[45,13070,2550],{"emptyLinePlaceholder":207},[45,13072,13073],{"class":47,"line":1793},[45,13074,13075],{"class":337},"    \u002F\u002F不能返回局部变量的引用\n",[45,13077,13078,13081,13084,13086,13088],{"class":47,"line":1798},[45,13079,13080],{"class":51},"    int&",[45,13082,13083],{"class":55}," ref ",[45,13085,59],{"class":51},[45,13087,5738],{"class":69},[45,13089,5786],{"class":55},[45,13091,13092,13094,13096,13099,13101,13103,13105,13107],{"class":47,"line":1804},[45,13093,6679],{"class":55},[45,13095,1320],{"class":51},[45,13097,13098],{"class":62}," \"ref = \"",[45,13100,1596],{"class":51},[45,13102,13083],{"class":55},[45,13104,1320],{"class":51},[45,13106,11618],{"class":55},[45,13108,13109],{"class":337},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[45,13111,13112,13114,13116,13118,13120,13122,13124,13126],{"class":47,"line":1825},[45,13113,6679],{"class":55},[45,13115,1320],{"class":51},[45,13117,13098],{"class":62},[45,13119,1596],{"class":51},[45,13121,13083],{"class":55},[45,13123,1320],{"class":51},[45,13125,11618],{"class":55},[45,13127,13128],{"class":337},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[45,13130,13131],{"class":47,"line":1830},[45,13132,2550],{"emptyLinePlaceholder":207},[45,13134,13135],{"class":47,"line":1844},[45,13136,13137],{"class":337},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[45,13139,13140,13142,13145,13147,13149],{"class":47,"line":1849},[45,13141,13080],{"class":51},[45,13143,13144],{"class":55}," ref2 ",[45,13146,59],{"class":51},[45,13148,5807],{"class":69},[45,13150,5786],{"class":55},[45,13152,13153,13155,13157,13160,13162,13164,13166,13168],{"class":47,"line":1878},[45,13154,6679],{"class":55},[45,13156,1320],{"class":51},[45,13158,13159],{"class":62}," \"ref2 = \"",[45,13161,1596],{"class":51},[45,13163,13144],{"class":55},[45,13165,1320],{"class":51},[45,13167,11618],{"class":55},[45,13169,13170],{"class":337}," \u002F\u002F20\n",[45,13172,13173,13175,13177,13179,13181,13183,13185,13187],{"class":47,"line":1883},[45,13174,6679],{"class":55},[45,13176,1320],{"class":51},[45,13178,13159],{"class":62},[45,13180,1596],{"class":51},[45,13182,13144],{"class":55},[45,13184,1320],{"class":51},[45,13186,11618],{"class":55},[45,13188,13170],{"class":337},[45,13190,13191],{"class":47,"line":1900},[45,13192,2550],{"emptyLinePlaceholder":207},[45,13194,13195,13197,13200,13202,13204,13206],{"class":47,"line":1905},[45,13196,5852],{"class":69},[45,13198,13199],{"class":55},"() ",[45,13201,59],{"class":51},[45,13203,3149],{"class":79},[45,13205,334],{"class":55},[45,13207,13208],{"class":337},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[45,13210,13211],{"class":47,"line":1910},[45,13212,2550],{"emptyLinePlaceholder":207},[45,13214,13215,13217,13219,13221,13223,13225,13227,13229],{"class":47,"line":1915},[45,13216,6679],{"class":55},[45,13218,1320],{"class":51},[45,13220,13159],{"class":62},[45,13222,1596],{"class":51},[45,13224,13144],{"class":55},[45,13226,1320],{"class":51},[45,13228,11618],{"class":55},[45,13230,13231],{"class":337}," \u002F\u002F1000\n",[45,13233,13234,13236,13238,13240,13242,13244,13246,13248],{"class":47,"line":1929},[45,13235,6679],{"class":55},[45,13237,1320],{"class":51},[45,13239,13159],{"class":62},[45,13241,1596],{"class":51},[45,13243,13144],{"class":55},[45,13245,1320],{"class":51},[45,13247,11618],{"class":55},[45,13249,13231],{"class":337},[45,13251,13252],{"class":47,"line":1934},[45,13253,2550],{"emptyLinePlaceholder":207},[45,13255,13256,13258,13260,13262],{"class":47,"line":2727},[45,13257,2453],{"class":69},[45,13259,282],{"class":55},[45,13261,2458],{"class":62},[45,13263,2869],{"class":55},[45,13265,13266],{"class":47,"line":2741},[45,13267,2550],{"emptyLinePlaceholder":207},[45,13269,13270,13272,13274],{"class":47,"line":2749},[45,13271,4240],{"class":51},[45,13273,4243],{"class":79},[45,13275,1442],{"class":55},[45,13277,13278],{"class":47,"line":2754},[45,13279,1716],{"class":55},[15,13281,13283],{"id":13282},"_65引用的本质","6.5引用的本质",[20,13285,13286,13287],{},"本质：",[427,13288,13289],{},"引用的本质在c++内部实现是一个指针常量.",[36,13291,13293],{"className":270,"code":13292,"language":272,"meta":25,"style":25},"\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",[42,13294,13295,13300,13316,13330,13334,13343,13355,13360,13365,13376,13389,13393,13409,13426,13430,13438,13446],{"__ignoreMap":25},[45,13296,13297],{"class":47,"line":48},[45,13298,13299],{"class":337},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[45,13301,13302,13304,13306,13308,13310,13313],{"class":47,"line":66},[45,13303,5514],{"class":51},[45,13305,11534],{"class":69},[45,13307,282],{"class":55},[45,13309,12715],{"class":51},[45,13311,13312],{"class":5366}," ref",[45,13314,13315],{"class":55},"){\n",[45,13317,13318,13321,13323,13325,13327],{"class":47,"line":1331},[45,13319,13320],{"class":55},"    ref ",[45,13322,59],{"class":51},[45,13324,5904],{"class":79},[45,13326,334],{"class":55},[45,13328,13329],{"class":337}," \u002F\u002F ref是引用，转换为*ref = 100\n",[45,13331,13332],{"class":47,"line":1346},[45,13333,1716],{"class":55},[45,13335,13336,13338,13340],{"class":47,"line":1352},[45,13337,285],{"class":51},[45,13339,2123],{"class":69},[45,13341,13342],{"class":55},"(){\n",[45,13344,13345,13347,13349,13351,13353],{"class":47,"line":1366},[45,13346,2135],{"class":51},[45,13348,11018],{"class":55},[45,13350,59],{"class":51},[45,13352,2188],{"class":79},[45,13354,1442],{"class":55},[45,13356,13357],{"class":47,"line":1372},[45,13358,13359],{"class":55},"    \n",[45,13361,13362],{"class":47,"line":1463},[45,13363,13364],{"class":337},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[45,13366,13367,13369,13371,13373],{"class":47,"line":1469},[45,13368,13080],{"class":51},[45,13370,13083],{"class":55},[45,13372,59],{"class":51},[45,13374,13375],{"class":55}," a; \n",[45,13377,13378,13380,13382,13384,13386],{"class":47,"line":1481},[45,13379,13320],{"class":55},[45,13381,59],{"class":51},[45,13383,9100],{"class":79},[45,13385,334],{"class":55},[45,13387,13388],{"class":337}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[45,13390,13391],{"class":47,"line":1763},[45,13392,13359],{"class":55},[45,13394,13395,13397,13399,13401,13403,13405,13407],{"class":47,"line":1768},[45,13396,6679],{"class":55},[45,13398,1320],{"class":51},[45,13400,12819],{"class":62},[45,13402,1596],{"class":51},[45,13404,11018],{"class":55},[45,13406,1320],{"class":51},[45,13408,8990],{"class":55},[45,13410,13411,13413,13415,13418,13420,13422,13424],{"class":47,"line":1774},[45,13412,6679],{"class":55},[45,13414,1320],{"class":51},[45,13416,13417],{"class":62}," \"ref:\"",[45,13419,1596],{"class":51},[45,13421,13083],{"class":55},[45,13423,1320],{"class":51},[45,13425,8990],{"class":55},[45,13427,13428],{"class":47,"line":1779},[45,13429,13359],{"class":55},[45,13431,13432,13435],{"class":47,"line":1793},[45,13433,13434],{"class":69},"    func",[45,13436,13437],{"class":55},"(a);\n",[45,13439,13440,13442,13444],{"class":47,"line":1798},[45,13441,4240],{"class":51},[45,13443,4243],{"class":79},[45,13445,1442],{"class":55},[45,13447,13448],{"class":47,"line":1804},[45,13449,1716],{"class":55},[20,13451,11481],{},[233,13453,13454,13457],{},[169,13455,13456],{},"引用的本质，就是一个指针常量",[169,13458,13459],{},"引用一旦初始化，就不可以发生改变",[15,13461,13463],{"id":13462},"_66常量引用","6.6常量引用",[20,13465,13466],{},"作用：常量引用主要用来修饰形参",[20,13468,13469,13470,13473],{},"在函数形参列表中，可以加",[427,13471,13472],{},"const修饰形参","，防止形参改变实参",[36,13475,13477],{"className":270,"code":13476,"language":272,"meta":25,"style":25},"\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",[42,13478,13479,13484,13489,13508,13513,13526,13530,13534,13542,13546,13551,13556,13570,13574,13582,13594,13598,13603,13615,13622,13626,13636,13640,13648],{"__ignoreMap":25},[45,13480,13481],{"class":47,"line":48},[45,13482,13483],{"class":337},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[45,13485,13486],{"class":47,"line":66},[45,13487,13488],{"class":337},"\u002F\u002F加上const就不能修改实参的\n",[45,13490,13491,13493,13496,13498,13500,13503,13506],{"class":47,"line":1331},[45,13492,5514],{"class":51},[45,13494,13495],{"class":69}," showValue",[45,13497,282],{"class":55},[45,13499,6942],{"class":51},[45,13501,13502],{"class":51}," int&",[45,13504,13505],{"class":5366}," v",[45,13507,12591],{"class":55},[45,13509,13510],{"class":47,"line":1346},[45,13511,13512],{"class":337},"    \u002F\u002Fv += 100;\n",[45,13514,13515,13517,13519,13522,13524],{"class":47,"line":1352},[45,13516,6679],{"class":55},[45,13518,1320],{"class":51},[45,13520,13521],{"class":55}," v ",[45,13523,1320],{"class":51},[45,13525,8990],{"class":55},[45,13527,13528],{"class":47,"line":1366},[45,13529,1716],{"class":55},[45,13531,13532],{"class":47,"line":1372},[45,13533,2550],{"emptyLinePlaceholder":207},[45,13535,13536,13538,13540],{"class":47,"line":1463},[45,13537,285],{"class":51},[45,13539,2123],{"class":69},[45,13541,11002],{"class":55},[45,13543,13544],{"class":47,"line":1469},[45,13545,2550],{"emptyLinePlaceholder":207},[45,13547,13548],{"class":47,"line":1481},[45,13549,13550],{"class":337},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[45,13552,13553],{"class":47,"line":1763},[45,13554,13555],{"class":337},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[45,13557,13558,13560,13562,13564,13566,13568],{"class":47,"line":1768},[45,13559,11370],{"class":51},[45,13561,13502],{"class":51},[45,13563,13083],{"class":55},[45,13565,59],{"class":51},[45,13567,2188],{"class":79},[45,13569,1442],{"class":55},[45,13571,13572],{"class":47,"line":1774},[45,13573,2550],{"emptyLinePlaceholder":207},[45,13575,13576,13579],{"class":47,"line":1779},[45,13577,13578],{"class":337},"    \u002F\u002Fref = 100;",[45,13580,13581],{"class":337},"  \u002F\u002F加入const后不可以修改变量\n",[45,13583,13584,13586,13588,13590,13592],{"class":47,"line":1793},[45,13585,6679],{"class":55},[45,13587,1320],{"class":51},[45,13589,13083],{"class":55},[45,13591,1320],{"class":51},[45,13593,8990],{"class":55},[45,13595,13596],{"class":47,"line":1798},[45,13597,2550],{"emptyLinePlaceholder":207},[45,13599,13600],{"class":47,"line":1804},[45,13601,13602],{"class":337},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[45,13604,13605,13607,13609,13611,13613],{"class":47,"line":1825},[45,13606,2135],{"class":51},[45,13608,11018],{"class":55},[45,13610,59],{"class":51},[45,13612,2188],{"class":79},[45,13614,1442],{"class":55},[45,13616,13617,13620],{"class":47,"line":1830},[45,13618,13619],{"class":69},"    showValue",[45,13621,13437],{"class":55},[45,13623,13624],{"class":47,"line":1844},[45,13625,2550],{"emptyLinePlaceholder":207},[45,13627,13628,13630,13632,13634],{"class":47,"line":1849},[45,13629,2453],{"class":69},[45,13631,282],{"class":55},[45,13633,2458],{"class":62},[45,13635,2869],{"class":55},[45,13637,13638],{"class":47,"line":1878},[45,13639,2550],{"emptyLinePlaceholder":207},[45,13641,13642,13644,13646],{"class":47,"line":1883},[45,13643,4240],{"class":51},[45,13645,4243],{"class":79},[45,13647,1442],{"class":55},[45,13649,13650],{"class":47,"line":1900},[45,13651,1716],{"class":55},[196,13653,13654],{},"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":25,"searchDepth":66,"depth":66,"links":13656},[13657,13658,13659,13660,13661,13662],{"id":12189,"depth":66,"text":12190},{"id":12368,"depth":66,"text":12369},{"id":12551,"depth":66,"text":12552},{"id":12955,"depth":66,"text":12956},{"id":13282,"depth":66,"text":13283},{"id":13462,"depth":66,"text":13463},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12181,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13669,"title":13670,"body":13671,"description":25,"extension":205,"meta":14752,"navigation":207,"path":14753,"seo":14754,"stem":14755,"__hash__":14756},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13672,"toc":14744},[13673,13676,13680,13683,13688,13920,13922,13933,13937,13940,13948,14052,14055,14059,14062,14066,14069,14074,14096,14102,14429,14432,14436,14444,14741],[10,13674,13670],{"id":13675},"_7函数高级部分",[15,13677,13679],{"id":13678},"_71函数默认参数","7.1函数默认参数",[20,13681,13682],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[20,13684,5331,13685],{},[42,13686,13687],{}," 返回值类型  函数名 （参数= 默认值）{}",[36,13689,13691],{"className":270,"code":13690,"language":272,"meta":25,"style":25},"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",[42,13692,13693,13728,13743,13747,13751,13756,13761,13790,13810,13820,13824,13828,13836,13840,13868,13890,13894,13904,13908,13916],{"__ignoreMap":25},[45,13694,13695,13697,13699,13701,13703,13705,13707,13709,13711,13714,13716,13718,13720,13722,13724,13726],{"class":47,"line":48},[45,13696,285],{"class":51},[45,13698,11534],{"class":69},[45,13700,282],{"class":55},[45,13702,285],{"class":51},[45,13704,1550],{"class":5366},[45,13706,12584],{"class":55},[45,13708,285],{"class":51},[45,13710,2983],{"class":5366},[45,13712,13713],{"class":51}," =",[45,13715,2188],{"class":79},[45,13717,12584],{"class":55},[45,13719,285],{"class":51},[45,13721,2999],{"class":5366},[45,13723,13713],{"class":51},[45,13725,2188],{"class":79},[45,13727,12591],{"class":55},[45,13729,13730,13732,13734,13736,13738,13740],{"class":47,"line":66},[45,13731,4240],{"class":51},[45,13733,11018],{"class":55},[45,13735,758],{"class":51},[45,13737,11031],{"class":55},[45,13739,758],{"class":51},[45,13741,13742],{"class":55}," c;\n",[45,13744,13745],{"class":47,"line":1331},[45,13746,1716],{"class":55},[45,13748,13749],{"class":47,"line":1346},[45,13750,2550],{"emptyLinePlaceholder":207},[45,13752,13753],{"class":47,"line":1352},[45,13754,13755],{"class":337},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[45,13757,13758],{"class":47,"line":1366},[45,13759,13760],{"class":337},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[45,13762,13763,13765,13768,13770,13772,13774,13776,13778,13780,13782,13784,13786,13788],{"class":47,"line":1372},[45,13764,285],{"class":51},[45,13766,13767],{"class":69}," func2",[45,13769,282],{"class":55},[45,13771,285],{"class":51},[45,13773,1550],{"class":5366},[45,13775,13713],{"class":51},[45,13777,2188],{"class":79},[45,13779,12584],{"class":55},[45,13781,285],{"class":51},[45,13783,2983],{"class":5366},[45,13785,13713],{"class":51},[45,13787,2188],{"class":79},[45,13789,2869],{"class":55},[45,13791,13792,13794,13796,13798,13800,13802,13804,13806,13808],{"class":47,"line":1463},[45,13793,285],{"class":51},[45,13795,13767],{"class":69},[45,13797,282],{"class":55},[45,13799,285],{"class":51},[45,13801,1550],{"class":5366},[45,13803,12584],{"class":55},[45,13805,285],{"class":51},[45,13807,2983],{"class":5366},[45,13809,12591],{"class":55},[45,13811,13812,13814,13816,13818],{"class":47,"line":1469},[45,13813,4240],{"class":51},[45,13815,11018],{"class":55},[45,13817,758],{"class":51},[45,13819,12612],{"class":55},[45,13821,13822],{"class":47,"line":1481},[45,13823,1716],{"class":55},[45,13825,13826],{"class":47,"line":1763},[45,13827,2550],{"emptyLinePlaceholder":207},[45,13829,13830,13832,13834],{"class":47,"line":1768},[45,13831,285],{"class":51},[45,13833,2123],{"class":69},[45,13835,11002],{"class":55},[45,13837,13838],{"class":47,"line":1774},[45,13839,2550],{"emptyLinePlaceholder":207},[45,13841,13842,13844,13846,13849,13851,13853,13855,13857,13859,13861,13864,13866],{"class":47,"line":1779},[45,13843,6679],{"class":55},[45,13845,1320],{"class":51},[45,13847,13848],{"class":62}," \"ret = \"",[45,13850,1596],{"class":51},[45,13852,11534],{"class":69},[45,13854,282],{"class":55},[45,13856,977],{"class":79},[45,13858,12584],{"class":55},[45,13860,977],{"class":79},[45,13862,13863],{"class":55},") ",[45,13865,1320],{"class":51},[45,13867,8990],{"class":55},[45,13869,13870,13872,13874,13876,13878,13880,13882,13884,13886,13888],{"class":47,"line":1793},[45,13871,6679],{"class":55},[45,13873,1320],{"class":51},[45,13875,13848],{"class":62},[45,13877,1596],{"class":51},[45,13879,11534],{"class":69},[45,13881,282],{"class":55},[45,13883,588],{"class":79},[45,13885,13863],{"class":55},[45,13887,1320],{"class":51},[45,13889,8990],{"class":55},[45,13891,13892],{"class":47,"line":1798},[45,13893,2550],{"emptyLinePlaceholder":207},[45,13895,13896,13898,13900,13902],{"class":47,"line":1804},[45,13897,2453],{"class":69},[45,13899,282],{"class":55},[45,13901,2458],{"class":62},[45,13903,2869],{"class":55},[45,13905,13906],{"class":47,"line":1825},[45,13907,2550],{"emptyLinePlaceholder":207},[45,13909,13910,13912,13914],{"class":47,"line":1830},[45,13911,4240],{"class":51},[45,13913,4243],{"class":79},[45,13915,1442],{"class":55},[45,13917,13918],{"class":47,"line":1844},[45,13919,1716],{"class":55},[20,13921,11481],{},[233,13923,13924,13927,13930],{},[169,13925,13926],{},"我传就用我；没传就用你",[169,13928,13929],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[169,13931,13932],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[15,13934,13936],{"id":13935},"_72函数的占位参数","7.2函数的占位参数",[20,13938,13939],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[20,13941,13942,13944,13945],{},[427,13943,5331],{}," ",[42,13946,13947],{},"返回值类型 函数名 (数据类型){}",[36,13949,13951],{"className":270,"code":13950,"language":272,"meta":25,"style":25},"\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",[42,13952,13953,13958,13976,13989,13993,14001,14005,14022,14026,14036,14040,14048],{"__ignoreMap":25},[45,13954,13955],{"class":47,"line":48},[45,13956,13957],{"class":337},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[45,13959,13960,13962,13964,13966,13968,13970,13972,13974],{"class":47,"line":66},[45,13961,5514],{"class":51},[45,13963,11534],{"class":69},[45,13965,282],{"class":55},[45,13967,285],{"class":51},[45,13969,1550],{"class":5366},[45,13971,12584],{"class":55},[45,13973,285],{"class":51},[45,13975,12591],{"class":55},[45,13977,13978,13980,13982,13985,13987],{"class":47,"line":1331},[45,13979,6679],{"class":55},[45,13981,1320],{"class":51},[45,13983,13984],{"class":62}," \"this is func\"",[45,13986,1596],{"class":51},[45,13988,8990],{"class":55},[45,13990,13991],{"class":47,"line":1346},[45,13992,1716],{"class":55},[45,13994,13995,13997,13999],{"class":47,"line":1352},[45,13996,285],{"class":51},[45,13998,2123],{"class":69},[45,14000,11002],{"class":55},[45,14002,14003],{"class":47,"line":1366},[45,14004,2550],{"emptyLinePlaceholder":207},[45,14006,14007,14009,14011,14013,14015,14017,14019],{"class":47,"line":1372},[45,14008,13434],{"class":69},[45,14010,282],{"class":55},[45,14012,723],{"class":79},[45,14014,655],{"class":55},[45,14016,723],{"class":79},[45,14018,6116],{"class":55},[45,14020,14021],{"class":337}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[45,14023,14024],{"class":47,"line":1463},[45,14025,2550],{"emptyLinePlaceholder":207},[45,14027,14028,14030,14032,14034],{"class":47,"line":1469},[45,14029,2453],{"class":69},[45,14031,282],{"class":55},[45,14033,2458],{"class":62},[45,14035,2869],{"class":55},[45,14037,14038],{"class":47,"line":1481},[45,14039,2550],{"emptyLinePlaceholder":207},[45,14041,14042,14044,14046],{"class":47,"line":1763},[45,14043,4240],{"class":51},[45,14045,4243],{"class":79},[45,14047,1442],{"class":55},[45,14049,14050],{"class":47,"line":1768},[45,14051,1716],{"class":55},[20,14053,14054],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[15,14056,14058],{"id":14057},"_73函数重载","7.3函数重载",[20,14060,14061],{},"意思是函数名是可以相同的",[249,14063,14065],{"id":14064},"_731基本语法","7.3.1基本语法",[20,14067,14068],{},"作用：函数名可以相同，提高复用性",[20,14070,14071],{},[427,14072,14073],{},"函数重载满足条件：",[166,14075,14076,14079,14082],{},[169,14077,14078],{},"同一个作用域下",[169,14080,14081],{},"函数名称相同",[169,14083,14084,14085,14088,14089,14092,14093],{},"函数参数",[427,14086,14087],{},"类型不同","  或者 ",[427,14090,14091],{},"个数不同"," 或者 ",[427,14094,14095],{},"顺序不同",[20,14097,14098,14101],{},[427,14099,14100],{},"注意:","  函数的返回值不可以作为函数重载的条件",[36,14103,14105],{"className":10090,"code":14104,"language":10092,"meta":25,"style":25},"\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",[42,14106,14107,14112,14120,14124,14137,14141,14155,14159,14172,14176,14191,14195,14208,14212,14233,14237,14250,14254,14274,14278,14291,14295,14299,14304,14309,14314,14319,14324,14328,14332,14340,14344,14350,14360,14370,14384,14399,14403,14413,14417,14425],{"__ignoreMap":25},[45,14108,14109],{"class":47,"line":48},[45,14110,14111],{"class":337},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[45,14113,14114,14116,14118],{"class":47,"line":66},[45,14115,5514],{"class":51},[45,14117,11534],{"class":69},[45,14119,2126],{"class":55},[45,14121,14122],{"class":47,"line":1331},[45,14123,1697],{"class":55},[45,14125,14126,14128,14130,14133,14135],{"class":47,"line":1346},[45,14127,6679],{"class":55},[45,14129,1320],{"class":51},[45,14131,14132],{"class":62}," \"func 的调用！\"",[45,14134,1596],{"class":51},[45,14136,8990],{"class":55},[45,14138,14139],{"class":47,"line":1352},[45,14140,1716],{"class":55},[45,14142,14143,14145,14147,14149,14151,14153],{"class":47,"line":1366},[45,14144,5514],{"class":51},[45,14146,11534],{"class":69},[45,14148,282],{"class":55},[45,14150,285],{"class":51},[45,14152,1550],{"class":5366},[45,14154,139],{"class":55},[45,14156,14157],{"class":47,"line":1372},[45,14158,1697],{"class":55},[45,14160,14161,14163,14165,14168,14170],{"class":47,"line":1463},[45,14162,6679],{"class":55},[45,14164,1320],{"class":51},[45,14166,14167],{"class":62}," \"func (int a) 的调用！\"",[45,14169,1596],{"class":51},[45,14171,8990],{"class":55},[45,14173,14174],{"class":47,"line":1469},[45,14175,1716],{"class":55},[45,14177,14178,14180,14182,14184,14187,14189],{"class":47,"line":1481},[45,14179,5514],{"class":51},[45,14181,11534],{"class":69},[45,14183,282],{"class":55},[45,14185,14186],{"class":51},"double",[45,14188,1550],{"class":5366},[45,14190,139],{"class":55},[45,14192,14193],{"class":47,"line":1763},[45,14194,1697],{"class":55},[45,14196,14197,14199,14201,14204,14206],{"class":47,"line":1768},[45,14198,6679],{"class":55},[45,14200,1320],{"class":51},[45,14202,14203],{"class":62}," \"func (double a)的调用！\"",[45,14205,1596],{"class":51},[45,14207,8990],{"class":55},[45,14209,14210],{"class":47,"line":1774},[45,14211,1716],{"class":55},[45,14213,14214,14216,14218,14220,14222,14224,14227,14229,14231],{"class":47,"line":1779},[45,14215,5514],{"class":51},[45,14217,11534],{"class":69},[45,14219,282],{"class":55},[45,14221,285],{"class":51},[45,14223,1550],{"class":5366},[45,14225,14226],{"class":55}," ,",[45,14228,14186],{"class":51},[45,14230,2983],{"class":5366},[45,14232,139],{"class":55},[45,14234,14235],{"class":47,"line":1793},[45,14236,1697],{"class":55},[45,14238,14239,14241,14243,14246,14248],{"class":47,"line":1798},[45,14240,6679],{"class":55},[45,14242,1320],{"class":51},[45,14244,14245],{"class":62}," \"func (int a ,double b) 的调用！\"",[45,14247,1596],{"class":51},[45,14249,8990],{"class":55},[45,14251,14252],{"class":47,"line":1804},[45,14253,1716],{"class":55},[45,14255,14256,14258,14260,14262,14264,14266,14268,14270,14272],{"class":47,"line":1825},[45,14257,5514],{"class":51},[45,14259,11534],{"class":69},[45,14261,282],{"class":55},[45,14263,14186],{"class":51},[45,14265,1550],{"class":5366},[45,14267,14226],{"class":55},[45,14269,285],{"class":51},[45,14271,2983],{"class":5366},[45,14273,139],{"class":55},[45,14275,14276],{"class":47,"line":1830},[45,14277,1697],{"class":55},[45,14279,14280,14282,14284,14287,14289],{"class":47,"line":1844},[45,14281,6679],{"class":55},[45,14283,1320],{"class":51},[45,14285,14286],{"class":62}," \"func (double a ,int b)的调用！\"",[45,14288,1596],{"class":51},[45,14290,8990],{"class":55},[45,14292,14293],{"class":47,"line":1849},[45,14294,1716],{"class":55},[45,14296,14297],{"class":47,"line":1878},[45,14298,2550],{"emptyLinePlaceholder":207},[45,14300,14301],{"class":47,"line":1883},[45,14302,14303],{"class":337},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[45,14305,14306],{"class":47,"line":1900},[45,14307,14308],{"class":337},"\u002F\u002Fint func(double a, int b)\n",[45,14310,14311],{"class":47,"line":1905},[45,14312,14313],{"class":337},"\u002F\u002F{\n",[45,14315,14316],{"class":47,"line":1910},[45,14317,14318],{"class":337},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[45,14320,14321],{"class":47,"line":1915},[45,14322,14323],{"class":337},"\u002F\u002F}\n",[45,14325,14326],{"class":47,"line":1929},[45,14327,2550],{"emptyLinePlaceholder":207},[45,14329,14330],{"class":47,"line":1934},[45,14331,2550],{"emptyLinePlaceholder":207},[45,14333,14334,14336,14338],{"class":47,"line":2727},[45,14335,285],{"class":51},[45,14337,2123],{"class":69},[45,14339,11002],{"class":55},[45,14341,14342],{"class":47,"line":2741},[45,14343,2550],{"emptyLinePlaceholder":207},[45,14345,14346,14348],{"class":47,"line":2749},[45,14347,13434],{"class":69},[45,14349,5786],{"class":55},[45,14351,14352,14354,14356,14358],{"class":47,"line":2754},[45,14353,13434],{"class":69},[45,14355,282],{"class":55},[45,14357,723],{"class":79},[45,14359,2869],{"class":55},[45,14361,14362,14364,14366,14368],{"class":47,"line":2760},[45,14363,13434],{"class":69},[45,14365,282],{"class":55},[45,14367,328],{"class":79},[45,14369,2869],{"class":55},[45,14371,14372,14374,14376,14378,14380,14382],{"class":47,"line":2766},[45,14373,13434],{"class":69},[45,14375,282],{"class":55},[45,14377,723],{"class":79},[45,14379,655],{"class":55},[45,14381,328],{"class":79},[45,14383,2869],{"class":55},[45,14385,14386,14388,14390,14392,14395,14397],{"class":47,"line":2771},[45,14387,13434],{"class":69},[45,14389,282],{"class":55},[45,14391,328],{"class":79},[45,14393,14394],{"class":55}," , ",[45,14396,723],{"class":79},[45,14398,2869],{"class":55},[45,14400,14401],{"class":47,"line":8098},[45,14402,13359],{"class":55},[45,14404,14405,14407,14409,14411],{"class":47,"line":8122},[45,14406,2453],{"class":69},[45,14408,282],{"class":55},[45,14410,2458],{"class":62},[45,14412,2869],{"class":55},[45,14414,14415],{"class":47,"line":8127},[45,14416,2550],{"emptyLinePlaceholder":207},[45,14418,14419,14421,14423],{"class":47,"line":8133},[45,14420,4240],{"class":51},[45,14422,4243],{"class":79},[45,14424,1442],{"class":55},[45,14426,14427],{"class":47,"line":8160},[45,14428,1716],{"class":55},[20,14430,14431],{},"重点：函数返回值不可以作为函数重载条件！",[249,14433,14435],{"id":14434},"_732注意事项","7.3.2注意事项",[166,14437,14438,14441],{},[169,14439,14440],{},"引用作为重载条件!!!",[169,14442,14443],{},"函数重载碰到函数默认参数",[36,14445,14447],{"className":270,"code":14446,"language":272,"meta":25,"style":25},"\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",[42,14448,14449,14454,14459,14463,14479,14483,14496,14500,14504,14522,14526,14539,14543,14547,14551,14556,14560,14584,14588,14601,14605,14609,14623,14627,14640,14644,14648,14656,14660,14672,14682,14695,14699,14703,14711,14715,14725,14729,14737],{"__ignoreMap":25},[45,14450,14451],{"class":47,"line":48},[45,14452,14453],{"class":337},"\u002F\u002F函数重载注意事项\n",[45,14455,14456],{"class":47,"line":66},[45,14457,14458],{"class":337},"\u002F\u002F1、引用作为重载条件\n",[45,14460,14461],{"class":47,"line":1331},[45,14462,2550],{"emptyLinePlaceholder":207},[45,14464,14465,14467,14469,14471,14473,14475,14477],{"class":47,"line":1346},[45,14466,5514],{"class":51},[45,14468,11534],{"class":69},[45,14470,282],{"class":55},[45,14472,285],{"class":51},[45,14474,10733],{"class":51},[45,14476,516],{"class":5366},[45,14478,139],{"class":55},[45,14480,14481],{"class":47,"line":1352},[45,14482,1697],{"class":55},[45,14484,14485,14487,14489,14492,14494],{"class":47,"line":1366},[45,14486,6679],{"class":55},[45,14488,1320],{"class":51},[45,14490,14491],{"class":62}," \"func (int &a) 调用 \"",[45,14493,1596],{"class":51},[45,14495,8990],{"class":55},[45,14497,14498],{"class":47,"line":1372},[45,14499,1716],{"class":55},[45,14501,14502],{"class":47,"line":1463},[45,14503,2550],{"emptyLinePlaceholder":207},[45,14505,14506,14508,14510,14512,14514,14516,14518,14520],{"class":47,"line":1469},[45,14507,5514],{"class":51},[45,14509,11534],{"class":69},[45,14511,282],{"class":55},[45,14513,6942],{"class":51},[45,14515,2532],{"class":51},[45,14517,10733],{"class":51},[45,14519,516],{"class":5366},[45,14521,139],{"class":55},[45,14523,14524],{"class":47,"line":1481},[45,14525,1697],{"class":55},[45,14527,14528,14530,14532,14535,14537],{"class":47,"line":1763},[45,14529,6679],{"class":55},[45,14531,1320],{"class":51},[45,14533,14534],{"class":62}," \"func (const int &a) 调用 \"",[45,14536,1596],{"class":51},[45,14538,8990],{"class":55},[45,14540,14541],{"class":47,"line":1768},[45,14542,1716],{"class":55},[45,14544,14545],{"class":47,"line":1774},[45,14546,2550],{"emptyLinePlaceholder":207},[45,14548,14549],{"class":47,"line":1779},[45,14550,2550],{"emptyLinePlaceholder":207},[45,14552,14553],{"class":47,"line":1793},[45,14554,14555],{"class":337},"\u002F\u002F2、函数重载碰到函数默认参数\n",[45,14557,14558],{"class":47,"line":1798},[45,14559,2550],{"emptyLinePlaceholder":207},[45,14561,14562,14564,14566,14568,14570,14572,14574,14576,14578,14580,14582],{"class":47,"line":1804},[45,14563,5514],{"class":51},[45,14565,13767],{"class":69},[45,14567,282],{"class":55},[45,14569,285],{"class":51},[45,14571,1550],{"class":5366},[45,14573,12584],{"class":55},[45,14575,285],{"class":51},[45,14577,2983],{"class":5366},[45,14579,13713],{"class":51},[45,14581,2188],{"class":79},[45,14583,139],{"class":55},[45,14585,14586],{"class":47,"line":1825},[45,14587,1697],{"class":55},[45,14589,14590,14592,14594,14597,14599],{"class":47,"line":1830},[45,14591,6679],{"class":55},[45,14593,1320],{"class":51},[45,14595,14596],{"class":62}," \"func2(int a, int b = 10) 调用\"",[45,14598,1596],{"class":51},[45,14600,8990],{"class":55},[45,14602,14603],{"class":47,"line":1844},[45,14604,1716],{"class":55},[45,14606,14607],{"class":47,"line":1849},[45,14608,2550],{"emptyLinePlaceholder":207},[45,14610,14611,14613,14615,14617,14619,14621],{"class":47,"line":1878},[45,14612,5514],{"class":51},[45,14614,13767],{"class":69},[45,14616,282],{"class":55},[45,14618,285],{"class":51},[45,14620,1550],{"class":5366},[45,14622,139],{"class":55},[45,14624,14625],{"class":47,"line":1883},[45,14626,1697],{"class":55},[45,14628,14629,14631,14633,14636,14638],{"class":47,"line":1900},[45,14630,6679],{"class":55},[45,14632,1320],{"class":51},[45,14634,14635],{"class":62}," \"func2(int a) 调用\"",[45,14637,1596],{"class":51},[45,14639,8990],{"class":55},[45,14641,14642],{"class":47,"line":1905},[45,14643,1716],{"class":55},[45,14645,14646],{"class":47,"line":1910},[45,14647,2550],{"emptyLinePlaceholder":207},[45,14649,14650,14652,14654],{"class":47,"line":1915},[45,14651,285],{"class":51},[45,14653,2123],{"class":69},[45,14655,11002],{"class":55},[45,14657,14658],{"class":47,"line":1929},[45,14659,13359],{"class":55},[45,14661,14662,14664,14666,14668,14670],{"class":47,"line":1934},[45,14663,2135],{"class":51},[45,14665,11018],{"class":55},[45,14667,59],{"class":51},[45,14669,2188],{"class":79},[45,14671,1442],{"class":55},[45,14673,14674,14676,14679],{"class":47,"line":2727},[45,14675,13434],{"class":69},[45,14677,14678],{"class":55},"(a);",[45,14680,14681],{"class":337}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[45,14683,14684,14686,14688,14690,14692],{"class":47,"line":2741},[45,14685,13434],{"class":69},[45,14687,282],{"class":55},[45,14689,723],{"class":79},[45,14691,6116],{"class":55},[45,14693,14694],{"class":337},"\u002F\u002F调用有const   10是个常量\n",[45,14696,14697],{"class":47,"line":2749},[45,14698,2550],{"emptyLinePlaceholder":207},[45,14700,14701],{"class":47,"line":2754},[45,14702,2550],{"emptyLinePlaceholder":207},[45,14704,14705,14708],{"class":47,"line":2760},[45,14706,14707],{"class":337},"    \u002F\u002Ffunc2(10);",[45,14709,14710],{"class":337}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[45,14712,14713],{"class":47,"line":2766},[45,14714,2550],{"emptyLinePlaceholder":207},[45,14716,14717,14719,14721,14723],{"class":47,"line":2771},[45,14718,2453],{"class":69},[45,14720,282],{"class":55},[45,14722,2458],{"class":62},[45,14724,2869],{"class":55},[45,14726,14727],{"class":47,"line":8098},[45,14728,2550],{"emptyLinePlaceholder":207},[45,14730,14731,14733,14735],{"class":47,"line":8122},[45,14732,4240],{"class":51},[45,14734,4243],{"class":79},[45,14736,1442],{"class":55},[45,14738,14739],{"class":47,"line":8127},[45,14740,1716],{"class":55},[196,14742,14743],{},"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":25,"searchDepth":66,"depth":66,"links":14745},[14746,14747,14748],{"id":13678,"depth":66,"text":13679},{"id":13935,"depth":66,"text":13936},{"id":14057,"depth":66,"text":14058,"children":14749},[14750,14751],{"id":14064,"depth":1331,"text":14065},{"id":14434,"depth":1331,"text":14435},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13670,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14758,"title":14759,"body":14760,"description":23514,"extension":205,"meta":23515,"navigation":207,"path":23516,"seo":23517,"stem":23518,"__hash__":23519},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14761,"toc":23495},[14762,14765,14771,14778,14783,14786,14789,14792,14796,14800,14803,14806,14814,14819,14822,14829,14834,14993,14996,15249,15252,15255,15258,15263,15266,15269,15280,15285,15521,15525,15535,15538,15546,15693,15697,15700,15703,15707,16152,16156,16164,16172,17084,17091,17096,17724,17727,17730,17733,17852,17855,17942,17945,18071,18074,18168,18171,18524,18528,18536,18540,18547,18550,18553,18564,18570,18575,18587,18595,18615,18623,18640,18826,18829,18833,18836,18839,18842,18845,18848,18851,18854,19314,19320,19324,19327,19338,19925,19928,20417,20421,20424,20427,20430,20433,20436,20444,20840,20844,20847,20850,21297,21300,21303,21308,21311,21316,21319,21323,21326,21328,21334,21337,21643,21653,21694,21698,21701,21703,21736,21739,22046,22048,22063,22066,22089,22098,22104,22107,22111,22114,22117,22122,22133,22138,22146,22151,22281,22284,22287,22462,22467,22679,22683,22686,22800,22805,23044,23048,23052,23055,23058,23063,23168,23171,23174,23177,23181,23292,23295,23298,23303,23355,23358,23361,23366,23412,23415,23420,23488,23490,23493],[10,14763,14759],{"id":14764},"_8类和对象",[20,14766,14767,14768],{},"C++面向对象的三大特性为",[427,14769,14770],{},"封装、继承、多态",[20,14772,14773,14774,14777],{},"C++认为",[427,14775,14776],{},"万事万物都皆为对象","，对象上有其属性和行为",[20,14779,14780],{},[427,14781,14782],{},"例如：",[20,14784,14785],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[20,14787,14788],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[20,14790,14791],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[15,14793,14795],{"id":14794},"_81封装","8.1封装",[249,14797,14799],{"id":14798},"_811封装的意义","8.1.1封装的意义",[20,14801,14802],{},"封装是C++面向对象三大特性之一",[20,14804,14805],{},"封装的意义：",[166,14807,14808,14811],{},[169,14809,14810],{},"将属性和行为作为一个整体，表现生活中的事物",[169,14812,14813],{},"将属性和行为加以权限控制",[20,14815,14816],{},[427,14817,14818],{},"封装意义一：",[20,14820,14821],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[20,14823,14824,13944,14826],{},[427,14825,5331],{},[42,14827,14828],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[233,14830,14831],{},[169,14832,14833],{},"**示例1：**设计一个圆类，求圆的周长",[36,14835,14837],{"className":270,"code":14836,"language":272,"meta":25,"style":25},"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",[42,14838,14839,14847,14851,14856,14861,14866,14871,14878,14883,14893,14897,14915,14919,14923,14931,14935,14940,14945,14950,14955,14966,14989],{"__ignoreMap":25},[45,14840,14841,14844],{"class":47,"line":48},[45,14842,14843],{"class":51},"class",[45,14845,14846],{"class":69}," Circle\n",[45,14848,14849],{"class":47,"line":66},[45,14850,1697],{"class":55},[45,14852,14853],{"class":47,"line":1331},[45,14854,14855],{"class":337},"    \u002F\u002F访问权限\n",[45,14857,14858],{"class":47,"line":1346},[45,14859,14860],{"class":337},"    \u002F\u002F公共权限\n",[45,14862,14863],{"class":47,"line":1352},[45,14864,14865],{"class":51},"public:\n",[45,14867,14868],{"class":47,"line":1366},[45,14869,14870],{"class":337},"    \u002F\u002F属性\n",[45,14872,14873,14875],{"class":47,"line":1372},[45,14874,2135],{"class":51},[45,14876,14877],{"class":55}," m_r;\n",[45,14879,14880],{"class":47,"line":1463},[45,14881,14882],{"class":337},"    \u002F\u002F行为\n",[45,14884,14885,14888,14891],{"class":47,"line":1469},[45,14886,14887],{"class":51},"    double",[45,14889,14890],{"class":69}," calculateZC",[45,14892,2126],{"class":55},[45,14894,14895],{"class":47,"line":1481},[45,14896,2180],{"class":55},[45,14898,14899,14902,14905,14907,14910,14912],{"class":47,"line":1763},[45,14900,14901],{"class":51},"        return",[45,14903,14904],{"class":79}," 2",[45,14906,732],{"class":51},[45,14908,14909],{"class":55},"PI",[45,14911,732],{"class":51},[45,14913,14914],{"class":55},"m_r;\n",[45,14916,14917],{"class":47,"line":1768},[45,14918,2337],{"class":55},[45,14920,14921],{"class":47,"line":1774},[45,14922,4145],{"class":55},[45,14924,14925,14927,14929],{"class":47,"line":1779},[45,14926,285],{"class":51},[45,14928,2123],{"class":69},[45,14930,2126],{"class":55},[45,14932,14933],{"class":47,"line":1793},[45,14934,1697],{"class":55},[45,14936,14937],{"class":47,"line":1798},[45,14938,14939],{"class":337},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[45,14941,14942],{"class":47,"line":1804},[45,14943,14944],{"class":337},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[45,14946,14947],{"class":47,"line":1825},[45,14948,14949],{"class":55},"    Circle c1;\n",[45,14951,14952],{"class":47,"line":1830},[45,14953,14954],{"class":337},"    \u002F\u002F给圆对象 的属性进行赋值\n",[45,14956,14957,14960,14962,14964],{"class":47,"line":1844},[45,14958,14959],{"class":55},"    c1.m_r",[45,14961,59],{"class":51},[45,14963,723],{"class":79},[45,14965,1442],{"class":55},[45,14967,14968,14970,14972,14975,14977,14980,14983,14985,14987],{"class":47,"line":1849},[45,14969,1702],{"class":55},[45,14971,1320],{"class":51},[45,14973,14974],{"class":62},"\"圆的周长\"",[45,14976,1320],{"class":51},[45,14978,14979],{"class":55},"c1.",[45,14981,14982],{"class":69},"calculateZC",[45,14984,2577],{"class":55},[45,14986,1320],{"class":51},[45,14988,1343],{"class":55},[45,14990,14991],{"class":47,"line":1878},[45,14992,1716],{"class":55},[20,14994,14995],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[36,14997,14999],{"className":270,"code":14998,"language":272,"meta":25,"style":25},"#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",[42,15000,15001,15007,15017,15023,15029,15033,15037,15042,15049,15054,15072,15076,15086,15090,15095,15111,15115,15125,15129,15134,15142,15146,15178,15182,15186,15194,15198,15203,15208,15222,15236,15245],{"__ignoreMap":25},[45,15002,15003,15005],{"class":47,"line":48},[45,15004,2100],{"class":51},[45,15006,2103],{"class":62},[45,15008,15009,15011,15013,15015],{"class":47,"line":66},[45,15010,2108],{"class":51},[45,15012,2111],{"class":51},[45,15014,2114],{"class":69},[45,15016,1442],{"class":55},[45,15018,15019,15021],{"class":47,"line":1331},[45,15020,2100],{"class":51},[45,15022,7899],{"class":62},[45,15024,15025,15027],{"class":47,"line":1346},[45,15026,14843],{"class":51},[45,15028,7912],{"class":69},[45,15030,15031],{"class":47,"line":1352},[45,15032,1697],{"class":55},[45,15034,15035],{"class":47,"line":1366},[45,15036,14865],{"class":51},[45,15038,15039],{"class":47,"line":1372},[45,15040,15041],{"class":55},"    string m_name;\n",[45,15043,15044,15046],{"class":47,"line":1463},[45,15045,2135],{"class":51},[45,15047,15048],{"class":55}," m_id;\n",[45,15050,15051],{"class":47,"line":1469},[45,15052,15053],{"class":337},"    \u002F\u002F赋值姓名\n",[45,15055,15056,15059,15062,15064,15067,15070],{"class":47,"line":1481},[45,15057,15058],{"class":51},"    void",[45,15060,15061],{"class":69}," setName",[45,15063,282],{"class":55},[45,15065,15066],{"class":69},"string",[45,15068,15069],{"class":5366}," name",[45,15071,139],{"class":55},[45,15073,15074],{"class":47,"line":1763},[45,15075,2180],{"class":55},[45,15077,15078,15081,15083],{"class":47,"line":1768},[45,15079,15080],{"class":55},"        m_name",[45,15082,59],{"class":51},[45,15084,15085],{"class":55},"name;\n",[45,15087,15088],{"class":47,"line":1774},[45,15089,2337],{"class":55},[45,15091,15092],{"class":47,"line":1779},[45,15093,15094],{"class":337},"    \u002F\u002F赋值学号\n",[45,15096,15097,15099,15102,15104,15106,15109],{"class":47,"line":1793},[45,15098,15058],{"class":51},[45,15100,15101],{"class":69}," setId",[45,15103,282],{"class":55},[45,15105,285],{"class":51},[45,15107,15108],{"class":5366}," id",[45,15110,139],{"class":55},[45,15112,15113],{"class":47,"line":1798},[45,15114,2180],{"class":55},[45,15116,15117,15120,15122],{"class":47,"line":1804},[45,15118,15119],{"class":55},"        m_id",[45,15121,59],{"class":51},[45,15123,15124],{"class":55},"id;\n",[45,15126,15127],{"class":47,"line":1825},[45,15128,2337],{"class":55},[45,15130,15131],{"class":47,"line":1830},[45,15132,15133],{"class":337},"    \u002F\u002F打印学生信息\n",[45,15135,15136,15138,15140],{"class":47,"line":1844},[45,15137,15058],{"class":51},[45,15139,9765],{"class":69},[45,15141,2126],{"class":55},[45,15143,15144],{"class":47,"line":1849},[45,15145,2180],{"class":55},[45,15147,15148,15150,15152,15155,15157,15160,15162,15164,15166,15169,15171,15174,15176],{"class":47,"line":1878},[45,15149,3601],{"class":55},[45,15151,1320],{"class":51},[45,15153,15154],{"class":62},"\"姓名：\"",[45,15156,1320],{"class":51},[45,15158,15159],{"class":55},"m_name",[45,15161,1320],{"class":51},[45,15163,4509],{"class":62},[45,15165,1320],{"class":51},[45,15167,15168],{"class":62},"\"学号：\"",[45,15170,1320],{"class":51},[45,15172,15173],{"class":55},"m_id",[45,15175,1320],{"class":51},[45,15177,1343],{"class":55},[45,15179,15180],{"class":47,"line":1883},[45,15181,2337],{"class":55},[45,15183,15184],{"class":47,"line":1900},[45,15185,4145],{"class":55},[45,15187,15188,15190,15192],{"class":47,"line":1905},[45,15189,285],{"class":51},[45,15191,2123],{"class":69},[45,15193,2126],{"class":55},[45,15195,15196],{"class":47,"line":1910},[45,15197,1697],{"class":55},[45,15199,15200],{"class":47,"line":1915},[45,15201,15202],{"class":337},"    \u002F\u002F实例化\n",[45,15204,15205],{"class":47,"line":1929},[45,15206,15207],{"class":55},"    Student s1;\n",[45,15209,15210,15213,15216,15218,15220],{"class":47,"line":1934},[45,15211,15212],{"class":55},"    s1.",[45,15214,15215],{"class":69},"setName",[45,15217,282],{"class":55},[45,15219,8066],{"class":62},[45,15221,2869],{"class":55},[45,15223,15224,15226,15229,15231,15234],{"class":47,"line":2727},[45,15225,15212],{"class":55},[45,15227,15228],{"class":69},"setId",[45,15230,282],{"class":55},[45,15232,15233],{"class":79},"123456",[45,15235,2869],{"class":55},[45,15237,15238,15240,15243],{"class":47,"line":2741},[45,15239,15212],{"class":55},[45,15241,15242],{"class":69},"printInfo",[45,15244,5786],{"class":55},[45,15246,15247],{"class":47,"line":2749},[45,15248,1716],{"class":55},[20,15250,15251],{},"类中的属性和行为统称为成员",[20,15253,15254],{},"属性：成员属性(成员变量)",[20,15256,15257],{},"方法：成员函数(成员方法)",[20,15259,15260],{},[427,15261,15262],{},"封装意义二：",[20,15264,15265],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[20,15267,15268],{},"访问权限有三种：",[233,15270,15271,15274,15277],{},[169,15272,15273],{},"public        公共权限",[169,15275,15276],{},"protected 保护权限",[169,15278,15279],{},"private      私有权限",[20,15281,15282],{},[427,15283,15284],{},"示例：",[36,15286,15288],{"className":10090,"code":15287,"language":10092,"meta":25,"style":25},"\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",[42,15289,15290,15295,15300,15305,15310,15314,15321,15325,15330,15334,15339,15343,15348,15353,15358,15362,15367,15372,15379,15383,15387,15395,15399,15410,15422,15434,15438,15442,15446,15454,15458,15463,15475,15483,15491,15495,15505,15509,15517],{"__ignoreMap":25},[45,15291,15292],{"class":47,"line":48},[45,15293,15294],{"class":337},"\u002F\u002F三种权限\n",[45,15296,15297],{"class":47,"line":66},[45,15298,15299],{"class":337},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[45,15301,15302],{"class":47,"line":1331},[45,15303,15304],{"class":337},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[45,15306,15307],{"class":47,"line":1346},[45,15308,15309],{"class":337},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[45,15311,15312],{"class":47,"line":1352},[45,15313,2550],{"emptyLinePlaceholder":207},[45,15315,15316,15318],{"class":47,"line":1366},[45,15317,14843],{"class":51},[45,15319,15320],{"class":69}," Person\n",[45,15322,15323],{"class":47,"line":1372},[45,15324,1697],{"class":55},[45,15326,15327],{"class":47,"line":1463},[45,15328,15329],{"class":337},"    \u002F\u002F姓名  公共权限\n",[45,15331,15332],{"class":47,"line":1469},[45,15333,14865],{"class":51},[45,15335,15336],{"class":47,"line":1481},[45,15337,15338],{"class":55},"    string m_Name;\n",[45,15340,15341],{"class":47,"line":1763},[45,15342,2550],{"emptyLinePlaceholder":207},[45,15344,15345],{"class":47,"line":1768},[45,15346,15347],{"class":337},"    \u002F\u002F汽车  保护权限\n",[45,15349,15350],{"class":47,"line":1774},[45,15351,15352],{"class":51},"protected:\n",[45,15354,15355],{"class":47,"line":1779},[45,15356,15357],{"class":55},"    string m_Car;\n",[45,15359,15360],{"class":47,"line":1793},[45,15361,2550],{"emptyLinePlaceholder":207},[45,15363,15364],{"class":47,"line":1798},[45,15365,15366],{"class":337},"    \u002F\u002F银行卡密码  私有权限\n",[45,15368,15369],{"class":47,"line":1804},[45,15370,15371],{"class":51},"private:\n",[45,15373,15374,15376],{"class":47,"line":1825},[45,15375,2135],{"class":51},[45,15377,15378],{"class":55}," m_Password;\n",[45,15380,15381],{"class":47,"line":1830},[45,15382,2550],{"emptyLinePlaceholder":207},[45,15384,15385],{"class":47,"line":1844},[45,15386,14865],{"class":51},[45,15388,15389,15391,15393],{"class":47,"line":1849},[45,15390,15058],{"class":51},[45,15392,11534],{"class":69},[45,15394,2126],{"class":55},[45,15396,15397],{"class":47,"line":1878},[45,15398,2180],{"class":55},[45,15400,15401,15404,15406,15408],{"class":47,"line":1883},[45,15402,15403],{"class":55},"        m_Name ",[45,15405,59],{"class":51},[45,15407,9088],{"class":62},[45,15409,1442],{"class":55},[45,15411,15412,15415,15417,15420],{"class":47,"line":1900},[45,15413,15414],{"class":55},"        m_Car ",[45,15416,59],{"class":51},[45,15418,15419],{"class":62}," \"拖拉机\"",[45,15421,1442],{"class":55},[45,15423,15424,15427,15429,15432],{"class":47,"line":1905},[45,15425,15426],{"class":55},"        m_Password ",[45,15428,59],{"class":51},[45,15430,15431],{"class":79}," 123456",[45,15433,1442],{"class":55},[45,15435,15436],{"class":47,"line":1910},[45,15437,2337],{"class":55},[45,15439,15440],{"class":47,"line":1915},[45,15441,4145],{"class":55},[45,15443,15444],{"class":47,"line":1929},[45,15445,2550],{"emptyLinePlaceholder":207},[45,15447,15448,15450,15452],{"class":47,"line":1934},[45,15449,285],{"class":51},[45,15451,2123],{"class":69},[45,15453,11002],{"class":55},[45,15455,15456],{"class":47,"line":2727},[45,15457,2550],{"emptyLinePlaceholder":207},[45,15459,15460],{"class":47,"line":2741},[45,15461,15462],{"class":55},"    Person p;\n",[45,15464,15465,15468,15470,15473],{"class":47,"line":2749},[45,15466,15467],{"class":55},"    p.m_Name ",[45,15469,59],{"class":51},[45,15471,15472],{"class":62}," \"李四\"",[45,15474,1442],{"class":55},[45,15476,15477,15480],{"class":47,"line":2754},[45,15478,15479],{"class":337},"    \u002F\u002Fp.m_Car = \"奔驰\";",[45,15481,15482],{"class":337},"  \u002F\u002F保护权限类外访问不到\n",[45,15484,15485,15488],{"class":47,"line":2760},[45,15486,15487],{"class":337},"    \u002F\u002Fp.m_Password = 123;",[45,15489,15490],{"class":337}," \u002F\u002F私有权限类外访问不到\n",[45,15492,15493],{"class":47,"line":2766},[45,15494,2550],{"emptyLinePlaceholder":207},[45,15496,15497,15499,15501,15503],{"class":47,"line":2771},[45,15498,2453],{"class":69},[45,15500,282],{"class":55},[45,15502,2458],{"class":62},[45,15504,2869],{"class":55},[45,15506,15507],{"class":47,"line":8098},[45,15508,2550],{"emptyLinePlaceholder":207},[45,15510,15511,15513,15515],{"class":47,"line":8122},[45,15512,4240],{"class":51},[45,15514,4243],{"class":79},[45,15516,1442],{"class":55},[45,15518,15519],{"class":47,"line":8127},[45,15520,1716],{"class":55},[249,15522,15524],{"id":15523},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[20,15526,15527,15528,15531,15532],{},"在C++中 struct和class唯一的",[427,15529,15530],{},"区别","就在于 ",[427,15533,15534],{},"默认的访问权限不同",[20,15536,15537],{},"区别：",[166,15539,15540,15543],{},[169,15541,15542],{},"struct 默认权限为公共",[169,15544,15545],{},"class   默认权限为私有",[36,15547,15549],{"className":10090,"code":15548,"language":10092,"meta":25,"style":25},"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",[42,15550,15551,15558,15562,15572,15576,15580,15587,15591,15601,15605,15609,15617,15621,15626,15640,15644,15649,15663,15667,15677,15681,15689],{"__ignoreMap":25},[45,15552,15553,15555],{"class":47,"line":48},[45,15554,14843],{"class":51},[45,15556,15557],{"class":69}," C1\n",[45,15559,15560],{"class":47,"line":66},[45,15561,1697],{"class":55},[45,15563,15564,15566,15569],{"class":47,"line":1331},[45,15565,2135],{"class":51},[45,15567,15568],{"class":55},"  m_A;",[45,15570,15571],{"class":337}," \u002F\u002F默认是私有权限\n",[45,15573,15574],{"class":47,"line":1346},[45,15575,4145],{"class":55},[45,15577,15578],{"class":47,"line":1352},[45,15579,2550],{"emptyLinePlaceholder":207},[45,15581,15582,15584],{"class":47,"line":1366},[45,15583,7909],{"class":51},[45,15585,15586],{"class":69}," C2\n",[45,15588,15589],{"class":47,"line":1372},[45,15590,1697],{"class":55},[45,15592,15593,15595,15598],{"class":47,"line":1463},[45,15594,2135],{"class":51},[45,15596,15597],{"class":55}," m_A;",[45,15599,15600],{"class":337},"  \u002F\u002F默认是公共权限\n",[45,15602,15603],{"class":47,"line":1469},[45,15604,4145],{"class":55},[45,15606,15607],{"class":47,"line":1481},[45,15608,2550],{"emptyLinePlaceholder":207},[45,15610,15611,15613,15615],{"class":47,"line":1763},[45,15612,285],{"class":51},[45,15614,2123],{"class":69},[45,15616,11002],{"class":55},[45,15618,15619],{"class":47,"line":1768},[45,15620,2550],{"emptyLinePlaceholder":207},[45,15622,15623],{"class":47,"line":1774},[45,15624,15625],{"class":55},"    C1 c1;\n",[45,15627,15628,15631,15633,15635,15637],{"class":47,"line":1779},[45,15629,15630],{"class":55},"    c1.m_A ",[45,15632,59],{"class":51},[45,15634,2188],{"class":79},[45,15636,334],{"class":55},[45,15638,15639],{"class":337}," \u002F\u002F错误，访问权限是私有\n",[45,15641,15642],{"class":47,"line":1793},[45,15643,2550],{"emptyLinePlaceholder":207},[45,15645,15646],{"class":47,"line":1798},[45,15647,15648],{"class":55},"    C2 c2;\n",[45,15650,15651,15654,15656,15658,15660],{"class":47,"line":1804},[45,15652,15653],{"class":55},"    c2.m_A ",[45,15655,59],{"class":51},[45,15657,2188],{"class":79},[45,15659,334],{"class":55},[45,15661,15662],{"class":337}," \u002F\u002F正确，访问权限是公共\n",[45,15664,15665],{"class":47,"line":1825},[45,15666,2550],{"emptyLinePlaceholder":207},[45,15668,15669,15671,15673,15675],{"class":47,"line":1830},[45,15670,2453],{"class":69},[45,15672,282],{"class":55},[45,15674,2458],{"class":62},[45,15676,2869],{"class":55},[45,15678,15679],{"class":47,"line":1844},[45,15680,2550],{"emptyLinePlaceholder":207},[45,15682,15683,15685,15687],{"class":47,"line":1849},[45,15684,4240],{"class":51},[45,15686,4243],{"class":79},[45,15688,1442],{"class":55},[45,15690,15691],{"class":47,"line":1878},[45,15692,1716],{"class":55},[249,15694,15696],{"id":15695},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[20,15698,15699],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[20,15701,15702],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[20,15704,15705],{},[427,15706,15284],{},[36,15708,15710],{"className":10090,"code":15709,"language":10092,"meta":25,"style":25},"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",[42,15711,15712,15722,15726,15730,15735,15749,15758,15762,15772,15776,15783,15787,15791,15795,15800,15809,15816,15820,15825,15841,15864,15877,15884,15888,15897,15901,15905,15910,15926,15936,15940,15944,15948,15956,15960,15970,15974,15982,15986,15990,15998,16002,16006,16011,16024,16047,16051,16056,16069,16091,16095,16100,16114,16122,16126,16136,16140,16148],{"__ignoreMap":25},[45,15713,15714,15716,15719],{"class":47,"line":48},[45,15715,14843],{"class":51},[45,15717,15718],{"class":69}," Person",[45,15720,15721],{"class":55}," {\n",[45,15723,15724],{"class":47,"line":66},[45,15725,14865],{"class":51},[45,15727,15728],{"class":47,"line":1331},[45,15729,2550],{"emptyLinePlaceholder":207},[45,15731,15732],{"class":47,"line":1346},[45,15733,15734],{"class":337},"    \u002F\u002F姓名设置可读可写\n",[45,15736,15737,15739,15741,15743,15745,15747],{"class":47,"line":1352},[45,15738,15058],{"class":51},[45,15740,15061],{"class":69},[45,15742,282],{"class":55},[45,15744,15066],{"class":69},[45,15746,15069],{"class":5366},[45,15748,12591],{"class":55},[45,15750,15751,15753,15755],{"class":47,"line":1366},[45,15752,15403],{"class":55},[45,15754,59],{"class":51},[45,15756,15757],{"class":55}," name;\n",[45,15759,15760],{"class":47,"line":1372},[45,15761,2337],{"class":55},[45,15763,15764,15767,15770],{"class":47,"line":1463},[45,15765,15766],{"class":69},"    string",[45,15768,15769],{"class":69}," getName",[45,15771,2126],{"class":55},[45,15773,15774],{"class":47,"line":1469},[45,15775,2180],{"class":55},[45,15777,15778,15780],{"class":47,"line":1481},[45,15779,14901],{"class":51},[45,15781,15782],{"class":55}," m_Name;\n",[45,15784,15785],{"class":47,"line":1763},[45,15786,2337],{"class":55},[45,15788,15789],{"class":47,"line":1768},[45,15790,2550],{"emptyLinePlaceholder":207},[45,15792,15793],{"class":47,"line":1774},[45,15794,2550],{"emptyLinePlaceholder":207},[45,15796,15797],{"class":47,"line":1779},[45,15798,15799],{"class":337},"    \u002F\u002F获取年龄 \n",[45,15801,15802,15804,15807],{"class":47,"line":1793},[45,15803,2135],{"class":51},[45,15805,15806],{"class":69}," getAge",[45,15808,11002],{"class":55},[45,15810,15811,15813],{"class":47,"line":1798},[45,15812,14901],{"class":51},[45,15814,15815],{"class":55}," m_Age;\n",[45,15817,15818],{"class":47,"line":1804},[45,15819,2337],{"class":55},[45,15821,15822],{"class":47,"line":1825},[45,15823,15824],{"class":337},"    \u002F\u002F设置年龄\n",[45,15826,15827,15829,15832,15834,15836,15839],{"class":47,"line":1830},[45,15828,15058],{"class":51},[45,15830,15831],{"class":69}," setAge",[45,15833,282],{"class":55},[45,15835,285],{"class":51},[45,15837,15838],{"class":5366}," age",[45,15840,12591],{"class":55},[45,15842,15843,15845,15848,15850,15852,15854,15857,15859,15862],{"class":47,"line":1844},[45,15844,2647],{"class":51},[45,15846,15847],{"class":55}," (age ",[45,15849,1187],{"class":51},[45,15851,4243],{"class":79},[45,15853,3405],{"class":51},[45,15855,15856],{"class":55}," age ",[45,15858,1237],{"class":51},[45,15860,15861],{"class":79}," 150",[45,15863,12591],{"class":55},[45,15865,15866,15868,15870,15873,15875],{"class":47,"line":1849},[45,15867,9869],{"class":55},[45,15869,1320],{"class":51},[45,15871,15872],{"class":62}," \"你个老妖精!\"",[45,15874,1596],{"class":51},[45,15876,8990],{"class":55},[45,15878,15879,15882],{"class":47,"line":1878},[45,15880,15881],{"class":51},"            return",[45,15883,1442],{"class":55},[45,15885,15886],{"class":47,"line":1883},[45,15887,2679],{"class":55},[45,15889,15890,15893,15895],{"class":47,"line":1900},[45,15891,15892],{"class":55},"        m_Age ",[45,15894,59],{"class":51},[45,15896,7947],{"class":55},[45,15898,15899],{"class":47,"line":1905},[45,15900,2337],{"class":55},[45,15902,15903],{"class":47,"line":1910},[45,15904,2550],{"emptyLinePlaceholder":207},[45,15906,15907],{"class":47,"line":1915},[45,15908,15909],{"class":337},"    \u002F\u002F情人设置为只写\n",[45,15911,15912,15914,15917,15919,15921,15924],{"class":47,"line":1929},[45,15913,15058],{"class":51},[45,15915,15916],{"class":69}," setLover",[45,15918,282],{"class":55},[45,15920,15066],{"class":69},[45,15922,15923],{"class":5366}," lover",[45,15925,12591],{"class":55},[45,15927,15928,15931,15933],{"class":47,"line":1934},[45,15929,15930],{"class":55},"        m_Lover ",[45,15932,59],{"class":51},[45,15934,15935],{"class":55}," lover;\n",[45,15937,15938],{"class":47,"line":2727},[45,15939,2337],{"class":55},[45,15941,15942],{"class":47,"line":2741},[45,15943,2550],{"emptyLinePlaceholder":207},[45,15945,15946],{"class":47,"line":2749},[45,15947,15371],{"class":51},[45,15949,15950,15953],{"class":47,"line":2754},[45,15951,15952],{"class":55},"    string m_Name;",[45,15954,15955],{"class":337}," \u002F\u002F可读可写  姓名\n",[45,15957,15958],{"class":47,"line":2760},[45,15959,13359],{"class":55},[45,15961,15962,15964,15967],{"class":47,"line":2766},[45,15963,2135],{"class":51},[45,15965,15966],{"class":55}," m_Age;",[45,15968,15969],{"class":337}," \u002F\u002F只读  年龄\n",[45,15971,15972],{"class":47,"line":2771},[45,15973,2550],{"emptyLinePlaceholder":207},[45,15975,15976,15979],{"class":47,"line":8098},[45,15977,15978],{"class":55},"    string m_Lover;",[45,15980,15981],{"class":337}," \u002F\u002F只写  情人\n",[45,15983,15984],{"class":47,"line":8122},[45,15985,4145],{"class":55},[45,15987,15988],{"class":47,"line":8127},[45,15989,2550],{"emptyLinePlaceholder":207},[45,15991,15992,15994,15996],{"class":47,"line":8133},[45,15993,285],{"class":51},[45,15995,2123],{"class":69},[45,15997,11002],{"class":55},[45,15999,16000],{"class":47,"line":8160},[45,16001,2550],{"emptyLinePlaceholder":207},[45,16003,16004],{"class":47,"line":8165},[45,16005,15462],{"class":55},[45,16007,16008],{"class":47,"line":8171},[45,16009,16010],{"class":337},"    \u002F\u002F姓名设置\n",[45,16012,16013,16016,16018,16020,16022],{"class":47,"line":8183},[45,16014,16015],{"class":55},"    p.",[45,16017,15215],{"class":69},[45,16019,282],{"class":55},[45,16021,8066],{"class":62},[45,16023,2869],{"class":55},[45,16025,16026,16028,16030,16033,16035,16038,16041,16043,16045],{"class":47,"line":8195},[45,16027,6679],{"class":55},[45,16029,1320],{"class":51},[45,16031,16032],{"class":62}," \"姓名： \"",[45,16034,1596],{"class":51},[45,16036,16037],{"class":55}," p.",[45,16039,16040],{"class":69},"getName",[45,16042,13199],{"class":55},[45,16044,1320],{"class":51},[45,16046,8990],{"class":55},[45,16048,16049],{"class":47,"line":8207},[45,16050,2550],{"emptyLinePlaceholder":207},[45,16052,16053],{"class":47,"line":9866},[45,16054,16055],{"class":337},"    \u002F\u002F年龄设置\n",[45,16057,16058,16060,16063,16065,16067],{"class":47,"line":9890},[45,16059,16015],{"class":55},[45,16061,16062],{"class":69},"setAge",[45,16064,282],{"class":55},[45,16066,933],{"class":79},[45,16068,2869],{"class":55},[45,16070,16071,16073,16075,16078,16080,16082,16085,16087,16089],{"class":47,"line":9913},[45,16072,6679],{"class":55},[45,16074,1320],{"class":51},[45,16076,16077],{"class":62}," \"年龄： \"",[45,16079,1596],{"class":51},[45,16081,16037],{"class":55},[45,16083,16084],{"class":69},"getAge",[45,16086,13199],{"class":55},[45,16088,1320],{"class":51},[45,16090,8990],{"class":55},[45,16092,16093],{"class":47,"line":9937},[45,16094,2550],{"emptyLinePlaceholder":207},[45,16096,16097],{"class":47,"line":9942},[45,16098,16099],{"class":337},"    \u002F\u002F情人设置\n",[45,16101,16102,16104,16107,16109,16112],{"class":47,"line":9947},[45,16103,16015],{"class":55},[45,16105,16106],{"class":69},"setLover",[45,16108,282],{"class":55},[45,16110,16111],{"class":62},"\"苍井\"",[45,16113,2869],{"class":55},[45,16115,16116,16119],{"class":47,"line":9952},[45,16117,16118],{"class":337},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[45,16120,16121],{"class":337},"  \u002F\u002F只写属性，不可以读取\n",[45,16123,16124],{"class":47,"line":9961},[45,16125,2550],{"emptyLinePlaceholder":207},[45,16127,16128,16130,16132,16134],{"class":47,"line":9966},[45,16129,2453],{"class":69},[45,16131,282],{"class":55},[45,16133,2458],{"class":62},[45,16135,2869],{"class":55},[45,16137,16138],{"class":47,"line":9972},[45,16139,2550],{"emptyLinePlaceholder":207},[45,16141,16142,16144,16146],{"class":47,"line":9993},[45,16143,4240],{"class":51},[45,16145,4243],{"class":79},[45,16147,1442],{"class":55},[45,16149,16150],{"class":47,"line":9999},[45,16151,1716],{"class":55},[249,16153,16155],{"id":16154},"_814封装案例","8.1.4封装案例",[233,16157,16158],{},[169,16159,16160,16163],{},[427,16161,16162],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[166,16165,16166,16169],{},[169,16167,16168],{},"求出立方体的面积和体积",[169,16170,16171],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[36,16173,16175],{"className":270,"code":16174,"language":272,"meta":25,"style":25},"#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",[42,16176,16177,16183,16193,16200,16204,16208,16213,16243,16247,16257,16267,16277,16281,16290,16294,16330,16334,16343,16347,16363,16367,16372,16381,16385,16392,16396,16405,16409,16416,16420,16429,16433,16440,16444,16449,16466,16470,16516,16520,16529,16533,16537,16541,16550,16554,16558,16563,16567,16573,16579,16585,16589,16593,16598,16620,16624,16678,16682,16690,16694,16699,16704,16717,16724,16740,16751,16757,16780,16786,16809,16823,16843,16849,16860,16883,16905,16910,16916,16930,16943,16948,16962,16967,16973,16978,16992,16997,17002,17016,17028,17033,17046,17051,17056,17061,17074,17079],{"__ignoreMap":25},[45,16178,16179,16181],{"class":47,"line":48},[45,16180,2100],{"class":51},[45,16182,2103],{"class":62},[45,16184,16185,16187,16189,16191],{"class":47,"line":66},[45,16186,2108],{"class":51},[45,16188,2111],{"class":51},[45,16190,2114],{"class":69},[45,16192,1442],{"class":55},[45,16194,16195,16197],{"class":47,"line":1331},[45,16196,14843],{"class":51},[45,16198,16199],{"class":69}," Cube\n",[45,16201,16202],{"class":47,"line":1346},[45,16203,1697],{"class":55},[45,16205,16206],{"class":47,"line":1352},[45,16207,14865],{"class":51},[45,16209,16210],{"class":47,"line":1366},[45,16211,16212],{"class":337},"    \u002F\u002F输入长宽高\n",[45,16214,16215,16217,16220,16222,16224,16227,16229,16231,16234,16236,16238,16241],{"class":47,"line":1372},[45,16216,15058],{"class":51},[45,16218,16219],{"class":69}," setLwh",[45,16221,282],{"class":55},[45,16223,285],{"class":51},[45,16225,16226],{"class":5366}," l",[45,16228,655],{"class":55},[45,16230,285],{"class":51},[45,16232,16233],{"class":5366}," w",[45,16235,655],{"class":55},[45,16237,285],{"class":51},[45,16239,16240],{"class":5366}," h",[45,16242,139],{"class":55},[45,16244,16245],{"class":47,"line":1463},[45,16246,2180],{"class":55},[45,16248,16249,16252,16254],{"class":47,"line":1469},[45,16250,16251],{"class":55},"        m_L",[45,16253,59],{"class":51},[45,16255,16256],{"class":55},"l;\n",[45,16258,16259,16262,16264],{"class":47,"line":1481},[45,16260,16261],{"class":55},"        m_W",[45,16263,59],{"class":51},[45,16265,16266],{"class":55},"w;\n",[45,16268,16269,16272,16274],{"class":47,"line":1763},[45,16270,16271],{"class":55},"        m_H",[45,16273,59],{"class":51},[45,16275,16276],{"class":55},"h;\n",[45,16278,16279],{"class":47,"line":1768},[45,16280,2337],{"class":55},[45,16282,16283,16285,16288],{"class":47,"line":1774},[45,16284,2135],{"class":51},[45,16286,16287],{"class":69}," mianji",[45,16289,2126],{"class":55},[45,16291,16292],{"class":47,"line":1779},[45,16293,2180],{"class":55},[45,16295,16296,16298,16300,16302,16305,16307,16310,16312,16315,16317,16320,16322,16325,16327],{"class":47,"line":1793},[45,16297,14901],{"class":51},[45,16299,14904],{"class":79},[45,16301,732],{"class":51},[45,16303,16304],{"class":55},"(m_L",[45,16306,732],{"class":51},[45,16308,16309],{"class":55},"m_W ",[45,16311,758],{"class":51},[45,16313,16314],{"class":55}," m_L",[45,16316,732],{"class":51},[45,16318,16319],{"class":55},"m_H ",[45,16321,758],{"class":51},[45,16323,16324],{"class":55}," m_W",[45,16326,732],{"class":51},[45,16328,16329],{"class":55},"m_H);\n",[45,16331,16332],{"class":47,"line":1798},[45,16333,2337],{"class":55},[45,16335,16336,16338,16341],{"class":47,"line":1804},[45,16337,2135],{"class":51},[45,16339,16340],{"class":69}," tiji",[45,16342,2126],{"class":55},[45,16344,16345],{"class":47,"line":1825},[45,16346,2180],{"class":55},[45,16348,16349,16351,16353,16355,16358,16360],{"class":47,"line":1830},[45,16350,14901],{"class":51},[45,16352,16314],{"class":55},[45,16354,732],{"class":51},[45,16356,16357],{"class":55},"m_W",[45,16359,732],{"class":51},[45,16361,16362],{"class":55},"m_H;\n",[45,16364,16365],{"class":47,"line":1844},[45,16366,2337],{"class":55},[45,16368,16369],{"class":47,"line":1849},[45,16370,16371],{"class":337},"    \u002F\u002F获取长宽高\n",[45,16373,16374,16376,16379],{"class":47,"line":1878},[45,16375,2135],{"class":51},[45,16377,16378],{"class":69}," getLength",[45,16380,2126],{"class":55},[45,16382,16383],{"class":47,"line":1883},[45,16384,2180],{"class":55},[45,16386,16387,16389],{"class":47,"line":1900},[45,16388,14901],{"class":51},[45,16390,16391],{"class":55}," m_L;\n",[45,16393,16394],{"class":47,"line":1905},[45,16395,2337],{"class":55},[45,16397,16398,16400,16403],{"class":47,"line":1910},[45,16399,2135],{"class":51},[45,16401,16402],{"class":69}," getWidth",[45,16404,2126],{"class":55},[45,16406,16407],{"class":47,"line":1915},[45,16408,2180],{"class":55},[45,16410,16411,16413],{"class":47,"line":1929},[45,16412,14901],{"class":51},[45,16414,16415],{"class":55}," m_W;\n",[45,16417,16418],{"class":47,"line":1934},[45,16419,2337],{"class":55},[45,16421,16422,16424,16427],{"class":47,"line":2727},[45,16423,2135],{"class":51},[45,16425,16426],{"class":69}," getHeight",[45,16428,2126],{"class":55},[45,16430,16431],{"class":47,"line":2741},[45,16432,2180],{"class":55},[45,16434,16435,16437],{"class":47,"line":2749},[45,16436,14901],{"class":51},[45,16438,16439],{"class":55}," m_H;\n",[45,16441,16442],{"class":47,"line":2754},[45,16443,2337],{"class":55},[45,16445,16446],{"class":47,"line":2760},[45,16447,16448],{"class":337},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[45,16450,16451,16454,16457,16459,16462,16464],{"class":47,"line":2766},[45,16452,16453],{"class":51},"    bool",[45,16455,16456],{"class":69}," isEqual",[45,16458,282],{"class":55},[45,16460,16461],{"class":69},"Cube",[45,16463,2999],{"class":5366},[45,16465,139],{"class":55},[45,16467,16468],{"class":47,"line":2771},[45,16469,2180],{"class":55},[45,16471,16472,16474,16477,16480,16482,16484,16487,16489,16492,16495,16497,16499,16502,16504,16506,16509,16511,16513],{"class":47,"line":8098},[45,16473,2647],{"class":51},[45,16475,16476],{"class":55}," (c.",[45,16478,16479],{"class":69},"getLength",[45,16481,13199],{"class":55},[45,16483,3099],{"class":51},[45,16485,16486],{"class":55}," m_L ",[45,16488,1866],{"class":51},[45,16490,16491],{"class":55}," c.",[45,16493,16494],{"class":69},"getWidth",[45,16496,13199],{"class":55},[45,16498,3099],{"class":51},[45,16500,16501],{"class":55}," m_W ",[45,16503,1866],{"class":51},[45,16505,16491],{"class":55},[45,16507,16508],{"class":69},"getHeight",[45,16510,13199],{"class":55},[45,16512,3099],{"class":51},[45,16514,16515],{"class":55}," m_H)\n",[45,16517,16518],{"class":47,"line":8122},[45,16519,2660],{"class":55},[45,16521,16522,16524,16527],{"class":47,"line":8127},[45,16523,15881],{"class":51},[45,16525,16526],{"class":79}," true",[45,16528,1442],{"class":55},[45,16530,16531],{"class":47,"line":8133},[45,16532,2679],{"class":55},[45,16534,16535],{"class":47,"line":8160},[45,16536,2720],{"class":51},[45,16538,16539],{"class":47,"line":8165},[45,16540,2660],{"class":55},[45,16542,16543,16545,16548],{"class":47,"line":8171},[45,16544,15881],{"class":51},[45,16546,16547],{"class":79}," false",[45,16549,1442],{"class":55},[45,16551,16552],{"class":47,"line":8183},[45,16553,2679],{"class":55},[45,16555,16556],{"class":47,"line":8195},[45,16557,2337],{"class":55},[45,16559,16560],{"class":47,"line":8207},[45,16561,16562],{"class":337},"    \u002F\u002F私有属性\n",[45,16564,16565],{"class":47,"line":9866},[45,16566,15371],{"class":51},[45,16568,16569,16571],{"class":47,"line":9890},[45,16570,2135],{"class":51},[45,16572,16391],{"class":55},[45,16574,16575,16577],{"class":47,"line":9913},[45,16576,2135],{"class":51},[45,16578,16415],{"class":55},[45,16580,16581,16583],{"class":47,"line":9937},[45,16582,2135],{"class":51},[45,16584,16439],{"class":55},[45,16586,16587],{"class":47,"line":9942},[45,16588,2550],{"emptyLinePlaceholder":207},[45,16590,16591],{"class":47,"line":9947},[45,16592,4145],{"class":55},[45,16594,16595],{"class":47,"line":9952},[45,16596,16597],{"class":337},"\u002F\u002F全局函数判断两个立方体是否相等\n",[45,16599,16600,16602,16604,16606,16608,16611,16613,16615,16618],{"class":47,"line":9961},[45,16601,1506],{"class":51},[45,16603,16456],{"class":69},[45,16605,282],{"class":55},[45,16607,16461],{"class":69},[45,16609,16610],{"class":5366}," c1",[45,16612,655],{"class":55},[45,16614,16461],{"class":69},[45,16616,16617],{"class":5366}," c2",[45,16619,139],{"class":55},[45,16621,16622],{"class":47,"line":9966},[45,16623,1697],{"class":55},[45,16625,16626,16628,16631,16633,16635,16637,16640,16642,16645,16647,16649,16651,16653,16655,16657,16659,16661,16663,16665,16667,16669,16671,16673,16675],{"class":47,"line":9972},[45,16627,4240],{"class":51},[45,16629,16630],{"class":55}," (c1.",[45,16632,16479],{"class":69},[45,16634,13199],{"class":55},[45,16636,3099],{"class":51},[45,16638,16639],{"class":55}," c2.",[45,16641,16479],{"class":69},[45,16643,16644],{"class":55},"()) ",[45,16646,1866],{"class":51},[45,16648,16630],{"class":55},[45,16650,16494],{"class":69},[45,16652,13199],{"class":55},[45,16654,3099],{"class":51},[45,16656,16639],{"class":55},[45,16658,16494],{"class":69},[45,16660,16644],{"class":55},[45,16662,1866],{"class":51},[45,16664,16630],{"class":55},[45,16666,16508],{"class":69},[45,16668,13199],{"class":55},[45,16670,3099],{"class":51},[45,16672,16639],{"class":55},[45,16674,16508],{"class":69},[45,16676,16677],{"class":55},"());\n",[45,16679,16680],{"class":47,"line":9993},[45,16681,1716],{"class":55},[45,16683,16684,16686,16688],{"class":47,"line":9999},[45,16685,285],{"class":51},[45,16687,2123],{"class":69},[45,16689,2126],{"class":55},[45,16691,16692],{"class":47,"line":10013},[45,16693,1697],{"class":55},[45,16695,16696],{"class":47,"line":10019},[45,16697,16698],{"class":55},"    Cube c1;\n",[45,16700,16701],{"class":47,"line":10046},[45,16702,16703],{"class":337},"    \u002F\u002F输入立方体的长宽高\n",[45,16705,16706,16708,16710,16713,16715],{"class":47,"line":10055},[45,16707,1702],{"class":55},[45,16709,1320],{"class":51},[45,16711,16712],{"class":62},"\"请输入第一个立方体的长、宽、高：\"",[45,16714,1320],{"class":51},[45,16716,1343],{"class":55},[45,16718,16719,16721],{"class":47,"line":10061},[45,16720,2135],{"class":51},[45,16722,16723],{"class":55}," l,w,h,l1,w1,h1;\n",[45,16725,16726,16728,16730,16732,16734,16736,16738],{"class":47,"line":10069},[45,16727,2162],{"class":55},[45,16729,1581],{"class":51},[45,16731,795],{"class":55},[45,16733,1581],{"class":51},[45,16735,1072],{"class":55},[45,16737,1581],{"class":51},[45,16739,16276],{"class":55},[45,16741,16742,16745,16748],{"class":47,"line":10074},[45,16743,16744],{"class":55},"    c1.",[45,16746,16747],{"class":69},"setLwh",[45,16749,16750],{"class":55},"(l,w,h);\n",[45,16752,16754],{"class":47,"line":16753},66,[45,16755,16756],{"class":337},"    \u002F\u002F面积\n",[45,16758,16760,16762,16764,16767,16769,16771,16774,16776,16778],{"class":47,"line":16759},67,[45,16761,1702],{"class":55},[45,16763,1320],{"class":51},[45,16765,16766],{"class":62},"\"立方体的表面积为：\"",[45,16768,1320],{"class":51},[45,16770,14979],{"class":55},[45,16772,16773],{"class":69},"mianji",[45,16775,2577],{"class":55},[45,16777,1320],{"class":51},[45,16779,1343],{"class":55},[45,16781,16783],{"class":47,"line":16782},68,[45,16784,16785],{"class":337},"    \u002F\u002F体积\n",[45,16787,16789,16791,16793,16796,16798,16800,16803,16805,16807],{"class":47,"line":16788},69,[45,16790,1702],{"class":55},[45,16792,1320],{"class":51},[45,16794,16795],{"class":62},"\"立方体的体积为：\"",[45,16797,1320],{"class":51},[45,16799,14979],{"class":55},[45,16801,16802],{"class":69},"tiji",[45,16804,2577],{"class":55},[45,16806,1320],{"class":51},[45,16808,1343],{"class":55},[45,16810,16812,16814,16816,16819,16821],{"class":47,"line":16811},70,[45,16813,1702],{"class":55},[45,16815,1320],{"class":51},[45,16817,16818],{"class":62},"\"请输入第二个立方体的长、宽、高：\"",[45,16820,1320],{"class":51},[45,16822,1343],{"class":55},[45,16824,16826,16828,16830,16833,16835,16838,16840],{"class":47,"line":16825},71,[45,16827,2162],{"class":55},[45,16829,1581],{"class":51},[45,16831,16832],{"class":55},"l1",[45,16834,1581],{"class":51},[45,16836,16837],{"class":55},"w1",[45,16839,1581],{"class":51},[45,16841,16842],{"class":55},"h1;\n",[45,16844,16846],{"class":47,"line":16845},72,[45,16847,16848],{"class":55},"    Cube c2;\n",[45,16850,16852,16855,16857],{"class":47,"line":16851},73,[45,16853,16854],{"class":55},"    c2.",[45,16856,16747],{"class":69},[45,16858,16859],{"class":55},"(l1,w1,h1);\n",[45,16861,16863,16865,16867,16870,16872,16875,16877,16879,16881],{"class":47,"line":16862},74,[45,16864,1702],{"class":55},[45,16866,1320],{"class":51},[45,16868,16869],{"class":62},"\"第二个立方体的表面积为：\"",[45,16871,1320],{"class":51},[45,16873,16874],{"class":55},"c2.",[45,16876,16773],{"class":69},[45,16878,2577],{"class":55},[45,16880,1320],{"class":51},[45,16882,1343],{"class":55},[45,16884,16886,16888,16890,16893,16895,16897,16899,16901,16903],{"class":47,"line":16885},75,[45,16887,1702],{"class":55},[45,16889,1320],{"class":51},[45,16891,16892],{"class":62},"\"第二个立方体的体积为：\"",[45,16894,1320],{"class":51},[45,16896,16874],{"class":55},[45,16898,16802],{"class":69},[45,16900,2577],{"class":55},[45,16902,1320],{"class":51},[45,16904,1343],{"class":55},[45,16906,16908],{"class":47,"line":16907},76,[45,16909,2550],{"emptyLinePlaceholder":207},[45,16911,16913],{"class":47,"line":16912},77,[45,16914,16915],{"class":337},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[45,16917,16919,16921,16923,16926,16928],{"class":47,"line":16918},78,[45,16920,1702],{"class":55},[45,16922,1320],{"class":51},[45,16924,16925],{"class":62},"\"内部函数判断结果：\"",[45,16927,1320],{"class":51},[45,16929,1343],{"class":55},[45,16931,16933,16935,16937,16940],{"class":47,"line":16932},79,[45,16934,3251],{"class":51},[45,16936,16630],{"class":55},[45,16938,16939],{"class":69},"isEqual",[45,16941,16942],{"class":55},"(c2))\n",[45,16944,16946],{"class":47,"line":16945},80,[45,16947,2180],{"class":55},[45,16949,16951,16953,16955,16958,16960],{"class":47,"line":16950},81,[45,16952,3601],{"class":55},[45,16954,1320],{"class":51},[45,16956,16957],{"class":62},"\"两个立方体相等\"",[45,16959,1320],{"class":51},[45,16961,1343],{"class":55},[45,16963,16965],{"class":47,"line":16964},82,[45,16966,2337],{"class":55},[45,16968,16970],{"class":47,"line":16969},83,[45,16971,16972],{"class":51},"    else\n",[45,16974,16976],{"class":47,"line":16975},84,[45,16977,2180],{"class":55},[45,16979,16981,16983,16985,16988,16990],{"class":47,"line":16980},85,[45,16982,3601],{"class":55},[45,16984,1320],{"class":51},[45,16986,16987],{"class":62},"\"两个立方体不相等\"",[45,16989,1320],{"class":51},[45,16991,1343],{"class":55},[45,16993,16995],{"class":47,"line":16994},86,[45,16996,2337],{"class":55},[45,16998,17000],{"class":47,"line":16999},87,[45,17001,2550],{"emptyLinePlaceholder":207},[45,17003,17005,17007,17009,17012,17014],{"class":47,"line":17004},88,[45,17006,1702],{"class":55},[45,17008,1320],{"class":51},[45,17010,17011],{"class":62},"\"全局函数判断结果：\"",[45,17013,1320],{"class":51},[45,17015,1343],{"class":55},[45,17017,17019,17021,17023,17025],{"class":47,"line":17018},89,[45,17020,3251],{"class":51},[45,17022,1809],{"class":55},[45,17024,16939],{"class":69},[45,17026,17027],{"class":55},"(c1, c2))\n",[45,17029,17031],{"class":47,"line":17030},90,[45,17032,2180],{"class":55},[45,17034,17036,17038,17040,17042,17044],{"class":47,"line":17035},91,[45,17037,3601],{"class":55},[45,17039,1320],{"class":51},[45,17041,16957],{"class":62},[45,17043,1320],{"class":51},[45,17045,1343],{"class":55},[45,17047,17049],{"class":47,"line":17048},92,[45,17050,2337],{"class":55},[45,17052,17054],{"class":47,"line":17053},93,[45,17055,16972],{"class":51},[45,17057,17059],{"class":47,"line":17058},94,[45,17060,2180],{"class":55},[45,17062,17064,17066,17068,17070,17072],{"class":47,"line":17063},95,[45,17065,3601],{"class":55},[45,17067,1320],{"class":51},[45,17069,16987],{"class":62},[45,17071,1320],{"class":51},[45,17073,1343],{"class":55},[45,17075,17077],{"class":47,"line":17076},96,[45,17078,2337],{"class":55},[45,17080,17082],{"class":47,"line":17081},97,[45,17083,1716],{"class":55},[233,17085,17086],{"start":66},[169,17087,17088],{},[427,17089,17090],{},"练习案例2：点和圆的关系",[166,17092,17093],{},[169,17094,17095],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[36,17097,17099],{"className":270,"code":17098,"language":272,"meta":25,"style":25},"#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",[42,17100,17101,17107,17117,17124,17131,17135,17139,17144,17178,17183,17199,17213,17217,17221,17228,17235,17239,17245,17249,17253,17257,17279,17302,17307,17321,17336,17340,17344,17350,17355,17360,17364,17390,17394,17424,17452,17480,17497,17501,17514,17518,17522,17526,17539,17543,17547,17555,17559,17563,17567,17572,17576,17587,17594,17603,17613,17624,17631,17644,17655,17665,17676,17683,17697,17702,17712,17720],{"__ignoreMap":25},[45,17102,17103,17105],{"class":47,"line":48},[45,17104,2100],{"class":51},[45,17106,2103],{"class":62},[45,17108,17109,17111,17113,17115],{"class":47,"line":66},[45,17110,2108],{"class":51},[45,17112,2111],{"class":51},[45,17114,2114],{"class":69},[45,17116,1442],{"class":55},[45,17118,17119,17121],{"class":47,"line":1331},[45,17120,2100],{"class":51},[45,17122,17123],{"class":62},"\u003Ccmath>\n",[45,17125,17126,17128],{"class":47,"line":1346},[45,17127,14843],{"class":51},[45,17129,17130],{"class":69}," Point\n",[45,17132,17133],{"class":47,"line":1352},[45,17134,1697],{"class":55},[45,17136,17137],{"class":47,"line":1366},[45,17138,14865],{"class":51},[45,17140,17141],{"class":47,"line":1372},[45,17142,17143],{"class":337},"    \u002F\u002F赋值\n",[45,17145,17146,17148,17151,17153,17155,17158,17160,17162,17165,17168,17170,17173,17175],{"class":47,"line":1463},[45,17147,15058],{"class":51},[45,17149,17150],{"class":69}," setPoint",[45,17152,282],{"class":55},[45,17154,14186],{"class":51},[45,17156,17157],{"class":5366}," x",[45,17159,12584],{"class":55},[45,17161,14186],{"class":51},[45,17163,17164],{"class":5366}," y",[45,17166,17167],{"class":55},") { m_x ",[45,17169,59],{"class":51},[45,17171,17172],{"class":55}," x; m_y ",[45,17174,59],{"class":51},[45,17176,17177],{"class":55}," y; }\n",[45,17179,17180],{"class":47,"line":1469},[45,17181,17182],{"class":337},"    \u002F\u002F获取坐标\n",[45,17184,17185,17187,17190,17193,17196],{"class":47,"line":1481},[45,17186,14887],{"class":51},[45,17188,17189],{"class":69}," getX",[45,17191,17192],{"class":55},"() { ",[45,17194,17195],{"class":51},"return",[45,17197,17198],{"class":55}," m_x; }\n",[45,17200,17201,17203,17206,17208,17210],{"class":47,"line":1763},[45,17202,14887],{"class":51},[45,17204,17205],{"class":69}," getY",[45,17207,17192],{"class":55},[45,17209,17195],{"class":51},[45,17211,17212],{"class":55}," m_y; }\n",[45,17214,17215],{"class":47,"line":1768},[45,17216,2550],{"emptyLinePlaceholder":207},[45,17218,17219],{"class":47,"line":1774},[45,17220,15371],{"class":51},[45,17222,17223,17225],{"class":47,"line":1779},[45,17224,14887],{"class":51},[45,17226,17227],{"class":55}," m_x;\n",[45,17229,17230,17232],{"class":47,"line":1793},[45,17231,14887],{"class":51},[45,17233,17234],{"class":55}," m_y;\n",[45,17236,17237],{"class":47,"line":1798},[45,17238,4145],{"class":55},[45,17240,17241,17243],{"class":47,"line":1804},[45,17242,14843],{"class":51},[45,17244,14846],{"class":69},[45,17246,17247],{"class":47,"line":1825},[45,17248,1697],{"class":55},[45,17250,17251],{"class":47,"line":1830},[45,17252,14865],{"class":51},[45,17254,17255],{"class":47,"line":1844},[45,17256,17143],{"class":337},[45,17258,17259,17261,17264,17266,17268,17271,17274,17276],{"class":47,"line":1849},[45,17260,15058],{"class":51},[45,17262,17263],{"class":69}," setRadius",[45,17265,282],{"class":55},[45,17267,14186],{"class":51},[45,17269,17270],{"class":5366}," r",[45,17272,17273],{"class":55},") { m_r ",[45,17275,59],{"class":51},[45,17277,17278],{"class":55}," r; }\n",[45,17280,17281,17283,17286,17288,17291,17294,17297,17299],{"class":47,"line":1878},[45,17282,15058],{"class":51},[45,17284,17285],{"class":69}," setCenter",[45,17287,282],{"class":55},[45,17289,17290],{"class":69},"Point",[45,17292,17293],{"class":5366}," center",[45,17295,17296],{"class":55},") { m_center ",[45,17298,59],{"class":51},[45,17300,17301],{"class":55}," center; }\n",[45,17303,17304],{"class":47,"line":1883},[45,17305,17306],{"class":337},"    \u002F\u002F获取属性\n",[45,17308,17309,17311,17314,17316,17318],{"class":47,"line":1900},[45,17310,14887],{"class":51},[45,17312,17313],{"class":69}," getRadius",[45,17315,17192],{"class":55},[45,17317,17195],{"class":51},[45,17319,17320],{"class":55}," m_r; }\n",[45,17322,17323,17326,17329,17331,17333],{"class":47,"line":1905},[45,17324,17325],{"class":69},"    Point",[45,17327,17328],{"class":69}," getCenter",[45,17330,17192],{"class":55},[45,17332,17195],{"class":51},[45,17334,17335],{"class":55}," m_center; }\n",[45,17337,17338],{"class":47,"line":1910},[45,17339,2550],{"emptyLinePlaceholder":207},[45,17341,17342],{"class":47,"line":1915},[45,17343,15371],{"class":51},[45,17345,17346,17348],{"class":47,"line":1929},[45,17347,14887],{"class":51},[45,17349,14877],{"class":55},[45,17351,17352],{"class":47,"line":1934},[45,17353,17354],{"class":337},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[45,17356,17357],{"class":47,"line":2727},[45,17358,17359],{"class":55},"    Point m_center;\n",[45,17361,17362],{"class":47,"line":2741},[45,17363,4145],{"class":55},[45,17365,17366,17368,17371,17373,17376,17378,17380,17382,17384,17386,17388],{"class":47,"line":2749},[45,17367,5514],{"class":51},[45,17369,17370],{"class":69}," isInCircle",[45,17372,282],{"class":55},[45,17374,17375],{"class":69},"Circle",[45,17377,10733],{"class":51},[45,17379,565],{"class":5366},[45,17381,655],{"class":55},[45,17383,17290],{"class":69},[45,17385,10733],{"class":51},[45,17387,20],{"class":5366},[45,17389,139],{"class":55},[45,17391,17392],{"class":47,"line":2754},[45,17393,1697],{"class":55},[45,17395,17396,17398,17401,17403,17405,17408,17411,17414,17416,17418,17420,17422],{"class":47,"line":2760},[45,17397,14887],{"class":51},[45,17399,17400],{"class":55}," dx ",[45,17402,59],{"class":51},[45,17404,16491],{"class":55},[45,17406,17407],{"class":69},"getCenter",[45,17409,17410],{"class":55},"().",[45,17412,17413],{"class":69},"getX",[45,17415,13199],{"class":55},[45,17417,809],{"class":51},[45,17419,16037],{"class":55},[45,17421,17413],{"class":69},[45,17423,5786],{"class":55},[45,17425,17426,17428,17431,17433,17435,17437,17439,17442,17444,17446,17448,17450],{"class":47,"line":2766},[45,17427,14887],{"class":51},[45,17429,17430],{"class":55}," dy ",[45,17432,59],{"class":51},[45,17434,16491],{"class":55},[45,17436,17407],{"class":69},[45,17438,17410],{"class":55},[45,17440,17441],{"class":69},"getY",[45,17443,13199],{"class":55},[45,17445,809],{"class":51},[45,17447,16037],{"class":55},[45,17449,17441],{"class":69},[45,17451,5786],{"class":55},[45,17453,17454,17456,17459,17461,17464,17467,17469,17471,17473,17475,17477],{"class":47,"line":2771},[45,17455,14887],{"class":51},[45,17457,17458],{"class":55}," distance ",[45,17460,59],{"class":51},[45,17462,17463],{"class":69}," sqrt",[45,17465,17466],{"class":55},"(dx ",[45,17468,732],{"class":51},[45,17470,17400],{"class":55},[45,17472,758],{"class":51},[45,17474,17430],{"class":55},[45,17476,732],{"class":51},[45,17478,17479],{"class":55}," dy);\n",[45,17481,17482,17484,17487,17489,17491,17494],{"class":47,"line":8098},[45,17483,3251],{"class":51},[45,17485,17486],{"class":55}," (distance ",[45,17488,1187],{"class":51},[45,17490,16491],{"class":55},[45,17492,17493],{"class":69},"getRadius",[45,17495,17496],{"class":55},"())\n",[45,17498,17499],{"class":47,"line":8122},[45,17500,2180],{"class":55},[45,17502,17503,17505,17507,17510,17512],{"class":47,"line":8127},[45,17504,9819],{"class":55},[45,17506,1320],{"class":51},[45,17508,17509],{"class":62}," \"点在圆内\"",[45,17511,1596],{"class":51},[45,17513,8990],{"class":55},[45,17515,17516],{"class":47,"line":8133},[45,17517,2337],{"class":55},[45,17519,17520],{"class":47,"line":8160},[45,17521,16972],{"class":51},[45,17523,17524],{"class":47,"line":8165},[45,17525,2180],{"class":55},[45,17527,17528,17530,17532,17535,17537],{"class":47,"line":8171},[45,17529,9819],{"class":55},[45,17531,1320],{"class":51},[45,17533,17534],{"class":62}," \"点在圆外\"",[45,17536,1596],{"class":51},[45,17538,8990],{"class":55},[45,17540,17541],{"class":47,"line":8183},[45,17542,2337],{"class":55},[45,17544,17545],{"class":47,"line":8195},[45,17546,1716],{"class":55},[45,17548,17549,17551,17553],{"class":47,"line":8207},[45,17550,285],{"class":51},[45,17552,2123],{"class":69},[45,17554,2126],{"class":55},[45,17556,17557],{"class":47,"line":9866},[45,17558,1697],{"class":55},[45,17560,17561],{"class":47,"line":9890},[45,17562,15202],{"class":337},[45,17564,17565],{"class":47,"line":9913},[45,17566,14949],{"class":55},[45,17568,17569],{"class":47,"line":9937},[45,17570,17571],{"class":55},"    Point p1;\n",[45,17573,17574],{"class":47,"line":9942},[45,17575,17143],{"class":337},[45,17577,17578,17580,17582,17585],{"class":47,"line":9947},[45,17579,1702],{"class":55},[45,17581,1320],{"class":51},[45,17583,17584],{"class":62},"\"请输入圆的半径：\"",[45,17586,1442],{"class":55},[45,17588,17589,17591],{"class":47,"line":9952},[45,17590,14887],{"class":51},[45,17592,17593],{"class":55}," r;\n",[45,17595,17596,17598,17600],{"class":47,"line":9961},[45,17597,2162],{"class":55},[45,17599,1581],{"class":51},[45,17601,17602],{"class":55},"r;\n",[45,17604,17605,17607,17610],{"class":47,"line":9966},[45,17606,16744],{"class":55},[45,17608,17609],{"class":69},"setRadius",[45,17611,17612],{"class":55},"(r);\n",[45,17614,17615,17617,17619,17622],{"class":47,"line":9972},[45,17616,1702],{"class":55},[45,17618,1320],{"class":51},[45,17620,17621],{"class":62},"\"请输入圆心坐标：\"",[45,17623,1442],{"class":55},[45,17625,17626,17628],{"class":47,"line":9993},[45,17627,14887],{"class":51},[45,17629,17630],{"class":55}," x, y;\n",[45,17632,17633,17635,17637,17639,17641],{"class":47,"line":9999},[45,17634,2162],{"class":55},[45,17636,1581],{"class":51},[45,17638,1097],{"class":55},[45,17640,1581],{"class":51},[45,17642,17643],{"class":55},"y;\n",[45,17645,17646,17649,17652],{"class":47,"line":10013},[45,17647,17648],{"class":55},"    p1.",[45,17650,17651],{"class":69},"setPoint",[45,17653,17654],{"class":55},"(x, y);\n",[45,17656,17657,17659,17662],{"class":47,"line":10019},[45,17658,16744],{"class":55},[45,17660,17661],{"class":69},"setCenter",[45,17663,17664],{"class":55},"(p1);\n",[45,17666,17667,17669,17671,17674],{"class":47,"line":10046},[45,17668,1702],{"class":55},[45,17670,1320],{"class":51},[45,17672,17673],{"class":62},"\"请输入测试点坐标：\"",[45,17675,1442],{"class":55},[45,17677,17678,17680],{"class":47,"line":10055},[45,17679,14887],{"class":51},[45,17681,17682],{"class":55}," x1, y1;\n",[45,17684,17685,17687,17689,17692,17694],{"class":47,"line":10061},[45,17686,2162],{"class":55},[45,17688,1581],{"class":51},[45,17690,17691],{"class":55},"x1",[45,17693,1581],{"class":51},[45,17695,17696],{"class":55},"y1;\n",[45,17698,17699],{"class":47,"line":10069},[45,17700,17701],{"class":55},"    Point p2;\n",[45,17703,17704,17707,17709],{"class":47,"line":10074},[45,17705,17706],{"class":55},"    p2.",[45,17708,17651],{"class":69},[45,17710,17711],{"class":55},"(x1, y1);\n",[45,17713,17714,17717],{"class":47,"line":16753},[45,17715,17716],{"class":69},"    isInCircle",[45,17718,17719],{"class":55},"(c1, p2);\n",[45,17721,17722],{"class":47,"line":16759},[45,17723,1716],{"class":55},[20,17725,17726],{},"在类中可以让另一个类作为本来的成员",[20,17728,17729],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[20,17731,17732],{},"创建point.h",[36,17734,17736],{"className":270,"code":17735,"language":272,"meta":25,"style":25},"#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",[42,17737,17738,17749,17755,17765,17771,17775,17780,17784,17788,17808,17812,17820,17828,17832,17836,17842,17848],{"__ignoreMap":25},[45,17739,17740,17743,17746],{"class":47,"line":48},[45,17741,17742],{"class":51},"#pragma",[45,17744,17745],{"class":69}," once",[45,17747,17748],{"class":337}," \u002F\u002F防止头文件重复包含\n",[45,17750,17751,17753],{"class":47,"line":66},[45,17752,2100],{"class":51},[45,17754,2103],{"class":62},[45,17756,17757,17759,17761,17763],{"class":47,"line":1331},[45,17758,2108],{"class":51},[45,17760,2111],{"class":51},[45,17762,2114],{"class":69},[45,17764,1442],{"class":55},[45,17766,17767,17769],{"class":47,"line":1346},[45,17768,14843],{"class":51},[45,17770,17130],{"class":69},[45,17772,17773],{"class":47,"line":1352},[45,17774,1697],{"class":55},[45,17776,17777],{"class":47,"line":1366},[45,17778,17779],{"class":337},"\u002F\u002F做好声明与变量定义就可以\n",[45,17781,17782],{"class":47,"line":1372},[45,17783,14865],{"class":51},[45,17785,17786],{"class":47,"line":1463},[45,17787,17143],{"class":337},[45,17789,17790,17792,17794,17796,17798,17800,17802,17804,17806],{"class":47,"line":1469},[45,17791,15058],{"class":51},[45,17793,17150],{"class":69},[45,17795,282],{"class":55},[45,17797,14186],{"class":51},[45,17799,17157],{"class":5366},[45,17801,12584],{"class":55},[45,17803,14186],{"class":51},[45,17805,17164],{"class":5366},[45,17807,2869],{"class":55},[45,17809,17810],{"class":47,"line":1481},[45,17811,17182],{"class":337},[45,17813,17814,17816,17818],{"class":47,"line":1763},[45,17815,14887],{"class":51},[45,17817,17189],{"class":69},[45,17819,5786],{"class":55},[45,17821,17822,17824,17826],{"class":47,"line":1768},[45,17823,14887],{"class":51},[45,17825,17205],{"class":69},[45,17827,5786],{"class":55},[45,17829,17830],{"class":47,"line":1774},[45,17831,2550],{"emptyLinePlaceholder":207},[45,17833,17834],{"class":47,"line":1779},[45,17835,15371],{"class":51},[45,17837,17838,17840],{"class":47,"line":1793},[45,17839,14887],{"class":51},[45,17841,17227],{"class":55},[45,17843,17844,17846],{"class":47,"line":1798},[45,17845,14887],{"class":51},[45,17847,17234],{"class":55},[45,17849,17850],{"class":47,"line":1804},[45,17851,4145],{"class":55},[20,17853,17854],{},"创建point.cpp",[36,17856,17858],{"className":270,"code":17857,"language":272,"meta":25,"style":25},"#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",[42,17859,17860,17867,17872,17906,17910,17926],{"__ignoreMap":25},[45,17861,17862,17864],{"class":47,"line":48},[45,17863,2100],{"class":51},[45,17865,17866],{"class":62},"\u003Cpoint.h>\n",[45,17868,17869],{"class":47,"line":66},[45,17870,17871],{"class":337},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[45,17873,17874,17876,17879,17882,17884,17886,17888,17890,17892,17894,17896,17898,17900,17902,17904],{"class":47,"line":1331},[45,17875,15058],{"class":51},[45,17877,17878],{"class":69}," Point",[45,17880,17881],{"class":55},"::",[45,17883,17651],{"class":69},[45,17885,282],{"class":55},[45,17887,14186],{"class":51},[45,17889,17157],{"class":5366},[45,17891,12584],{"class":55},[45,17893,14186],{"class":51},[45,17895,17164],{"class":5366},[45,17897,17167],{"class":55},[45,17899,59],{"class":51},[45,17901,17172],{"class":55},[45,17903,59],{"class":51},[45,17905,17177],{"class":55},[45,17907,17908],{"class":47,"line":1346},[45,17909,17182],{"class":337},[45,17911,17912,17914,17916,17918,17920,17922,17924],{"class":47,"line":1352},[45,17913,14887],{"class":51},[45,17915,17878],{"class":69},[45,17917,17881],{"class":55},[45,17919,17413],{"class":69},[45,17921,17192],{"class":55},[45,17923,17195],{"class":51},[45,17925,17198],{"class":55},[45,17927,17928,17930,17932,17934,17936,17938,17940],{"class":47,"line":1366},[45,17929,14887],{"class":51},[45,17931,17878],{"class":69},[45,17933,17881],{"class":55},[45,17935,17441],{"class":69},[45,17937,17192],{"class":55},[45,17939,17195],{"class":51},[45,17941,17212],{"class":55},[20,17943,17944],{},"创建circle.h",[36,17946,17948],{"className":270,"code":17947,"language":272,"meta":25,"style":25},"#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",[42,17949,17950,17957,17963,17973,17979,17985,17989,17993,17997,18011,18025,18029,18037,18045,18049,18053,18059,18063,18067],{"__ignoreMap":25},[45,17951,17952,17954],{"class":47,"line":48},[45,17953,17742],{"class":51},[45,17955,17956],{"class":69}," once\n",[45,17958,17959,17961],{"class":47,"line":66},[45,17960,2100],{"class":51},[45,17962,2103],{"class":62},[45,17964,17965,17967,17969,17971],{"class":47,"line":1331},[45,17966,2108],{"class":51},[45,17968,2111],{"class":51},[45,17970,2114],{"class":69},[45,17972,1442],{"class":55},[45,17974,17975,17977],{"class":47,"line":1346},[45,17976,2100],{"class":51},[45,17978,17866],{"class":62},[45,17980,17981,17983],{"class":47,"line":1352},[45,17982,14843],{"class":51},[45,17984,14846],{"class":69},[45,17986,17987],{"class":47,"line":1366},[45,17988,1697],{"class":55},[45,17990,17991],{"class":47,"line":1372},[45,17992,14865],{"class":51},[45,17994,17995],{"class":47,"line":1463},[45,17996,17143],{"class":337},[45,17998,17999,18001,18003,18005,18007,18009],{"class":47,"line":1469},[45,18000,15058],{"class":51},[45,18002,17263],{"class":69},[45,18004,282],{"class":55},[45,18006,14186],{"class":51},[45,18008,17270],{"class":5366},[45,18010,2869],{"class":55},[45,18012,18013,18015,18017,18019,18021,18023],{"class":47,"line":1481},[45,18014,15058],{"class":51},[45,18016,17285],{"class":69},[45,18018,282],{"class":55},[45,18020,17290],{"class":69},[45,18022,17293],{"class":5366},[45,18024,2869],{"class":55},[45,18026,18027],{"class":47,"line":1763},[45,18028,17306],{"class":337},[45,18030,18031,18033,18035],{"class":47,"line":1768},[45,18032,14887],{"class":51},[45,18034,17313],{"class":69},[45,18036,5786],{"class":55},[45,18038,18039,18041,18043],{"class":47,"line":1774},[45,18040,17325],{"class":69},[45,18042,17328],{"class":69},[45,18044,5786],{"class":55},[45,18046,18047],{"class":47,"line":1779},[45,18048,2550],{"emptyLinePlaceholder":207},[45,18050,18051],{"class":47,"line":1793},[45,18052,15371],{"class":51},[45,18054,18055,18057],{"class":47,"line":1798},[45,18056,14887],{"class":51},[45,18058,14877],{"class":55},[45,18060,18061],{"class":47,"line":1804},[45,18062,17354],{"class":337},[45,18064,18065],{"class":47,"line":1825},[45,18066,17359],{"class":55},[45,18068,18069],{"class":47,"line":1830},[45,18070,4145],{"class":55},[20,18072,18073],{},"创建circle.cpp",[36,18075,18077],{"className":270,"code":18076,"language":272,"meta":25,"style":25},"#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",[42,18078,18079,18086,18109,18131,18136,18152],{"__ignoreMap":25},[45,18080,18081,18083],{"class":47,"line":48},[45,18082,2100],{"class":51},[45,18084,18085],{"class":62},"\u003Ccircle.h>\n",[45,18087,18088,18090,18093,18095,18097,18099,18101,18103,18105,18107],{"class":47,"line":66},[45,18089,5514],{"class":51},[45,18091,18092],{"class":69}," Circle",[45,18094,17881],{"class":55},[45,18096,17609],{"class":69},[45,18098,282],{"class":55},[45,18100,14186],{"class":51},[45,18102,17270],{"class":5366},[45,18104,17273],{"class":55},[45,18106,59],{"class":51},[45,18108,17278],{"class":55},[45,18110,18111,18113,18115,18117,18119,18121,18123,18125,18127,18129],{"class":47,"line":1331},[45,18112,5514],{"class":51},[45,18114,18092],{"class":69},[45,18116,17881],{"class":55},[45,18118,17661],{"class":69},[45,18120,282],{"class":55},[45,18122,17290],{"class":69},[45,18124,17293],{"class":5366},[45,18126,17296],{"class":55},[45,18128,59],{"class":51},[45,18130,17301],{"class":55},[45,18132,18133],{"class":47,"line":1346},[45,18134,18135],{"class":337},"\u002F\u002F获取属性\n",[45,18137,18138,18140,18142,18144,18146,18148,18150],{"class":47,"line":1352},[45,18139,14186],{"class":51},[45,18141,18092],{"class":69},[45,18143,17881],{"class":55},[45,18145,17493],{"class":69},[45,18147,17192],{"class":55},[45,18149,17195],{"class":51},[45,18151,17320],{"class":55},[45,18153,18154,18156,18158,18160,18162,18164,18166],{"class":47,"line":1366},[45,18155,17290],{"class":69},[45,18157,18092],{"class":69},[45,18159,17881],{"class":55},[45,18161,17407],{"class":69},[45,18163,17192],{"class":55},[45,18165,17195],{"class":51},[45,18167,17335],{"class":55},[20,18169,18170],{},"使用封装的类",[36,18172,18174],{"className":270,"code":18173,"language":272,"meta":25,"style":25},"#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",[42,18175,18176,18182,18192,18198,18204,18228,18232,18258,18284,18308,18322,18326,18338,18342,18346,18350,18362,18366,18370,18378,18382,18386,18390,18394,18398,18408,18414,18422,18430,18440,18446,18458,18466,18474,18484,18490,18502,18506,18514,18520],{"__ignoreMap":25},[45,18177,18178,18180],{"class":47,"line":48},[45,18179,2100],{"class":51},[45,18181,2103],{"class":62},[45,18183,18184,18186,18188,18190],{"class":47,"line":66},[45,18185,2108],{"class":51},[45,18187,2111],{"class":51},[45,18189,2114],{"class":69},[45,18191,1442],{"class":55},[45,18193,18194,18196],{"class":47,"line":1331},[45,18195,2100],{"class":51},[45,18197,18085],{"class":62},[45,18199,18200,18202],{"class":47,"line":1346},[45,18201,2100],{"class":51},[45,18203,17866],{"class":62},[45,18205,18206,18208,18210,18212,18214,18216,18218,18220,18222,18224,18226],{"class":47,"line":1352},[45,18207,5514],{"class":51},[45,18209,17370],{"class":69},[45,18211,282],{"class":55},[45,18213,17375],{"class":69},[45,18215,10733],{"class":51},[45,18217,565],{"class":5366},[45,18219,655],{"class":55},[45,18221,17290],{"class":69},[45,18223,10733],{"class":51},[45,18225,20],{"class":5366},[45,18227,139],{"class":55},[45,18229,18230],{"class":47,"line":1366},[45,18231,1697],{"class":55},[45,18233,18234,18236,18238,18240,18242,18244,18246,18248,18250,18252,18254,18256],{"class":47,"line":1372},[45,18235,14887],{"class":51},[45,18237,17400],{"class":55},[45,18239,59],{"class":51},[45,18241,16491],{"class":55},[45,18243,17407],{"class":69},[45,18245,17410],{"class":55},[45,18247,17413],{"class":69},[45,18249,13199],{"class":55},[45,18251,809],{"class":51},[45,18253,16037],{"class":55},[45,18255,17413],{"class":69},[45,18257,5786],{"class":55},[45,18259,18260,18262,18264,18266,18268,18270,18272,18274,18276,18278,18280,18282],{"class":47,"line":1463},[45,18261,14887],{"class":51},[45,18263,17430],{"class":55},[45,18265,59],{"class":51},[45,18267,16491],{"class":55},[45,18269,17407],{"class":69},[45,18271,17410],{"class":55},[45,18273,17441],{"class":69},[45,18275,13199],{"class":55},[45,18277,809],{"class":51},[45,18279,16037],{"class":55},[45,18281,17441],{"class":69},[45,18283,5786],{"class":55},[45,18285,18286,18288,18290,18292,18294,18296,18298,18300,18302,18304,18306],{"class":47,"line":1469},[45,18287,14887],{"class":51},[45,18289,17458],{"class":55},[45,18291,59],{"class":51},[45,18293,17463],{"class":69},[45,18295,17466],{"class":55},[45,18297,732],{"class":51},[45,18299,17400],{"class":55},[45,18301,758],{"class":51},[45,18303,17430],{"class":55},[45,18305,732],{"class":51},[45,18307,17479],{"class":55},[45,18309,18310,18312,18314,18316,18318,18320],{"class":47,"line":1481},[45,18311,3251],{"class":51},[45,18313,17486],{"class":55},[45,18315,1187],{"class":51},[45,18317,16491],{"class":55},[45,18319,17493],{"class":69},[45,18321,17496],{"class":55},[45,18323,18324],{"class":47,"line":1763},[45,18325,2180],{"class":55},[45,18327,18328,18330,18332,18334,18336],{"class":47,"line":1768},[45,18329,9819],{"class":55},[45,18331,1320],{"class":51},[45,18333,17509],{"class":62},[45,18335,1596],{"class":51},[45,18337,8990],{"class":55},[45,18339,18340],{"class":47,"line":1774},[45,18341,2337],{"class":55},[45,18343,18344],{"class":47,"line":1779},[45,18345,16972],{"class":51},[45,18347,18348],{"class":47,"line":1793},[45,18349,2180],{"class":55},[45,18351,18352,18354,18356,18358,18360],{"class":47,"line":1798},[45,18353,9819],{"class":55},[45,18355,1320],{"class":51},[45,18357,17534],{"class":62},[45,18359,1596],{"class":51},[45,18361,8990],{"class":55},[45,18363,18364],{"class":47,"line":1804},[45,18365,2337],{"class":55},[45,18367,18368],{"class":47,"line":1825},[45,18369,1716],{"class":55},[45,18371,18372,18374,18376],{"class":47,"line":1830},[45,18373,285],{"class":51},[45,18375,2123],{"class":69},[45,18377,2126],{"class":55},[45,18379,18380],{"class":47,"line":1844},[45,18381,1697],{"class":55},[45,18383,18384],{"class":47,"line":1849},[45,18385,15202],{"class":337},[45,18387,18388],{"class":47,"line":1878},[45,18389,14949],{"class":55},[45,18391,18392],{"class":47,"line":1883},[45,18393,17571],{"class":55},[45,18395,18396],{"class":47,"line":1900},[45,18397,17143],{"class":337},[45,18399,18400,18402,18404,18406],{"class":47,"line":1905},[45,18401,1702],{"class":55},[45,18403,1320],{"class":51},[45,18405,17584],{"class":62},[45,18407,1442],{"class":55},[45,18409,18410,18412],{"class":47,"line":1910},[45,18411,14887],{"class":51},[45,18413,17593],{"class":55},[45,18415,18416,18418,18420],{"class":47,"line":1915},[45,18417,2162],{"class":55},[45,18419,1581],{"class":51},[45,18421,17602],{"class":55},[45,18423,18424,18426,18428],{"class":47,"line":1929},[45,18425,16744],{"class":55},[45,18427,17609],{"class":69},[45,18429,17612],{"class":55},[45,18431,18432,18434,18436,18438],{"class":47,"line":1934},[45,18433,1702],{"class":55},[45,18435,1320],{"class":51},[45,18437,17621],{"class":62},[45,18439,1442],{"class":55},[45,18441,18442,18444],{"class":47,"line":2727},[45,18443,14887],{"class":51},[45,18445,17630],{"class":55},[45,18447,18448,18450,18452,18454,18456],{"class":47,"line":2741},[45,18449,2162],{"class":55},[45,18451,1581],{"class":51},[45,18453,1097],{"class":55},[45,18455,1581],{"class":51},[45,18457,17643],{"class":55},[45,18459,18460,18462,18464],{"class":47,"line":2749},[45,18461,17648],{"class":55},[45,18463,17651],{"class":69},[45,18465,17654],{"class":55},[45,18467,18468,18470,18472],{"class":47,"line":2754},[45,18469,16744],{"class":55},[45,18471,17661],{"class":69},[45,18473,17664],{"class":55},[45,18475,18476,18478,18480,18482],{"class":47,"line":2760},[45,18477,1702],{"class":55},[45,18479,1320],{"class":51},[45,18481,17673],{"class":62},[45,18483,1442],{"class":55},[45,18485,18486,18488],{"class":47,"line":2766},[45,18487,14887],{"class":51},[45,18489,17682],{"class":55},[45,18491,18492,18494,18496,18498,18500],{"class":47,"line":2771},[45,18493,2162],{"class":55},[45,18495,1581],{"class":51},[45,18497,17691],{"class":55},[45,18499,1581],{"class":51},[45,18501,17696],{"class":55},[45,18503,18504],{"class":47,"line":8098},[45,18505,17701],{"class":55},[45,18507,18508,18510,18512],{"class":47,"line":8122},[45,18509,17706],{"class":55},[45,18511,17651],{"class":69},[45,18513,17711],{"class":55},[45,18515,18516,18518],{"class":47,"line":8127},[45,18517,17716],{"class":69},[45,18519,17719],{"class":55},[45,18521,18522],{"class":47,"line":8133},[45,18523,1716],{"class":55},[15,18525,18527],{"id":18526},"_82对象的初始化清理","8.2对象的初始化清理",[166,18529,18530,18533],{},[169,18531,18532],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[169,18534,18535],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[249,18537,18539],{"id":18538},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[20,18541,18542,18543,18546],{},"对象的",[427,18544,18545],{},"初始化和清理","也是两个非常重要的安全问题",[20,18548,18549],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[20,18551,18552],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[20,18554,18555,18556,18559,18560,18563],{},"c++利用了",[427,18557,18558],{},"构造函数","和",[427,18561,18562],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[20,18565,18566,18567],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[427,18568,18569],{},"我们不提供构造和析构，编译器会提供",[20,18571,18572],{},[427,18573,18574],{},"编译器提供的构造函数和析构函数是空实现。",[166,18576,18577,18580],{},[169,18578,18579],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[169,18581,18582,18583,18586],{},"析构函数：主要作用在于对象",[427,18584,18585],{},"销毁前","系统自动调用，执行一些清理工作。",[20,18588,18589,18592],{},[427,18590,18591],{},"构造函数语法：",[42,18593,18594],{},"类名(){}",[233,18596,18597,18600,18603,18606,18609],{},[169,18598,18599],{},"构造函数，没有返回值也不写void",[169,18601,18602],{},"函数名称与类名相同",[169,18604,18605],{},"构造函数可以有参数，因此可以发生重载",[169,18607,18608],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[169,18610,18611,18612,706],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[42,18613,18614],{},"Person(){}",[20,18616,18617,13944,18620],{},[427,18618,18619],{},"析构函数语法：",[42,18621,18622],{},"~类名(){}",[233,18624,18625,18628,18631,18637],{},[169,18626,18627],{},"析构函数，没有返回值也不写void",[169,18629,18630],{},"函数名称与类名相同,在名称前加上符号  ~",[169,18632,18633,18634],{},"析构函数不可以有参数，因此",[427,18635,18636],{},"不可以发生重载",[169,18638,18639],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[36,18641,18643],{"className":270,"code":18642,"language":272,"meta":25,"style":25},"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",[42,18644,18645,18651,18655,18659,18664,18671,18675,18688,18692,18697,18704,18708,18721,18725,18729,18733,18737,18745,18749,18757,18761,18765,18773,18777,18782,18786,18793,18797,18810,18814,18822],{"__ignoreMap":25},[45,18646,18647,18649],{"class":47,"line":48},[45,18648,14843],{"class":51},[45,18650,15320],{"class":69},[45,18652,18653],{"class":47,"line":66},[45,18654,1697],{"class":55},[45,18656,18657],{"class":47,"line":1331},[45,18658,14865],{"class":51},[45,18660,18661],{"class":47,"line":1346},[45,18662,18663],{"class":337},"    \u002F\u002F构造函数\n",[45,18665,18666,18669],{"class":47,"line":1352},[45,18667,18668],{"class":69},"    Person",[45,18670,2126],{"class":55},[45,18672,18673],{"class":47,"line":1366},[45,18674,2180],{"class":55},[45,18676,18677,18679,18681,18684,18686],{"class":47,"line":1372},[45,18678,9819],{"class":55},[45,18680,1320],{"class":51},[45,18682,18683],{"class":62}," \"Person的构造函数调用\"",[45,18685,1596],{"class":51},[45,18687,8990],{"class":55},[45,18689,18690],{"class":47,"line":1463},[45,18691,2337],{"class":55},[45,18693,18694],{"class":47,"line":1469},[45,18695,18696],{"class":337},"    \u002F\u002F析构函数\n",[45,18698,18699,18702],{"class":47,"line":1481},[45,18700,18701],{"class":69},"    ~Person",[45,18703,2126],{"class":55},[45,18705,18706],{"class":47,"line":1763},[45,18707,2180],{"class":55},[45,18709,18710,18712,18714,18717,18719],{"class":47,"line":1768},[45,18711,9819],{"class":55},[45,18713,1320],{"class":51},[45,18715,18716],{"class":62}," \"Person的析构函数调用\"",[45,18718,1596],{"class":51},[45,18720,8990],{"class":55},[45,18722,18723],{"class":47,"line":1774},[45,18724,2337],{"class":55},[45,18726,18727],{"class":47,"line":1779},[45,18728,2550],{"emptyLinePlaceholder":207},[45,18730,18731],{"class":47,"line":1793},[45,18732,4145],{"class":55},[45,18734,18735],{"class":47,"line":1798},[45,18736,2550],{"emptyLinePlaceholder":207},[45,18738,18739,18741,18743],{"class":47,"line":1804},[45,18740,5514],{"class":51},[45,18742,5738],{"class":69},[45,18744,2126],{"class":55},[45,18746,18747],{"class":47,"line":1825},[45,18748,1697],{"class":55},[45,18750,18751,18754],{"class":47,"line":1830},[45,18752,18753],{"class":55},"    Person p;",[45,18755,18756],{"class":337},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[45,18758,18759],{"class":47,"line":1844},[45,18760,1716],{"class":55},[45,18762,18763],{"class":47,"line":1849},[45,18764,2550],{"emptyLinePlaceholder":207},[45,18766,18767,18769,18771],{"class":47,"line":1878},[45,18768,285],{"class":51},[45,18770,2123],{"class":69},[45,18772,11002],{"class":55},[45,18774,18775],{"class":47,"line":1883},[45,18776,13359],{"class":55},[45,18778,18779],{"class":47,"line":1900},[45,18780,18781],{"class":337},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[45,18783,18784],{"class":47,"line":1905},[45,18785,2550],{"emptyLinePlaceholder":207},[45,18787,18788,18790],{"class":47,"line":1910},[45,18789,18753],{"class":55},[45,18791,18792],{"class":337},"\u002F\u002F只有构造函数\n",[45,18794,18795],{"class":47,"line":1915},[45,18796,2550],{"emptyLinePlaceholder":207},[45,18798,18799,18801,18803,18805,18807],{"class":47,"line":1929},[45,18800,2453],{"class":69},[45,18802,282],{"class":55},[45,18804,2458],{"class":62},[45,18806,6116],{"class":55},[45,18808,18809],{"class":337},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[45,18811,18812],{"class":47,"line":1934},[45,18813,2550],{"emptyLinePlaceholder":207},[45,18815,18816,18818,18820],{"class":47,"line":2727},[45,18817,4240],{"class":51},[45,18819,4243],{"class":79},[45,18821,1442],{"class":55},[45,18823,18824],{"class":47,"line":2741},[45,18825,1716],{"class":55},[20,18827,18828],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[249,18830,18832],{"id":18831},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[20,18834,18835],{},"两种分类方式：",[20,18837,18838],{},"​\t按参数分为： 有参构造和无参构造",[20,18840,18841],{},"​\t按类型分为： 普通构造和拷贝构造",[20,18843,18844],{},"三种调用方式：",[20,18846,18847],{},"​\t括号法",[20,18849,18850],{},"​\t显示法",[20,18852,18853],{},"​\t隐式转换法",[36,18855,18857],{"className":270,"code":18856,"language":272,"meta":25,"style":25},"#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",[42,18858,18859,18865,18875,18880,18885,18890,18895,18899,18907,18911,18915,18919,18925,18929,18942,18946,18958,18962,18971,18984,18988,18992,18998,19002,19015,19019,19024,19040,19044,19049,19058,19071,19075,19081,19085,19090,19098,19102,19107,19111,19119,19123,19128,19133,19138,19143,19148,19152,19157,19162,19167,19172,19176,19181,19186,19202,19214,19219,19223,19228,19233,19238,19242,19247,19261,19274,19278,19286,19290,19296,19302,19310],{"__ignoreMap":25},[45,18860,18861,18863],{"class":47,"line":48},[45,18862,2100],{"class":51},[45,18864,2103],{"class":62},[45,18866,18867,18869,18871,18873],{"class":47,"line":66},[45,18868,2108],{"class":51},[45,18870,2111],{"class":51},[45,18872,2114],{"class":69},[45,18874,1442],{"class":55},[45,18876,18877],{"class":47,"line":1331},[45,18878,18879],{"class":337},"\u002F\u002F1.构造函数的分类及调用\n",[45,18881,18882],{"class":47,"line":1346},[45,18883,18884],{"class":337},"\u002F\u002F分类\n",[45,18886,18887],{"class":47,"line":1352},[45,18888,18889],{"class":337},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[45,18891,18892],{"class":47,"line":1366},[45,18893,18894],{"class":337},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[45,18896,18897],{"class":47,"line":1372},[45,18898,2550],{"emptyLinePlaceholder":207},[45,18900,18901,18903,18905],{"class":47,"line":1463},[45,18902,14843],{"class":51},[45,18904,15718],{"class":69},[45,18906,2824],{"class":55},[45,18908,18909],{"class":47,"line":1469},[45,18910,1697],{"class":55},[45,18912,18913],{"class":47,"line":1481},[45,18914,14865],{"class":51},[45,18916,18917],{"class":47,"line":1763},[45,18918,18663],{"class":337},[45,18920,18921,18923],{"class":47,"line":1768},[45,18922,18668],{"class":69},[45,18924,2126],{"class":55},[45,18926,18927],{"class":47,"line":1774},[45,18928,2180],{"class":55},[45,18930,18931,18933,18935,18938,18940],{"class":47,"line":1779},[45,18932,3601],{"class":55},[45,18934,1320],{"class":51},[45,18936,18937],{"class":62},"\"Person构造函数无参构造\"",[45,18939,1320],{"class":51},[45,18941,1343],{"class":55},[45,18943,18944],{"class":47,"line":1793},[45,18945,2337],{"class":55},[45,18947,18948,18950,18952,18954,18956],{"class":47,"line":1798},[45,18949,18668],{"class":69},[45,18951,282],{"class":55},[45,18953,285],{"class":51},[45,18955,1550],{"class":5366},[45,18957,139],{"class":55},[45,18959,18960],{"class":47,"line":1804},[45,18961,2180],{"class":55},[45,18963,18964,18967,18969],{"class":47,"line":1825},[45,18965,18966],{"class":55},"        age",[45,18968,59],{"class":51},[45,18970,6347],{"class":55},[45,18972,18973,18975,18977,18980,18982],{"class":47,"line":1830},[45,18974,3601],{"class":55},[45,18976,1320],{"class":51},[45,18978,18979],{"class":62},"\"Person构造函数有参构造\"",[45,18981,1320],{"class":51},[45,18983,1343],{"class":55},[45,18985,18986],{"class":47,"line":1844},[45,18987,2337],{"class":55},[45,18989,18990],{"class":47,"line":1849},[45,18991,18696],{"class":337},[45,18993,18994,18996],{"class":47,"line":1878},[45,18995,18701],{"class":69},[45,18997,2126],{"class":55},[45,18999,19000],{"class":47,"line":1883},[45,19001,2180],{"class":55},[45,19003,19004,19006,19008,19011,19013],{"class":47,"line":1900},[45,19005,3601],{"class":55},[45,19007,1320],{"class":51},[45,19009,19010],{"class":62},"\"Person析构函数被调用\"",[45,19012,1320],{"class":51},[45,19014,1343],{"class":55},[45,19016,19017],{"class":47,"line":1905},[45,19018,2337],{"class":55},[45,19020,19021],{"class":47,"line":1910},[45,19022,19023],{"class":337},"    \u002F\u002F拷贝构造函数\n",[45,19025,19026,19028,19030,19032,19034,19036,19038],{"class":47,"line":1915},[45,19027,18668],{"class":69},[45,19029,282],{"class":55},[45,19031,6942],{"class":51},[45,19033,15718],{"class":69},[45,19035,10733],{"class":51},[45,19037,20],{"class":5366},[45,19039,139],{"class":55},[45,19041,19042],{"class":47,"line":1929},[45,19043,2180],{"class":55},[45,19045,19046],{"class":47,"line":1934},[45,19047,19048],{"class":337},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[45,19050,19051,19053,19055],{"class":47,"line":2727},[45,19052,18966],{"class":55},[45,19054,59],{"class":51},[45,19056,19057],{"class":55},"p.age;\n",[45,19059,19060,19062,19064,19067,19069],{"class":47,"line":2741},[45,19061,3601],{"class":55},[45,19063,1320],{"class":51},[45,19065,19066],{"class":62},"\"Person拷贝构造函数被调用\"",[45,19068,1320],{"class":51},[45,19070,1343],{"class":55},[45,19072,19073],{"class":47,"line":2749},[45,19074,2337],{"class":55},[45,19076,19077,19079],{"class":47,"line":2754},[45,19078,2135],{"class":51},[45,19080,7947],{"class":55},[45,19082,19083],{"class":47,"line":2760},[45,19084,4145],{"class":55},[45,19086,19087],{"class":47,"line":2766},[45,19088,19089],{"class":337},"\u002F\u002F调用\n",[45,19091,19092,19094,19096],{"class":47,"line":2771},[45,19093,5514],{"class":51},[45,19095,5738],{"class":69},[45,19097,2126],{"class":55},[45,19099,19100],{"class":47,"line":8098},[45,19101,1697],{"class":55},[45,19103,19104],{"class":47,"line":8122},[45,19105,19106],{"class":337},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[45,19108,19109],{"class":47,"line":8127},[45,19110,1716],{"class":55},[45,19112,19113,19115,19117],{"class":47,"line":8133},[45,19114,5514],{"class":51},[45,19116,5807],{"class":69},[45,19118,2126],{"class":55},[45,19120,19121],{"class":47,"line":8160},[45,19122,1697],{"class":55},[45,19124,19125],{"class":47,"line":8165},[45,19126,19127],{"class":337},"    \u002F\u002F1.括号法\n",[45,19129,19130],{"class":47,"line":8171},[45,19131,19132],{"class":337},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[45,19134,19135],{"class":47,"line":8183},[45,19136,19137],{"class":337},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[45,19139,19140],{"class":47,"line":8195},[45,19141,19142],{"class":337},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[45,19144,19145],{"class":47,"line":8207},[45,19146,19147],{"class":337},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[45,19149,19150],{"class":47,"line":9866},[45,19151,2550],{"emptyLinePlaceholder":207},[45,19153,19154],{"class":47,"line":9890},[45,19155,19156],{"class":337},"    \u002F\u002F注意事项\n",[45,19158,19159],{"class":47,"line":9913},[45,19160,19161],{"class":337},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[45,19163,19164],{"class":47,"line":9937},[45,19165,19166],{"class":337},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[45,19168,19169],{"class":47,"line":9942},[45,19170,19171],{"class":337},"    \u002F\u002F Person p4();\n",[45,19173,19174],{"class":47,"line":9947},[45,19175,2550],{"emptyLinePlaceholder":207},[45,19177,19178],{"class":47,"line":9952},[45,19179,19180],{"class":337},"    \u002F\u002F2.显示法\n",[45,19182,19183],{"class":47,"line":9961},[45,19184,19185],{"class":55},"    Person p1;\n",[45,19187,19188,19191,19193,19196,19198,19200],{"class":47,"line":9966},[45,19189,19190],{"class":55},"    Person p2",[45,19192,59],{"class":51},[45,19194,19195],{"class":69},"Person",[45,19197,282],{"class":55},[45,19199,723],{"class":79},[45,19201,2869],{"class":55},[45,19203,19204,19207,19209,19211],{"class":47,"line":9972},[45,19205,19206],{"class":55},"    Person p3",[45,19208,59],{"class":51},[45,19210,19195],{"class":69},[45,19212,19213],{"class":55},"(p2);\n",[45,19215,19216],{"class":47,"line":9993},[45,19217,19218],{"class":337},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[45,19220,19221],{"class":47,"line":9999},[45,19222,2550],{"emptyLinePlaceholder":207},[45,19224,19225],{"class":47,"line":10013},[45,19226,19227],{"class":337},"    \u002F\u002F 注意事项2\n",[45,19229,19230],{"class":47,"line":10019},[45,19231,19232],{"class":337},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[45,19234,19235],{"class":47,"line":10046},[45,19236,19237],{"class":337},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[45,19239,19240],{"class":47,"line":10055},[45,19241,2550],{"emptyLinePlaceholder":207},[45,19243,19244],{"class":47,"line":10061},[45,19245,19246],{"class":337},"    \u002F\u002F3.隐士转换法\n",[45,19248,19249,19252,19254,19256,19258],{"class":47,"line":10069},[45,19250,19251],{"class":55},"    Person p4",[45,19253,59],{"class":51},[45,19255,723],{"class":79},[45,19257,334],{"class":55},[45,19259,19260],{"class":337},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[45,19262,19263,19266,19268,19271],{"class":47,"line":10074},[45,19264,19265],{"class":55},"    Person p5",[45,19267,59],{"class":51},[45,19269,19270],{"class":55},"p4;",[45,19272,19273],{"class":337}," \u002F\u002F 这里会调用拷贝构造函数\n",[45,19275,19276],{"class":47,"line":16753},[45,19277,1716],{"class":55},[45,19279,19280,19282,19284],{"class":47,"line":16759},[45,19281,285],{"class":51},[45,19283,2123],{"class":69},[45,19285,2126],{"class":55},[45,19287,19288],{"class":47,"line":16782},[45,19289,1697],{"class":55},[45,19291,19292,19294],{"class":47,"line":16788},[45,19293,5783],{"class":69},[45,19295,5786],{"class":55},[45,19297,19298,19300],{"class":47,"line":16811},[45,19299,5852],{"class":69},[45,19301,5786],{"class":55},[45,19303,19304,19306,19308],{"class":47,"line":16825},[45,19305,4240],{"class":51},[45,19307,4243],{"class":79},[45,19309,1442],{"class":55},[45,19311,19312],{"class":47,"line":16845},[45,19313,1716],{"class":55},[20,19315,19316,19319],{},[427,19317,19318],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[249,19321,19323],{"id":19322},"_823拷贝构造函数","8.2.3拷贝构造函数",[20,19325,19326],{},"C++中拷贝构造函数调用时机通常有三种情况",[166,19328,19329,19332,19335],{},[169,19330,19331],{},"使用一个已经创建完毕的对象来初始化一个新对象",[169,19333,19334],{},"值传递的方式给函数参数传值",[169,19336,19337],{},"以值方式返回局部对象",[36,19339,19341],{"className":270,"code":19340,"language":272,"meta":25,"style":25},"#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",[42,19342,19343,19349,19359,19363,19368,19372,19377,19382,19387,19393,19397,19401,19407,19411,19424,19428,19433,19445,19449,19457,19470,19474,19478,19494,19498,19507,19520,19524,19530,19534,19546,19550,19556,19560,19564,19572,19576,19589,19597,19615,19619,19624,19629,19644,19648,19661,19665,19673,19677,19681,19689,19693,19698,19707,19711,19715,19740,19750,19754,19762,19766,19777,19802,19806,19810,19814,19822,19826,19831,19836,19843,19848,19853,19858,19863,19867,19872,19876,19881,19885,19890,19895,19899,19903,19908,19913,19921],{"__ignoreMap":25},[45,19344,19345,19347],{"class":47,"line":48},[45,19346,2100],{"class":51},[45,19348,2103],{"class":62},[45,19350,19351,19353,19355,19357],{"class":47,"line":66},[45,19352,2108],{"class":51},[45,19354,2111],{"class":51},[45,19356,2114],{"class":69},[45,19358,1442],{"class":55},[45,19360,19361],{"class":47,"line":1331},[45,19362,2550],{"emptyLinePlaceholder":207},[45,19364,19365],{"class":47,"line":1346},[45,19366,19367],{"class":337},"\u002F\u002F拷贝构造函数调用时机\n",[45,19369,19370],{"class":47,"line":1352},[45,19371,2550],{"emptyLinePlaceholder":207},[45,19373,19374],{"class":47,"line":1366},[45,19375,19376],{"class":337},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[45,19378,19379],{"class":47,"line":1372},[45,19380,19381],{"class":337},"\u002F\u002F2.值传递的方式给函数参数传值\n",[45,19383,19384],{"class":47,"line":1463},[45,19385,19386],{"class":337},"\u002F\u002F3.以值方式返回局部对象\n",[45,19388,19389,19391],{"class":47,"line":1469},[45,19390,14843],{"class":51},[45,19392,15320],{"class":69},[45,19394,19395],{"class":47,"line":1481},[45,19396,1697],{"class":55},[45,19398,19399],{"class":47,"line":1763},[45,19400,14865],{"class":51},[45,19402,19403,19405],{"class":47,"line":1768},[45,19404,18668],{"class":69},[45,19406,2126],{"class":55},[45,19408,19409],{"class":47,"line":1774},[45,19410,2180],{"class":55},[45,19412,19413,19415,19417,19420,19422],{"class":47,"line":1779},[45,19414,9819],{"class":55},[45,19416,1320],{"class":51},[45,19418,19419],{"class":62}," \"Person的默认构造函数调用\"",[45,19421,1596],{"class":51},[45,19423,8990],{"class":55},[45,19425,19426],{"class":47,"line":1793},[45,19427,2337],{"class":55},[45,19429,19430],{"class":47,"line":1798},[45,19431,19432],{"class":337},"    \u002F\u002F有参构造\n",[45,19434,19435,19437,19439,19441,19443],{"class":47,"line":1804},[45,19436,18668],{"class":69},[45,19438,282],{"class":55},[45,19440,285],{"class":51},[45,19442,15838],{"class":5366},[45,19444,139],{"class":55},[45,19446,19447],{"class":47,"line":1825},[45,19448,2180],{"class":55},[45,19450,19451,19453,19455],{"class":47,"line":1830},[45,19452,15892],{"class":55},[45,19454,59],{"class":51},[45,19456,7947],{"class":55},[45,19458,19459,19461,19463,19466,19468],{"class":47,"line":1844},[45,19460,9819],{"class":55},[45,19462,1320],{"class":51},[45,19464,19465],{"class":62}," \"Person的有参构造函数调用\"",[45,19467,1596],{"class":51},[45,19469,8990],{"class":55},[45,19471,19472],{"class":47,"line":1849},[45,19473,2337],{"class":55},[45,19475,19476],{"class":47,"line":1878},[45,19477,19023],{"class":337},[45,19479,19480,19482,19484,19486,19488,19490,19492],{"class":47,"line":1883},[45,19481,18668],{"class":69},[45,19483,282],{"class":55},[45,19485,6942],{"class":51},[45,19487,15718],{"class":69},[45,19489,10733],{"class":51},[45,19491,20],{"class":5366},[45,19493,139],{"class":55},[45,19495,19496],{"class":47,"line":1900},[45,19497,2180],{"class":55},[45,19499,19500,19502,19504],{"class":47,"line":1905},[45,19501,15892],{"class":55},[45,19503,59],{"class":51},[45,19505,19506],{"class":55}," p.m_Age;\n",[45,19508,19509,19511,19513,19516,19518],{"class":47,"line":1910},[45,19510,9819],{"class":55},[45,19512,1320],{"class":51},[45,19514,19515],{"class":62}," \"Person的拷贝构造函数调用\"",[45,19517,1596],{"class":51},[45,19519,8990],{"class":55},[45,19521,19522],{"class":47,"line":1915},[45,19523,2337],{"class":55},[45,19525,19526,19528],{"class":47,"line":1929},[45,19527,18701],{"class":69},[45,19529,2126],{"class":55},[45,19531,19532],{"class":47,"line":1934},[45,19533,2180],{"class":55},[45,19535,19536,19538,19540,19542,19544],{"class":47,"line":2727},[45,19537,9819],{"class":55},[45,19539,1320],{"class":51},[45,19541,18716],{"class":62},[45,19543,1596],{"class":51},[45,19545,8990],{"class":55},[45,19547,19548],{"class":47,"line":2741},[45,19549,2337],{"class":55},[45,19551,19552,19554],{"class":47,"line":2749},[45,19553,2135],{"class":51},[45,19555,15815],{"class":55},[45,19557,19558],{"class":47,"line":2754},[45,19559,4145],{"class":55},[45,19561,19562],{"class":47,"line":2760},[45,19563,19376],{"class":337},[45,19565,19566,19568,19570],{"class":47,"line":2766},[45,19567,5514],{"class":51},[45,19569,5738],{"class":69},[45,19571,2126],{"class":55},[45,19573,19574],{"class":47,"line":2771},[45,19575,1697],{"class":55},[45,19577,19578,19581,19583,19585,19587],{"class":47,"line":8098},[45,19579,19580],{"class":55},"    Person ",[45,19582,7280],{"class":69},[45,19584,282],{"class":55},[45,19586,977],{"class":79},[45,19588,2869],{"class":55},[45,19590,19591,19593,19595],{"class":47,"line":8122},[45,19592,19580],{"class":55},[45,19594,7183],{"class":69},[45,19596,17664],{"class":55},[45,19598,19599,19601,19603,19606,19608,19611,19613],{"class":47,"line":8127},[45,19600,1702],{"class":55},[45,19602,1320],{"class":51},[45,19604,19605],{"class":62},"\"P2的年龄为：\"",[45,19607,1320],{"class":51},[45,19609,19610],{"class":55},"p2.m_Age",[45,19612,1320],{"class":51},[45,19614,1343],{"class":55},[45,19616,19617],{"class":47,"line":8133},[45,19618,1716],{"class":55},[45,19620,19621],{"class":47,"line":8160},[45,19622,19623],{"class":337},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[45,19625,19626],{"class":47,"line":8165},[45,19627,19628],{"class":337},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[45,19630,19631,19633,19636,19638,19640,19642],{"class":47,"line":8171},[45,19632,5514],{"class":51},[45,19634,19635],{"class":69}," doWork",[45,19637,282],{"class":55},[45,19639,19195],{"class":69},[45,19641,6975],{"class":5366},[45,19643,139],{"class":55},[45,19645,19646],{"class":47,"line":8183},[45,19647,1697],{"class":55},[45,19649,19650,19652,19654,19657,19659],{"class":47,"line":8195},[45,19651,6679],{"class":55},[45,19653,1320],{"class":51},[45,19655,19656],{"class":62}," \"doWork函数调用\"",[45,19658,1596],{"class":51},[45,19660,8990],{"class":55},[45,19662,19663],{"class":47,"line":8207},[45,19664,1716],{"class":55},[45,19666,19667,19669,19671],{"class":47,"line":9866},[45,19668,5514],{"class":51},[45,19670,5807],{"class":69},[45,19672,2126],{"class":55},[45,19674,19675],{"class":47,"line":9890},[45,19676,1697],{"class":55},[45,19678,19679],{"class":47,"line":9913},[45,19680,15462],{"class":55},[45,19682,19683,19686],{"class":47,"line":9937},[45,19684,19685],{"class":69},"    doWork",[45,19687,19688],{"class":55},"(p);\n",[45,19690,19691],{"class":47,"line":9942},[45,19692,1716],{"class":55},[45,19694,19695],{"class":47,"line":9947},[45,19696,19697],{"class":337},"\u002F\u002F 3.以值方式返回局部对象\n",[45,19699,19700,19702,19705],{"class":47,"line":9952},[45,19701,19195],{"class":69},[45,19703,19704],{"class":69}," doWork2",[45,19706,2126],{"class":55},[45,19708,19709],{"class":47,"line":9961},[45,19710,1697],{"class":55},[45,19712,19713],{"class":47,"line":9966},[45,19714,19185],{"class":55},[45,19716,19717,19719,19721,19723,19725,19727,19729,19731,19733,19735,19737],{"class":47,"line":9972},[45,19718,1702],{"class":55},[45,19720,1320],{"class":51},[45,19722,282],{"class":55},[45,19724,285],{"class":51},[45,19726,6668],{"class":51},[45,19728,706],{"class":55},[45,19730,630],{"class":51},[45,19732,7280],{"class":55},[45,19734,1320],{"class":51},[45,19736,1390],{"class":55},[45,19738,19739],{"class":337},"\u002F\u002F打印p1的地址\n",[45,19741,19742,19744,19747],{"class":47,"line":9993},[45,19743,4240],{"class":51},[45,19745,19746],{"class":55}," p1;",[45,19748,19749],{"class":337},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[45,19751,19752],{"class":47,"line":9999},[45,19753,1716],{"class":55},[45,19755,19756,19758,19760],{"class":47,"line":10013},[45,19757,5514],{"class":51},[45,19759,5879],{"class":69},[45,19761,2126],{"class":55},[45,19763,19764],{"class":47,"line":10019},[45,19765,1697],{"class":55},[45,19767,19768,19771,19773,19775],{"class":47,"line":10046},[45,19769,19770],{"class":55},"    Person p ",[45,19772,59],{"class":51},[45,19774,19704],{"class":69},[45,19776,5786],{"class":55},[45,19778,19779,19781,19783,19785,19787,19789,19791,19793,19795,19797,19799],{"class":47,"line":10055},[45,19780,1702],{"class":55},[45,19782,1320],{"class":51},[45,19784,282],{"class":55},[45,19786,285],{"class":51},[45,19788,6668],{"class":51},[45,19790,706],{"class":55},[45,19792,630],{"class":51},[45,19794,20],{"class":55},[45,19796,1320],{"class":51},[45,19798,1390],{"class":55},[45,19800,19801],{"class":337},"\u002F\u002F打印p的地址\n",[45,19803,19804],{"class":47,"line":10061},[45,19805,1716],{"class":55},[45,19807,19808],{"class":47,"line":10069},[45,19809,2550],{"emptyLinePlaceholder":207},[45,19811,19812],{"class":47,"line":10074},[45,19813,2550],{"emptyLinePlaceholder":207},[45,19815,19816,19818,19820],{"class":47,"line":16753},[45,19817,285],{"class":51},[45,19819,2123],{"class":69},[45,19821,2126],{"class":55},[45,19823,19824],{"class":47,"line":16759},[45,19825,1697],{"class":55},[45,19827,19828],{"class":47,"line":16782},[45,19829,19830],{"class":337},"    \u002F\u002F test01();\n",[45,19832,19833],{"class":47,"line":16788},[45,19834,19835],{"class":337},"    \u002F\u002F test02();\n",[45,19837,19838,19841],{"class":47,"line":16811},[45,19839,19840],{"class":69},"    test03",[45,19842,5786],{"class":55},[45,19844,19845],{"class":47,"line":16825},[45,19846,19847],{"class":337},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[45,19849,19850],{"class":47,"line":16845},[45,19851,19852],{"class":337},"\u002F\u002F 输出结果如下：\n",[45,19854,19855],{"class":47,"line":16851},[45,19856,19857],{"class":337},"\u002F\u002F Person的默认构造函数调用\n",[45,19859,19860],{"class":47,"line":16862},[45,19861,19862],{"class":337},"\u002F\u002F 0x7fffffffceec\n",[45,19864,19865],{"class":47,"line":16885},[45,19866,19862],{"class":337},[45,19868,19869],{"class":47,"line":16907},[45,19870,19871],{"class":337},"\u002F\u002F Person的析构函数调用\n",[45,19873,19874],{"class":47,"line":16912},[45,19875,2550],{"emptyLinePlaceholder":207},[45,19877,19878],{"class":47,"line":16918},[45,19879,19880],{"class":337},"\u002F\u002F 之前的输出结果如下：\n",[45,19882,19883],{"class":47,"line":16932},[45,19884,19857],{"class":337},[45,19886,19887],{"class":47,"line":16945},[45,19888,19889],{"class":337},"\u002F\u002F 地址\n",[45,19891,19892],{"class":47,"line":16950},[45,19893,19894],{"class":337},"\u002F\u002F Person的拷贝构造函数调用\n",[45,19896,19897],{"class":47,"line":16964},[45,19898,19871],{"class":337},[45,19900,19901],{"class":47,"line":16969},[45,19902,19889],{"class":337},[45,19904,19905],{"class":47,"line":16975},[45,19906,19907],{"class":337},"\u002F\u002F (这两次输出的地址也是不同的) \n",[45,19909,19910],{"class":47,"line":16980},[45,19911,19912],{"class":337},"\u002F\u002F Person的析构函数调用     \n",[45,19914,19915,19917,19919],{"class":47,"line":16994},[45,19916,4240],{"class":51},[45,19918,4243],{"class":79},[45,19920,1442],{"class":55},[45,19922,19923],{"class":47,"line":16999},[45,19924,1716],{"class":55},[20,19926,19927],{},"简化版理解",[36,19929,19931],{"className":270,"code":19930,"language":272,"meta":25,"style":25},"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",[42,19932,19933,19941,19945,19951,19964,19975,19979,19991,20004,20012,20016,20032,20045,20054,20058,20063,20069,20082,20086,20090,20097,20101,20105,20110,20118,20122,20138,20151,20164,20168,20173,20181,20185,20189,20194,20199,20215,20223,20230,20236,20240,20244,20249,20257,20261,20265,20288,20295,20299,20303,20311,20315,20325,20347,20351,20355,20359,20367,20371,20376,20381,20387,20391,20401,20405,20413],{"__ignoreMap":25},[45,19934,19935,19937,19939],{"class":47,"line":48},[45,19936,14843],{"class":51},[45,19938,15718],{"class":69},[45,19940,15721],{"class":55},[45,19942,19943],{"class":47,"line":66},[45,19944,14865],{"class":51},[45,19946,19947,19949],{"class":47,"line":1331},[45,19948,18668],{"class":69},[45,19950,11002],{"class":55},[45,19952,19953,19955,19957,19960,19962],{"class":47,"line":1346},[45,19954,9819],{"class":55},[45,19956,1320],{"class":51},[45,19958,19959],{"class":62}," \"无参构造函数!\"",[45,19961,1596],{"class":51},[45,19963,8990],{"class":55},[45,19965,19966,19969,19971,19973],{"class":47,"line":1352},[45,19967,19968],{"class":55},"        mAge ",[45,19970,59],{"class":51},[45,19972,4243],{"class":79},[45,19974,1442],{"class":55},[45,19976,19977],{"class":47,"line":1366},[45,19978,2337],{"class":55},[45,19980,19981,19983,19985,19987,19989],{"class":47,"line":1372},[45,19982,18668],{"class":69},[45,19984,282],{"class":55},[45,19986,285],{"class":51},[45,19988,15838],{"class":5366},[45,19990,12591],{"class":55},[45,19992,19993,19995,19997,20000,20002],{"class":47,"line":1463},[45,19994,9819],{"class":55},[45,19996,1320],{"class":51},[45,19998,19999],{"class":62}," \"有参构造函数!\"",[45,20001,1596],{"class":51},[45,20003,8990],{"class":55},[45,20005,20006,20008,20010],{"class":47,"line":1469},[45,20007,19968],{"class":55},[45,20009,59],{"class":51},[45,20011,7947],{"class":55},[45,20013,20014],{"class":47,"line":1481},[45,20015,2337],{"class":55},[45,20017,20018,20020,20022,20024,20026,20028,20030],{"class":47,"line":1763},[45,20019,18668],{"class":69},[45,20021,282],{"class":55},[45,20023,6942],{"class":51},[45,20025,15718],{"class":69},[45,20027,630],{"class":51},[45,20029,6975],{"class":5366},[45,20031,12591],{"class":55},[45,20033,20034,20036,20038,20041,20043],{"class":47,"line":1768},[45,20035,9819],{"class":55},[45,20037,1320],{"class":51},[45,20039,20040],{"class":62}," \"拷贝构造函数!\"",[45,20042,1596],{"class":51},[45,20044,8990],{"class":55},[45,20046,20047,20049,20051],{"class":47,"line":1774},[45,20048,19968],{"class":55},[45,20050,59],{"class":51},[45,20052,20053],{"class":55}," p.mAge;\n",[45,20055,20056],{"class":47,"line":1779},[45,20057,2337],{"class":55},[45,20059,20060],{"class":47,"line":1793},[45,20061,20062],{"class":337},"    \u002F\u002F析构函数在释放内存之前调用\n",[45,20064,20065,20067],{"class":47,"line":1798},[45,20066,18701],{"class":69},[45,20068,11002],{"class":55},[45,20070,20071,20073,20075,20078,20080],{"class":47,"line":1804},[45,20072,9819],{"class":55},[45,20074,1320],{"class":51},[45,20076,20077],{"class":62}," \"析构函数!\"",[45,20079,1596],{"class":51},[45,20081,8990],{"class":55},[45,20083,20084],{"class":47,"line":1825},[45,20085,2337],{"class":55},[45,20087,20088],{"class":47,"line":1830},[45,20089,14865],{"class":51},[45,20091,20092,20094],{"class":47,"line":1844},[45,20093,2135],{"class":51},[45,20095,20096],{"class":55}," mAge;\n",[45,20098,20099],{"class":47,"line":1849},[45,20100,4145],{"class":55},[45,20102,20103],{"class":47,"line":1878},[45,20104,2550],{"emptyLinePlaceholder":207},[45,20106,20107],{"class":47,"line":1883},[45,20108,20109],{"class":337},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[45,20111,20112,20114,20116],{"class":47,"line":1900},[45,20113,5514],{"class":51},[45,20115,5738],{"class":69},[45,20117,11002],{"class":55},[45,20119,20120],{"class":47,"line":1905},[45,20121,2550],{"emptyLinePlaceholder":207},[45,20123,20124,20126,20129,20131,20133,20135],{"class":47,"line":1910},[45,20125,19580],{"class":55},[45,20127,20128],{"class":69},"man",[45,20130,282],{"class":55},[45,20132,588],{"class":79},[45,20134,6116],{"class":55},[45,20136,20137],{"class":337}," \u002F\u002Fp对象已经创建完毕\n",[45,20139,20140,20142,20145,20148],{"class":47,"line":1915},[45,20141,19580],{"class":55},[45,20143,20144],{"class":69},"newman",[45,20146,20147],{"class":55},"(man);",[45,20149,20150],{"class":337}," \u002F\u002F调用拷贝构造函数\n",[45,20152,20153,20156,20158,20161],{"class":47,"line":1929},[45,20154,20155],{"class":55},"    Person newman2 ",[45,20157,59],{"class":51},[45,20159,20160],{"class":55}," man;",[45,20162,20163],{"class":337}," \u002F\u002F拷贝构造\n",[45,20165,20166],{"class":47,"line":1934},[45,20167,2550],{"emptyLinePlaceholder":207},[45,20169,20170],{"class":47,"line":2727},[45,20171,20172],{"class":337},"    \u002F\u002FPerson newman3;\n",[45,20174,20175,20178],{"class":47,"line":2741},[45,20176,20177],{"class":337},"    \u002F\u002Fnewman3 = man;",[45,20179,20180],{"class":337}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[45,20182,20183],{"class":47,"line":2749},[45,20184,1716],{"class":55},[45,20186,20187],{"class":47,"line":2754},[45,20188,2550],{"emptyLinePlaceholder":207},[45,20190,20191],{"class":47,"line":2760},[45,20192,20193],{"class":337},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[45,20195,20196],{"class":47,"line":2766},[45,20197,20198],{"class":337},"\u002F\u002F相当于Person p1 = p;\n",[45,20200,20201,20203,20205,20207,20209,20212],{"class":47,"line":2771},[45,20202,5514],{"class":51},[45,20204,19635],{"class":69},[45,20206,282],{"class":55},[45,20208,19195],{"class":69},[45,20210,20211],{"class":5366}," p1",[45,20213,20214],{"class":55},") {}\n",[45,20216,20217,20219,20221],{"class":47,"line":8098},[45,20218,5514],{"class":51},[45,20220,5807],{"class":69},[45,20222,11002],{"class":55},[45,20224,20225,20227],{"class":47,"line":8122},[45,20226,18753],{"class":55},[45,20228,20229],{"class":337}," \u002F\u002F无参构造函数\n",[45,20231,20232,20234],{"class":47,"line":8127},[45,20233,19685],{"class":69},[45,20235,19688],{"class":55},[45,20237,20238],{"class":47,"line":8133},[45,20239,1716],{"class":55},[45,20241,20242],{"class":47,"line":8160},[45,20243,2550],{"emptyLinePlaceholder":207},[45,20245,20246],{"class":47,"line":8165},[45,20247,20248],{"class":337},"\u002F\u002F3. 以值方式返回局部对象\n",[45,20250,20251,20253,20255],{"class":47,"line":8171},[45,20252,19195],{"class":69},[45,20254,19704],{"class":69},[45,20256,2126],{"class":55},[45,20258,20259],{"class":47,"line":8183},[45,20260,1697],{"class":55},[45,20262,20263],{"class":47,"line":8195},[45,20264,19185],{"class":55},[45,20266,20267,20269,20271,20273,20275,20277,20279,20281,20284,20286],{"class":47,"line":8207},[45,20268,6679],{"class":55},[45,20270,1320],{"class":51},[45,20272,1809],{"class":55},[45,20274,285],{"class":51},[45,20276,6668],{"class":51},[45,20278,706],{"class":55},[45,20280,630],{"class":51},[45,20282,20283],{"class":55},"p1 ",[45,20285,1320],{"class":51},[45,20287,8990],{"class":55},[45,20289,20290,20292],{"class":47,"line":9866},[45,20291,4240],{"class":51},[45,20293,20294],{"class":55}," p1;\n",[45,20296,20297],{"class":47,"line":9890},[45,20298,1716],{"class":55},[45,20300,20301],{"class":47,"line":9913},[45,20302,2550],{"emptyLinePlaceholder":207},[45,20304,20305,20307,20309],{"class":47,"line":9937},[45,20306,5514],{"class":51},[45,20308,5879],{"class":69},[45,20310,2126],{"class":55},[45,20312,20313],{"class":47,"line":9942},[45,20314,1697],{"class":55},[45,20316,20317,20319,20321,20323],{"class":47,"line":9947},[45,20318,19770],{"class":55},[45,20320,59],{"class":51},[45,20322,19704],{"class":69},[45,20324,5786],{"class":55},[45,20326,20327,20329,20331,20333,20335,20337,20339,20341,20343,20345],{"class":47,"line":9952},[45,20328,6679],{"class":55},[45,20330,1320],{"class":51},[45,20332,1809],{"class":55},[45,20334,285],{"class":51},[45,20336,6668],{"class":51},[45,20338,706],{"class":55},[45,20340,630],{"class":51},[45,20342,11597],{"class":55},[45,20344,1320],{"class":51},[45,20346,8990],{"class":55},[45,20348,20349],{"class":47,"line":9961},[45,20350,1716],{"class":55},[45,20352,20353],{"class":47,"line":9966},[45,20354,2550],{"emptyLinePlaceholder":207},[45,20356,20357],{"class":47,"line":9972},[45,20358,2550],{"emptyLinePlaceholder":207},[45,20360,20361,20363,20365],{"class":47,"line":9993},[45,20362,285],{"class":51},[45,20364,2123],{"class":69},[45,20366,11002],{"class":55},[45,20368,20369],{"class":47,"line":9999},[45,20370,2550],{"emptyLinePlaceholder":207},[45,20372,20373],{"class":47,"line":10013},[45,20374,20375],{"class":337},"    \u002F\u002Ftest01();\n",[45,20377,20378],{"class":47,"line":10019},[45,20379,20380],{"class":337},"    \u002F\u002Ftest02();\n",[45,20382,20383,20385],{"class":47,"line":10046},[45,20384,19840],{"class":69},[45,20386,5786],{"class":55},[45,20388,20389],{"class":47,"line":10055},[45,20390,2550],{"emptyLinePlaceholder":207},[45,20392,20393,20395,20397,20399],{"class":47,"line":10061},[45,20394,2453],{"class":69},[45,20396,282],{"class":55},[45,20398,2458],{"class":62},[45,20400,2869],{"class":55},[45,20402,20403],{"class":47,"line":10069},[45,20404,2550],{"emptyLinePlaceholder":207},[45,20406,20407,20409,20411],{"class":47,"line":10074},[45,20408,4240],{"class":51},[45,20410,4243],{"class":79},[45,20412,1442],{"class":55},[45,20414,20415],{"class":47,"line":16753},[45,20416,1716],{"class":55},[249,20418,20420],{"id":20419},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[20,20422,20423],{},"默认情况下，c++编译器至少给一个类添加3个函数",[20,20425,20426],{},"1．默认构造函数(无参，函数体为空)",[20,20428,20429],{},"2．默认析构函数(无参，函数体为空)",[20,20431,20432],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[20,20434,20435],{},"构造函数调用规则如下：",[166,20437,20438,20441],{},[169,20439,20440],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[169,20442,20443],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[36,20445,20447],{"className":270,"code":20446,"language":272,"meta":25,"style":25},"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",[42,20448,20449,20457,20461,20466,20472,20484,20488,20493,20505,20514,20526,20530,20534,20550,20559,20571,20575,20579,20585,20597,20601,20605,20611,20615,20619,20627,20631,20643,20648,20656,20660,20678,20682,20686,20694,20698,20703,20711,20726,20739,20743,20748,20755,20771,20784,20788,20792,20800,20804,20810,20814,20824,20828,20836],{"__ignoreMap":25},[45,20450,20451,20453,20455],{"class":47,"line":48},[45,20452,14843],{"class":51},[45,20454,15718],{"class":69},[45,20456,15721],{"class":55},[45,20458,20459],{"class":47,"line":66},[45,20460,14865],{"class":51},[45,20462,20463],{"class":47,"line":1331},[45,20464,20465],{"class":337},"    \u002F\u002F无参（默认）构造函数\n",[45,20467,20468,20470],{"class":47,"line":1346},[45,20469,18668],{"class":69},[45,20471,11002],{"class":55},[45,20473,20474,20476,20478,20480,20482],{"class":47,"line":1352},[45,20475,9819],{"class":55},[45,20477,1320],{"class":51},[45,20479,19959],{"class":62},[45,20481,1596],{"class":51},[45,20483,8990],{"class":55},[45,20485,20486],{"class":47,"line":1366},[45,20487,2337],{"class":55},[45,20489,20490],{"class":47,"line":1372},[45,20491,20492],{"class":337},"    \u002F\u002F有参构造函数\n",[45,20494,20495,20497,20499,20501,20503],{"class":47,"line":1463},[45,20496,18668],{"class":69},[45,20498,282],{"class":55},[45,20500,285],{"class":51},[45,20502,1550],{"class":5366},[45,20504,12591],{"class":55},[45,20506,20507,20510,20512],{"class":47,"line":1469},[45,20508,20509],{"class":55},"        age ",[45,20511,59],{"class":51},[45,20513,1584],{"class":55},[45,20515,20516,20518,20520,20522,20524],{"class":47,"line":1481},[45,20517,9819],{"class":55},[45,20519,1320],{"class":51},[45,20521,19999],{"class":62},[45,20523,1596],{"class":51},[45,20525,8990],{"class":55},[45,20527,20528],{"class":47,"line":1763},[45,20529,2337],{"class":55},[45,20531,20532],{"class":47,"line":1768},[45,20533,19023],{"class":337},[45,20535,20536,20538,20540,20542,20544,20546,20548],{"class":47,"line":1774},[45,20537,18668],{"class":69},[45,20539,282],{"class":55},[45,20541,6942],{"class":51},[45,20543,15718],{"class":69},[45,20545,630],{"class":51},[45,20547,6975],{"class":5366},[45,20549,12591],{"class":55},[45,20551,20552,20554,20556],{"class":47,"line":1779},[45,20553,20509],{"class":55},[45,20555,59],{"class":51},[45,20557,20558],{"class":55}," p.age;\n",[45,20560,20561,20563,20565,20567,20569],{"class":47,"line":1793},[45,20562,9819],{"class":55},[45,20564,1320],{"class":51},[45,20566,20040],{"class":62},[45,20568,1596],{"class":51},[45,20570,8990],{"class":55},[45,20572,20573],{"class":47,"line":1798},[45,20574,2337],{"class":55},[45,20576,20577],{"class":47,"line":1804},[45,20578,18696],{"class":337},[45,20580,20581,20583],{"class":47,"line":1825},[45,20582,18701],{"class":69},[45,20584,11002],{"class":55},[45,20586,20587,20589,20591,20593,20595],{"class":47,"line":1830},[45,20588,9819],{"class":55},[45,20590,1320],{"class":51},[45,20592,20077],{"class":62},[45,20594,1596],{"class":51},[45,20596,8990],{"class":55},[45,20598,20599],{"class":47,"line":1844},[45,20600,2337],{"class":55},[45,20602,20603],{"class":47,"line":1849},[45,20604,14865],{"class":51},[45,20606,20607,20609],{"class":47,"line":1878},[45,20608,2135],{"class":51},[45,20610,7947],{"class":55},[45,20612,20613],{"class":47,"line":1883},[45,20614,4145],{"class":55},[45,20616,20617],{"class":47,"line":1900},[45,20618,2550],{"emptyLinePlaceholder":207},[45,20620,20621,20623,20625],{"class":47,"line":1905},[45,20622,5514],{"class":51},[45,20624,5738],{"class":69},[45,20626,2126],{"class":55},[45,20628,20629],{"class":47,"line":1910},[45,20630,1697],{"class":55},[45,20632,20633,20635,20637,20639,20641],{"class":47,"line":1915},[45,20634,19580],{"class":55},[45,20636,7280],{"class":69},[45,20638,282],{"class":55},[45,20640,927],{"class":79},[45,20642,2869],{"class":55},[45,20644,20645],{"class":47,"line":1929},[45,20646,20647],{"class":337},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[45,20649,20650,20652,20654],{"class":47,"line":1934},[45,20651,19580],{"class":55},[45,20653,7183],{"class":69},[45,20655,17664],{"class":55},[45,20657,20658],{"class":47,"line":2727},[45,20659,2550],{"emptyLinePlaceholder":207},[45,20661,20662,20664,20666,20669,20671,20674,20676],{"class":47,"line":2741},[45,20663,6679],{"class":55},[45,20665,1320],{"class":51},[45,20667,20668],{"class":62}," \"p2的年龄为： \"",[45,20670,1596],{"class":51},[45,20672,20673],{"class":55}," p2.age ",[45,20675,1320],{"class":51},[45,20677,8990],{"class":55},[45,20679,20680],{"class":47,"line":2749},[45,20681,1716],{"class":55},[45,20683,20684],{"class":47,"line":2754},[45,20685,2550],{"emptyLinePlaceholder":207},[45,20687,20688,20690,20692],{"class":47,"line":2760},[45,20689,5514],{"class":51},[45,20691,5807],{"class":69},[45,20693,2126],{"class":55},[45,20695,20696],{"class":47,"line":2766},[45,20697,1697],{"class":55},[45,20699,20700],{"class":47,"line":2771},[45,20701,20702],{"class":337},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[45,20704,20705,20708],{"class":47,"line":8098},[45,20706,20707],{"class":55},"    Person p1;",[45,20709,20710],{"class":337}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[45,20712,20713,20715,20717,20719,20721,20723],{"class":47,"line":8122},[45,20714,19580],{"class":55},[45,20716,7183],{"class":69},[45,20718,282],{"class":55},[45,20720,723],{"class":79},[45,20722,6116],{"class":55},[45,20724,20725],{"class":337}," \u002F\u002F用户提供的有参\n",[45,20727,20728,20730,20733,20736],{"class":47,"line":8127},[45,20729,19580],{"class":55},[45,20731,20732],{"class":69},"p3",[45,20734,20735],{"class":55},"(p2);",[45,20737,20738],{"class":337}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[45,20740,20741],{"class":47,"line":8133},[45,20742,2550],{"emptyLinePlaceholder":207},[45,20744,20745],{"class":47,"line":8160},[45,20746,20747],{"class":337},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[45,20749,20750,20753],{"class":47,"line":8165},[45,20751,20752],{"class":55},"    Person p4;",[45,20754,20710],{"class":337},[45,20756,20757,20759,20762,20764,20766,20768],{"class":47,"line":8171},[45,20758,19580],{"class":55},[45,20760,20761],{"class":69},"p5",[45,20763,282],{"class":55},[45,20765,723],{"class":79},[45,20767,6116],{"class":55},[45,20769,20770],{"class":337}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[45,20772,20773,20775,20778,20781],{"class":47,"line":8183},[45,20774,19580],{"class":55},[45,20776,20777],{"class":69},"p6",[45,20779,20780],{"class":55},"(p5);",[45,20782,20783],{"class":337}," \u002F\u002F用户自己提供拷贝构造\n",[45,20785,20786],{"class":47,"line":8195},[45,20787,1716],{"class":55},[45,20789,20790],{"class":47,"line":8207},[45,20791,2550],{"emptyLinePlaceholder":207},[45,20793,20794,20796,20798],{"class":47,"line":9866},[45,20795,285],{"class":51},[45,20797,2123],{"class":69},[45,20799,11002],{"class":55},[45,20801,20802],{"class":47,"line":9890},[45,20803,2550],{"emptyLinePlaceholder":207},[45,20805,20806,20808],{"class":47,"line":9913},[45,20807,5783],{"class":69},[45,20809,5786],{"class":55},[45,20811,20812],{"class":47,"line":9937},[45,20813,2550],{"emptyLinePlaceholder":207},[45,20815,20816,20818,20820,20822],{"class":47,"line":9942},[45,20817,2453],{"class":69},[45,20819,282],{"class":55},[45,20821,2458],{"class":62},[45,20823,2869],{"class":55},[45,20825,20826],{"class":47,"line":9947},[45,20827,2550],{"emptyLinePlaceholder":207},[45,20829,20830,20832,20834],{"class":47,"line":9952},[45,20831,4240],{"class":51},[45,20833,4243],{"class":79},[45,20835,1442],{"class":55},[45,20837,20838],{"class":47,"line":9961},[45,20839,1716],{"class":55},[249,20841,20843],{"id":20842},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[20,20845,20846],{},"浅拷贝：简单的赋值拷贝操作",[20,20848,20849],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[36,20851,20853],{"className":270,"code":20852,"language":272,"meta":25,"style":25},"#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",[42,20854,20855,20861,20871,20877,20881,20885,20890,20896,20900,20913,20917,20921,20928,20932,20942,20957,20970,20974,20979,20984,21000,21004,21017,21022,21027,21032,21041,21046,21061,21065,21069,21073,21079,21083,21088,21103,21107,21118,21132,21136,21145,21149,21155,21167,21171,21179,21183,21200,21231,21239,21267,21271,21275,21283,21287,21293],{"__ignoreMap":25},[45,20856,20857,20859],{"class":47,"line":48},[45,20858,2100],{"class":51},[45,20860,2103],{"class":62},[45,20862,20863,20865,20867,20869],{"class":47,"line":66},[45,20864,2108],{"class":51},[45,20866,2111],{"class":51},[45,20868,2114],{"class":69},[45,20870,1442],{"class":55},[45,20872,20873,20875],{"class":47,"line":1331},[45,20874,14843],{"class":51},[45,20876,15320],{"class":69},[45,20878,20879],{"class":47,"line":1346},[45,20880,1697],{"class":55},[45,20882,20883],{"class":47,"line":1352},[45,20884,14865],{"class":51},[45,20886,20887],{"class":47,"line":1366},[45,20888,20889],{"class":337},"    \u002F\u002F默认构造函数\n",[45,20891,20892,20894],{"class":47,"line":1372},[45,20893,18668],{"class":69},[45,20895,2126],{"class":55},[45,20897,20898],{"class":47,"line":1463},[45,20899,2180],{"class":55},[45,20901,20902,20904,20906,20909,20911],{"class":47,"line":1469},[45,20903,3601],{"class":55},[45,20905,1320],{"class":51},[45,20907,20908],{"class":62},"\"默认构造函数\"",[45,20910,1320],{"class":51},[45,20912,1343],{"class":55},[45,20914,20915],{"class":47,"line":1481},[45,20916,2337],{"class":55},[45,20918,20919],{"class":47,"line":1763},[45,20920,20492],{"class":337},[45,20922,20923,20925],{"class":47,"line":1768},[45,20924,18701],{"class":69},[45,20926,20927],{"class":55},"(int age,int height)\n",[45,20929,20930],{"class":47,"line":1774},[45,20931,2180],{"class":55},[45,20933,20934,20937,20939],{"class":47,"line":1779},[45,20935,20936],{"class":55},"        m_Age",[45,20938,59],{"class":51},[45,20940,20941],{"class":55},"age;\n",[45,20943,20944,20947,20949,20951,20954],{"class":47,"line":1793},[45,20945,20946],{"class":55},"        m_Height",[45,20948,11866],{"class":51},[45,20950,2532],{"class":51},[45,20952,20953],{"class":55},"(height);",[45,20955,20956],{"class":337},"\u002F\u002F放到堆区\n",[45,20958,20959,20961,20963,20966,20968],{"class":47,"line":1798},[45,20960,3601],{"class":55},[45,20962,1320],{"class":51},[45,20964,20965],{"class":62},"\"有参构造函数\"",[45,20967,1320],{"class":51},[45,20969,1343],{"class":55},[45,20971,20972],{"class":47,"line":1804},[45,20973,2337],{"class":55},[45,20975,20976],{"class":47,"line":1825},[45,20977,20978],{"class":337},"    \u002F\u002F深拷贝解决上述问题\n",[45,20980,20981],{"class":47,"line":1830},[45,20982,20983],{"class":337},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[45,20985,20986,20988,20990,20992,20994,20996,20998],{"class":47,"line":1844},[45,20987,18668],{"class":69},[45,20989,282],{"class":55},[45,20991,6942],{"class":51},[45,20993,15718],{"class":69},[45,20995,10733],{"class":51},[45,20997,20],{"class":5366},[45,20999,139],{"class":55},[45,21001,21002],{"class":47,"line":1849},[45,21003,2180],{"class":55},[45,21005,21006,21008,21010,21013,21015],{"class":47,"line":1878},[45,21007,3601],{"class":55},[45,21009,1320],{"class":51},[45,21011,21012],{"class":62},"\"拷贝构造函数\"",[45,21014,1320],{"class":51},[45,21016,1343],{"class":55},[45,21018,21019],{"class":47,"line":1883},[45,21020,21021],{"class":337},"        \u002F\u002F编译器默认的写如下注释部分\n",[45,21023,21024],{"class":47,"line":1900},[45,21025,21026],{"class":337},"        \u002F\u002Fm_Age=p.m_Age;\n",[45,21028,21029],{"class":47,"line":1905},[45,21030,21031],{"class":337},"        \u002F\u002Fm_Height=p.m_Height;\n",[45,21033,21034,21036,21038],{"class":47,"line":1910},[45,21035,20936],{"class":55},[45,21037,59],{"class":51},[45,21039,21040],{"class":55},"p.m_Age;\n",[45,21042,21043],{"class":47,"line":1915},[45,21044,21045],{"class":337},"        \u002F\u002F深拷贝操作\n",[45,21047,21048,21050,21052,21054,21056,21058],{"class":47,"line":1929},[45,21049,20946],{"class":55},[45,21051,11866],{"class":51},[45,21053,2532],{"class":51},[45,21055,282],{"class":55},[45,21057,732],{"class":51},[45,21059,21060],{"class":55},"p.m_Height);\n",[45,21062,21063],{"class":47,"line":1934},[45,21064,2337],{"class":55},[45,21066,21067],{"class":47,"line":2727},[45,21068,2550],{"emptyLinePlaceholder":207},[45,21070,21071],{"class":47,"line":2741},[45,21072,18696],{"class":337},[45,21074,21075,21077],{"class":47,"line":2749},[45,21076,18701],{"class":69},[45,21078,2126],{"class":55},[45,21080,21081],{"class":47,"line":2754},[45,21082,2180],{"class":55},[45,21084,21085],{"class":47,"line":2760},[45,21086,21087],{"class":337},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[45,21089,21090,21092,21095,21098,21101],{"class":47,"line":2766},[45,21091,2647],{"class":51},[45,21093,21094],{"class":55},"(m_Height ",[45,21096,21097],{"class":51},"!=",[45,21099,21100],{"class":79}," NULL",[45,21102,139],{"class":55},[45,21104,21105],{"class":47,"line":2771},[45,21106,2660],{"class":55},[45,21108,21109,21112,21115],{"class":47,"line":8098},[45,21110,21111],{"class":51},"            delete",[45,21113,21114],{"class":55}," m_Height;",[45,21116,21117],{"class":337}," \u002F\u002F释放堆区内存\n",[45,21119,21120,21123,21125,21127,21129],{"class":47,"line":8122},[45,21121,21122],{"class":55},"            m_Height",[45,21124,59],{"class":51},[45,21126,2542],{"class":79},[45,21128,334],{"class":55},[45,21130,21131],{"class":337}," \u002F\u002F防止野指针\n",[45,21133,21134],{"class":47,"line":8127},[45,21135,2679],{"class":55},[45,21137,21138,21140,21142],{"class":47,"line":8133},[45,21139,3601],{"class":55},[45,21141,1320],{"class":51},[45,21143,21144],{"class":62},"\"Person的析构函数调用\"\n",[45,21146,21147],{"class":47,"line":8160},[45,21148,2337],{"class":55},[45,21150,21151,21153],{"class":47,"line":8165},[45,21152,2135],{"class":51},[45,21154,15815],{"class":55},[45,21156,21157,21159,21161,21164],{"class":47,"line":8171},[45,21158,2135],{"class":51},[45,21160,6668],{"class":51},[45,21162,21163],{"class":55},"m_Height;",[45,21165,21166],{"class":337}," \u002F\u002F定义一个指针，指向身高\n",[45,21168,21169],{"class":47,"line":8183},[45,21170,4145],{"class":55},[45,21172,21173,21175,21177],{"class":47,"line":8195},[45,21174,5514],{"class":51},[45,21176,5738],{"class":69},[45,21178,2126],{"class":55},[45,21180,21181],{"class":47,"line":8207},[45,21182,1697],{"class":55},[45,21184,21185,21187,21189,21191,21193,21195,21198],{"class":47,"line":9866},[45,21186,19580],{"class":55},[45,21188,7280],{"class":69},[45,21190,282],{"class":55},[45,21192,927],{"class":79},[45,21194,655],{"class":55},[45,21196,21197],{"class":79},"160",[45,21199,2869],{"class":55},[45,21201,21202,21204,21206,21209,21211,21214,21216,21219,21221,21224,21226,21228],{"class":47,"line":9890},[45,21203,1702],{"class":55},[45,21205,1320],{"class":51},[45,21207,21208],{"class":62},"\"p1的年龄为:\"",[45,21210,1320],{"class":51},[45,21212,21213],{"class":55},"p1.m_Age",[45,21215,1320],{"class":51},[45,21217,21218],{"class":62},"\"身高为：\"",[45,21220,6569],{"class":51},[45,21222,21223],{"class":55},"p1.m_Height",[45,21225,1320],{"class":51},[45,21227,1390],{"class":55},[45,21229,21230],{"class":337},"  \u002F\u002F18\n",[45,21232,21233,21235,21237],{"class":47,"line":9913},[45,21234,19580],{"class":55},[45,21236,7183],{"class":69},[45,21238,17664],{"class":55},[45,21240,21241,21243,21245,21248,21250,21252,21254,21256,21258,21261,21263,21265],{"class":47,"line":9937},[45,21242,1702],{"class":55},[45,21244,1320],{"class":51},[45,21246,21247],{"class":62},"\"p2的年龄为：\"",[45,21249,1320],{"class":51},[45,21251,19610],{"class":55},[45,21253,1320],{"class":51},[45,21255,21218],{"class":62},[45,21257,6569],{"class":51},[45,21259,21260],{"class":55},"p2.m_Height",[45,21262,1320],{"class":51},[45,21264,1390],{"class":55},[45,21266,21230],{"class":337},[45,21268,21269],{"class":47,"line":9942},[45,21270,13359],{"class":55},[45,21272,21273],{"class":47,"line":9947},[45,21274,1716],{"class":55},[45,21276,21277,21279,21281],{"class":47,"line":9952},[45,21278,285],{"class":51},[45,21280,2123],{"class":69},[45,21282,2126],{"class":55},[45,21284,21285],{"class":47,"line":9961},[45,21286,1697],{"class":55},[45,21288,21289,21291],{"class":47,"line":9966},[45,21290,5783],{"class":69},[45,21292,5786],{"class":55},[45,21294,21295],{"class":47,"line":9972},[45,21296,1716],{"class":55},[20,21298,21299],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[20,21301,21302],{},"浅拷贝带来的问题是堆区的内存重复释放",[20,21304,21305],{},[23,21306],{"alt":25,"src":21307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[20,21309,21310],{},"浅拷贝问题要使用深拷贝来解决",[20,21312,21313],{},[23,21314],{"alt":25,"src":21315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[20,21317,21318],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[249,21320,21322],{"id":21321},"_826初始化列表","8.2.6初始化列表",[20,21324,21325],{},"作用：初始化属性",[20,21327,5331],{},[36,21329,21332],{"className":21330,"code":21331,"language":5337},[5335],"构造函数():属性1(值1),属性2(值2).....{}\n",[42,21333,21331],{"__ignoreMap":25},[20,21335,21336],{},"例子",[36,21338,21340],{"className":270,"code":21339,"language":272,"meta":25,"style":25},"#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",[42,21341,21342,21348,21358,21364,21368,21373,21377,21382,21387,21392,21397,21402,21407,21411,21416,21421,21464,21473,21491,21509,21527,21531,21535,21542,21549,21556,21560,21564,21572,21576,21580,21600,21609,21613,21617,21627,21631,21639],{"__ignoreMap":25},[45,21343,21344,21346],{"class":47,"line":48},[45,21345,2100],{"class":51},[45,21347,2103],{"class":62},[45,21349,21350,21352,21354,21356],{"class":47,"line":66},[45,21351,2108],{"class":51},[45,21353,2111],{"class":51},[45,21355,2114],{"class":69},[45,21357,1442],{"class":55},[45,21359,21360,21362],{"class":47,"line":1331},[45,21361,14843],{"class":51},[45,21363,15320],{"class":69},[45,21365,21366],{"class":47,"line":1346},[45,21367,1697],{"class":55},[45,21369,21370],{"class":47,"line":1352},[45,21371,21372],{"class":51},"    public:\n",[45,21374,21375],{"class":47,"line":1366},[45,21376,2550],{"emptyLinePlaceholder":207},[45,21378,21379],{"class":47,"line":1372},[45,21380,21381],{"class":337},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[45,21383,21384],{"class":47,"line":1463},[45,21385,21386],{"class":337},"    \u002F\u002FPerson(int a, int b, int c) {\n",[45,21388,21389],{"class":47,"line":1469},[45,21390,21391],{"class":337},"    \u002F\u002F  m_A = a;\n",[45,21393,21394],{"class":47,"line":1481},[45,21395,21396],{"class":337},"    \u002F\u002F  m_B = b;\n",[45,21398,21399],{"class":47,"line":1763},[45,21400,21401],{"class":337},"    \u002F\u002F  m_C = c;\n",[45,21403,21404],{"class":47,"line":1768},[45,21405,21406],{"class":337},"    \u002F\u002F}\n",[45,21408,21409],{"class":47,"line":1774},[45,21410,2550],{"emptyLinePlaceholder":207},[45,21412,21413],{"class":47,"line":1779},[45,21414,21415],{"class":337},"    \u002F\u002F初始化列表方式初始化\n",[45,21417,21418],{"class":47,"line":1793},[45,21419,21420],{"class":337},"    \u002F\u002F使用有参构造函数\n",[45,21422,21423,21425,21427,21429,21431,21433,21435,21437,21439,21441,21443,21446,21449,21452,21455,21458,21461],{"class":47,"line":1798},[45,21424,18668],{"class":69},[45,21426,282],{"class":55},[45,21428,285],{"class":51},[45,21430,1550],{"class":5366},[45,21432,12584],{"class":55},[45,21434,285],{"class":51},[45,21436,2983],{"class":5366},[45,21438,12584],{"class":55},[45,21440,285],{"class":51},[45,21442,2999],{"class":5366},[45,21444,21445],{"class":55},") :",[45,21447,21448],{"class":69},"m_A",[45,21450,21451],{"class":55},"(a), ",[45,21453,21454],{"class":69},"m_B",[45,21456,21457],{"class":55},"(b), ",[45,21459,21460],{"class":69},"m_C",[45,21462,21463],{"class":55},"(c) {}\n",[45,21465,21466,21468,21471],{"class":47,"line":1804},[45,21467,15058],{"class":51},[45,21469,21470],{"class":69}," PrintPerson",[45,21472,11002],{"class":55},[45,21474,21475,21477,21479,21482,21484,21487,21489],{"class":47,"line":1825},[45,21476,9819],{"class":55},[45,21478,1320],{"class":51},[45,21480,21481],{"class":62}," \"mA:\"",[45,21483,1596],{"class":51},[45,21485,21486],{"class":55}," m_A ",[45,21488,1320],{"class":51},[45,21490,8990],{"class":55},[45,21492,21493,21495,21497,21500,21502,21505,21507],{"class":47,"line":1830},[45,21494,9819],{"class":55},[45,21496,1320],{"class":51},[45,21498,21499],{"class":62}," \"mB:\"",[45,21501,1596],{"class":51},[45,21503,21504],{"class":55}," m_B ",[45,21506,1320],{"class":51},[45,21508,8990],{"class":55},[45,21510,21511,21513,21515,21518,21520,21523,21525],{"class":47,"line":1844},[45,21512,9819],{"class":55},[45,21514,1320],{"class":51},[45,21516,21517],{"class":62}," \"mC:\"",[45,21519,1596],{"class":51},[45,21521,21522],{"class":55}," m_C ",[45,21524,1320],{"class":51},[45,21526,8990],{"class":55},[45,21528,21529],{"class":47,"line":1849},[45,21530,2337],{"class":55},[45,21532,21533],{"class":47,"line":1878},[45,21534,15371],{"class":51},[45,21536,21537,21539],{"class":47,"line":1883},[45,21538,2135],{"class":51},[45,21540,21541],{"class":55}," m_A;\n",[45,21543,21544,21546],{"class":47,"line":1900},[45,21545,2135],{"class":51},[45,21547,21548],{"class":55}," m_B;\n",[45,21550,21551,21553],{"class":47,"line":1905},[45,21552,2135],{"class":51},[45,21554,21555],{"class":55}," m_C;\n",[45,21557,21558],{"class":47,"line":1910},[45,21559,4145],{"class":55},[45,21561,21562],{"class":47,"line":1915},[45,21563,2550],{"emptyLinePlaceholder":207},[45,21565,21566,21568,21570],{"class":47,"line":1929},[45,21567,285],{"class":51},[45,21569,2123],{"class":69},[45,21571,6128],{"class":55},[45,21573,21574],{"class":47,"line":1934},[45,21575,1697],{"class":55},[45,21577,21578],{"class":47,"line":2727},[45,21579,2550],{"emptyLinePlaceholder":207},[45,21581,21582,21584,21586,21588,21590,21592,21594,21596,21598],{"class":47,"line":2741},[45,21583,19580],{"class":55},[45,21585,20],{"class":69},[45,21587,282],{"class":55},[45,21589,495],{"class":79},[45,21591,12584],{"class":55},[45,21593,356],{"class":79},[45,21595,12584],{"class":55},[45,21597,350],{"class":79},[45,21599,2869],{"class":55},[45,21601,21602,21604,21607],{"class":47,"line":2749},[45,21603,16015],{"class":55},[45,21605,21606],{"class":69},"PrintPerson",[45,21608,5786],{"class":55},[45,21610,21611],{"class":47,"line":2754},[45,21612,2550],{"emptyLinePlaceholder":207},[45,21614,21615],{"class":47,"line":2760},[45,21616,2550],{"emptyLinePlaceholder":207},[45,21618,21619,21621,21623,21625],{"class":47,"line":2766},[45,21620,2453],{"class":69},[45,21622,282],{"class":55},[45,21624,2458],{"class":62},[45,21626,2869],{"class":55},[45,21628,21629],{"class":47,"line":2771},[45,21630,2550],{"emptyLinePlaceholder":207},[45,21632,21633,21635,21637],{"class":47,"line":8098},[45,21634,4240],{"class":51},[45,21636,4243],{"class":79},[45,21638,1442],{"class":55},[45,21640,21641],{"class":47,"line":8122},[45,21642,1716],{"class":55},[20,21644,21645,21646,21649,21650],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[427,21647,21648],{},"参数名就是定义的对象属性","，",[427,21651,21652],{},"属性后面的值为有参构造函数的形参",[36,21654,21656],{"className":270,"code":21655,"language":272,"meta":25,"style":25},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[42,21657,21658],{"__ignoreMap":25},[45,21659,21660,21662,21664,21666,21669,21671,21674,21676,21679,21681,21684,21686,21689,21691],{"class":47,"line":48},[45,21661,19195],{"class":69},[45,21663,282],{"class":55},[45,21665,285],{"class":51},[45,21667,21668],{"class":55}," a.",[45,21670,285],{"class":51},[45,21672,21673],{"class":55}," b,",[45,21675,285],{"class":51},[45,21677,21678],{"class":55}," b):",[45,21680,21448],{"class":69},[45,21682,21683],{"class":55},"(a),",[45,21685,21454],{"class":69},[45,21687,21688],{"class":55},"(c),",[45,21690,21460],{"class":69},[45,21692,21693],{"class":55},"(b) {}\n",[249,21695,21697],{"id":21696},"_827类对象作为类成员","8.2.7类对象作为类成员",[20,21699,21700],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[20,21702,14782],{},[36,21704,21706],{"className":270,"code":21705,"language":272,"meta":25,"style":25},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[42,21707,21708,21713,21718,21722,21727,21731],{"__ignoreMap":25},[45,21709,21710],{"class":47,"line":48},[45,21711,21712],{"class":55},"A{};\n",[45,21714,21715],{"class":47,"line":66},[45,21716,21717],{"class":55},"B\n",[45,21719,21720],{"class":47,"line":1331},[45,21721,1697],{"class":55},[45,21723,21724],{"class":47,"line":1346},[45,21725,21726],{"class":55},"    A a;\n",[45,21728,21729],{"class":47,"line":1352},[45,21730,1716],{"class":55},[45,21732,21733],{"class":47,"line":1366},[45,21734,21735],{"class":337},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[20,21737,21738],{},"案例",[36,21740,21742],{"className":270,"code":21741,"language":272,"meta":25,"style":25},"\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",[42,21743,21744,21749,21756,21760,21765,21770,21784,21788,21798,21809,21813,21820,21824,21837,21841,21846,21851,21855,21861,21865,21869,21873,21904,21908,21919,21923,21929,21933,21946,21950,21954,21958,21963,21968,21972,21980,21984,22001,22020,22024,22032,22036,22042],{"__ignoreMap":25},[45,21745,21746],{"class":47,"line":48},[45,21747,21748],{"class":337},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[45,21750,21751,21753],{"class":47,"line":66},[45,21752,14843],{"class":51},[45,21754,21755],{"class":69}," Phone\n",[45,21757,21758],{"class":47,"line":1331},[45,21759,1697],{"class":55},[45,21761,21762],{"class":47,"line":1346},[45,21763,21764],{"class":55},"public：\n",[45,21766,21767],{"class":47,"line":1352},[45,21768,21769],{"class":337},"    \u002F\u002F 赋值(构造函数)\n",[45,21771,21772,21775,21777,21779,21782],{"class":47,"line":1366},[45,21773,21774],{"class":69},"    Phone",[45,21776,282],{"class":55},[45,21778,15066],{"class":69},[45,21780,21781],{"class":5366}," pName",[45,21783,139],{"class":55},[45,21785,21786],{"class":47,"line":1372},[45,21787,2180],{"class":55},[45,21789,21790,21793,21795],{"class":47,"line":1463},[45,21791,21792],{"class":55},"        m_pName",[45,21794,59],{"class":51},[45,21796,21797],{"class":55},"pName;\n",[45,21799,21800,21802,21804,21807],{"class":47,"line":1469},[45,21801,3601],{"class":55},[45,21803,1320],{"class":51},[45,21805,21806],{"class":62},"\"Phone的构造函数调用\"",[45,21808,1442],{"class":55},[45,21810,21811],{"class":47,"line":1481},[45,21812,2337],{"class":55},[45,21814,21815,21818],{"class":47,"line":1763},[45,21816,21817],{"class":69},"    ~Phone",[45,21819,2126],{"class":55},[45,21821,21822],{"class":47,"line":1768},[45,21823,2180],{"class":55},[45,21825,21826,21828,21830,21833,21835],{"class":47,"line":1774},[45,21827,3601],{"class":55},[45,21829,1320],{"class":51},[45,21831,21832],{"class":62},"\"Phone析构函数调用\"",[45,21834,1320],{"class":51},[45,21836,1343],{"class":55},[45,21838,21839],{"class":47,"line":1779},[45,21840,2337],{"class":55},[45,21842,21843],{"class":47,"line":1793},[45,21844,21845],{"class":337},"    \u002F\u002F\n",[45,21847,21848],{"class":47,"line":1798},[45,21849,21850],{"class":55},"    string m_PName;\n",[45,21852,21853],{"class":47,"line":1804},[45,21854,4145],{"class":55},[45,21856,21857,21859],{"class":47,"line":1825},[45,21858,14843],{"class":51},[45,21860,15320],{"class":69},[45,21862,21863],{"class":47,"line":1830},[45,21864,1697],{"class":55},[45,21866,21867],{"class":47,"line":1844},[45,21868,14865],{"class":51},[45,21870,21871],{"class":47,"line":1849},[45,21872,17143],{"class":337},[45,21874,21875,21877,21879,21881,21883,21885,21887,21890,21893,21895,21898,21901],{"class":47,"line":1878},[45,21876,18668],{"class":69},[45,21878,282],{"class":55},[45,21880,15066],{"class":69},[45,21882,15069],{"class":5366},[45,21884,655],{"class":55},[45,21886,15066],{"class":69},[45,21888,21889],{"class":5366}," pname",[45,21891,21892],{"class":55},"):",[45,21894,15159],{"class":69},[45,21896,21897],{"class":55},"(name),m_phone.",[45,21899,21900],{"class":69},"m_PName",[45,21902,21903],{"class":55},"(pname) \n",[45,21905,21906],{"class":47,"line":1883},[45,21907,2180],{"class":55},[45,21909,21910,21912,21914,21917],{"class":47,"line":1900},[45,21911,3601],{"class":55},[45,21913,1320],{"class":51},[45,21915,21916],{"class":62},"\"Person的构造函数调用\"",[45,21918,1442],{"class":55},[45,21920,21921],{"class":47,"line":1905},[45,21922,2337],{"class":55},[45,21924,21925,21927],{"class":47,"line":1910},[45,21926,18701],{"class":69},[45,21928,2126],{"class":55},[45,21930,21931],{"class":47,"line":1915},[45,21932,2180],{"class":55},[45,21934,21935,21937,21939,21942,21944],{"class":47,"line":1929},[45,21936,3601],{"class":55},[45,21938,1320],{"class":51},[45,21940,21941],{"class":62},"\"Person析构函数调用\"",[45,21943,1320],{"class":51},[45,21945,1343],{"class":55},[45,21947,21948],{"class":47,"line":1934},[45,21949,2337],{"class":55},[45,21951,21952],{"class":47,"line":2727},[45,21953,7930],{"class":337},[45,21955,21956],{"class":47,"line":2741},[45,21957,15041],{"class":55},[45,21959,21960],{"class":47,"line":2749},[45,21961,21962],{"class":337},"    \u002F\u002F手机\n",[45,21964,21965],{"class":47,"line":2754},[45,21966,21967],{"class":55},"    Phone m_Phone;\n",[45,21969,21970],{"class":47,"line":2760},[45,21971,4145],{"class":55},[45,21973,21974,21976,21978],{"class":47,"line":2766},[45,21975,5514],{"class":51},[45,21977,5738],{"class":69},[45,21979,2126],{"class":55},[45,21981,21982],{"class":47,"line":2771},[45,21983,1697],{"class":55},[45,21985,21986,21988,21990,21992,21994,21996,21999],{"class":47,"line":8098},[45,21987,19580],{"class":55},[45,21989,20],{"class":69},[45,21991,282],{"class":55},[45,21993,8066],{"class":62},[45,21995,655],{"class":55},[45,21997,21998],{"class":62},"\"安卓\"",[45,22000,2869],{"class":55},[45,22002,22003,22005,22007,22010,22012,22015,22017],{"class":47,"line":8122},[45,22004,1702],{"class":55},[45,22006,1320],{"class":51},[45,22008,22009],{"class":55},"p.Name",[45,22011,1320],{"class":51},[45,22013,22014],{"class":62},"\"拿着：\"",[45,22016,1320],{"class":51},[45,22018,22019],{"class":55},"p.m_phone.m_PName;\n",[45,22021,22022],{"class":47,"line":8127},[45,22023,1716],{"class":55},[45,22025,22026,22028,22030],{"class":47,"line":8133},[45,22027,285],{"class":51},[45,22029,2123],{"class":69},[45,22031,2126],{"class":55},[45,22033,22034],{"class":47,"line":8160},[45,22035,1697],{"class":55},[45,22037,22038,22040],{"class":47,"line":8165},[45,22039,5783],{"class":69},[45,22041,5786],{"class":55},[45,22043,22044],{"class":47,"line":8171},[45,22045,1716],{"class":55},[20,22047,9175],{},[36,22049,22051],{"className":270,"code":22050,"language":272,"meta":25,"style":25},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[42,22052,22053,22058],{"__ignoreMap":25},[45,22054,22055],{"class":47,"line":48},[45,22056,22057],{"class":337},"    \u002F\u002F不需要写这个：\n",[45,22059,22060],{"class":47,"line":66},[45,22061,22062],{"class":337},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[20,22064,22065],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[36,22067,22069],{"className":270,"code":22068,"language":272,"meta":25,"style":25},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[42,22070,22071],{"__ignoreMap":25},[45,22072,22073,22075,22078,22080,22083,22086],{"class":47,"line":48},[45,22074,19195],{"class":69},[45,22076,22077],{"class":55},"(string name.string pname):",[45,22079,15159],{"class":69},[45,22081,22082],{"class":55},"(name),",[45,22084,22085],{"class":69},"m_phone",[45,22087,22088],{"class":55},"(pname) {}\n",[20,22090,22091,22092,59,22095],{},"采用的是隐式转换法，实际为如下：\n",[42,22093,22094],{},"m_phone(pname)",[42,22096,22097],{},"Phone m_phone=pname",[20,22099,22100,22103],{},[427,22101,22102],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[20,22105,22106],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[249,22108,22110],{"id":22109},"_828静态对象","8.2.8静态对象",[20,22112,22113],{},"静态对象在成员对象前static，称为静态对象",[20,22115,22116],{},"静态对象分为两类：",[233,22118,22119],{},[169,22120,22121],{},"静态成员变量",[166,22123,22124,22127,22130],{},[169,22125,22126],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[169,22128,22129],{},"②在编译阶段分配内存",[169,22131,22132],{},"③类内声明，类外初始化",[233,22134,22135],{"start":66},[169,22136,22137],{},"静态成员函数",[166,22139,22140,22143],{},[169,22141,22142],{},"①所有对象共享同一个函数",[169,22144,22145],{},"②静态成员函数只能访问静态成员变量",[22147,22148,22150],"h4",{"id":22149},"_8281静态成员变量","8.2.8.1静态成员变量",[36,22152,22154],{"className":270,"code":22153,"language":272,"meta":25,"style":25},"#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",[42,22155,22156,22162,22172,22178,22182,22186,22191,22196,22201,22209,22213,22217,22221,22229,22233,22237,22242,22255,22259,22267,22271,22277],{"__ignoreMap":25},[45,22157,22158,22160],{"class":47,"line":48},[45,22159,2100],{"class":51},[45,22161,2103],{"class":62},[45,22163,22164,22166,22168,22170],{"class":47,"line":66},[45,22165,2108],{"class":51},[45,22167,2111],{"class":51},[45,22169,2114],{"class":69},[45,22171,1442],{"class":55},[45,22173,22174,22176],{"class":47,"line":1331},[45,22175,14843],{"class":51},[45,22177,15320],{"class":69},[45,22179,22180],{"class":47,"line":1346},[45,22181,1697],{"class":55},[45,22183,22184],{"class":47,"line":1352},[45,22185,14865],{"class":51},[45,22187,22188],{"class":47,"line":1366},[45,22189,22190],{"class":337},"    \u002F\u002F非静态成员变量\n",[45,22192,22193],{"class":47,"line":1372},[45,22194,22195],{"class":337},"    \u002F\u002F int m_A;\n",[45,22197,22198],{"class":47,"line":1463},[45,22199,22200],{"class":337},"    \u002F\u002F定义静态成员变量\n",[45,22202,22203,22205,22207],{"class":47,"line":1469},[45,22204,11169],{"class":51},[45,22206,2532],{"class":51},[45,22208,21541],{"class":55},[45,22210,22211],{"class":47,"line":1481},[45,22212,2550],{"emptyLinePlaceholder":207},[45,22214,22215],{"class":47,"line":1763},[45,22216,2550],{"emptyLinePlaceholder":207},[45,22218,22219],{"class":47,"line":1768},[45,22220,4145],{"class":55},[45,22222,22223,22225,22227],{"class":47,"line":1774},[45,22224,5514],{"class":51},[45,22226,5738],{"class":69},[45,22228,2126],{"class":55},[45,22230,22231],{"class":47,"line":1779},[45,22232,1697],{"class":55},[45,22234,22235],{"class":47,"line":1793},[45,22236,15462],{"class":55},[45,22238,22239],{"class":47,"line":1798},[45,22240,22241],{"class":337},"    \u002F\u002F输出类成员变量这块内存\n",[45,22243,22244,22246,22248,22251,22253],{"class":47,"line":1804},[45,22245,1702],{"class":55},[45,22247,1320],{"class":51},[45,22249,22250],{"class":55},"p.m_A",[45,22252,1320],{"class":51},[45,22254,1343],{"class":55},[45,22256,22257],{"class":47,"line":1825},[45,22258,1716],{"class":55},[45,22260,22261,22263,22265],{"class":47,"line":1830},[45,22262,285],{"class":51},[45,22264,2123],{"class":69},[45,22266,2126],{"class":55},[45,22268,22269],{"class":47,"line":1844},[45,22270,1697],{"class":55},[45,22272,22273,22275],{"class":47,"line":1849},[45,22274,5783],{"class":69},[45,22276,2126],{"class":55},[45,22278,22279],{"class":47,"line":1878},[45,22280,1716],{"class":55},[20,22282,22283],{},"此时输出是报错的：无法解析外部命令",[20,22285,22286],{},"解决这一问题：必须用到类内声明，类外初始化操作",[36,22288,22290],{"className":270,"code":22289,"language":272,"meta":25,"style":25},"#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",[42,22291,22292,22298,22308,22314,22318,22322,22327,22335,22339,22344,22359,22367,22371,22375,22380,22385,22397,22402,22413,22418,22423,22436,22440,22448,22452,22458],{"__ignoreMap":25},[45,22293,22294,22296],{"class":47,"line":48},[45,22295,2100],{"class":51},[45,22297,2103],{"class":62},[45,22299,22300,22302,22304,22306],{"class":47,"line":66},[45,22301,2108],{"class":51},[45,22303,2111],{"class":51},[45,22305,2114],{"class":69},[45,22307,1442],{"class":55},[45,22309,22310,22312],{"class":47,"line":1331},[45,22311,14843],{"class":51},[45,22313,15320],{"class":69},[45,22315,22316],{"class":47,"line":1346},[45,22317,1697],{"class":55},[45,22319,22320],{"class":47,"line":1352},[45,22321,14865],{"class":51},[45,22323,22324],{"class":47,"line":1366},[45,22325,22326],{"class":337},"    \u002F\u002F类内声明\n",[45,22328,22329,22331,22333],{"class":47,"line":1372},[45,22330,11169],{"class":51},[45,22332,2532],{"class":51},[45,22334,21541],{"class":55},[45,22336,22337],{"class":47,"line":1463},[45,22338,4145],{"class":55},[45,22340,22341],{"class":47,"line":1469},[45,22342,22343],{"class":337},"\u002F\u002F类外初始化\n",[45,22345,22346,22348,22350,22353,22355,22357],{"class":47,"line":1481},[45,22347,285],{"class":51},[45,22349,15718],{"class":69},[45,22351,22352],{"class":55},"::m_A",[45,22354,59],{"class":51},[45,22356,723],{"class":79},[45,22358,1442],{"class":55},[45,22360,22361,22363,22365],{"class":47,"line":1763},[45,22362,5514],{"class":51},[45,22364,5738],{"class":69},[45,22366,2126],{"class":55},[45,22368,22369],{"class":47,"line":1768},[45,22370,1697],{"class":55},[45,22372,22373],{"class":47,"line":1774},[45,22374,15462],{"class":55},[45,22376,22377],{"class":47,"line":1779},[45,22378,22379],{"class":337},"    \u002F\u002F访问变量的原内存空间\n",[45,22381,22382],{"class":47,"line":1793},[45,22383,22384],{"class":337},"    \u002F\u002F100\n",[45,22386,22387,22389,22391,22393,22395],{"class":47,"line":1798},[45,22388,1702],{"class":55},[45,22390,1320],{"class":51},[45,22392,22250],{"class":55},[45,22394,1320],{"class":51},[45,22396,1343],{"class":55},[45,22398,22399],{"class":47,"line":1804},[45,22400,22401],{"class":55},"    Person p2;\n",[45,22403,22404,22407,22409,22411],{"class":47,"line":1825},[45,22405,22406],{"class":55},"    p2.m_A",[45,22408,59],{"class":51},[45,22410,1873],{"class":79},[45,22412,1442],{"class":55},[45,22414,22415],{"class":47,"line":1830},[45,22416,22417],{"class":337},"    \u002F\u002F继续访问这片空间\n",[45,22419,22420],{"class":47,"line":1844},[45,22421,22422],{"class":337},"    \u002F\u002F200\n",[45,22424,22425,22427,22429,22432,22434],{"class":47,"line":1849},[45,22426,1702],{"class":55},[45,22428,1320],{"class":51},[45,22430,22431],{"class":55},"p2.m_A",[45,22433,1320],{"class":51},[45,22435,1343],{"class":55},[45,22437,22438],{"class":47,"line":1878},[45,22439,1716],{"class":55},[45,22441,22442,22444,22446],{"class":47,"line":1883},[45,22443,285],{"class":51},[45,22445,2123],{"class":69},[45,22447,2126],{"class":55},[45,22449,22450],{"class":47,"line":1900},[45,22451,1697],{"class":55},[45,22453,22454,22456],{"class":47,"line":1905},[45,22455,5783],{"class":69},[45,22457,5786],{"class":55},[45,22459,22460],{"class":47,"line":1910},[45,22461,1716],{"class":55},[20,22463,22464],{},[427,22465,22466],{},"静态变量的访问",[36,22468,22470],{"className":270,"code":22469,"language":272,"meta":25,"style":25},"#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",[42,22471,22472,22478,22488,22494,22498,22502,22506,22514,22518,22523,22531,22535,22539,22553,22568,22576,22580,22585,22590,22595,22600,22612,22617,22622,22636,22653,22657,22665,22669,22675],{"__ignoreMap":25},[45,22473,22474,22476],{"class":47,"line":48},[45,22475,2100],{"class":51},[45,22477,2103],{"class":62},[45,22479,22480,22482,22484,22486],{"class":47,"line":66},[45,22481,2108],{"class":51},[45,22483,2111],{"class":51},[45,22485,2114],{"class":69},[45,22487,1442],{"class":55},[45,22489,22490,22492],{"class":47,"line":1331},[45,22491,14843],{"class":51},[45,22493,15320],{"class":69},[45,22495,22496],{"class":47,"line":1346},[45,22497,1697],{"class":55},[45,22499,22500],{"class":47,"line":1352},[45,22501,14865],{"class":51},[45,22503,22504],{"class":47,"line":1366},[45,22505,22326],{"class":337},[45,22507,22508,22510,22512],{"class":47,"line":1372},[45,22509,11169],{"class":51},[45,22511,2532],{"class":51},[45,22513,21541],{"class":55},[45,22515,22516],{"class":47,"line":1463},[45,22517,15371],{"class":51},[45,22519,22520],{"class":47,"line":1469},[45,22521,22522],{"class":337},"    \u002F\u002F静态成员变量也是有访问权限的\n",[45,22524,22525,22527,22529],{"class":47,"line":1481},[45,22526,11169],{"class":51},[45,22528,2532],{"class":51},[45,22530,21548],{"class":55},[45,22532,22533],{"class":47,"line":1763},[45,22534,4145],{"class":55},[45,22536,22537],{"class":47,"line":1768},[45,22538,22343],{"class":337},[45,22540,22541,22543,22545,22547,22549,22551],{"class":47,"line":1774},[45,22542,285],{"class":51},[45,22544,15718],{"class":69},[45,22546,22352],{"class":55},[45,22548,59],{"class":51},[45,22550,723],{"class":79},[45,22552,1442],{"class":55},[45,22554,22555,22557,22559,22562,22564,22566],{"class":47,"line":1779},[45,22556,285],{"class":51},[45,22558,15718],{"class":69},[45,22560,22561],{"class":55},"::m_B",[45,22563,59],{"class":51},[45,22565,977],{"class":79},[45,22567,1442],{"class":55},[45,22569,22570,22572,22574],{"class":47,"line":1793},[45,22571,5514],{"class":51},[45,22573,5807],{"class":69},[45,22575,2126],{"class":55},[45,22577,22578],{"class":47,"line":1798},[45,22579,1697],{"class":55},[45,22581,22582],{"class":47,"line":1804},[45,22583,22584],{"class":337},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[45,22586,22587],{"class":47,"line":1825},[45,22588,22589],{"class":337},"    \u002F\u002F静态成员变量有两种访问方式：\n",[45,22591,22592],{"class":47,"line":1830},[45,22593,22594],{"class":337},"    \u002F\u002F1.通过对象进行访问\n",[45,22596,22597],{"class":47,"line":1844},[45,22598,22599],{"class":55},"    Person p;  \n",[45,22601,22602,22604,22606,22608,22610],{"class":47,"line":1849},[45,22603,1702],{"class":55},[45,22605,1320],{"class":51},[45,22607,22250],{"class":55},[45,22609,1320],{"class":51},[45,22611,1343],{"class":55},[45,22613,22614],{"class":47,"line":1878},[45,22615,22616],{"class":337},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[45,22618,22619],{"class":47,"line":1883},[45,22620,22621],{"class":337},"    \u002F\u002F2.通过类名进行访问\n",[45,22623,22624,22626,22628,22630,22632,22634],{"class":47,"line":1900},[45,22625,1702],{"class":55},[45,22627,1320],{"class":51},[45,22629,19195],{"class":69},[45,22631,22352],{"class":55},[45,22633,1320],{"class":51},[45,22635,1343],{"class":55},[45,22637,22638,22640,22642,22644,22646,22648,22650],{"class":47,"line":1905},[45,22639,1702],{"class":55},[45,22641,1320],{"class":51},[45,22643,19195],{"class":69},[45,22645,22561],{"class":55},[45,22647,1320],{"class":51},[45,22649,1390],{"class":55},[45,22651,22652],{"class":337}," \u002F\u002F没有访问权限，报错\n",[45,22654,22655],{"class":47,"line":1910},[45,22656,1716],{"class":55},[45,22658,22659,22661,22663],{"class":47,"line":1915},[45,22660,285],{"class":51},[45,22662,2123],{"class":69},[45,22664,2126],{"class":55},[45,22666,22667],{"class":47,"line":1929},[45,22668,1697],{"class":55},[45,22670,22671,22673],{"class":47,"line":1934},[45,22672,5852],{"class":69},[45,22674,5786],{"class":55},[45,22676,22677],{"class":47,"line":2727},[45,22678,1716],{"class":55},[22147,22680,22682],{"id":22681},"_8282静态成员函数","8.2.8.2静态成员函数",[20,22684,22685],{},"1.静态成员函数定义与访问",[36,22687,22689],{"className":270,"code":22688,"language":272,"meta":25,"style":25},"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",[42,22690,22691,22697,22701,22705,22710,22721,22725,22739,22743,22747,22755,22759,22764,22769,22773,22781,22786,22796],{"__ignoreMap":25},[45,22692,22693,22695],{"class":47,"line":48},[45,22694,14843],{"class":51},[45,22696,15320],{"class":69},[45,22698,22699],{"class":47,"line":66},[45,22700,1697],{"class":55},[45,22702,22703],{"class":47,"line":1331},[45,22704,14865],{"class":51},[45,22706,22707],{"class":47,"line":1346},[45,22708,22709],{"class":337},"    \u002F\u002F在公共权限下定义静态成员函数\n",[45,22711,22712,22714,22717,22719],{"class":47,"line":1352},[45,22713,11169],{"class":51},[45,22715,22716],{"class":51}," void",[45,22718,11534],{"class":69},[45,22720,2126],{"class":55},[45,22722,22723],{"class":47,"line":1366},[45,22724,2180],{"class":55},[45,22726,22727,22730,22732,22735,22737],{"class":47,"line":1372},[45,22728,22729],{"class":55},"        coout",[45,22731,1320],{"class":51},[45,22733,22734],{"class":62},"\"静态成员函数的调用\"",[45,22736,1320],{"class":51},[45,22738,1343],{"class":55},[45,22740,22741],{"class":47,"line":1463},[45,22742,2337],{"class":55},[45,22744,22745],{"class":47,"line":1469},[45,22746,4145],{"class":55},[45,22748,22749,22751,22753],{"class":47,"line":1481},[45,22750,5514],{"class":51},[45,22752,5738],{"class":69},[45,22754,2126],{"class":55},[45,22756,22757],{"class":47,"line":1763},[45,22758,1697],{"class":55},[45,22760,22761],{"class":47,"line":1768},[45,22762,22763],{"class":337},"    \u002F\u002F静态成员函数的调用方式:\n",[45,22765,22766],{"class":47,"line":1774},[45,22767,22768],{"class":337},"    \u002F\u002F1.通过对象访问\n",[45,22770,22771],{"class":47,"line":1779},[45,22772,15462],{"class":55},[45,22774,22775,22777,22779],{"class":47,"line":1793},[45,22776,16015],{"class":55},[45,22778,11700],{"class":69},[45,22780,5786],{"class":55},[45,22782,22783],{"class":47,"line":1798},[45,22784,22785],{"class":337},"    \u002F\u002F2.通过类名访问\n",[45,22787,22788,22790,22792,22794],{"class":47,"line":1804},[45,22789,18668],{"class":69},[45,22791,17881],{"class":55},[45,22793,11700],{"class":69},[45,22795,5786],{"class":55},[45,22797,22798],{"class":47,"line":1825},[45,22799,1716],{"class":55},[233,22801,22802],{"start":66},[169,22803,22804],{},"静态成员函数只能访问静态成员变量",[36,22806,22808],{"className":270,"code":22807,"language":272,"meta":25,"style":25},"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",[42,22809,22810,22816,22820,22824,22828,22838,22842,22856,22861,22873,22877,22888,22898,22902,22906,22910,22920,22924,22937,22941,22945,22949,22953,22967,22975,22979,22983,22987,22991,22999,23003,23013,23018,23022,23030,23034,23040],{"__ignoreMap":25},[45,22811,22812,22814],{"class":47,"line":48},[45,22813,14843],{"class":51},[45,22815,15320],{"class":69},[45,22817,22818],{"class":47,"line":66},[45,22819,1697],{"class":55},[45,22821,22822],{"class":47,"line":1331},[45,22823,14865],{"class":51},[45,22825,22826],{"class":47,"line":1346},[45,22827,22709],{"class":337},[45,22829,22830,22832,22834,22836],{"class":47,"line":1352},[45,22831,11169],{"class":51},[45,22833,22716],{"class":51},[45,22835,11534],{"class":69},[45,22837,2126],{"class":55},[45,22839,22840],{"class":47,"line":1366},[45,22841,2180],{"class":55},[45,22843,22844,22847,22849,22851,22853],{"class":47,"line":1372},[45,22845,22846],{"class":55},"        m_A",[45,22848,59],{"class":51},[45,22850,588],{"class":79},[45,22852,334],{"class":55},[45,22854,22855],{"class":337}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[45,22857,22858],{"class":47,"line":1463},[45,22859,22860],{"class":337},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[45,22862,22863,22865,22867,22869,22871],{"class":47,"line":1469},[45,22864,22729],{"class":55},[45,22866,1320],{"class":51},[45,22868,22734],{"class":62},[45,22870,1320],{"class":51},[45,22872,1343],{"class":55},[45,22874,22875],{"class":47,"line":1481},[45,22876,2337],{"class":55},[45,22878,22879,22881,22883,22885],{"class":47,"line":1763},[45,22880,11169],{"class":51},[45,22882,2532],{"class":51},[45,22884,15597],{"class":55},[45,22886,22887],{"class":337}," \u002F\u002F静态成员变量\n",[45,22889,22890,22892,22895],{"class":47,"line":1768},[45,22891,2135],{"class":51},[45,22893,22894],{"class":55}," m_B;",[45,22896,22897],{"class":337}," \u002F\u002F非静态成员变量\n",[45,22899,22900],{"class":47,"line":1774},[45,22901,2550],{"emptyLinePlaceholder":207},[45,22903,22904],{"class":47,"line":1779},[45,22905,15371],{"class":51},[45,22907,22908],{"class":47,"line":1793},[45,22909,22522],{"class":337},[45,22911,22912,22914,22916,22918],{"class":47,"line":1798},[45,22913,11169],{"class":51},[45,22915,22716],{"class":51},[45,22917,13767],{"class":69},[45,22919,2126],{"class":55},[45,22921,22922],{"class":47,"line":1804},[45,22923,2180],{"class":55},[45,22925,22926,22928,22930,22933,22935],{"class":47,"line":1825},[45,22927,3601],{"class":55},[45,22929,1320],{"class":51},[45,22931,22932],{"class":62},"\"这是私有权限下的静态函数调用\"",[45,22934,1320],{"class":51},[45,22936,1343],{"class":55},[45,22938,22939],{"class":47,"line":1830},[45,22940,2337],{"class":55},[45,22942,22943],{"class":47,"line":1844},[45,22944,2550],{"emptyLinePlaceholder":207},[45,22946,22947],{"class":47,"line":1849},[45,22948,2550],{"emptyLinePlaceholder":207},[45,22950,22951],{"class":47,"line":1878},[45,22952,4145],{"class":55},[45,22954,22955,22957,22959,22961,22963,22965],{"class":47,"line":1883},[45,22956,285],{"class":51},[45,22958,15718],{"class":69},[45,22960,22352],{"class":55},[45,22962,59],{"class":51},[45,22964,469],{"class":79},[45,22966,1442],{"class":55},[45,22968,22969,22971,22973],{"class":47,"line":1900},[45,22970,5514],{"class":51},[45,22972,5738],{"class":69},[45,22974,2126],{"class":55},[45,22976,22977],{"class":47,"line":1905},[45,22978,1697],{"class":55},[45,22980,22981],{"class":47,"line":1910},[45,22982,22763],{"class":337},[45,22984,22985],{"class":47,"line":1915},[45,22986,22768],{"class":337},[45,22988,22989],{"class":47,"line":1929},[45,22990,15462],{"class":55},[45,22992,22993,22995,22997],{"class":47,"line":1934},[45,22994,16015],{"class":55},[45,22996,11700],{"class":69},[45,22998,5786],{"class":55},[45,23000,23001],{"class":47,"line":2727},[45,23002,22785],{"class":337},[45,23004,23005,23007,23009,23011],{"class":47,"line":2741},[45,23006,18668],{"class":69},[45,23008,17881],{"class":55},[45,23010,11700],{"class":69},[45,23012,5786],{"class":55},[45,23014,23015],{"class":47,"line":2749},[45,23016,23017],{"class":337},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[45,23019,23020],{"class":47,"line":2754},[45,23021,1716],{"class":55},[45,23023,23024,23026,23028],{"class":47,"line":2760},[45,23025,285],{"class":51},[45,23027,2123],{"class":69},[45,23029,2126],{"class":55},[45,23031,23032],{"class":47,"line":2766},[45,23033,1697],{"class":55},[45,23035,23036,23038],{"class":47,"line":2771},[45,23037,5783],{"class":69},[45,23039,5786],{"class":55},[45,23041,23042],{"class":47,"line":8098},[45,23043,1716],{"class":55},[249,23045,23047],{"id":23046},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22147,23049,23051],{"id":23050},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[20,23053,23054],{},"在c++中，类内的成员变量和成员函数分开存储",[20,23056,23057],{},"只有非静态成员变量才属于类的对象上",[23059,23060,23062],"h5",{"id":23061},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[36,23064,23066],{"className":270,"code":23065,"language":272,"meta":25,"style":25},"#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",[42,23067,23068,23075,23085,23091,23095,23099,23103,23111,23115,23119,23142,23146,23154,23158,23164],{"__ignoreMap":25},[45,23069,23070,23072],{"class":47,"line":48},[45,23071,2100],{"class":51},[45,23073,23074],{"class":62},"\u003Ciostraem>\n",[45,23076,23077,23079,23081,23083],{"class":47,"line":66},[45,23078,2108],{"class":51},[45,23080,2111],{"class":51},[45,23082,2114],{"class":69},[45,23084,1442],{"class":55},[45,23086,23087,23089],{"class":47,"line":1331},[45,23088,14843],{"class":51},[45,23090,15320],{"class":69},[45,23092,23093],{"class":47,"line":1346},[45,23094,1697],{"class":55},[45,23096,23097],{"class":47,"line":1352},[45,23098,2550],{"emptyLinePlaceholder":207},[45,23100,23101],{"class":47,"line":1366},[45,23102,4145],{"class":55},[45,23104,23105,23107,23109],{"class":47,"line":1372},[45,23106,5514],{"class":51},[45,23108,5738],{"class":69},[45,23110,2126],{"class":55},[45,23112,23113],{"class":47,"line":1463},[45,23114,1697],{"class":55},[45,23116,23117],{"class":47,"line":1469},[45,23118,15462],{"class":55},[45,23120,23121,23123,23125,23128,23130,23133,23135,23137,23139],{"class":47,"line":1481},[45,23122,1702],{"class":55},[45,23124,1320],{"class":51},[45,23126,23127],{"class":62},"\"size of p=\"",[45,23129,1320],{"class":51},[45,23131,23132],{"class":69},"sizeoif",[45,23134,6689],{"class":55},[45,23136,1320],{"class":51},[45,23138,1390],{"class":55},[45,23140,23141],{"class":337}," \u002F\u002F查看这个空类的占用的内存空间\n",[45,23143,23144],{"class":47,"line":1763},[45,23145,1716],{"class":55},[45,23147,23148,23150,23152],{"class":47,"line":1768},[45,23149,285],{"class":51},[45,23151,2123],{"class":69},[45,23153,2126],{"class":55},[45,23155,23156],{"class":47,"line":1774},[45,23157,1697],{"class":55},[45,23159,23160,23162],{"class":47,"line":1779},[45,23161,5783],{"class":69},[45,23163,5786],{"class":55},[45,23165,23166],{"class":47,"line":1793},[45,23167,1716],{"class":55},[20,23169,23170],{},"输出结果为：size of p=1",[20,23172,23173],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[20,23175,23176],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23059,23178,23180],{"id":23179},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[36,23182,23184],{"className":270,"code":23183,"language":272,"meta":25,"style":25},"#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",[42,23185,23186,23192,23202,23210,23214,23223,23227,23235,23239,23243,23262,23266,23270,23278,23282,23288],{"__ignoreMap":25},[45,23187,23188,23190],{"class":47,"line":48},[45,23189,2100],{"class":51},[45,23191,2103],{"class":62},[45,23193,23194,23196,23198,23200],{"class":47,"line":66},[45,23195,2108],{"class":51},[45,23197,2111],{"class":51},[45,23199,2114],{"class":69},[45,23201,1442],{"class":55},[45,23203,23204,23206,23208],{"class":47,"line":1331},[45,23205,14843],{"class":51},[45,23207,15718],{"class":69},[45,23209,2824],{"class":55},[45,23211,23212],{"class":47,"line":1346},[45,23213,1697],{"class":55},[45,23215,23216,23218,23220],{"class":47,"line":1352},[45,23217,2135],{"class":51},[45,23219,15597],{"class":55},[45,23221,23222],{"class":337},"\u002F\u002F非静态成员变量\n",[45,23224,23225],{"class":47,"line":1366},[45,23226,4145],{"class":55},[45,23228,23229,23231,23233],{"class":47,"line":1372},[45,23230,5514],{"class":51},[45,23232,5738],{"class":69},[45,23234,2126],{"class":55},[45,23236,23237],{"class":47,"line":1463},[45,23238,1697],{"class":55},[45,23240,23241],{"class":47,"line":1469},[45,23242,15462],{"class":55},[45,23244,23245,23247,23249,23251,23253,23255,23257,23259],{"class":47,"line":1481},[45,23246,1702],{"class":55},[45,23248,1320],{"class":51},[45,23250,23127],{"class":62},[45,23252,1524],{"class":51},[45,23254,6689],{"class":55},[45,23256,1320],{"class":51},[45,23258,1390],{"class":55},[45,23260,23261],{"class":337}," \u002F\u002F查看不是空对象时占用多少内存\n",[45,23263,23264],{"class":47,"line":1763},[45,23265,2550],{"emptyLinePlaceholder":207},[45,23267,23268],{"class":47,"line":1768},[45,23269,1716],{"class":55},[45,23271,23272,23274,23276],{"class":47,"line":1774},[45,23273,285],{"class":51},[45,23275,2123],{"class":69},[45,23277,2126],{"class":55},[45,23279,23280],{"class":47,"line":1779},[45,23281,1697],{"class":55},[45,23283,23284,23286],{"class":47,"line":1793},[45,23285,5783],{"class":69},[45,23287,5786],{"class":55},[45,23289,23290],{"class":47,"line":1798},[45,23291,1716],{"class":55},[20,23293,23294],{},"输出结果：size of p=4",[20,23296,23297],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[233,23299,23300],{},[169,23301,23302],{},"如果加上非静态成员变量，Person类修改如下",[36,23304,23306],{"className":270,"code":23305,"language":272,"meta":25,"style":25},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[42,23307,23308,23314,23318,23324,23332,23336,23341],{"__ignoreMap":25},[45,23309,23310,23312],{"class":47,"line":48},[45,23311,14843],{"class":51},[45,23313,15320],{"class":69},[45,23315,23316],{"class":47,"line":66},[45,23317,1697],{"class":55},[45,23319,23320,23322],{"class":47,"line":1331},[45,23321,2135],{"class":51},[45,23323,21541],{"class":55},[45,23325,23326,23328,23330],{"class":47,"line":1346},[45,23327,11169],{"class":51},[45,23329,2532],{"class":51},[45,23331,21548],{"class":55},[45,23333,23334],{"class":47,"line":1352},[45,23335,4145],{"class":55},[45,23337,23338],{"class":47,"line":1366},[45,23339,23340],{"class":337},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[45,23342,23343,23345,23347,23349,23351,23353],{"class":47,"line":1372},[45,23344,285],{"class":51},[45,23346,15718],{"class":69},[45,23348,22561],{"class":55},[45,23350,59],{"class":51},[45,23352,469],{"class":79},[45,23354,1442],{"class":55},[20,23356,23357],{},"输出结果：4",[20,23359,23360],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[233,23362,23363],{"start":66},[169,23364,23365],{},"加上非静态成员函数",[36,23367,23369],{"className":270,"code":23368,"language":272,"meta":25,"style":25},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[42,23370,23371,23378,23382,23388,23396,23400,23404,23408],{"__ignoreMap":25},[45,23372,23373,23375],{"class":47,"line":48},[45,23374,14843],{"class":51},[45,23376,23377],{"class":69},"  Person\n",[45,23379,23380],{"class":47,"line":66},[45,23381,1697],{"class":55},[45,23383,23384,23386],{"class":47,"line":1331},[45,23385,2135],{"class":51},[45,23387,21541],{"class":55},[45,23389,23390,23392,23394],{"class":47,"line":1346},[45,23391,15058],{"class":51},[45,23393,11534],{"class":69},[45,23395,2126],{"class":55},[45,23397,23398],{"class":47,"line":1352},[45,23399,2180],{"class":55},[45,23401,23402],{"class":47,"line":1366},[45,23403,2550],{"emptyLinePlaceholder":207},[45,23405,23406],{"class":47,"line":1372},[45,23407,2337],{"class":55},[45,23409,23410],{"class":47,"line":1463},[45,23411,4145],{"class":55},[20,23413,23414],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[233,23416,23417],{"start":1331},[169,23418,23419],{},"加上静态成员函数",[36,23421,23423],{"className":270,"code":23422,"language":272,"meta":25,"style":25},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[42,23424,23425,23431,23435,23441,23449,23453,23457,23461,23472,23476,23480,23484],{"__ignoreMap":25},[45,23426,23427,23429],{"class":47,"line":48},[45,23428,14843],{"class":51},[45,23430,23377],{"class":69},[45,23432,23433],{"class":47,"line":66},[45,23434,1697],{"class":55},[45,23436,23437,23439],{"class":47,"line":1331},[45,23438,2135],{"class":51},[45,23440,21541],{"class":55},[45,23442,23443,23445,23447],{"class":47,"line":1346},[45,23444,15058],{"class":51},[45,23446,11534],{"class":69},[45,23448,2126],{"class":55},[45,23450,23451],{"class":47,"line":1352},[45,23452,2180],{"class":55},[45,23454,23455],{"class":47,"line":1366},[45,23456,2550],{"emptyLinePlaceholder":207},[45,23458,23459],{"class":47,"line":1372},[45,23460,2337],{"class":55},[45,23462,23463,23465,23467,23470],{"class":47,"line":1463},[45,23464,11169],{"class":51},[45,23466,22716],{"class":51},[45,23468,23469],{"class":69}," func1",[45,23471,2126],{"class":55},[45,23473,23474],{"class":47,"line":1469},[45,23475,2180],{"class":55},[45,23477,23478],{"class":47,"line":1481},[45,23479,2550],{"emptyLinePlaceholder":207},[45,23481,23482],{"class":47,"line":1763},[45,23483,2337],{"class":55},[45,23485,23486],{"class":47,"line":1768},[45,23487,4145],{"class":55},[20,23489,23357],{},[20,23491,23492],{},"解释：静态成员函数也不属于类上",[196,23494,7824],{},{"title":25,"searchDepth":66,"depth":66,"links":23496},[23497,23503],{"id":14794,"depth":66,"text":14795,"children":23498},[23499,23500,23501,23502],{"id":14798,"depth":1331,"text":14799},{"id":15523,"depth":1331,"text":15524},{"id":15695,"depth":1331,"text":15696},{"id":16154,"depth":1331,"text":16155},{"id":18526,"depth":66,"text":18527,"children":23504},[23505,23506,23507,23508,23509,23510,23511,23512,23513],{"id":18538,"depth":1331,"text":18539},{"id":18831,"depth":1331,"text":18832},{"id":19322,"depth":1331,"text":19323},{"id":20419,"depth":1331,"text":20420},{"id":20842,"depth":1331,"text":20843},{"id":21321,"depth":1331,"text":21322},{"id":21696,"depth":1331,"text":21697},{"id":22109,"depth":1331,"text":22110},{"id":23046,"depth":1331,"text":23047},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14759,"description":23514},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23521,"title":272,"body":23522,"description":204,"extension":205,"meta":23526,"navigation":207,"path":23528,"seo":23529,"stem":23530,"__hash__":23531},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23523,"toc":23524},[],{"title":25,"searchDepth":66,"depth":66,"links":23525},[],{"category":23527},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":272,"description":204},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23533,"title":23534,"body":23535,"description":25,"extension":205,"meta":24124,"navigation":207,"path":24125,"seo":24126,"stem":24127,"__hash__":24128},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23536,"toc":24106},[23537,23540,23544,23547,23550,23553,23571,23576,23579,23582,23585,23588,23593,23596,23601,23604,23607,23611,23614,23617,23623,23626,23644,23648,23652,23655,23660,23663,23667,23670,23683,23686,23690,23693,23696,23699,23724,23727,23736,23747,23762,23794,23798,23805,23813,23817,23820,23823,23828,23832,23835,23838,23843,23846,23850,23853,23856,23861,23864,23868,23873,23877,23944,23948,23951,23954,23957,23960,23963,23969,23988,23991,24005,24014,24018,24021,24024,24029,24032,24037,24042,24045,24048,24053,24058,24061,24066,24071,24074,24079,24084,24087,24090,24095,24098,24103],[10,23538,23534],{"id":23539},"_1强化学习基本认识",[15,23541,23543],{"id":23542},"_11什么是强化学习","1.1.什么是强化学习",[20,23545,23546],{},"强化学习有两部分组成：智能体和环境；",[20,23548,23549],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[20,23551,23552],{},"强化学习与监督学习的区别:",[233,23554,23555,23558,23561,23564],{},[169,23556,23557],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[169,23559,23560],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[169,23562,23563],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[169,23565,23566,23567,23570],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[427,23568,23569],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[20,23572,23573],{},[23,23574],{"alt":25,"src":23575},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[20,23577,23578],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[20,23580,23581],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[20,23583,23584],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[20,23586,23587],{},"获取奖励",[20,23589,23590],{},[23,23591],{"alt":25,"src":23592},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[20,23594,23595],{},"强化学习可以分成标准强化学习和深度强化学习",[20,23597,23598],{},[23,23599],{"alt":25,"src":23600},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[20,23602,23603],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[20,23605,23606],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[15,23608,23610],{"id":23609},"_12强化学习应用场景","1.2.强化学习应用场景",[20,23612,23613],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[20,23615,23616],{},"具身智能中的应用",[20,23618,23619,23622],{},[427,23620,23621],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[20,23624,23625],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[20,23627,23628,23629,23632,23633,23636,23637,23640,23641],{},"机器人是",[427,23630,23631],{},"躯体","，深度学习是",[427,23634,23635],{},"神经元****网络","，VLA是",[427,23638,23639],{},"通用的行为逻辑","，而强化学习是",[427,23642,23643],{},"教练",[15,23645,23647],{"id":23646},"_13序列决策","1.3.序列决策",[249,23649,23651],{"id":23650},"_131智能体与环境","1.3.1.智能体与环境",[20,23653,23654],{},"强化学习研究的问题是智能体agent与环境交互的问题",[20,23656,23657],{},[23,23658],{"alt":25,"src":23659},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[20,23661,23662],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[249,23664,23666],{"id":23665},"_132奖励","1.3.2.奖励",[20,23668,23669],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[20,23671,23672,23673,23682],{},"取某个策略的表现如何。强化学习的目的就是",[427,23674,23675,23676,23681],{},"最大化",[427,23677,23678],{},[427,23679,23680],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[20,23684,23685],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[249,23687,23689],{"id":23688},"_133序列决策","1.3.3.序列决策",[20,23691,23692],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[20,23694,23695],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[20,23697,23698],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[20,23700,23701,23705,23706,23708,23709,23711,23712,23714,23715,13944,23718,13944,23721],{},[23702,23703,23704],"em",{},"Ht"," = ",[23702,23707,873],{},"1*, a",[23702,23710,495],{},", r",[23702,23713,495],{},", . . . ,* ",[23702,23716,23717],{},"ot",[23702,23719,23720],{},", at ,",[23702,23722,23723],{},"rt",[20,23725,23726],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[20,23728,23729,23705,23732,1809,23734,706],{},[23702,23730,23731],{},"st",[23702,23733,331],{},[23702,23735,23704],{},[20,23737,23738,23739,23742,23743,23746],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[427,23740,23741],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[427,23744,23745],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[20,23748,23749,23750,23753,23754,23757,23758,23761],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[427,23751,23752],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[427,23755,23756],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23702,23759,23760],{},"S, A, T, R, Ω, O, γ",")。",[20,23763,23764,23765,23767,23768,23770,23771,282,23773,23776,23777,23779,23780,282,23783,23786,23787,23789,23790,23793],{},"其中 ",[23702,23766,966],{}," 表示状态空间，为隐变量，",[23702,23769,510],{}," 为动作空间，",[23702,23772,991],{},[23702,23774,23775],{},"s ′ |s, a",") 为状态转移概率，",[23702,23778,941],{}," 为奖励函数，",[23702,23781,23782],{},"Ω",[23702,23784,23785],{},"o|s, a",") 为观测概率，",[23702,23788,867],{}," 为观测空间，",[23702,23791,23792],{},"γ"," 为折扣因子。",[15,23795,23797],{"id":23796},"_14动作空间","1.4.动作空间",[20,23799,23800,23801,23804],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[427,23802,23803],{},"动作空间"," ，动作空间分为:",[233,23806,23807,23810],{},[169,23808,23809],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[169,23811,23812],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[15,23814,23816],{"id":23815},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[20,23818,23819],{},"由策略、价值函数、模型三部分组成",[20,23821,23822],{},"这三者组成马尔可夫决策过程",[20,23824,23825],{},[23,23826],{"alt":25,"src":23827},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[249,23829,23831],{"id":23830},"_151策略","1.5.1.策略",[20,23833,23834],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[20,23836,23837],{},"策略可分为两种：",[20,23839,23840],{},[23,23841],{"alt":25,"src":23842},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[20,23844,23845],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[249,23847,23849],{"id":23848},"_152价值函数","1.5.2.价值函数",[20,23851,23852],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[20,23854,23855],{},"价值函数中有一个折扣因子，类似于存款利息",[20,23857,23858],{},[23,23859],{"alt":25,"src":23860},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[20,23862,23863],{},"进入某个状态采取的最优动作可以通过Q函数得到",[249,23865,23867],{"id":23866},"_153模型","1.5.3.模型",[20,23869,23870],{},[23,23871],{"alt":25,"src":23872},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[15,23874,23876],{"id":23875},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[415,23878,23879,23890],{},[418,23880,23881],{},[421,23882,23883,23887],{},[424,23884,23886],{"align":23885},"left","类型",[424,23888,23889],{"align":23885},"特点",[462,23891,23892,23902,23912,23922,23934],{},[421,23893,23894,23899],{},[467,23895,23896],{"align":23885},[427,23897,23898],{},"基于价值的智能体",[467,23900,23901],{"align":23885},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[421,23903,23904,23909],{},[467,23905,23906],{"align":23885},[427,23907,23908],{},"基于策略的智能体",[467,23910,23911],{"align":23885},"直接学习策略，没有学习价值函数",[421,23913,23914,23919],{},[467,23915,23916],{"align":23885},[427,23917,23918],{},"演员-评论员智能体",[467,23920,23921],{"align":23885},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[421,23923,23924,23929],{},[467,23925,23926],{"align":23885},[427,23927,23928],{},"有模型强化学习智能体",[467,23930,23931],{"align":23885},[23,23932],{"alt":25,"src":23933},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[421,23935,23936,23941],{},[467,23937,23938],{"align":23885},[427,23939,23940],{},"免模型强化学习智能体",[467,23942,23943],{"align":23885},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[15,23945,23947],{"id":23946},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[20,23949,23950],{},"学习和规划是序列决策的两个基本问题",[20,23952,23953],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[20,23955,23956],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[20,23958,23959],{},"强化学习用到的库：Gym",[20,23961,23962],{},"Gym可以检验强化学习算法的优劣",[20,23964,23965,23968],{},[427,23966,23967],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[36,23970,23972],{"className":38,"code":23971,"language":40,"meta":25,"style":25},"pip install gym==0.25.2\n",[42,23973,23974],{"__ignoreMap":25},[45,23975,23976,23979,23982,23985],{"class":47,"line":48},[45,23977,23978],{"class":69},"pip",[45,23980,23981],{"class":62}," install",[45,23983,23984],{"class":62}," gym==",[45,23986,23987],{"class":79},"0.25.2\n",[20,23989,23990],{},"显示图形界面需要",[36,23992,23994],{"className":38,"code":23993,"language":40,"meta":25,"style":25},"pip install pygame\n",[42,23995,23996],{"__ignoreMap":25},[45,23997,23998,24000,24002],{"class":47,"line":48},[45,23999,23978],{"class":69},[45,24001,23981],{"class":62},[45,24003,24004],{"class":62}," pygame\n",[20,24006,24007,24008],{},"有关Gym库的相关文档介绍：",[516,24009,24013],{"href":24010,"rel":24011},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24012],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[15,24015,24017],{"id":24016},"_18一些补充基础概念","1.8.一些补充基础概念",[20,24019,24020],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[20,24022,24023],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[20,24025,24026],{},[23,24027],{"alt":25,"src":24028},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[20,24030,24031],{},"折扣率需要自己来设定",[20,24033,24034],{},[23,24035],{"alt":25,"src":24036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[233,24038,24039],{},[169,24040,24041],{},"状态转移函数：",[20,24043,24044],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[20,24046,24047],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[20,24049,24050],{},[23,24051],{"alt":25,"src":24052},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[233,24054,24055],{"start":66},[169,24056,24057],{},"动作价值函数：",[20,24059,24060],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[20,24062,24063],{},[23,24064],{"alt":25,"src":24065},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[233,24067,24068],{"start":1331},[169,24069,24070],{},"最优动作价值函数：",[20,24072,24073],{},"这个函数是对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,24075,24076],{},[23,24077],{"alt":25,"src":24078},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[233,24080,24081],{"start":1346},[169,24082,24083],{},"状态价值函数:",[20,24085,24086],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[20,24088,24089],{},"它衡量的是“一个具体动作”的长期价值",[20,24091,24092],{},[23,24093],{"alt":25,"src":24094},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[20,24096,24097],{},"几个价值函数之间的比较：",[20,24099,24100],{},[23,24101],{"alt":25,"src":24102},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[196,24104,24105],{},"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":25,"searchDepth":66,"depth":66,"links":24107},[24108,24109,24110,24115,24116,24121,24122,24123],{"id":23542,"depth":66,"text":23543},{"id":23609,"depth":66,"text":23610},{"id":23646,"depth":66,"text":23647,"children":24111},[24112,24113,24114],{"id":23650,"depth":1331,"text":23651},{"id":23665,"depth":1331,"text":23666},{"id":23688,"depth":1331,"text":23689},{"id":23796,"depth":66,"text":23797},{"id":23815,"depth":66,"text":23816,"children":24117},[24118,24119,24120],{"id":23830,"depth":1331,"text":23831},{"id":23848,"depth":1331,"text":23849},{"id":23866,"depth":1331,"text":23867},{"id":23875,"depth":66,"text":23876},{"id":23946,"depth":66,"text":23947},{"id":24016,"depth":66,"text":24017},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23534,"description":25},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24130,"title":24131,"body":24132,"description":24139,"extension":205,"meta":24150,"navigation":207,"path":24151,"seo":24152,"stem":24153,"__hash__":24154},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24133,"toc":24148},[24134,24137,24140,24145],[10,24135,24131],{"id":24136},"_2马尔可夫决策过程",[20,24138,24139],{},"这是强化学习的基本框架",[20,24141,24142],{},[23,24143],{"alt":25,"src":24144},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[20,24146,24147],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":25,"searchDepth":66,"depth":66,"links":24149},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24131,"description":24139},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24156,"title":24157,"body":24158,"description":25,"extension":205,"meta":24274,"navigation":207,"path":24275,"seo":24276,"stem":24277,"__hash__":24278},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24159,"toc":24269},[24160,24163,24167,24170,24175,24180,24183,24188,24191,24196,24199,24203,24208,24211,24216,24221,24226,24229,24233,24238,24241,24246,24251,24256,24261,24264],[10,24161,24157],{"id":24162},"_3动作价值函数",[15,24164,24166],{"id":24165},"_31dqn","3.1.DQN",[20,24168,24169],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[20,24171,24172],{},[23,24173],{"alt":25,"src":24174},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[20,24176,24177],{},[23,24178],{"alt":25,"src":24179},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[20,24181,24182],{},"DQN算法的描述：",[20,24184,24185],{},[23,24186],{"alt":25,"src":24187},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[20,24189,24190],{},"这里的Dense指的是全连接层",[20,24192,24193],{},[23,24194],{"alt":25,"src":24195},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[20,24197,24198],{},"当前观测的状态为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,24200,24202],{"id":24201},"_32dqn的举例","3.2.DQN的举例",[20,24204,24205],{},[23,24206],{"alt":25,"src":24207},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[20,24209,24210],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[20,24212,24213],{},[23,24214],{"alt":25,"src":24215},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[20,24217,24218],{},[23,24219],{"alt":25,"src":24220},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[20,24222,24223],{},[23,24224],{"alt":25,"src":24225},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[20,24227,24228],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[15,24230,24232],{"id":24231},"_33td算法","3.3.TD算法",[20,24234,24235],{},[23,24236],{"alt":25,"src":24237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[20,24239,24240],{},"强化学习TD算法公式的粗略解释：",[20,24242,24243],{},[23,24244],{"alt":25,"src":24245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[20,24247,24248],{},[23,24249],{"alt":25,"src":24250},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[20,24252,24253],{},[23,24254],{"alt":25,"src":24255},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[20,24257,24258],{},[23,24259],{"alt":25,"src":24260},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[20,24262,24263],{},"TD算法总结：",[20,24265,24266],{},[23,24267],{"alt":25,"src":24268},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":25,"searchDepth":66,"depth":66,"links":24270},[24271,24272,24273],{"id":24165,"depth":66,"text":24166},{"id":24201,"depth":66,"text":24202},{"id":24231,"depth":66,"text":24232},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24157,"description":25},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24280,"title":24281,"body":24282,"description":25,"extension":205,"meta":24515,"navigation":207,"path":24516,"seo":24517,"stem":24518,"__hash__":24519},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24283,"toc":24511},[24284,24287,24291,24294,24297,24302,24307,24310,24315,24320,24323,24328,24331,24336,24339,24344,24347,24352,24355,24360,24365,24368,24373,24376,24379,24384,24387,24392,24397,24401,24404,24407,24412,24417,24420,24425,24430,24433,24438,24441,24444,24449,24452,24457,24460,24465,24470,24473,24478,24483,24486,24491,24494,24499,24502],[10,24285,24281],{"id":24286},"_4策略学习",[15,24288,24290],{"id":24289},"_41概念描述","4.1.概念描述",[20,24292,24293],{},"用神经网络（策略网络）近似策略函数",[20,24295,24296],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[20,24298,24299],{},[23,24300],{"alt":25,"src":24301},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[20,24303,24304],{},[23,24305],{"alt":25,"src":24306},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[20,24308,24309],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[20,24311,24312],{},[23,24313],{"alt":25,"src":24314},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[20,24316,24317],{},[23,24318],{"alt":25,"src":24319},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[20,24321,24322],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[20,24324,24325],{},[23,24326],{"alt":25,"src":24327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[20,24329,24330],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[20,24332,24333],{},[23,24334],{"alt":25,"src":24335},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[20,24337,24338],{},"改进theta要用到策略梯度算法",[20,24340,24341],{},[23,24342],{"alt":25,"src":24343},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[20,24345,24346],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[20,24348,24349],{},[23,24350],{"alt":25,"src":24351},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[20,24353,24354],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[20,24356,24357],{},[23,24358],{"alt":25,"src":24359},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[20,24361,24362],{},[23,24363],{"alt":25,"src":24364},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[20,24366,24367],{},"梯度公式总结：",[20,24369,24370],{},[23,24371],{"alt":25,"src":24372},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[20,24374,24375],{},"两个公式的分别应用场景：",[20,24377,24378],{},"对于离散的动作：",[20,24380,24381],{},[23,24382],{"alt":25,"src":24383},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[20,24385,24386],{},"对于连续的动作：",[20,24388,24389],{},[23,24390],{"alt":25,"src":24391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[20,24393,24394],{},[23,24395],{"alt":25,"src":24396},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[15,24398,24400],{"id":24399},"_42概率梯度算法总结","4.2.概率梯度算法总结",[20,24402,24403],{},"使用蒙特卡洛来近似计算策略梯度",[20,24405,24406],{},"蒙特卡洛法的解释如下：",[20,24408,24409],{},[23,24410],{"alt":25,"src":24411},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[20,24413,24414],{},[23,24415],{"alt":25,"src":24416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[20,24418,24419],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[233,24421,24422],{},[169,24423,24424],{},"方法一：reinforce算法",[20,24426,24427],{},[23,24428],{"alt":25,"src":24429},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[20,24431,24432],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[233,24434,24435],{"start":66},[169,24436,24437],{},"方法二：actor-critic算法",[20,24439,24440],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[20,24442,24443],{},"两个网络的构建：",[20,24445,24446],{},[23,24447],{"alt":25,"src":24448},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[20,24450,24451],{},"actor网路：",[20,24453,24454],{},[23,24455],{"alt":25,"src":24456},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[20,24458,24459],{},"critic网络",[20,24461,24462],{},[23,24463],{"alt":25,"src":24464},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[233,24466,24467],{"start":1331},[169,24468,24469],{},"网络的训练",[20,24471,24472],{},"网络描述",[20,24474,24475],{},[23,24476],{"alt":25,"src":24477},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[20,24479,24480],{},[23,24481],{"alt":25,"src":24482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[20,24484,24485],{},"TD算法更新梯度：",[20,24487,24488],{},[23,24489],{"alt":25,"src":24490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[20,24492,24493],{},"策略网络更新梯度：",[20,24495,24496],{},[23,24497],{"alt":25,"src":24498},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[20,24500,24501],{},"训练整个流程的具体描述：",[20,24503,24504,24507,24508],{},[23,24505],{"alt":25,"src":24506},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[23,24509],{"alt":25,"src":24510},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":25,"searchDepth":66,"depth":66,"links":24512},[24513,24514],{"id":24289,"depth":66,"text":24290},{"id":24399,"depth":66,"text":24400},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24281,"description":25},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24521,"title":24522,"body":24523,"description":24530,"extension":205,"meta":24580,"navigation":207,"path":24581,"seo":24582,"stem":24583,"__hash__":24584},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24524,"toc":24576},[24525,24528,24531,24535,24538,24543,24547,24550,24555,24558,24563,24568,24571],[10,24526,24522],{"id":24527},"_5alphago算法",[20,24529,24530],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[15,24532,24534],{"id":24533},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[20,24536,24537],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[20,24539,24540],{},[23,24541],{"alt":25,"src":24542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[15,24544,24546],{"id":24545},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[20,24548,24549],{},"采用强化学习的方式训练策略网络",[20,24551,24552],{},[23,24553],{"alt":25,"src":24554},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[20,24556,24557],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[20,24559,24560],{},[23,24561],{"alt":25,"src":24562},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[20,24564,24565],{},[23,24566],{"alt":25,"src":24567},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[20,24569,24570],{},"强化学习训练策略网络的总结：",[20,24572,24573],{},[23,24574],{"alt":25,"src":24575},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":25,"searchDepth":66,"depth":66,"links":24577},[24578,24579],{"id":24533,"depth":66,"text":24534},{"id":24545,"depth":66,"text":24546},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24522,"description":24530},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24586,"title":24587,"body":24588,"description":24595,"extension":205,"meta":24598,"navigation":207,"path":24599,"seo":24600,"stem":24601,"__hash__":24602},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24589,"toc":24596},[24590,24593],[10,24591,24587],{"id":24592},"_6价值网络",[20,24594,24595],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":25,"searchDepth":66,"depth":66,"links":24597},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24587,"description":24595},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24604,"title":24605,"body":24606,"description":24610,"extension":205,"meta":24611,"navigation":207,"path":24612,"seo":24613,"stem":24614,"__hash__":24615},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24607,"toc":24608},[],{"title":25,"searchDepth":66,"depth":66,"links":24609},[],"记录自己的强化学习笔记。",{"category":23527},"\u002Fwiki\u002F2025-12-04",{"title":24605,"description":24610},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24617,"title":24618,"body":24619,"description":204,"extension":205,"meta":24658,"navigation":207,"path":24659,"seo":24660,"stem":24661,"__hash__":24662},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24620,"toc":24656},[24621,24624,24627,24633,24636,24642,24645,24650,24653],[10,24622,24618],{"id":24623},"_1-项目概览与官方资源",[20,24625,24626],{},"官方文档：",[20,24628,24629],{},[516,24630,24631],{"href":24631,"rel":24632},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24012],[20,24634,24635],{},"官方代码仓库：",[20,24637,24638],{},[516,24639,24640],{"href":24640,"rel":24641},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24012],[20,24643,24644],{},"复现大体流程：",[20,24646,24647],{},[23,24648],{"alt":25,"src":24649},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[20,24651,24652],{},"本教程的目标是打通这条链路：",[20,24654,24655],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":25,"searchDepth":66,"depth":66,"links":24657},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24618,"description":204},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24664,"title":24665,"body":24666,"description":204,"extension":205,"meta":24782,"navigation":207,"path":24783,"seo":24784,"stem":24785,"__hash__":24786},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24667,"toc":24777},[24668,24671,24675,24678,24685,24689,24692,24701,24711,24715,24745,24748,24774],[10,24669,24665],{"id":24670},"_2-环境准备与设备连接",[15,24672,24674],{"id":24673},"_21-系统与环境","2.1 系统与环境",[20,24676,24677],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[20,24679,24680,24681,24684],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[42,24682,24683],{},"lerobot"," 依赖。",[15,24686,24688],{"id":24687},"_22-机械臂串口识别","2.2 机械臂串口识别",[20,24690,24691],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[36,24693,24695],{"className":38,"code":24694,"language":40,"meta":25,"style":25},"lerobot-find-out\n",[42,24696,24697],{"__ignoreMap":25},[45,24698,24699],{"class":47,"line":48},[45,24700,24694],{"class":69},[20,24702,24703,24704,490,24707,24710],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[42,24705,24706],{},"\u002Fdev\u002FttyACM0",[42,24708,24709],{},"\u002Fdev\u002FttyACM1","）。",[15,24712,24714],{"id":24713},"_23-串口授权","2.3 串口授权",[36,24716,24718],{"className":38,"code":24717,"language":40,"meta":25,"style":25},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[42,24719,24720,24734],{"__ignoreMap":25},[45,24721,24722,24725,24728,24731],{"class":47,"line":48},[45,24723,24724],{"class":69},"sudo",[45,24726,24727],{"class":62}," chmod",[45,24729,24730],{"class":79}," 666",[45,24732,24733],{"class":62}," \u002Fdev\u002FttyACM0\n",[45,24735,24736,24738,24740,24742],{"class":47,"line":66},[45,24737,24724],{"class":69},[45,24739,24727],{"class":62},[45,24741,24730],{"class":79},[45,24743,24744],{"class":62}," \u002Fdev\u002FttyACM1\n",[20,24746,24747],{},"说明：",[166,24749,24750,24755,24761,24771],{},[169,24751,24752,24754],{},[42,24753,24724],{},"：以 root 权限执行命令。",[169,24756,24757,24760],{},[42,24758,24759],{},"chmod","：修改设备节点权限。",[169,24762,24763,24766,24767,24770],{},[42,24764,24765],{},"666","：",[42,24768,24769],{},"rw-rw-rw-","，所有用户可读写。",[169,24772,24773],{},"串口号必须替换为你机器上的真实端口。",[196,24775,24776],{},"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":25,"searchDepth":66,"depth":66,"links":24778},[24779,24780,24781],{"id":24673,"depth":66,"text":24674},{"id":24687,"depth":66,"text":24688},{"id":24713,"depth":66,"text":24714},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24665,"description":204},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24788,"title":24789,"body":24790,"description":204,"extension":205,"meta":24951,"navigation":207,"path":24952,"seo":24953,"stem":24954,"__hash__":24955},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24791,"toc":24947},[24792,24796,24800,24806,24809,24866,24869,24873,24876,24944],[10,24793,24795],{"id":24794},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[15,24797,24799],{"id":24798},"_31-配置电机-id","3.1 配置电机 ID",[20,24801,24802,24803,24805],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[42,24804,495],{},"，需要改成机械臂链路里不冲突的编号。",[20,24807,24808],{},"方式一：用 LeRobot 命令逐步写入。",[36,24810,24812],{"className":38,"code":24811,"language":40,"meta":25,"style":25},"# 主臂舵机配置 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",[42,24813,24814,24819,24827,24834,24839,24843,24848,24854,24861],{"__ignoreMap":25},[45,24815,24816],{"class":47,"line":48},[45,24817,24818],{"class":337},"# 主臂舵机配置 ID\n",[45,24820,24821,24824],{"class":47,"line":66},[45,24822,24823],{"class":69},"lerobot-setup-motors",[45,24825,24826],{"class":79}," \\\n",[45,24828,24829,24832],{"class":47,"line":1331},[45,24830,24831],{"class":79},"  --teleop.type=so101_leader",[45,24833,24826],{"class":79},[45,24835,24836],{"class":47,"line":1346},[45,24837,24838],{"class":79},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[45,24840,24841],{"class":47,"line":1352},[45,24842,2550],{"emptyLinePlaceholder":207},[45,24844,24845],{"class":47,"line":1366},[45,24846,24847],{"class":337},"# 从臂舵机配置 ID\n",[45,24849,24850,24852],{"class":47,"line":1372},[45,24851,24823],{"class":69},[45,24853,24826],{"class":79},[45,24855,24856,24859],{"class":47,"line":1463},[45,24857,24858],{"class":79},"  --robot.type=so101_follower",[45,24860,24826],{"class":79},[45,24862,24863],{"class":47,"line":1469},[45,24864,24865],{"class":79},"  --robot.port=\u002Fdev\u002FttyACM1\n",[20,24867,24868],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[15,24870,24872],{"id":24871},"_32-机械臂校准","3.2 机械臂校准",[20,24874,24875],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[36,24877,24879],{"className":38,"code":24878,"language":40,"meta":25,"style":25},"# 主臂校准\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",[42,24880,24881,24886,24893,24899,24906,24911,24915,24920,24926,24932,24939],{"__ignoreMap":25},[45,24882,24883],{"class":47,"line":48},[45,24884,24885],{"class":337},"# 主臂校准\n",[45,24887,24888,24891],{"class":47,"line":66},[45,24889,24890],{"class":69},"lerobot-calibrate",[45,24892,24826],{"class":79},[45,24894,24895,24897],{"class":47,"line":1331},[45,24896,24831],{"class":79},[45,24898,24826],{"class":79},[45,24900,24901,24904],{"class":47,"line":1346},[45,24902,24903],{"class":79},"  --teleop.port=\u002Fdev\u002FttyACM0",[45,24905,24826],{"class":79},[45,24907,24908],{"class":47,"line":1352},[45,24909,24910],{"class":79},"  --teleop.id=my_awesome_leader_arm\n",[45,24912,24913],{"class":47,"line":1366},[45,24914,2550],{"emptyLinePlaceholder":207},[45,24916,24917],{"class":47,"line":1372},[45,24918,24919],{"class":337},"# 从臂校准\n",[45,24921,24922,24924],{"class":47,"line":1463},[45,24923,24890],{"class":69},[45,24925,24826],{"class":79},[45,24927,24928,24930],{"class":47,"line":1469},[45,24929,24858],{"class":79},[45,24931,24826],{"class":79},[45,24933,24934,24937],{"class":47,"line":1481},[45,24935,24936],{"class":79},"  --robot.port=\u002Fdev\u002FttyACM1",[45,24938,24826],{"class":79},[45,24940,24941],{"class":47,"line":1763},[45,24942,24943],{"class":79},"  --robot.id=my_awesome_follower_arm\n",[196,24945,24946],{},"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":25,"searchDepth":66,"depth":66,"links":24948},[24949,24950],{"id":24798,"depth":66,"text":24799},{"id":24871,"depth":66,"text":24872},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24789,"description":204},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24957,"title":24958,"body":24959,"description":204,"extension":205,"meta":25150,"navigation":207,"path":25151,"seo":25152,"stem":25153,"__hash__":25154},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24960,"toc":25146},[24961,24964,24968,25015,25019,25032,25095,25098,25143],[10,24962,24958],{"id":24963},"_4-遥操与相机接入",[15,24965,24967],{"id":24966},"_41-不带相机遥操","4.1 不带相机遥操",[36,24969,24971],{"className":38,"code":24970,"language":40,"meta":25,"style":25},"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",[42,24972,24973,24980,24986,24992,24999,25005,25011],{"__ignoreMap":25},[45,24974,24975,24978],{"class":47,"line":48},[45,24976,24977],{"class":69},"lerobot-teleoperate",[45,24979,24826],{"class":79},[45,24981,24982,24984],{"class":47,"line":66},[45,24983,24858],{"class":79},[45,24985,24826],{"class":79},[45,24987,24988,24990],{"class":47,"line":1331},[45,24989,24936],{"class":79},[45,24991,24826],{"class":79},[45,24993,24994,24997],{"class":47,"line":1346},[45,24995,24996],{"class":79},"  --robot.id=my_awesome_follower_arm",[45,24998,24826],{"class":79},[45,25000,25001,25003],{"class":47,"line":1352},[45,25002,24831],{"class":79},[45,25004,24826],{"class":79},[45,25006,25007,25009],{"class":47,"line":1366},[45,25008,24903],{"class":79},[45,25010,24826],{"class":79},[45,25012,25013],{"class":47,"line":1372},[45,25014,24910],{"class":79},[15,25016,25018],{"id":25017},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[36,25020,25022],{"className":38,"code":25021,"language":40,"meta":25,"style":25},"lerobot-find-cameras opencv\n",[42,25023,25024],{"__ignoreMap":25},[45,25025,25026,25029],{"class":47,"line":48},[45,25027,25028],{"class":69},"lerobot-find-cameras",[45,25030,25031],{"class":62}," opencv\n",[36,25033,25035],{"className":38,"code":25034,"language":40,"meta":25,"style":25},"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",[42,25036,25037,25043,25049,25055,25061,25071,25077,25083,25090],{"__ignoreMap":25},[45,25038,25039,25041],{"class":47,"line":48},[45,25040,24977],{"class":69},[45,25042,24826],{"class":79},[45,25044,25045,25047],{"class":47,"line":66},[45,25046,24858],{"class":79},[45,25048,24826],{"class":79},[45,25050,25051,25053],{"class":47,"line":1331},[45,25052,24936],{"class":79},[45,25054,24826],{"class":79},[45,25056,25057,25059],{"class":47,"line":1346},[45,25058,24996],{"class":79},[45,25060,24826],{"class":79},[45,25062,25063,25066,25069],{"class":47,"line":1352},[45,25064,25065],{"class":79},"  --robot.cameras=",[45,25067,25068],{"class":62},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[45,25070,24826],{"class":79},[45,25072,25073,25075],{"class":47,"line":1366},[45,25074,24831],{"class":79},[45,25076,24826],{"class":79},[45,25078,25079,25081],{"class":47,"line":1372},[45,25080,24903],{"class":79},[45,25082,24826],{"class":79},[45,25084,25085,25088],{"class":47,"line":1463},[45,25086,25087],{"class":79},"  --teleop.id=my_awesome_leader_arm",[45,25089,24826],{"class":79},[45,25091,25092],{"class":47,"line":1469},[45,25093,25094],{"class":79},"  --display_data=true\n",[20,25096,25097],{},"相机参数说明：",[166,25099,25100,25106,25112,25121,25131,25137],{},[169,25101,25102,25105],{},[42,25103,25104],{},"front","：相机名称。",[169,25107,25108,25111],{},[42,25109,25110],{},"type: opencv","：相机驱动类型。",[169,25113,25114,25117,25118,24710],{},[42,25115,25116],{},"index_or_path","：设备编号或设备路径（如 ",[42,25119,25120],{},"\u002Fdev\u002Fvideo4",[169,25122,25123,25126,25127,25130],{},[42,25124,25125],{},"width"," \u002F ",[42,25128,25129],{},"height","：图像分辨率。",[169,25132,25133,25136],{},[42,25134,25135],{},"fps","：采样帧率。",[169,25138,25139,25142],{},[42,25140,25141],{},"--display_data=true","：启用实时可视化。",[196,25144,25145],{},"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":25,"searchDepth":66,"depth":66,"links":25147},[25148,25149],{"id":24966,"depth":66,"text":24967},{"id":25017,"depth":66,"text":25018},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24958,"description":204},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":4,"title":5,"body":25156,"description":204,"extension":205,"meta":25285,"navigation":207,"path":208,"seo":25286,"stem":210,"__hash__":211},{"type":7,"value":25157,"toc":25280},[25158,25160,25162,25166,25170,25172,25204,25208,25210,25248,25252,25254,25256,25262,25266,25270,25274,25278],[10,25159,13],{"id":12},[15,25161,18],{"id":17},[20,25163,25164],{},[23,25165],{"alt":25,"src":26},[20,25167,25168],{},[23,25169],{"alt":25,"src":31},[20,25171,34],{},[36,25173,25174],{"className":38,"code":39,"language":40,"meta":25,"style":25},[42,25175,25176,25186],{"__ignoreMap":25},[45,25177,25178,25180,25182,25184],{"class":47,"line":48},[45,25179,52],{"class":51},[45,25181,56],{"class":55},[45,25183,59],{"class":51},[45,25185,63],{"class":62},[45,25187,25188,25190,25192,25194,25196,25198,25200,25202],{"class":47,"line":66},[45,25189,70],{"class":69},[45,25191,73],{"class":62},[45,25193,76],{"class":62},[45,25195,80],{"class":79},[45,25197,83],{"class":62},[45,25199,86],{"class":55},[45,25201,89],{"class":62},[45,25203,92],{"class":79},[20,25205,25206,98],{},[42,25207,97],{},[15,25209,102],{"id":101},[36,25211,25212],{"className":38,"code":105,"language":40,"meta":25,"style":25},[42,25213,25214,25238],{"__ignoreMap":25},[45,25215,25216,25218,25220,25222,25224,25226,25228,25230,25232,25234,25236],{"class":47,"line":48},[45,25217,112],{"class":55},[45,25219,59],{"class":51},[45,25221,117],{"class":55},[45,25223,70],{"class":69},[45,25225,73],{"class":62},[45,25227,124],{"class":62},[45,25229,127],{"class":51},[45,25231,130],{"class":69},[45,25233,133],{"class":79},[45,25235,136],{"class":79},[45,25237,139],{"class":55},[45,25239,25240,25242,25244,25246],{"class":47,"line":66},[45,25241,144],{"class":79},[45,25243,83],{"class":62},[45,25245,149],{"class":55},[45,25247,152],{"class":62},[20,25249,25250],{},[23,25251],{"alt":25,"src":157},[15,25253,161],{"id":160},[20,25255,164],{},[166,25257,25258,25260],{},[169,25259,171],{},[169,25261,174],{},[20,25263,25264],{},[23,25265],{"alt":25,"src":179},[20,25267,25268],{},[23,25269],{"alt":25,"src":184},[20,25271,25272],{},[23,25273],{"alt":25,"src":189},[20,25275,25276],{},[23,25277],{"alt":25,"src":194},[196,25279,198],{},{"title":25,"searchDepth":66,"depth":66,"links":25281},[25282,25283,25284],{"id":17,"depth":66,"text":18},{"id":101,"depth":66,"text":102},{"id":160,"depth":66,"text":161},{},{"title":5,"description":204},{"id":25288,"title":25289,"body":25290,"description":204,"extension":205,"meta":25487,"navigation":207,"path":25488,"seo":25489,"stem":25490,"__hash__":25491},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25291,"toc":25482},[25292,25296,25300,25396,25404,25409,25413,25429,25432,25436,25479],[10,25293,25295],{"id":25294},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[15,25297,25299],{"id":25298},"_61-录制示教数据","6.1 录制示教数据",[36,25301,25303],{"className":38,"code":25302,"language":40,"meta":25,"style":25},"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",[42,25304,25305,25312,25318,25324,25330,25339,25345,25351,25357,25364,25374,25381,25391],{"__ignoreMap":25},[45,25306,25307,25310],{"class":47,"line":48},[45,25308,25309],{"class":69},"lerobot-record",[45,25311,24826],{"class":79},[45,25313,25314,25316],{"class":47,"line":66},[45,25315,24858],{"class":79},[45,25317,24826],{"class":79},[45,25319,25320,25322],{"class":47,"line":1331},[45,25321,24936],{"class":79},[45,25323,24826],{"class":79},[45,25325,25326,25328],{"class":47,"line":1346},[45,25327,24996],{"class":79},[45,25329,24826],{"class":79},[45,25331,25332,25334,25337],{"class":47,"line":1352},[45,25333,25065],{"class":79},[45,25335,25336],{"class":62},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[45,25338,24826],{"class":79},[45,25340,25341,25343],{"class":47,"line":1366},[45,25342,24831],{"class":79},[45,25344,24826],{"class":79},[45,25346,25347,25349],{"class":47,"line":1372},[45,25348,24903],{"class":79},[45,25350,24826],{"class":79},[45,25352,25353,25355],{"class":47,"line":1463},[45,25354,25087],{"class":79},[45,25356,24826],{"class":79},[45,25358,25359,25362],{"class":47,"line":1469},[45,25360,25361],{"class":79},"  --display_data=true",[45,25363,24826],{"class":79},[45,25365,25366,25369,25372],{"class":47,"line":1481},[45,25367,25368],{"class":79},"  --dataset.repo_id=",[45,25370,25371],{"class":62},"\"Embodied-AI-6\u002Fso101_test\"",[45,25373,24826],{"class":79},[45,25375,25376,25379],{"class":47,"line":1763},[45,25377,25378],{"class":79},"  --dataset.num_episodes=10",[45,25380,24826],{"class":79},[45,25382,25383,25386,25389],{"class":47,"line":1768},[45,25384,25385],{"class":79},"  --dataset.single_task=",[45,25387,25388],{"class":62},"\"Grab the green cube\"",[45,25390,24826],{"class":79},[45,25392,25393],{"class":47,"line":1774},[45,25394,25395],{"class":79},"  --resume=true\n",[166,25397,25398],{},[169,25399,25400,25403],{},[42,25401,25402],{},"--resume=true","：已有同一数据集时继续追加 episode。",[20,25405,25406],{},[23,25407],{"alt":25,"src":25408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[15,25410,25412],{"id":25411},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[36,25414,25416],{"className":38,"code":25415,"language":40,"meta":25,"style":25},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[42,25417,25418],{"__ignoreMap":25},[45,25419,25420,25423,25426],{"class":47,"line":48},[45,25421,25422],{"class":69},"rm",[45,25424,25425],{"class":79}," -rf",[45,25427,25428],{"class":62}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[20,25430,25431],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[15,25433,25435],{"id":25434},"_63-回放指定-episode","6.3 回放指定 episode",[36,25437,25439],{"className":38,"code":25438,"language":40,"meta":25,"style":25},"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",[42,25440,25441,25448,25454,25460,25466,25474],{"__ignoreMap":25},[45,25442,25443,25446],{"class":47,"line":48},[45,25444,25445],{"class":69},"lerobot-replay",[45,25447,24826],{"class":79},[45,25449,25450,25452],{"class":47,"line":66},[45,25451,24858],{"class":79},[45,25453,24826],{"class":79},[45,25455,25456,25458],{"class":47,"line":1331},[45,25457,24936],{"class":79},[45,25459,24826],{"class":79},[45,25461,25462,25464],{"class":47,"line":1346},[45,25463,24996],{"class":79},[45,25465,24826],{"class":79},[45,25467,25468,25470,25472],{"class":47,"line":1352},[45,25469,25368],{"class":79},[45,25471,25371],{"class":62},[45,25473,24826],{"class":79},[45,25475,25476],{"class":47,"line":1366},[45,25477,25478],{"class":79},"  --dataset.episode=0\n",[196,25480,25481],{},"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":25,"searchDepth":66,"depth":66,"links":25483},[25484,25485,25486],{"id":25298,"depth":66,"text":25299},{"id":25411,"depth":66,"text":25412},{"id":25434,"depth":66,"text":25435},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25289,"description":204},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25493,"title":25494,"body":25495,"description":204,"extension":205,"meta":25623,"navigation":207,"path":25624,"seo":25625,"stem":25626,"__hash__":25627},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25496,"toc":25621},[25497,25501,25564,25567,25614,25619],[10,25498,25500],{"id":25499},"_7-act-模型训练","7. ACT 模型训练",[36,25502,25504],{"className":38,"code":25503,"language":40,"meta":25,"style":25},"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",[42,25505,25506,25513,25521,25528,25535,25542,25549,25556],{"__ignoreMap":25},[45,25507,25508,25511],{"class":47,"line":48},[45,25509,25510],{"class":69},"lerobot-train",[45,25512,24826],{"class":79},[45,25514,25515,25517,25519],{"class":47,"line":66},[45,25516,25368],{"class":79},[45,25518,25371],{"class":62},[45,25520,24826],{"class":79},[45,25522,25523,25526],{"class":47,"line":1331},[45,25524,25525],{"class":79},"  --policy.type=act",[45,25527,24826],{"class":79},[45,25529,25530,25533],{"class":47,"line":1346},[45,25531,25532],{"class":79},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[45,25534,24826],{"class":79},[45,25536,25537,25540],{"class":47,"line":1352},[45,25538,25539],{"class":79},"  --job_name=act_so101_test",[45,25541,24826],{"class":79},[45,25543,25544,25547],{"class":47,"line":1366},[45,25545,25546],{"class":79},"  --policy.device=cuda",[45,25548,24826],{"class":79},[45,25550,25551,25554],{"class":47,"line":1372},[45,25552,25553],{"class":79},"  --wandb.enable=false",[45,25555,24826],{"class":79},[45,25557,25558,25561],{"class":47,"line":1463},[45,25559,25560],{"class":79},"  --policy.repo_id=",[45,25562,25563],{"class":62},"\"Embodied-AI-6\u002Flerobot_new\"\n",[20,25565,25566],{},"参数说明：",[166,25568,25569,25575,25581,25587,25593,25602,25608],{},[169,25570,25571,25574],{},[42,25572,25573],{},"--dataset.repo_id","：训练数据集仓库。",[169,25576,25577,25580],{},[42,25578,25579],{},"--policy.type=act","：策略模型类型为 ACT。",[169,25582,25583,25586],{},[42,25584,25585],{},"--output_dir","：本地训练输出目录。",[169,25588,25589,25592],{},[42,25590,25591],{},"--job_name","：训练任务名称。",[169,25594,25595,25598,25599,24710],{},[42,25596,25597],{},"--policy.device","：训练设备（如 ",[42,25600,25601],{},"cuda",[169,25603,25604,25607],{},[42,25605,25606],{},"--wandb.enable","：是否启用 WandB 可视化。",[169,25609,25610,25613],{},[42,25611,25612],{},"--policy.repo_id","：训练后模型推送目标仓库。",[20,25615,25616],{},[23,25617],{"alt":25,"src":25618},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[196,25620,25481],{},{"title":25,"searchDepth":66,"depth":66,"links":25622},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25494,"description":204},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25629,"title":25630,"body":25631,"description":204,"extension":205,"meta":25718,"navigation":207,"path":25719,"seo":25720,"stem":25721,"__hash__":25722},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25632,"toc":25716},[25633,25636,25639,25706,25714],[10,25634,25630],{"id":25635},"_8-策略部署与自动采集",[20,25637,25638],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[36,25640,25642],{"className":38,"code":25641,"language":40,"meta":25,"style":25},"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",[42,25643,25644,25650,25656,25662,25670,25676,25683,25691,25699],{"__ignoreMap":25},[45,25645,25646,25648],{"class":47,"line":48},[45,25647,25309],{"class":69},[45,25649,24826],{"class":79},[45,25651,25652,25654],{"class":47,"line":66},[45,25653,24858],{"class":79},[45,25655,24826],{"class":79},[45,25657,25658,25660],{"class":47,"line":1331},[45,25659,24936],{"class":79},[45,25661,24826],{"class":79},[45,25663,25664,25666,25668],{"class":47,"line":1346},[45,25665,25065],{"class":79},[45,25667,25336],{"class":62},[45,25669,24826],{"class":79},[45,25671,25672,25674],{"class":47,"line":1352},[45,25673,24996],{"class":79},[45,25675,24826],{"class":79},[45,25677,25678,25681],{"class":47,"line":1366},[45,25679,25680],{"class":79},"  --display_data=false",[45,25682,24826],{"class":79},[45,25684,25685,25687,25689],{"class":47,"line":1372},[45,25686,25368],{"class":79},[45,25688,25371],{"class":62},[45,25690,24826],{"class":79},[45,25692,25693,25695,25697],{"class":47,"line":1463},[45,25694,25385],{"class":79},[45,25696,25388],{"class":62},[45,25698,24826],{"class":79},[45,25700,25701,25704],{"class":47,"line":1469},[45,25702,25703],{"class":79},"  --policy.path=",[45,25705,25563],{"class":62},[166,25707,25708],{},[169,25709,25710,25713],{},[42,25711,25712],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[196,25715,25481],{},{"title":25,"searchDepth":66,"depth":66,"links":25717},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25630,"description":204},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25724,"title":25725,"body":25726,"description":204,"extension":205,"meta":25755,"navigation":207,"path":25756,"seo":25757,"stem":25758,"__hash__":25759},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25727,"toc":25753},[25728,25732,25735,25741,25744,25750],[10,25729,25731],{"id":25730},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[20,25733,25734],{},"项目地址：",[20,25736,25737],{},[516,25738,25739],{"href":25739,"rel":25740},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24012],[20,25742,25743],{},"参考教程：",[20,25745,25746],{},[516,25747,25748],{"href":25748,"rel":25749},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24012],[20,25751,25752],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":25,"searchDepth":66,"depth":66,"links":25754},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25725,"description":204},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25761,"title":25762,"body":25763,"description":25767,"extension":205,"meta":25768,"navigation":207,"path":25769,"seo":25770,"stem":25771,"__hash__":25772},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25764,"toc":25765},[],{"title":25,"searchDepth":66,"depth":66,"links":25766},[],"act复现",{"category":23527},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25762,"description":25767},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25774,"title":25775,"body":25776,"description":25,"extension":205,"meta":26078,"navigation":207,"path":26079,"seo":26080,"stem":26081,"__hash__":26082},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25777,"toc":26070},[25778,25781,25785,25795,25802,25809,25812,25819,25822,25825,25829,25841,25845,25891,25894,25897,25900,25903,25906,25910,25948,25954,25958,26012,26017,26020,26023,26028,26031,26036,26039,26042,26046,26049,26052,26056],[10,25779,25775],{"id":25780},"_1简介",[249,25782,25784],{"id":25783},"_11什么是-docker","1.1什么是 Docker？",[20,25786,25787,25788,25791,25792],{},"Docker 是一个开源的 ",[427,25789,25790],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[427,25793,25794],{},"一次构建，到处运行。",[20,25796,25797,25798,25801],{},"“ ",[427,25799,25800],{},"一次构建，到处运行"," ”也就是说：",[233,25803,25804],{},[169,25805,25806],{},[427,25807,25808],{},"之前：",[20,25810,25811],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[233,25813,25814],{},[169,25815,25816],{},[427,25817,25818],{},"使用docker后：",[20,25820,25821],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[20,25823,25824],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[249,25826,25828],{"id":25827},"_12它是怎么工作的","1.2.它是怎么工作的？",[166,25830,25831,25834],{},[169,25832,25833],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[169,25835,25836,25837,25840],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[427,25838,25839],{},"无论在哪运行都一样稳定"," 。",[249,25842,25844],{"id":25843},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[415,25846,25847,25857],{},[418,25848,25849],{},[421,25850,25851,25854],{},[424,25852,25853],{"align":23885},"概念",[424,25855,25856],{"align":23885},"解释",[462,25858,25859,25867,25875,25883],{},[421,25860,25861,25864],{},[467,25862,25863],{"align":23885},"镜像",[467,25865,25866],{"align":23885},"Image，运行容器的模板，像是一个应用快照",[421,25868,25869,25872],{},[467,25870,25871],{"align":23885},"容器",[467,25873,25874],{"align":23885},"Container，运行中的镜像实例，有自己的文件系统、网络等",[421,25876,25877,25880],{},[467,25878,25879],{"align":23885},"Dockerfile",[467,25881,25882],{"align":23885},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[421,25884,25885,25888],{},[467,25886,25887],{"align":23885},"仓库",[467,25889,25890],{"align":23885},"Registry，存放镜像的地方，比如 Docker Hub",[20,25892,25893],{},"抽象化理解:",[20,25895,25896],{},"Docker镜像≈C++类",[20,25898,25899],{},"Docker容器≈C++类实例(即对象)",[20,25901,25902],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[20,25904,25905],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[249,25907,25909],{"id":25908},"_14类比理解","1.4.类比理解",[415,25911,25912,25922],{},[418,25913,25914],{},[421,25915,25916,25919],{},[424,25917,25918],{"align":23885},"传统部署",[424,25920,25921],{"align":23885},"Docker部署",[462,25923,25924,25932,25940],{},[421,25925,25926,25929],{},[467,25927,25928],{"align":23885},"手动安装依赖、调试版本不一致问题",[467,25930,25931],{"align":23885},"一次打包环境和代码",[421,25933,25934,25937],{},[467,25935,25936],{"align":23885},"程序“裸奔”跑在系统上",[467,25938,25939],{"align":23885},"程序“穿着容器”隔离运行",[421,25941,25942,25945],{},[467,25943,25944],{"align":23885},"容易“在我电脑上能跑”",[467,25946,25947],{"align":23885},"保证“无论在哪都能跑”",[20,25949,25950,25951],{},"就像快递包裹： ",[427,25952,25953],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[249,25955,25957],{"id":25956},"_15docker-的核心优势","1.5.Docker 的核心优势",[415,25959,25960,25970],{},[418,25961,25962],{},[421,25963,25964,25967],{},[424,25965,25966],{"align":23885},"优势",[424,25968,25969],{"align":23885},"说明",[462,25971,25972,25980,25988,25996,26004],{},[421,25973,25974,25977],{},[467,25975,25976],{"align":23885},"轻量级",[467,25978,25979],{"align":23885},"基于系统内核共享，启动速度快，占资源少",[421,25981,25982,25985],{},[467,25983,25984],{"align":23885},"跨平台",[467,25986,25987],{"align":23885},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[421,25989,25990,25993],{},[467,25991,25992],{"align":23885},"易于迁移部署",[467,25994,25995],{"align":23885},"应用和环境一起封装，不怕依赖不一致",[421,25997,25998,26001],{},[467,25999,26000],{"align":23885},"易于版本控制",[467,26002,26003],{"align":23885},"镜像版本可控，支持回滚",[421,26005,26006,26009],{},[467,26007,26008],{"align":23885},"生态丰富",[467,26010,26011],{"align":23885},"Docker Hub 上有成千上万的现成镜像可用",[233,26013,26014],{},[169,26015,26016],{},"在Linux上可以几乎实现无性能损失。",[20,26018,26019],{},"docker里的发行版和本机共用Linux内核。",[20,26021,26022],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[233,26024,26025],{},[169,26026,26027],{},"可以快速部署在绝大多数Linux发行版",[20,26029,26030],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[233,26032,26033],{},[169,26034,26035],{},"配置环境简单",[20,26037,26038],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[20,26040,26041],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[233,26043,26044],{},[169,26045,26008],{},[20,26047,26048],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[20,26050,26051],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[249,26053,26055],{"id":26054},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[166,26057,26058,26061,26064,26067],{},[169,26059,26060],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[169,26062,26063],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[169,26065,26066],{},"微服务架构：每个服务一个容器，灵活组合",[169,26068,26069],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":25,"searchDepth":66,"depth":66,"links":26071},[26072,26073,26074,26075,26076,26077],{"id":25783,"depth":1331,"text":25784},{"id":25827,"depth":1331,"text":25828},{"id":25843,"depth":1331,"text":25844},{"id":25908,"depth":1331,"text":25909},{"id":25956,"depth":1331,"text":25957},{"id":26054,"depth":1331,"text":26055},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25775,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26084,"title":26085,"body":26086,"description":25,"extension":205,"meta":26819,"navigation":207,"path":26820,"seo":26821,"stem":26822,"__hash__":26823},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26087,"toc":26814},[26088,26091,26095,26098,26101,26107,26113,26117,26126,26129,26186,26189,26240,26243,26326,26329,26366,26370,26381,26394,26401,26404,26484,26487,26537,26540,26563,26567,26574,26577,26593,26599,26602,26618,26624,26627,26643,26657,26663,26683,26689,26692,26704,26710,26713,26727,26733,26736,26756,26761,26764,26767,26771,26774,26777,26780,26787,26790,26793,26796,26801,26806,26811],[10,26089,26085],{"id":26090},"_2安装docker",[249,26092,26094],{"id":26093},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[20,26096,26097],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[20,26099,26100],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[20,26102,26103],{},[516,26104,26105],{"href":26105,"rel":26106},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24012],[20,26108,26109],{},[516,26110,26111],{"href":26111,"rel":26112},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24012],[22147,26114,26116],{"id":26115},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[20,26118,26119,26120,26125],{},"以下内容根据 ",[516,26121,26124],{"href":26122,"rel":26123},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24012],"官方文档"," 修改而来。",[20,26127,26128],{},"如果你过去安装过 docker，先删掉：",[36,26130,26132],{"className":38,"code":26131,"language":40,"meta":25,"style":25},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[42,26133,26134],{"__ignoreMap":25},[45,26135,26136,26138,26141,26144,26147,26150,26153,26156,26159,26162,26165,26168,26171,26174,26177,26180,26183],{"class":47,"line":48},[45,26137,3175],{"class":51},[45,26139,26140],{"class":55}," pkg ",[45,26142,26143],{"class":51},"in",[45,26145,26146],{"class":62}," docker.io",[45,26148,26149],{"class":62}," docker-doc",[45,26151,26152],{"class":62}," docker-compose",[45,26154,26155],{"class":62}," docker-compose-v2",[45,26157,26158],{"class":62}," podman-docker",[45,26160,26161],{"class":62}," containerd",[45,26163,26164],{"class":62}," runc",[45,26166,26167],{"class":55},"; ",[45,26169,26170],{"class":51},"do",[45,26172,26173],{"class":69}," sudo",[45,26175,26176],{"class":62}," apt-get",[45,26178,26179],{"class":62}," remove",[45,26181,26182],{"class":55}," $pkg; ",[45,26184,26185],{"class":51},"done\n",[20,26187,26188],{},"首先安装依赖和GPG：",[36,26190,26194],{"className":26191,"code":26192,"language":26193,"meta":25,"style":25},"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",[42,26195,26196,26201,26206,26211,26216,26221,26226,26230,26235],{"__ignoreMap":25},[45,26197,26198],{"class":47,"line":48},[45,26199,26200],{},"# Add Docker's official GPG key:\n",[45,26202,26203],{"class":47,"line":66},[45,26204,26205],{},"sudo apt-get update\n",[45,26207,26208],{"class":47,"line":1331},[45,26209,26210],{},"sudo apt-get install ca-certificates curl\n",[45,26212,26213],{"class":47,"line":1346},[45,26214,26215],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[45,26217,26218],{"class":47,"line":1352},[45,26219,26220],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[45,26222,26223],{"class":47,"line":1366},[45,26224,26225],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[45,26227,26228],{"class":47,"line":1372},[45,26229,2550],{"emptyLinePlaceholder":207},[45,26231,26232],{"class":47,"line":1463},[45,26233,26234],{},"# 如果上面这行报错就弄下面这行\n",[45,26236,26237],{"class":47,"line":1469},[45,26238,26239],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[20,26241,26242],{},"信任 Docker 的 GPG 公钥并添加仓库：",[36,26244,26246],{"className":38,"code":26245,"language":40,"meta":25,"style":25},"# 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",[42,26247,26248,26253,26259,26276,26309],{"__ignoreMap":25},[45,26249,26250],{"class":47,"line":48},[45,26251,26252],{"class":337},"# Add the repository to Apt sources:\n",[45,26254,26255,26257],{"class":47,"line":66},[45,26256,144],{"class":79},[45,26258,24826],{"class":79},[45,26260,26261,26264,26267,26270,26273],{"class":47,"line":1331},[45,26262,26263],{"class":62},"  \"deb [arch=$(",[45,26265,26266],{"class":69},"dpkg",[45,26268,26269],{"class":79}," --print-architecture",[45,26271,26272],{"class":62},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[45,26274,26275],{"class":79},"\\\n",[45,26277,26278,26281,26283,26285,26288,26291,26293,26295,26298,26300,26302,26305,26307],{"class":47,"line":1346},[45,26279,26280],{"class":62},"  \"",[45,26282,117],{"class":55},[45,26284,835],{"class":79},[45,26286,26287],{"class":62}," \u002Fetc\u002Fos-release",[45,26289,26290],{"class":55}," && ",[45,26292,144],{"class":79},[45,26294,83],{"class":62},[45,26296,26297],{"class":55},"$VERSION_CODENAME",[45,26299,89],{"class":62},[45,26301,706],{"class":55},[45,26303,26304],{"class":62},"\" stable\"",[45,26306,127],{"class":51},[45,26308,24826],{"class":79},[45,26310,26311,26314,26317,26320,26323],{"class":47,"line":1352},[45,26312,26313],{"class":69},"  sudo",[45,26315,26316],{"class":62}," tee",[45,26318,26319],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[45,26321,26322],{"class":51}," >",[45,26324,26325],{"class":62}," \u002Fdev\u002Fnull\n",[20,26327,26328],{},"最后安装",[36,26330,26332],{"className":38,"code":26331,"language":40,"meta":25,"style":25},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[42,26333,26334,26343],{"__ignoreMap":25},[45,26335,26336,26338,26340],{"class":47,"line":48},[45,26337,24724],{"class":69},[45,26339,26176],{"class":62},[45,26341,26342],{"class":62}," update\n",[45,26344,26345,26347,26349,26351,26354,26357,26360,26363],{"class":47,"line":66},[45,26346,24724],{"class":69},[45,26348,26176],{"class":62},[45,26350,23981],{"class":62},[45,26352,26353],{"class":62}," docker-ce",[45,26355,26356],{"class":62}," docker-ce-cli",[45,26358,26359],{"class":62}," containerd.io",[45,26361,26362],{"class":62}," docker-buildx-plugin",[45,26364,26365],{"class":62}," docker-compose-plugin\n",[22147,26367,26369],{"id":26368},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[20,26371,26372,26373,26376,26377,26380],{},"查看自己自己包管理工具版本（dnf是 ",[427,26374,26375],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[427,26378,26379],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[36,26382,26384],{"className":38,"code":26383,"language":40,"meta":25,"style":25},"dnf --version\n",[42,26385,26386],{"__ignoreMap":25},[45,26387,26388,26391],{"class":47,"line":48},[45,26389,26390],{"class":69},"dnf",[45,26392,26393],{"class":79}," --version\n",[20,26395,26119,26396,26400],{},[516,26397,26124],{"href":26398,"rel":26399},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24012]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[20,26402,26403],{},"如果你之前安装过 docker，请先删掉",[36,26405,26407],{"className":38,"code":26406,"language":40,"meta":25,"style":25},"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",[42,26408,26409,26423,26430,26437,26444,26451,26458,26465,26472,26479],{"__ignoreMap":25},[45,26410,26411,26413,26416,26418,26421],{"class":47,"line":48},[45,26412,24724],{"class":69},[45,26414,26415],{"class":62}," dnf",[45,26417,26179],{"class":62},[45,26419,26420],{"class":62}," docker",[45,26422,24826],{"class":79},[45,26424,26425,26428],{"class":47,"line":66},[45,26426,26427],{"class":62},"                  docker-client",[45,26429,24826],{"class":79},[45,26431,26432,26435],{"class":47,"line":1331},[45,26433,26434],{"class":62},"                  docker-client-latest",[45,26436,24826],{"class":79},[45,26438,26439,26442],{"class":47,"line":1346},[45,26440,26441],{"class":62},"                  docker-common",[45,26443,24826],{"class":79},[45,26445,26446,26449],{"class":47,"line":1352},[45,26447,26448],{"class":62},"                  docker-latest",[45,26450,24826],{"class":79},[45,26452,26453,26456],{"class":47,"line":1366},[45,26454,26455],{"class":62},"                  docker-latest-logrotate",[45,26457,24826],{"class":79},[45,26459,26460,26463],{"class":47,"line":1372},[45,26461,26462],{"class":62},"                  docker-logrotate",[45,26464,24826],{"class":79},[45,26466,26467,26470],{"class":47,"line":1463},[45,26468,26469],{"class":62},"                  docker-selinux",[45,26471,24826],{"class":79},[45,26473,26474,26477],{"class":47,"line":1469},[45,26475,26476],{"class":62},"                  docker-engine-selinux",[45,26478,24826],{"class":79},[45,26480,26481],{"class":47,"line":1481},[45,26482,26483],{"class":62},"                  docker-engine\n",[20,26485,26486],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[36,26488,26490],{"className":38,"code":26489,"language":40,"meta":25,"style":25},"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",[42,26491,26492,26506,26521],{"__ignoreMap":25},[45,26493,26494,26496,26498,26501,26503],{"class":47,"line":48},[45,26495,24724],{"class":69},[45,26497,26415],{"class":62},[45,26499,26500],{"class":79}," -y",[45,26502,23981],{"class":62},[45,26504,26505],{"class":62}," dnf-plugins-core\n",[45,26507,26508,26510,26512,26515,26518],{"class":47,"line":66},[45,26509,24724],{"class":69},[45,26511,26415],{"class":62},[45,26513,26514],{"class":62}," config-manager",[45,26516,26517],{"class":62}," addrepo",[45,26519,26520],{"class":79}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[45,26522,26523,26525,26528,26531,26534],{"class":47,"line":1331},[45,26524,24724],{"class":69},[45,26526,26527],{"class":62}," sed",[45,26529,26530],{"class":79}," -i",[45,26532,26533],{"class":62}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[45,26535,26536],{"class":62}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[20,26538,26539],{},"最后安装：",[36,26541,26543],{"className":38,"code":26542,"language":40,"meta":25,"style":25},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[42,26544,26545],{"__ignoreMap":25},[45,26546,26547,26549,26551,26553,26555,26557,26559,26561],{"class":47,"line":48},[45,26548,24724],{"class":69},[45,26550,26415],{"class":62},[45,26552,23981],{"class":62},[45,26554,26353],{"class":62},[45,26556,26356],{"class":62},[45,26558,26359],{"class":62},[45,26560,26362],{"class":62},[45,26562,26365],{"class":62},[249,26564,26566],{"id":26565},"_22配置环境","2.2.配置环境",[22147,26568,26570,26573],{"id":26569},"_221检查-docker-服务状态",[427,26571,26572],{},"2.2.1.检查 Docker 服务状态"," ：",[20,26575,26576],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[36,26578,26580],{"className":38,"code":26579,"language":40,"meta":25,"style":25},"systemctl status docker\n",[42,26581,26582],{"__ignoreMap":25},[45,26583,26584,26587,26590],{"class":47,"line":48},[45,26585,26586],{"class":69},"systemctl",[45,26588,26589],{"class":62}," status",[45,26591,26592],{"class":62}," docker\n",[22147,26594,26596,26573],{"id":26595},"_222启动-docker-服务",[427,26597,26598],{},"2.2.2.启动 Docker 服务",[20,26600,26601],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[36,26603,26605],{"className":38,"code":26604,"language":40,"meta":25,"style":25},"sudo systemctl start docker\n",[42,26606,26607],{"__ignoreMap":25},[45,26608,26609,26611,26614,26616],{"class":47,"line":48},[45,26610,24724],{"class":69},[45,26612,26613],{"class":62}," systemctl",[45,26615,4334],{"class":62},[45,26617,26592],{"class":62},[22147,26619,26621,26573],{"id":26620},"_223设置-docker-开机自启",[427,26622,26623],{},"2.2.3.设置 Docker 开机自启",[20,26625,26626],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[36,26628,26630],{"className":38,"code":26629,"language":40,"meta":25,"style":25},"sudo systemctl enable docker\n",[42,26631,26632],{"__ignoreMap":25},[45,26633,26634,26636,26638,26641],{"class":47,"line":48},[45,26635,24724],{"class":69},[45,26637,26613],{"class":62},[45,26639,26640],{"class":62}," enable",[45,26642,26592],{"class":62},[22147,26644,26646,13944,26649,13944,26654,26573],{"id":26645},"_224将用户添加到-docker-组",[427,26647,26648],{},"2.2.4.将用户添加到",[427,26650,26651],{},[42,26652,26653],{},"docker",[427,26655,26656],{},"组",[20,26658,26659,26660,26662],{},"使用以下命令将当前用户添加到 ",[42,26661,26653],{}," 组：",[36,26664,26666],{"className":38,"code":26665,"language":40,"meta":25,"style":25},"sudo usermod -aG docker $USER\n",[42,26667,26668],{"__ignoreMap":25},[45,26669,26670,26672,26675,26678,26680],{"class":47,"line":48},[45,26671,24724],{"class":69},[45,26673,26674],{"class":62}," usermod",[45,26676,26677],{"class":79}," -aG",[45,26679,26420],{"class":62},[45,26681,26682],{"class":55}," $USER\n",[22147,26684,26686,26573],{"id":26685},"_225退出并重新登录",[427,26687,26688],{},"2.2.5.退出并重新登录",[20,26690,26691],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[36,26693,26695],{"className":38,"code":26694,"language":40,"meta":25,"style":25},"newgrp docker\n",[42,26696,26697],{"__ignoreMap":25},[45,26698,26699,26702],{"class":47,"line":48},[45,26700,26701],{"class":69},"newgrp",[45,26703,26592],{"class":62},[22147,26705,26707,26573],{"id":26706},"_226重新启动-docker-服务如果需要",[427,26708,26709],{},"2.2.6.重新启动 Docker 服务（如果需要）",[20,26711,26712],{},"确保 Docker 服务正在运行，可以使用以下命令：",[36,26714,26715],{"className":38,"code":26604,"language":40,"meta":25,"style":25},[42,26716,26717],{"__ignoreMap":25},[45,26718,26719,26721,26723,26725],{"class":47,"line":48},[45,26720,24724],{"class":69},[45,26722,26613],{"class":62},[45,26724,4334],{"class":62},[45,26726,26592],{"class":62},[22147,26728,26730,26573],{"id":26729},"_227重启电脑后检查-docker-服务状态",[427,26731,26732],{},"2.2.7.重启电脑后检查 Docker 服务状态",[20,26734,26735],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[36,26737,26739],{"className":38,"code":26738,"language":40,"meta":25,"style":25},"sudo reboot\nsystemctl status docker\n",[42,26740,26741,26748],{"__ignoreMap":25},[45,26742,26743,26745],{"class":47,"line":48},[45,26744,24724],{"class":69},[45,26746,26747],{"class":62}," reboot\n",[45,26749,26750,26752,26754],{"class":47,"line":66},[45,26751,26586],{"class":69},[45,26753,26589],{"class":62},[45,26755,26592],{"class":62},[20,26757,26758],{},[23,26759],{"alt":25,"src":26760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[20,26762,26763],{},"第三行显示enabled说明开机自启动成功",[20,26765,26766],{},"按q退出",[249,26768,26770],{"id":26769},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[20,26772,26773],{},"优先使用linux来使用docker是比较好的",[20,26775,26776],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[20,26778,26779],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[20,26781,26782,26783],{},"官方下载安装:",[516,26784,26785],{"href":26785,"rel":26786},"https:\u002F\u002Fwww.docker.com\u002F",[24012],[20,26788,26789],{},"Windows的Docker显卡直通与USB直通:",[20,26791,26792],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[20,26794,26795],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[20,26797,26798],{},[23,26799],{"alt":25,"src":26800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[20,26802,26803],{},[23,26804],{"alt":25,"src":26805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[20,26807,26808],{},[23,26809],{"alt":25,"src":26810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[196,26812,26813],{},"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":25,"searchDepth":66,"depth":66,"links":26815},[26816,26817,26818],{"id":26093,"depth":1331,"text":26094},{"id":26565,"depth":1331,"text":26566},{"id":26769,"depth":1331,"text":26770},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26085,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26825,"title":26826,"body":26827,"description":26834,"extension":205,"meta":27527,"navigation":207,"path":27528,"seo":27529,"stem":27530,"__hash__":27531},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26828,"toc":27521},[26829,26832,26835,26839,26844,26849,26852,26880,26885,26894,26897,26902,26906,26913,26918,26924,26928,26931,26935,26940,27032,27037,27055,27060,27081,27086,27102,27106,27111,27140,27145,27191,27196,27240,27248,27265,27270,27286,27291,27305,27308,27311,27314,27317,27346,27349,27354,27358,27361,27364,27370,27373,27376,27379,27441,27448,27453,27456,27474,27478,27481,27498,27501,27504,27518],[10,26830,26826],{"id":26831},"_3docker直通",[20,26833,26834],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[249,26836,26838],{"id":26837},"_31usb直通","3.1.USB直通",[20,26840,26841],{},[23,26842],{"alt":25,"src":26843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[233,26845,26846],{},[169,26847,26848],{},"方法一(不是很推荐新手)：",[20,26850,26851],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[36,26853,26855],{"className":38,"code":26854,"language":40,"meta":25,"style":25},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[42,26856,26857,26865,26870],{"__ignoreMap":25},[45,26858,26859,26862],{"class":47,"line":48},[45,26860,26861],{"class":69},"ls",[45,26863,26864],{"class":62}," \u002Fdev\n",[45,26866,26867],{"class":47,"line":66},[45,26868,26869],{"class":337},"#例如\n",[45,26871,26872,26875,26877],{"class":47,"line":1331},[45,26873,26874],{"class":55},"--device",[45,26876,59],{"class":51},[45,26878,26879],{"class":62},"\u002Fdev\u002Ftty_USB0\n",[233,26881,26882],{"start":66},[169,26883,26884],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[36,26886,26888],{"className":38,"code":26887,"language":40,"meta":25,"style":25},"--privileged\n",[42,26889,26890],{"__ignoreMap":25},[45,26891,26892],{"class":47,"line":48},[45,26893,26887],{"class":69},[20,26895,26896],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[20,26898,26899],{},[23,26900],{"alt":25,"src":26901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[249,26903,26905],{"id":26904},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[20,26907,26908,26909,26912],{},"NVIDIA Container Toolkit使用户 ",[427,26910,26911],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[20,26914,26915],{},[23,26916],{"alt":25,"src":26917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[20,26919,26920],{},[516,26921,26922],{"href":26922,"rel":26923},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24012],[22147,26925,26927],{"id":26926},"_321安装","3.2.1.安装",[20,26929,26930],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23059,26932,26934],{"id":26933},"_3211ubuntu","3.2.1.1.Ubuntu",[233,26936,26937],{},[169,26938,26939],{},"配置存储库 并更新",[36,26941,26943],{"className":38,"code":26942,"language":40,"meta":25,"style":25},"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",[42,26944,26945,26974,26994,27006,27018,27024],{"__ignoreMap":25},[45,26946,26947,26950,26953,26956,26958,26960,26963,26966,26969,26972],{"class":47,"line":48},[45,26948,26949],{"class":69},"curl",[45,26951,26952],{"class":79}," -fsSL",[45,26954,26955],{"class":62}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[45,26957,127],{"class":51},[45,26959,26173],{"class":69},[45,26961,26962],{"class":62}," gpg",[45,26964,26965],{"class":79}," --dearmor",[45,26967,26968],{"class":79}," -o",[45,26970,26971],{"class":62}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[45,26973,24826],{"class":79},[45,26975,26976,26979,26981,26984,26987,26990,26992],{"class":47,"line":66},[45,26977,26978],{"class":55},"  && ",[45,26980,26949],{"class":69},[45,26982,26983],{"class":79}," -s",[45,26985,26986],{"class":79}," -L",[45,26988,26989],{"class":62}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[45,26991,127],{"class":51},[45,26993,24826],{"class":79},[45,26995,26996,26999,27002,27004],{"class":47,"line":1331},[45,26997,26998],{"class":69},"    sed",[45,27000,27001],{"class":62}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[45,27003,127],{"class":51},[45,27005,24826],{"class":79},[45,27007,27008,27011,27013,27016],{"class":47,"line":1346},[45,27009,27010],{"class":69},"    sudo",[45,27012,26316],{"class":62},[45,27014,27015],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[45,27017,24826],{"class":79},[45,27019,27020,27022],{"class":47,"line":1352},[45,27021,26978],{"class":55},[45,27023,26275],{"class":79},[45,27025,27026,27028,27030],{"class":47,"line":1366},[45,27027,27010],{"class":69},[45,27029,26176],{"class":62},[45,27031,26342],{"class":62},[233,27033,27034],{"start":66},[169,27035,27036],{},"安装nvidia-docker2",[36,27038,27040],{"className":38,"code":27039,"language":40,"meta":25,"style":25},"sudo apt-get install -y nvidia-docker2\n",[42,27041,27042],{"__ignoreMap":25},[45,27043,27044,27046,27048,27050,27052],{"class":47,"line":48},[45,27045,24724],{"class":69},[45,27047,26176],{"class":62},[45,27049,23981],{"class":62},[45,27051,26500],{"class":79},[45,27053,27054],{"class":62}," nvidia-docker2\n",[233,27056,27057],{"start":1331},[169,27058,27059],{},"使用nvidia-ctk命令配置container runtime",[36,27061,27063],{"className":38,"code":27062,"language":40,"meta":25,"style":25},"sudo nvidia-ctk runtime configure --runtime=docker\n",[42,27064,27065],{"__ignoreMap":25},[45,27066,27067,27069,27072,27075,27078],{"class":47,"line":48},[45,27068,24724],{"class":69},[45,27070,27071],{"class":62}," nvidia-ctk",[45,27073,27074],{"class":62}," runtime",[45,27076,27077],{"class":62}," configure",[45,27079,27080],{"class":79}," --runtime=docker\n",[233,27082,27083],{"start":1346},[169,27084,27085],{},"重启docker服务:",[36,27087,27089],{"className":38,"code":27088,"language":40,"meta":25,"style":25},"sudo systemctl restart docker\n",[42,27090,27091],{"__ignoreMap":25},[45,27092,27093,27095,27097,27100],{"class":47,"line":48},[45,27094,24724],{"class":69},[45,27096,26613],{"class":62},[45,27098,27099],{"class":62}," restart",[45,27101,26592],{"class":62},[23059,27103,27105],{"id":27104},"_3212fedora","3.2.1.2.Fedora",[233,27107,27108],{},[169,27109,27110],{},"配置存储库",[36,27112,27114],{"className":38,"code":27113,"language":40,"meta":25,"style":25},"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",[42,27115,27116,27131],{"__ignoreMap":25},[45,27117,27118,27120,27122,27124,27127,27129],{"class":47,"line":48},[45,27119,26949],{"class":69},[45,27121,26983],{"class":79},[45,27123,26986],{"class":79},[45,27125,27126],{"class":62}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[45,27128,127],{"class":51},[45,27130,24826],{"class":79},[45,27132,27133,27135,27137],{"class":47,"line":66},[45,27134,24724],{"class":69},[45,27136,26316],{"class":62},[45,27138,27139],{"class":62}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[233,27141,27142],{"start":66},[169,27143,27144],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[36,27146,27148],{"className":38,"code":27147,"language":40,"meta":25,"style":25},"# 如果是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",[42,27149,27150,27155,27169,27173,27178],{"__ignoreMap":25},[45,27151,27152],{"class":47,"line":48},[45,27153,27154],{"class":337},"# 如果是RHEL或者Rocky（DNF4）\n",[45,27156,27157,27159,27161,27163,27166],{"class":47,"line":66},[45,27158,24724],{"class":69},[45,27160,26415],{"class":62},[45,27162,26514],{"class":62},[45,27164,27165],{"class":79}," --add-repo",[45,27167,27168],{"class":62}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[45,27170,27171],{"class":47,"line":1331},[45,27172,2550],{"emptyLinePlaceholder":207},[45,27174,27175],{"class":47,"line":1346},[45,27176,27177],{"class":337},"# 如果是Feodra41+（DNF5）\n",[45,27179,27180,27182,27184,27186,27188],{"class":47,"line":1352},[45,27181,24724],{"class":69},[45,27183,26415],{"class":62},[45,27185,26514],{"class":62},[45,27187,26517],{"class":62},[45,27189,27190],{"class":79}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[233,27192,27193],{"start":1331},[169,27194,27195],{},"安装NVIDIA Container Toolki包",[36,27197,27199],{"className":38,"code":27198,"language":40,"meta":25,"style":25},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[42,27200,27201,27206,27219,27223,27228],{"__ignoreMap":25},[45,27202,27203],{"class":47,"line":48},[45,27204,27205],{"class":337},"# 如果是RHEL或者Rocky\n",[45,27207,27208,27210,27212,27214,27216],{"class":47,"line":66},[45,27209,24724],{"class":69},[45,27211,26415],{"class":62},[45,27213,23981],{"class":62},[45,27215,26500],{"class":79},[45,27217,27218],{"class":62}," nvidia-container-toolkit\n",[45,27220,27221],{"class":47,"line":1331},[45,27222,2550],{"emptyLinePlaceholder":207},[45,27224,27225],{"class":47,"line":1346},[45,27226,27227],{"class":337},"# 如果是Fedora\n",[45,27229,27230,27232,27234,27236,27238],{"class":47,"line":1352},[45,27231,24724],{"class":69},[45,27233,26415],{"class":62},[45,27235,23981],{"class":62},[45,27237,26500],{"class":79},[45,27239,27218],{"class":62},[233,27241,27242],{"start":1346},[169,27243,27244,27245,27247],{},"安装nvidia-docker2 ： 在Fedora上使用",[42,27246,26390],{},"进行安装",[36,27249,27251],{"className":38,"code":27250,"language":40,"meta":25,"style":25},"sudo dnf install -y nvidia-docker2\n",[42,27252,27253],{"__ignoreMap":25},[45,27254,27255,27257,27259,27261,27263],{"class":47,"line":48},[45,27256,24724],{"class":69},[45,27258,26415],{"class":62},[45,27260,23981],{"class":62},[45,27262,26500],{"class":79},[45,27264,27054],{"class":62},[233,27266,27267],{"start":1352},[169,27268,27269],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[36,27271,27272],{"className":38,"code":27062,"language":40,"meta":25,"style":25},[42,27273,27274],{"__ignoreMap":25},[45,27275,27276,27278,27280,27282,27284],{"class":47,"line":48},[45,27277,24724],{"class":69},[45,27279,27071],{"class":62},[45,27281,27074],{"class":62},[45,27283,27077],{"class":62},[45,27285,27080],{"class":79},[233,27287,27288],{"start":1366},[169,27289,27290],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[36,27292,27293],{"className":38,"code":27088,"language":40,"meta":25,"style":25},[42,27294,27295],{"__ignoreMap":25},[45,27296,27297,27299,27301,27303],{"class":47,"line":48},[45,27298,24724],{"class":69},[45,27300,26613],{"class":62},[45,27302,27099],{"class":62},[45,27304,26592],{"class":62},[20,27306,27307],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[20,27309,27310],{},"方法：",[20,27312,27313],{},"1️⃣nvidia-smi",[20,27315,27316],{},"2️⃣运行nvidia cuda 容器进行测试",[36,27318,27320],{"className":38,"code":27319,"language":40,"meta":25,"style":25},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[42,27321,27322],{"__ignoreMap":25},[45,27323,27324,27326,27328,27331,27334,27337,27340,27343],{"class":47,"line":48},[45,27325,24724],{"class":69},[45,27327,26420],{"class":62},[45,27329,27330],{"class":62}," run",[45,27332,27333],{"class":79}," --rm",[45,27335,27336],{"class":79}," --gpus",[45,27338,27339],{"class":62}," all",[45,27341,27342],{"class":62}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[45,27344,27345],{"class":62}," nvidia-smi\n",[20,27347,27348],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[20,27350,27351],{},[23,27352],{"alt":25,"src":27353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[249,27355,27357],{"id":27356},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[20,27359,27360],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[20,27362,27363],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[20,27365,27366],{},[516,27367,27368],{"href":27368,"rel":27369},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24012],[20,27371,27372],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[20,27374,27375],{},"我们只需要找到对应的Docker镜像当底包即可。",[20,27377,27378],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[415,27380,27381,27397],{},[418,27382,27383],{},[421,27384,27385,27388,27391,27394],{},[424,27386,27387],{"align":23885},"镜像类型",[424,27389,27390],{"align":23885},"适用场景",[424,27392,27393],{"align":23885},"示例标签",[424,27395,27396],{"align":23885},"大小",[462,27398,27399,27413,27427],{},[421,27400,27401,27404,27407,27410],{},[467,27402,27403],{"align":23885},"base",[467,27405,27406],{"align":23885},"仅需 CUDA 运行时库",[467,27408,27409],{"align":23885},"12.4.0-base-ubuntu22.04",[467,27411,27412],{"align":23885},"~240MB",[421,27414,27415,27418,27421,27424],{},[467,27416,27417],{"align":23885},"runtime",[467,27419,27420],{"align":23885},"部署编译后的应用（含数学库）",[467,27422,27423],{"align":23885},"12.4.0-runtime-ubuntu22.04",[467,27425,27426],{"align":23885},"~2GB",[421,27428,27429,27432,27435,27438],{},[467,27430,27431],{"align":23885},"devel",[467,27433,27434],{"align":23885},"开发环境（含编译工具）",[467,27436,27437],{"align":23885},"12.4.0-devel-ubuntu22.04",[467,27439,27440],{"align":23885},"~3GB",[20,27442,27443,27444,27447],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[42,27445,27446],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[20,27449,27450],{},[23,27451],{"alt":25,"src":27452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[20,27454,27455],{},"在dockerfile里就可以开头这么写：",[36,27457,27459],{"className":38,"code":27458,"language":40,"meta":25,"style":25},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[42,27460,27461,27466],{"__ignoreMap":25},[45,27462,27463],{"class":47,"line":48},[45,27464,27465],{"class":337},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[45,27467,27468,27471],{"class":47,"line":66},[45,27469,27470],{"class":69},"FROM",[45,27472,27473],{"class":62}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[249,27475,27477],{"id":27476},"_34配置以太网","3.4.配置以太网",[20,27479,27480],{},"指定网络模式",[36,27482,27484],{"className":38,"code":27483,"language":40,"meta":25,"style":25},"--net=host \\\n",[42,27485,27486],{"__ignoreMap":25},[45,27487,27488,27491,27493,27496],{"class":47,"line":48},[45,27489,27490],{"class":55},"--net",[45,27492,59],{"class":51},[45,27494,27495],{"class":62},"host",[45,27497,24826],{"class":69},[20,27499,27500],{},"启动参数里加上这行即可。具体在下方",[20,27502,27503],{},"--net选项：指定网络模式，该选项有以下参数可选：",[166,27505,27506,27509,27512,27515],{},[169,27507,27508],{},"--net=bridge:默认选项，表示连接到默认的网桥",[169,27510,27511],{},"--net=host:容器使用宿主机的网络",[169,27513,27514],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[169,27516,27517],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[196,27519,27520],{},"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":25,"searchDepth":66,"depth":66,"links":27522},[27523,27524,27525,27526],{"id":26837,"depth":1331,"text":26838},{"id":26904,"depth":1331,"text":26905},{"id":27356,"depth":1331,"text":27357},{"id":27476,"depth":1331,"text":27477},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26826,"description":26834},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27533,"title":27534,"body":27535,"description":27542,"extension":205,"meta":27548,"navigation":207,"path":27549,"seo":27550,"stem":27551,"__hash__":27552},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27536,"toc":27546},[27537,27540,27543],[10,27538,27534],{"id":27539},"_4dockerhub换源",[20,27541,27542],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[20,27544,27545],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":25,"searchDepth":66,"depth":66,"links":27547},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27534,"description":27542},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27554,"title":27555,"body":27556,"description":25,"extension":205,"meta":28568,"navigation":207,"path":28569,"seo":28570,"stem":28571,"__hash__":28572},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27557,"toc":28563},[27558,27561,27565,27571,27575,27578,27918,27921,27924,27927,27932,27937,27940,27943,27946,27949,27968,27971,27982,27988,28170,28180,28196,28459,28461,28486,28501,28510,28560],[10,27559,27555],{"id":27560},"_5docker命令学习",[249,27562,27564],{"id":27563},"_51参考文档","5.1.参考文档",[20,27566,27567],{},[516,27568,27569],{"href":27569,"rel":27570},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24012],[249,27572,27574],{"id":27573},"_52常用命令","5.2.常用命令",[20,27576,27577],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[415,27579,27580,27593],{},[418,27581,27582],{},[421,27583,27584,27587,27590],{},[424,27585,27586],{"align":23885},"命令",[424,27588,27589],{"align":23885},"描述",[424,27591,27592],{"align":23885},"示例",[462,27594,27595,27606,27617,27628,27639,27650,27661,27672,27682,27693,27704,27715,27725,27736,27747,27758,27768,27778,27788,27798,27809,27820,27831,27842,27853,27864,27874,27885,27896,27907],{},[421,27596,27597,27600,27603],{},[467,27598,27599],{"align":23885},"docker run",[467,27601,27602],{"align":23885},"创建并启动一个新的容器。",[467,27604,27605],{"align":23885},"docker run -it ubuntu bash",[421,27607,27608,27611,27614],{},[467,27609,27610],{"align":23885},"docker build",[467,27612,27613],{"align":23885},"通过指定的 Dockerfile 创建一个新的镜像。",[467,27615,27616],{"align":23885},"docker build -t myimage .",[421,27618,27619,27622,27625],{},[467,27620,27621],{"align":23885},"docker pull",[467,27623,27624],{"align":23885},"从 Docker 仓库拉取镜像。",[467,27626,27627],{"align":23885},"docker pull ubuntu",[421,27629,27630,27633,27636],{},[467,27631,27632],{"align":23885},"docker push",[467,27634,27635],{"align":23885},"将本地镜像推送到 Docker 仓库。",[467,27637,27638],{"align":23885},"docker push myimage",[421,27640,27641,27644,27647],{},[467,27642,27643],{"align":23885},"docker stop",[467,27645,27646],{"align":23885},"停止一个正在运行的容器。",[467,27648,27649],{"align":23885},"docker stop container_id",[421,27651,27652,27655,27658],{},[467,27653,27654],{"align":23885},"docker start",[467,27656,27657],{"align":23885},"启动一个已经存在的容器。",[467,27659,27660],{"align":23885},"docker start container_id",[421,27662,27663,27666,27669],{},[467,27664,27665],{"align":23885},"docker restart",[467,27667,27668],{"align":23885},"重新启动容器。",[467,27670,27671],{"align":23885},"docker restart container_id",[421,27673,27674,27677,27680],{},[467,27675,27676],{"align":23885},"docker ps",[467,27678,27679],{"align":23885},"列出当前正在运行的容器。",[467,27681,27676],{"align":23885},[421,27683,27684,27687,27690],{},[467,27685,27686],{"align":23885},"docker rm",[467,27688,27689],{"align":23885},"删除一个或多个停止的容器。",[467,27691,27692],{"align":23885},"docker rm container_id",[421,27694,27695,27698,27701],{},[467,27696,27697],{"align":23885},"docker exec",[467,27699,27700],{"align":23885},"在一个正在运行的容器中执行命令。",[467,27702,27703],{"align":23885},"docker exec -it container_id bash",[421,27705,27706,27709,27712],{},[467,27707,27708],{"align":23885},"docker logs",[467,27710,27711],{"align":23885},"查看容器的日志输出。",[467,27713,27714],{"align":23885},"docker logs container_id",[421,27716,27717,27720,27723],{},[467,27718,27719],{"align":23885},"docker images",[467,27721,27722],{"align":23885},"列出本地所有镜像。",[467,27724,27719],{"align":23885},[421,27726,27727,27730,27733],{},[467,27728,27729],{"align":23885},"docker rmi",[467,27731,27732],{"align":23885},"删除一个或多个镜像。",[467,27734,27735],{"align":23885},"docker rmi myimage",[421,27737,27738,27741,27744],{},[467,27739,27740],{"align":23885},"docker network",[467,27742,27743],{"align":23885},"管理 Docker 网络。",[467,27745,27746],{"align":23885},"docker network ls",[421,27748,27749,27752,27755],{},[467,27750,27751],{"align":23885},"docker volume",[467,27753,27754],{"align":23885},"管理 Docker 数据卷。",[467,27756,27757],{"align":23885},"docker volume ls",[421,27759,27760,27763,27766],{},[467,27761,27762],{"align":23885},"docker-compose up",[467,27764,27765],{"align":23885},"启动 docker-compose.yml 中定义的所有服务。",[467,27767,27762],{"align":23885},[421,27769,27770,27773,27776],{},[467,27771,27772],{"align":23885},"docker-compose down",[467,27774,27775],{"align":23885},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[467,27777,27772],{"align":23885},[421,27779,27780,27783,27786],{},[467,27781,27782],{"align":23885},"docker info",[467,27784,27785],{"align":23885},"显示 Docker 系统的详细信息。",[467,27787,27782],{"align":23885},[421,27789,27790,27793,27796],{},[467,27791,27792],{"align":23885},"docker stats",[467,27794,27795],{"align":23885},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[467,27797,27792],{"align":23885},[421,27799,27800,27803,27806],{},[467,27801,27802],{"align":23885},"docker inspect",[467,27804,27805],{"align":23885},"查看容器或镜像的详细信息（JSON 格式）。",[467,27807,27808],{"align":23885},"docker inspect container_id",[421,27810,27811,27814,27817],{},[467,27812,27813],{"align":23885},"docker save",[467,27815,27816],{"align":23885},"将一个镜像保存为 tar 文件。",[467,27818,27819],{"align":23885},"docker save -o myimage.tar myimage",[421,27821,27822,27825,27828],{},[467,27823,27824],{"align":23885},"docker load",[467,27826,27827],{"align":23885},"从 tar 文件中加载镜像。",[467,27829,27830],{"align":23885},"docker load -i myimage.tar",[421,27832,27833,27836,27839],{},[467,27834,27835],{"align":23885},"docker tag",[467,27837,27838],{"align":23885},"为镜像添加标签（tag）。",[467,27840,27841],{"align":23885},"docker tag myimage myimage:v1",[421,27843,27844,27847,27850],{},[467,27845,27846],{"align":23885},"docker buildx build",[467,27848,27849],{"align":23885},"使用 Buildx 构建多架构镜像。",[467,27851,27852],{"align":23885},"docker buildx build -t myimage .",[421,27854,27855,27858,27861],{},[467,27856,27857],{"align":23885},"docker buildx create",[467,27859,27860],{"align":23885},"创建一个新的 Buildx 构建实例。",[467,27862,27863],{"align":23885},"docker buildx create –use",[421,27865,27866,27869,27872],{},[467,27867,27868],{"align":23885},"docker buildx ls",[467,27870,27871],{"align":23885},"列出所有可用的 Buildx 构建实例。",[467,27873,27868],{"align":23885},[421,27875,27876,27879,27882],{},[467,27877,27878],{"align":23885},"docker buildx use",[467,27880,27881],{"align":23885},"设置当前的 Buildx 构建实例。",[467,27883,27884],{"align":23885},"docker buildx use mybuilder",[421,27886,27887,27890,27893],{},[467,27888,27889],{"align":23885},"docker buildx bake",[467,27891,27892],{"align":23885},"使用 Bake 文件批量构建镜像。",[467,27894,27895],{"align":23885},"docker buildx bake -f bake.hcl",[421,27897,27898,27901,27904],{},[467,27899,27900],{"align":23885},"docker buildx build –push",[467,27902,27903],{"align":23885},"构建镜像并推送到镜像仓库。",[467,27905,27906],{"align":23885},"docker buildx build –push -t myimage .",[421,27908,27909,27912,27915],{},[467,27910,27911],{"align":23885},"docker buildx build –platform",[467,27913,27914],{"align":23885},"构建镜像并为多个平台生成支持。",[467,27916,27917],{"align":23885},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[20,27919,27920],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[20,27922,27923],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[20,27925,27926],{},"docker images 可以查看已经下载的镜像",[20,27928,27929],{},[23,27930],{"alt":25,"src":27931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[20,27933,27934],{},[427,27935,27936],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[20,27938,27939],{},"docker rmi $(docker images -q) 删除所有的镜像",[20,27941,27942],{},"docker container logs 查看容器日志",[20,27944,27945],{},"docker top 查看容器里的进程",[20,27947,27948],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[36,27950,27952],{"className":38,"code":27951,"language":40,"meta":25,"style":25},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[42,27953,27954],{"__ignoreMap":25},[45,27955,27956,27959,27962,27965],{"class":47,"line":48},[45,27957,27958],{"class":69},"如：docker",[45,27960,27961],{"class":62}," cp",[45,27963,27964],{"class":62}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[45,27966,27967],{"class":62}," \u002Fmydata\u002Fnginx\n",[20,27969,27970],{},"docker run时在启动容器的时候会有几个常用的选项：",[166,27972,27973,27976,27979],{},[169,27974,27975],{},"-d选项：表示后台运行",[169,27977,27978],{},"-P选项：随机端口映射",[169,27980,27981],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[249,27983,27985],{"id":27984},"_53run命令的参数非常重要",[427,27986,27987],{},"5.3.run命令的参数（非常重要）",[415,27989,27990,28003],{},[418,27991,27992],{},[421,27993,27994,27997,28000],{},[424,27995,27996],{"align":23885},"参数\u002F配置",[424,27998,27999],{"align":23885},"功能说明",[424,28001,28002],{"align":23885},"重要性与参考依据",[462,28004,28005,28016,28027,28038,28049,28060,28071,28082,28093,28104,28115,28126,28137,28148,28159],{},[421,28006,28007,28010,28013],{},[467,28008,28009],{"align":23885},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[467,28011,28012],{"align":23885},"指定容器名称，便于后续管理",[467,28014,28015],{"align":23885},"替代随机生成的容器名。",[421,28017,28018,28021,28024],{},[467,28019,28020],{"align":23885},"–gpus all",[467,28022,28023],{"align":23885},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[467,28025,28026],{"align":23885},"用于CUDA加速等GPU依赖任务。",[421,28028,28029,28032,28035],{},[467,28030,28031],{"align":23885},"-e NVIDIA_DRIVER_CAPABILITIES=all",[467,28033,28034],{"align":23885},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[467,28036,28037],{"align":23885},"确保容器内GPU功能完整67。",[421,28039,28040,28043,28046],{},[467,28041,28042],{"align":23885},"-dit",[467,28044,28045],{"align":23885},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[467,28047,28048],{"align":23885},"允许容器在后台运行并支持交互操作。",[421,28050,28051,28054,28057],{},[467,28052,28053],{"align":23885},"–privileged",[467,28055,28056],{"align":23885},"赋予容器完全主机权限（可访问设备、内核模块等）",[467,28058,28059],{"align":23885},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[421,28061,28062,28065,28068],{},[467,28063,28064],{"align":23885},"–net=host",[467,28066,28067],{"align":23885},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[467,28069,28070],{"align":23885},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[421,28072,28073,28076,28079],{},[467,28074,28075],{"align":23885},"–group-add audio–group-add video–group-add dialout",[467,28077,28078],{"align":23885},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[467,28080,28081],{"align":23885},"避免权限问题（如避免无法调用摄像头、麦克风）。",[421,28083,28084,28087,28090],{},[467,28085,28086],{"align":23885},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[467,28088,28089],{"align":23885},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[467,28091,28092],{"align":23885},"支持容器内运行图形界面应用（如OpenCV可视化）。",[421,28094,28095,28098,28101],{},[467,28096,28097],{"align":23885},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[467,28099,28100],{"align":23885},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[467,28102,28103],{"align":23885},"实现容器内图形显示。",[421,28105,28106,28109,28112],{},[467,28107,28108],{"align":23885},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[467,28110,28111],{"align":23885},"挂载X11认证文件（只读）",[467,28113,28114],{"align":23885},"确保容器有权连接宿主机显示服务。",[421,28116,28117,28120,28123],{},[467,28118,28119],{"align":23885},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[467,28121,28122],{"align":23885},"挂载Wayland显示协议相关目录",[467,28124,28125],{"align":23885},"支持Wayland协议的图形显示。",[421,28127,28128,28131,28134],{},[467,28129,28130],{"align":23885},"–ulimit nofile=1024:524288",[467,28132,28133],{"align":23885},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[467,28135,28136],{"align":23885},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[421,28138,28139,28142,28145],{},[467,28140,28141],{"align":23885},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[467,28143,28144],{"align":23885},"挂载宿主机用户目录到容器内同名路径",[467,28146,28147],{"align":23885},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[421,28149,28150,28153,28156],{},[467,28151,28152],{"align":23885},"-w \u002Fhome\u002Ftungchiahui",[467,28154,28155],{"align":23885},"设置容器启动后的默认工作目录",[467,28157,28158],{"align":23885},"直接进入项目路径，方便执行命令2324。",[421,28160,28161,28164,28167],{},[467,28162,28163],{"align":23885},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[467,28165,28166],{"align":23885},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[467,28168,28169],{"align":23885},"提供预配置的深度学习与机器人开发环境。",[20,28171,28172,28173,28175,28176,28179],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[42,28174,24724],{},"加不加",[42,28177,28178],{},"sudo -E","都无所谓。",[20,28181,28182,28183,28185,28186,28188,28189,28192,28193,28195],{},"用户已经被加到docker组了，不用",[42,28184,24724],{},"也行跑，其次，",[42,28187,24724],{},"运行的话，你的",[42,28190,28191],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[42,28194,28191],{},"更不可能变了。",[36,28197,28199],{"className":38,"code":28198,"language":40,"meta":25,"style":25},"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",[42,28200,28201,28214,28224,28234,28246,28253,28260,28267,28277,28286,28295,28309,28321,28333,28342,28352,28361,28376,28409,28436,28447,28454],{"__ignoreMap":25},[45,28202,28203,28205,28207,28209,28212],{"class":47,"line":48},[45,28204,24724],{"class":69},[45,28206,26420],{"class":62},[45,28208,27330],{"class":62},[45,28210,28211],{"class":79}," --name=ros_opencv_cuda",[45,28213,24826],{"class":79},[45,28215,28216,28219,28222],{"class":47,"line":66},[45,28217,28218],{"class":55},"--gpus ",[45,28220,28221],{"class":62},"all",[45,28223,24826],{"class":79},[45,28225,28226,28229,28232],{"class":47,"line":1331},[45,28227,28228],{"class":55},"-e ",[45,28230,28231],{"class":62},"NVIDIA_DRIVER_CAPABILITIES=all",[45,28233,24826],{"class":79},[45,28235,28236,28238,28241,28244],{"class":47,"line":1346},[45,28237,28228],{"class":55},[45,28239,28240],{"class":62},"DISPLAY=",[45,28242,28243],{"class":55},"$DISPLAY ",[45,28245,26275],{"class":79},[45,28247,28248,28251],{"class":47,"line":1352},[45,28249,28250],{"class":55},"-dit ",[45,28252,26275],{"class":79},[45,28254,28255,28258],{"class":47,"line":1366},[45,28256,28257],{"class":55},"--privileged ",[45,28259,26275],{"class":79},[45,28261,28262,28265],{"class":47,"line":1372},[45,28263,28264],{"class":55},"--net=host ",[45,28266,26275],{"class":79},[45,28268,28269,28272,28275],{"class":47,"line":1463},[45,28270,28271],{"class":55},"--group-add ",[45,28273,28274],{"class":62},"audio",[45,28276,24826],{"class":79},[45,28278,28279,28281,28284],{"class":47,"line":1469},[45,28280,28271],{"class":55},[45,28282,28283],{"class":62},"video",[45,28285,24826],{"class":79},[45,28287,28288,28290,28293],{"class":47,"line":1481},[45,28289,28271],{"class":55},[45,28291,28292],{"class":62},"dialout",[45,28294,24826],{"class":79},[45,28296,28297,28299,28302,28304,28307],{"class":47,"line":1763},[45,28298,28228],{"class":55},[45,28300,28301],{"class":62},"XAUTHORITY=",[45,28303,28191],{"class":55},[45,28305,28306],{"class":62},"\u002F.Xauthority",[45,28308,24826],{"class":79},[45,28310,28311,28313,28316,28319],{"class":47,"line":1768},[45,28312,28228],{"class":55},[45,28314,28315],{"class":62},"WAYLAND_DISPLAY=",[45,28317,28318],{"class":55},"$WAYLAND_DISPLAY ",[45,28320,26275],{"class":79},[45,28322,28323,28325,28328,28331],{"class":47,"line":1774},[45,28324,28228],{"class":55},[45,28326,28327],{"class":62},"XDG_RUNTIME_DIR=",[45,28329,28330],{"class":55},"$XDG_RUNTIME_DIR ",[45,28332,26275],{"class":79},[45,28334,28335,28337,28340],{"class":47,"line":1779},[45,28336,28228],{"class":55},[45,28338,28339],{"class":62},"QT_QPA_PLATFORM=xcb",[45,28341,24826],{"class":79},[45,28343,28344,28347,28350],{"class":47,"line":1793},[45,28345,28346],{"class":55},"-v ",[45,28348,28349],{"class":62},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[45,28351,24826],{"class":79},[45,28353,28354,28356,28359],{"class":47,"line":1798},[45,28355,28346],{"class":55},[45,28357,28358],{"class":62},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[45,28360,24826],{"class":79},[45,28362,28363,28366,28369,28371,28374],{"class":47,"line":1804},[45,28364,28365],{"class":55},"-v $HOME",[45,28367,28368],{"class":62},"\u002F.Xauthority:",[45,28370,28191],{"class":55},[45,28372,28373],{"class":62},"\u002F.Xauthority:ro",[45,28375,24826],{"class":79},[45,28377,28378,28380,28383,28385,28388,28391,28393,28396,28398,28400,28402,28404,28407],{"class":47,"line":1825},[45,28379,28346],{"class":55},[45,28381,28382],{"class":62},"\u002Frun\u002Fuser\u002F",[45,28384,117],{"class":55},[45,28386,28387],{"class":69},"id",[45,28389,28390],{"class":79}," -u",[45,28392,706],{"class":55},[45,28394,28395],{"class":62},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[45,28397,117],{"class":55},[45,28399,28387],{"class":69},[45,28401,28390],{"class":79},[45,28403,706],{"class":55},[45,28405,28406],{"class":62},"\u002Fwayland-0",[45,28408,24826],{"class":79},[45,28410,28411,28413,28415,28417,28419,28421,28423,28426,28428,28430,28432,28434],{"class":47,"line":1830},[45,28412,28346],{"class":55},[45,28414,28382],{"class":62},[45,28416,117],{"class":55},[45,28418,28387],{"class":69},[45,28420,28390],{"class":79},[45,28422,706],{"class":55},[45,28424,28425],{"class":62},":\u002Frun\u002Fuser\u002F",[45,28427,117],{"class":55},[45,28429,28387],{"class":69},[45,28431,28390],{"class":79},[45,28433,13863],{"class":55},[45,28435,26275],{"class":79},[45,28437,28438,28440,28442,28445],{"class":47,"line":1844},[45,28439,28365],{"class":55},[45,28441,1136],{"class":62},[45,28443,28444],{"class":55},"$HOME ",[45,28446,26275],{"class":79},[45,28448,28449,28452],{"class":47,"line":1849},[45,28450,28451],{"class":55},"-w $HOME ",[45,28453,26275],{"class":79},[45,28455,28456],{"class":47,"line":1878},[45,28457,28458],{"class":55},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[20,28460,9175],{},[233,28462,28463,28471,28474,28477],{},[169,28464,28465,13944,28467,28470],{},[42,28466,28231],{},[42,28468,28469],{},"--gpus all","没有英伟达显卡请注释。",[169,28472,28473],{},"--name后面请自己为容器起名。",[169,28475,28476],{},"最后一行仓库名称请你自己找对应的镜像填上。",[169,28478,28479,28480,28485],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23702,28481,28482],{},[427,28483,28484],{},"请不要加","。",[36,28487,28489],{"className":38,"code":28488,"language":40,"meta":25,"style":25},"--ulimit nofile=1024:524288 \\\n",[42,28490,28491],{"__ignoreMap":25},[45,28492,28493,28496,28499],{"class":47,"line":48},[45,28494,28495],{"class":69},"--ulimit",[45,28497,28498],{"class":62}," nofile=1024:524288",[45,28500,24826],{"class":79},[20,28502,28503,28504,28509],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23702,28505,28506],{},[427,28507,28508],{},"不建议","**.**",[36,28511,28513],{"className":38,"code":28512,"language":40,"meta":25,"style":25},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[42,28514,28515,28542,28551],{"__ignoreMap":25},[45,28516,28517,28520,28523,28525,28527,28529,28531,28533,28535,28538,28540],{"class":47,"line":48},[45,28518,28519],{"class":69},"--user",[45,28521,28522],{"class":55}," $(",[45,28524,28387],{"class":69},[45,28526,28390],{"class":79},[45,28528,706],{"class":55},[45,28530,1136],{"class":62},[45,28532,117],{"class":55},[45,28534,28387],{"class":69},[45,28536,28537],{"class":79}," -g",[45,28539,13863],{"class":55},[45,28541,26275],{"class":79},[45,28543,28544,28546,28549],{"class":47,"line":66},[45,28545,28346],{"class":55},[45,28547,28548],{"class":62},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[45,28550,24826],{"class":79},[45,28552,28553,28555,28558],{"class":47,"line":1331},[45,28554,28346],{"class":55},[45,28556,28557],{"class":62},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[45,28559,24826],{"class":79},[196,28561,28562],{},"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":25,"searchDepth":66,"depth":66,"links":28564},[28565,28566,28567],{"id":27563,"depth":1331,"text":27564},{"id":27573,"depth":1331,"text":27574},{"id":27984,"depth":1331,"text":27987},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27555,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28574,"title":28575,"body":28576,"description":25,"extension":205,"meta":30199,"navigation":207,"path":30200,"seo":30201,"stem":30202,"__hash__":30203},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28577,"toc":30194},[28578,28581,28585,28588,28810,28814,28818,28821,28927,28932,28935,28940,28943,28948,28951,28956,28959,28971,28974,28979,28986,29014,29021,29097,29102,29105,29128,29130,29205,29210,29213,29217,29225,29230,29235,29239,29250,29256,29259,29262,29286,29289,29292,29320,29323,29326,29791,29794,29799,29804,29808,29831,29836,29840,29844,29847,29850,29853,29880,29883,29886,29904,29907,29910,29932,29940,29945,29950,29954,29957,29960,29963,29966,30011,30014,30032,30035,30040,30043,30064,30067,30123,30126,30131,30135,30138,30145,30148,30151,30156,30159,30175,30178,30191],[10,28579,28575],{"id":28580},"_6手动创建docker镜像",[249,28582,28584],{"id":28583},"_61dockerfile","6.1.DockerFile",[20,28586,28587],{},"常用命令：",[415,28589,28590,28601],{},[418,28591,28592],{},[421,28593,28594,28597,28599],{},[424,28595,28596],{"align":23885},"指令",[424,28598,25969],{"align":23885},[424,28600,27592],{"align":23885},[462,28602,28603,28613,28629,28640,28651,28662,28673,28684,28695,28709,28723,28734,28748,28759,28770,28784,28799],{},[421,28604,28605,28607,28610],{},[467,28606,27470],{"align":23885},[467,28608,28609],{"align":23885},"指定基础镜像，是 Dockerfile 的起点",[467,28611,28612],{"align":23885},"FROM ubuntu:22.04",[421,28614,28615,28618,28621],{},[467,28616,28617],{"align":23885},"LABEL",[467,28619,28620],{"align":23885},"添加元数据（如作者、版本等）",[467,28622,28623,28624,28628],{"align":23885},"LABEL maintainer=”",[516,28625,28627],{"href":28626},"mailto:you@example.com","you@example.com","”",[421,28630,28631,28634,28637],{},[467,28632,28633],{"align":23885},"ENV",[467,28635,28636],{"align":23885},"设置环境变量",[467,28638,28639],{"align":23885},"ENV PORT=8080",[421,28641,28642,28645,28648],{},[467,28643,28644],{"align":23885},"ARG",[467,28646,28647],{"align":23885},"构建参数，只在构建期间可用",[467,28649,28650],{"align":23885},"ARG VERSION=1.0",[421,28652,28653,28656,28659],{},[467,28654,28655],{"align":23885},"RUN",[467,28657,28658],{"align":23885},"构建镜像时运行命令",[467,28660,28661],{"align":23885},"RUN apt-get update && apt-get install -y curl",[421,28663,28664,28667,28670],{},[467,28665,28666],{"align":23885},"COPY",[467,28668,28669],{"align":23885},"复制文件到镜像中",[467,28671,28672],{"align":23885},"COPY . \u002Fapp",[421,28674,28675,28678,28681],{},[467,28676,28677],{"align":23885},"ADD",[467,28679,28680],{"align":23885},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[467,28682,28683],{"align":23885},"ADD archive.tar.gz \u002Fdata\u002F",[421,28685,28686,28689,28692],{},[467,28687,28688],{"align":23885},"WORKDIR",[467,28690,28691],{"align":23885},"设置工作目录",[467,28693,28694],{"align":23885},"WORKDIR \u002Fopt",[421,28696,28697,28700,28703],{},[467,28698,28699],{"align":23885},"CMD",[467,28701,28702],{"align":23885},"设置容器启动时默认命令（可被 docker run 覆盖）",[467,28704,28705,28706],{"align":23885},"CMD ",[45,28707,28708],{},"“node”, “index.js”",[421,28710,28711,28714,28717],{},[467,28712,28713],{"align":23885},"ENTRYPOINT",[467,28715,28716],{"align":23885},"设置容器启动时固定命令（通常用于 CLI 工具等）",[467,28718,28719,28720],{"align":23885},"ENTRYPOINT ",[45,28721,28722],{},"“python3”",[421,28724,28725,28728,28731],{},[467,28726,28727],{"align":23885},"EXPOSE",[467,28729,28730],{"align":23885},"声明镜像内服务监听的端口（不会自动映射）",[467,28732,28733],{"align":23885},"EXPOSE 80",[421,28735,28736,28739,28742],{},[467,28737,28738],{"align":23885},"VOLUME",[467,28740,28741],{"align":23885},"声明数据卷挂载点",[467,28743,28744,28745],{"align":23885},"VOLUME ",[45,28746,28747],{},"“\u002Fdata”",[421,28749,28750,28753,28756],{},[467,28751,28752],{"align":23885},"USER",[467,28754,28755],{"align":23885},"设置后续命令执行的用户",[467,28757,28758],{"align":23885},"USER appuser",[421,28760,28761,28764,28767],{},[467,28762,28763],{"align":23885},"ONBUILD",[467,28765,28766],{"align":23885},"当镜像作为其他镜像基础镜像时触发的构建指令",[467,28768,28769],{"align":23885},"ONBUILD COPY . \u002Fsrc",[421,28771,28772,28775,28778],{},[467,28773,28774],{"align":23885},"SHELL",[467,28776,28777],{"align":23885},"更改默认 shell，比如将 sh -c 改为 bash -c",[467,28779,28780,28781],{"align":23885},"SHELL ",[45,28782,28783],{},"“\u002Fbin\u002Fbash”, “-c”",[421,28785,28786,28789,28792],{},[467,28787,28788],{"align":23885},"HEALTHCHECK",[467,28790,28791],{"align":23885},"定义容器运行时的健康检查命令",[467,28793,28794,28795],{"align":23885},"`HEALTHCHECK CMD curl –fail ",[516,28796,28797],{"href":28797,"rel":28798},"http:\u002F\u002Flocalhost:8080",[24012],[421,28800,28801,28804,28807],{},[467,28802,28803],{"align":23885},"STOPSIGNAL",[467,28805,28806],{"align":23885},"容器停止时发送的信号",[467,28808,28809],{"align":23885},"STOPSIGNAL SIGKILL",[249,28811,28813],{"id":28812},"_62自己创建容器","6.2.自己创建容器",[22147,28815,28817],{"id":28816},"_621手动创建","6.2.1.手动创建",[20,28819,28820],{},"在x86电脑上编译x86的：",[36,28822,28824],{"className":38,"code":28823,"language":40,"meta":25,"style":25},"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",[42,28825,28826,28842,28846,28859,28863,28876,28880,28893,28897,28910,28914],{"__ignoreMap":25},[45,28827,28828,28830,28833,28836,28839],{"class":47,"line":48},[45,28829,26653],{"class":69},[45,28831,28832],{"class":62}," build",[45,28834,28835],{"class":79}," -t",[45,28837,28838],{"class":62}," ros-melodic-cuda118-cudnn8-bionic:latest",[45,28840,28841],{"class":62}," .\n",[45,28843,28844],{"class":47,"line":66},[45,28845,2550],{"emptyLinePlaceholder":207},[45,28847,28848,28850,28852,28854,28857],{"class":47,"line":1331},[45,28849,26653],{"class":69},[45,28851,28832],{"class":62},[45,28853,28835],{"class":79},[45,28855,28856],{"class":62}," ros-noetic-focal:latest",[45,28858,28841],{"class":62},[45,28860,28861],{"class":47,"line":1346},[45,28862,2550],{"emptyLinePlaceholder":207},[45,28864,28865,28867,28869,28871,28874],{"class":47,"line":1352},[45,28866,26653],{"class":69},[45,28868,28832],{"class":62},[45,28870,28835],{"class":79},[45,28872,28873],{"class":62}," ros-humble-jammy:latest",[45,28875,28841],{"class":62},[45,28877,28878],{"class":47,"line":1366},[45,28879,2550],{"emptyLinePlaceholder":207},[45,28881,28882,28884,28886,28888,28891],{"class":47,"line":1372},[45,28883,26653],{"class":69},[45,28885,28832],{"class":62},[45,28887,28835],{"class":79},[45,28889,28890],{"class":62}," ros-jazzy-noble:latest",[45,28892,28841],{"class":62},[45,28894,28895],{"class":47,"line":1463},[45,28896,2550],{"emptyLinePlaceholder":207},[45,28898,28899,28901,28903,28905,28908],{"class":47,"line":1469},[45,28900,26653],{"class":69},[45,28902,28832],{"class":62},[45,28904,28835],{"class":79},[45,28906,28907],{"class":62}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[45,28909,28841],{"class":62},[45,28911,28912],{"class":47,"line":1481},[45,28913,2550],{"emptyLinePlaceholder":207},[45,28915,28916,28918,28920,28922,28925],{"class":47,"line":1763},[45,28917,26653],{"class":69},[45,28919,28832],{"class":62},[45,28921,28835],{"class":79},[45,28923,28924],{"class":62}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[45,28926,28841],{"class":62},[20,28928,28929],{},[23,28930],{"alt":25,"src":28931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[20,28933,28934],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[20,28936,28937],{},[23,28938],{"alt":25,"src":28939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[20,28941,28942],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[233,28944,28945],{},[169,28946,28947],{},"创建 Docker Hub 账户",[20,28949,28950],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[233,28952,28953],{"start":66},[169,28954,28955],{},"登录 Docker Hub",[20,28957,28958],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[36,28960,28962],{"className":38,"code":28961,"language":40,"meta":25,"style":25},"docker login\n",[42,28963,28964],{"__ignoreMap":25},[45,28965,28966,28968],{"class":47,"line":48},[45,28967,26653],{"class":69},[45,28969,28970],{"class":62}," login\n",[20,28972,28973],{},"输入你的 Docker Hub 用户名和密码进行验证。",[233,28975,28976],{},[169,28977,28978],{},"为你的镜像打标签",[20,28980,28981,28982,28985],{},"Docker Hub 使用 ",[42,28983,28984],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[36,28987,28989],{"className":38,"code":28988,"language":40,"meta":25,"style":25},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[42,28990,28991],{"__ignoreMap":25},[45,28992,28993,28995,28998,29000,29003,29006,29009,29011],{"class":47,"line":48},[45,28994,26653],{"class":69},[45,28996,28997],{"class":62}," tag",[45,28999,28890],{"class":62},[45,29001,29002],{"class":51}," \u003C",[45,29004,29005],{"class":62},"你的用户",[45,29007,29008],{"class":55},"名",[45,29010,1237],{"class":51},[45,29012,29013],{"class":62},"\u002Fros-jazzy-noble:latest\n",[20,29015,29016,29017,29020],{},"例如，如果你的 Docker Hub 用户名是 ",[42,29018,29019],{},"tungchiahui","，你应该执行：",[36,29022,29024],{"className":38,"code":29023,"language":40,"meta":25,"style":25},"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",[42,29025,29026,29037,29041,29052,29056,29067,29071,29082,29086],{"__ignoreMap":25},[45,29027,29028,29030,29032,29034],{"class":47,"line":48},[45,29029,26653],{"class":69},[45,29031,28997],{"class":62},[45,29033,28856],{"class":62},[45,29035,29036],{"class":62}," tungchiahui\u002Fros-noetic-focal:latest\n",[45,29038,29039],{"class":47,"line":66},[45,29040,2550],{"emptyLinePlaceholder":207},[45,29042,29043,29045,29047,29049],{"class":47,"line":1331},[45,29044,26653],{"class":69},[45,29046,28997],{"class":62},[45,29048,28873],{"class":62},[45,29050,29051],{"class":62}," tungchiahui\u002Fros-humble-jammy:latest\n",[45,29053,29054],{"class":47,"line":1346},[45,29055,2550],{"emptyLinePlaceholder":207},[45,29057,29058,29060,29062,29064],{"class":47,"line":1352},[45,29059,26653],{"class":69},[45,29061,28997],{"class":62},[45,29063,28890],{"class":62},[45,29065,29066],{"class":62}," tungchiahui\u002Fros-jazzy-noble:latest\n",[45,29068,29069],{"class":47,"line":1366},[45,29070,2550],{"emptyLinePlaceholder":207},[45,29072,29073,29075,29077,29079],{"class":47,"line":1372},[45,29074,26653],{"class":69},[45,29076,28997],{"class":62},[45,29078,28907],{"class":62},[45,29080,29081],{"class":62}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[45,29083,29084],{"class":47,"line":1463},[45,29085,2550],{"emptyLinePlaceholder":207},[45,29087,29088,29090,29092,29094],{"class":47,"line":1469},[45,29089,26653],{"class":69},[45,29091,28997],{"class":62},[45,29093,28924],{"class":62},[45,29095,29096],{"class":62}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[233,29098,29099],{"start":66},[169,29100,29101],{},"推送镜像到 Docker Hub",[20,29103,29104],{},"使用以下命令将镜像推送到 Docker Hub：",[36,29106,29108],{"className":38,"code":29107,"language":40,"meta":25,"style":25},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[42,29109,29110],{"__ignoreMap":25},[45,29111,29112,29114,29117,29119,29121,29123,29125],{"class":47,"line":48},[45,29113,26653],{"class":69},[45,29115,29116],{"class":62}," push",[45,29118,29002],{"class":51},[45,29120,29005],{"class":62},[45,29122,29008],{"class":55},[45,29124,1237],{"class":51},[45,29126,29127],{"class":62},"\u002Fros-noetic-jazzy-noble:latest\n",[20,29129,14782],{},[36,29131,29133],{"className":38,"code":29132,"language":40,"meta":25,"style":25},"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",[42,29134,29135,29143,29147,29155,29159,29167,29171,29180,29184,29192,29196],{"__ignoreMap":25},[45,29136,29137,29139,29141],{"class":47,"line":48},[45,29138,26653],{"class":69},[45,29140,29116],{"class":62},[45,29142,29036],{"class":62},[45,29144,29145],{"class":47,"line":66},[45,29146,2550],{"emptyLinePlaceholder":207},[45,29148,29149,29151,29153],{"class":47,"line":1331},[45,29150,26653],{"class":69},[45,29152,29116],{"class":62},[45,29154,29051],{"class":62},[45,29156,29157],{"class":47,"line":1346},[45,29158,2550],{"emptyLinePlaceholder":207},[45,29160,29161,29163,29165],{"class":47,"line":1352},[45,29162,26653],{"class":69},[45,29164,29116],{"class":62},[45,29166,29066],{"class":62},[45,29168,29169],{"class":47,"line":1366},[45,29170,2550],{"emptyLinePlaceholder":207},[45,29172,29173,29175,29177],{"class":47,"line":1372},[45,29174,26653],{"class":69},[45,29176,29116],{"class":62},[45,29178,29179],{"class":62}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[45,29181,29182],{"class":47,"line":1463},[45,29183,2550],{"emptyLinePlaceholder":207},[45,29185,29186,29188,29190],{"class":47,"line":1469},[45,29187,26653],{"class":69},[45,29189,29116],{"class":62},[45,29191,29096],{"class":62},[45,29193,29194],{"class":47,"line":1481},[45,29195,2550],{"emptyLinePlaceholder":207},[45,29197,29198,29200,29202],{"class":47,"line":1763},[45,29199,26653],{"class":69},[45,29201,29116],{"class":62},[45,29203,29204],{"class":62}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[233,29206,29207],{"start":1331},[169,29208,29209],{},"验证推送成功",[20,29211,29212],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[20,29214,29215],{},[427,29216,3934],{},[166,29218,29219,29222],{},[169,29220,29221],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[169,29223,29224],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[20,29226,29227],{},[23,29228],{"alt":25,"src":29229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[20,29231,29232],{},[23,29233],{"alt":25,"src":29234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22147,29236,29238],{"id":29237},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[20,29240,29241,29242,29245,29246,29249],{},"如果您想在 ",[427,29243,29244],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[427,29247,29248],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[20,29251,29252,29253],{},"1. ",[427,29254,29255],{},"启用 Docker 跨平台构建",[20,29257,29258],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[20,29260,29261],{},"第一步：启用 buildx（只需执行一次）",[36,29263,29265],{"className":38,"code":29264,"language":40,"meta":25,"style":25},"docker buildx create --name multiarch_builder --use\n",[42,29266,29267],{"__ignoreMap":25},[45,29268,29269,29271,29274,29277,29280,29283],{"class":47,"line":48},[45,29270,26653],{"class":69},[45,29272,29273],{"class":62}," buildx",[45,29275,29276],{"class":62}," create",[45,29278,29279],{"class":79}," --name",[45,29281,29282],{"class":62}," multiarch_builder",[45,29284,29285],{"class":79}," --use\n",[20,29287,29288],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[20,29290,29291],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[36,29293,29295],{"className":38,"code":29294,"language":40,"meta":25,"style":25},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[42,29296,29297],{"__ignoreMap":25},[45,29298,29299,29301,29303,29305,29308,29311,29314,29317],{"class":47,"line":48},[45,29300,26653],{"class":69},[45,29302,27330],{"class":62},[45,29304,27333],{"class":79},[45,29306,29307],{"class":79}," --privileged",[45,29309,29310],{"class":62}," multiarch\u002Fqemu-user-static",[45,29312,29313],{"class":79}," --reset",[45,29315,29316],{"class":79}," -p",[45,29318,29319],{"class":62}," yes\n",[20,29321,29322],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[20,29324,29325],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[36,29327,29329],{"className":38,"code":29328,"language":40,"meta":25,"style":25},"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",[42,29330,29331,29373,29377,29382,29392,29402,29411,29417,29421,29425,29435,29443,29452,29458,29462,29466,29476,29484,29493,29499,29503,29507,29517,29525,29534,29540,29544,29548,29558,29566,29575,29581,29585,29589,29599,29607,29616,29622,29626,29630,29640,29648,29657,29663,29667,29671,29681,29689,29698,29704,29708,29712,29722,29730,29739,29745,29749,29753,29764,29772,29781,29787],{"__ignoreMap":25},[45,29332,29333,29335,29337,29339,29342,29345,29347,29349,29352,29354,29356,29358,29360,29363,29366,29368,29371],{"class":47,"line":48},[45,29334,26653],{"class":69},[45,29336,29273],{"class":62},[45,29338,28832],{"class":62},[45,29340,29341],{"class":79}," --platform",[45,29343,29344],{"class":62}," linux\u002Famd64,linux\u002Farm64",[45,29346,28835],{"class":79},[45,29348,29002],{"class":51},[45,29350,29351],{"class":62},"你的镜像",[45,29353,29008],{"class":55},[45,29355,1237],{"class":51},[45,29357,1136],{"class":62},[45,29359,1187],{"class":51},[45,29361,29362],{"class":62},"标",[45,29364,29365],{"class":55},"签",[45,29367,1237],{"class":51},[45,29369,29370],{"class":79}," --push",[45,29372,28841],{"class":62},[45,29374,29375],{"class":47,"line":66},[45,29376,2550],{"emptyLinePlaceholder":207},[45,29378,29379],{"class":47,"line":1331},[45,29380,29381],{"class":337},"# 例子：\n",[45,29383,29384,29386,29388,29390],{"class":47,"line":1346},[45,29385,26653],{"class":69},[45,29387,29273],{"class":62},[45,29389,28832],{"class":62},[45,29391,24826],{"class":79},[45,29393,29394,29397,29400],{"class":47,"line":1352},[45,29395,29396],{"class":55},"--platform ",[45,29398,29399],{"class":62},"linux\u002Famd64,linux\u002Farm64",[45,29401,24826],{"class":79},[45,29403,29404,29406,29409],{"class":47,"line":1366},[45,29405,28835],{"class":79},[45,29407,29408],{"class":62}," tungchiahui\u002Fros:noetic-focal",[45,29410,24826],{"class":79},[45,29412,29413,29415],{"class":47,"line":1372},[45,29414,29370],{"class":79},[45,29416,24826],{"class":79},[45,29418,29419],{"class":47,"line":1463},[45,29420,28841],{"class":62},[45,29422,29423],{"class":47,"line":1469},[45,29424,2550],{"emptyLinePlaceholder":207},[45,29426,29427,29429,29431,29433],{"class":47,"line":1481},[45,29428,26653],{"class":69},[45,29430,29273],{"class":62},[45,29432,28832],{"class":62},[45,29434,24826],{"class":79},[45,29436,29437,29439,29441],{"class":47,"line":1763},[45,29438,29396],{"class":55},[45,29440,29399],{"class":62},[45,29442,24826],{"class":79},[45,29444,29445,29447,29450],{"class":47,"line":1768},[45,29446,28835],{"class":79},[45,29448,29449],{"class":62}," tungchiahui\u002Fros:humble-jammy",[45,29451,24826],{"class":79},[45,29453,29454,29456],{"class":47,"line":1774},[45,29455,29370],{"class":79},[45,29457,24826],{"class":79},[45,29459,29460],{"class":47,"line":1779},[45,29461,28841],{"class":62},[45,29463,29464],{"class":47,"line":1793},[45,29465,2550],{"emptyLinePlaceholder":207},[45,29467,29468,29470,29472,29474],{"class":47,"line":1798},[45,29469,26653],{"class":69},[45,29471,29273],{"class":62},[45,29473,28832],{"class":62},[45,29475,24826],{"class":79},[45,29477,29478,29480,29482],{"class":47,"line":1804},[45,29479,29396],{"class":55},[45,29481,29399],{"class":62},[45,29483,24826],{"class":79},[45,29485,29486,29488,29491],{"class":47,"line":1825},[45,29487,28835],{"class":79},[45,29489,29490],{"class":62}," tungchiahui\u002Fros:jazzy-noble",[45,29492,24826],{"class":79},[45,29494,29495,29497],{"class":47,"line":1830},[45,29496,29370],{"class":79},[45,29498,24826],{"class":79},[45,29500,29501],{"class":47,"line":1844},[45,29502,28841],{"class":62},[45,29504,29505],{"class":47,"line":1849},[45,29506,2550],{"emptyLinePlaceholder":207},[45,29508,29509,29511,29513,29515],{"class":47,"line":1878},[45,29510,26420],{"class":69},[45,29512,29273],{"class":62},[45,29514,28832],{"class":62},[45,29516,24826],{"class":79},[45,29518,29519,29521,29523],{"class":47,"line":1883},[45,29520,29396],{"class":55},[45,29522,29399],{"class":62},[45,29524,24826],{"class":79},[45,29526,29527,29529,29532],{"class":47,"line":1900},[45,29528,28835],{"class":79},[45,29530,29531],{"class":62}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[45,29533,24826],{"class":79},[45,29535,29536,29538],{"class":47,"line":1905},[45,29537,29370],{"class":79},[45,29539,24826],{"class":79},[45,29541,29542],{"class":47,"line":1910},[45,29543,28841],{"class":62},[45,29545,29546],{"class":47,"line":1915},[45,29547,2550],{"emptyLinePlaceholder":207},[45,29549,29550,29552,29554,29556],{"class":47,"line":1929},[45,29551,26653],{"class":69},[45,29553,29273],{"class":62},[45,29555,28832],{"class":62},[45,29557,24826],{"class":79},[45,29559,29560,29562,29564],{"class":47,"line":1934},[45,29561,29396],{"class":55},[45,29563,29399],{"class":62},[45,29565,24826],{"class":79},[45,29567,29568,29570,29573],{"class":47,"line":2727},[45,29569,28835],{"class":79},[45,29571,29572],{"class":62}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[45,29574,24826],{"class":79},[45,29576,29577,29579],{"class":47,"line":2741},[45,29578,29370],{"class":79},[45,29580,24826],{"class":79},[45,29582,29583],{"class":47,"line":2749},[45,29584,28841],{"class":62},[45,29586,29587],{"class":47,"line":2754},[45,29588,2550],{"emptyLinePlaceholder":207},[45,29590,29591,29593,29595,29597],{"class":47,"line":2760},[45,29592,26420],{"class":69},[45,29594,29273],{"class":62},[45,29596,28832],{"class":62},[45,29598,24826],{"class":79},[45,29600,29601,29603,29605],{"class":47,"line":2766},[45,29602,29396],{"class":55},[45,29604,29399],{"class":62},[45,29606,24826],{"class":79},[45,29608,29609,29611,29614],{"class":47,"line":2771},[45,29610,28835],{"class":79},[45,29612,29613],{"class":62}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[45,29615,24826],{"class":79},[45,29617,29618,29620],{"class":47,"line":8098},[45,29619,29370],{"class":79},[45,29621,24826],{"class":79},[45,29623,29624],{"class":47,"line":8122},[45,29625,28841],{"class":62},[45,29627,29628],{"class":47,"line":8127},[45,29629,2550],{"emptyLinePlaceholder":207},[45,29631,29632,29634,29636,29638],{"class":47,"line":8133},[45,29633,26653],{"class":69},[45,29635,29273],{"class":62},[45,29637,28832],{"class":62},[45,29639,24826],{"class":79},[45,29641,29642,29644,29646],{"class":47,"line":8160},[45,29643,29396],{"class":55},[45,29645,29399],{"class":62},[45,29647,24826],{"class":79},[45,29649,29650,29652,29655],{"class":47,"line":8165},[45,29651,28835],{"class":79},[45,29653,29654],{"class":62}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[45,29656,24826],{"class":79},[45,29658,29659,29661],{"class":47,"line":8171},[45,29660,29370],{"class":79},[45,29662,24826],{"class":79},[45,29664,29665],{"class":47,"line":8183},[45,29666,28841],{"class":62},[45,29668,29669],{"class":47,"line":8195},[45,29670,2550],{"emptyLinePlaceholder":207},[45,29672,29673,29675,29677,29679],{"class":47,"line":8207},[45,29674,26653],{"class":69},[45,29676,29273],{"class":62},[45,29678,28832],{"class":62},[45,29680,24826],{"class":79},[45,29682,29683,29685,29687],{"class":47,"line":9866},[45,29684,29396],{"class":55},[45,29686,29399],{"class":62},[45,29688,24826],{"class":79},[45,29690,29691,29693,29696],{"class":47,"line":9890},[45,29692,28835],{"class":79},[45,29694,29695],{"class":62}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[45,29697,24826],{"class":79},[45,29699,29700,29702],{"class":47,"line":9913},[45,29701,29370],{"class":79},[45,29703,24826],{"class":79},[45,29705,29706],{"class":47,"line":9937},[45,29707,28841],{"class":62},[45,29709,29710],{"class":47,"line":9942},[45,29711,2550],{"emptyLinePlaceholder":207},[45,29713,29714,29716,29718,29720],{"class":47,"line":9947},[45,29715,26420],{"class":69},[45,29717,29273],{"class":62},[45,29719,28832],{"class":62},[45,29721,24826],{"class":79},[45,29723,29724,29726,29728],{"class":47,"line":9952},[45,29725,29396],{"class":55},[45,29727,29399],{"class":62},[45,29729,24826],{"class":79},[45,29731,29732,29734,29737],{"class":47,"line":9961},[45,29733,28835],{"class":79},[45,29735,29736],{"class":62}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[45,29738,24826],{"class":79},[45,29740,29741,29743],{"class":47,"line":9966},[45,29742,29370],{"class":79},[45,29744,24826],{"class":79},[45,29746,29747],{"class":47,"line":9972},[45,29748,28841],{"class":62},[45,29750,29751],{"class":47,"line":9993},[45,29752,2550],{"emptyLinePlaceholder":207},[45,29754,29755,29758,29760,29762],{"class":47,"line":9999},[45,29756,29757],{"class":69},"  docker",[45,29759,29273],{"class":62},[45,29761,28832],{"class":62},[45,29763,24826],{"class":79},[45,29765,29766,29768,29770],{"class":47,"line":10013},[45,29767,29396],{"class":55},[45,29769,29399],{"class":62},[45,29771,24826],{"class":79},[45,29773,29774,29776,29779],{"class":47,"line":10019},[45,29775,28835],{"class":79},[45,29777,29778],{"class":62}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[45,29780,24826],{"class":79},[45,29782,29783,29785],{"class":47,"line":10046},[45,29784,29370],{"class":79},[45,29786,24826],{"class":79},[45,29788,29789],{"class":47,"line":10055},[45,29790,28841],{"class":62},[20,29792,29793],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[20,29795,29796],{},[23,29797],{"alt":25,"src":29798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[20,29800,29801],{},[23,29802],{"alt":25,"src":29803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22147,29805,29807],{"id":29806},"_623清除构建缓存","6.2.3.清除构建缓存",[36,29809,29811],{"className":38,"code":29810,"language":40,"meta":25,"style":25},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[42,29812,29813,29818],{"__ignoreMap":25},[45,29814,29815],{"class":47,"line":48},[45,29816,29817],{"class":337},"# 清理BuildKit构建缓存\n",[45,29819,29820,29822,29825,29828],{"class":47,"line":66},[45,29821,26653],{"class":69},[45,29823,29824],{"class":62}," builder",[45,29826,29827],{"class":62}," prune",[45,29829,29830],{"class":79}," -f\n",[20,29832,29833],{},[23,29834],{"alt":25,"src":29835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[249,29837,29839],{"id":29838},"_63补充","6.3.补充",[22147,29841,29843],{"id":29842},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[20,29845,29846],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[20,29848,29849],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[20,29851,29852],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[36,29854,29856],{"className":38,"code":29855,"language":40,"meta":25,"style":25},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[42,29857,29858,29865],{"__ignoreMap":25},[45,29859,29860,29862],{"class":47,"line":48},[45,29861,27470],{"class":69},[45,29863,29864],{"class":62}," nginx\n",[45,29866,29867,29869,29872,29875,29877],{"class":47,"line":66},[45,29868,28655],{"class":69},[45,29870,29871],{"class":62}," echo",[45,29873,29874],{"class":62}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[45,29876,26322],{"class":51},[45,29878,29879],{"class":62}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[20,29881,29882],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[20,29884,29885],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[36,29887,29889],{"className":38,"code":29888,"language":40,"meta":25,"style":25},"docker build -t nginx:tuling .\n",[42,29890,29891],{"__ignoreMap":25},[45,29892,29893,29895,29897,29899,29902],{"class":47,"line":48},[45,29894,26653],{"class":69},[45,29896,28832],{"class":62},[45,29898,28835],{"class":79},[45,29900,29901],{"class":62}," nginx:tuling",[45,29903,28841],{"class":62},[20,29905,29906],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[20,29908,29909],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[36,29911,29913],{"className":38,"code":29912,"language":40,"meta":25,"style":25},"docker run -d -p 92:80 nginx:tuling\n",[42,29914,29915],{"__ignoreMap":25},[45,29916,29917,29919,29921,29924,29926,29929],{"class":47,"line":48},[45,29918,26653],{"class":69},[45,29920,27330],{"class":62},[45,29922,29923],{"class":79}," -d",[45,29925,29316],{"class":79},[45,29927,29928],{"class":62}," 92:80",[45,29930,29931],{"class":62}," nginx:tuling\n",[20,29933,29934,29935],{},"4、访问 ",[516,29936,29939],{"href":29937,"rel":29938},"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",[24012],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[20,29941,29942],{},[23,29943],{"alt":25,"src":29944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[20,29946,29947],{},[23,29948],{"alt":25,"src":29949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22147,29951,29953],{"id":29952},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[20,29955,29956],{},"只需要知道大体流程即可",[20,29958,29959],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[20,29961,29962],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[20,29964,29965],{},"2、在Dockerfile中添加以下内容",[36,29967,29969],{"className":26191,"code":29968,"language":26193,"meta":25,"style":25},"# 基于哪个镜像\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",[42,29970,29971,29976,29981,29986,29991,29996,30001,30006],{"__ignoreMap":25},[45,29972,29973],{"class":47,"line":48},[45,29974,29975],{},"# 基于哪个镜像\n",[45,29977,29978],{"class":47,"line":66},[45,29979,29980],{},"From java:8\n",[45,29982,29983],{"class":47,"line":1331},[45,29984,29985],{},"# 复制文件到容器\n",[45,29987,29988],{"class":47,"line":1346},[45,29989,29990],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[45,29992,29993],{"class":47,"line":1352},[45,29994,29995],{},"# 声明需要暴露的端口\n",[45,29997,29998],{"class":47,"line":1366},[45,29999,30000],{},"EXPOSE 8877\n",[45,30002,30003],{"class":47,"line":1372},[45,30004,30005],{},"# 配置容器启动后执行的命令\n",[45,30007,30008],{"class":47,"line":1463},[45,30009,30010],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[20,30012,30013],{},"3、使用docker build命令构建镜像",[36,30015,30017],{"className":38,"code":30016,"language":40,"meta":25,"style":25},"docker build -t tulingmall-member:0.0.5 .\n",[42,30018,30019],{"__ignoreMap":25},[45,30020,30021,30023,30025,30027,30030],{"class":47,"line":48},[45,30022,26653],{"class":69},[45,30024,28832],{"class":62},[45,30026,28835],{"class":79},[45,30028,30029],{"class":62}," tulingmall-member:0.0.5",[45,30031,28841],{"class":62},[20,30033,30034],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[20,30036,30037],{},[23,30038],{"alt":25,"src":30039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[20,30041,30042],{},"4、启动镜像，加-d可在后台启动",[36,30044,30046],{"className":38,"code":30045,"language":40,"meta":25,"style":25},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[42,30047,30048],{"__ignoreMap":25},[45,30049,30050,30052,30054,30056,30058,30061],{"class":47,"line":48},[45,30051,26653],{"class":69},[45,30053,27330],{"class":62},[45,30055,29923],{"class":79},[45,30057,29316],{"class":79},[45,30059,30060],{"class":62}," 8877:8877",[45,30062,30063],{"class":62}," tulingmall-member:0.0.5\n",[20,30065,30066],{},"加上JVM参数：",[36,30068,30070],{"className":38,"code":30069,"language":40,"meta":25,"style":25},"# --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",[42,30071,30072,30077,30092,30102,30111,30118],{"__ignoreMap":25},[45,30073,30074],{"class":47,"line":48},[45,30075,30076],{"class":337},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[45,30078,30079,30081,30083,30086,30088,30090],{"class":47,"line":66},[45,30080,26653],{"class":69},[45,30082,27330],{"class":62},[45,30084,30085],{"class":79},"  -d",[45,30087,29316],{"class":79},[45,30089,30060],{"class":62},[45,30091,24826],{"class":79},[45,30093,30094,30096,30099],{"class":47,"line":1331},[45,30095,28228],{"class":55},[45,30097,30098],{"class":62},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[45,30100,30101],{"class":79},"  \\\n",[45,30103,30104,30106,30109],{"class":47,"line":1346},[45,30105,28228],{"class":55},[45,30107,30108],{"class":62},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[45,30110,30101],{"class":79},[45,30112,30113,30116],{"class":47,"line":1352},[45,30114,30115],{"class":55},"--cap-add=SYS_PTRACE  ",[45,30117,26275],{"class":79},[45,30119,30120],{"class":47,"line":1366},[45,30121,30122],{"class":55},"tulingmall-member:0.0.5\n",[20,30124,30125],{},"5、访问会员服务接口",[20,30127,30128],{},[23,30129],{"alt":25,"src":30130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22147,30132,30134],{"id":30133},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[20,30136,30137],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[20,30139,30140,30141],{},"阿里云docker镜像仓库：",[516,30142,30143],{"href":30143,"rel":30144},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24012],[20,30146,30147],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[20,30149,30150],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[20,30152,30153],{},[23,30154],{"alt":25,"src":30155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[20,30157,30158],{},"要把镜像推送到镜像仓库",[36,30160,30162],{"className":38,"code":30161,"language":40,"meta":25,"style":25},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[42,30163,30164],{"__ignoreMap":25},[45,30165,30166,30168,30170,30172],{"class":47,"line":48},[45,30167,26653],{"class":69},[45,30169,28997],{"class":62},[45,30171,30029],{"class":62},[45,30173,30174],{"class":62}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[20,30176,30177],{},"最后将镜像推送到远程仓库",[36,30179,30181],{"className":38,"code":30180,"language":40,"meta":25,"style":25},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[42,30182,30183],{"__ignoreMap":25},[45,30184,30185,30187,30189],{"class":47,"line":48},[45,30186,26653],{"class":69},[45,30188,29116],{"class":62},[45,30190,30174],{"class":62},[196,30192,30193],{},"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":25,"searchDepth":66,"depth":66,"links":30195},[30196,30197,30198],{"id":28583,"depth":1331,"text":28584},{"id":28812,"depth":1331,"text":28813},{"id":29838,"depth":1331,"text":29839},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28575,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30205,"title":30206,"body":30207,"description":25,"extension":205,"meta":30350,"navigation":207,"path":30351,"seo":30352,"stem":30353,"__hash__":30354},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30208,"toc":30348},[30209,30212,30217,30222,30225,30230,30235,30238,30243,30248,30251,30256,30259,30262,30265,30268,30271,30274,30294,30316,30319,30322,30342,30345],[10,30210,30206],{"id":30211},"_7vscode远程开发",[233,30213,30214],{},[169,30215,30216],{},"插件1：微软Docker工具",[20,30218,30219],{},[23,30220],{"alt":25,"src":30221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[20,30223,30224],{},"docker扩展插件已经进化为container tools了，请安装container tools",[20,30226,30227],{},[23,30228],{"alt":25,"src":30229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[233,30231,30232],{"start":66},[169,30233,30234],{},"插件2：微软Docker远程开发工具",[20,30236,30237],{},"下面这是远程开发的插件。",[20,30239,30240],{},[23,30241],{"alt":25,"src":30242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[20,30244,30245],{},[23,30246],{"alt":25,"src":30247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[20,30249,30250],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[20,30252,30253],{},[23,30254],{"alt":25,"src":30255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[20,30257,30258],{},"安装完拓展之后，vscode进行链接：",[20,30260,30261],{},"1.按ctrl+shift+p",[20,30263,30264],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[20,30266,30267],{},"3.选择目前运行的容器",[20,30269,30270],{},"4.VS Code 会在新窗口中打开并连接到容器",[20,30272,30273],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[36,30275,30277],{"className":38,"code":30276,"language":40,"meta":25,"style":25},"docker run -v 主机目录:容器目录 image-name\n",[42,30278,30279],{"__ignoreMap":25},[45,30280,30281,30283,30285,30288,30291],{"class":47,"line":48},[45,30282,26653],{"class":69},[45,30284,27330],{"class":62},[45,30286,30287],{"class":79}," -v",[45,30289,30290],{"class":62}," 主机目录:容器目录",[45,30292,30293],{"class":62}," image-name\n",[36,30295,30297],{"className":38,"code":30296,"language":40,"meta":25,"style":25},"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",[42,30298,30299],{"__ignoreMap":25},[45,30300,30301,30303,30305,30308,30310,30313],{"class":47,"line":48},[45,30302,26653],{"class":69},[45,30304,27330],{"class":62},[45,30306,30307],{"class":79}," -it",[45,30309,30287],{"class":79},[45,30311,30312],{"class":62}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[45,30314,30315],{"class":62}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[20,30317,30318],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[20,30320,30321],{},"查看挂载情况：",[36,30323,30325],{"className":38,"code":30324,"language":40,"meta":25,"style":25},"mount | grep -i project\n",[42,30326,30327],{"__ignoreMap":25},[45,30328,30329,30332,30334,30337,30339],{"class":47,"line":48},[45,30330,30331],{"class":69},"mount",[45,30333,127],{"class":51},[45,30335,30336],{"class":69}," grep",[45,30338,26530],{"class":79},[45,30340,30341],{"class":62}," project\n",[20,30343,30344],{},"也可以通过ls来进行查看",[196,30346,30347],{},"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":25,"searchDepth":66,"depth":66,"links":30349},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30206,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30356,"title":30357,"body":30358,"description":204,"extension":205,"meta":30362,"navigation":207,"path":30364,"seo":30365,"stem":30366,"__hash__":30367},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30359,"toc":30360},[],{"title":25,"searchDepth":66,"depth":66,"links":30361},[],{"category":30363},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30357,"description":204},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30369,"title":30370,"body":30371,"description":204,"extension":205,"meta":30375,"navigation":207,"path":30376,"seo":30377,"stem":30378,"__hash__":30379},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30372,"toc":30373},[],{"title":25,"searchDepth":66,"depth":66,"links":30374},[],{"category":30363},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30370,"description":204},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30381,"title":30382,"body":30383,"description":204,"extension":205,"meta":30676,"navigation":207,"path":30677,"seo":30678,"stem":30679,"__hash__":30680},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30384,"toc":30674},[30385,30388,30396,30411,30416,30467,30470,30476,30663,30668,30671],[10,30386,30382],{"id":30387},"_1验证深度学习环境",[20,30389,30390,30391],{},"关于环境的安装，看",[516,30392,30395],{"href":30393,"rel":30394},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24012],"Pytorch-->深度学习",[20,30397,30398,30399,30402,30403,30406,30407,30410],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[42,30400,30401],{},"pytorch-cuda=12.4"," 是一个“ ",[427,30404,30405],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[427,30408,30409],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[20,30412,30413],{},[23,30414],{"alt":25,"src":30415},"\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",[36,30417,30419],{"className":38,"code":30418,"language":40,"meta":25,"style":25},"# 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",[42,30420,30421,30426],{"__ignoreMap":25},[45,30422,30423],{"class":47,"line":48},[45,30424,30425],{"class":337},"# CUDA 12.4\n",[45,30427,30428,30431,30433,30436,30439,30442,30445,30448,30450,30453,30456,30459,30462,30464],{"class":47,"line":66},[45,30429,30430],{"class":69},"conda",[45,30432,23981],{"class":62},[45,30434,30435],{"class":62}," pytorch==",[45,30437,30438],{"class":79},"2.5.1",[45,30440,30441],{"class":62}," torchvision==",[45,30443,30444],{"class":79},"0.20.1",[45,30446,30447],{"class":62}," torchaudio==",[45,30449,30438],{"class":79},[45,30451,30452],{"class":62}," pytorch-cuda=",[45,30454,30455],{"class":79},"12.4",[45,30457,30458],{"class":79}," -c",[45,30460,30461],{"class":62}," pytorch",[45,30463,30458],{"class":79},[45,30465,30466],{"class":62}," nvidia\n",[20,30468,30469],{},"）：",[20,30471,30472],{},[516,30473,30474],{"href":30474,"rel":30475},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24012],[36,30477,30481],{"className":30478,"code":30479,"language":30480,"meta":25,"style":25},"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",[42,30482,30483,30488,30496,30501,30511,30527,30532,30542,30579,30586,30598,30614,30619,30629,30641,30651],{"__ignoreMap":25},[45,30484,30485],{"class":47,"line":48},[45,30486,30487],{"class":337},"# 对深度学习环境进行测试\n",[45,30489,30490,30493],{"class":47,"line":66},[45,30491,30492],{"class":51},"import",[45,30494,30495],{"class":55}," torch\n",[45,30497,30498],{"class":47,"line":1331},[45,30499,30500],{"class":337},"# 查看cuda是否被激活\n",[45,30502,30503,30506,30508],{"class":47,"line":1346},[45,30504,30505],{"class":55},"flag",[45,30507,59],{"class":51},[45,30509,30510],{"class":55},"torch.cuda.is_available()\n",[45,30512,30513,30516,30518,30521,30524],{"class":47,"line":1352},[45,30514,30515],{"class":79},"print",[45,30517,282],{"class":55},[45,30519,30520],{"class":62},"\"cuda:\"",[45,30522,30523],{"class":55},", flag)   ",[45,30525,30526],{"class":337},"#返回true的话说明被激活\n",[45,30528,30529],{"class":47,"line":1366},[45,30530,30531],{"class":337},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[45,30533,30534,30537,30539],{"class":47,"line":1372},[45,30535,30536],{"class":55},"ngpu",[45,30538,59],{"class":51},[45,30540,30541],{"class":79},"1\n",[45,30543,30544,30547,30549,30552,30555,30557,30560,30563,30566,30568,30570,30572,30574,30577],{"class":47,"line":1463},[45,30545,30546],{"class":55},"device",[45,30548,59],{"class":51},[45,30550,30551],{"class":55},"torch.device(",[45,30553,30554],{"class":62},"\"cuda:0\"",[45,30556,1855],{"class":51},[45,30558,30559],{"class":55},"(torch.cuda.is_available() ",[45,30561,30562],{"class":51},"and",[45,30564,30565],{"class":55}," ngpu",[45,30567,1237],{"class":51},[45,30569,469],{"class":79},[45,30571,13863],{"class":55},[45,30573,1852],{"class":51},[45,30575,30576],{"class":62}," \"cpu\"",[45,30578,139],{"class":55},[45,30580,30581,30583],{"class":47,"line":1469},[45,30582,30515],{"class":79},[45,30584,30585],{"class":55},"(device)\n",[45,30587,30588,30590,30593,30595],{"class":47,"line":1481},[45,30589,30515],{"class":79},[45,30591,30592],{"class":55},"(torch.cuda.get_device_name(",[45,30594,469],{"class":79},[45,30596,30597],{"class":55},"))\n",[45,30599,30600,30602,30605,30607,30609,30611],{"class":47,"line":1763},[45,30601,30515],{"class":79},[45,30603,30604],{"class":55},"(torch.rand(",[45,30606,350],{"class":79},[45,30608,655],{"class":55},[45,30610,350],{"class":79},[45,30612,30613],{"class":55},").cuda())\n",[45,30615,30616],{"class":47,"line":1768},[45,30617,30618],{"class":337},"# 查看cuda和cudnn的版本\n",[45,30620,30621,30624,30626],{"class":47,"line":1774},[45,30622,30623],{"class":55},"cuda_version",[45,30625,59],{"class":51},[45,30627,30628],{"class":55},"torch.version.cuda\n",[45,30630,30631,30633,30635,30638],{"class":47,"line":1779},[45,30632,30515],{"class":79},[45,30634,282],{"class":55},[45,30636,30637],{"class":62},"\"cuda version\"",[45,30639,30640],{"class":55},",cuda_version)\n",[45,30642,30643,30646,30648],{"class":47,"line":1793},[45,30644,30645],{"class":55},"cudnn_version",[45,30647,59],{"class":51},[45,30649,30650],{"class":55},"torch.backends.cudnn.version()\n",[45,30652,30653,30655,30657,30660],{"class":47,"line":1798},[45,30654,30515],{"class":79},[45,30656,282],{"class":55},[45,30658,30659],{"class":62},"\"cudnn version\"",[45,30661,30662],{"class":55},",cudnn_version)\n",[20,30664,30665],{},[23,30666],{"alt":25,"src":30667},"\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,30669,30670],{},"cuda:0 指的是一块显卡",[196,30672,30673],{},"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":25,"searchDepth":66,"depth":66,"links":30675},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30382,"description":204},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30682,"title":30683,"body":30684,"description":204,"extension":205,"meta":50488,"navigation":207,"path":50489,"seo":50490,"stem":50491,"__hash__":50492},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30685,"toc":50482},[30686,30689,30693,30697,30700,30705,30710,30713,30718,30723,30728,30731,30735,30740,30744,30749,30752,30757,30760,30763,30766,30769,30774,30777,30782,30787,30792,30797,30800,30804,30807,30812,31416,31421,31424,31429,31432,31435,31899,31902,31905,31908,31911,33962,33965,33970,33975,34770,34773,34778,35556,35560,37219,37223,37937,37941,37945,37950,37955,37960,37963,37968,37973,37978,37983,37988,37992,37997,39279,39284,39287,39290,39293,39448,39451,39454,40670,40675,41370,41374,41378,41383,41388,41391,41396,41401,41406,41411,41416,41421,41426,41431,41436,41441,41446,41451,41456,41461,41466,41471,41476,41481,41486,41491,41496,41501,41506,41511,41516,41521,41526,41531,41536,41541,41545,41549,41552,43030,43034,44681,44685,45379,45383,45386,45389,45933,45936,45940,45943,47340,47344,47347,47925,49712,49716,49719,50479],[10,30687,30683],{"id":30688},"_2经典神经网络",[249,30690,30692],{"id":30691},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22147,30694,30696],{"id":30695},"_211原理介绍","2.1.1.原理介绍",[20,30698,30699],{},"LeNet-5",[233,30701,30702],{},[169,30703,30704],{},"原理",[20,30706,30707],{},[23,30708],{"alt":25,"src":30709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[20,30711,30712],{},"B是batch批次；C是channel通道",[233,30714,30715],{"start":66},[169,30716,30717],{},"网络参数详细",[20,30719,30720],{},[23,30721],{"alt":25,"src":30722},"\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,30724,30725],{},[23,30726],{"alt":25,"src":30727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[20,30729,30730],{},"AlexNet",[233,30732,30733],{},[169,30734,30704],{},[20,30736,30737],{},[23,30738],{"alt":25,"src":30739},"\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",[233,30741,30742],{"start":66},[169,30743,30717],{},[20,30745,30746],{},[23,30747],{"alt":25,"src":30748},"\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,30750,30751],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[20,30753,30754],{},[23,30755],{"alt":25,"src":30756},"\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,30758,30759],{},"数据处理中的图像增强操作:",[20,30761,30762],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[20,30764,30765],{},"①增加数据量，保证训练数据充足；②防止过拟合",[20,30767,30768],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[20,30770,30771],{},[23,30772],{"alt":25,"src":30773},"\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,30775,30776],{},"提升网络精确度的方法：LRN正则化",[20,30778,30779],{},[23,30780],{"alt":25,"src":30781},"\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,30783,30784],{},[23,30785],{"alt":25,"src":30786},"\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",[233,30788,30789],{"start":1331},[169,30790,30791],{},"AlexNet的总结",[20,30793,30794],{},[23,30795],{"alt":25,"src":30796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[20,30798,30799],{},"比LeNet模型要深一丢丢",[22147,30801,30803],{"id":30802},"_212代码实现","2.1.2.代码实现",[20,30805,30806],{},"（1）LeNet",[233,30808,30809],{},[169,30810,30811],{},"模型搭建",[36,30813,30815],{"className":30478,"code":30814,"language":30480,"meta":25,"style":25},"# 导入库\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",[42,30816,30817,30822,30828,30833,30846,30851,30863,30867,30887,30892,30897,30908,30913,30932,30936,30941,30990,31002,31007,31036,31071,31098,31103,31115,31120,31140,31159,31178,31182,31187,31197,31214,31225,31240,31251,31262,31277,31292,31303,31310,31314,31328,31333,31356,31361,31366,31371,31375,31380,31385,31395],{"__ignoreMap":25},[45,30818,30819],{"class":47,"line":48},[45,30820,30821],{"class":337},"# 导入库\n",[45,30823,30824,30826],{"class":47,"line":66},[45,30825,30492],{"class":51},[45,30827,30495],{"class":55},[45,30829,30830],{"class":47,"line":1331},[45,30831,30832],{"class":337},"# 导入神经网络层\n",[45,30834,30835,30838,30841,30843],{"class":47,"line":1346},[45,30836,30837],{"class":51},"from",[45,30839,30840],{"class":55}," torch ",[45,30842,30492],{"class":51},[45,30844,30845],{"class":55}," nn\n",[45,30847,30848],{"class":47,"line":1352},[45,30849,30850],{"class":337},"# 导入展示神经网络参数的包\n",[45,30852,30853,30855,30858,30860],{"class":47,"line":1366},[45,30854,30837],{"class":51},[45,30856,30857],{"class":55}," torchsummary ",[45,30859,30492],{"class":51},[45,30861,30862],{"class":55}," summary\n",[45,30864,30865],{"class":47,"line":1372},[45,30866,2550],{"emptyLinePlaceholder":207},[45,30868,30869,30871,30874,30876,30879,30881,30884],{"class":47,"line":1463},[45,30870,14843],{"class":51},[45,30872,30873],{"class":69}," LeNet",[45,30875,282],{"class":55},[45,30877,30878],{"class":69},"nn",[45,30880,835],{"class":55},[45,30882,30883],{"class":69},"Module",[45,30885,30886],{"class":55},"):\n",[45,30888,30889],{"class":47,"line":1469},[45,30890,30891],{"class":337},"    # 模型初始化:\n",[45,30893,30894],{"class":47,"line":1481},[45,30895,30896],{"class":337},"    # 定义一些网络层和激活函数\n",[45,30898,30899,30902,30905],{"class":47,"line":1763},[45,30900,30901],{"class":51},"    def",[45,30903,30904],{"class":79}," __init__",[45,30906,30907],{"class":55},"(self):\n",[45,30909,30910],{"class":47,"line":1768},[45,30911,30912],{"class":337},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[45,30914,30915,30918,30921,30924,30927,30930],{"class":47,"line":1774},[45,30916,30917],{"class":79},"        super",[45,30919,30920],{"class":55},"(LeNet,",[45,30922,30923],{"class":79},"self",[45,30925,30926],{"class":55},").",[45,30928,30929],{"class":79},"__init__",[45,30931,2126],{"class":55},[45,30933,30934],{"class":47,"line":1779},[45,30935,2550],{"emptyLinePlaceholder":207},[45,30937,30938],{"class":47,"line":1793},[45,30939,30940],{"class":337},"        # 定义网络层\n",[45,30942,30943,30946,30949,30951,30954,30957,30959,30961,30963,30966,30968,30970,30972,30975,30977,30979,30981,30984,30986,30988],{"class":47,"line":1798},[45,30944,30945],{"class":79},"        self",[45,30947,30948],{"class":55},".c1",[45,30950,59],{"class":51},[45,30952,30953],{"class":55},"nn.Conv2d(",[45,30955,30956],{"class":5366},"in_channels",[45,30958,59],{"class":51},[45,30960,495],{"class":79},[45,30962,655],{"class":55},[45,30964,30965],{"class":5366},"out_channels",[45,30967,59],{"class":51},[45,30969,621],{"class":79},[45,30971,655],{"class":55},[45,30973,30974],{"class":5366},"kernel_size",[45,30976,59],{"class":51},[45,30978,596],{"class":79},[45,30980,655],{"class":55},[45,30982,30983],{"class":5366},"padding",[45,30985,59],{"class":51},[45,30987,356],{"class":79},[45,30989,139],{"class":55},[45,30991,30992,30994,30997,30999],{"class":47,"line":1804},[45,30993,30945],{"class":79},[45,30995,30996],{"class":55},".sig",[45,30998,59],{"class":51},[45,31000,31001],{"class":55},"nn.Sigmoid()\n",[45,31003,31004],{"class":47,"line":1825},[45,31005,31006],{"class":337},"        # 定义池化\n",[45,31008,31009,31011,31014,31016,31019,31021,31023,31025,31027,31030,31032,31034],{"class":47,"line":1830},[45,31010,30945],{"class":79},[45,31012,31013],{"class":55},".s2",[45,31015,59],{"class":51},[45,31017,31018],{"class":55},"nn.AvgPool2d(",[45,31020,30974],{"class":5366},[45,31022,59],{"class":51},[45,31024,356],{"class":79},[45,31026,655],{"class":55},[45,31028,31029],{"class":5366},"stride",[45,31031,59],{"class":51},[45,31033,356],{"class":79},[45,31035,139],{"class":55},[45,31037,31038,31040,31043,31045,31047,31049,31051,31053,31055,31057,31059,31061,31063,31065,31067,31069],{"class":47,"line":1844},[45,31039,30945],{"class":79},[45,31041,31042],{"class":55},".c3",[45,31044,59],{"class":51},[45,31046,30953],{"class":55},[45,31048,30956],{"class":5366},[45,31050,59],{"class":51},[45,31052,621],{"class":79},[45,31054,655],{"class":55},[45,31056,30965],{"class":5366},[45,31058,59],{"class":51},[45,31060,878],{"class":79},[45,31062,655],{"class":55},[45,31064,30974],{"class":5366},[45,31066,59],{"class":51},[45,31068,596],{"class":79},[45,31070,139],{"class":55},[45,31072,31073,31075,31078,31080,31082,31084,31086,31088,31090,31092,31094,31096],{"class":47,"line":1849},[45,31074,30945],{"class":79},[45,31076,31077],{"class":55},".s4",[45,31079,59],{"class":51},[45,31081,31018],{"class":55},[45,31083,30974],{"class":5366},[45,31085,59],{"class":51},[45,31087,356],{"class":79},[45,31089,655],{"class":55},[45,31091,31029],{"class":5366},[45,31093,59],{"class":51},[45,31095,356],{"class":79},[45,31097,139],{"class":55},[45,31099,31100],{"class":47,"line":1878},[45,31101,31102],{"class":337},"        # 定义平展层\n",[45,31104,31105,31107,31110,31112],{"class":47,"line":1883},[45,31106,30945],{"class":79},[45,31108,31109],{"class":55},".flatten",[45,31111,59],{"class":51},[45,31113,31114],{"class":55},"nn.Flatten()\n",[45,31116,31117],{"class":47,"line":1900},[45,31118,31119],{"class":337},"        # 定义全连接层\n",[45,31121,31122,31124,31127,31129,31132,31134,31136,31138],{"class":47,"line":1905},[45,31123,30945],{"class":79},[45,31125,31126],{"class":55},".f5",[45,31128,59],{"class":51},[45,31130,31131],{"class":55},"nn.Linear(",[45,31133,4137],{"class":79},[45,31135,655],{"class":55},[45,31137,1094],{"class":79},[45,31139,139],{"class":55},[45,31141,31142,31144,31147,31149,31151,31153,31155,31157],{"class":47,"line":1910},[45,31143,30945],{"class":79},[45,31145,31146],{"class":55},".f6",[45,31148,59],{"class":51},[45,31150,31131],{"class":55},[45,31152,1094],{"class":79},[45,31154,655],{"class":55},[45,31156,988],{"class":79},[45,31158,139],{"class":55},[45,31160,31161,31163,31166,31168,31170,31172,31174,31176],{"class":47,"line":1915},[45,31162,30945],{"class":79},[45,31164,31165],{"class":55},".f7",[45,31167,59],{"class":51},[45,31169,31131],{"class":55},[45,31171,988],{"class":79},[45,31173,655],{"class":55},[45,31175,723],{"class":79},[45,31177,139],{"class":55},[45,31179,31180],{"class":47,"line":1929},[45,31181,2550],{"emptyLinePlaceholder":207},[45,31183,31184],{"class":47,"line":1934},[45,31185,31186],{"class":337},"    # 写工具->写前向传播\n",[45,31188,31189,31191,31194],{"class":47,"line":2727},[45,31190,30901],{"class":51},[45,31192,31193],{"class":69}," forward",[45,31195,31196],{"class":55},"(self,x):\n",[45,31198,31199,31202,31204,31206,31209,31211],{"class":47,"line":2741},[45,31200,31201],{"class":55},"        x",[45,31203,59],{"class":51},[45,31205,30923],{"class":79},[45,31207,31208],{"class":55},".sig(",[45,31210,30923],{"class":79},[45,31212,31213],{"class":55},".c1(x))\n",[45,31215,31216,31218,31220,31222],{"class":47,"line":2749},[45,31217,31201],{"class":55},[45,31219,59],{"class":51},[45,31221,30923],{"class":79},[45,31223,31224],{"class":55},".s2(x)\n",[45,31226,31227,31229,31231,31233,31235,31237],{"class":47,"line":2754},[45,31228,31201],{"class":55},[45,31230,59],{"class":51},[45,31232,30923],{"class":79},[45,31234,31208],{"class":55},[45,31236,30923],{"class":79},[45,31238,31239],{"class":55},".c3(x))\n",[45,31241,31242,31244,31246,31248],{"class":47,"line":2760},[45,31243,31201],{"class":55},[45,31245,59],{"class":51},[45,31247,30923],{"class":79},[45,31249,31250],{"class":55},".s4(x)\n",[45,31252,31253,31255,31257,31259],{"class":47,"line":2766},[45,31254,31201],{"class":55},[45,31256,59],{"class":51},[45,31258,30923],{"class":79},[45,31260,31261],{"class":55},".flatten(x)\n",[45,31263,31264,31266,31268,31270,31272,31274],{"class":47,"line":2771},[45,31265,31201],{"class":55},[45,31267,59],{"class":51},[45,31269,30923],{"class":79},[45,31271,31208],{"class":55},[45,31273,30923],{"class":79},[45,31275,31276],{"class":55},".f5(x))\n",[45,31278,31279,31281,31283,31285,31287,31289],{"class":47,"line":8098},[45,31280,31201],{"class":55},[45,31282,59],{"class":51},[45,31284,30923],{"class":79},[45,31286,31208],{"class":55},[45,31288,30923],{"class":79},[45,31290,31291],{"class":55},".f6(x))\n",[45,31293,31294,31296,31298,31300],{"class":47,"line":8122},[45,31295,31201],{"class":55},[45,31297,59],{"class":51},[45,31299,30923],{"class":79},[45,31301,31302],{"class":55},".f7(x)\n",[45,31304,31305,31307],{"class":47,"line":8127},[45,31306,14901],{"class":51},[45,31308,31309],{"class":55}," x\n",[45,31311,31312],{"class":47,"line":8133},[45,31313,2550],{"emptyLinePlaceholder":207},[45,31315,31316,31318,31321,31323,31326],{"class":47,"line":8160},[45,31317,1682],{"class":51},[45,31319,31320],{"class":79}," __name__",[45,31322,3099],{"class":51},[45,31324,31325],{"class":62},"\"__main__\"",[45,31327,3889],{"class":55},[45,31329,31330],{"class":47,"line":8165},[45,31331,31332],{"class":337},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[45,31334,31335,31338,31340,31342,31345,31347,31350,31352,31354],{"class":47,"line":8171},[45,31336,31337],{"class":55},"    device",[45,31339,59],{"class":51},[45,31341,30551],{"class":55},[45,31343,31344],{"class":62},"\"cuda\"",[45,31346,1855],{"class":51},[45,31348,31349],{"class":55}," torch.cuda.is_available() ",[45,31351,1852],{"class":51},[45,31353,30576],{"class":62},[45,31355,139],{"class":55},[45,31357,31358],{"class":47,"line":8183},[45,31359,31360],{"class":337},"    # 如果就是想指定用cpu用下方代码:\n",[45,31362,31363],{"class":47,"line":8195},[45,31364,31365],{"class":337},"    # device=\"cpu\"\n",[45,31367,31368],{"class":47,"line":8207},[45,31369,31370],{"class":337},"    # print(device)\n",[45,31372,31373],{"class":47,"line":9866},[45,31374,2550],{"emptyLinePlaceholder":207},[45,31376,31377],{"class":47,"line":9890},[45,31378,31379],{"class":337},"    # 实例化模型\n",[45,31381,31382],{"class":47,"line":9913},[45,31383,31384],{"class":337},"    # 将模型放到设备中去运行\n",[45,31386,31387,31390,31392],{"class":47,"line":9937},[45,31388,31389],{"class":55},"    model",[45,31391,59],{"class":51},[45,31393,31394],{"class":55},"LeNet().to(device)\n",[45,31396,31397,31400,31403,31405,31407,31409,31411,31413],{"class":47,"line":9942},[45,31398,31399],{"class":79},"    print",[45,31401,31402],{"class":55},"(summary(model,(",[45,31404,495],{"class":79},[45,31406,655],{"class":55},[45,31408,1178],{"class":79},[45,31410,655],{"class":55},[45,31412,1178],{"class":79},[45,31414,31415],{"class":55},")))\n",[20,31417,31418],{},[23,31419],{"alt":25,"src":31420},"\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,31422,31423],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[233,31425,31426],{"start":66},[169,31427,31428],{},"训练",[20,31430,31431],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[20,31433,31434],{},"在训练之前可以将数据展示看一下",[36,31436,31438],{"className":30478,"code":31437,"language":30480,"meta":25,"style":25},"# 建立画图的函数，用于展示数据\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",[42,31439,31440,31445,31450,31462,31474,31487,31492,31504,31509,31521,31526,31538,31542,31546,31567,31579,31584,31605,31616,31620,31625,31643,31654,31659,31670,31675,31686,31690,31695,31710,31723,31728,31733,31746,31759,31772,31777,31781,31786,31806,31823,31843,31856,31869,31879,31894],{"__ignoreMap":25},[45,31441,31442],{"class":47,"line":48},[45,31443,31444],{"class":337},"# 建立画图的函数，用于展示数据\n",[45,31446,31447],{"class":47,"line":66},[45,31448,31449],{"class":337},"# torchvision中包含很多内置的数据集\n",[45,31451,31452,31454,31457,31459],{"class":47,"line":1331},[45,31453,30837],{"class":51},[45,31455,31456],{"class":55}," sklearn.externals.array_api_compat.torch ",[45,31458,30492],{"class":51},[45,31460,31461],{"class":55}," squeeze\n",[45,31463,31464,31466,31469,31471],{"class":47,"line":1346},[45,31465,30837],{"class":51},[45,31467,31468],{"class":55}," torchvision.datasets ",[45,31470,30492],{"class":51},[45,31472,31473],{"class":55}," FashionMNIST\n",[45,31475,31476,31478,31481,31484],{"class":47,"line":1352},[45,31477,30492],{"class":51},[45,31479,31480],{"class":55}," numpy ",[45,31482,31483],{"class":51},"as",[45,31485,31486],{"class":55}," np\n",[45,31488,31489],{"class":47,"line":1366},[45,31490,31491],{"class":337},"# 引入处理数据集的包\n",[45,31493,31494,31496,31499,31501],{"class":47,"line":1372},[45,31495,30837],{"class":51},[45,31497,31498],{"class":55}," torchvision ",[45,31500,30492],{"class":51},[45,31502,31503],{"class":55}," transforms\n",[45,31505,31506],{"class":47,"line":1463},[45,31507,31508],{"class":337},"# 从torch库中引入数据处理的包\n",[45,31510,31511,31513,31516,31518],{"class":47,"line":1469},[45,31512,30492],{"class":51},[45,31514,31515],{"class":55}," torch.utils.data ",[45,31517,31483],{"class":51},[45,31519,31520],{"class":55}," Data\n",[45,31522,31523],{"class":47,"line":1481},[45,31524,31525],{"class":337},"# 导入画图的库\n",[45,31527,31528,31530,31533,31535],{"class":47,"line":1763},[45,31529,30492],{"class":51},[45,31531,31532],{"class":55}," matplotlib.pyplot ",[45,31534,31483],{"class":51},[45,31536,31537],{"class":55}," plt\n",[45,31539,31540],{"class":47,"line":1768},[45,31541,2550],{"emptyLinePlaceholder":207},[45,31543,31544],{"class":47,"line":1774},[45,31545,2550],{"emptyLinePlaceholder":207},[45,31547,31548,31551,31553,31556,31559,31561,31564],{"class":47,"line":1779},[45,31549,31550],{"class":55},"train_data",[45,31552,59],{"class":51},[45,31554,31555],{"class":55},"FashionMNIST(",[45,31557,31558],{"class":5366},"root",[45,31560,59],{"class":51},[45,31562,31563],{"class":62},"'.\u002Fdata'",[45,31565,31566],{"class":55},",\n",[45,31568,31569,31572,31574,31577],{"class":47,"line":1793},[45,31570,31571],{"class":5366},"                        train",[45,31573,59],{"class":51},[45,31575,31576],{"class":79},"True",[45,31578,31566],{"class":55},[45,31580,31581],{"class":47,"line":1798},[45,31582,31583],{"class":337},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[45,31585,31586,31589,31591,31594,31597,31599,31602],{"class":47,"line":1804},[45,31587,31588],{"class":5366},"                        transform",[45,31590,59],{"class":51},[45,31592,31593],{"class":55},"transforms.Compose([transforms.Resize(",[45,31595,31596],{"class":5366},"size",[45,31598,59],{"class":51},[45,31600,31601],{"class":79},"224",[45,31603,31604],{"class":55},"),transforms.ToTensor()]),\n",[45,31606,31607,31610,31612,31614],{"class":47,"line":1825},[45,31608,31609],{"class":5366},"                        download",[45,31611,59],{"class":51},[45,31613,31576],{"class":79},[45,31615,139],{"class":55},[45,31617,31618],{"class":47,"line":1830},[45,31619,2550],{"emptyLinePlaceholder":207},[45,31621,31622],{"class":47,"line":1844},[45,31623,31624],{"class":337},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[45,31626,31627,31630,31632,31635,31638,31640],{"class":47,"line":1849},[45,31628,31629],{"class":55},"train_loader",[45,31631,59],{"class":51},[45,31633,31634],{"class":55},"Data.DataLoader(",[45,31636,31637],{"class":5366},"dataset",[45,31639,59],{"class":51},[45,31641,31642],{"class":55},"train_data,\n",[45,31644,31645,31648,31650,31652],{"class":47,"line":1878},[45,31646,31647],{"class":5366},"                             batch_size",[45,31649,59],{"class":51},[45,31651,481],{"class":79},[45,31653,31566],{"class":55},[45,31655,31656],{"class":47,"line":1883},[45,31657,31658],{"class":337},"                             # 数据是否打乱\n",[45,31660,31661,31664,31666,31668],{"class":47,"line":1900},[45,31662,31663],{"class":5366},"                             shuffle",[45,31665,59],{"class":51},[45,31667,31576],{"class":79},[45,31669,31566],{"class":55},[45,31671,31672],{"class":47,"line":1905},[45,31673,31674],{"class":337},"                             # 规定加载数据的进程\n",[45,31676,31677,31680,31682,31684],{"class":47,"line":1910},[45,31678,31679],{"class":5366},"                             num_workers",[45,31681,59],{"class":51},[45,31683,469],{"class":79},[45,31685,139],{"class":55},[45,31687,31688],{"class":47,"line":1915},[45,31689,2550],{"emptyLinePlaceholder":207},[45,31691,31692],{"class":47,"line":1929},[45,31693,31694],{"class":337},"# 获得一个batch的数据\n",[45,31696,31697,31699,31702,31704,31707],{"class":47,"line":1934},[45,31698,3175],{"class":51},[45,31700,31701],{"class":55}," step,(b_x,b_y) ",[45,31703,26143],{"class":51},[45,31705,31706],{"class":79}," enumerate",[45,31708,31709],{"class":55},"(train_loader):\n",[45,31711,31712,31714,31717,31719,31721],{"class":47,"line":2727},[45,31713,3251],{"class":51},[45,31715,31716],{"class":55}," step ",[45,31718,1237],{"class":51},[45,31720,4243],{"class":79},[45,31722,3889],{"class":55},[45,31724,31725],{"class":47,"line":2741},[45,31726,31727],{"class":51},"        break\n",[45,31729,31730],{"class":47,"line":2749},[45,31731,31732],{"class":337},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[45,31734,31735,31738,31740,31743],{"class":47,"line":2754},[45,31736,31737],{"class":55},"batch_x",[45,31739,59],{"class":51},[45,31741,31742],{"class":55},"b_x.squeeze().numpy()  ",[45,31744,31745],{"class":337},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[45,31747,31748,31751,31753,31756],{"class":47,"line":2760},[45,31749,31750],{"class":55},"batch_y",[45,31752,59],{"class":51},[45,31754,31755],{"class":55},"b_y.numpy()   ",[45,31757,31758],{"class":337},"#将张量转换成功numpy数组\n",[45,31760,31761,31764,31766,31769],{"class":47,"line":2766},[45,31762,31763],{"class":55},"class_label",[45,31765,59],{"class":51},[45,31767,31768],{"class":55},"train_data.classes  ",[45,31770,31771],{"class":337},"#训练集标签\n",[45,31773,31774],{"class":47,"line":2771},[45,31775,31776],{"class":337},"# print(class_label)\n",[45,31778,31779],{"class":47,"line":8098},[45,31780,2550],{"emptyLinePlaceholder":207},[45,31782,31783],{"class":47,"line":8122},[45,31784,31785],{"class":337},"# 可视化一个batch的图像\n",[45,31787,31788,31791,31794,31796,31798,31800,31802,31804],{"class":47,"line":8127},[45,31789,31790],{"class":55},"plt.figure(",[45,31792,31793],{"class":5366},"figsize",[45,31795,59],{"class":51},[45,31797,282],{"class":55},[45,31799,775],{"class":79},[45,31801,655],{"class":55},[45,31803,596],{"class":79},[45,31805,30597],{"class":55},[45,31807,31808,31810,31813,31815,31818,31820],{"class":47,"line":8133},[45,31809,3175],{"class":51},[45,31811,31812],{"class":55}," ii ",[45,31814,26143],{"class":51},[45,31816,31817],{"class":55}," np.arange(",[45,31819,7508],{"class":79},[45,31821,31822],{"class":55},"(batch_y)):\n",[45,31824,31825,31828,31830,31832,31834,31837,31839,31841],{"class":47,"line":8160},[45,31826,31827],{"class":55},"    plt.subplot(",[45,31829,570],{"class":79},[45,31831,655],{"class":55},[45,31833,878],{"class":79},[45,31835,31836],{"class":55},",ii ",[45,31838,758],{"class":51},[45,31840,136],{"class":79},[45,31842,139],{"class":55},[45,31844,31845,31848,31851,31853],{"class":47,"line":8165},[45,31846,31847],{"class":55},"    plt.imshow(batch_x[ii,:,:],",[45,31849,31850],{"class":5366},"cmap",[45,31852,59],{"class":51},[45,31854,31855],{"class":55},"plt.cm.gray)\n",[45,31857,31858,31861,31863,31865,31867],{"class":47,"line":8171},[45,31859,31860],{"class":55},"    plt.title(class_label[batch_y[ii]],",[45,31862,31596],{"class":5366},[45,31864,59],{"class":51},[45,31866,723],{"class":79},[45,31868,139],{"class":55},[45,31870,31871,31874,31877],{"class":47,"line":8183},[45,31872,31873],{"class":55},"    plt.axis(",[45,31875,31876],{"class":62},"\"off\"",[45,31878,139],{"class":55},[45,31880,31881,31884,31887,31889,31892],{"class":47,"line":8195},[45,31882,31883],{"class":55},"    plt.subplots_adjust(",[45,31885,31886],{"class":5366},"wspace",[45,31888,59],{"class":51},[45,31890,31891],{"class":79},"0.05",[45,31893,139],{"class":55},[45,31895,31896],{"class":47,"line":8207},[45,31897,31898],{"class":55},"plt.show()\n",[20,31900,31901],{},"用matplotlib进行展示的过程可以后续再补",[20,31903,31904],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[20,31906,31907],{},"训练次数就是按照批次过整个训练集数据的次数",[20,31909,31910],{},"模型训练：",[36,31912,31914],{"className":30478,"code":31913,"language":30480,"meta":25,"style":25},"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",[42,31915,31916,31923,31930,31934,31946,31952,31963,31973,31983,31993,32003,32008,32020,32030,32034,32038,32043,32054,32067,32078,32095,32106,32145,32161,32173,32184,32189,32200,32216,32227,32238,32249,32256,32260,32265,32270,32274,32279,32289,32310,32314,32318,32323,32328,32333,32353,32357,32362,32372,32376,32381,32390,32395,32400,32405,32415,32419,32423,32428,32433,32443,32448,32458,32463,32472,32477,32486,32491,32500,32504,32509,32519,32523,32527,32532,32547,32575,32590,32594,32599,32604,32613,32618,32627,32632,32641,32646,32655,32660,32669,32674,32683,32688,32701,32706,32716,32721,32731,32737,32743,32749,32755,32766,32772,32792,32798,32809,32815,32821,32827,32833,32839,32845,32851,32871,32877,32893,32899,32913,32919,32934,32940,32949,32955,32964,32970,32976,32985,32991,33002,33008,33027,33033,33044,33050,33070,33086,33092,33106,33112,33118,33129,33135,33141,33151,33157,33168,33174,33184,33189,33195,33244,33291,33296,33302,33321,33327,33347,33353,33359,33369,33374,33380,33396,33441,33447,33453,33459,33470,33476,33482,33488,33506,33520,33529,33538,33547,33556,33562,33568,33576,33581,33587,33598,33604,33624,33630,33636,33642,33659,33665,33671,33677,33683,33689,33716,33740,33746,33752,33758,33769,33780,33786,33803,33826,33849,33855,33860,33869,33879,33885,33890,33896,33909,33915,33926,33937,33956],{"__ignoreMap":25},[45,31917,31918,31920],{"class":47,"line":48},[45,31919,30492],{"class":51},[45,31921,31922],{"class":55}," copy\n",[45,31924,31925,31927],{"class":47,"line":66},[45,31926,30492],{"class":51},[45,31928,31929],{"class":55}," time\n",[45,31931,31932],{"class":47,"line":1331},[45,31933,2550],{"emptyLinePlaceholder":207},[45,31935,31936,31938,31941,31943],{"class":47,"line":1346},[45,31937,30492],{"class":51},[45,31939,31940],{"class":55}," pandas ",[45,31942,31483],{"class":51},[45,31944,31945],{"class":55}," pd\n",[45,31947,31948,31950],{"class":47,"line":1352},[45,31949,30492],{"class":51},[45,31951,30495],{"class":55},[45,31953,31954,31956,31958,31960],{"class":47,"line":1366},[45,31955,30837],{"class":51},[45,31957,31515],{"class":55},[45,31959,30492],{"class":51},[45,31961,31962],{"class":55}," Dataset\n",[45,31964,31965,31967,31969,31971],{"class":47,"line":1372},[45,31966,30837],{"class":51},[45,31968,31468],{"class":55},[45,31970,30492],{"class":51},[45,31972,31473],{"class":55},[45,31974,31975,31977,31979,31981],{"class":47,"line":1463},[45,31976,30837],{"class":51},[45,31978,31498],{"class":55},[45,31980,30492],{"class":51},[45,31982,31503],{"class":55},[45,31984,31985,31987,31989,31991],{"class":47,"line":1469},[45,31986,30492],{"class":51},[45,31988,31515],{"class":55},[45,31990,31483],{"class":51},[45,31992,31520],{"class":55},[45,31994,31995,31997,31999,32001],{"class":47,"line":1481},[45,31996,30492],{"class":51},[45,31998,31532],{"class":55},[45,32000,31483],{"class":51},[45,32002,31537],{"class":55},[45,32004,32005],{"class":47,"line":1763},[45,32006,32007],{"class":337},"# 导入模型\n",[45,32009,32010,32012,32015,32017],{"class":47,"line":1768},[45,32011,30837],{"class":51},[45,32013,32014],{"class":55}," model ",[45,32016,30492],{"class":51},[45,32018,32019],{"class":55}," LeNet\n",[45,32021,32022,32024,32026,32028],{"class":47,"line":1774},[45,32023,30837],{"class":51},[45,32025,30840],{"class":55},[45,32027,30492],{"class":51},[45,32029,30845],{"class":55},[45,32031,32032],{"class":47,"line":1779},[45,32033,2550],{"emptyLinePlaceholder":207},[45,32035,32036],{"class":47,"line":1793},[45,32037,2550],{"emptyLinePlaceholder":207},[45,32039,32040],{"class":47,"line":1798},[45,32041,32042],{"class":337},"# 处理训练集与验证集函数--->划分数据集\n",[45,32044,32045,32048,32051],{"class":47,"line":1804},[45,32046,32047],{"class":51},"def",[45,32049,32050],{"class":69}," train_val_data_process",[45,32052,32053],{"class":55},"():\n",[45,32055,32056,32059,32061,32063,32065],{"class":47,"line":1825},[45,32057,32058],{"class":55},"    train_data",[45,32060,59],{"class":51},[45,32062,31555],{"class":55},[45,32064,31563],{"class":62},[45,32066,31566],{"class":55},[45,32068,32069,32072,32074,32076],{"class":47,"line":1830},[45,32070,32071],{"class":5366},"                            train",[45,32073,59],{"class":51},[45,32075,31576],{"class":79},[45,32077,31566],{"class":55},[45,32079,32080,32083,32085,32087,32089,32091,32093],{"class":47,"line":1844},[45,32081,32082],{"class":5366},"                            transform",[45,32084,59],{"class":51},[45,32086,31593],{"class":55},[45,32088,31596],{"class":5366},[45,32090,59],{"class":51},[45,32092,1178],{"class":79},[45,32094,31604],{"class":55},[45,32096,32097,32100,32102,32104],{"class":47,"line":1849},[45,32098,32099],{"class":5366},"                            download",[45,32101,59],{"class":51},[45,32103,31576],{"class":79},[45,32105,139],{"class":55},[45,32107,32108,32111,32113,32116,32119,32121,32124,32126,32128,32131,32133,32135,32138,32140,32142],{"class":47,"line":1878},[45,32109,32110],{"class":55},"    train_data,val_data",[45,32112,59],{"class":51},[45,32114,32115],{"class":55},"Data.random_split(train_data,[",[45,32117,32118],{"class":79},"round",[45,32120,282],{"class":55},[45,32122,32123],{"class":79},"0.8",[45,32125,732],{"class":51},[45,32127,7508],{"class":79},[45,32129,32130],{"class":55},"(train_data)),",[45,32132,32118],{"class":79},[45,32134,282],{"class":55},[45,32136,32137],{"class":79},"0.2",[45,32139,732],{"class":51},[45,32141,7508],{"class":79},[45,32143,32144],{"class":55},"(train_data))])\n",[45,32146,32147,32150,32152,32155,32157,32159],{"class":47,"line":1883},[45,32148,32149],{"class":55},"    train_dataloader ",[45,32151,59],{"class":51},[45,32153,32154],{"class":55}," Data.DataLoader(",[45,32156,31637],{"class":5366},[45,32158,59],{"class":51},[45,32160,31642],{"class":55},[45,32162,32163,32166,32168,32171],{"class":47,"line":1900},[45,32164,32165],{"class":5366},"                                       batch_size",[45,32167,59],{"class":51},[45,32169,32170],{"class":79},"128",[45,32172,31566],{"class":55},[45,32174,32175,32178,32180,32182],{"class":47,"line":1905},[45,32176,32177],{"class":5366},"                                       shuffle",[45,32179,59],{"class":51},[45,32181,31576],{"class":79},[45,32183,31566],{"class":55},[45,32185,32186],{"class":47,"line":1910},[45,32187,32188],{"class":337},"                                       # 规定8个进程\n",[45,32190,32191,32194,32196,32198],{"class":47,"line":1915},[45,32192,32193],{"class":5366},"                                       num_workers",[45,32195,59],{"class":51},[45,32197,672],{"class":79},[45,32199,139],{"class":55},[45,32201,32202,32205,32207,32209,32211,32213],{"class":47,"line":1929},[45,32203,32204],{"class":55},"    val_dataloader",[45,32206,59],{"class":51},[45,32208,31634],{"class":55},[45,32210,31637],{"class":5366},[45,32212,59],{"class":51},[45,32214,32215],{"class":55},"val_data,\n",[45,32217,32218,32221,32223,32225],{"class":47,"line":1934},[45,32219,32220],{"class":5366},"                                   batch_size",[45,32222,59],{"class":51},[45,32224,32170],{"class":79},[45,32226,31566],{"class":55},[45,32228,32229,32232,32234,32236],{"class":47,"line":2727},[45,32230,32231],{"class":5366},"                                   shuffle",[45,32233,59],{"class":51},[45,32235,31576],{"class":79},[45,32237,31566],{"class":55},[45,32239,32240,32243,32245,32247],{"class":47,"line":2741},[45,32241,32242],{"class":5366},"                                   num_workers",[45,32244,59],{"class":51},[45,32246,672],{"class":79},[45,32248,139],{"class":55},[45,32250,32251,32253],{"class":47,"line":2749},[45,32252,4240],{"class":51},[45,32254,32255],{"class":55}," train_dataloader,val_dataloader\n",[45,32257,32258],{"class":47,"line":2754},[45,32259,2550],{"emptyLinePlaceholder":207},[45,32261,32262],{"class":47,"line":2760},[45,32263,32264],{"class":337},"# 验证是否出错\n",[45,32266,32267],{"class":47,"line":2766},[45,32268,32269],{"class":337},"# train_val_data_process()\n",[45,32271,32272],{"class":47,"line":2771},[45,32273,2550],{"emptyLinePlaceholder":207},[45,32275,32276],{"class":47,"line":8098},[45,32277,32278],{"class":337},"# 定义模型训练函数\n",[45,32280,32281,32283,32286],{"class":47,"line":8122},[45,32282,32047],{"class":51},[45,32284,32285],{"class":69}," train_model_process",[45,32287,32288],{"class":55},"(model,train_dataloader,val_dataloader,num_epochs):\n",[45,32290,32291,32293,32295,32297,32299,32301,32303,32305,32308],{"class":47,"line":8127},[45,32292,31337],{"class":55},[45,32294,59],{"class":51},[45,32296,30551],{"class":55},[45,32298,31344],{"class":62},[45,32300,1855],{"class":51},[45,32302,31349],{"class":55},[45,32304,1852],{"class":51},[45,32306,32307],{"class":62}," 'cpu'",[45,32309,139],{"class":55},[45,32311,32312],{"class":47,"line":8133},[45,32313,2550],{"emptyLinePlaceholder":207},[45,32315,32316],{"class":47,"line":8160},[45,32317,2550],{"emptyLinePlaceholder":207},[45,32319,32320],{"class":47,"line":8165},[45,32321,32322],{"class":337},"    # 定义优化器\n",[45,32324,32325],{"class":47,"line":8171},[45,32326,32327],{"class":337},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[45,32329,32330],{"class":47,"line":8183},[45,32331,32332],{"class":337},"    # lr为学习率\n",[45,32334,32335,32338,32340,32343,32346,32348,32351],{"class":47,"line":8195},[45,32336,32337],{"class":55},"    optimizer",[45,32339,59],{"class":51},[45,32341,32342],{"class":55},"torch.optim.Adam(model.parameters(),",[45,32344,32345],{"class":5366},"lr",[45,32347,59],{"class":51},[45,32349,32350],{"class":79},"0.001",[45,32352,139],{"class":55},[45,32354,32355],{"class":47,"line":8207},[45,32356,2550],{"emptyLinePlaceholder":207},[45,32358,32359],{"class":47,"line":9866},[45,32360,32361],{"class":337},"    # 定义损失函数使用交叉熵损失函数\n",[45,32363,32364,32367,32369],{"class":47,"line":9890},[45,32365,32366],{"class":55},"    criterion",[45,32368,59],{"class":51},[45,32370,32371],{"class":55},"nn.CrossEntropyLoss()\n",[45,32373,32374],{"class":47,"line":9913},[45,32375,2550],{"emptyLinePlaceholder":207},[45,32377,32378],{"class":47,"line":9937},[45,32379,32380],{"class":337},"    # 将模型放到GPU中进行训练\n",[45,32382,32383,32385,32387],{"class":47,"line":9942},[45,32384,31389],{"class":55},[45,32386,59],{"class":51},[45,32388,32389],{"class":55},"model.to(device)\n",[45,32391,32392],{"class":47,"line":9947},[45,32393,32394],{"class":337},"    # 复制当前模型的参数\n",[45,32396,32397],{"class":47,"line":9952},[45,32398,32399],{"class":337},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[45,32401,32402],{"class":47,"line":9961},[45,32403,32404],{"class":337},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[45,32406,32407,32410,32412],{"class":47,"line":9966},[45,32408,32409],{"class":55},"    best_model_wts",[45,32411,59],{"class":51},[45,32413,32414],{"class":55},"copy.deepcopy(model.state_dict())\n",[45,32416,32417],{"class":47,"line":9972},[45,32418,2550],{"emptyLinePlaceholder":207},[45,32420,32421],{"class":47,"line":9993},[45,32422,2550],{"emptyLinePlaceholder":207},[45,32424,32425],{"class":47,"line":9999},[45,32426,32427],{"class":337},"    # 初始化参数\n",[45,32429,32430],{"class":47,"line":10013},[45,32431,32432],{"class":337},"    # 最高准确度\n",[45,32434,32435,32438,32440],{"class":47,"line":10019},[45,32436,32437],{"class":55},"    best_acc",[45,32439,59],{"class":51},[45,32441,32442],{"class":79},"0.0\n",[45,32444,32445],{"class":47,"line":10046},[45,32446,32447],{"class":337},"    # 训练集损失列表\n",[45,32449,32450,32453,32455],{"class":47,"line":10055},[45,32451,32452],{"class":55},"    train_loss_all",[45,32454,59],{"class":51},[45,32456,32457],{"class":55},"[]\n",[45,32459,32460],{"class":47,"line":10061},[45,32461,32462],{"class":337},"    # 验证集函数列表\n",[45,32464,32465,32468,32470],{"class":47,"line":10069},[45,32466,32467],{"class":55},"    val_loss_all",[45,32469,59],{"class":51},[45,32471,32457],{"class":55},[45,32473,32474],{"class":47,"line":10074},[45,32475,32476],{"class":337},"    # 训练集准确度列表\n",[45,32478,32479,32482,32484],{"class":47,"line":16753},[45,32480,32481],{"class":55},"    train_acc_all",[45,32483,59],{"class":51},[45,32485,32457],{"class":55},[45,32487,32488],{"class":47,"line":16759},[45,32489,32490],{"class":337},"    # 验证集准确度列表\n",[45,32492,32493,32496,32498],{"class":47,"line":16782},[45,32494,32495],{"class":55},"    val_acc_all",[45,32497,59],{"class":51},[45,32499,32457],{"class":55},[45,32501,32502],{"class":47,"line":16788},[45,32503,2550],{"emptyLinePlaceholder":207},[45,32505,32506],{"class":47,"line":16811},[45,32507,32508],{"class":337},"    # 保存当前时间--->方便看每轮训练的时间\n",[45,32510,32511,32514,32516],{"class":47,"line":16825},[45,32512,32513],{"class":55},"    since",[45,32515,59],{"class":51},[45,32517,32518],{"class":55},"time.time()\n",[45,32520,32521],{"class":47,"line":16845},[45,32522,2550],{"emptyLinePlaceholder":207},[45,32524,32525],{"class":47,"line":16851},[45,32526,2550],{"emptyLinePlaceholder":207},[45,32528,32529],{"class":47,"line":16862},[45,32530,32531],{"class":337},"    # 准备工作完成--->开始训练模型\n",[45,32533,32534,32536,32539,32541,32544],{"class":47,"line":16885},[45,32535,3351],{"class":51},[45,32537,32538],{"class":55}," epoch ",[45,32540,26143],{"class":51},[45,32542,32543],{"class":79}," range",[45,32545,32546],{"class":55},"(num_epochs):\n",[45,32548,32549,32552,32554,32557,32560,32562,32564,32566,32569,32571,32573],{"class":47,"line":16907},[45,32550,32551],{"class":79},"        print",[45,32553,282],{"class":55},[45,32555,32556],{"class":62},"\"Epoch ",[45,32558,32559],{"class":79},"{}",[45,32561,861],{"class":62},[45,32563,32559],{"class":79},[45,32565,89],{"class":62},[45,32567,32568],{"class":55},".format(epoch,num_epochs",[45,32570,809],{"class":51},[45,32572,495],{"class":79},[45,32574,30597],{"class":55},[45,32576,32577,32579,32581,32584,32586,32588],{"class":47,"line":16912},[45,32578,32551],{"class":79},[45,32580,282],{"class":55},[45,32582,32583],{"class":62},"\"-\"",[45,32585,732],{"class":51},[45,32587,723],{"class":79},[45,32589,139],{"class":55},[45,32591,32592],{"class":47,"line":16918},[45,32593,2550],{"emptyLinePlaceholder":207},[45,32595,32596],{"class":47,"line":16932},[45,32597,32598],{"class":337},"        # 初始化参数\n",[45,32600,32601],{"class":47,"line":16945},[45,32602,32603],{"class":337},"        # 训练集损失函数\n",[45,32605,32606,32609,32611],{"class":47,"line":16950},[45,32607,32608],{"class":55},"        train_loss",[45,32610,59],{"class":51},[45,32612,32442],{"class":79},[45,32614,32615],{"class":47,"line":16964},[45,32616,32617],{"class":337},"        # 训练集准确度\n",[45,32619,32620,32623,32625],{"class":47,"line":16969},[45,32621,32622],{"class":55},"        train_corrects",[45,32624,59],{"class":51},[45,32626,3235],{"class":79},[45,32628,32629],{"class":47,"line":16975},[45,32630,32631],{"class":337},"        # 验证集损失函数\n",[45,32633,32634,32637,32639],{"class":47,"line":16980},[45,32635,32636],{"class":55},"        val_loss",[45,32638,59],{"class":51},[45,32640,32442],{"class":79},[45,32642,32643],{"class":47,"line":16994},[45,32644,32645],{"class":337},"        # 验证集准确度\n",[45,32647,32648,32651,32653],{"class":47,"line":16999},[45,32649,32650],{"class":55},"        val_corrects",[45,32652,59],{"class":51},[45,32654,3235],{"class":79},[45,32656,32657],{"class":47,"line":17004},[45,32658,32659],{"class":337},"        # 训练集样本数量\n",[45,32661,32662,32665,32667],{"class":47,"line":17018},[45,32663,32664],{"class":55},"        train_num",[45,32666,59],{"class":51},[45,32668,3235],{"class":79},[45,32670,32671],{"class":47,"line":17030},[45,32672,32673],{"class":337},"        # 验证集样本数量\n",[45,32675,32676,32679,32681],{"class":47,"line":17035},[45,32677,32678],{"class":55},"        val_num",[45,32680,59],{"class":51},[45,32682,3235],{"class":79},[45,32684,32685],{"class":47,"line":17048},[45,32686,32687],{"class":337},"        # 将数据放到设备,并开始训练\n",[45,32689,32690,32692,32694,32696,32698],{"class":47,"line":17053},[45,32691,3553],{"class":51},[45,32693,31701],{"class":55},[45,32695,26143],{"class":51},[45,32697,31706],{"class":79},[45,32699,32700],{"class":55},"(train_dataloader):\n",[45,32702,32703],{"class":47,"line":17058},[45,32704,32705],{"class":337},"            # 将特征放入到训练设备\n",[45,32707,32708,32711,32713],{"class":47,"line":17063},[45,32709,32710],{"class":55},"            b_x",[45,32712,59],{"class":51},[45,32714,32715],{"class":55},"b_x.to(device)\n",[45,32717,32718],{"class":47,"line":17076},[45,32719,32720],{"class":337},"            # 将标签放入到训练设备当中\n",[45,32722,32723,32726,32728],{"class":47,"line":17081},[45,32724,32725],{"class":55},"            b_y",[45,32727,59],{"class":51},[45,32729,32730],{"class":55},"b_y.to(device)\n",[45,32732,32734],{"class":47,"line":32733},98,[45,32735,32736],{"class":337},"            # 设置模型为训练模式\n",[45,32738,32740],{"class":47,"line":32739},99,[45,32741,32742],{"class":55},"            model.train()\n",[45,32744,32746],{"class":47,"line":32745},100,[45,32747,32748],{"class":337},"            # 将数据放到模型当中,开始前向传播\n",[45,32750,32752],{"class":47,"line":32751},101,[45,32753,32754],{"class":337},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[45,32756,32758,32761,32763],{"class":47,"line":32757},102,[45,32759,32760],{"class":55},"            output",[45,32762,59],{"class":51},[45,32764,32765],{"class":55},"model(b_x)\n",[45,32767,32769],{"class":47,"line":32768},103,[45,32770,32771],{"class":337},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[45,32773,32775,32778,32780,32783,32786,32788,32790],{"class":47,"line":32774},104,[45,32776,32777],{"class":55},"            pre_lab",[45,32779,59],{"class":51},[45,32781,32782],{"class":55},"torch.argmax(output,",[45,32784,32785],{"class":5366},"dim",[45,32787,59],{"class":51},[45,32789,495],{"class":79},[45,32791,139],{"class":55},[45,32793,32795],{"class":47,"line":32794},105,[45,32796,32797],{"class":337},"            # 计算每一个batch的损失函数\n",[45,32799,32801,32804,32806],{"class":47,"line":32800},106,[45,32802,32803],{"class":55},"            loss",[45,32805,59],{"class":51},[45,32807,32808],{"class":55},"criterion(output,b_y)\n",[45,32810,32812],{"class":47,"line":32811},107,[45,32813,32814],{"class":337},"            # 将梯度初始化为0\n",[45,32816,32818],{"class":47,"line":32817},108,[45,32819,32820],{"class":55},"            optimizer.zero_grad()\n",[45,32822,32824],{"class":47,"line":32823},109,[45,32825,32826],{"class":337},"            # 梯度置为0后再进行反向传播\n",[45,32828,32830],{"class":47,"line":32829},110,[45,32831,32832],{"class":55},"            loss.backward()\n",[45,32834,32836],{"class":47,"line":32835},111,[45,32837,32838],{"class":337},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[45,32840,32842],{"class":47,"line":32841},112,[45,32843,32844],{"class":55},"            optimizer.step()\n",[45,32846,32848],{"class":47,"line":32847},113,[45,32849,32850],{"class":337},"            # loss.item()指的是batch的平均损失\n",[45,32852,32854,32857,32859,32862,32864,32867,32869],{"class":47,"line":32853},114,[45,32855,32856],{"class":55},"            train_loss",[45,32858,9627],{"class":51},[45,32860,32861],{"class":55},"loss.item()",[45,32863,732],{"class":51},[45,32865,32866],{"class":55},"b_x.size(",[45,32868,469],{"class":79},[45,32870,139],{"class":55},[45,32872,32874],{"class":47,"line":32873},115,[45,32875,32876],{"class":337},"            # 计算每个批次中正确预测的数量\n",[45,32878,32880,32883,32885,32888,32890],{"class":47,"line":32879},116,[45,32881,32882],{"class":55},"            train_corrects",[45,32884,9627],{"class":51},[45,32886,32887],{"class":55},"torch.sum(pre_lab",[45,32889,3099],{"class":51},[45,32891,32892],{"class":55},"b_y.data)\n",[45,32894,32896],{"class":47,"line":32895},117,[45,32897,32898],{"class":337},"            # 计算目前为止一共处理了多少样本\n",[45,32900,32902,32905,32907,32909,32911],{"class":47,"line":32901},118,[45,32903,32904],{"class":55},"            train_num",[45,32906,9627],{"class":51},[45,32908,32866],{"class":55},[45,32910,469],{"class":79},[45,32912,139],{"class":55},[45,32914,32916],{"class":47,"line":32915},119,[45,32917,32918],{"class":337},"        # 验证数据\n",[45,32920,32922,32924,32927,32929,32931],{"class":47,"line":32921},120,[45,32923,3553],{"class":51},[45,32925,32926],{"class":55}," step ,(b_x,b_y) ",[45,32928,26143],{"class":51},[45,32930,31706],{"class":79},[45,32932,32933],{"class":55},"(val_dataloader):\n",[45,32935,32937],{"class":47,"line":32936},121,[45,32938,32939],{"class":337},"            # 将特征放到验证设备当中\n",[45,32941,32943,32945,32947],{"class":47,"line":32942},122,[45,32944,32710],{"class":55},[45,32946,59],{"class":51},[45,32948,32715],{"class":55},[45,32950,32952],{"class":47,"line":32951},123,[45,32953,32954],{"class":337},"            # 将标签放到放到训练设备当中\n",[45,32956,32958,32960,32962],{"class":47,"line":32957},124,[45,32959,32725],{"class":55},[45,32961,59],{"class":51},[45,32963,32730],{"class":55},[45,32965,32967],{"class":47,"line":32966},125,[45,32968,32969],{"class":337},"            # 开启验证模式，设置模型为评估模式\n",[45,32971,32973],{"class":47,"line":32972},126,[45,32974,32975],{"class":55},"            model.eval()\n",[45,32977,32979,32982],{"class":47,"line":32978},127,[45,32980,32981],{"class":51},"            with",[45,32983,32984],{"class":55}," torch.no_grad():\n",[45,32986,32988],{"class":47,"line":32987},128,[45,32989,32990],{"class":337},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[45,32992,32994,32997,32999],{"class":47,"line":32993},129,[45,32995,32996],{"class":55},"                output ",[45,32998,59],{"class":51},[45,33000,33001],{"class":55}," model(b_x)\n",[45,33003,33005],{"class":47,"line":33004},130,[45,33006,33007],{"class":337},"                # 查找每一行中最大值对应的下标\n",[45,33009,33011,33014,33016,33019,33021,33023,33025],{"class":47,"line":33010},131,[45,33012,33013],{"class":55},"                pre_lab ",[45,33015,59],{"class":51},[45,33017,33018],{"class":55}," torch.argmax(output, ",[45,33020,32785],{"class":5366},[45,33022,59],{"class":51},[45,33024,495],{"class":79},[45,33026,139],{"class":55},[45,33028,33030],{"class":47,"line":33029},132,[45,33031,33032],{"class":337},"                # 计算验证集上的当前 batch 损失\n",[45,33034,33036,33039,33041],{"class":47,"line":33035},133,[45,33037,33038],{"class":55},"                val_batch_loss ",[45,33040,59],{"class":51},[45,33042,33043],{"class":55}," criterion(output, b_y)\n",[45,33045,33047],{"class":47,"line":33046},134,[45,33048,33049],{"class":337},"                # 对损失函数进行累加（按样本数加权）\n",[45,33051,33053,33056,33058,33061,33063,33066,33068],{"class":47,"line":33052},135,[45,33054,33055],{"class":55},"                val_loss ",[45,33057,9627],{"class":51},[45,33059,33060],{"class":55}," val_batch_loss.item() ",[45,33062,732],{"class":51},[45,33064,33065],{"class":55}," b_x.size(",[45,33067,469],{"class":79},[45,33069,139],{"class":55},[45,33071,33073,33076,33078,33081,33083],{"class":47,"line":33072},136,[45,33074,33075],{"class":55},"                val_corrects ",[45,33077,9627],{"class":51},[45,33079,33080],{"class":55}," torch.sum(pre_lab ",[45,33082,3099],{"class":51},[45,33084,33085],{"class":55}," b_y.data)\n",[45,33087,33089],{"class":47,"line":33088},137,[45,33090,33091],{"class":337},"                # 当前用于验证的样本数量\n",[45,33093,33095,33098,33100,33102,33104],{"class":47,"line":33094},138,[45,33096,33097],{"class":55},"            val_num ",[45,33099,9627],{"class":51},[45,33101,33065],{"class":55},[45,33103,469],{"class":79},[45,33105,139],{"class":55},[45,33107,33109],{"class":47,"line":33108},139,[45,33110,33111],{"class":337},"        # 计算并保存每一次迭代的loss值和准确率\n",[45,33113,33115],{"class":47,"line":33114},140,[45,33116,33117],{"class":337},"        # 计算并保存训练集的loss值\n",[45,33119,33121,33124,33126],{"class":47,"line":33120},141,[45,33122,33123],{"class":55},"        train_loss_all.append(train_loss",[45,33125,861],{"class":51},[45,33127,33128],{"class":55},"train_num)\n",[45,33130,33132],{"class":47,"line":33131},142,[45,33133,33134],{"class":337},"        # 取双精度\n",[45,33136,33138],{"class":47,"line":33137},143,[45,33139,33140],{"class":337},"        # 计算并保存训练集的准确率\n",[45,33142,33144,33147,33149],{"class":47,"line":33143},144,[45,33145,33146],{"class":55},"        train_acc_all.append(train_corrects.double().item()",[45,33148,861],{"class":51},[45,33150,33128],{"class":55},[45,33152,33154],{"class":47,"line":33153},145,[45,33155,33156],{"class":337},"        # 计算并保存验证集的loss值\n",[45,33158,33160,33163,33165],{"class":47,"line":33159},146,[45,33161,33162],{"class":55},"        val_loss_all.append(val_loss",[45,33164,861],{"class":51},[45,33166,33167],{"class":55},"val_num)\n",[45,33169,33171],{"class":47,"line":33170},147,[45,33172,33173],{"class":337},"        # 计算并保存验证集的准确率\n",[45,33175,33177,33180,33182],{"class":47,"line":33176},148,[45,33178,33179],{"class":55},"        val_acc_all.append(val_corrects.double().item()",[45,33181,861],{"class":51},[45,33183,33167],{"class":55},[45,33185,33187],{"class":47,"line":33186},149,[45,33188,2550],{"emptyLinePlaceholder":207},[45,33190,33192],{"class":47,"line":33191},150,[45,33193,33194],{"class":337},"        # 打印训练一轮的loss值和准确率\n",[45,33196,33198,33200,33202,33204,33206,33209,33211,33214,33216,33219,33221,33223,33225,33227,33230,33232,33234,33237,33239,33241],{"class":47,"line":33197},151,[45,33199,32551],{"class":79},[45,33201,282],{"class":55},[45,33203,3742],{"class":62},[45,33205,32559],{"class":79},[45,33207,33208],{"class":62},"train loss:",[45,33210,1173],{"class":79},[45,33212,33213],{"class":51},":.4f",[45,33215,1223],{"class":79},[45,33217,33218],{"class":62}," train acc:",[45,33220,1173],{"class":79},[45,33222,33213],{"class":51},[45,33224,1223],{"class":79},[45,33226,3742],{"class":62},[45,33228,33229],{"class":55},".format(epoch,train_loss_all[",[45,33231,809],{"class":51},[45,33233,495],{"class":79},[45,33235,33236],{"class":55},"],train_acc_all[",[45,33238,809],{"class":51},[45,33240,495],{"class":79},[45,33242,33243],{"class":55},"]))\n",[45,33245,33247,33249,33251,33253,33255,33258,33260,33262,33264,33267,33269,33271,33273,33275,33278,33280,33282,33285,33287,33289],{"class":47,"line":33246},152,[45,33248,32551],{"class":79},[45,33250,282],{"class":55},[45,33252,3742],{"class":62},[45,33254,32559],{"class":79},[45,33256,33257],{"class":62},"val loss:",[45,33259,1173],{"class":79},[45,33261,33213],{"class":51},[45,33263,1223],{"class":79},[45,33265,33266],{"class":62}," val acc:",[45,33268,1173],{"class":79},[45,33270,33213],{"class":51},[45,33272,1223],{"class":79},[45,33274,3742],{"class":62},[45,33276,33277],{"class":55},".format(epoch,val_loss_all[",[45,33279,809],{"class":51},[45,33281,495],{"class":79},[45,33283,33284],{"class":55},"],val_acc_all[",[45,33286,809],{"class":51},[45,33288,495],{"class":79},[45,33290,33243],{"class":55},[45,33292,33294],{"class":47,"line":33293},153,[45,33295,2550],{"emptyLinePlaceholder":207},[45,33297,33299],{"class":47,"line":33298},154,[45,33300,33301],{"class":337},"        # 判断准确度--->保存最优模型\n",[45,33303,33305,33307,33310,33312,33314,33316,33318],{"class":47,"line":33304},155,[45,33306,2647],{"class":51},[45,33308,33309],{"class":55}," val_acc_all[",[45,33311,809],{"class":51},[45,33313,495],{"class":79},[45,33315,1217],{"class":55},[45,33317,1237],{"class":51},[45,33319,33320],{"class":55},"best_acc:\n",[45,33322,33324],{"class":47,"line":33323},156,[45,33325,33326],{"class":337},"            # 保存当前模型准确度\n",[45,33328,33330,33333,33335,33337,33340,33342,33344],{"class":47,"line":33329},157,[45,33331,33332],{"class":55},"            best_acc:",[45,33334,320],{"class":79},[45,33336,59],{"class":51},[45,33338,33339],{"class":55},"val_acc_all[",[45,33341,809],{"class":51},[45,33343,495],{"class":79},[45,33345,33346],{"class":55},"]\n",[45,33348,33350],{"class":47,"line":33349},158,[45,33351,33352],{"class":337},"            # 保存当前的准确度\n",[45,33354,33356],{"class":47,"line":33355},159,[45,33357,33358],{"class":337},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[45,33360,33362,33365,33367],{"class":47,"line":33361},160,[45,33363,33364],{"class":55},"            best_model_wts",[45,33366,59],{"class":51},[45,33368,32414],{"class":55},[45,33370,33372],{"class":47,"line":33371},161,[45,33373,2550],{"emptyLinePlaceholder":207},[45,33375,33377],{"class":47,"line":33376},162,[45,33378,33379],{"class":337},"        # 计算耗时\n",[45,33381,33383,33386,33388,33391,33393],{"class":47,"line":33382},163,[45,33384,33385],{"class":55},"        time_use",[45,33387,59],{"class":51},[45,33389,33390],{"class":55},"time.time()",[45,33392,809],{"class":51},[45,33394,33395],{"class":55},"since\n",[45,33397,33399,33401,33403,33406,33408,33411,33413,33415,33417,33419,33421,33424,33427,33430,33432,33435,33437,33439],{"class":47,"line":33398},164,[45,33400,32551],{"class":79},[45,33402,282],{"class":55},[45,33404,33405],{"class":62},"'训练和验证耗费的时间",[45,33407,1173],{"class":79},[45,33409,33410],{"class":51},":.0f",[45,33412,1223],{"class":79},[45,33414,821],{"class":62},[45,33416,1173],{"class":79},[45,33418,33410],{"class":51},[45,33420,1223],{"class":79},[45,33422,33423],{"class":62},"s'",[45,33425,33426],{"class":55},".format(time_use",[45,33428,33429],{"class":51},"\u002F\u002F",[45,33431,1184],{"class":79},[45,33433,33434],{"class":55},",time_use",[45,33436,605],{"class":51},[45,33438,1184],{"class":79},[45,33440,30597],{"class":55},[45,33442,33444],{"class":47,"line":33443},165,[45,33445,33446],{"class":337},"    # 选择最优参数\n",[45,33448,33450],{"class":47,"line":33449},166,[45,33451,33452],{"class":337},"    # 加载最高准确率下的模型参数\n",[45,33454,33456],{"class":47,"line":33455},167,[45,33457,33458],{"class":337},"    # model.load_state_dict(best_model_wts)\n",[45,33460,33462,33465,33468],{"class":47,"line":33461},168,[45,33463,33464],{"class":55},"    torch.save(model.state_dict(best_model_wts), ",[45,33466,33467],{"class":62},"'.\u002Fbest_model.pth'",[45,33469,139],{"class":55},[45,33471,33473],{"class":47,"line":33472},169,[45,33474,33475],{"class":337},"    # 或者写成\n",[45,33477,33479],{"class":47,"line":33478},170,[45,33480,33481],{"class":337},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[45,33483,33485],{"class":47,"line":33484},171,[45,33486,33487],{"class":337},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[45,33489,33491,33494,33496,33499,33502,33504],{"class":47,"line":33490},172,[45,33492,33493],{"class":55},"    train_process",[45,33495,59],{"class":51},[45,33497,33498],{"class":55},"pd.DataFrame(",[45,33500,33501],{"class":5366},"data",[45,33503,59],{"class":51},[45,33505,1697],{"class":55},[45,33507,33509,33512,33514,33517],{"class":47,"line":33508},173,[45,33510,33511],{"class":62},"        \"epoch\"",[45,33513,1136],{"class":55},[45,33515,33516],{"class":79},"range",[45,33518,33519],{"class":55},"(num_epochs),\n",[45,33521,33523,33526],{"class":47,"line":33522},174,[45,33524,33525],{"class":62},"        \"train_loss_all\"",[45,33527,33528],{"class":55},":train_loss_all,\n",[45,33530,33532,33535],{"class":47,"line":33531},175,[45,33533,33534],{"class":62},"        \"val_loss_all\"",[45,33536,33537],{"class":55},":val_loss_all,\n",[45,33539,33541,33544],{"class":47,"line":33540},176,[45,33542,33543],{"class":62},"        \"train_acc_all\"",[45,33545,33546],{"class":55},":train_acc_all,\n",[45,33548,33550,33553],{"class":47,"line":33549},177,[45,33551,33552],{"class":62},"        \"val_acc_all\"",[45,33554,33555],{"class":55},":val_acc_all\n",[45,33557,33559],{"class":47,"line":33558},178,[45,33560,33561],{"class":55},"    })\n",[45,33563,33565],{"class":47,"line":33564},179,[45,33566,33567],{"class":337},"    # 返回训练保存的过程\n",[45,33569,33571,33573],{"class":47,"line":33570},180,[45,33572,4240],{"class":51},[45,33574,33575],{"class":55}," train_process\n",[45,33577,33579],{"class":47,"line":33578},181,[45,33580,2550],{"emptyLinePlaceholder":207},[45,33582,33584],{"class":47,"line":33583},182,[45,33585,33586],{"class":337},"# 将loss值和精度按照图片的形式展示出来\n",[45,33588,33590,33592,33595],{"class":47,"line":33589},183,[45,33591,32047],{"class":51},[45,33593,33594],{"class":69}," matplot_acc_loss",[45,33596,33597],{"class":55},"(train_process):\n",[45,33599,33601],{"class":47,"line":33600},184,[45,33602,33603],{"class":337},"    # 设置图的大小\n",[45,33605,33607,33610,33612,33614,33616,33618,33620,33622],{"class":47,"line":33606},185,[45,33608,33609],{"class":55},"    plt.figure(",[45,33611,31793],{"class":5366},[45,33613,59],{"class":51},[45,33615,282],{"class":55},[45,33617,775],{"class":79},[45,33619,655],{"class":55},[45,33621,570],{"class":79},[45,33623,30597],{"class":55},[45,33625,33627],{"class":47,"line":33626},186,[45,33628,33629],{"class":337},"    # 设置图中有几张图\n",[45,33631,33633],{"class":47,"line":33632},187,[45,33634,33635],{"class":337},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[45,33637,33639],{"class":47,"line":33638},188,[45,33640,33641],{"class":337},"    # ①loss图\n",[45,33643,33645,33647,33649,33651,33653,33655,33657],{"class":47,"line":33644},189,[45,33646,31827],{"class":55},[45,33648,495],{"class":79},[45,33650,655],{"class":55},[45,33652,356],{"class":79},[45,33654,655],{"class":55},[45,33656,495],{"class":79},[45,33658,139],{"class":55},[45,33660,33662],{"class":47,"line":33661},190,[45,33663,33664],{"class":337},"    # 补充:\n",[45,33666,33668],{"class":47,"line":33667},191,[45,33669,33670],{"class":337},"    # plt.subplot(nrows, ncols, index)\n",[45,33672,33674],{"class":47,"line":33673},192,[45,33675,33676],{"class":337},"    # nrows：行数\n",[45,33678,33680],{"class":47,"line":33679},193,[45,33681,33682],{"class":337},"    # ncols：列数\n",[45,33684,33686],{"class":47,"line":33685},194,[45,33687,33688],{"class":337},"    # index：目前选中第几个子图（从1开始）\n",[45,33690,33692,33695,33698,33701,33704,33706,33709,33711,33714],{"class":47,"line":33691},195,[45,33693,33694],{"class":55},"    plt.plot(train_process[",[45,33696,33697],{"class":62},"\"epoch\"",[45,33699,33700],{"class":55},"],train_process.train_loss_all,",[45,33702,33703],{"class":62},"'ro-'",[45,33705,655],{"class":55},[45,33707,33708],{"class":5366},"label",[45,33710,59],{"class":51},[45,33712,33713],{"class":62},"'train loss'",[45,33715,139],{"class":55},[45,33717,33719,33721,33723,33726,33729,33731,33733,33735,33738],{"class":47,"line":33718},196,[45,33720,33694],{"class":55},[45,33722,33697],{"class":62},[45,33724,33725],{"class":55},"],train_process.val_loss_all,",[45,33727,33728],{"class":62},"'bs--'",[45,33730,655],{"class":55},[45,33732,33708],{"class":5366},[45,33734,59],{"class":51},[45,33736,33737],{"class":62},"'val loss'",[45,33739,139],{"class":55},[45,33741,33743],{"class":47,"line":33742},197,[45,33744,33745],{"class":337},"    # 添加一个图例\n",[45,33747,33749],{"class":47,"line":33748},198,[45,33750,33751],{"class":55},"    plt.legend()\n",[45,33753,33755],{"class":47,"line":33754},199,[45,33756,33757],{"class":337},"    # 给轴添加标签\n",[45,33759,33761,33764,33767],{"class":47,"line":33760},200,[45,33762,33763],{"class":55},"    plt.xlabel(",[45,33765,33766],{"class":62},"'epoch'",[45,33768,139],{"class":55},[45,33770,33772,33775,33778],{"class":47,"line":33771},201,[45,33773,33774],{"class":55},"    plt.ylabel(",[45,33776,33777],{"class":62},"'loss'",[45,33779,139],{"class":55},[45,33781,33783],{"class":47,"line":33782},202,[45,33784,33785],{"class":337},"    # ②准确度图\n",[45,33787,33789,33791,33793,33795,33797,33799,33801],{"class":47,"line":33788},203,[45,33790,31827],{"class":55},[45,33792,495],{"class":79},[45,33794,655],{"class":55},[45,33796,356],{"class":79},[45,33798,655],{"class":55},[45,33800,356],{"class":79},[45,33802,139],{"class":55},[45,33804,33806,33808,33810,33813,33815,33817,33819,33821,33824],{"class":47,"line":33805},204,[45,33807,33694],{"class":55},[45,33809,33697],{"class":62},[45,33811,33812],{"class":55},"],train_process.train_acc_all,",[45,33814,33703],{"class":62},[45,33816,655],{"class":55},[45,33818,33708],{"class":5366},[45,33820,59],{"class":51},[45,33822,33823],{"class":62},"'train acc'",[45,33825,139],{"class":55},[45,33827,33829,33831,33833,33836,33838,33840,33842,33844,33847],{"class":47,"line":33828},205,[45,33830,33694],{"class":55},[45,33832,33697],{"class":62},[45,33834,33835],{"class":55},"],train_process.val_acc_all,",[45,33837,33728],{"class":62},[45,33839,655],{"class":55},[45,33841,33708],{"class":5366},[45,33843,59],{"class":51},[45,33845,33846],{"class":62},"'val acc'",[45,33848,139],{"class":55},[45,33850,33852],{"class":47,"line":33851},206,[45,33853,33854],{"class":337},"    # 添加图例\n",[45,33856,33858],{"class":47,"line":33857},207,[45,33859,33751],{"class":55},[45,33861,33863,33865,33867],{"class":47,"line":33862},208,[45,33864,33763],{"class":55},[45,33866,33697],{"class":62},[45,33868,139],{"class":55},[45,33870,33872,33874,33877],{"class":47,"line":33871},209,[45,33873,33774],{"class":55},[45,33875,33876],{"class":62},"\"acc\"",[45,33878,139],{"class":55},[45,33880,33882],{"class":47,"line":33881},210,[45,33883,33884],{"class":55},"    plt.show()\n",[45,33886,33888],{"class":47,"line":33887},211,[45,33889,2550],{"emptyLinePlaceholder":207},[45,33891,33893],{"class":47,"line":33892},212,[45,33894,33895],{"class":337},"# 正式开始训练:\n",[45,33897,33899,33901,33903,33905,33907],{"class":47,"line":33898},213,[45,33900,1682],{"class":51},[45,33902,31320],{"class":79},[45,33904,3099],{"class":51},[45,33906,31325],{"class":62},[45,33908,3889],{"class":55},[45,33910,33912],{"class":47,"line":33911},214,[45,33913,33914],{"class":337},"    # 将模型实例化\n",[45,33916,33918,33921,33923],{"class":47,"line":33917},215,[45,33919,33920],{"class":55},"    LeNet",[45,33922,59],{"class":51},[45,33924,33925],{"class":55},"LeNet()\n",[45,33927,33929,33932,33934],{"class":47,"line":33928},216,[45,33930,33931],{"class":55},"    train_dataloader,val_dataloader",[45,33933,59],{"class":51},[45,33935,33936],{"class":55},"train_val_data_process()\n",[45,33938,33940,33942,33944,33947,33950,33952,33954],{"class":47,"line":33939},217,[45,33941,33493],{"class":55},[45,33943,59],{"class":51},[45,33945,33946],{"class":55},"train_model_process(LeNet,train_dataloader,val_dataloader,",[45,33948,33949],{"class":5366},"num_epochs",[45,33951,59],{"class":51},[45,33953,977],{"class":79},[45,33955,139],{"class":55},[45,33957,33959],{"class":47,"line":33958},218,[45,33960,33961],{"class":55},"    matplot_acc_loss(train_process)\n",[20,33963,33964],{},"画图的补充点学习：",[20,33966,33967],{},[23,33968],{"alt":25,"src":33969},"\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",[233,33971,33972],{"start":1331},[169,33973,33974],{},"测试",[36,33976,33978],{"className":30478,"code":33977,"language":30480,"meta":25,"style":25},"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",[42,33979,33980,33986,33996,34008,34018,34023,34033,34043,34047,34052,34061,34078,34090,34107,34118,34134,34139,34150,34161,34172,34179,34183,34188,34198,34203,34220,34228,34232,34237,34246,34255,34259,34264,34269,34274,34281,34286,34298,34308,34318,34323,34327,34332,34341,34346,34362,34367,34372,34377,34391,34396,34410,34414,34419,34434,34439,34451,34455,34460,34472,34477,34485,34490,34495,34505,34510,34519,34524,34529,34533,34538,34543,34559,34567,34572,34577,34636,34642,34647,34658,34666,34674,34678,34683,34687,34692,34700,34705,34721,34726,34736,34746],{"__ignoreMap":25},[45,33981,33982,33984],{"class":47,"line":48},[45,33983,30492],{"class":51},[45,33985,30495],{"class":55},[45,33987,33988,33990,33992,33994],{"class":47,"line":66},[45,33989,30492],{"class":51},[45,33991,31515],{"class":55},[45,33993,31483],{"class":51},[45,33995,31520],{"class":55},[45,33997,33998,34000,34003,34005],{"class":47,"line":1331},[45,33999,30837],{"class":51},[45,34001,34002],{"class":55}," jupyter_client.consoleapp ",[45,34004,30492],{"class":51},[45,34006,34007],{"class":55}," classes\n",[45,34009,34010,34012,34014,34016],{"class":47,"line":1346},[45,34011,30837],{"class":51},[45,34013,31498],{"class":55},[45,34015,30492],{"class":51},[45,34017,31503],{"class":55},[45,34019,34020],{"class":47,"line":1352},[45,34021,34022],{"class":337},"# 导入数据集\n",[45,34024,34025,34027,34029,34031],{"class":47,"line":1366},[45,34026,30837],{"class":51},[45,34028,31468],{"class":55},[45,34030,30492],{"class":51},[45,34032,31473],{"class":55},[45,34034,34035,34037,34039,34041],{"class":47,"line":1372},[45,34036,30837],{"class":51},[45,34038,32014],{"class":55},[45,34040,30492],{"class":51},[45,34042,32019],{"class":55},[45,34044,34045],{"class":47,"line":1463},[45,34046,2550],{"emptyLinePlaceholder":207},[45,34048,34049],{"class":47,"line":1469},[45,34050,34051],{"class":337},"# 测试数据处理\n",[45,34053,34054,34056,34059],{"class":47,"line":1481},[45,34055,32047],{"class":51},[45,34057,34058],{"class":69}," test_data_process",[45,34060,32053],{"class":55},[45,34062,34063,34066,34068,34070,34072,34074,34076],{"class":47,"line":1763},[45,34064,34065],{"class":55},"    test_data",[45,34067,59],{"class":51},[45,34069,31555],{"class":55},[45,34071,31558],{"class":5366},[45,34073,59],{"class":51},[45,34075,31563],{"class":62},[45,34077,31566],{"class":55},[45,34079,34080,34083,34085,34088],{"class":47,"line":1768},[45,34081,34082],{"class":5366},"                           train",[45,34084,59],{"class":51},[45,34086,34087],{"class":79},"False",[45,34089,31566],{"class":55},[45,34091,34092,34095,34097,34099,34101,34103,34105],{"class":47,"line":1774},[45,34093,34094],{"class":5366},"                           transform",[45,34096,59],{"class":51},[45,34098,31593],{"class":55},[45,34100,31596],{"class":5366},[45,34102,59],{"class":51},[45,34104,1178],{"class":79},[45,34106,31604],{"class":55},[45,34108,34109,34112,34114,34116],{"class":47,"line":1779},[45,34110,34111],{"class":5366},"                           download",[45,34113,59],{"class":51},[45,34115,31576],{"class":79},[45,34117,139],{"class":55},[45,34119,34120,34123,34125,34127,34129,34131],{"class":47,"line":1793},[45,34121,34122],{"class":55},"    test_dataloader",[45,34124,59],{"class":51},[45,34126,31634],{"class":55},[45,34128,31637],{"class":5366},[45,34130,59],{"class":51},[45,34132,34133],{"class":55},"test_data,\n",[45,34135,34136],{"class":47,"line":1798},[45,34137,34138],{"class":337},"                                    # 这里是一张一张进行测试\n",[45,34140,34141,34144,34146,34148],{"class":47,"line":1804},[45,34142,34143],{"class":5366},"                                    batch_size",[45,34145,59],{"class":51},[45,34147,495],{"class":79},[45,34149,31566],{"class":55},[45,34151,34152,34155,34157,34159],{"class":47,"line":1825},[45,34153,34154],{"class":5366},"                                    shuffle",[45,34156,59],{"class":51},[45,34158,31576],{"class":79},[45,34160,31566],{"class":55},[45,34162,34163,34166,34168,34170],{"class":47,"line":1830},[45,34164,34165],{"class":5366},"                                    num_workers",[45,34167,59],{"class":51},[45,34169,469],{"class":79},[45,34171,139],{"class":55},[45,34173,34174,34176],{"class":47,"line":1844},[45,34175,4240],{"class":51},[45,34177,34178],{"class":55}," test_dataloader\n",[45,34180,34181],{"class":47,"line":1849},[45,34182,2550],{"emptyLinePlaceholder":207},[45,34184,34185],{"class":47,"line":1878},[45,34186,34187],{"class":337},"# 定义模型测试函数\n",[45,34189,34190,34192,34195],{"class":47,"line":1883},[45,34191,32047],{"class":51},[45,34193,34194],{"class":69}," test_model_process",[45,34196,34197],{"class":55},"(model,test_dataloader):\n",[45,34199,34200],{"class":47,"line":1900},[45,34201,34202],{"class":337},"    # 将模型放到设备当中，先进行判断\n",[45,34204,34205,34207,34209,34211,34213,34215,34217],{"class":47,"line":1905},[45,34206,31337],{"class":55},[45,34208,59],{"class":51},[45,34210,31344],{"class":62},[45,34212,1855],{"class":51},[45,34214,31349],{"class":55},[45,34216,1852],{"class":51},[45,34218,34219],{"class":62}," \"cpu\"\n",[45,34221,34222,34224,34226],{"class":47,"line":1910},[45,34223,31389],{"class":55},[45,34225,59],{"class":51},[45,34227,32389],{"class":55},[45,34229,34230],{"class":47,"line":1915},[45,34231,2550],{"emptyLinePlaceholder":207},[45,34233,34234],{"class":47,"line":1929},[45,34235,34236],{"class":337},"    # 设置初始化参数\n",[45,34238,34239,34242,34244],{"class":47,"line":1934},[45,34240,34241],{"class":55},"    test_corrects",[45,34243,59],{"class":51},[45,34245,32442],{"class":79},[45,34247,34248,34251,34253],{"class":47,"line":2727},[45,34249,34250],{"class":55},"    test_num",[45,34252,59],{"class":51},[45,34254,3235],{"class":79},[45,34256,34257],{"class":47,"line":2741},[45,34258,2550],{"emptyLinePlaceholder":207},[45,34260,34261],{"class":47,"line":2749},[45,34262,34263],{"class":337},"    # 进行模型测试\n",[45,34265,34266],{"class":47,"line":2754},[45,34267,34268],{"class":337},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[45,34270,34271],{"class":47,"line":2760},[45,34272,34273],{"class":337},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[45,34275,34276,34279],{"class":47,"line":2766},[45,34277,34278],{"class":51},"    with",[45,34280,32984],{"class":55},[45,34282,34283],{"class":47,"line":2771},[45,34284,34285],{"class":337},"        # 从数据中进行\n",[45,34287,34288,34290,34293,34295],{"class":47,"line":8098},[45,34289,3553],{"class":51},[45,34291,34292],{"class":55}," test_data_x,test_data_y ",[45,34294,26143],{"class":51},[45,34296,34297],{"class":55}," test_dataloader:\n",[45,34299,34300,34303,34305],{"class":47,"line":8122},[45,34301,34302],{"class":55},"            test_data_x",[45,34304,59],{"class":51},[45,34306,34307],{"class":55},"test_data_x.to(device)\n",[45,34309,34310,34313,34315],{"class":47,"line":8127},[45,34311,34312],{"class":55},"            test_data_y",[45,34314,59],{"class":51},[45,34316,34317],{"class":55},"test_data_y.to(device)\n",[45,34319,34320],{"class":47,"line":8133},[45,34321,34322],{"class":337},"            # 设置为验证模式\n",[45,34324,34325],{"class":47,"line":8160},[45,34326,32975],{"class":55},[45,34328,34329],{"class":47,"line":8165},[45,34330,34331],{"class":337},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[45,34333,34334,34336,34338],{"class":47,"line":8171},[45,34335,32760],{"class":55},[45,34337,59],{"class":51},[45,34339,34340],{"class":55},"model(test_data_x)\n",[45,34342,34343],{"class":47,"line":8183},[45,34344,34345],{"class":337},"            # 查找每一行中最大值对应的下标\n",[45,34347,34348,34350,34352,34354,34356,34358,34360],{"class":47,"line":8195},[45,34349,32777],{"class":55},[45,34351,59],{"class":51},[45,34353,32782],{"class":55},[45,34355,32785],{"class":5366},[45,34357,59],{"class":51},[45,34359,495],{"class":79},[45,34361,139],{"class":55},[45,34363,34364],{"class":47,"line":8207},[45,34365,34366],{"class":337},"            # 计算正确率\n",[45,34368,34369],{"class":47,"line":9866},[45,34370,34371],{"class":337},"            # .data表示是一个不带梯度信息的tensor\n",[45,34373,34374],{"class":47,"line":9890},[45,34375,34376],{"class":337},"            # 如果预测正确，则准确度test_corrects加1\n",[45,34378,34379,34382,34384,34386,34388],{"class":47,"line":9913},[45,34380,34381],{"class":55},"            test_corrects",[45,34383,9627],{"class":51},[45,34385,32887],{"class":55},[45,34387,3099],{"class":51},[45,34389,34390],{"class":55},"test_data_y.data)\n",[45,34392,34393],{"class":47,"line":9937},[45,34394,34395],{"class":337},"            # 将所有的测试样本进行累计\n",[45,34397,34398,34401,34403,34406,34408],{"class":47,"line":9942},[45,34399,34400],{"class":55},"            test_num",[45,34402,9627],{"class":51},[45,34404,34405],{"class":55},"test_data_x.size(",[45,34407,469],{"class":79},[45,34409,139],{"class":55},[45,34411,34412],{"class":47,"line":9947},[45,34413,2550],{"emptyLinePlaceholder":207},[45,34415,34416],{"class":47,"line":9952},[45,34417,34418],{"class":337},"        # 计算准确度\n",[45,34420,34421,34424,34426,34429,34431],{"class":47,"line":9961},[45,34422,34423],{"class":55},"        test_acc",[45,34425,59],{"class":51},[45,34427,34428],{"class":55},"test_corrects.double().item()",[45,34430,861],{"class":51},[45,34432,34433],{"class":55},"test_num\n",[45,34435,34436],{"class":47,"line":9966},[45,34437,34438],{"class":337},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[45,34440,34441,34443,34445,34448],{"class":47,"line":9972},[45,34442,32551],{"class":79},[45,34444,282],{"class":55},[45,34446,34447],{"class":62},"\"测试的准确率：\"",[45,34449,34450],{"class":55},",test_acc)\n",[45,34452,34453],{"class":47,"line":9993},[45,34454,2550],{"emptyLinePlaceholder":207},[45,34456,34457],{"class":47,"line":9999},[45,34458,34459],{"class":337},"# 实现模型的测试功能\n",[45,34461,34462,34464,34466,34468,34470],{"class":47,"line":10013},[45,34463,1682],{"class":51},[45,34465,31320],{"class":79},[45,34467,3099],{"class":51},[45,34469,31325],{"class":62},[45,34471,3889],{"class":55},[45,34473,34474],{"class":47,"line":10019},[45,34475,34476],{"class":337},"    # 加载模型\n",[45,34478,34479,34481,34483],{"class":47,"line":10046},[45,34480,31389],{"class":55},[45,34482,59],{"class":51},[45,34484,33925],{"class":55},[45,34486,34487],{"class":47,"line":10055},[45,34488,34489],{"class":337},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[45,34491,34492],{"class":47,"line":10061},[45,34493,34494],{"class":337},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[45,34496,34497,34500,34503],{"class":47,"line":10069},[45,34498,34499],{"class":55},"    model.load_state_dict(torch.load(",[45,34501,34502],{"class":62},"'best_model.pth'",[45,34504,30597],{"class":55},[45,34506,34507],{"class":47,"line":10074},[45,34508,34509],{"class":337},"    # 数据加载\n",[45,34511,34512,34514,34516],{"class":47,"line":16753},[45,34513,34122],{"class":55},[45,34515,59],{"class":51},[45,34517,34518],{"class":55},"test_data_process()\n",[45,34520,34521],{"class":47,"line":16759},[45,34522,34523],{"class":337},"    # 加载模型测试的函数\n",[45,34525,34526],{"class":47,"line":16782},[45,34527,34528],{"class":55},"    test_model_process(model,test_dataloader)\n",[45,34530,34531],{"class":47,"line":16788},[45,34532,2550],{"emptyLinePlaceholder":207},[45,34534,34535],{"class":47,"line":16811},[45,34536,34537],{"class":337},"    # 验证集推理实现：\n",[45,34539,34540],{"class":47,"line":16825},[45,34541,34542],{"class":337},"    # 加载数据加载的更详细一些\n",[45,34544,34545,34547,34549,34551,34553,34555,34557],{"class":47,"line":16845},[45,34546,31337],{"class":55},[45,34548,59],{"class":51},[45,34550,31344],{"class":62},[45,34552,1855],{"class":51},[45,34554,31349],{"class":55},[45,34556,1852],{"class":51},[45,34558,34219],{"class":62},[45,34560,34561,34563,34565],{"class":47,"line":16851},[45,34562,31389],{"class":55},[45,34564,59],{"class":51},[45,34566,32389],{"class":55},[45,34568,34569],{"class":47,"line":16862},[45,34570,34571],{"class":337},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[45,34573,34574],{"class":47,"line":16885},[45,34575,34576],{"class":337},"    # 顺序不可改变\n",[45,34578,34579,34582,34584,34586,34589,34591,34594,34596,34599,34601,34604,34606,34609,34611,34614,34616,34619,34621,34624,34626,34629,34631,34634],{"class":47,"line":16907},[45,34580,34581],{"class":55},"    classes",[45,34583,59],{"class":51},[45,34585,1167],{"class":55},[45,34587,34588],{"class":62},"'T-shirt\u002Ftop'",[45,34590,655],{"class":55},[45,34592,34593],{"class":62},"'Trouser'",[45,34595,655],{"class":55},[45,34597,34598],{"class":62},"'Pullover'",[45,34600,655],{"class":55},[45,34602,34603],{"class":62},"'Dress'",[45,34605,655],{"class":55},[45,34607,34608],{"class":62},"'Coat'",[45,34610,655],{"class":55},[45,34612,34613],{"class":62},"'Sandal'",[45,34615,655],{"class":55},[45,34617,34618],{"class":62},"'Shirt'",[45,34620,655],{"class":55},[45,34622,34623],{"class":62},"'Sneaker'",[45,34625,655],{"class":55},[45,34627,34628],{"class":62},"'Bag'",[45,34630,655],{"class":55},[45,34632,34633],{"class":62},"'Ankle boot'",[45,34635,33346],{"class":55},[45,34637,34638,34640],{"class":47,"line":16912},[45,34639,34278],{"class":51},[45,34641,32984],{"class":55},[45,34643,34644],{"class":47,"line":16918},[45,34645,34646],{"class":337},"        # 将数据和标签都放到设备当中\n",[45,34648,34649,34651,34654,34656],{"class":47,"line":16932},[45,34650,3553],{"class":51},[45,34652,34653],{"class":55}," b_x,b_y ",[45,34655,26143],{"class":51},[45,34657,34297],{"class":55},[45,34659,34660,34662,34664],{"class":47,"line":16945},[45,34661,32710],{"class":55},[45,34663,59],{"class":51},[45,34665,32715],{"class":55},[45,34667,34668,34670,34672],{"class":47,"line":16950},[45,34669,32725],{"class":55},[45,34671,59],{"class":51},[45,34673,32730],{"class":55},[45,34675,34676],{"class":47,"line":16964},[45,34677,2550],{"emptyLinePlaceholder":207},[45,34679,34680],{"class":47,"line":16969},[45,34681,34682],{"class":337},"            # 设置模型为验证模式\n",[45,34684,34685],{"class":47,"line":16975},[45,34686,32975],{"class":55},[45,34688,34689],{"class":47,"line":16980},[45,34690,34691],{"class":337},"            # 模型推理结果\n",[45,34693,34694,34696,34698],{"class":47,"line":16994},[45,34695,32760],{"class":55},[45,34697,59],{"class":51},[45,34699,32765],{"class":55},[45,34701,34702],{"class":47,"line":16999},[45,34703,34704],{"class":337},"            # 获取最大下标，最大下标就是类别号\n",[45,34706,34707,34709,34711,34713,34715,34717,34719],{"class":47,"line":17004},[45,34708,32777],{"class":55},[45,34710,59],{"class":51},[45,34712,32782],{"class":55},[45,34714,32785],{"class":5366},[45,34716,59],{"class":51},[45,34718,495],{"class":79},[45,34720,139],{"class":55},[45,34722,34723],{"class":47,"line":17018},[45,34724,34725],{"class":337},"            # 取出张量中的数值\n",[45,34727,34728,34731,34733],{"class":47,"line":17030},[45,34729,34730],{"class":55},"            result",[45,34732,59],{"class":51},[45,34734,34735],{"class":55},"pre_lab.item()\n",[45,34737,34738,34741,34743],{"class":47,"line":17035},[45,34739,34740],{"class":55},"            label",[45,34742,59],{"class":51},[45,34744,34745],{"class":55},"b_y.item()\n",[45,34747,34748,34751,34753,34756,34759,34762,34764,34767],{"class":47,"line":17048},[45,34749,34750],{"class":79},"            print",[45,34752,282],{"class":55},[45,34754,34755],{"class":62},"\"预测值：\"",[45,34757,34758],{"class":55},",classes[result],",[45,34760,34761],{"class":62},"\"------\"",[45,34763,655],{"class":55},[45,34765,34766],{"class":62},"\"真实值：\"",[45,34768,34769],{"class":55},",classes[label])\n",[20,34771,34772],{},"（2）AlexNet",[233,34774,34775],{},[169,34776,34777],{},"神经网络构建",[36,34779,34781],{"className":30478,"code":34780,"language":30480,"meta":25,"style":25},"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",[42,34782,34783,34789,34799,34809,34821,34825,34842,34850,34865,34877,34919,34946,34989,35015,35059,35102,35145,35172,35176,35186,35191,35219,35238,35257,35261,35266,35274,35289,35299,35313,35323,35338,35353,35368,35379,35383,35388,35398,35413,35418,35432,35447,35459,35464,35475,35480,35486,35491,35503,35523,35528,35537],{"__ignoreMap":25},[45,34784,34785,34787],{"class":47,"line":48},[45,34786,30492],{"class":51},[45,34788,30495],{"class":55},[45,34790,34791,34793,34795,34797],{"class":47,"line":66},[45,34792,30837],{"class":51},[45,34794,30840],{"class":55},[45,34796,30492],{"class":51},[45,34798,30845],{"class":55},[45,34800,34801,34803,34805,34807],{"class":47,"line":1331},[45,34802,30837],{"class":51},[45,34804,30857],{"class":55},[45,34806,30492],{"class":51},[45,34808,30862],{"class":55},[45,34810,34811,34813,34816,34818],{"class":47,"line":1346},[45,34812,30492],{"class":51},[45,34814,34815],{"class":55}," torch.nn.functional ",[45,34817,31483],{"class":51},[45,34819,34820],{"class":55}," F\n",[45,34822,34823],{"class":47,"line":1352},[45,34824,2550],{"emptyLinePlaceholder":207},[45,34826,34827,34829,34832,34834,34836,34838,34840],{"class":47,"line":1366},[45,34828,14843],{"class":51},[45,34830,34831],{"class":69}," AlexNet",[45,34833,282],{"class":55},[45,34835,30878],{"class":69},[45,34837,835],{"class":55},[45,34839,30883],{"class":69},[45,34841,30886],{"class":55},[45,34843,34844,34846,34848],{"class":47,"line":1372},[45,34845,30901],{"class":51},[45,34847,30904],{"class":79},[45,34849,30907],{"class":55},[45,34851,34852,34854,34857,34859,34861,34863],{"class":47,"line":1463},[45,34853,30917],{"class":79},[45,34855,34856],{"class":55},"(AlexNet,",[45,34858,30923],{"class":79},[45,34860,30926],{"class":55},[45,34862,30929],{"class":79},[45,34864,2126],{"class":55},[45,34866,34867,34869,34872,34874],{"class":47,"line":1469},[45,34868,30945],{"class":79},[45,34870,34871],{"class":55},".ReLu",[45,34873,59],{"class":51},[45,34875,34876],{"class":55},"nn.ReLU()\n",[45,34878,34879,34881,34883,34885,34887,34889,34891,34893,34895,34897,34899,34901,34903,34905,34907,34909,34911,34913,34915,34917],{"class":47,"line":1481},[45,34880,30945],{"class":79},[45,34882,30948],{"class":55},[45,34884,59],{"class":51},[45,34886,30953],{"class":55},[45,34888,30956],{"class":5366},[45,34890,59],{"class":51},[45,34892,495],{"class":79},[45,34894,655],{"class":55},[45,34896,30965],{"class":5366},[45,34898,59],{"class":51},[45,34900,487],{"class":79},[45,34902,655],{"class":55},[45,34904,30974],{"class":5366},[45,34906,59],{"class":51},[45,34908,749],{"class":79},[45,34910,655],{"class":55},[45,34912,31029],{"class":5366},[45,34914,59],{"class":51},[45,34916,570],{"class":79},[45,34918,139],{"class":55},[45,34920,34921,34923,34925,34927,34930,34932,34934,34936,34938,34940,34942,34944],{"class":47,"line":1763},[45,34922,30945],{"class":79},[45,34924,31013],{"class":55},[45,34926,59],{"class":51},[45,34928,34929],{"class":55},"nn.MaxPool2d(",[45,34931,30974],{"class":5366},[45,34933,59],{"class":51},[45,34935,350],{"class":79},[45,34937,655],{"class":55},[45,34939,31029],{"class":5366},[45,34941,59],{"class":51},[45,34943,356],{"class":79},[45,34945,139],{"class":55},[45,34947,34948,34950,34952,34954,34956,34958,34960,34962,34964,34966,34968,34971,34973,34975,34977,34979,34981,34983,34985,34987],{"class":47,"line":1768},[45,34949,30945],{"class":79},[45,34951,31042],{"class":55},[45,34953,59],{"class":51},[45,34955,30953],{"class":55},[45,34957,30956],{"class":5366},[45,34959,59],{"class":51},[45,34961,487],{"class":79},[45,34963,655],{"class":55},[45,34965,30965],{"class":5366},[45,34967,59],{"class":51},[45,34969,34970],{"class":79},"256",[45,34972,655],{"class":55},[45,34974,30974],{"class":5366},[45,34976,59],{"class":51},[45,34978,596],{"class":79},[45,34980,655],{"class":55},[45,34982,30983],{"class":5366},[45,34984,59],{"class":51},[45,34986,356],{"class":79},[45,34988,139],{"class":55},[45,34990,34991,34993,34995,34997,34999,35001,35003,35005,35007,35009,35011,35013],{"class":47,"line":1774},[45,34992,30945],{"class":79},[45,34994,31077],{"class":55},[45,34996,59],{"class":51},[45,34998,34929],{"class":55},[45,35000,30974],{"class":5366},[45,35002,59],{"class":51},[45,35004,350],{"class":79},[45,35006,655],{"class":55},[45,35008,31029],{"class":5366},[45,35010,59],{"class":51},[45,35012,356],{"class":79},[45,35014,139],{"class":55},[45,35016,35017,35019,35022,35024,35026,35028,35030,35032,35034,35036,35038,35041,35043,35045,35047,35049,35051,35053,35055,35057],{"class":47,"line":1779},[45,35018,30945],{"class":79},[45,35020,35021],{"class":55},".c5",[45,35023,59],{"class":51},[45,35025,30953],{"class":55},[45,35027,30956],{"class":5366},[45,35029,59],{"class":51},[45,35031,34970],{"class":79},[45,35033,655],{"class":55},[45,35035,30965],{"class":5366},[45,35037,59],{"class":51},[45,35039,35040],{"class":79},"384",[45,35042,655],{"class":55},[45,35044,30974],{"class":5366},[45,35046,59],{"class":51},[45,35048,350],{"class":79},[45,35050,655],{"class":55},[45,35052,30983],{"class":5366},[45,35054,59],{"class":51},[45,35056,495],{"class":79},[45,35058,139],{"class":55},[45,35060,35061,35063,35066,35068,35070,35072,35074,35076,35078,35080,35082,35084,35086,35088,35090,35092,35094,35096,35098,35100],{"class":47,"line":1793},[45,35062,30945],{"class":79},[45,35064,35065],{"class":55},".c6",[45,35067,59],{"class":51},[45,35069,30953],{"class":55},[45,35071,30956],{"class":5366},[45,35073,59],{"class":51},[45,35075,35040],{"class":79},[45,35077,655],{"class":55},[45,35079,30965],{"class":5366},[45,35081,59],{"class":51},[45,35083,35040],{"class":79},[45,35085,655],{"class":55},[45,35087,30974],{"class":5366},[45,35089,59],{"class":51},[45,35091,350],{"class":79},[45,35093,655],{"class":55},[45,35095,30983],{"class":5366},[45,35097,59],{"class":51},[45,35099,495],{"class":79},[45,35101,139],{"class":55},[45,35103,35104,35106,35109,35111,35113,35115,35117,35119,35121,35123,35125,35127,35129,35131,35133,35135,35137,35139,35141,35143],{"class":47,"line":1798},[45,35105,30945],{"class":79},[45,35107,35108],{"class":55},".c7",[45,35110,59],{"class":51},[45,35112,30953],{"class":55},[45,35114,30956],{"class":5366},[45,35116,59],{"class":51},[45,35118,35040],{"class":79},[45,35120,655],{"class":55},[45,35122,30965],{"class":5366},[45,35124,59],{"class":51},[45,35126,34970],{"class":79},[45,35128,655],{"class":55},[45,35130,30974],{"class":5366},[45,35132,59],{"class":51},[45,35134,350],{"class":79},[45,35136,655],{"class":55},[45,35138,30983],{"class":5366},[45,35140,59],{"class":51},[45,35142,495],{"class":79},[45,35144,139],{"class":55},[45,35146,35147,35149,35152,35154,35156,35158,35160,35162,35164,35166,35168,35170],{"class":47,"line":1804},[45,35148,30945],{"class":79},[45,35150,35151],{"class":55},".s8",[45,35153,59],{"class":51},[45,35155,34929],{"class":55},[45,35157,30974],{"class":5366},[45,35159,59],{"class":51},[45,35161,350],{"class":79},[45,35163,655],{"class":55},[45,35165,31029],{"class":5366},[45,35167,59],{"class":51},[45,35169,356],{"class":79},[45,35171,139],{"class":55},[45,35173,35174],{"class":47,"line":1825},[45,35175,31102],{"class":337},[45,35177,35178,35180,35182,35184],{"class":47,"line":1830},[45,35179,30945],{"class":79},[45,35181,31109],{"class":55},[45,35183,59],{"class":51},[45,35185,31114],{"class":55},[45,35187,35188],{"class":47,"line":1844},[45,35189,35190],{"class":337},"       # 定义全连接层\n",[45,35192,35193,35195,35198,35200,35202,35204,35206,35208,35210,35212,35214,35217],{"class":47,"line":1849},[45,35194,30945],{"class":79},[45,35196,35197],{"class":55},".f1",[45,35199,59],{"class":51},[45,35201,31131],{"class":55},[45,35203,621],{"class":79},[45,35205,732],{"class":51},[45,35207,621],{"class":79},[45,35209,732],{"class":51},[45,35211,34970],{"class":79},[45,35213,655],{"class":55},[45,35215,35216],{"class":79},"4096",[45,35218,139],{"class":55},[45,35220,35221,35223,35226,35228,35230,35232,35234,35236],{"class":47,"line":1878},[45,35222,30945],{"class":79},[45,35224,35225],{"class":55},".f2",[45,35227,59],{"class":51},[45,35229,31131],{"class":55},[45,35231,35216],{"class":79},[45,35233,655],{"class":55},[45,35235,35216],{"class":79},[45,35237,139],{"class":55},[45,35239,35240,35242,35245,35247,35249,35251,35253,35255],{"class":47,"line":1883},[45,35241,30945],{"class":79},[45,35243,35244],{"class":55},".f3",[45,35246,59],{"class":51},[45,35248,31131],{"class":55},[45,35250,35216],{"class":79},[45,35252,655],{"class":55},[45,35254,723],{"class":79},[45,35256,139],{"class":55},[45,35258,35259],{"class":47,"line":1900},[45,35260,2550],{"emptyLinePlaceholder":207},[45,35262,35263],{"class":47,"line":1905},[45,35264,35265],{"class":337},"    # 定义前向传播\n",[45,35267,35268,35270,35272],{"class":47,"line":1910},[45,35269,30901],{"class":51},[45,35271,31193],{"class":69},[45,35273,31196],{"class":55},[45,35275,35276,35278,35280,35282,35285,35287],{"class":47,"line":1915},[45,35277,31201],{"class":55},[45,35279,59],{"class":51},[45,35281,30923],{"class":79},[45,35283,35284],{"class":55},".ReLu(",[45,35286,30923],{"class":79},[45,35288,31213],{"class":55},[45,35290,35291,35293,35295,35297],{"class":47,"line":1929},[45,35292,31201],{"class":55},[45,35294,59],{"class":51},[45,35296,30923],{"class":79},[45,35298,31224],{"class":55},[45,35300,35301,35303,35305,35307,35309,35311],{"class":47,"line":1934},[45,35302,31201],{"class":55},[45,35304,59],{"class":51},[45,35306,30923],{"class":79},[45,35308,35284],{"class":55},[45,35310,30923],{"class":79},[45,35312,31239],{"class":55},[45,35314,35315,35317,35319,35321],{"class":47,"line":2727},[45,35316,31201],{"class":55},[45,35318,59],{"class":51},[45,35320,30923],{"class":79},[45,35322,31250],{"class":55},[45,35324,35325,35327,35329,35331,35333,35335],{"class":47,"line":2741},[45,35326,31201],{"class":55},[45,35328,59],{"class":51},[45,35330,30923],{"class":79},[45,35332,35284],{"class":55},[45,35334,30923],{"class":79},[45,35336,35337],{"class":55},".c5(x))\n",[45,35339,35340,35342,35344,35346,35348,35350],{"class":47,"line":2749},[45,35341,31201],{"class":55},[45,35343,59],{"class":51},[45,35345,30923],{"class":79},[45,35347,35284],{"class":55},[45,35349,30923],{"class":79},[45,35351,35352],{"class":55},".c6(x))\n",[45,35354,35355,35357,35359,35361,35363,35365],{"class":47,"line":2754},[45,35356,31201],{"class":55},[45,35358,59],{"class":51},[45,35360,30923],{"class":79},[45,35362,35284],{"class":55},[45,35364,30923],{"class":79},[45,35366,35367],{"class":55},".c7(x))\n",[45,35369,35370,35372,35374,35376],{"class":47,"line":2760},[45,35371,31201],{"class":55},[45,35373,59],{"class":51},[45,35375,30923],{"class":79},[45,35377,35378],{"class":55},".s8(x)\n",[45,35380,35381],{"class":47,"line":2766},[45,35382,2550],{"emptyLinePlaceholder":207},[45,35384,35385],{"class":47,"line":2771},[45,35386,35387],{"class":337},"        # 展平加线性全连接层\n",[45,35389,35390,35392,35394,35396],{"class":47,"line":8098},[45,35391,31201],{"class":55},[45,35393,59],{"class":51},[45,35395,30923],{"class":79},[45,35397,31261],{"class":55},[45,35399,35400,35402,35404,35406,35408,35410],{"class":47,"line":8122},[45,35401,31201],{"class":55},[45,35403,59],{"class":51},[45,35405,30923],{"class":79},[45,35407,35284],{"class":55},[45,35409,30923],{"class":79},[45,35411,35412],{"class":55},".f1(x))\n",[45,35414,35415],{"class":47,"line":8127},[45,35416,35417],{"class":337},"        # 还需要dropout对神经元随机进行失活\n",[45,35419,35420,35422,35424,35427,35430],{"class":47,"line":8133},[45,35421,31201],{"class":55},[45,35423,59],{"class":51},[45,35425,35426],{"class":55},"F.dropout(x,",[45,35428,35429],{"class":79},"0.5",[45,35431,139],{"class":55},[45,35433,35434,35436,35438,35440,35442,35444],{"class":47,"line":8160},[45,35435,31201],{"class":55},[45,35437,59],{"class":51},[45,35439,30923],{"class":79},[45,35441,35284],{"class":55},[45,35443,30923],{"class":79},[45,35445,35446],{"class":55},".f2(x))\n",[45,35448,35449,35451,35453,35455,35457],{"class":47,"line":8165},[45,35450,31201],{"class":55},[45,35452,59],{"class":51},[45,35454,35426],{"class":55},[45,35456,35429],{"class":79},[45,35458,139],{"class":55},[45,35460,35461],{"class":47,"line":8171},[45,35462,35463],{"class":337},"        # 直接输出\n",[45,35465,35466,35468,35470,35472],{"class":47,"line":8183},[45,35467,31201],{"class":55},[45,35469,59],{"class":51},[45,35471,30923],{"class":79},[45,35473,35474],{"class":55},".f3(x)\n",[45,35476,35477],{"class":47,"line":8195},[45,35478,35479],{"class":337},"        # 前向传播输出\n",[45,35481,35482,35484],{"class":47,"line":8207},[45,35483,14901],{"class":51},[45,35485,31309],{"class":55},[45,35487,35488],{"class":47,"line":9866},[45,35489,35490],{"class":337},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[45,35492,35493,35495,35497,35499,35501],{"class":47,"line":9890},[45,35494,1682],{"class":51},[45,35496,31320],{"class":79},[45,35498,3099],{"class":51},[45,35500,31325],{"class":62},[45,35502,3889],{"class":55},[45,35504,35505,35507,35509,35511,35513,35515,35517,35519,35521],{"class":47,"line":9913},[45,35506,31337],{"class":55},[45,35508,59],{"class":51},[45,35510,30551],{"class":55},[45,35512,31344],{"class":62},[45,35514,1855],{"class":51},[45,35516,31349],{"class":55},[45,35518,1852],{"class":51},[45,35520,30576],{"class":62},[45,35522,139],{"class":55},[45,35524,35525],{"class":47,"line":9937},[45,35526,35527],{"class":337},"    # 模型实例化，然后将实例化的模型放到设备中\n",[45,35529,35530,35532,35534],{"class":47,"line":9942},[45,35531,31389],{"class":55},[45,35533,59],{"class":51},[45,35535,35536],{"class":55},"AlexNet().to(device)\n",[45,35538,35539,35541,35543,35545,35547,35550,35552,35554],{"class":47,"line":9947},[45,35540,31399],{"class":79},[45,35542,31402],{"class":55},[45,35544,495],{"class":79},[45,35546,655],{"class":55},[45,35548,35549],{"class":79},"227",[45,35551,655],{"class":55},[45,35553,35549],{"class":79},[45,35555,31415],{"class":55},[233,35557,35558],{"start":66},[169,35559,31428],{},[36,35561,35563],{"className":30478,"code":35562,"language":30480,"meta":25,"style":25},"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",[42,35564,35565,35571,35577,35587,35593,35603,35613,35623,35633,35643,35647,35658,35668,35672,35676,35680,35688,35700,35710,35726,35736,35768,35782,35792,35802,35806,35816,35830,35840,35850,35860,35866,35870,35874,35878,35882,35886,35894,35914,35918,35922,35926,35930,35934,35950,35954,35958,35966,35970,35974,35982,35986,35990,35994,36002,36006,36010,36014,36018,36026,36030,36038,36042,36050,36054,36062,36066,36074,36078,36082,36090,36094,36098,36102,36114,36138,36152,36156,36160,36164,36172,36176,36184,36188,36196,36200,36208,36212,36220,36224,36232,36236,36248,36252,36260,36264,36272,36276,36280,36284,36288,36296,36300,36316,36320,36328,36332,36336,36340,36344,36348,36352,36356,36372,36376,36388,36392,36404,36408,36420,36424,36432,36436,36444,36448,36452,36457,36463,36467,36476,36480,36497,36501,36510,36514,36532,36545,36550,36563,36567,36571,36579,36583,36587,36595,36599,36607,36611,36619,36623,36627,36669,36711,36715,36719,36735,36739,36755,36759,36763,36771,36775,36779,36791,36829,36834,36839,36848,36852,36866,36876,36882,36888,36894,36900,36904,36908,36914,36918,36922,36930,36934,36952,36956,36960,36964,36980,36984,36988,36992,36996,37000,37020,37040,37044,37048,37052,37060,37068,37072,37088,37108,37128,37132,37136,37144,37152,37156,37160,37164,37176,37180,37190,37198,37215],{"__ignoreMap":25},[45,35566,35567,35569],{"class":47,"line":48},[45,35568,30492],{"class":51},[45,35570,31922],{"class":55},[45,35572,35573,35575],{"class":47,"line":66},[45,35574,30492],{"class":51},[45,35576,31929],{"class":55},[45,35578,35579,35581,35583,35585],{"class":47,"line":1331},[45,35580,30492],{"class":51},[45,35582,31940],{"class":55},[45,35584,31483],{"class":51},[45,35586,31945],{"class":55},[45,35588,35589,35591],{"class":47,"line":1346},[45,35590,30492],{"class":51},[45,35592,30495],{"class":55},[45,35594,35595,35597,35599,35601],{"class":47,"line":1352},[45,35596,30837],{"class":51},[45,35598,31515],{"class":55},[45,35600,30492],{"class":51},[45,35602,31962],{"class":55},[45,35604,35605,35607,35609,35611],{"class":47,"line":1366},[45,35606,30837],{"class":51},[45,35608,31468],{"class":55},[45,35610,30492],{"class":51},[45,35612,31473],{"class":55},[45,35614,35615,35617,35619,35621],{"class":47,"line":1372},[45,35616,30837],{"class":51},[45,35618,31498],{"class":55},[45,35620,30492],{"class":51},[45,35622,31503],{"class":55},[45,35624,35625,35627,35629,35631],{"class":47,"line":1463},[45,35626,30492],{"class":51},[45,35628,31515],{"class":55},[45,35630,31483],{"class":51},[45,35632,31520],{"class":55},[45,35634,35635,35637,35639,35641],{"class":47,"line":1469},[45,35636,30492],{"class":51},[45,35638,31532],{"class":55},[45,35640,31483],{"class":51},[45,35642,31537],{"class":55},[45,35644,35645],{"class":47,"line":1481},[45,35646,32007],{"class":337},[45,35648,35649,35651,35653,35655],{"class":47,"line":1763},[45,35650,30837],{"class":51},[45,35652,32014],{"class":55},[45,35654,30492],{"class":51},[45,35656,35657],{"class":55}," AlexNet\n",[45,35659,35660,35662,35664,35666],{"class":47,"line":1768},[45,35661,30837],{"class":51},[45,35663,30840],{"class":55},[45,35665,30492],{"class":51},[45,35667,30845],{"class":55},[45,35669,35670],{"class":47,"line":1774},[45,35671,2550],{"emptyLinePlaceholder":207},[45,35673,35674],{"class":47,"line":1779},[45,35675,2550],{"emptyLinePlaceholder":207},[45,35677,35678],{"class":47,"line":1793},[45,35679,32042],{"class":337},[45,35681,35682,35684,35686],{"class":47,"line":1798},[45,35683,32047],{"class":51},[45,35685,32050],{"class":69},[45,35687,32053],{"class":55},[45,35689,35690,35692,35694,35696,35698],{"class":47,"line":1804},[45,35691,32058],{"class":55},[45,35693,59],{"class":51},[45,35695,31555],{"class":55},[45,35697,31563],{"class":62},[45,35699,31566],{"class":55},[45,35701,35702,35704,35706,35708],{"class":47,"line":1825},[45,35703,32071],{"class":5366},[45,35705,59],{"class":51},[45,35707,31576],{"class":79},[45,35709,31566],{"class":55},[45,35711,35712,35714,35716,35718,35720,35722,35724],{"class":47,"line":1830},[45,35713,32082],{"class":5366},[45,35715,59],{"class":51},[45,35717,31593],{"class":55},[45,35719,31596],{"class":5366},[45,35721,59],{"class":51},[45,35723,35549],{"class":79},[45,35725,31604],{"class":55},[45,35727,35728,35730,35732,35734],{"class":47,"line":1844},[45,35729,32099],{"class":5366},[45,35731,59],{"class":51},[45,35733,31576],{"class":79},[45,35735,139],{"class":55},[45,35737,35738,35740,35742,35744,35746,35748,35750,35752,35754,35756,35758,35760,35762,35764,35766],{"class":47,"line":1849},[45,35739,32110],{"class":55},[45,35741,59],{"class":51},[45,35743,32115],{"class":55},[45,35745,32118],{"class":79},[45,35747,282],{"class":55},[45,35749,32123],{"class":79},[45,35751,732],{"class":51},[45,35753,7508],{"class":79},[45,35755,32130],{"class":55},[45,35757,32118],{"class":79},[45,35759,282],{"class":55},[45,35761,32137],{"class":79},[45,35763,732],{"class":51},[45,35765,7508],{"class":79},[45,35767,32144],{"class":55},[45,35769,35770,35772,35774,35776,35778,35780],{"class":47,"line":1878},[45,35771,32149],{"class":55},[45,35773,59],{"class":51},[45,35775,32154],{"class":55},[45,35777,31637],{"class":5366},[45,35779,59],{"class":51},[45,35781,31642],{"class":55},[45,35783,35784,35786,35788,35790],{"class":47,"line":1883},[45,35785,32165],{"class":5366},[45,35787,59],{"class":51},[45,35789,32170],{"class":79},[45,35791,31566],{"class":55},[45,35793,35794,35796,35798,35800],{"class":47,"line":1900},[45,35795,32177],{"class":5366},[45,35797,59],{"class":51},[45,35799,31576],{"class":79},[45,35801,31566],{"class":55},[45,35803,35804],{"class":47,"line":1905},[45,35805,32188],{"class":337},[45,35807,35808,35810,35812,35814],{"class":47,"line":1910},[45,35809,32193],{"class":5366},[45,35811,59],{"class":51},[45,35813,672],{"class":79},[45,35815,139],{"class":55},[45,35817,35818,35820,35822,35824,35826,35828],{"class":47,"line":1915},[45,35819,32204],{"class":55},[45,35821,59],{"class":51},[45,35823,31634],{"class":55},[45,35825,31637],{"class":5366},[45,35827,59],{"class":51},[45,35829,32215],{"class":55},[45,35831,35832,35834,35836,35838],{"class":47,"line":1929},[45,35833,32220],{"class":5366},[45,35835,59],{"class":51},[45,35837,32170],{"class":79},[45,35839,31566],{"class":55},[45,35841,35842,35844,35846,35848],{"class":47,"line":1934},[45,35843,32231],{"class":5366},[45,35845,59],{"class":51},[45,35847,31576],{"class":79},[45,35849,31566],{"class":55},[45,35851,35852,35854,35856,35858],{"class":47,"line":2727},[45,35853,32242],{"class":5366},[45,35855,59],{"class":51},[45,35857,672],{"class":79},[45,35859,139],{"class":55},[45,35861,35862,35864],{"class":47,"line":2741},[45,35863,4240],{"class":51},[45,35865,32255],{"class":55},[45,35867,35868],{"class":47,"line":2749},[45,35869,2550],{"emptyLinePlaceholder":207},[45,35871,35872],{"class":47,"line":2754},[45,35873,32264],{"class":337},[45,35875,35876],{"class":47,"line":2760},[45,35877,32269],{"class":337},[45,35879,35880],{"class":47,"line":2766},[45,35881,2550],{"emptyLinePlaceholder":207},[45,35883,35884],{"class":47,"line":2771},[45,35885,32278],{"class":337},[45,35887,35888,35890,35892],{"class":47,"line":8098},[45,35889,32047],{"class":51},[45,35891,32285],{"class":69},[45,35893,32288],{"class":55},[45,35895,35896,35898,35900,35902,35904,35906,35908,35910,35912],{"class":47,"line":8122},[45,35897,31337],{"class":55},[45,35899,59],{"class":51},[45,35901,30551],{"class":55},[45,35903,31344],{"class":62},[45,35905,1855],{"class":51},[45,35907,31349],{"class":55},[45,35909,1852],{"class":51},[45,35911,32307],{"class":62},[45,35913,139],{"class":55},[45,35915,35916],{"class":47,"line":8127},[45,35917,2550],{"emptyLinePlaceholder":207},[45,35919,35920],{"class":47,"line":8133},[45,35921,2550],{"emptyLinePlaceholder":207},[45,35923,35924],{"class":47,"line":8160},[45,35925,32322],{"class":337},[45,35927,35928],{"class":47,"line":8165},[45,35929,32327],{"class":337},[45,35931,35932],{"class":47,"line":8171},[45,35933,32332],{"class":337},[45,35935,35936,35938,35940,35942,35944,35946,35948],{"class":47,"line":8183},[45,35937,32337],{"class":55},[45,35939,59],{"class":51},[45,35941,32342],{"class":55},[45,35943,32345],{"class":5366},[45,35945,59],{"class":51},[45,35947,32350],{"class":79},[45,35949,139],{"class":55},[45,35951,35952],{"class":47,"line":8195},[45,35953,2550],{"emptyLinePlaceholder":207},[45,35955,35956],{"class":47,"line":8207},[45,35957,32361],{"class":337},[45,35959,35960,35962,35964],{"class":47,"line":9866},[45,35961,32366],{"class":55},[45,35963,59],{"class":51},[45,35965,32371],{"class":55},[45,35967,35968],{"class":47,"line":9890},[45,35969,2550],{"emptyLinePlaceholder":207},[45,35971,35972],{"class":47,"line":9913},[45,35973,32380],{"class":337},[45,35975,35976,35978,35980],{"class":47,"line":9937},[45,35977,31389],{"class":55},[45,35979,59],{"class":51},[45,35981,32389],{"class":55},[45,35983,35984],{"class":47,"line":9942},[45,35985,32394],{"class":337},[45,35987,35988],{"class":47,"line":9947},[45,35989,32399],{"class":337},[45,35991,35992],{"class":47,"line":9952},[45,35993,32404],{"class":337},[45,35995,35996,35998,36000],{"class":47,"line":9961},[45,35997,32409],{"class":55},[45,35999,59],{"class":51},[45,36001,32414],{"class":55},[45,36003,36004],{"class":47,"line":9966},[45,36005,2550],{"emptyLinePlaceholder":207},[45,36007,36008],{"class":47,"line":9972},[45,36009,2550],{"emptyLinePlaceholder":207},[45,36011,36012],{"class":47,"line":9993},[45,36013,32427],{"class":337},[45,36015,36016],{"class":47,"line":9999},[45,36017,32432],{"class":337},[45,36019,36020,36022,36024],{"class":47,"line":10013},[45,36021,32437],{"class":55},[45,36023,59],{"class":51},[45,36025,32442],{"class":79},[45,36027,36028],{"class":47,"line":10019},[45,36029,32447],{"class":337},[45,36031,36032,36034,36036],{"class":47,"line":10046},[45,36033,32452],{"class":55},[45,36035,59],{"class":51},[45,36037,32457],{"class":55},[45,36039,36040],{"class":47,"line":10055},[45,36041,32462],{"class":337},[45,36043,36044,36046,36048],{"class":47,"line":10061},[45,36045,32467],{"class":55},[45,36047,59],{"class":51},[45,36049,32457],{"class":55},[45,36051,36052],{"class":47,"line":10069},[45,36053,32476],{"class":337},[45,36055,36056,36058,36060],{"class":47,"line":10074},[45,36057,32481],{"class":55},[45,36059,59],{"class":51},[45,36061,32457],{"class":55},[45,36063,36064],{"class":47,"line":16753},[45,36065,32490],{"class":337},[45,36067,36068,36070,36072],{"class":47,"line":16759},[45,36069,32495],{"class":55},[45,36071,59],{"class":51},[45,36073,32457],{"class":55},[45,36075,36076],{"class":47,"line":16782},[45,36077,2550],{"emptyLinePlaceholder":207},[45,36079,36080],{"class":47,"line":16788},[45,36081,32508],{"class":337},[45,36083,36084,36086,36088],{"class":47,"line":16811},[45,36085,32513],{"class":55},[45,36087,59],{"class":51},[45,36089,32518],{"class":55},[45,36091,36092],{"class":47,"line":16825},[45,36093,2550],{"emptyLinePlaceholder":207},[45,36095,36096],{"class":47,"line":16845},[45,36097,2550],{"emptyLinePlaceholder":207},[45,36099,36100],{"class":47,"line":16851},[45,36101,32531],{"class":337},[45,36103,36104,36106,36108,36110,36112],{"class":47,"line":16862},[45,36105,3351],{"class":51},[45,36107,32538],{"class":55},[45,36109,26143],{"class":51},[45,36111,32543],{"class":79},[45,36113,32546],{"class":55},[45,36115,36116,36118,36120,36122,36124,36126,36128,36130,36132,36134,36136],{"class":47,"line":16885},[45,36117,32551],{"class":79},[45,36119,282],{"class":55},[45,36121,32556],{"class":62},[45,36123,32559],{"class":79},[45,36125,861],{"class":62},[45,36127,32559],{"class":79},[45,36129,89],{"class":62},[45,36131,32568],{"class":55},[45,36133,809],{"class":51},[45,36135,495],{"class":79},[45,36137,30597],{"class":55},[45,36139,36140,36142,36144,36146,36148,36150],{"class":47,"line":16907},[45,36141,32551],{"class":79},[45,36143,282],{"class":55},[45,36145,32583],{"class":62},[45,36147,732],{"class":51},[45,36149,723],{"class":79},[45,36151,139],{"class":55},[45,36153,36154],{"class":47,"line":16912},[45,36155,2550],{"emptyLinePlaceholder":207},[45,36157,36158],{"class":47,"line":16918},[45,36159,32598],{"class":337},[45,36161,36162],{"class":47,"line":16932},[45,36163,32603],{"class":337},[45,36165,36166,36168,36170],{"class":47,"line":16945},[45,36167,32608],{"class":55},[45,36169,59],{"class":51},[45,36171,32442],{"class":79},[45,36173,36174],{"class":47,"line":16950},[45,36175,32617],{"class":337},[45,36177,36178,36180,36182],{"class":47,"line":16964},[45,36179,32622],{"class":55},[45,36181,59],{"class":51},[45,36183,3235],{"class":79},[45,36185,36186],{"class":47,"line":16969},[45,36187,32631],{"class":337},[45,36189,36190,36192,36194],{"class":47,"line":16975},[45,36191,32636],{"class":55},[45,36193,59],{"class":51},[45,36195,32442],{"class":79},[45,36197,36198],{"class":47,"line":16980},[45,36199,32645],{"class":337},[45,36201,36202,36204,36206],{"class":47,"line":16994},[45,36203,32650],{"class":55},[45,36205,59],{"class":51},[45,36207,3235],{"class":79},[45,36209,36210],{"class":47,"line":16999},[45,36211,32659],{"class":337},[45,36213,36214,36216,36218],{"class":47,"line":17004},[45,36215,32664],{"class":55},[45,36217,59],{"class":51},[45,36219,3235],{"class":79},[45,36221,36222],{"class":47,"line":17018},[45,36223,32673],{"class":337},[45,36225,36226,36228,36230],{"class":47,"line":17030},[45,36227,32678],{"class":55},[45,36229,59],{"class":51},[45,36231,3235],{"class":79},[45,36233,36234],{"class":47,"line":17035},[45,36235,32687],{"class":337},[45,36237,36238,36240,36242,36244,36246],{"class":47,"line":17048},[45,36239,3553],{"class":51},[45,36241,31701],{"class":55},[45,36243,26143],{"class":51},[45,36245,31706],{"class":79},[45,36247,32700],{"class":55},[45,36249,36250],{"class":47,"line":17053},[45,36251,32705],{"class":337},[45,36253,36254,36256,36258],{"class":47,"line":17058},[45,36255,32710],{"class":55},[45,36257,59],{"class":51},[45,36259,32715],{"class":55},[45,36261,36262],{"class":47,"line":17063},[45,36263,32720],{"class":337},[45,36265,36266,36268,36270],{"class":47,"line":17076},[45,36267,32725],{"class":55},[45,36269,59],{"class":51},[45,36271,32730],{"class":55},[45,36273,36274],{"class":47,"line":17081},[45,36275,32736],{"class":337},[45,36277,36278],{"class":47,"line":32733},[45,36279,32742],{"class":55},[45,36281,36282],{"class":47,"line":32739},[45,36283,32748],{"class":337},[45,36285,36286],{"class":47,"line":32745},[45,36287,32754],{"class":337},[45,36289,36290,36292,36294],{"class":47,"line":32751},[45,36291,32760],{"class":55},[45,36293,59],{"class":51},[45,36295,32765],{"class":55},[45,36297,36298],{"class":47,"line":32757},[45,36299,32771],{"class":337},[45,36301,36302,36304,36306,36308,36310,36312,36314],{"class":47,"line":32768},[45,36303,32777],{"class":55},[45,36305,59],{"class":51},[45,36307,32782],{"class":55},[45,36309,32785],{"class":5366},[45,36311,59],{"class":51},[45,36313,495],{"class":79},[45,36315,139],{"class":55},[45,36317,36318],{"class":47,"line":32774},[45,36319,32797],{"class":337},[45,36321,36322,36324,36326],{"class":47,"line":32794},[45,36323,32803],{"class":55},[45,36325,59],{"class":51},[45,36327,32808],{"class":55},[45,36329,36330],{"class":47,"line":32800},[45,36331,32814],{"class":337},[45,36333,36334],{"class":47,"line":32811},[45,36335,32820],{"class":55},[45,36337,36338],{"class":47,"line":32817},[45,36339,32826],{"class":337},[45,36341,36342],{"class":47,"line":32823},[45,36343,32832],{"class":55},[45,36345,36346],{"class":47,"line":32829},[45,36347,32838],{"class":337},[45,36349,36350],{"class":47,"line":32835},[45,36351,32844],{"class":55},[45,36353,36354],{"class":47,"line":32841},[45,36355,32850],{"class":337},[45,36357,36358,36360,36362,36364,36366,36368,36370],{"class":47,"line":32847},[45,36359,32856],{"class":55},[45,36361,9627],{"class":51},[45,36363,32861],{"class":55},[45,36365,732],{"class":51},[45,36367,32866],{"class":55},[45,36369,469],{"class":79},[45,36371,139],{"class":55},[45,36373,36374],{"class":47,"line":32853},[45,36375,32876],{"class":337},[45,36377,36378,36380,36382,36384,36386],{"class":47,"line":32873},[45,36379,32882],{"class":55},[45,36381,9627],{"class":51},[45,36383,32887],{"class":55},[45,36385,3099],{"class":51},[45,36387,32892],{"class":55},[45,36389,36390],{"class":47,"line":32879},[45,36391,32898],{"class":337},[45,36393,36394,36396,36398,36400,36402],{"class":47,"line":32895},[45,36395,32904],{"class":55},[45,36397,9627],{"class":51},[45,36399,32866],{"class":55},[45,36401,469],{"class":79},[45,36403,139],{"class":55},[45,36405,36406],{"class":47,"line":32901},[45,36407,32918],{"class":337},[45,36409,36410,36412,36414,36416,36418],{"class":47,"line":32915},[45,36411,3553],{"class":51},[45,36413,32926],{"class":55},[45,36415,26143],{"class":51},[45,36417,31706],{"class":79},[45,36419,32933],{"class":55},[45,36421,36422],{"class":47,"line":32921},[45,36423,32939],{"class":337},[45,36425,36426,36428,36430],{"class":47,"line":32936},[45,36427,32710],{"class":55},[45,36429,59],{"class":51},[45,36431,32715],{"class":55},[45,36433,36434],{"class":47,"line":32942},[45,36435,32954],{"class":337},[45,36437,36438,36440,36442],{"class":47,"line":32951},[45,36439,32725],{"class":55},[45,36441,59],{"class":51},[45,36443,32730],{"class":55},[45,36445,36446],{"class":47,"line":32957},[45,36447,32969],{"class":337},[45,36449,36450],{"class":47,"line":32966},[45,36451,32975],{"class":55},[45,36453,36454],{"class":47,"line":32972},[45,36455,36456],{"class":337},"            # 验证时不计算梯度以节省内存\u002F计算\n",[45,36458,36459,36461],{"class":47,"line":32978},[45,36460,32981],{"class":51},[45,36462,32984],{"class":55},[45,36464,36465],{"class":47,"line":32987},[45,36466,32990],{"class":337},[45,36468,36469,36472,36474],{"class":47,"line":32993},[45,36470,36471],{"class":55},"                output",[45,36473,59],{"class":51},[45,36475,32765],{"class":55},[45,36477,36478],{"class":47,"line":33004},[45,36479,33007],{"class":337},[45,36481,36482,36485,36487,36489,36491,36493,36495],{"class":47,"line":33010},[45,36483,36484],{"class":55},"                pre_lab",[45,36486,59],{"class":51},[45,36488,32782],{"class":55},[45,36490,32785],{"class":5366},[45,36492,59],{"class":51},[45,36494,495],{"class":79},[45,36496,139],{"class":55},[45,36498,36499],{"class":47,"line":33029},[45,36500,33032],{"class":337},[45,36502,36503,36506,36508],{"class":47,"line":33035},[45,36504,36505],{"class":55},"                val_batch_loss",[45,36507,59],{"class":51},[45,36509,32808],{"class":55},[45,36511,36512],{"class":47,"line":33046},[45,36513,33049],{"class":337},[45,36515,36516,36519,36521,36524,36526,36528,36530],{"class":47,"line":33052},[45,36517,36518],{"class":55},"                val_loss",[45,36520,9627],{"class":51},[45,36522,36523],{"class":55},"val_batch_loss.item()",[45,36525,732],{"class":51},[45,36527,32866],{"class":55},[45,36529,469],{"class":79},[45,36531,139],{"class":55},[45,36533,36534,36537,36539,36541,36543],{"class":47,"line":33072},[45,36535,36536],{"class":55},"                val_corrects",[45,36538,9627],{"class":51},[45,36540,32887],{"class":55},[45,36542,3099],{"class":51},[45,36544,32892],{"class":55},[45,36546,36547],{"class":47,"line":33088},[45,36548,36549],{"class":337},"            # 当前用于验证的样本数量\n",[45,36551,36552,36555,36557,36559,36561],{"class":47,"line":33094},[45,36553,36554],{"class":55},"            val_num",[45,36556,9627],{"class":51},[45,36558,32866],{"class":55},[45,36560,469],{"class":79},[45,36562,139],{"class":55},[45,36564,36565],{"class":47,"line":33108},[45,36566,33111],{"class":337},[45,36568,36569],{"class":47,"line":33114},[45,36570,33117],{"class":337},[45,36572,36573,36575,36577],{"class":47,"line":33120},[45,36574,33123],{"class":55},[45,36576,861],{"class":51},[45,36578,33128],{"class":55},[45,36580,36581],{"class":47,"line":33131},[45,36582,33134],{"class":337},[45,36584,36585],{"class":47,"line":33137},[45,36586,33140],{"class":337},[45,36588,36589,36591,36593],{"class":47,"line":33143},[45,36590,33146],{"class":55},[45,36592,861],{"class":51},[45,36594,33128],{"class":55},[45,36596,36597],{"class":47,"line":33153},[45,36598,33156],{"class":337},[45,36600,36601,36603,36605],{"class":47,"line":33159},[45,36602,33162],{"class":55},[45,36604,861],{"class":51},[45,36606,33167],{"class":55},[45,36608,36609],{"class":47,"line":33170},[45,36610,33173],{"class":337},[45,36612,36613,36615,36617],{"class":47,"line":33176},[45,36614,33179],{"class":55},[45,36616,861],{"class":51},[45,36618,33167],{"class":55},[45,36620,36621],{"class":47,"line":33186},[45,36622,2550],{"emptyLinePlaceholder":207},[45,36624,36625],{"class":47,"line":33191},[45,36626,33194],{"class":337},[45,36628,36629,36631,36633,36635,36637,36639,36641,36643,36645,36647,36649,36651,36653,36655,36657,36659,36661,36663,36665,36667],{"class":47,"line":33197},[45,36630,32551],{"class":79},[45,36632,282],{"class":55},[45,36634,3742],{"class":62},[45,36636,32559],{"class":79},[45,36638,33208],{"class":62},[45,36640,1173],{"class":79},[45,36642,33213],{"class":51},[45,36644,1223],{"class":79},[45,36646,33218],{"class":62},[45,36648,1173],{"class":79},[45,36650,33213],{"class":51},[45,36652,1223],{"class":79},[45,36654,3742],{"class":62},[45,36656,33229],{"class":55},[45,36658,809],{"class":51},[45,36660,495],{"class":79},[45,36662,33236],{"class":55},[45,36664,809],{"class":51},[45,36666,495],{"class":79},[45,36668,33243],{"class":55},[45,36670,36671,36673,36675,36677,36679,36681,36683,36685,36687,36689,36691,36693,36695,36697,36699,36701,36703,36705,36707,36709],{"class":47,"line":33246},[45,36672,32551],{"class":79},[45,36674,282],{"class":55},[45,36676,3742],{"class":62},[45,36678,32559],{"class":79},[45,36680,33257],{"class":62},[45,36682,1173],{"class":79},[45,36684,33213],{"class":51},[45,36686,1223],{"class":79},[45,36688,33266],{"class":62},[45,36690,1173],{"class":79},[45,36692,33213],{"class":51},[45,36694,1223],{"class":79},[45,36696,3742],{"class":62},[45,36698,33277],{"class":55},[45,36700,809],{"class":51},[45,36702,495],{"class":79},[45,36704,33284],{"class":55},[45,36706,809],{"class":51},[45,36708,495],{"class":79},[45,36710,33243],{"class":55},[45,36712,36713],{"class":47,"line":33293},[45,36714,2550],{"emptyLinePlaceholder":207},[45,36716,36717],{"class":47,"line":33298},[45,36718,33301],{"class":337},[45,36720,36721,36723,36725,36727,36729,36731,36733],{"class":47,"line":33304},[45,36722,2647],{"class":51},[45,36724,33309],{"class":55},[45,36726,809],{"class":51},[45,36728,495],{"class":79},[45,36730,1217],{"class":55},[45,36732,1237],{"class":51},[45,36734,33320],{"class":55},[45,36736,36737],{"class":47,"line":33323},[45,36738,33326],{"class":337},[45,36740,36741,36743,36745,36747,36749,36751,36753],{"class":47,"line":33329},[45,36742,33332],{"class":55},[45,36744,320],{"class":79},[45,36746,59],{"class":51},[45,36748,33339],{"class":55},[45,36750,809],{"class":51},[45,36752,495],{"class":79},[45,36754,33346],{"class":55},[45,36756,36757],{"class":47,"line":33349},[45,36758,33352],{"class":337},[45,36760,36761],{"class":47,"line":33355},[45,36762,33358],{"class":337},[45,36764,36765,36767,36769],{"class":47,"line":33361},[45,36766,33364],{"class":55},[45,36768,59],{"class":51},[45,36770,32414],{"class":55},[45,36772,36773],{"class":47,"line":33371},[45,36774,2550],{"emptyLinePlaceholder":207},[45,36776,36777],{"class":47,"line":33376},[45,36778,33379],{"class":337},[45,36780,36781,36783,36785,36787,36789],{"class":47,"line":33382},[45,36782,33385],{"class":55},[45,36784,59],{"class":51},[45,36786,33390],{"class":55},[45,36788,809],{"class":51},[45,36790,33395],{"class":55},[45,36792,36793,36795,36797,36799,36801,36803,36805,36807,36809,36811,36813,36815,36817,36819,36821,36823,36825,36827],{"class":47,"line":33398},[45,36794,32551],{"class":79},[45,36796,282],{"class":55},[45,36798,33405],{"class":62},[45,36800,1173],{"class":79},[45,36802,33410],{"class":51},[45,36804,1223],{"class":79},[45,36806,821],{"class":62},[45,36808,1173],{"class":79},[45,36810,33410],{"class":51},[45,36812,1223],{"class":79},[45,36814,33423],{"class":62},[45,36816,33426],{"class":55},[45,36818,33429],{"class":51},[45,36820,1184],{"class":79},[45,36822,33434],{"class":55},[45,36824,605],{"class":51},[45,36826,1184],{"class":79},[45,36828,30597],{"class":55},[45,36830,36831],{"class":47,"line":33443},[45,36832,36833],{"class":337},"    # 选择最优参数并保存\n",[45,36835,36836],{"class":47,"line":33449},[45,36837,36838],{"class":337},"    # 保存最佳模型权重字典\n",[45,36840,36841,36844,36846],{"class":47,"line":33455},[45,36842,36843],{"class":55},"    torch.save(best_model_wts,",[45,36845,33467],{"class":62},[45,36847,139],{"class":55},[45,36849,36850],{"class":47,"line":33461},[45,36851,33487],{"class":337},[45,36853,36854,36856,36858,36860,36862,36864],{"class":47,"line":33472},[45,36855,33493],{"class":55},[45,36857,59],{"class":51},[45,36859,33498],{"class":55},[45,36861,33501],{"class":5366},[45,36863,59],{"class":51},[45,36865,1697],{"class":55},[45,36867,36868,36870,36872,36874],{"class":47,"line":33478},[45,36869,33511],{"class":62},[45,36871,1136],{"class":55},[45,36873,33516],{"class":79},[45,36875,33519],{"class":55},[45,36877,36878,36880],{"class":47,"line":33484},[45,36879,33525],{"class":62},[45,36881,33528],{"class":55},[45,36883,36884,36886],{"class":47,"line":33490},[45,36885,33534],{"class":62},[45,36887,33537],{"class":55},[45,36889,36890,36892],{"class":47,"line":33508},[45,36891,33543],{"class":62},[45,36893,33546],{"class":55},[45,36895,36896,36898],{"class":47,"line":33522},[45,36897,33552],{"class":62},[45,36899,33555],{"class":55},[45,36901,36902],{"class":47,"line":33531},[45,36903,33561],{"class":55},[45,36905,36906],{"class":47,"line":33540},[45,36907,33567],{"class":337},[45,36909,36910,36912],{"class":47,"line":33549},[45,36911,4240],{"class":51},[45,36913,33575],{"class":55},[45,36915,36916],{"class":47,"line":33558},[45,36917,2550],{"emptyLinePlaceholder":207},[45,36919,36920],{"class":47,"line":33564},[45,36921,33586],{"class":337},[45,36923,36924,36926,36928],{"class":47,"line":33570},[45,36925,32047],{"class":51},[45,36927,33594],{"class":69},[45,36929,33597],{"class":55},[45,36931,36932],{"class":47,"line":33578},[45,36933,33603],{"class":337},[45,36935,36936,36938,36940,36942,36944,36946,36948,36950],{"class":47,"line":33583},[45,36937,33609],{"class":55},[45,36939,31793],{"class":5366},[45,36941,59],{"class":51},[45,36943,282],{"class":55},[45,36945,775],{"class":79},[45,36947,655],{"class":55},[45,36949,570],{"class":79},[45,36951,30597],{"class":55},[45,36953,36954],{"class":47,"line":33589},[45,36955,33629],{"class":337},[45,36957,36958],{"class":47,"line":33600},[45,36959,33635],{"class":337},[45,36961,36962],{"class":47,"line":33606},[45,36963,33641],{"class":337},[45,36965,36966,36968,36970,36972,36974,36976,36978],{"class":47,"line":33626},[45,36967,31827],{"class":55},[45,36969,495],{"class":79},[45,36971,655],{"class":55},[45,36973,356],{"class":79},[45,36975,655],{"class":55},[45,36977,495],{"class":79},[45,36979,139],{"class":55},[45,36981,36982],{"class":47,"line":33632},[45,36983,33664],{"class":337},[45,36985,36986],{"class":47,"line":33638},[45,36987,33670],{"class":337},[45,36989,36990],{"class":47,"line":33644},[45,36991,33676],{"class":337},[45,36993,36994],{"class":47,"line":33661},[45,36995,33682],{"class":337},[45,36997,36998],{"class":47,"line":33667},[45,36999,33688],{"class":337},[45,37001,37002,37004,37006,37008,37010,37012,37014,37016,37018],{"class":47,"line":33673},[45,37003,33694],{"class":55},[45,37005,33697],{"class":62},[45,37007,33700],{"class":55},[45,37009,33703],{"class":62},[45,37011,655],{"class":55},[45,37013,33708],{"class":5366},[45,37015,59],{"class":51},[45,37017,33713],{"class":62},[45,37019,139],{"class":55},[45,37021,37022,37024,37026,37028,37030,37032,37034,37036,37038],{"class":47,"line":33679},[45,37023,33694],{"class":55},[45,37025,33697],{"class":62},[45,37027,33725],{"class":55},[45,37029,33728],{"class":62},[45,37031,655],{"class":55},[45,37033,33708],{"class":5366},[45,37035,59],{"class":51},[45,37037,33737],{"class":62},[45,37039,139],{"class":55},[45,37041,37042],{"class":47,"line":33685},[45,37043,33745],{"class":337},[45,37045,37046],{"class":47,"line":33691},[45,37047,33751],{"class":55},[45,37049,37050],{"class":47,"line":33718},[45,37051,33757],{"class":337},[45,37053,37054,37056,37058],{"class":47,"line":33742},[45,37055,33763],{"class":55},[45,37057,33766],{"class":62},[45,37059,139],{"class":55},[45,37061,37062,37064,37066],{"class":47,"line":33748},[45,37063,33774],{"class":55},[45,37065,33777],{"class":62},[45,37067,139],{"class":55},[45,37069,37070],{"class":47,"line":33754},[45,37071,33785],{"class":337},[45,37073,37074,37076,37078,37080,37082,37084,37086],{"class":47,"line":33760},[45,37075,31827],{"class":55},[45,37077,495],{"class":79},[45,37079,655],{"class":55},[45,37081,356],{"class":79},[45,37083,655],{"class":55},[45,37085,356],{"class":79},[45,37087,139],{"class":55},[45,37089,37090,37092,37094,37096,37098,37100,37102,37104,37106],{"class":47,"line":33771},[45,37091,33694],{"class":55},[45,37093,33697],{"class":62},[45,37095,33812],{"class":55},[45,37097,33703],{"class":62},[45,37099,655],{"class":55},[45,37101,33708],{"class":5366},[45,37103,59],{"class":51},[45,37105,33823],{"class":62},[45,37107,139],{"class":55},[45,37109,37110,37112,37114,37116,37118,37120,37122,37124,37126],{"class":47,"line":33782},[45,37111,33694],{"class":55},[45,37113,33697],{"class":62},[45,37115,33835],{"class":55},[45,37117,33728],{"class":62},[45,37119,655],{"class":55},[45,37121,33708],{"class":5366},[45,37123,59],{"class":51},[45,37125,33846],{"class":62},[45,37127,139],{"class":55},[45,37129,37130],{"class":47,"line":33788},[45,37131,33854],{"class":337},[45,37133,37134],{"class":47,"line":33805},[45,37135,33751],{"class":55},[45,37137,37138,37140,37142],{"class":47,"line":33828},[45,37139,33763],{"class":55},[45,37141,33697],{"class":62},[45,37143,139],{"class":55},[45,37145,37146,37148,37150],{"class":47,"line":33851},[45,37147,33774],{"class":55},[45,37149,33876],{"class":62},[45,37151,139],{"class":55},[45,37153,37154],{"class":47,"line":33857},[45,37155,33884],{"class":55},[45,37157,37158],{"class":47,"line":33862},[45,37159,2550],{"emptyLinePlaceholder":207},[45,37161,37162],{"class":47,"line":33871},[45,37163,33895],{"class":337},[45,37165,37166,37168,37170,37172,37174],{"class":47,"line":33881},[45,37167,1682],{"class":51},[45,37169,31320],{"class":79},[45,37171,3099],{"class":51},[45,37173,31325],{"class":62},[45,37175,3889],{"class":55},[45,37177,37178],{"class":47,"line":33887},[45,37179,33914],{"class":337},[45,37181,37182,37185,37187],{"class":47,"line":33892},[45,37183,37184],{"class":55},"    AlexNet",[45,37186,59],{"class":51},[45,37188,37189],{"class":55},"AlexNet()\n",[45,37191,37192,37194,37196],{"class":47,"line":33898},[45,37193,33931],{"class":55},[45,37195,59],{"class":51},[45,37197,33936],{"class":55},[45,37199,37200,37202,37204,37207,37209,37211,37213],{"class":47,"line":33911},[45,37201,33493],{"class":55},[45,37203,59],{"class":51},[45,37205,37206],{"class":55},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[45,37208,33949],{"class":5366},[45,37210,59],{"class":51},[45,37212,977],{"class":79},[45,37214,139],{"class":55},[45,37216,37217],{"class":47,"line":33917},[45,37218,33961],{"class":55},[233,37220,37221],{"start":1331},[169,37222,33974],{},[36,37224,37226],{"className":30478,"code":37225,"language":30480,"meta":25,"style":25},"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",[42,37227,37228,37234,37244,37254,37264,37268,37278,37288,37299,37303,37307,37311,37319,37335,37345,37361,37371,37385,37389,37399,37409,37419,37425,37429,37433,37441,37445,37461,37469,37473,37477,37485,37493,37497,37501,37505,37509,37515,37519,37529,37537,37545,37549,37553,37557,37565,37569,37585,37589,37593,37597,37609,37613,37625,37629,37633,37645,37649,37659,37663,37667,37679,37683,37691,37695,37699,37707,37711,37719,37723,37727,37731,37735,37739,37755,37763,37767,37771,37819,37825,37829,37839,37847,37855,37859,37863,37867,37871,37879,37883,37899,37903,37911,37919],{"__ignoreMap":25},[45,37229,37230,37232],{"class":47,"line":48},[45,37231,30492],{"class":51},[45,37233,30495],{"class":55},[45,37235,37236,37238,37240,37242],{"class":47,"line":66},[45,37237,30492],{"class":51},[45,37239,31515],{"class":55},[45,37241,31483],{"class":51},[45,37243,31520],{"class":55},[45,37245,37246,37248,37250,37252],{"class":47,"line":1331},[45,37247,30837],{"class":51},[45,37249,34002],{"class":55},[45,37251,30492],{"class":51},[45,37253,34007],{"class":55},[45,37255,37256,37258,37260,37262],{"class":47,"line":1346},[45,37257,30837],{"class":51},[45,37259,31498],{"class":55},[45,37261,30492],{"class":51},[45,37263,31503],{"class":55},[45,37265,37266],{"class":47,"line":1352},[45,37267,34022],{"class":337},[45,37269,37270,37272,37274,37276],{"class":47,"line":1366},[45,37271,30837],{"class":51},[45,37273,31468],{"class":55},[45,37275,30492],{"class":51},[45,37277,31473],{"class":55},[45,37279,37280,37282,37284,37286],{"class":47,"line":1372},[45,37281,30837],{"class":51},[45,37283,32014],{"class":55},[45,37285,30492],{"class":51},[45,37287,35657],{"class":55},[45,37289,37290,37292,37295,37297],{"class":47,"line":1463},[45,37291,30837],{"class":51},[45,37293,37294],{"class":55}," 练习.AlexNet.model ",[45,37296,30492],{"class":51},[45,37298,35657],{"class":55},[45,37300,37301],{"class":47,"line":1469},[45,37302,2550],{"emptyLinePlaceholder":207},[45,37304,37305],{"class":47,"line":1481},[45,37306,2550],{"emptyLinePlaceholder":207},[45,37308,37309],{"class":47,"line":1763},[45,37310,34051],{"class":337},[45,37312,37313,37315,37317],{"class":47,"line":1768},[45,37314,32047],{"class":51},[45,37316,34058],{"class":69},[45,37318,32053],{"class":55},[45,37320,37321,37323,37325,37327,37329,37331,37333],{"class":47,"line":1774},[45,37322,34065],{"class":55},[45,37324,59],{"class":51},[45,37326,31555],{"class":55},[45,37328,31558],{"class":5366},[45,37330,59],{"class":51},[45,37332,31563],{"class":62},[45,37334,31566],{"class":55},[45,37336,37337,37339,37341,37343],{"class":47,"line":1779},[45,37338,34082],{"class":5366},[45,37340,59],{"class":51},[45,37342,34087],{"class":79},[45,37344,31566],{"class":55},[45,37346,37347,37349,37351,37353,37355,37357,37359],{"class":47,"line":1793},[45,37348,34094],{"class":5366},[45,37350,59],{"class":51},[45,37352,31593],{"class":55},[45,37354,31596],{"class":5366},[45,37356,59],{"class":51},[45,37358,35549],{"class":79},[45,37360,31604],{"class":55},[45,37362,37363,37365,37367,37369],{"class":47,"line":1798},[45,37364,34111],{"class":5366},[45,37366,59],{"class":51},[45,37368,31576],{"class":79},[45,37370,139],{"class":55},[45,37372,37373,37375,37377,37379,37381,37383],{"class":47,"line":1804},[45,37374,34122],{"class":55},[45,37376,59],{"class":51},[45,37378,31634],{"class":55},[45,37380,31637],{"class":5366},[45,37382,59],{"class":51},[45,37384,34133],{"class":55},[45,37386,37387],{"class":47,"line":1825},[45,37388,34138],{"class":337},[45,37390,37391,37393,37395,37397],{"class":47,"line":1830},[45,37392,34143],{"class":5366},[45,37394,59],{"class":51},[45,37396,495],{"class":79},[45,37398,31566],{"class":55},[45,37400,37401,37403,37405,37407],{"class":47,"line":1844},[45,37402,34154],{"class":5366},[45,37404,59],{"class":51},[45,37406,31576],{"class":79},[45,37408,31566],{"class":55},[45,37410,37411,37413,37415,37417],{"class":47,"line":1849},[45,37412,34165],{"class":5366},[45,37414,59],{"class":51},[45,37416,469],{"class":79},[45,37418,139],{"class":55},[45,37420,37421,37423],{"class":47,"line":1878},[45,37422,4240],{"class":51},[45,37424,34178],{"class":55},[45,37426,37427],{"class":47,"line":1883},[45,37428,2550],{"emptyLinePlaceholder":207},[45,37430,37431],{"class":47,"line":1900},[45,37432,34187],{"class":337},[45,37434,37435,37437,37439],{"class":47,"line":1905},[45,37436,32047],{"class":51},[45,37438,34194],{"class":69},[45,37440,34197],{"class":55},[45,37442,37443],{"class":47,"line":1910},[45,37444,34202],{"class":337},[45,37446,37447,37449,37451,37453,37455,37457,37459],{"class":47,"line":1915},[45,37448,31337],{"class":55},[45,37450,59],{"class":51},[45,37452,31344],{"class":62},[45,37454,1855],{"class":51},[45,37456,31349],{"class":55},[45,37458,1852],{"class":51},[45,37460,34219],{"class":62},[45,37462,37463,37465,37467],{"class":47,"line":1929},[45,37464,31389],{"class":55},[45,37466,59],{"class":51},[45,37468,32389],{"class":55},[45,37470,37471],{"class":47,"line":1934},[45,37472,2550],{"emptyLinePlaceholder":207},[45,37474,37475],{"class":47,"line":2727},[45,37476,34236],{"class":337},[45,37478,37479,37481,37483],{"class":47,"line":2741},[45,37480,34241],{"class":55},[45,37482,59],{"class":51},[45,37484,32442],{"class":79},[45,37486,37487,37489,37491],{"class":47,"line":2749},[45,37488,34250],{"class":55},[45,37490,59],{"class":51},[45,37492,3235],{"class":79},[45,37494,37495],{"class":47,"line":2754},[45,37496,2550],{"emptyLinePlaceholder":207},[45,37498,37499],{"class":47,"line":2760},[45,37500,34263],{"class":337},[45,37502,37503],{"class":47,"line":2766},[45,37504,34268],{"class":337},[45,37506,37507],{"class":47,"line":2771},[45,37508,34273],{"class":337},[45,37510,37511,37513],{"class":47,"line":8098},[45,37512,34278],{"class":51},[45,37514,32984],{"class":55},[45,37516,37517],{"class":47,"line":8122},[45,37518,34285],{"class":337},[45,37520,37521,37523,37525,37527],{"class":47,"line":8127},[45,37522,3553],{"class":51},[45,37524,34292],{"class":55},[45,37526,26143],{"class":51},[45,37528,34297],{"class":55},[45,37530,37531,37533,37535],{"class":47,"line":8133},[45,37532,34302],{"class":55},[45,37534,59],{"class":51},[45,37536,34307],{"class":55},[45,37538,37539,37541,37543],{"class":47,"line":8160},[45,37540,34312],{"class":55},[45,37542,59],{"class":51},[45,37544,34317],{"class":55},[45,37546,37547],{"class":47,"line":8165},[45,37548,34322],{"class":337},[45,37550,37551],{"class":47,"line":8171},[45,37552,32975],{"class":55},[45,37554,37555],{"class":47,"line":8183},[45,37556,34331],{"class":337},[45,37558,37559,37561,37563],{"class":47,"line":8195},[45,37560,32760],{"class":55},[45,37562,59],{"class":51},[45,37564,34340],{"class":55},[45,37566,37567],{"class":47,"line":8207},[45,37568,34345],{"class":337},[45,37570,37571,37573,37575,37577,37579,37581,37583],{"class":47,"line":9866},[45,37572,32777],{"class":55},[45,37574,59],{"class":51},[45,37576,32782],{"class":55},[45,37578,32785],{"class":5366},[45,37580,59],{"class":51},[45,37582,495],{"class":79},[45,37584,139],{"class":55},[45,37586,37587],{"class":47,"line":9890},[45,37588,34366],{"class":337},[45,37590,37591],{"class":47,"line":9913},[45,37592,34371],{"class":337},[45,37594,37595],{"class":47,"line":9937},[45,37596,34376],{"class":337},[45,37598,37599,37601,37603,37605,37607],{"class":47,"line":9942},[45,37600,34381],{"class":55},[45,37602,9627],{"class":51},[45,37604,32887],{"class":55},[45,37606,3099],{"class":51},[45,37608,34390],{"class":55},[45,37610,37611],{"class":47,"line":9947},[45,37612,34395],{"class":337},[45,37614,37615,37617,37619,37621,37623],{"class":47,"line":9952},[45,37616,34400],{"class":55},[45,37618,9627],{"class":51},[45,37620,34405],{"class":55},[45,37622,469],{"class":79},[45,37624,139],{"class":55},[45,37626,37627],{"class":47,"line":9961},[45,37628,2550],{"emptyLinePlaceholder":207},[45,37630,37631],{"class":47,"line":9966},[45,37632,34418],{"class":337},[45,37634,37635,37637,37639,37641,37643],{"class":47,"line":9972},[45,37636,34423],{"class":55},[45,37638,59],{"class":51},[45,37640,34428],{"class":55},[45,37642,861],{"class":51},[45,37644,34433],{"class":55},[45,37646,37647],{"class":47,"line":9993},[45,37648,34438],{"class":337},[45,37650,37651,37653,37655,37657],{"class":47,"line":9999},[45,37652,32551],{"class":79},[45,37654,282],{"class":55},[45,37656,34447],{"class":62},[45,37658,34450],{"class":55},[45,37660,37661],{"class":47,"line":10013},[45,37662,2550],{"emptyLinePlaceholder":207},[45,37664,37665],{"class":47,"line":10019},[45,37666,34459],{"class":337},[45,37668,37669,37671,37673,37675,37677],{"class":47,"line":10046},[45,37670,1682],{"class":51},[45,37672,31320],{"class":79},[45,37674,3099],{"class":51},[45,37676,31325],{"class":62},[45,37678,3889],{"class":55},[45,37680,37681],{"class":47,"line":10055},[45,37682,34476],{"class":337},[45,37684,37685,37687,37689],{"class":47,"line":10061},[45,37686,31389],{"class":55},[45,37688,59],{"class":51},[45,37690,37189],{"class":55},[45,37692,37693],{"class":47,"line":10069},[45,37694,34489],{"class":337},[45,37696,37697],{"class":47,"line":10074},[45,37698,34494],{"class":337},[45,37700,37701,37703,37705],{"class":47,"line":16753},[45,37702,34499],{"class":55},[45,37704,34502],{"class":62},[45,37706,30597],{"class":55},[45,37708,37709],{"class":47,"line":16759},[45,37710,34509],{"class":337},[45,37712,37713,37715,37717],{"class":47,"line":16782},[45,37714,34122],{"class":55},[45,37716,59],{"class":51},[45,37718,34518],{"class":55},[45,37720,37721],{"class":47,"line":16788},[45,37722,34523],{"class":337},[45,37724,37725],{"class":47,"line":16811},[45,37726,34528],{"class":55},[45,37728,37729],{"class":47,"line":16825},[45,37730,2550],{"emptyLinePlaceholder":207},[45,37732,37733],{"class":47,"line":16845},[45,37734,34537],{"class":337},[45,37736,37737],{"class":47,"line":16851},[45,37738,34542],{"class":337},[45,37740,37741,37743,37745,37747,37749,37751,37753],{"class":47,"line":16862},[45,37742,31337],{"class":55},[45,37744,59],{"class":51},[45,37746,31344],{"class":62},[45,37748,1855],{"class":51},[45,37750,31349],{"class":55},[45,37752,1852],{"class":51},[45,37754,34219],{"class":62},[45,37756,37757,37759,37761],{"class":47,"line":16885},[45,37758,31389],{"class":55},[45,37760,59],{"class":51},[45,37762,32389],{"class":55},[45,37764,37765],{"class":47,"line":16907},[45,37766,34571],{"class":337},[45,37768,37769],{"class":47,"line":16912},[45,37770,34576],{"class":337},[45,37772,37773,37775,37777,37779,37781,37783,37785,37787,37789,37791,37793,37795,37797,37799,37801,37803,37805,37807,37809,37811,37813,37815,37817],{"class":47,"line":16918},[45,37774,34581],{"class":55},[45,37776,59],{"class":51},[45,37778,1167],{"class":55},[45,37780,34588],{"class":62},[45,37782,655],{"class":55},[45,37784,34593],{"class":62},[45,37786,655],{"class":55},[45,37788,34598],{"class":62},[45,37790,655],{"class":55},[45,37792,34603],{"class":62},[45,37794,655],{"class":55},[45,37796,34608],{"class":62},[45,37798,655],{"class":55},[45,37800,34613],{"class":62},[45,37802,655],{"class":55},[45,37804,34618],{"class":62},[45,37806,655],{"class":55},[45,37808,34623],{"class":62},[45,37810,655],{"class":55},[45,37812,34628],{"class":62},[45,37814,655],{"class":55},[45,37816,34633],{"class":62},[45,37818,33346],{"class":55},[45,37820,37821,37823],{"class":47,"line":16932},[45,37822,34278],{"class":51},[45,37824,32984],{"class":55},[45,37826,37827],{"class":47,"line":16945},[45,37828,34646],{"class":337},[45,37830,37831,37833,37835,37837],{"class":47,"line":16950},[45,37832,3553],{"class":51},[45,37834,34653],{"class":55},[45,37836,26143],{"class":51},[45,37838,34297],{"class":55},[45,37840,37841,37843,37845],{"class":47,"line":16964},[45,37842,32710],{"class":55},[45,37844,59],{"class":51},[45,37846,32715],{"class":55},[45,37848,37849,37851,37853],{"class":47,"line":16969},[45,37850,32725],{"class":55},[45,37852,59],{"class":51},[45,37854,32730],{"class":55},[45,37856,37857],{"class":47,"line":16975},[45,37858,2550],{"emptyLinePlaceholder":207},[45,37860,37861],{"class":47,"line":16980},[45,37862,34682],{"class":337},[45,37864,37865],{"class":47,"line":16994},[45,37866,32975],{"class":55},[45,37868,37869],{"class":47,"line":16999},[45,37870,34691],{"class":337},[45,37872,37873,37875,37877],{"class":47,"line":17004},[45,37874,32760],{"class":55},[45,37876,59],{"class":51},[45,37878,32765],{"class":55},[45,37880,37881],{"class":47,"line":17018},[45,37882,34704],{"class":337},[45,37884,37885,37887,37889,37891,37893,37895,37897],{"class":47,"line":17030},[45,37886,32777],{"class":55},[45,37888,59],{"class":51},[45,37890,32782],{"class":55},[45,37892,32785],{"class":5366},[45,37894,59],{"class":51},[45,37896,495],{"class":79},[45,37898,139],{"class":55},[45,37900,37901],{"class":47,"line":17035},[45,37902,34725],{"class":337},[45,37904,37905,37907,37909],{"class":47,"line":17048},[45,37906,34730],{"class":55},[45,37908,59],{"class":51},[45,37910,34735],{"class":55},[45,37912,37913,37915,37917],{"class":47,"line":17053},[45,37914,34740],{"class":55},[45,37916,59],{"class":51},[45,37918,34745],{"class":55},[45,37920,37921,37923,37925,37927,37929,37931,37933,37935],{"class":47,"line":17058},[45,37922,34750],{"class":79},[45,37924,282],{"class":55},[45,37926,34755],{"class":62},[45,37928,34758],{"class":55},[45,37930,34761],{"class":62},[45,37932,655],{"class":55},[45,37934,34766],{"class":62},[45,37936,34769],{"class":55},[249,37938,37940],{"id":37939},"_22vgg","2.2.VGG",[22147,37942,37944],{"id":37943},"_221原理","2.2.1.原理",[20,37946,37947],{},[23,37948],{"alt":25,"src":37949},"\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,37951,37952],{},[23,37953],{"alt":25,"src":37954},"\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,37956,37957],{},[23,37958],{"alt":25,"src":37959},"\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,37961,37962],{},"参数详细描述：",[20,37964,37965],{},[23,37966],{"alt":25,"src":37967},"\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,37969,37970],{},[23,37971],{"alt":25,"src":37972},"\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,37974,37975],{},[23,37976],{"alt":25,"src":37977},"\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,37979,37980],{},[23,37981],{"alt":25,"src":37982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[20,37984,37985],{},[23,37986],{"alt":25,"src":37987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-022.png",[22147,37989,37991],{"id":37990},"_222代码实现","2.2.2.代码实现",[233,37993,37994],{},[169,37995,37996],{},"网络搭建",[36,37998,38000],{"className":30478,"code":37999,"language":30480,"meta":25,"style":25},"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",[42,38001,38002,38008,38020,38030,38040,38044,38061,38069,38088,38093,38098,38110,38148,38153,38189,38193,38222,38227,38232,38243,38279,38283,38319,38323,38351,38355,38360,38371,38407,38411,38447,38451,38487,38491,38519,38523,38528,38539,38576,38580,38616,38620,38656,38660,38688,38692,38697,38708,38744,38748,38784,38788,38824,38828,38856,38860,38865,38876,38881,38886,38891,38912,38916,38928,38932,38944,38948,38952,38957,38962,38977,38982,38992,38997,39012,39017,39036,39041,39050,39055,39065,39070,39075,39089,39094,39108,39116,39120,39124,39132,39143,39154,39165,39176,39187,39198,39204,39208,39213,39226,39246,39252,39261],{"__ignoreMap":25},[45,38003,38004,38006],{"class":47,"line":48},[45,38005,30492],{"class":51},[45,38007,30495],{"class":55},[45,38009,38010,38012,38015,38017],{"class":47,"line":66},[45,38011,30837],{"class":51},[45,38013,38014],{"class":55}," sympy.core.sympify ",[45,38016,30492],{"class":51},[45,38018,38019],{"class":55}," kernS\n",[45,38021,38022,38024,38026,38028],{"class":47,"line":1331},[45,38023,30837],{"class":51},[45,38025,30840],{"class":55},[45,38027,30492],{"class":51},[45,38029,30845],{"class":55},[45,38031,38032,38034,38036,38038],{"class":47,"line":1346},[45,38033,30837],{"class":51},[45,38035,30857],{"class":55},[45,38037,30492],{"class":51},[45,38039,30862],{"class":55},[45,38041,38042],{"class":47,"line":1352},[45,38043,2550],{"emptyLinePlaceholder":207},[45,38045,38046,38048,38051,38053,38055,38057,38059],{"class":47,"line":1366},[45,38047,14843],{"class":51},[45,38049,38050],{"class":69}," VGG16",[45,38052,282],{"class":55},[45,38054,30878],{"class":69},[45,38056,835],{"class":55},[45,38058,30883],{"class":69},[45,38060,30886],{"class":55},[45,38062,38063,38065,38067],{"class":47,"line":1372},[45,38064,30901],{"class":51},[45,38066,30904],{"class":79},[45,38068,30907],{"class":55},[45,38070,38071,38073,38075,38078,38080,38082,38084,38086],{"class":47,"line":1463},[45,38072,30917],{"class":79},[45,38074,282],{"class":55},[45,38076,38077],{"class":79},"VGG16",[45,38079,12584],{"class":55},[45,38081,30923],{"class":79},[45,38083,30926],{"class":55},[45,38085,30929],{"class":79},[45,38087,2126],{"class":55},[45,38089,38090],{"class":47,"line":1469},[45,38091,38092],{"class":337},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[45,38094,38095],{"class":47,"line":1481},[45,38096,38097],{"class":337},"        # 这里用的是灰度图\n",[45,38099,38100,38102,38105,38107],{"class":47,"line":1763},[45,38101,30945],{"class":79},[45,38103,38104],{"class":55},".block1",[45,38106,59],{"class":51},[45,38108,38109],{"class":55},"nn.Sequential(\n",[45,38111,38112,38115,38117,38119,38121,38123,38125,38127,38129,38131,38133,38135,38137,38139,38141,38143,38145],{"class":47,"line":1768},[45,38113,38114],{"class":55},"            nn.Conv2d(",[45,38116,30956],{"class":5366},[45,38118,59],{"class":51},[45,38120,495],{"class":79},[45,38122,655],{"class":55},[45,38124,30965],{"class":5366},[45,38126,59],{"class":51},[45,38128,481],{"class":79},[45,38130,655],{"class":55},[45,38132,30974],{"class":5366},[45,38134,59],{"class":51},[45,38136,350],{"class":79},[45,38138,655],{"class":55},[45,38140,30983],{"class":5366},[45,38142,59],{"class":51},[45,38144,495],{"class":79},[45,38146,38147],{"class":55},"),\n",[45,38149,38150],{"class":47,"line":1774},[45,38151,38152],{"class":55},"            nn.ReLU(),\n",[45,38154,38155,38157,38159,38161,38163,38165,38167,38169,38171,38173,38175,38177,38179,38181,38183,38185,38187],{"class":47,"line":1779},[45,38156,38114],{"class":55},[45,38158,30956],{"class":5366},[45,38160,59],{"class":51},[45,38162,481],{"class":79},[45,38164,655],{"class":55},[45,38166,30965],{"class":5366},[45,38168,59],{"class":51},[45,38170,481],{"class":79},[45,38172,655],{"class":55},[45,38174,30974],{"class":5366},[45,38176,59],{"class":51},[45,38178,350],{"class":79},[45,38180,655],{"class":55},[45,38182,30983],{"class":5366},[45,38184,59],{"class":51},[45,38186,495],{"class":79},[45,38188,38147],{"class":55},[45,38190,38191],{"class":47,"line":1793},[45,38192,38152],{"class":55},[45,38194,38195,38198,38200,38202,38204,38206,38208,38210,38212,38214,38216,38218,38220],{"class":47,"line":1798},[45,38196,38197],{"class":55},"            nn.MaxPool2d(",[45,38199,30974],{"class":5366},[45,38201,59],{"class":51},[45,38203,356],{"class":79},[45,38205,655],{"class":55},[45,38207,31029],{"class":5366},[45,38209,59],{"class":51},[45,38211,356],{"class":79},[45,38213,655],{"class":55},[45,38215,30983],{"class":5366},[45,38217,59],{"class":51},[45,38219,469],{"class":79},[45,38221,139],{"class":55},[45,38223,38224],{"class":47,"line":1804},[45,38225,38226],{"class":55},"        )\n",[45,38228,38229],{"class":47,"line":1825},[45,38230,38231],{"class":337},"        # 第二层\n",[45,38233,38234,38236,38239,38241],{"class":47,"line":1830},[45,38235,30945],{"class":79},[45,38237,38238],{"class":55},".block2",[45,38240,59],{"class":51},[45,38242,38109],{"class":55},[45,38244,38245,38247,38249,38251,38253,38255,38257,38259,38261,38263,38265,38267,38269,38271,38273,38275,38277],{"class":47,"line":1844},[45,38246,38114],{"class":55},[45,38248,30956],{"class":5366},[45,38250,59],{"class":51},[45,38252,481],{"class":79},[45,38254,655],{"class":55},[45,38256,30965],{"class":5366},[45,38258,59],{"class":51},[45,38260,32170],{"class":79},[45,38262,655],{"class":55},[45,38264,30974],{"class":5366},[45,38266,59],{"class":51},[45,38268,350],{"class":79},[45,38270,655],{"class":55},[45,38272,30983],{"class":5366},[45,38274,59],{"class":51},[45,38276,495],{"class":79},[45,38278,38147],{"class":55},[45,38280,38281],{"class":47,"line":1849},[45,38282,38152],{"class":55},[45,38284,38285,38287,38289,38291,38293,38295,38297,38299,38301,38303,38305,38307,38309,38311,38313,38315,38317],{"class":47,"line":1878},[45,38286,38114],{"class":55},[45,38288,30956],{"class":5366},[45,38290,59],{"class":51},[45,38292,32170],{"class":79},[45,38294,655],{"class":55},[45,38296,30965],{"class":5366},[45,38298,59],{"class":51},[45,38300,32170],{"class":79},[45,38302,655],{"class":55},[45,38304,30974],{"class":5366},[45,38306,59],{"class":51},[45,38308,350],{"class":79},[45,38310,655],{"class":55},[45,38312,30983],{"class":5366},[45,38314,59],{"class":51},[45,38316,495],{"class":79},[45,38318,38147],{"class":55},[45,38320,38321],{"class":47,"line":1883},[45,38322,38152],{"class":55},[45,38324,38325,38327,38329,38331,38333,38335,38337,38339,38341,38343,38345,38347,38349],{"class":47,"line":1900},[45,38326,38197],{"class":55},[45,38328,30974],{"class":5366},[45,38330,59],{"class":51},[45,38332,356],{"class":79},[45,38334,655],{"class":55},[45,38336,31029],{"class":5366},[45,38338,59],{"class":51},[45,38340,356],{"class":79},[45,38342,655],{"class":55},[45,38344,30983],{"class":5366},[45,38346,59],{"class":51},[45,38348,469],{"class":79},[45,38350,139],{"class":55},[45,38352,38353],{"class":47,"line":1905},[45,38354,38226],{"class":55},[45,38356,38357],{"class":47,"line":1910},[45,38358,38359],{"class":337},"        # 第三层\n",[45,38361,38362,38364,38367,38369],{"class":47,"line":1915},[45,38363,30945],{"class":79},[45,38365,38366],{"class":55},".block3",[45,38368,59],{"class":51},[45,38370,38109],{"class":55},[45,38372,38373,38375,38377,38379,38381,38383,38385,38387,38389,38391,38393,38395,38397,38399,38401,38403,38405],{"class":47,"line":1929},[45,38374,38114],{"class":55},[45,38376,30956],{"class":5366},[45,38378,59],{"class":51},[45,38380,32170],{"class":79},[45,38382,655],{"class":55},[45,38384,30965],{"class":5366},[45,38386,59],{"class":51},[45,38388,34970],{"class":79},[45,38390,655],{"class":55},[45,38392,30974],{"class":5366},[45,38394,59],{"class":51},[45,38396,350],{"class":79},[45,38398,655],{"class":55},[45,38400,30983],{"class":5366},[45,38402,59],{"class":51},[45,38404,495],{"class":79},[45,38406,38147],{"class":55},[45,38408,38409],{"class":47,"line":1934},[45,38410,38152],{"class":55},[45,38412,38413,38415,38417,38419,38421,38423,38425,38427,38429,38431,38433,38435,38437,38439,38441,38443,38445],{"class":47,"line":2727},[45,38414,38114],{"class":55},[45,38416,30956],{"class":5366},[45,38418,59],{"class":51},[45,38420,34970],{"class":79},[45,38422,655],{"class":55},[45,38424,30965],{"class":5366},[45,38426,59],{"class":51},[45,38428,34970],{"class":79},[45,38430,655],{"class":55},[45,38432,30974],{"class":5366},[45,38434,59],{"class":51},[45,38436,350],{"class":79},[45,38438,655],{"class":55},[45,38440,30983],{"class":5366},[45,38442,59],{"class":51},[45,38444,495],{"class":79},[45,38446,38147],{"class":55},[45,38448,38449],{"class":47,"line":2741},[45,38450,38152],{"class":55},[45,38452,38453,38455,38457,38459,38461,38463,38465,38467,38469,38471,38473,38475,38477,38479,38481,38483,38485],{"class":47,"line":2749},[45,38454,38114],{"class":55},[45,38456,30956],{"class":5366},[45,38458,59],{"class":51},[45,38460,34970],{"class":79},[45,38462,655],{"class":55},[45,38464,30965],{"class":5366},[45,38466,59],{"class":51},[45,38468,34970],{"class":79},[45,38470,655],{"class":55},[45,38472,30974],{"class":5366},[45,38474,59],{"class":51},[45,38476,350],{"class":79},[45,38478,655],{"class":55},[45,38480,30983],{"class":5366},[45,38482,59],{"class":51},[45,38484,495],{"class":79},[45,38486,38147],{"class":55},[45,38488,38489],{"class":47,"line":2754},[45,38490,38152],{"class":55},[45,38492,38493,38495,38497,38499,38501,38503,38505,38507,38509,38511,38513,38515,38517],{"class":47,"line":2760},[45,38494,38197],{"class":55},[45,38496,30974],{"class":5366},[45,38498,59],{"class":51},[45,38500,356],{"class":79},[45,38502,655],{"class":55},[45,38504,31029],{"class":5366},[45,38506,59],{"class":51},[45,38508,356],{"class":79},[45,38510,655],{"class":55},[45,38512,30983],{"class":5366},[45,38514,59],{"class":51},[45,38516,469],{"class":79},[45,38518,139],{"class":55},[45,38520,38521],{"class":47,"line":2766},[45,38522,38226],{"class":55},[45,38524,38525],{"class":47,"line":2771},[45,38526,38527],{"class":337},"        # 第四层\n",[45,38529,38530,38532,38535,38537],{"class":47,"line":8098},[45,38531,30945],{"class":79},[45,38533,38534],{"class":55},".block4",[45,38536,59],{"class":51},[45,38538,38109],{"class":55},[45,38540,38541,38543,38545,38547,38549,38551,38553,38555,38558,38560,38562,38564,38566,38568,38570,38572,38574],{"class":47,"line":8122},[45,38542,38114],{"class":55},[45,38544,30956],{"class":5366},[45,38546,59],{"class":51},[45,38548,34970],{"class":79},[45,38550,655],{"class":55},[45,38552,30965],{"class":5366},[45,38554,59],{"class":51},[45,38556,38557],{"class":79},"512",[45,38559,655],{"class":55},[45,38561,30974],{"class":5366},[45,38563,59],{"class":51},[45,38565,350],{"class":79},[45,38567,655],{"class":55},[45,38569,30983],{"class":5366},[45,38571,59],{"class":51},[45,38573,495],{"class":79},[45,38575,38147],{"class":55},[45,38577,38578],{"class":47,"line":8127},[45,38579,38152],{"class":55},[45,38581,38582,38584,38586,38588,38590,38592,38594,38596,38598,38600,38602,38604,38606,38608,38610,38612,38614],{"class":47,"line":8133},[45,38583,38114],{"class":55},[45,38585,30956],{"class":5366},[45,38587,59],{"class":51},[45,38589,38557],{"class":79},[45,38591,655],{"class":55},[45,38593,30965],{"class":5366},[45,38595,59],{"class":51},[45,38597,38557],{"class":79},[45,38599,655],{"class":55},[45,38601,30974],{"class":5366},[45,38603,59],{"class":51},[45,38605,350],{"class":79},[45,38607,655],{"class":55},[45,38609,30983],{"class":5366},[45,38611,59],{"class":51},[45,38613,495],{"class":79},[45,38615,38147],{"class":55},[45,38617,38618],{"class":47,"line":8160},[45,38619,38152],{"class":55},[45,38621,38622,38624,38626,38628,38630,38632,38634,38636,38638,38640,38642,38644,38646,38648,38650,38652,38654],{"class":47,"line":8165},[45,38623,38114],{"class":55},[45,38625,30956],{"class":5366},[45,38627,59],{"class":51},[45,38629,38557],{"class":79},[45,38631,655],{"class":55},[45,38633,30965],{"class":5366},[45,38635,59],{"class":51},[45,38637,38557],{"class":79},[45,38639,655],{"class":55},[45,38641,30974],{"class":5366},[45,38643,59],{"class":51},[45,38645,350],{"class":79},[45,38647,655],{"class":55},[45,38649,30983],{"class":5366},[45,38651,59],{"class":51},[45,38653,495],{"class":79},[45,38655,38147],{"class":55},[45,38657,38658],{"class":47,"line":8171},[45,38659,38152],{"class":55},[45,38661,38662,38664,38666,38668,38670,38672,38674,38676,38678,38680,38682,38684,38686],{"class":47,"line":8183},[45,38663,38197],{"class":55},[45,38665,30974],{"class":5366},[45,38667,59],{"class":51},[45,38669,356],{"class":79},[45,38671,655],{"class":55},[45,38673,31029],{"class":5366},[45,38675,59],{"class":51},[45,38677,356],{"class":79},[45,38679,655],{"class":55},[45,38681,30983],{"class":5366},[45,38683,59],{"class":51},[45,38685,469],{"class":79},[45,38687,139],{"class":55},[45,38689,38690],{"class":47,"line":8195},[45,38691,38226],{"class":55},[45,38693,38694],{"class":47,"line":8207},[45,38695,38696],{"class":337},"        # 第五层\n",[45,38698,38699,38701,38704,38706],{"class":47,"line":9866},[45,38700,30945],{"class":79},[45,38702,38703],{"class":55},".block5",[45,38705,59],{"class":51},[45,38707,38109],{"class":55},[45,38709,38710,38712,38714,38716,38718,38720,38722,38724,38726,38728,38730,38732,38734,38736,38738,38740,38742],{"class":47,"line":9890},[45,38711,38114],{"class":55},[45,38713,30956],{"class":5366},[45,38715,59],{"class":51},[45,38717,38557],{"class":79},[45,38719,655],{"class":55},[45,38721,30965],{"class":5366},[45,38723,59],{"class":51},[45,38725,38557],{"class":79},[45,38727,655],{"class":55},[45,38729,30974],{"class":5366},[45,38731,59],{"class":51},[45,38733,350],{"class":79},[45,38735,655],{"class":55},[45,38737,30983],{"class":5366},[45,38739,59],{"class":51},[45,38741,495],{"class":79},[45,38743,38147],{"class":55},[45,38745,38746],{"class":47,"line":9913},[45,38747,38152],{"class":55},[45,38749,38750,38752,38754,38756,38758,38760,38762,38764,38766,38768,38770,38772,38774,38776,38778,38780,38782],{"class":47,"line":9937},[45,38751,38114],{"class":55},[45,38753,30956],{"class":5366},[45,38755,59],{"class":51},[45,38757,38557],{"class":79},[45,38759,655],{"class":55},[45,38761,30965],{"class":5366},[45,38763,59],{"class":51},[45,38765,38557],{"class":79},[45,38767,655],{"class":55},[45,38769,30974],{"class":5366},[45,38771,59],{"class":51},[45,38773,350],{"class":79},[45,38775,655],{"class":55},[45,38777,30983],{"class":5366},[45,38779,59],{"class":51},[45,38781,495],{"class":79},[45,38783,38147],{"class":55},[45,38785,38786],{"class":47,"line":9942},[45,38787,38152],{"class":55},[45,38789,38790,38792,38794,38796,38798,38800,38802,38804,38806,38808,38810,38812,38814,38816,38818,38820,38822],{"class":47,"line":9947},[45,38791,38114],{"class":55},[45,38793,30956],{"class":5366},[45,38795,59],{"class":51},[45,38797,38557],{"class":79},[45,38799,655],{"class":55},[45,38801,30965],{"class":5366},[45,38803,59],{"class":51},[45,38805,38557],{"class":79},[45,38807,655],{"class":55},[45,38809,30974],{"class":5366},[45,38811,59],{"class":51},[45,38813,350],{"class":79},[45,38815,655],{"class":55},[45,38817,30983],{"class":5366},[45,38819,59],{"class":51},[45,38821,495],{"class":79},[45,38823,38147],{"class":55},[45,38825,38826],{"class":47,"line":9952},[45,38827,38152],{"class":55},[45,38829,38830,38832,38834,38836,38838,38840,38842,38844,38846,38848,38850,38852,38854],{"class":47,"line":9961},[45,38831,38197],{"class":55},[45,38833,30974],{"class":5366},[45,38835,59],{"class":51},[45,38837,356],{"class":79},[45,38839,655],{"class":55},[45,38841,31029],{"class":5366},[45,38843,59],{"class":51},[45,38845,356],{"class":79},[45,38847,655],{"class":55},[45,38849,30983],{"class":5366},[45,38851,59],{"class":51},[45,38853,469],{"class":79},[45,38855,139],{"class":55},[45,38857,38858],{"class":47,"line":9966},[45,38859,38226],{"class":55},[45,38861,38862],{"class":47,"line":9972},[45,38863,38864],{"class":337},"        # 全连接层\n",[45,38866,38867,38869,38872,38874],{"class":47,"line":9993},[45,38868,30945],{"class":79},[45,38870,38871],{"class":55},".block6",[45,38873,59],{"class":51},[45,38875,38109],{"class":55},[45,38877,38878],{"class":47,"line":9999},[45,38879,38880],{"class":337},"            # 平展操作\n",[45,38882,38883],{"class":47,"line":10013},[45,38884,38885],{"class":337},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[45,38887,38888],{"class":47,"line":10019},[45,38889,38890],{"class":55},"            nn.Flatten(),\n",[45,38892,38893,38896,38898,38900,38902,38904,38906,38908,38910],{"class":47,"line":10046},[45,38894,38895],{"class":55},"            nn.Linear(",[45,38897,646],{"class":79},[45,38899,732],{"class":51},[45,38901,646],{"class":79},[45,38903,732],{"class":51},[45,38905,38557],{"class":79},[45,38907,655],{"class":55},[45,38909,34970],{"class":79},[45,38911,38147],{"class":55},[45,38913,38914],{"class":47,"line":10055},[45,38915,38152],{"class":55},[45,38917,38918,38920,38922,38924,38926],{"class":47,"line":10061},[45,38919,38895],{"class":55},[45,38921,34970],{"class":79},[45,38923,655],{"class":55},[45,38925,32170],{"class":79},[45,38927,38147],{"class":55},[45,38929,38930],{"class":47,"line":10069},[45,38931,38152],{"class":55},[45,38933,38934,38936,38938,38940,38942],{"class":47,"line":10074},[45,38935,38895],{"class":55},[45,38937,32170],{"class":79},[45,38939,655],{"class":55},[45,38941,723],{"class":79},[45,38943,139],{"class":55},[45,38945,38946],{"class":47,"line":16753},[45,38947,38226],{"class":55},[45,38949,38950],{"class":47,"line":16759},[45,38951,2550],{"emptyLinePlaceholder":207},[45,38953,38954],{"class":47,"line":16782},[45,38955,38956],{"class":337},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[45,38958,38959],{"class":47,"line":16788},[45,38960,38961],{"class":337},"        # 循环遍历模型\n",[45,38963,38964,38966,38969,38971,38974],{"class":47,"line":16811},[45,38965,3553],{"class":51},[45,38967,38968],{"class":55}," m ",[45,38970,26143],{"class":51},[45,38972,38973],{"class":79}," self",[45,38975,38976],{"class":55},".modules():\n",[45,38978,38979],{"class":47,"line":16825},[45,38980,38981],{"class":337},"            # print(m)\n",[45,38983,38984,38986,38989],{"class":47,"line":16845},[45,38985,4792],{"class":51},[45,38987,38988],{"class":79}," isinstance",[45,38990,38991],{"class":55},"(m,nn.Conv2d):\n",[45,38993,38994],{"class":47,"line":16851},[45,38995,38996],{"class":337},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[45,38998,38999,39002,39005,39007,39010],{"class":47,"line":16862},[45,39000,39001],{"class":55},"                nn.init.kaiming_normal_(m.weight,",[45,39003,39004],{"class":5366},"nonlinearity",[45,39006,59],{"class":51},[45,39008,39009],{"class":62},"'relu'",[45,39011,139],{"class":55},[45,39013,39014],{"class":47,"line":16885},[45,39015,39016],{"class":337},"                # 判断b参数是否存在\n",[45,39018,39019,39022,39025,39028,39031,39034],{"class":47,"line":16907},[45,39020,39021],{"class":51},"                if",[45,39023,39024],{"class":55}," m.bias ",[45,39026,39027],{"class":51},"is",[45,39029,39030],{"class":51}," not",[45,39032,39033],{"class":79}," None",[45,39035,3889],{"class":55},[45,39037,39038],{"class":47,"line":16912},[45,39039,39040],{"class":337},"                    # 如果参数不存在的化初始化b=0\n",[45,39042,39043,39046,39048],{"class":47,"line":16918},[45,39044,39045],{"class":55},"                    nn.init.constant_(m.bias,",[45,39047,469],{"class":79},[45,39049,139],{"class":55},[45,39051,39052],{"class":47,"line":16932},[45,39053,39054],{"class":337},"            # 全连接层初始化\n",[45,39056,39057,39060,39062],{"class":47,"line":16945},[45,39058,39059],{"class":51},"            elif",[45,39061,38988],{"class":79},[45,39063,39064],{"class":55},"(m,nn.Linear):\n",[45,39066,39067],{"class":47,"line":16950},[45,39068,39069],{"class":337},"                # 这个初始化方法是利用的是正太分布的方式\n",[45,39071,39072],{"class":47,"line":16964},[45,39073,39074],{"class":337},"                # 均值为0，方差为0.01\n",[45,39076,39077,39080,39082,39084,39087],{"class":47,"line":16969},[45,39078,39079],{"class":55},"                nn.init.normal_(m.weight,",[45,39081,469],{"class":79},[45,39083,655],{"class":55},[45,39085,39086],{"class":79},"0.01",[45,39088,139],{"class":55},[45,39090,39091],{"class":47,"line":16975},[45,39092,39093],{"class":337},"                # 初始化b参数\n",[45,39095,39096,39098,39100,39102,39104,39106],{"class":47,"line":16980},[45,39097,39021],{"class":51},[45,39099,39024],{"class":55},[45,39101,39027],{"class":51},[45,39103,39030],{"class":51},[45,39105,39033],{"class":79},[45,39107,3889],{"class":55},[45,39109,39110,39112,39114],{"class":47,"line":16994},[45,39111,39045],{"class":55},[45,39113,469],{"class":79},[45,39115,139],{"class":55},[45,39117,39118],{"class":47,"line":16999},[45,39119,2550],{"emptyLinePlaceholder":207},[45,39121,39122],{"class":47,"line":17004},[45,39123,35265],{"class":337},[45,39125,39126,39128,39130],{"class":47,"line":17018},[45,39127,30901],{"class":51},[45,39129,31193],{"class":69},[45,39131,31196],{"class":55},[45,39133,39134,39136,39138,39140],{"class":47,"line":17030},[45,39135,31201],{"class":55},[45,39137,59],{"class":51},[45,39139,30923],{"class":79},[45,39141,39142],{"class":55},".block1(x)\n",[45,39144,39145,39147,39149,39151],{"class":47,"line":17035},[45,39146,31201],{"class":55},[45,39148,59],{"class":51},[45,39150,30923],{"class":79},[45,39152,39153],{"class":55},".block2(x)\n",[45,39155,39156,39158,39160,39162],{"class":47,"line":17048},[45,39157,31201],{"class":55},[45,39159,59],{"class":51},[45,39161,30923],{"class":79},[45,39163,39164],{"class":55},".block3(x)\n",[45,39166,39167,39169,39171,39173],{"class":47,"line":17053},[45,39168,31201],{"class":55},[45,39170,59],{"class":51},[45,39172,30923],{"class":79},[45,39174,39175],{"class":55},".block4(x)\n",[45,39177,39178,39180,39182,39184],{"class":47,"line":17058},[45,39179,31201],{"class":55},[45,39181,59],{"class":51},[45,39183,30923],{"class":79},[45,39185,39186],{"class":55},".block5(x)\n",[45,39188,39189,39191,39193,39195],{"class":47,"line":17063},[45,39190,31201],{"class":55},[45,39192,59],{"class":51},[45,39194,30923],{"class":79},[45,39196,39197],{"class":55},".block6(x)\n",[45,39199,39200,39202],{"class":47,"line":17076},[45,39201,14901],{"class":51},[45,39203,31309],{"class":55},[45,39205,39206],{"class":47,"line":17081},[45,39207,2550],{"emptyLinePlaceholder":207},[45,39209,39210],{"class":47,"line":32733},[45,39211,39212],{"class":337},"# 验证模型\n",[45,39214,39215,39217,39219,39221,39224],{"class":47,"line":32739},[45,39216,1682],{"class":51},[45,39218,31320],{"class":79},[45,39220,3099],{"class":51},[45,39222,39223],{"class":62},"'__main__'",[45,39225,3889],{"class":55},[45,39227,39228,39230,39232,39234,39236,39238,39240,39242,39244],{"class":47,"line":32745},[45,39229,31337],{"class":55},[45,39231,59],{"class":51},[45,39233,30551],{"class":55},[45,39235,31344],{"class":62},[45,39237,1855],{"class":51},[45,39239,31349],{"class":55},[45,39241,1852],{"class":51},[45,39243,30576],{"class":62},[45,39245,139],{"class":55},[45,39247,39248,39250],{"class":47,"line":32751},[45,39249,31399],{"class":79},[45,39251,30585],{"class":55},[45,39253,39254,39256,39258],{"class":47,"line":32757},[45,39255,31389],{"class":55},[45,39257,59],{"class":51},[45,39259,39260],{"class":55},"VGG16().to(device)\n",[45,39262,39263,39265,39267,39269,39271,39273,39275,39277],{"class":47,"line":32768},[45,39264,31399],{"class":79},[45,39266,31402],{"class":55},[45,39268,495],{"class":79},[45,39270,655],{"class":55},[45,39272,31601],{"class":79},[45,39274,655],{"class":55},[45,39276,31601],{"class":79},[45,39278,31415],{"class":55},[233,39280,39281],{"start":66},[169,39282,39283],{},"训练代码",[20,39285,39286],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[20,39288,39289],{},"解决方式:",[20,39291,39292],{},"①权重初始化",[36,39294,39296],{"className":30478,"code":39295,"language":30480,"meta":25,"style":25},"# 权重初始化,保证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",[42,39297,39298,39303,39308,39320,39325,39333,39338,39351,39356,39370,39375,39384,39389,39398,39403,39408,39421,39426,39440],{"__ignoreMap":25},[45,39299,39300],{"class":47,"line":48},[45,39301,39302],{"class":337},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[45,39304,39305],{"class":47,"line":66},[45,39306,39307],{"class":337},"# 循环遍历模型\n",[45,39309,39310,39312,39314,39316,39318],{"class":47,"line":1331},[45,39311,3175],{"class":51},[45,39313,38968],{"class":55},[45,39315,26143],{"class":51},[45,39317,38973],{"class":79},[45,39319,38976],{"class":55},[45,39321,39322],{"class":47,"line":1346},[45,39323,39324],{"class":337},"    # print(m)\n",[45,39326,39327,39329,39331],{"class":47,"line":1352},[45,39328,3251],{"class":51},[45,39330,38988],{"class":79},[45,39332,38991],{"class":55},[45,39334,39335],{"class":47,"line":1366},[45,39336,39337],{"class":337},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[45,39339,39340,39343,39345,39347,39349],{"class":47,"line":1372},[45,39341,39342],{"class":55},"        nn.init.kaiming_normal_(m.weight,",[45,39344,39004],{"class":5366},[45,39346,59],{"class":51},[45,39348,39009],{"class":62},[45,39350,139],{"class":55},[45,39352,39353],{"class":47,"line":1463},[45,39354,39355],{"class":337},"        # 判断b参数是否存在\n",[45,39357,39358,39360,39362,39364,39366,39368],{"class":47,"line":1469},[45,39359,2647],{"class":51},[45,39361,39024],{"class":55},[45,39363,39027],{"class":51},[45,39365,39030],{"class":51},[45,39367,39033],{"class":79},[45,39369,3889],{"class":55},[45,39371,39372],{"class":47,"line":1481},[45,39373,39374],{"class":337},"            # 如果参数不存在的化初始化b=0\n",[45,39376,39377,39380,39382],{"class":47,"line":1763},[45,39378,39379],{"class":55},"            nn.init.constant_(m.bias,",[45,39381,469],{"class":79},[45,39383,139],{"class":55},[45,39385,39386],{"class":47,"line":1768},[45,39387,39388],{"class":337},"    # 全连接层初始化\n",[45,39390,39391,39394,39396],{"class":47,"line":1774},[45,39392,39393],{"class":51},"    elif",[45,39395,38988],{"class":79},[45,39397,39064],{"class":55},[45,39399,39400],{"class":47,"line":1779},[45,39401,39402],{"class":337},"        # 这个初始化方法是利用的是正太分布的方式\n",[45,39404,39405],{"class":47,"line":1793},[45,39406,39407],{"class":337},"        # 均值为0，方差为0.01\n",[45,39409,39410,39413,39415,39417,39419],{"class":47,"line":1798},[45,39411,39412],{"class":55},"        nn.init.normal_(m.weight,",[45,39414,469],{"class":79},[45,39416,655],{"class":55},[45,39418,39086],{"class":79},[45,39420,139],{"class":55},[45,39422,39423],{"class":47,"line":1804},[45,39424,39425],{"class":337},"        # 初始化b参数\n",[45,39427,39428,39430,39432,39434,39436,39438],{"class":47,"line":1825},[45,39429,2647],{"class":51},[45,39431,39024],{"class":55},[45,39433,39027],{"class":51},[45,39435,39030],{"class":51},[45,39437,39033],{"class":79},[45,39439,3889],{"class":55},[45,39441,39442,39444,39446],{"class":47,"line":1830},[45,39443,39379],{"class":55},[45,39445,469],{"class":79},[45,39447,139],{"class":55},[20,39449,39450],{},"②尽可能地增加批次",[20,39452,39453],{},"训练完整代码：",[36,39455,39456],{"className":30478,"code":37999,"language":30480,"meta":25,"style":25},[42,39457,39458,39464,39474,39484,39494,39498,39514,39522,39540,39544,39548,39558,39594,39598,39634,39638,39666,39670,39674,39684,39720,39724,39760,39764,39792,39796,39800,39810,39846,39850,39886,39890,39926,39930,39958,39962,39966,39976,40012,40016,40052,40056,40092,40096,40124,40128,40132,40142,40178,40182,40218,40222,40258,40262,40290,40294,40298,40308,40312,40316,40320,40340,40344,40356,40360,40372,40376,40380,40384,40388,40400,40404,40412,40416,40428,40432,40446,40450,40458,40462,40470,40474,40478,40490,40494,40508,40516,40520,40524,40532,40542,40552,40562,40572,40582,40592,40598,40602,40606,40618,40638,40644,40652],{"__ignoreMap":25},[45,39459,39460,39462],{"class":47,"line":48},[45,39461,30492],{"class":51},[45,39463,30495],{"class":55},[45,39465,39466,39468,39470,39472],{"class":47,"line":66},[45,39467,30837],{"class":51},[45,39469,38014],{"class":55},[45,39471,30492],{"class":51},[45,39473,38019],{"class":55},[45,39475,39476,39478,39480,39482],{"class":47,"line":1331},[45,39477,30837],{"class":51},[45,39479,30840],{"class":55},[45,39481,30492],{"class":51},[45,39483,30845],{"class":55},[45,39485,39486,39488,39490,39492],{"class":47,"line":1346},[45,39487,30837],{"class":51},[45,39489,30857],{"class":55},[45,39491,30492],{"class":51},[45,39493,30862],{"class":55},[45,39495,39496],{"class":47,"line":1352},[45,39497,2550],{"emptyLinePlaceholder":207},[45,39499,39500,39502,39504,39506,39508,39510,39512],{"class":47,"line":1366},[45,39501,14843],{"class":51},[45,39503,38050],{"class":69},[45,39505,282],{"class":55},[45,39507,30878],{"class":69},[45,39509,835],{"class":55},[45,39511,30883],{"class":69},[45,39513,30886],{"class":55},[45,39515,39516,39518,39520],{"class":47,"line":1372},[45,39517,30901],{"class":51},[45,39519,30904],{"class":79},[45,39521,30907],{"class":55},[45,39523,39524,39526,39528,39530,39532,39534,39536,39538],{"class":47,"line":1463},[45,39525,30917],{"class":79},[45,39527,282],{"class":55},[45,39529,38077],{"class":79},[45,39531,12584],{"class":55},[45,39533,30923],{"class":79},[45,39535,30926],{"class":55},[45,39537,30929],{"class":79},[45,39539,2126],{"class":55},[45,39541,39542],{"class":47,"line":1469},[45,39543,38092],{"class":337},[45,39545,39546],{"class":47,"line":1481},[45,39547,38097],{"class":337},[45,39549,39550,39552,39554,39556],{"class":47,"line":1763},[45,39551,30945],{"class":79},[45,39553,38104],{"class":55},[45,39555,59],{"class":51},[45,39557,38109],{"class":55},[45,39559,39560,39562,39564,39566,39568,39570,39572,39574,39576,39578,39580,39582,39584,39586,39588,39590,39592],{"class":47,"line":1768},[45,39561,38114],{"class":55},[45,39563,30956],{"class":5366},[45,39565,59],{"class":51},[45,39567,495],{"class":79},[45,39569,655],{"class":55},[45,39571,30965],{"class":5366},[45,39573,59],{"class":51},[45,39575,481],{"class":79},[45,39577,655],{"class":55},[45,39579,30974],{"class":5366},[45,39581,59],{"class":51},[45,39583,350],{"class":79},[45,39585,655],{"class":55},[45,39587,30983],{"class":5366},[45,39589,59],{"class":51},[45,39591,495],{"class":79},[45,39593,38147],{"class":55},[45,39595,39596],{"class":47,"line":1774},[45,39597,38152],{"class":55},[45,39599,39600,39602,39604,39606,39608,39610,39612,39614,39616,39618,39620,39622,39624,39626,39628,39630,39632],{"class":47,"line":1779},[45,39601,38114],{"class":55},[45,39603,30956],{"class":5366},[45,39605,59],{"class":51},[45,39607,481],{"class":79},[45,39609,655],{"class":55},[45,39611,30965],{"class":5366},[45,39613,59],{"class":51},[45,39615,481],{"class":79},[45,39617,655],{"class":55},[45,39619,30974],{"class":5366},[45,39621,59],{"class":51},[45,39623,350],{"class":79},[45,39625,655],{"class":55},[45,39627,30983],{"class":5366},[45,39629,59],{"class":51},[45,39631,495],{"class":79},[45,39633,38147],{"class":55},[45,39635,39636],{"class":47,"line":1793},[45,39637,38152],{"class":55},[45,39639,39640,39642,39644,39646,39648,39650,39652,39654,39656,39658,39660,39662,39664],{"class":47,"line":1798},[45,39641,38197],{"class":55},[45,39643,30974],{"class":5366},[45,39645,59],{"class":51},[45,39647,356],{"class":79},[45,39649,655],{"class":55},[45,39651,31029],{"class":5366},[45,39653,59],{"class":51},[45,39655,356],{"class":79},[45,39657,655],{"class":55},[45,39659,30983],{"class":5366},[45,39661,59],{"class":51},[45,39663,469],{"class":79},[45,39665,139],{"class":55},[45,39667,39668],{"class":47,"line":1804},[45,39669,38226],{"class":55},[45,39671,39672],{"class":47,"line":1825},[45,39673,38231],{"class":337},[45,39675,39676,39678,39680,39682],{"class":47,"line":1830},[45,39677,30945],{"class":79},[45,39679,38238],{"class":55},[45,39681,59],{"class":51},[45,39683,38109],{"class":55},[45,39685,39686,39688,39690,39692,39694,39696,39698,39700,39702,39704,39706,39708,39710,39712,39714,39716,39718],{"class":47,"line":1844},[45,39687,38114],{"class":55},[45,39689,30956],{"class":5366},[45,39691,59],{"class":51},[45,39693,481],{"class":79},[45,39695,655],{"class":55},[45,39697,30965],{"class":5366},[45,39699,59],{"class":51},[45,39701,32170],{"class":79},[45,39703,655],{"class":55},[45,39705,30974],{"class":5366},[45,39707,59],{"class":51},[45,39709,350],{"class":79},[45,39711,655],{"class":55},[45,39713,30983],{"class":5366},[45,39715,59],{"class":51},[45,39717,495],{"class":79},[45,39719,38147],{"class":55},[45,39721,39722],{"class":47,"line":1849},[45,39723,38152],{"class":55},[45,39725,39726,39728,39730,39732,39734,39736,39738,39740,39742,39744,39746,39748,39750,39752,39754,39756,39758],{"class":47,"line":1878},[45,39727,38114],{"class":55},[45,39729,30956],{"class":5366},[45,39731,59],{"class":51},[45,39733,32170],{"class":79},[45,39735,655],{"class":55},[45,39737,30965],{"class":5366},[45,39739,59],{"class":51},[45,39741,32170],{"class":79},[45,39743,655],{"class":55},[45,39745,30974],{"class":5366},[45,39747,59],{"class":51},[45,39749,350],{"class":79},[45,39751,655],{"class":55},[45,39753,30983],{"class":5366},[45,39755,59],{"class":51},[45,39757,495],{"class":79},[45,39759,38147],{"class":55},[45,39761,39762],{"class":47,"line":1883},[45,39763,38152],{"class":55},[45,39765,39766,39768,39770,39772,39774,39776,39778,39780,39782,39784,39786,39788,39790],{"class":47,"line":1900},[45,39767,38197],{"class":55},[45,39769,30974],{"class":5366},[45,39771,59],{"class":51},[45,39773,356],{"class":79},[45,39775,655],{"class":55},[45,39777,31029],{"class":5366},[45,39779,59],{"class":51},[45,39781,356],{"class":79},[45,39783,655],{"class":55},[45,39785,30983],{"class":5366},[45,39787,59],{"class":51},[45,39789,469],{"class":79},[45,39791,139],{"class":55},[45,39793,39794],{"class":47,"line":1905},[45,39795,38226],{"class":55},[45,39797,39798],{"class":47,"line":1910},[45,39799,38359],{"class":337},[45,39801,39802,39804,39806,39808],{"class":47,"line":1915},[45,39803,30945],{"class":79},[45,39805,38366],{"class":55},[45,39807,59],{"class":51},[45,39809,38109],{"class":55},[45,39811,39812,39814,39816,39818,39820,39822,39824,39826,39828,39830,39832,39834,39836,39838,39840,39842,39844],{"class":47,"line":1929},[45,39813,38114],{"class":55},[45,39815,30956],{"class":5366},[45,39817,59],{"class":51},[45,39819,32170],{"class":79},[45,39821,655],{"class":55},[45,39823,30965],{"class":5366},[45,39825,59],{"class":51},[45,39827,34970],{"class":79},[45,39829,655],{"class":55},[45,39831,30974],{"class":5366},[45,39833,59],{"class":51},[45,39835,350],{"class":79},[45,39837,655],{"class":55},[45,39839,30983],{"class":5366},[45,39841,59],{"class":51},[45,39843,495],{"class":79},[45,39845,38147],{"class":55},[45,39847,39848],{"class":47,"line":1934},[45,39849,38152],{"class":55},[45,39851,39852,39854,39856,39858,39860,39862,39864,39866,39868,39870,39872,39874,39876,39878,39880,39882,39884],{"class":47,"line":2727},[45,39853,38114],{"class":55},[45,39855,30956],{"class":5366},[45,39857,59],{"class":51},[45,39859,34970],{"class":79},[45,39861,655],{"class":55},[45,39863,30965],{"class":5366},[45,39865,59],{"class":51},[45,39867,34970],{"class":79},[45,39869,655],{"class":55},[45,39871,30974],{"class":5366},[45,39873,59],{"class":51},[45,39875,350],{"class":79},[45,39877,655],{"class":55},[45,39879,30983],{"class":5366},[45,39881,59],{"class":51},[45,39883,495],{"class":79},[45,39885,38147],{"class":55},[45,39887,39888],{"class":47,"line":2741},[45,39889,38152],{"class":55},[45,39891,39892,39894,39896,39898,39900,39902,39904,39906,39908,39910,39912,39914,39916,39918,39920,39922,39924],{"class":47,"line":2749},[45,39893,38114],{"class":55},[45,39895,30956],{"class":5366},[45,39897,59],{"class":51},[45,39899,34970],{"class":79},[45,39901,655],{"class":55},[45,39903,30965],{"class":5366},[45,39905,59],{"class":51},[45,39907,34970],{"class":79},[45,39909,655],{"class":55},[45,39911,30974],{"class":5366},[45,39913,59],{"class":51},[45,39915,350],{"class":79},[45,39917,655],{"class":55},[45,39919,30983],{"class":5366},[45,39921,59],{"class":51},[45,39923,495],{"class":79},[45,39925,38147],{"class":55},[45,39927,39928],{"class":47,"line":2754},[45,39929,38152],{"class":55},[45,39931,39932,39934,39936,39938,39940,39942,39944,39946,39948,39950,39952,39954,39956],{"class":47,"line":2760},[45,39933,38197],{"class":55},[45,39935,30974],{"class":5366},[45,39937,59],{"class":51},[45,39939,356],{"class":79},[45,39941,655],{"class":55},[45,39943,31029],{"class":5366},[45,39945,59],{"class":51},[45,39947,356],{"class":79},[45,39949,655],{"class":55},[45,39951,30983],{"class":5366},[45,39953,59],{"class":51},[45,39955,469],{"class":79},[45,39957,139],{"class":55},[45,39959,39960],{"class":47,"line":2766},[45,39961,38226],{"class":55},[45,39963,39964],{"class":47,"line":2771},[45,39965,38527],{"class":337},[45,39967,39968,39970,39972,39974],{"class":47,"line":8098},[45,39969,30945],{"class":79},[45,39971,38534],{"class":55},[45,39973,59],{"class":51},[45,39975,38109],{"class":55},[45,39977,39978,39980,39982,39984,39986,39988,39990,39992,39994,39996,39998,40000,40002,40004,40006,40008,40010],{"class":47,"line":8122},[45,39979,38114],{"class":55},[45,39981,30956],{"class":5366},[45,39983,59],{"class":51},[45,39985,34970],{"class":79},[45,39987,655],{"class":55},[45,39989,30965],{"class":5366},[45,39991,59],{"class":51},[45,39993,38557],{"class":79},[45,39995,655],{"class":55},[45,39997,30974],{"class":5366},[45,39999,59],{"class":51},[45,40001,350],{"class":79},[45,40003,655],{"class":55},[45,40005,30983],{"class":5366},[45,40007,59],{"class":51},[45,40009,495],{"class":79},[45,40011,38147],{"class":55},[45,40013,40014],{"class":47,"line":8127},[45,40015,38152],{"class":55},[45,40017,40018,40020,40022,40024,40026,40028,40030,40032,40034,40036,40038,40040,40042,40044,40046,40048,40050],{"class":47,"line":8133},[45,40019,38114],{"class":55},[45,40021,30956],{"class":5366},[45,40023,59],{"class":51},[45,40025,38557],{"class":79},[45,40027,655],{"class":55},[45,40029,30965],{"class":5366},[45,40031,59],{"class":51},[45,40033,38557],{"class":79},[45,40035,655],{"class":55},[45,40037,30974],{"class":5366},[45,40039,59],{"class":51},[45,40041,350],{"class":79},[45,40043,655],{"class":55},[45,40045,30983],{"class":5366},[45,40047,59],{"class":51},[45,40049,495],{"class":79},[45,40051,38147],{"class":55},[45,40053,40054],{"class":47,"line":8160},[45,40055,38152],{"class":55},[45,40057,40058,40060,40062,40064,40066,40068,40070,40072,40074,40076,40078,40080,40082,40084,40086,40088,40090],{"class":47,"line":8165},[45,40059,38114],{"class":55},[45,40061,30956],{"class":5366},[45,40063,59],{"class":51},[45,40065,38557],{"class":79},[45,40067,655],{"class":55},[45,40069,30965],{"class":5366},[45,40071,59],{"class":51},[45,40073,38557],{"class":79},[45,40075,655],{"class":55},[45,40077,30974],{"class":5366},[45,40079,59],{"class":51},[45,40081,350],{"class":79},[45,40083,655],{"class":55},[45,40085,30983],{"class":5366},[45,40087,59],{"class":51},[45,40089,495],{"class":79},[45,40091,38147],{"class":55},[45,40093,40094],{"class":47,"line":8171},[45,40095,38152],{"class":55},[45,40097,40098,40100,40102,40104,40106,40108,40110,40112,40114,40116,40118,40120,40122],{"class":47,"line":8183},[45,40099,38197],{"class":55},[45,40101,30974],{"class":5366},[45,40103,59],{"class":51},[45,40105,356],{"class":79},[45,40107,655],{"class":55},[45,40109,31029],{"class":5366},[45,40111,59],{"class":51},[45,40113,356],{"class":79},[45,40115,655],{"class":55},[45,40117,30983],{"class":5366},[45,40119,59],{"class":51},[45,40121,469],{"class":79},[45,40123,139],{"class":55},[45,40125,40126],{"class":47,"line":8195},[45,40127,38226],{"class":55},[45,40129,40130],{"class":47,"line":8207},[45,40131,38696],{"class":337},[45,40133,40134,40136,40138,40140],{"class":47,"line":9866},[45,40135,30945],{"class":79},[45,40137,38703],{"class":55},[45,40139,59],{"class":51},[45,40141,38109],{"class":55},[45,40143,40144,40146,40148,40150,40152,40154,40156,40158,40160,40162,40164,40166,40168,40170,40172,40174,40176],{"class":47,"line":9890},[45,40145,38114],{"class":55},[45,40147,30956],{"class":5366},[45,40149,59],{"class":51},[45,40151,38557],{"class":79},[45,40153,655],{"class":55},[45,40155,30965],{"class":5366},[45,40157,59],{"class":51},[45,40159,38557],{"class":79},[45,40161,655],{"class":55},[45,40163,30974],{"class":5366},[45,40165,59],{"class":51},[45,40167,350],{"class":79},[45,40169,655],{"class":55},[45,40171,30983],{"class":5366},[45,40173,59],{"class":51},[45,40175,495],{"class":79},[45,40177,38147],{"class":55},[45,40179,40180],{"class":47,"line":9913},[45,40181,38152],{"class":55},[45,40183,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208,40210,40212,40214,40216],{"class":47,"line":9937},[45,40185,38114],{"class":55},[45,40187,30956],{"class":5366},[45,40189,59],{"class":51},[45,40191,38557],{"class":79},[45,40193,655],{"class":55},[45,40195,30965],{"class":5366},[45,40197,59],{"class":51},[45,40199,38557],{"class":79},[45,40201,655],{"class":55},[45,40203,30974],{"class":5366},[45,40205,59],{"class":51},[45,40207,350],{"class":79},[45,40209,655],{"class":55},[45,40211,30983],{"class":5366},[45,40213,59],{"class":51},[45,40215,495],{"class":79},[45,40217,38147],{"class":55},[45,40219,40220],{"class":47,"line":9942},[45,40221,38152],{"class":55},[45,40223,40224,40226,40228,40230,40232,40234,40236,40238,40240,40242,40244,40246,40248,40250,40252,40254,40256],{"class":47,"line":9947},[45,40225,38114],{"class":55},[45,40227,30956],{"class":5366},[45,40229,59],{"class":51},[45,40231,38557],{"class":79},[45,40233,655],{"class":55},[45,40235,30965],{"class":5366},[45,40237,59],{"class":51},[45,40239,38557],{"class":79},[45,40241,655],{"class":55},[45,40243,30974],{"class":5366},[45,40245,59],{"class":51},[45,40247,350],{"class":79},[45,40249,655],{"class":55},[45,40251,30983],{"class":5366},[45,40253,59],{"class":51},[45,40255,495],{"class":79},[45,40257,38147],{"class":55},[45,40259,40260],{"class":47,"line":9952},[45,40261,38152],{"class":55},[45,40263,40264,40266,40268,40270,40272,40274,40276,40278,40280,40282,40284,40286,40288],{"class":47,"line":9961},[45,40265,38197],{"class":55},[45,40267,30974],{"class":5366},[45,40269,59],{"class":51},[45,40271,356],{"class":79},[45,40273,655],{"class":55},[45,40275,31029],{"class":5366},[45,40277,59],{"class":51},[45,40279,356],{"class":79},[45,40281,655],{"class":55},[45,40283,30983],{"class":5366},[45,40285,59],{"class":51},[45,40287,469],{"class":79},[45,40289,139],{"class":55},[45,40291,40292],{"class":47,"line":9966},[45,40293,38226],{"class":55},[45,40295,40296],{"class":47,"line":9972},[45,40297,38864],{"class":337},[45,40299,40300,40302,40304,40306],{"class":47,"line":9993},[45,40301,30945],{"class":79},[45,40303,38871],{"class":55},[45,40305,59],{"class":51},[45,40307,38109],{"class":55},[45,40309,40310],{"class":47,"line":9999},[45,40311,38880],{"class":337},[45,40313,40314],{"class":47,"line":10013},[45,40315,38885],{"class":337},[45,40317,40318],{"class":47,"line":10019},[45,40319,38890],{"class":55},[45,40321,40322,40324,40326,40328,40330,40332,40334,40336,40338],{"class":47,"line":10046},[45,40323,38895],{"class":55},[45,40325,646],{"class":79},[45,40327,732],{"class":51},[45,40329,646],{"class":79},[45,40331,732],{"class":51},[45,40333,38557],{"class":79},[45,40335,655],{"class":55},[45,40337,34970],{"class":79},[45,40339,38147],{"class":55},[45,40341,40342],{"class":47,"line":10055},[45,40343,38152],{"class":55},[45,40345,40346,40348,40350,40352,40354],{"class":47,"line":10061},[45,40347,38895],{"class":55},[45,40349,34970],{"class":79},[45,40351,655],{"class":55},[45,40353,32170],{"class":79},[45,40355,38147],{"class":55},[45,40357,40358],{"class":47,"line":10069},[45,40359,38152],{"class":55},[45,40361,40362,40364,40366,40368,40370],{"class":47,"line":10074},[45,40363,38895],{"class":55},[45,40365,32170],{"class":79},[45,40367,655],{"class":55},[45,40369,723],{"class":79},[45,40371,139],{"class":55},[45,40373,40374],{"class":47,"line":16753},[45,40375,38226],{"class":55},[45,40377,40378],{"class":47,"line":16759},[45,40379,2550],{"emptyLinePlaceholder":207},[45,40381,40382],{"class":47,"line":16782},[45,40383,38956],{"class":337},[45,40385,40386],{"class":47,"line":16788},[45,40387,38961],{"class":337},[45,40389,40390,40392,40394,40396,40398],{"class":47,"line":16811},[45,40391,3553],{"class":51},[45,40393,38968],{"class":55},[45,40395,26143],{"class":51},[45,40397,38973],{"class":79},[45,40399,38976],{"class":55},[45,40401,40402],{"class":47,"line":16825},[45,40403,38981],{"class":337},[45,40405,40406,40408,40410],{"class":47,"line":16845},[45,40407,4792],{"class":51},[45,40409,38988],{"class":79},[45,40411,38991],{"class":55},[45,40413,40414],{"class":47,"line":16851},[45,40415,38996],{"class":337},[45,40417,40418,40420,40422,40424,40426],{"class":47,"line":16862},[45,40419,39001],{"class":55},[45,40421,39004],{"class":5366},[45,40423,59],{"class":51},[45,40425,39009],{"class":62},[45,40427,139],{"class":55},[45,40429,40430],{"class":47,"line":16885},[45,40431,39016],{"class":337},[45,40433,40434,40436,40438,40440,40442,40444],{"class":47,"line":16907},[45,40435,39021],{"class":51},[45,40437,39024],{"class":55},[45,40439,39027],{"class":51},[45,40441,39030],{"class":51},[45,40443,39033],{"class":79},[45,40445,3889],{"class":55},[45,40447,40448],{"class":47,"line":16912},[45,40449,39040],{"class":337},[45,40451,40452,40454,40456],{"class":47,"line":16918},[45,40453,39045],{"class":55},[45,40455,469],{"class":79},[45,40457,139],{"class":55},[45,40459,40460],{"class":47,"line":16932},[45,40461,39054],{"class":337},[45,40463,40464,40466,40468],{"class":47,"line":16945},[45,40465,39059],{"class":51},[45,40467,38988],{"class":79},[45,40469,39064],{"class":55},[45,40471,40472],{"class":47,"line":16950},[45,40473,39069],{"class":337},[45,40475,40476],{"class":47,"line":16964},[45,40477,39074],{"class":337},[45,40479,40480,40482,40484,40486,40488],{"class":47,"line":16969},[45,40481,39079],{"class":55},[45,40483,469],{"class":79},[45,40485,655],{"class":55},[45,40487,39086],{"class":79},[45,40489,139],{"class":55},[45,40491,40492],{"class":47,"line":16975},[45,40493,39093],{"class":337},[45,40495,40496,40498,40500,40502,40504,40506],{"class":47,"line":16980},[45,40497,39021],{"class":51},[45,40499,39024],{"class":55},[45,40501,39027],{"class":51},[45,40503,39030],{"class":51},[45,40505,39033],{"class":79},[45,40507,3889],{"class":55},[45,40509,40510,40512,40514],{"class":47,"line":16994},[45,40511,39045],{"class":55},[45,40513,469],{"class":79},[45,40515,139],{"class":55},[45,40517,40518],{"class":47,"line":16999},[45,40519,2550],{"emptyLinePlaceholder":207},[45,40521,40522],{"class":47,"line":17004},[45,40523,35265],{"class":337},[45,40525,40526,40528,40530],{"class":47,"line":17018},[45,40527,30901],{"class":51},[45,40529,31193],{"class":69},[45,40531,31196],{"class":55},[45,40533,40534,40536,40538,40540],{"class":47,"line":17030},[45,40535,31201],{"class":55},[45,40537,59],{"class":51},[45,40539,30923],{"class":79},[45,40541,39142],{"class":55},[45,40543,40544,40546,40548,40550],{"class":47,"line":17035},[45,40545,31201],{"class":55},[45,40547,59],{"class":51},[45,40549,30923],{"class":79},[45,40551,39153],{"class":55},[45,40553,40554,40556,40558,40560],{"class":47,"line":17048},[45,40555,31201],{"class":55},[45,40557,59],{"class":51},[45,40559,30923],{"class":79},[45,40561,39164],{"class":55},[45,40563,40564,40566,40568,40570],{"class":47,"line":17053},[45,40565,31201],{"class":55},[45,40567,59],{"class":51},[45,40569,30923],{"class":79},[45,40571,39175],{"class":55},[45,40573,40574,40576,40578,40580],{"class":47,"line":17058},[45,40575,31201],{"class":55},[45,40577,59],{"class":51},[45,40579,30923],{"class":79},[45,40581,39186],{"class":55},[45,40583,40584,40586,40588,40590],{"class":47,"line":17063},[45,40585,31201],{"class":55},[45,40587,59],{"class":51},[45,40589,30923],{"class":79},[45,40591,39197],{"class":55},[45,40593,40594,40596],{"class":47,"line":17076},[45,40595,14901],{"class":51},[45,40597,31309],{"class":55},[45,40599,40600],{"class":47,"line":17081},[45,40601,2550],{"emptyLinePlaceholder":207},[45,40603,40604],{"class":47,"line":32733},[45,40605,39212],{"class":337},[45,40607,40608,40610,40612,40614,40616],{"class":47,"line":32739},[45,40609,1682],{"class":51},[45,40611,31320],{"class":79},[45,40613,3099],{"class":51},[45,40615,39223],{"class":62},[45,40617,3889],{"class":55},[45,40619,40620,40622,40624,40626,40628,40630,40632,40634,40636],{"class":47,"line":32745},[45,40621,31337],{"class":55},[45,40623,59],{"class":51},[45,40625,30551],{"class":55},[45,40627,31344],{"class":62},[45,40629,1855],{"class":51},[45,40631,31349],{"class":55},[45,40633,1852],{"class":51},[45,40635,30576],{"class":62},[45,40637,139],{"class":55},[45,40639,40640,40642],{"class":47,"line":32751},[45,40641,31399],{"class":79},[45,40643,30585],{"class":55},[45,40645,40646,40648,40650],{"class":47,"line":32757},[45,40647,31389],{"class":55},[45,40649,59],{"class":51},[45,40651,39260],{"class":55},[45,40653,40654,40656,40658,40660,40662,40664,40666,40668],{"class":47,"line":32768},[45,40655,31399],{"class":79},[45,40657,31402],{"class":55},[45,40659,495],{"class":79},[45,40661,655],{"class":55},[45,40663,31601],{"class":79},[45,40665,655],{"class":55},[45,40667,31601],{"class":79},[45,40669,31415],{"class":55},[233,40671,40672],{"start":1331},[169,40673,40674],{},"测试代码",[36,40676,40678],{"className":30478,"code":40677,"language":30480,"meta":25,"style":25},"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",[42,40679,40680,40686,40696,40706,40710,40720,40731,40735,40739,40743,40751,40767,40777,40793,40803,40817,40821,40831,40841,40851,40857,40861,40865,40873,40877,40893,40901,40905,40909,40917,40925,40929,40933,40937,40941,40947,40951,40961,40969,40977,40981,40985,40989,40997,41001,41017,41021,41025,41029,41041,41045,41057,41061,41065,41077,41081,41091,41095,41099,41111,41115,41124,41128,41132,41140,41144,41152,41156,41160,41164,41168,41172,41188,41196,41200,41204,41252,41258,41262,41272,41280,41288,41292,41296,41300,41304,41312,41316,41332,41336,41344,41352],{"__ignoreMap":25},[45,40681,40682,40684],{"class":47,"line":48},[45,40683,30492],{"class":51},[45,40685,30495],{"class":55},[45,40687,40688,40690,40692,40694],{"class":47,"line":66},[45,40689,30492],{"class":51},[45,40691,31515],{"class":55},[45,40693,31483],{"class":51},[45,40695,31520],{"class":55},[45,40697,40698,40700,40702,40704],{"class":47,"line":1331},[45,40699,30837],{"class":51},[45,40701,31498],{"class":55},[45,40703,30492],{"class":51},[45,40705,31503],{"class":55},[45,40707,40708],{"class":47,"line":1346},[45,40709,34022],{"class":337},[45,40711,40712,40714,40716,40718],{"class":47,"line":1352},[45,40713,30837],{"class":51},[45,40715,31468],{"class":55},[45,40717,30492],{"class":51},[45,40719,31473],{"class":55},[45,40721,40722,40724,40726,40728],{"class":47,"line":1366},[45,40723,30837],{"class":51},[45,40725,32014],{"class":55},[45,40727,30492],{"class":51},[45,40729,40730],{"class":79}," VGG16\n",[45,40732,40733],{"class":47,"line":1372},[45,40734,2550],{"emptyLinePlaceholder":207},[45,40736,40737],{"class":47,"line":1463},[45,40738,2550],{"emptyLinePlaceholder":207},[45,40740,40741],{"class":47,"line":1469},[45,40742,34051],{"class":337},[45,40744,40745,40747,40749],{"class":47,"line":1481},[45,40746,32047],{"class":51},[45,40748,34058],{"class":69},[45,40750,32053],{"class":55},[45,40752,40753,40755,40757,40759,40761,40763,40765],{"class":47,"line":1763},[45,40754,34065],{"class":55},[45,40756,59],{"class":51},[45,40758,31555],{"class":55},[45,40760,31558],{"class":5366},[45,40762,59],{"class":51},[45,40764,31563],{"class":62},[45,40766,31566],{"class":55},[45,40768,40769,40771,40773,40775],{"class":47,"line":1768},[45,40770,34082],{"class":5366},[45,40772,59],{"class":51},[45,40774,34087],{"class":79},[45,40776,31566],{"class":55},[45,40778,40779,40781,40783,40785,40787,40789,40791],{"class":47,"line":1774},[45,40780,34094],{"class":5366},[45,40782,59],{"class":51},[45,40784,31593],{"class":55},[45,40786,31596],{"class":5366},[45,40788,59],{"class":51},[45,40790,31601],{"class":79},[45,40792,31604],{"class":55},[45,40794,40795,40797,40799,40801],{"class":47,"line":1779},[45,40796,34111],{"class":5366},[45,40798,59],{"class":51},[45,40800,31576],{"class":79},[45,40802,139],{"class":55},[45,40804,40805,40807,40809,40811,40813,40815],{"class":47,"line":1793},[45,40806,34122],{"class":55},[45,40808,59],{"class":51},[45,40810,31634],{"class":55},[45,40812,31637],{"class":5366},[45,40814,59],{"class":51},[45,40816,34133],{"class":55},[45,40818,40819],{"class":47,"line":1798},[45,40820,34138],{"class":337},[45,40822,40823,40825,40827,40829],{"class":47,"line":1804},[45,40824,34143],{"class":5366},[45,40826,59],{"class":51},[45,40828,495],{"class":79},[45,40830,31566],{"class":55},[45,40832,40833,40835,40837,40839],{"class":47,"line":1825},[45,40834,34154],{"class":5366},[45,40836,59],{"class":51},[45,40838,31576],{"class":79},[45,40840,31566],{"class":55},[45,40842,40843,40845,40847,40849],{"class":47,"line":1830},[45,40844,34165],{"class":5366},[45,40846,59],{"class":51},[45,40848,469],{"class":79},[45,40850,139],{"class":55},[45,40852,40853,40855],{"class":47,"line":1844},[45,40854,4240],{"class":51},[45,40856,34178],{"class":55},[45,40858,40859],{"class":47,"line":1849},[45,40860,2550],{"emptyLinePlaceholder":207},[45,40862,40863],{"class":47,"line":1878},[45,40864,34187],{"class":337},[45,40866,40867,40869,40871],{"class":47,"line":1883},[45,40868,32047],{"class":51},[45,40870,34194],{"class":69},[45,40872,34197],{"class":55},[45,40874,40875],{"class":47,"line":1900},[45,40876,34202],{"class":337},[45,40878,40879,40881,40883,40885,40887,40889,40891],{"class":47,"line":1905},[45,40880,31337],{"class":55},[45,40882,59],{"class":51},[45,40884,31344],{"class":62},[45,40886,1855],{"class":51},[45,40888,31349],{"class":55},[45,40890,1852],{"class":51},[45,40892,34219],{"class":62},[45,40894,40895,40897,40899],{"class":47,"line":1910},[45,40896,31389],{"class":55},[45,40898,59],{"class":51},[45,40900,32389],{"class":55},[45,40902,40903],{"class":47,"line":1915},[45,40904,2550],{"emptyLinePlaceholder":207},[45,40906,40907],{"class":47,"line":1929},[45,40908,34236],{"class":337},[45,40910,40911,40913,40915],{"class":47,"line":1934},[45,40912,34241],{"class":55},[45,40914,59],{"class":51},[45,40916,32442],{"class":79},[45,40918,40919,40921,40923],{"class":47,"line":2727},[45,40920,34250],{"class":55},[45,40922,59],{"class":51},[45,40924,3235],{"class":79},[45,40926,40927],{"class":47,"line":2741},[45,40928,2550],{"emptyLinePlaceholder":207},[45,40930,40931],{"class":47,"line":2749},[45,40932,34263],{"class":337},[45,40934,40935],{"class":47,"line":2754},[45,40936,34268],{"class":337},[45,40938,40939],{"class":47,"line":2760},[45,40940,34273],{"class":337},[45,40942,40943,40945],{"class":47,"line":2766},[45,40944,34278],{"class":51},[45,40946,32984],{"class":55},[45,40948,40949],{"class":47,"line":2771},[45,40950,34285],{"class":337},[45,40952,40953,40955,40957,40959],{"class":47,"line":8098},[45,40954,3553],{"class":51},[45,40956,34292],{"class":55},[45,40958,26143],{"class":51},[45,40960,34297],{"class":55},[45,40962,40963,40965,40967],{"class":47,"line":8122},[45,40964,34302],{"class":55},[45,40966,59],{"class":51},[45,40968,34307],{"class":55},[45,40970,40971,40973,40975],{"class":47,"line":8127},[45,40972,34312],{"class":55},[45,40974,59],{"class":51},[45,40976,34317],{"class":55},[45,40978,40979],{"class":47,"line":8133},[45,40980,34322],{"class":337},[45,40982,40983],{"class":47,"line":8160},[45,40984,32975],{"class":55},[45,40986,40987],{"class":47,"line":8165},[45,40988,34331],{"class":337},[45,40990,40991,40993,40995],{"class":47,"line":8171},[45,40992,32760],{"class":55},[45,40994,59],{"class":51},[45,40996,34340],{"class":55},[45,40998,40999],{"class":47,"line":8183},[45,41000,34345],{"class":337},[45,41002,41003,41005,41007,41009,41011,41013,41015],{"class":47,"line":8195},[45,41004,32777],{"class":55},[45,41006,59],{"class":51},[45,41008,32782],{"class":55},[45,41010,32785],{"class":5366},[45,41012,59],{"class":51},[45,41014,495],{"class":79},[45,41016,139],{"class":55},[45,41018,41019],{"class":47,"line":8207},[45,41020,34366],{"class":337},[45,41022,41023],{"class":47,"line":9866},[45,41024,34371],{"class":337},[45,41026,41027],{"class":47,"line":9890},[45,41028,34376],{"class":337},[45,41030,41031,41033,41035,41037,41039],{"class":47,"line":9913},[45,41032,34381],{"class":55},[45,41034,9627],{"class":51},[45,41036,32887],{"class":55},[45,41038,3099],{"class":51},[45,41040,34390],{"class":55},[45,41042,41043],{"class":47,"line":9937},[45,41044,34395],{"class":337},[45,41046,41047,41049,41051,41053,41055],{"class":47,"line":9942},[45,41048,34400],{"class":55},[45,41050,9627],{"class":51},[45,41052,34405],{"class":55},[45,41054,469],{"class":79},[45,41056,139],{"class":55},[45,41058,41059],{"class":47,"line":9947},[45,41060,2550],{"emptyLinePlaceholder":207},[45,41062,41063],{"class":47,"line":9952},[45,41064,34418],{"class":337},[45,41066,41067,41069,41071,41073,41075],{"class":47,"line":9961},[45,41068,34423],{"class":55},[45,41070,59],{"class":51},[45,41072,34428],{"class":55},[45,41074,861],{"class":51},[45,41076,34433],{"class":55},[45,41078,41079],{"class":47,"line":9966},[45,41080,34438],{"class":337},[45,41082,41083,41085,41087,41089],{"class":47,"line":9972},[45,41084,32551],{"class":79},[45,41086,282],{"class":55},[45,41088,34447],{"class":62},[45,41090,34450],{"class":55},[45,41092,41093],{"class":47,"line":9993},[45,41094,2550],{"emptyLinePlaceholder":207},[45,41096,41097],{"class":47,"line":9999},[45,41098,34459],{"class":337},[45,41100,41101,41103,41105,41107,41109],{"class":47,"line":10013},[45,41102,1682],{"class":51},[45,41104,31320],{"class":79},[45,41106,3099],{"class":51},[45,41108,31325],{"class":62},[45,41110,3889],{"class":55},[45,41112,41113],{"class":47,"line":10019},[45,41114,34476],{"class":337},[45,41116,41117,41119,41121],{"class":47,"line":10046},[45,41118,31389],{"class":55},[45,41120,59],{"class":51},[45,41122,41123],{"class":55},"VGG16()\n",[45,41125,41126],{"class":47,"line":10055},[45,41127,34489],{"class":337},[45,41129,41130],{"class":47,"line":10061},[45,41131,34494],{"class":337},[45,41133,41134,41136,41138],{"class":47,"line":10069},[45,41135,34499],{"class":55},[45,41137,34502],{"class":62},[45,41139,30597],{"class":55},[45,41141,41142],{"class":47,"line":10074},[45,41143,34509],{"class":337},[45,41145,41146,41148,41150],{"class":47,"line":16753},[45,41147,34122],{"class":55},[45,41149,59],{"class":51},[45,41151,34518],{"class":55},[45,41153,41154],{"class":47,"line":16759},[45,41155,34523],{"class":337},[45,41157,41158],{"class":47,"line":16782},[45,41159,34528],{"class":55},[45,41161,41162],{"class":47,"line":16788},[45,41163,2550],{"emptyLinePlaceholder":207},[45,41165,41166],{"class":47,"line":16811},[45,41167,34537],{"class":337},[45,41169,41170],{"class":47,"line":16825},[45,41171,34542],{"class":337},[45,41173,41174,41176,41178,41180,41182,41184,41186],{"class":47,"line":16845},[45,41175,31337],{"class":55},[45,41177,59],{"class":51},[45,41179,31344],{"class":62},[45,41181,1855],{"class":51},[45,41183,31349],{"class":55},[45,41185,1852],{"class":51},[45,41187,34219],{"class":62},[45,41189,41190,41192,41194],{"class":47,"line":16851},[45,41191,31389],{"class":55},[45,41193,59],{"class":51},[45,41195,32389],{"class":55},[45,41197,41198],{"class":47,"line":16862},[45,41199,34571],{"class":337},[45,41201,41202],{"class":47,"line":16885},[45,41203,34576],{"class":337},[45,41205,41206,41208,41210,41212,41214,41216,41218,41220,41222,41224,41226,41228,41230,41232,41234,41236,41238,41240,41242,41244,41246,41248,41250],{"class":47,"line":16907},[45,41207,34581],{"class":55},[45,41209,59],{"class":51},[45,41211,1167],{"class":55},[45,41213,34588],{"class":62},[45,41215,655],{"class":55},[45,41217,34593],{"class":62},[45,41219,655],{"class":55},[45,41221,34598],{"class":62},[45,41223,655],{"class":55},[45,41225,34603],{"class":62},[45,41227,655],{"class":55},[45,41229,34608],{"class":62},[45,41231,655],{"class":55},[45,41233,34613],{"class":62},[45,41235,655],{"class":55},[45,41237,34618],{"class":62},[45,41239,655],{"class":55},[45,41241,34623],{"class":62},[45,41243,655],{"class":55},[45,41245,34628],{"class":62},[45,41247,655],{"class":55},[45,41249,34633],{"class":62},[45,41251,33346],{"class":55},[45,41253,41254,41256],{"class":47,"line":16912},[45,41255,34278],{"class":51},[45,41257,32984],{"class":55},[45,41259,41260],{"class":47,"line":16918},[45,41261,34646],{"class":337},[45,41263,41264,41266,41268,41270],{"class":47,"line":16932},[45,41265,3553],{"class":51},[45,41267,34653],{"class":55},[45,41269,26143],{"class":51},[45,41271,34297],{"class":55},[45,41273,41274,41276,41278],{"class":47,"line":16945},[45,41275,32710],{"class":55},[45,41277,59],{"class":51},[45,41279,32715],{"class":55},[45,41281,41282,41284,41286],{"class":47,"line":16950},[45,41283,32725],{"class":55},[45,41285,59],{"class":51},[45,41287,32730],{"class":55},[45,41289,41290],{"class":47,"line":16964},[45,41291,2550],{"emptyLinePlaceholder":207},[45,41293,41294],{"class":47,"line":16969},[45,41295,34682],{"class":337},[45,41297,41298],{"class":47,"line":16975},[45,41299,32975],{"class":55},[45,41301,41302],{"class":47,"line":16980},[45,41303,34691],{"class":337},[45,41305,41306,41308,41310],{"class":47,"line":16994},[45,41307,32760],{"class":55},[45,41309,59],{"class":51},[45,41311,32765],{"class":55},[45,41313,41314],{"class":47,"line":16999},[45,41315,34704],{"class":337},[45,41317,41318,41320,41322,41324,41326,41328,41330],{"class":47,"line":17004},[45,41319,32777],{"class":55},[45,41321,59],{"class":51},[45,41323,32782],{"class":55},[45,41325,32785],{"class":5366},[45,41327,59],{"class":51},[45,41329,495],{"class":79},[45,41331,139],{"class":55},[45,41333,41334],{"class":47,"line":17018},[45,41335,34725],{"class":337},[45,41337,41338,41340,41342],{"class":47,"line":17030},[45,41339,34730],{"class":55},[45,41341,59],{"class":51},[45,41343,34735],{"class":55},[45,41345,41346,41348,41350],{"class":47,"line":17035},[45,41347,34740],{"class":55},[45,41349,59],{"class":51},[45,41351,34745],{"class":55},[45,41353,41354,41356,41358,41360,41362,41364,41366,41368],{"class":47,"line":17048},[45,41355,34750],{"class":79},[45,41357,282],{"class":55},[45,41359,34755],{"class":62},[45,41361,34758],{"class":55},[45,41363,34761],{"class":62},[45,41365,655],{"class":55},[45,41367,34766],{"class":62},[45,41369,34769],{"class":55},[249,41371,41373],{"id":41372},"_23googlenet","2.3.GoogLeNet",[22147,41375,41377],{"id":41376},"_231原理","2.3.1.原理",[233,41379,41380],{},[169,41381,41382],{},"网络结构",[20,41384,41385],{},[23,41386],{"alt":25,"src":41387},"\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,41389,41390],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[20,41392,41393],{},[23,41394],{"alt":25,"src":41395},"\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,41397,41398],{},[23,41399],{"alt":25,"src":41400},"\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,41402,41403],{},[23,41404],{"alt":25,"src":41405},"\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",[233,41407,41408],{"start":66},[169,41409,41410],{},"1x1卷积的优点",[20,41412,41413],{},[23,41414],{"alt":25,"src":41415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[233,41417,41418],{"start":1331},[169,41419,41420],{},"全局平均池化层优点",[20,41422,41423],{},[23,41424],{"alt":25,"src":41425},"\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,41427,41428],{},[23,41429],{"alt":25,"src":41430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[233,41432,41433],{"start":1346},[169,41434,41435],{},"参数详细描述",[20,41437,41438],{},[23,41439],{"alt":25,"src":41440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[20,41442,41443],{},[23,41444],{"alt":25,"src":41445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[20,41447,41448],{},[23,41449],{"alt":25,"src":41450},"\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,41452,41453],{},[23,41454],{"alt":25,"src":41455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[20,41457,41458],{},[23,41459],{"alt":25,"src":41460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[20,41462,41463],{},[23,41464],{"alt":25,"src":41465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[20,41467,41468],{},[23,41469],{"alt":25,"src":41470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[20,41472,41473],{},[23,41474],{"alt":25,"src":41475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[20,41477,41478],{},[23,41479],{"alt":25,"src":41480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[20,41482,41483],{},[23,41484],{"alt":25,"src":41485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[20,41487,41488],{},[23,41489],{"alt":25,"src":41490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[20,41492,41493],{},[23,41494],{"alt":25,"src":41495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[20,41497,41498],{},[23,41499],{"alt":25,"src":41500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[20,41502,41503],{},[23,41504],{"alt":25,"src":41505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[20,41507,41508],{},[23,41509],{"alt":25,"src":41510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[20,41512,41513],{},[23,41514],{"alt":25,"src":41515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[20,41517,41518],{},[23,41519],{"alt":25,"src":41520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[20,41522,41523],{},[23,41524],{"alt":25,"src":41525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[20,41527,41528],{},[23,41529],{"alt":25,"src":41530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[20,41532,41533],{},[23,41534],{"alt":25,"src":41535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[20,41537,41538],{},[23,41539],{"alt":25,"src":41540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-050.png",[22147,41542,41544],{"id":41543},"_232代码实现","2.3.2.代码实现",[233,41546,41547],{},[169,41548,30811],{},[20,41550,41551],{},"根据原理一步一步搭建即可",[36,41553,41555],{"className":30478,"code":41554,"language":30480,"meta":25,"style":25},"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",[42,41556,41557,41563,41573,41583,41587,41604,41613,41628,41638,41643,41676,41681,41718,41765,41770,41806,41853,41858,41863,41898,41930,41934,41942,41958,41982,42007,42028,42033,42048,42052,42056,42061,42078,42083,42092,42107,42118,42162,42166,42194,42198,42209,42237,42241,42278,42282,42310,42314,42325,42361,42393,42421,42425,42436,42470,42502,42534,42567,42601,42629,42633,42644,42677,42709,42723,42727,42740,42744,42749,42761,42769,42791,42796,42801,42806,42811,42816,42821,42835,42843,42852,42865,42880,42889,42893,42901,42912,42923,42934,42945,42956,42962,42966,42971,42983,43003,43012],{"__ignoreMap":25},[45,41558,41559,41561],{"class":47,"line":48},[45,41560,30492],{"class":51},[45,41562,30495],{"class":55},[45,41564,41565,41567,41569,41571],{"class":47,"line":66},[45,41566,30837],{"class":51},[45,41568,30840],{"class":55},[45,41570,30492],{"class":51},[45,41572,30845],{"class":55},[45,41574,41575,41577,41579,41581],{"class":47,"line":1331},[45,41576,30837],{"class":51},[45,41578,30857],{"class":55},[45,41580,30492],{"class":51},[45,41582,30862],{"class":55},[45,41584,41585],{"class":47,"line":1346},[45,41586,2550],{"emptyLinePlaceholder":207},[45,41588,41589,41591,41594,41596,41598,41600,41602],{"class":47,"line":1352},[45,41590,14843],{"class":51},[45,41592,41593],{"class":69}," Inception",[45,41595,282],{"class":55},[45,41597,30878],{"class":69},[45,41599,835],{"class":55},[45,41601,30883],{"class":69},[45,41603,30886],{"class":55},[45,41605,41606,41608,41610],{"class":47,"line":1366},[45,41607,30901],{"class":51},[45,41609,30904],{"class":79},[45,41611,41612],{"class":55},"(self,in_channels,c1,c2,c3,c4):\n",[45,41614,41615,41617,41620,41622,41624,41626],{"class":47,"line":1372},[45,41616,30917],{"class":79},[45,41618,41619],{"class":55},"(Inception,",[45,41621,30923],{"class":79},[45,41623,30926],{"class":55},[45,41625,30929],{"class":79},[45,41627,2126],{"class":55},[45,41629,41630,41632,41634,41636],{"class":47,"line":1463},[45,41631,30945],{"class":79},[45,41633,34871],{"class":55},[45,41635,59],{"class":51},[45,41637,34876],{"class":55},[45,41639,41640],{"class":47,"line":1469},[45,41641,41642],{"class":337},"        # 路线1：定义1*1卷积\n",[45,41644,41645,41647,41650,41652,41654,41656,41658,41661,41663,41665,41668,41670,41672,41674],{"class":47,"line":1481},[45,41646,30945],{"class":79},[45,41648,41649],{"class":55},".p1_1",[45,41651,59],{"class":51},[45,41653,30953],{"class":55},[45,41655,30956],{"class":5366},[45,41657,59],{"class":51},[45,41659,41660],{"class":55},"in_channels,",[45,41662,30965],{"class":5366},[45,41664,59],{"class":51},[45,41666,41667],{"class":55},"c1,",[45,41669,30974],{"class":5366},[45,41671,59],{"class":51},[45,41673,495],{"class":79},[45,41675,139],{"class":55},[45,41677,41678],{"class":47,"line":1763},[45,41679,41680],{"class":337},"        # 路线2：定义1*1卷积和3*3\n",[45,41682,41683,41685,41688,41690,41692,41694,41696,41698,41700,41702,41705,41707,41710,41712,41714,41716],{"class":47,"line":1768},[45,41684,30945],{"class":79},[45,41686,41687],{"class":55},".p2_1",[45,41689,59],{"class":51},[45,41691,30953],{"class":55},[45,41693,30956],{"class":5366},[45,41695,59],{"class":51},[45,41697,41660],{"class":55},[45,41699,30965],{"class":5366},[45,41701,59],{"class":51},[45,41703,41704],{"class":55},"c2[",[45,41706,469],{"class":79},[45,41708,41709],{"class":55},"],",[45,41711,30974],{"class":5366},[45,41713,59],{"class":51},[45,41715,495],{"class":79},[45,41717,139],{"class":55},[45,41719,41720,41722,41725,41727,41729,41731,41733,41735,41737,41739,41741,41743,41745,41747,41749,41751,41753,41755,41757,41759,41761,41763],{"class":47,"line":1774},[45,41721,30945],{"class":79},[45,41723,41724],{"class":55},".p2_2",[45,41726,59],{"class":51},[45,41728,30953],{"class":55},[45,41730,30956],{"class":5366},[45,41732,59],{"class":51},[45,41734,41704],{"class":55},[45,41736,469],{"class":79},[45,41738,41709],{"class":55},[45,41740,30965],{"class":5366},[45,41742,59],{"class":51},[45,41744,41704],{"class":55},[45,41746,495],{"class":79},[45,41748,41709],{"class":55},[45,41750,30974],{"class":5366},[45,41752,59],{"class":51},[45,41754,350],{"class":79},[45,41756,655],{"class":55},[45,41758,30983],{"class":5366},[45,41760,59],{"class":51},[45,41762,495],{"class":79},[45,41764,139],{"class":55},[45,41766,41767],{"class":47,"line":1779},[45,41768,41769],{"class":337},"        # 路线3：定义1*1卷积和5*5\n",[45,41771,41772,41774,41777,41779,41781,41783,41785,41787,41789,41791,41794,41796,41798,41800,41802,41804],{"class":47,"line":1793},[45,41773,30945],{"class":79},[45,41775,41776],{"class":55},".p3_1",[45,41778,59],{"class":51},[45,41780,30953],{"class":55},[45,41782,30956],{"class":5366},[45,41784,59],{"class":51},[45,41786,41660],{"class":55},[45,41788,30965],{"class":5366},[45,41790,59],{"class":51},[45,41792,41793],{"class":55},"c3[",[45,41795,469],{"class":79},[45,41797,41709],{"class":55},[45,41799,30974],{"class":5366},[45,41801,59],{"class":51},[45,41803,495],{"class":79},[45,41805,139],{"class":55},[45,41807,41808,41810,41813,41815,41817,41819,41821,41823,41825,41827,41829,41831,41833,41835,41837,41839,41841,41843,41845,41847,41849,41851],{"class":47,"line":1798},[45,41809,30945],{"class":79},[45,41811,41812],{"class":55},".p3_2",[45,41814,59],{"class":51},[45,41816,30953],{"class":55},[45,41818,30956],{"class":5366},[45,41820,59],{"class":51},[45,41822,41793],{"class":55},[45,41824,469],{"class":79},[45,41826,41709],{"class":55},[45,41828,30965],{"class":5366},[45,41830,59],{"class":51},[45,41832,41793],{"class":55},[45,41834,495],{"class":79},[45,41836,41709],{"class":55},[45,41838,30974],{"class":5366},[45,41840,59],{"class":51},[45,41842,596],{"class":79},[45,41844,655],{"class":55},[45,41846,30983],{"class":5366},[45,41848,59],{"class":51},[45,41850,356],{"class":79},[45,41852,139],{"class":55},[45,41854,41855],{"class":47,"line":1804},[45,41856,41857],{"class":337},"        # 路线4：定义3*3最大池化和1*1卷积\n",[45,41859,41860],{"class":47,"line":1825},[45,41861,41862],{"class":337},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[45,41864,41865,41867,41870,41872,41874,41876,41878,41880,41882,41884,41886,41888,41890,41892,41894,41896],{"class":47,"line":1830},[45,41866,30945],{"class":79},[45,41868,41869],{"class":55},".p4_1",[45,41871,59],{"class":51},[45,41873,34929],{"class":55},[45,41875,30974],{"class":5366},[45,41877,59],{"class":51},[45,41879,350],{"class":79},[45,41881,655],{"class":55},[45,41883,31029],{"class":5366},[45,41885,59],{"class":51},[45,41887,495],{"class":79},[45,41889,655],{"class":55},[45,41891,30983],{"class":5366},[45,41893,59],{"class":51},[45,41895,495],{"class":79},[45,41897,139],{"class":55},[45,41899,41900,41902,41905,41907,41909,41911,41913,41915,41917,41919,41922,41924,41926,41928],{"class":47,"line":1844},[45,41901,30945],{"class":79},[45,41903,41904],{"class":55},".p4_2",[45,41906,59],{"class":51},[45,41908,30953],{"class":55},[45,41910,30956],{"class":5366},[45,41912,59],{"class":51},[45,41914,41660],{"class":55},[45,41916,30965],{"class":5366},[45,41918,59],{"class":51},[45,41920,41921],{"class":55},"c4,",[45,41923,30974],{"class":5366},[45,41925,59],{"class":51},[45,41927,495],{"class":79},[45,41929,139],{"class":55},[45,41931,41932],{"class":47,"line":1849},[45,41933,2550],{"emptyLinePlaceholder":207},[45,41935,41936,41938,41940],{"class":47,"line":1878},[45,41937,30901],{"class":51},[45,41939,31193],{"class":69},[45,41941,31196],{"class":55},[45,41943,41944,41947,41949,41951,41953,41955],{"class":47,"line":1883},[45,41945,41946],{"class":55},"        p1",[45,41948,59],{"class":51},[45,41950,30923],{"class":79},[45,41952,35284],{"class":55},[45,41954,30923],{"class":79},[45,41956,41957],{"class":55},".p1_1(x))\n",[45,41959,41960,41962,41964,41966,41968,41970,41973,41975,41977,41979],{"class":47,"line":1900},[45,41961,7235],{"class":55},[45,41963,59],{"class":51},[45,41965,30923],{"class":79},[45,41967,35284],{"class":55},[45,41969,30923],{"class":79},[45,41971,41972],{"class":55},".p2_2(",[45,41974,30923],{"class":79},[45,41976,35284],{"class":55},[45,41978,30923],{"class":79},[45,41980,41981],{"class":55},".p2_1(x))))\n",[45,41983,41984,41987,41989,41991,41993,41995,41998,42000,42002,42004],{"class":47,"line":1905},[45,41985,41986],{"class":55},"        p3",[45,41988,59],{"class":51},[45,41990,30923],{"class":79},[45,41992,35284],{"class":55},[45,41994,30923],{"class":79},[45,41996,41997],{"class":55},".p3_2(",[45,41999,30923],{"class":79},[45,42001,35284],{"class":55},[45,42003,30923],{"class":79},[45,42005,42006],{"class":55},".p3_1(x))))\n",[45,42008,42009,42012,42014,42016,42018,42020,42023,42025],{"class":47,"line":1910},[45,42010,42011],{"class":55},"        p4",[45,42013,59],{"class":51},[45,42015,30923],{"class":79},[45,42017,35284],{"class":55},[45,42019,30923],{"class":79},[45,42021,42022],{"class":55},".p4_2(",[45,42024,30923],{"class":79},[45,42026,42027],{"class":55},".p4_1(x)))\n",[45,42029,42030],{"class":47,"line":1915},[45,42031,42032],{"class":337},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[45,42034,42035,42037,42040,42042,42044,42046],{"class":47,"line":1929},[45,42036,14901],{"class":51},[45,42038,42039],{"class":55}," torch.cat((p1,p2,p3,p4),",[45,42041,32785],{"class":5366},[45,42043,59],{"class":51},[45,42045,495],{"class":79},[45,42047,139],{"class":55},[45,42049,42050],{"class":47,"line":1934},[45,42051,2550],{"emptyLinePlaceholder":207},[45,42053,42054],{"class":47,"line":2727},[45,42055,2550],{"emptyLinePlaceholder":207},[45,42057,42058],{"class":47,"line":2741},[45,42059,42060],{"class":337},"# 搭建GoogLeNet网络\n",[45,42062,42063,42065,42068,42070,42072,42074,42076],{"class":47,"line":2749},[45,42064,14843],{"class":51},[45,42066,42067],{"class":69}," GoogLeNet",[45,42069,282],{"class":55},[45,42071,30878],{"class":69},[45,42073,835],{"class":55},[45,42075,30883],{"class":69},[45,42077,30886],{"class":55},[45,42079,42080],{"class":47,"line":2754},[45,42081,42082],{"class":337},"    # 必须把Inception导入到里边\n",[45,42084,42085,42087,42089],{"class":47,"line":2760},[45,42086,30901],{"class":51},[45,42088,30904],{"class":79},[45,42090,42091],{"class":55},"(self,Inception):\n",[45,42093,42094,42096,42099,42101,42103,42105],{"class":47,"line":2766},[45,42095,30917],{"class":79},[45,42097,42098],{"class":55},"(GoogLeNet,",[45,42100,30923],{"class":79},[45,42102,30926],{"class":55},[45,42104,30929],{"class":79},[45,42106,2126],{"class":55},[45,42108,42109,42111,42114,42116],{"class":47,"line":2771},[45,42110,30945],{"class":79},[45,42112,42113],{"class":55},".b1",[45,42115,59],{"class":51},[45,42117,38109],{"class":55},[45,42119,42120,42122,42124,42126,42128,42130,42132,42134,42136,42138,42140,42142,42144,42146,42148,42150,42152,42154,42156,42158,42160],{"class":47,"line":8098},[45,42121,38114],{"class":55},[45,42123,30956],{"class":5366},[45,42125,59],{"class":51},[45,42127,495],{"class":79},[45,42129,655],{"class":55},[45,42131,30965],{"class":5366},[45,42133,59],{"class":51},[45,42135,481],{"class":79},[45,42137,655],{"class":55},[45,42139,30974],{"class":5366},[45,42141,59],{"class":51},[45,42143,646],{"class":79},[45,42145,655],{"class":55},[45,42147,31029],{"class":5366},[45,42149,59],{"class":51},[45,42151,356],{"class":79},[45,42153,655],{"class":55},[45,42155,30983],{"class":5366},[45,42157,59],{"class":51},[45,42159,350],{"class":79},[45,42161,38147],{"class":55},[45,42163,42164],{"class":47,"line":8122},[45,42165,38152],{"class":55},[45,42167,42168,42170,42172,42174,42176,42178,42180,42182,42184,42186,42188,42190,42192],{"class":47,"line":8127},[45,42169,38197],{"class":55},[45,42171,30974],{"class":5366},[45,42173,59],{"class":51},[45,42175,350],{"class":79},[45,42177,655],{"class":55},[45,42179,31029],{"class":5366},[45,42181,59],{"class":51},[45,42183,356],{"class":79},[45,42185,655],{"class":55},[45,42187,30983],{"class":5366},[45,42189,59],{"class":51},[45,42191,495],{"class":79},[45,42193,139],{"class":55},[45,42195,42196],{"class":47,"line":8133},[45,42197,38226],{"class":55},[45,42199,42200,42202,42205,42207],{"class":47,"line":8160},[45,42201,30945],{"class":79},[45,42203,42204],{"class":55},".b2",[45,42206,59],{"class":51},[45,42208,38109],{"class":55},[45,42210,42211,42213,42215,42217,42219,42221,42223,42225,42227,42229,42231,42233,42235],{"class":47,"line":8165},[45,42212,38114],{"class":55},[45,42214,30956],{"class":5366},[45,42216,59],{"class":51},[45,42218,481],{"class":79},[45,42220,655],{"class":55},[45,42222,30965],{"class":5366},[45,42224,59],{"class":51},[45,42226,481],{"class":79},[45,42228,655],{"class":55},[45,42230,30974],{"class":5366},[45,42232,59],{"class":51},[45,42234,495],{"class":79},[45,42236,38147],{"class":55},[45,42238,42239],{"class":47,"line":8171},[45,42240,38152],{"class":55},[45,42242,42243,42245,42247,42249,42251,42253,42255,42257,42260,42262,42264,42266,42268,42270,42272,42274,42276],{"class":47,"line":8183},[45,42244,38114],{"class":55},[45,42246,30956],{"class":5366},[45,42248,59],{"class":51},[45,42250,481],{"class":79},[45,42252,655],{"class":55},[45,42254,30965],{"class":5366},[45,42256,59],{"class":51},[45,42258,42259],{"class":79},"192",[45,42261,655],{"class":55},[45,42263,30974],{"class":5366},[45,42265,59],{"class":51},[45,42267,350],{"class":79},[45,42269,655],{"class":55},[45,42271,30983],{"class":5366},[45,42273,59],{"class":51},[45,42275,495],{"class":79},[45,42277,38147],{"class":55},[45,42279,42280],{"class":47,"line":8195},[45,42281,38152],{"class":55},[45,42283,42284,42286,42288,42290,42292,42294,42296,42298,42300,42302,42304,42306,42308],{"class":47,"line":8207},[45,42285,38197],{"class":55},[45,42287,30974],{"class":5366},[45,42289,59],{"class":51},[45,42291,350],{"class":79},[45,42293,655],{"class":55},[45,42295,31029],{"class":5366},[45,42297,59],{"class":51},[45,42299,356],{"class":79},[45,42301,655],{"class":55},[45,42303,30983],{"class":5366},[45,42305,59],{"class":51},[45,42307,495],{"class":79},[45,42309,139],{"class":55},[45,42311,42312],{"class":47,"line":9866},[45,42313,38226],{"class":55},[45,42315,42316,42318,42321,42323],{"class":47,"line":9890},[45,42317,30945],{"class":79},[45,42319,42320],{"class":55},".b3",[45,42322,59],{"class":51},[45,42324,38109],{"class":55},[45,42326,42327,42330,42332,42334,42336,42339,42341,42343,42345,42348,42350,42352,42354,42357,42359],{"class":47,"line":9913},[45,42328,42329],{"class":55},"            Inception(",[45,42331,42259],{"class":79},[45,42333,655],{"class":55},[45,42335,481],{"class":79},[45,42337,42338],{"class":55},",(",[45,42340,487],{"class":79},[45,42342,655],{"class":55},[45,42344,32170],{"class":79},[45,42346,42347],{"class":55},"),(",[45,42349,878],{"class":79},[45,42351,655],{"class":55},[45,42353,475],{"class":79},[45,42355,42356],{"class":55},"),",[45,42358,475],{"class":79},[45,42360,38147],{"class":55},[45,42362,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385,42387,42389,42391],{"class":47,"line":9937},[45,42364,42329],{"class":55},[45,42366,34970],{"class":79},[45,42368,655],{"class":55},[45,42370,32170],{"class":79},[45,42372,42338],{"class":55},[45,42374,32170],{"class":79},[45,42376,655],{"class":55},[45,42378,42259],{"class":79},[45,42380,42347],{"class":55},[45,42382,475],{"class":79},[45,42384,655],{"class":55},[45,42386,487],{"class":79},[45,42388,42356],{"class":55},[45,42390,481],{"class":79},[45,42392,38147],{"class":55},[45,42394,42395,42397,42399,42401,42403,42405,42407,42409,42411,42413,42415,42417,42419],{"class":47,"line":9942},[45,42396,38197],{"class":55},[45,42398,30974],{"class":5366},[45,42400,59],{"class":51},[45,42402,350],{"class":79},[45,42404,655],{"class":55},[45,42406,31029],{"class":5366},[45,42408,59],{"class":51},[45,42410,356],{"class":79},[45,42412,655],{"class":55},[45,42414,30983],{"class":5366},[45,42416,59],{"class":51},[45,42418,495],{"class":79},[45,42420,139],{"class":55},[45,42422,42423],{"class":47,"line":9947},[45,42424,38226],{"class":55},[45,42426,42427,42429,42432,42434],{"class":47,"line":9952},[45,42428,30945],{"class":79},[45,42430,42431],{"class":55},".b4",[45,42433,59],{"class":51},[45,42435,38109],{"class":55},[45,42437,42438,42440,42443,42445,42447,42449,42451,42453,42456,42458,42460,42462,42464,42466,42468],{"class":47,"line":9961},[45,42439,42329],{"class":55},[45,42441,42442],{"class":79},"480",[45,42444,655],{"class":55},[45,42446,42259],{"class":79},[45,42448,42338],{"class":55},[45,42450,487],{"class":79},[45,42452,655],{"class":55},[45,42454,42455],{"class":79},"208",[45,42457,42347],{"class":55},[45,42459,878],{"class":79},[45,42461,655],{"class":55},[45,42463,884],{"class":79},[45,42465,42356],{"class":55},[45,42467,481],{"class":79},[45,42469,38147],{"class":55},[45,42471,42472,42474,42476,42478,42480,42482,42484,42486,42488,42490,42492,42494,42496,42498,42500],{"class":47,"line":9966},[45,42473,42329],{"class":55},[45,42475,38557],{"class":79},[45,42477,655],{"class":55},[45,42479,21197],{"class":79},[45,42481,42338],{"class":55},[45,42483,895],{"class":79},[45,42485,655],{"class":55},[45,42487,31601],{"class":79},[45,42489,42347],{"class":55},[45,42491,1077],{"class":79},[45,42493,655],{"class":55},[45,42495,481],{"class":79},[45,42497,42356],{"class":55},[45,42499,481],{"class":79},[45,42501,38147],{"class":55},[45,42503,42504,42506,42508,42510,42512,42514,42516,42518,42520,42522,42524,42526,42528,42530,42532],{"class":47,"line":9972},[45,42505,42329],{"class":55},[45,42507,38557],{"class":79},[45,42509,655],{"class":55},[45,42511,32170],{"class":79},[45,42513,42338],{"class":55},[45,42515,32170],{"class":79},[45,42517,655],{"class":55},[45,42519,34970],{"class":79},[45,42521,42347],{"class":55},[45,42523,1077],{"class":79},[45,42525,655],{"class":55},[45,42527,481],{"class":79},[45,42529,42356],{"class":55},[45,42531,481],{"class":79},[45,42533,38147],{"class":55},[45,42535,42536,42538,42540,42542,42544,42546,42548,42550,42553,42555,42557,42559,42561,42563,42565],{"class":47,"line":9993},[45,42537,42329],{"class":55},[45,42539,38557],{"class":79},[45,42541,655],{"class":55},[45,42543,895],{"class":79},[45,42545,42338],{"class":55},[45,42547,32170],{"class":79},[45,42549,655],{"class":55},[45,42551,42552],{"class":79},"288",[45,42554,42347],{"class":55},[45,42556,475],{"class":79},[45,42558,655],{"class":55},[45,42560,481],{"class":79},[45,42562,42356],{"class":55},[45,42564,481],{"class":79},[45,42566,38147],{"class":55},[45,42568,42569,42571,42574,42576,42578,42580,42582,42584,42587,42589,42591,42593,42595,42597,42599],{"class":47,"line":9999},[45,42570,42329],{"class":55},[45,42572,42573],{"class":79},"528",[45,42575,655],{"class":55},[45,42577,34970],{"class":79},[45,42579,42338],{"class":55},[45,42581,21197],{"class":79},[45,42583,655],{"class":55},[45,42585,42586],{"class":79},"320",[45,42588,42347],{"class":55},[45,42590,475],{"class":79},[45,42592,655],{"class":55},[45,42594,32170],{"class":79},[45,42596,42356],{"class":55},[45,42598,32170],{"class":79},[45,42600,38147],{"class":55},[45,42602,42603,42605,42607,42609,42611,42613,42615,42617,42619,42621,42623,42625,42627],{"class":47,"line":10013},[45,42604,38197],{"class":55},[45,42606,30974],{"class":5366},[45,42608,59],{"class":51},[45,42610,350],{"class":79},[45,42612,655],{"class":55},[45,42614,31029],{"class":5366},[45,42616,59],{"class":51},[45,42618,356],{"class":79},[45,42620,655],{"class":55},[45,42622,30983],{"class":5366},[45,42624,59],{"class":51},[45,42626,495],{"class":79},[45,42628,139],{"class":55},[45,42630,42631],{"class":47,"line":10019},[45,42632,38226],{"class":55},[45,42634,42635,42637,42640,42642],{"class":47,"line":10046},[45,42636,30945],{"class":79},[45,42638,42639],{"class":55},".b5",[45,42641,59],{"class":51},[45,42643,38109],{"class":55},[45,42645,42646,42648,42651,42653,42655,42657,42659,42661,42663,42665,42667,42669,42671,42673,42675],{"class":47,"line":10055},[45,42647,42329],{"class":55},[45,42649,42650],{"class":79},"832",[45,42652,655],{"class":55},[45,42654,34970],{"class":79},[45,42656,42338],{"class":55},[45,42658,21197],{"class":79},[45,42660,655],{"class":55},[45,42662,42586],{"class":79},[45,42664,42347],{"class":55},[45,42666,475],{"class":79},[45,42668,655],{"class":55},[45,42670,32170],{"class":79},[45,42672,42356],{"class":55},[45,42674,32170],{"class":79},[45,42676,38147],{"class":55},[45,42678,42679,42681,42683,42685,42687,42689,42691,42693,42695,42697,42699,42701,42703,42705,42707],{"class":47,"line":10061},[45,42680,42329],{"class":55},[45,42682,42650],{"class":79},[45,42684,655],{"class":55},[45,42686,35040],{"class":79},[45,42688,42338],{"class":55},[45,42690,42259],{"class":79},[45,42692,655],{"class":55},[45,42694,35040],{"class":79},[45,42696,42347],{"class":55},[45,42698,884],{"class":79},[45,42700,655],{"class":55},[45,42702,32170],{"class":79},[45,42704,42356],{"class":55},[45,42706,32170],{"class":79},[45,42708,38147],{"class":55},[45,42710,42711,42714,42716,42718,42720],{"class":47,"line":10069},[45,42712,42713],{"class":55},"            nn.AdaptiveAvgPool2d((",[45,42715,495],{"class":79},[45,42717,655],{"class":55},[45,42719,495],{"class":79},[45,42721,42722],{"class":55},")),\n",[45,42724,42725],{"class":47,"line":10074},[45,42726,38890],{"class":55},[45,42728,42729,42731,42734,42736,42738],{"class":47,"line":16753},[45,42730,38895],{"class":55},[45,42732,42733],{"class":79},"1024",[45,42735,655],{"class":55},[45,42737,723],{"class":79},[45,42739,139],{"class":55},[45,42741,42742],{"class":47,"line":16759},[45,42743,38226],{"class":55},[45,42745,42746],{"class":47,"line":16782},[45,42747,42748],{"class":337},"        # 对模型参数初始化\n",[45,42750,42751,42753,42755,42757,42759],{"class":47,"line":16788},[45,42752,3553],{"class":51},[45,42754,38968],{"class":55},[45,42756,26143],{"class":51},[45,42758,38973],{"class":79},[45,42760,38976],{"class":55},[45,42762,42763,42765,42767],{"class":47,"line":16811},[45,42764,4792],{"class":51},[45,42766,38988],{"class":79},[45,42768,38991],{"class":55},[45,42770,42771,42773,42776,42778,42781,42783,42785,42787,42789],{"class":47,"line":16825},[45,42772,39001],{"class":55},[45,42774,42775],{"class":5366},"mode",[45,42777,59],{"class":51},[45,42779,42780],{"class":62},"'fan_out'",[45,42782,655],{"class":55},[45,42784,39004],{"class":5366},[45,42786,59],{"class":51},[45,42788,39009],{"class":62},[45,42790,139],{"class":55},[45,42792,42793],{"class":47,"line":16845},[45,42794,42795],{"class":337},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[45,42797,42798],{"class":47,"line":16851},[45,42799,42800],{"class":337},"                # ② mode = 'fan_out'决定使用的fan值：\n",[45,42802,42803],{"class":47,"line":16862},[45,42804,42805],{"class":337},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[45,42807,42808],{"class":47,"line":16885},[45,42809,42810],{"class":337},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[45,42812,42813],{"class":47,"line":16907},[45,42814,42815],{"class":337},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[45,42817,42818],{"class":47,"line":16912},[45,42819,42820],{"class":337},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[45,42822,42823,42825,42827,42829,42831,42833],{"class":47,"line":16918},[45,42824,39021],{"class":51},[45,42826,39024],{"class":55},[45,42828,39027],{"class":51},[45,42830,39030],{"class":51},[45,42832,39033],{"class":79},[45,42834,3889],{"class":55},[45,42836,42837,42839,42841],{"class":47,"line":16932},[45,42838,39045],{"class":55},[45,42840,469],{"class":79},[45,42842,139],{"class":55},[45,42844,42845,42848,42850],{"class":47,"line":16945},[45,42846,42847],{"class":51},"                elif",[45,42849,38988],{"class":79},[45,42851,39064],{"class":55},[45,42853,42854,42857,42859,42861,42863],{"class":47,"line":16950},[45,42855,42856],{"class":55},"                    nn.init.normal_(m.weight,",[45,42858,469],{"class":79},[45,42860,655],{"class":55},[45,42862,39086],{"class":79},[45,42864,139],{"class":55},[45,42866,42867,42870,42872,42874,42876,42878],{"class":47,"line":16964},[45,42868,42869],{"class":51},"                    if",[45,42871,39024],{"class":55},[45,42873,39027],{"class":51},[45,42875,39030],{"class":51},[45,42877,39033],{"class":79},[45,42879,3889],{"class":55},[45,42881,42882,42885,42887],{"class":47,"line":16969},[45,42883,42884],{"class":55},"                        nn.init.constant_(m.bias,",[45,42886,469],{"class":79},[45,42888,139],{"class":55},[45,42890,42891],{"class":47,"line":16975},[45,42892,35265],{"class":337},[45,42894,42895,42897,42899],{"class":47,"line":16980},[45,42896,30901],{"class":51},[45,42898,31193],{"class":69},[45,42900,31196],{"class":55},[45,42902,42903,42905,42907,42909],{"class":47,"line":16994},[45,42904,31201],{"class":55},[45,42906,59],{"class":51},[45,42908,30923],{"class":79},[45,42910,42911],{"class":55},".b1(x)\n",[45,42913,42914,42916,42918,42920],{"class":47,"line":16999},[45,42915,31201],{"class":55},[45,42917,59],{"class":51},[45,42919,30923],{"class":79},[45,42921,42922],{"class":55},".b2(x)\n",[45,42924,42925,42927,42929,42931],{"class":47,"line":17004},[45,42926,31201],{"class":55},[45,42928,59],{"class":51},[45,42930,30923],{"class":79},[45,42932,42933],{"class":55},".b3(x)\n",[45,42935,42936,42938,42940,42942],{"class":47,"line":17018},[45,42937,31201],{"class":55},[45,42939,59],{"class":51},[45,42941,30923],{"class":79},[45,42943,42944],{"class":55},".b4(x)\n",[45,42946,42947,42949,42951,42953],{"class":47,"line":17030},[45,42948,31201],{"class":55},[45,42950,59],{"class":51},[45,42952,30923],{"class":79},[45,42954,42955],{"class":55},".b5(x)\n",[45,42957,42958,42960],{"class":47,"line":17035},[45,42959,14901],{"class":51},[45,42961,31309],{"class":55},[45,42963,42964],{"class":47,"line":17048},[45,42965,2550],{"emptyLinePlaceholder":207},[45,42967,42968],{"class":47,"line":17053},[45,42969,42970],{"class":337},"# 模型展示\n",[45,42972,42973,42975,42977,42979,42981],{"class":47,"line":17058},[45,42974,1682],{"class":51},[45,42976,31320],{"class":79},[45,42978,3099],{"class":51},[45,42980,31325],{"class":62},[45,42982,3889],{"class":55},[45,42984,42985,42987,42989,42991,42993,42995,42997,42999,43001],{"class":47,"line":17063},[45,42986,31337],{"class":55},[45,42988,59],{"class":51},[45,42990,30551],{"class":55},[45,42992,31344],{"class":62},[45,42994,1855],{"class":51},[45,42996,31349],{"class":55},[45,42998,1852],{"class":51},[45,43000,30576],{"class":62},[45,43002,139],{"class":55},[45,43004,43005,43007,43009],{"class":47,"line":17076},[45,43006,31389],{"class":55},[45,43008,59],{"class":51},[45,43010,43011],{"class":55},"GoogLeNet(Inception).to(device)\n",[45,43013,43014,43016,43018,43020,43022,43024,43026,43028],{"class":47,"line":17081},[45,43015,31399],{"class":79},[45,43017,31402],{"class":55},[45,43019,495],{"class":79},[45,43021,655],{"class":55},[45,43023,31601],{"class":79},[45,43025,655],{"class":55},[45,43027,31601],{"class":79},[45,43029,31415],{"class":55},[233,43031,43032],{"start":66},[169,43033,39283],{},[36,43035,43037],{"className":30478,"code":43036,"language":30480,"meta":25,"style":25},"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",[42,43038,43039,43045,43051,43061,43067,43077,43087,43097,43107,43117,43121,43132,43142,43146,43150,43154,43162,43174,43184,43200,43210,43242,43256,43266,43276,43280,43290,43304,43314,43324,43334,43340,43344,43348,43352,43356,43360,43368,43388,43392,43396,43400,43404,43408,43424,43428,43432,43440,43444,43448,43456,43460,43464,43468,43476,43480,43484,43488,43492,43500,43504,43512,43516,43524,43528,43536,43540,43548,43552,43556,43564,43568,43572,43576,43588,43612,43626,43630,43634,43638,43646,43650,43658,43662,43670,43674,43682,43686,43694,43698,43706,43710,43722,43726,43734,43738,43746,43750,43754,43758,43762,43770,43774,43790,43794,43802,43806,43810,43814,43818,43822,43826,43830,43846,43850,43862,43866,43878,43882,43894,43898,43906,43910,43918,43922,43926,43930,43936,43940,43948,43952,43968,43972,43980,43984,44000,44012,44016,44028,44032,44036,44044,44048,44052,44060,44064,44072,44076,44084,44088,44092,44134,44176,44180,44184,44200,44204,44220,44224,44228,44236,44240,44244,44256,44294,44298,44302,44310,44314,44328,44338,44344,44350,44356,44362,44366,44370,44376,44380,44384,44392,44396,44414,44418,44422,44426,44442,44446,44450,44454,44458,44462,44482,44502,44506,44510,44514,44522,44530,44534,44550,44570,44590,44594,44598,44606,44614,44618,44622,44626,44638,44642,44652,44660,44677],{"__ignoreMap":25},[45,43040,43041,43043],{"class":47,"line":48},[45,43042,30492],{"class":51},[45,43044,31922],{"class":55},[45,43046,43047,43049],{"class":47,"line":66},[45,43048,30492],{"class":51},[45,43050,31929],{"class":55},[45,43052,43053,43055,43057,43059],{"class":47,"line":1331},[45,43054,30492],{"class":51},[45,43056,31940],{"class":55},[45,43058,31483],{"class":51},[45,43060,31945],{"class":55},[45,43062,43063,43065],{"class":47,"line":1346},[45,43064,30492],{"class":51},[45,43066,30495],{"class":55},[45,43068,43069,43071,43073,43075],{"class":47,"line":1352},[45,43070,30837],{"class":51},[45,43072,31515],{"class":55},[45,43074,30492],{"class":51},[45,43076,31962],{"class":55},[45,43078,43079,43081,43083,43085],{"class":47,"line":1366},[45,43080,30837],{"class":51},[45,43082,31468],{"class":55},[45,43084,30492],{"class":51},[45,43086,31473],{"class":55},[45,43088,43089,43091,43093,43095],{"class":47,"line":1372},[45,43090,30837],{"class":51},[45,43092,31498],{"class":55},[45,43094,30492],{"class":51},[45,43096,31503],{"class":55},[45,43098,43099,43101,43103,43105],{"class":47,"line":1463},[45,43100,30492],{"class":51},[45,43102,31515],{"class":55},[45,43104,31483],{"class":51},[45,43106,31520],{"class":55},[45,43108,43109,43111,43113,43115],{"class":47,"line":1469},[45,43110,30492],{"class":51},[45,43112,31532],{"class":55},[45,43114,31483],{"class":51},[45,43116,31537],{"class":55},[45,43118,43119],{"class":47,"line":1481},[45,43120,32007],{"class":337},[45,43122,43123,43125,43127,43129],{"class":47,"line":1763},[45,43124,30837],{"class":51},[45,43126,32014],{"class":55},[45,43128,30492],{"class":51},[45,43130,43131],{"class":55}," GoogLeNet, Inception\n",[45,43133,43134,43136,43138,43140],{"class":47,"line":1768},[45,43135,30837],{"class":51},[45,43137,30840],{"class":55},[45,43139,30492],{"class":51},[45,43141,30845],{"class":55},[45,43143,43144],{"class":47,"line":1774},[45,43145,2550],{"emptyLinePlaceholder":207},[45,43147,43148],{"class":47,"line":1779},[45,43149,2550],{"emptyLinePlaceholder":207},[45,43151,43152],{"class":47,"line":1793},[45,43153,32042],{"class":337},[45,43155,43156,43158,43160],{"class":47,"line":1798},[45,43157,32047],{"class":51},[45,43159,32050],{"class":69},[45,43161,32053],{"class":55},[45,43163,43164,43166,43168,43170,43172],{"class":47,"line":1804},[45,43165,32058],{"class":55},[45,43167,59],{"class":51},[45,43169,31555],{"class":55},[45,43171,31563],{"class":62},[45,43173,31566],{"class":55},[45,43175,43176,43178,43180,43182],{"class":47,"line":1825},[45,43177,32071],{"class":5366},[45,43179,59],{"class":51},[45,43181,31576],{"class":79},[45,43183,31566],{"class":55},[45,43185,43186,43188,43190,43192,43194,43196,43198],{"class":47,"line":1830},[45,43187,32082],{"class":5366},[45,43189,59],{"class":51},[45,43191,31593],{"class":55},[45,43193,31596],{"class":5366},[45,43195,59],{"class":51},[45,43197,35549],{"class":79},[45,43199,31604],{"class":55},[45,43201,43202,43204,43206,43208],{"class":47,"line":1844},[45,43203,32099],{"class":5366},[45,43205,59],{"class":51},[45,43207,31576],{"class":79},[45,43209,139],{"class":55},[45,43211,43212,43214,43216,43218,43220,43222,43224,43226,43228,43230,43232,43234,43236,43238,43240],{"class":47,"line":1849},[45,43213,32110],{"class":55},[45,43215,59],{"class":51},[45,43217,32115],{"class":55},[45,43219,32118],{"class":79},[45,43221,282],{"class":55},[45,43223,32123],{"class":79},[45,43225,732],{"class":51},[45,43227,7508],{"class":79},[45,43229,32130],{"class":55},[45,43231,32118],{"class":79},[45,43233,282],{"class":55},[45,43235,32137],{"class":79},[45,43237,732],{"class":51},[45,43239,7508],{"class":79},[45,43241,32144],{"class":55},[45,43243,43244,43246,43248,43250,43252,43254],{"class":47,"line":1878},[45,43245,32149],{"class":55},[45,43247,59],{"class":51},[45,43249,32154],{"class":55},[45,43251,31637],{"class":5366},[45,43253,59],{"class":51},[45,43255,31642],{"class":55},[45,43257,43258,43260,43262,43264],{"class":47,"line":1883},[45,43259,32165],{"class":5366},[45,43261,59],{"class":51},[45,43263,475],{"class":79},[45,43265,31566],{"class":55},[45,43267,43268,43270,43272,43274],{"class":47,"line":1900},[45,43269,32177],{"class":5366},[45,43271,59],{"class":51},[45,43273,31576],{"class":79},[45,43275,31566],{"class":55},[45,43277,43278],{"class":47,"line":1905},[45,43279,32188],{"class":337},[45,43281,43282,43284,43286,43288],{"class":47,"line":1910},[45,43283,32193],{"class":5366},[45,43285,59],{"class":51},[45,43287,672],{"class":79},[45,43289,139],{"class":55},[45,43291,43292,43294,43296,43298,43300,43302],{"class":47,"line":1915},[45,43293,32204],{"class":55},[45,43295,59],{"class":51},[45,43297,31634],{"class":55},[45,43299,31637],{"class":5366},[45,43301,59],{"class":51},[45,43303,32215],{"class":55},[45,43305,43306,43308,43310,43312],{"class":47,"line":1929},[45,43307,32220],{"class":5366},[45,43309,59],{"class":51},[45,43311,475],{"class":79},[45,43313,31566],{"class":55},[45,43315,43316,43318,43320,43322],{"class":47,"line":1934},[45,43317,32231],{"class":5366},[45,43319,59],{"class":51},[45,43321,31576],{"class":79},[45,43323,31566],{"class":55},[45,43325,43326,43328,43330,43332],{"class":47,"line":2727},[45,43327,32242],{"class":5366},[45,43329,59],{"class":51},[45,43331,672],{"class":79},[45,43333,139],{"class":55},[45,43335,43336,43338],{"class":47,"line":2741},[45,43337,4240],{"class":51},[45,43339,32255],{"class":55},[45,43341,43342],{"class":47,"line":2749},[45,43343,2550],{"emptyLinePlaceholder":207},[45,43345,43346],{"class":47,"line":2754},[45,43347,32264],{"class":337},[45,43349,43350],{"class":47,"line":2760},[45,43351,32269],{"class":337},[45,43353,43354],{"class":47,"line":2766},[45,43355,2550],{"emptyLinePlaceholder":207},[45,43357,43358],{"class":47,"line":2771},[45,43359,32278],{"class":337},[45,43361,43362,43364,43366],{"class":47,"line":8098},[45,43363,32047],{"class":51},[45,43365,32285],{"class":69},[45,43367,32288],{"class":55},[45,43369,43370,43372,43374,43376,43378,43380,43382,43384,43386],{"class":47,"line":8122},[45,43371,31337],{"class":55},[45,43373,59],{"class":51},[45,43375,30551],{"class":55},[45,43377,31344],{"class":62},[45,43379,1855],{"class":51},[45,43381,31349],{"class":55},[45,43383,1852],{"class":51},[45,43385,32307],{"class":62},[45,43387,139],{"class":55},[45,43389,43390],{"class":47,"line":8127},[45,43391,2550],{"emptyLinePlaceholder":207},[45,43393,43394],{"class":47,"line":8133},[45,43395,2550],{"emptyLinePlaceholder":207},[45,43397,43398],{"class":47,"line":8160},[45,43399,32322],{"class":337},[45,43401,43402],{"class":47,"line":8165},[45,43403,32327],{"class":337},[45,43405,43406],{"class":47,"line":8171},[45,43407,32332],{"class":337},[45,43409,43410,43412,43414,43416,43418,43420,43422],{"class":47,"line":8183},[45,43411,32337],{"class":55},[45,43413,59],{"class":51},[45,43415,32342],{"class":55},[45,43417,32345],{"class":5366},[45,43419,59],{"class":51},[45,43421,32350],{"class":79},[45,43423,139],{"class":55},[45,43425,43426],{"class":47,"line":8195},[45,43427,2550],{"emptyLinePlaceholder":207},[45,43429,43430],{"class":47,"line":8207},[45,43431,32361],{"class":337},[45,43433,43434,43436,43438],{"class":47,"line":9866},[45,43435,32366],{"class":55},[45,43437,59],{"class":51},[45,43439,32371],{"class":55},[45,43441,43442],{"class":47,"line":9890},[45,43443,2550],{"emptyLinePlaceholder":207},[45,43445,43446],{"class":47,"line":9913},[45,43447,32380],{"class":337},[45,43449,43450,43452,43454],{"class":47,"line":9937},[45,43451,31389],{"class":55},[45,43453,59],{"class":51},[45,43455,32389],{"class":55},[45,43457,43458],{"class":47,"line":9942},[45,43459,32394],{"class":337},[45,43461,43462],{"class":47,"line":9947},[45,43463,32399],{"class":337},[45,43465,43466],{"class":47,"line":9952},[45,43467,32404],{"class":337},[45,43469,43470,43472,43474],{"class":47,"line":9961},[45,43471,32409],{"class":55},[45,43473,59],{"class":51},[45,43475,32414],{"class":55},[45,43477,43478],{"class":47,"line":9966},[45,43479,2550],{"emptyLinePlaceholder":207},[45,43481,43482],{"class":47,"line":9972},[45,43483,2550],{"emptyLinePlaceholder":207},[45,43485,43486],{"class":47,"line":9993},[45,43487,32427],{"class":337},[45,43489,43490],{"class":47,"line":9999},[45,43491,32432],{"class":337},[45,43493,43494,43496,43498],{"class":47,"line":10013},[45,43495,32437],{"class":55},[45,43497,59],{"class":51},[45,43499,32442],{"class":79},[45,43501,43502],{"class":47,"line":10019},[45,43503,32447],{"class":337},[45,43505,43506,43508,43510],{"class":47,"line":10046},[45,43507,32452],{"class":55},[45,43509,59],{"class":51},[45,43511,32457],{"class":55},[45,43513,43514],{"class":47,"line":10055},[45,43515,32462],{"class":337},[45,43517,43518,43520,43522],{"class":47,"line":10061},[45,43519,32467],{"class":55},[45,43521,59],{"class":51},[45,43523,32457],{"class":55},[45,43525,43526],{"class":47,"line":10069},[45,43527,32476],{"class":337},[45,43529,43530,43532,43534],{"class":47,"line":10074},[45,43531,32481],{"class":55},[45,43533,59],{"class":51},[45,43535,32457],{"class":55},[45,43537,43538],{"class":47,"line":16753},[45,43539,32490],{"class":337},[45,43541,43542,43544,43546],{"class":47,"line":16759},[45,43543,32495],{"class":55},[45,43545,59],{"class":51},[45,43547,32457],{"class":55},[45,43549,43550],{"class":47,"line":16782},[45,43551,2550],{"emptyLinePlaceholder":207},[45,43553,43554],{"class":47,"line":16788},[45,43555,32508],{"class":337},[45,43557,43558,43560,43562],{"class":47,"line":16811},[45,43559,32513],{"class":55},[45,43561,59],{"class":51},[45,43563,32518],{"class":55},[45,43565,43566],{"class":47,"line":16825},[45,43567,2550],{"emptyLinePlaceholder":207},[45,43569,43570],{"class":47,"line":16845},[45,43571,2550],{"emptyLinePlaceholder":207},[45,43573,43574],{"class":47,"line":16851},[45,43575,32531],{"class":337},[45,43577,43578,43580,43582,43584,43586],{"class":47,"line":16862},[45,43579,3351],{"class":51},[45,43581,32538],{"class":55},[45,43583,26143],{"class":51},[45,43585,32543],{"class":79},[45,43587,32546],{"class":55},[45,43589,43590,43592,43594,43596,43598,43600,43602,43604,43606,43608,43610],{"class":47,"line":16885},[45,43591,32551],{"class":79},[45,43593,282],{"class":55},[45,43595,32556],{"class":62},[45,43597,32559],{"class":79},[45,43599,861],{"class":62},[45,43601,32559],{"class":79},[45,43603,89],{"class":62},[45,43605,32568],{"class":55},[45,43607,809],{"class":51},[45,43609,495],{"class":79},[45,43611,30597],{"class":55},[45,43613,43614,43616,43618,43620,43622,43624],{"class":47,"line":16907},[45,43615,32551],{"class":79},[45,43617,282],{"class":55},[45,43619,32583],{"class":62},[45,43621,732],{"class":51},[45,43623,723],{"class":79},[45,43625,139],{"class":55},[45,43627,43628],{"class":47,"line":16912},[45,43629,2550],{"emptyLinePlaceholder":207},[45,43631,43632],{"class":47,"line":16918},[45,43633,32598],{"class":337},[45,43635,43636],{"class":47,"line":16932},[45,43637,32603],{"class":337},[45,43639,43640,43642,43644],{"class":47,"line":16945},[45,43641,32608],{"class":55},[45,43643,59],{"class":51},[45,43645,32442],{"class":79},[45,43647,43648],{"class":47,"line":16950},[45,43649,32617],{"class":337},[45,43651,43652,43654,43656],{"class":47,"line":16964},[45,43653,32622],{"class":55},[45,43655,59],{"class":51},[45,43657,3235],{"class":79},[45,43659,43660],{"class":47,"line":16969},[45,43661,32631],{"class":337},[45,43663,43664,43666,43668],{"class":47,"line":16975},[45,43665,32636],{"class":55},[45,43667,59],{"class":51},[45,43669,32442],{"class":79},[45,43671,43672],{"class":47,"line":16980},[45,43673,32645],{"class":337},[45,43675,43676,43678,43680],{"class":47,"line":16994},[45,43677,32650],{"class":55},[45,43679,59],{"class":51},[45,43681,3235],{"class":79},[45,43683,43684],{"class":47,"line":16999},[45,43685,32659],{"class":337},[45,43687,43688,43690,43692],{"class":47,"line":17004},[45,43689,32664],{"class":55},[45,43691,59],{"class":51},[45,43693,3235],{"class":79},[45,43695,43696],{"class":47,"line":17018},[45,43697,32673],{"class":337},[45,43699,43700,43702,43704],{"class":47,"line":17030},[45,43701,32678],{"class":55},[45,43703,59],{"class":51},[45,43705,3235],{"class":79},[45,43707,43708],{"class":47,"line":17035},[45,43709,32687],{"class":337},[45,43711,43712,43714,43716,43718,43720],{"class":47,"line":17048},[45,43713,3553],{"class":51},[45,43715,31701],{"class":55},[45,43717,26143],{"class":51},[45,43719,31706],{"class":79},[45,43721,32700],{"class":55},[45,43723,43724],{"class":47,"line":17053},[45,43725,32705],{"class":337},[45,43727,43728,43730,43732],{"class":47,"line":17058},[45,43729,32710],{"class":55},[45,43731,59],{"class":51},[45,43733,32715],{"class":55},[45,43735,43736],{"class":47,"line":17063},[45,43737,32720],{"class":337},[45,43739,43740,43742,43744],{"class":47,"line":17076},[45,43741,32725],{"class":55},[45,43743,59],{"class":51},[45,43745,32730],{"class":55},[45,43747,43748],{"class":47,"line":17081},[45,43749,32736],{"class":337},[45,43751,43752],{"class":47,"line":32733},[45,43753,32742],{"class":55},[45,43755,43756],{"class":47,"line":32739},[45,43757,32748],{"class":337},[45,43759,43760],{"class":47,"line":32745},[45,43761,32754],{"class":337},[45,43763,43764,43766,43768],{"class":47,"line":32751},[45,43765,32760],{"class":55},[45,43767,59],{"class":51},[45,43769,32765],{"class":55},[45,43771,43772],{"class":47,"line":32757},[45,43773,32771],{"class":337},[45,43775,43776,43778,43780,43782,43784,43786,43788],{"class":47,"line":32768},[45,43777,32777],{"class":55},[45,43779,59],{"class":51},[45,43781,32782],{"class":55},[45,43783,32785],{"class":5366},[45,43785,59],{"class":51},[45,43787,495],{"class":79},[45,43789,139],{"class":55},[45,43791,43792],{"class":47,"line":32774},[45,43793,32797],{"class":337},[45,43795,43796,43798,43800],{"class":47,"line":32794},[45,43797,32803],{"class":55},[45,43799,59],{"class":51},[45,43801,32808],{"class":55},[45,43803,43804],{"class":47,"line":32800},[45,43805,32814],{"class":337},[45,43807,43808],{"class":47,"line":32811},[45,43809,32820],{"class":55},[45,43811,43812],{"class":47,"line":32817},[45,43813,32826],{"class":337},[45,43815,43816],{"class":47,"line":32823},[45,43817,32832],{"class":55},[45,43819,43820],{"class":47,"line":32829},[45,43821,32838],{"class":337},[45,43823,43824],{"class":47,"line":32835},[45,43825,32844],{"class":55},[45,43827,43828],{"class":47,"line":32841},[45,43829,32850],{"class":337},[45,43831,43832,43834,43836,43838,43840,43842,43844],{"class":47,"line":32847},[45,43833,32856],{"class":55},[45,43835,9627],{"class":51},[45,43837,32861],{"class":55},[45,43839,732],{"class":51},[45,43841,32866],{"class":55},[45,43843,469],{"class":79},[45,43845,139],{"class":55},[45,43847,43848],{"class":47,"line":32853},[45,43849,32876],{"class":337},[45,43851,43852,43854,43856,43858,43860],{"class":47,"line":32873},[45,43853,32882],{"class":55},[45,43855,9627],{"class":51},[45,43857,32887],{"class":55},[45,43859,3099],{"class":51},[45,43861,32892],{"class":55},[45,43863,43864],{"class":47,"line":32879},[45,43865,32898],{"class":337},[45,43867,43868,43870,43872,43874,43876],{"class":47,"line":32895},[45,43869,32904],{"class":55},[45,43871,9627],{"class":51},[45,43873,32866],{"class":55},[45,43875,469],{"class":79},[45,43877,139],{"class":55},[45,43879,43880],{"class":47,"line":32901},[45,43881,32918],{"class":337},[45,43883,43884,43886,43888,43890,43892],{"class":47,"line":32915},[45,43885,3553],{"class":51},[45,43887,32926],{"class":55},[45,43889,26143],{"class":51},[45,43891,31706],{"class":79},[45,43893,32933],{"class":55},[45,43895,43896],{"class":47,"line":32921},[45,43897,32939],{"class":337},[45,43899,43900,43902,43904],{"class":47,"line":32936},[45,43901,32710],{"class":55},[45,43903,59],{"class":51},[45,43905,32715],{"class":55},[45,43907,43908],{"class":47,"line":32942},[45,43909,32954],{"class":337},[45,43911,43912,43914,43916],{"class":47,"line":32951},[45,43913,32725],{"class":55},[45,43915,59],{"class":51},[45,43917,32730],{"class":55},[45,43919,43920],{"class":47,"line":32957},[45,43921,32969],{"class":337},[45,43923,43924],{"class":47,"line":32966},[45,43925,32975],{"class":55},[45,43927,43928],{"class":47,"line":32972},[45,43929,36456],{"class":337},[45,43931,43932,43934],{"class":47,"line":32978},[45,43933,32981],{"class":51},[45,43935,32984],{"class":55},[45,43937,43938],{"class":47,"line":32987},[45,43939,32990],{"class":337},[45,43941,43942,43944,43946],{"class":47,"line":32993},[45,43943,36471],{"class":55},[45,43945,59],{"class":51},[45,43947,32765],{"class":55},[45,43949,43950],{"class":47,"line":33004},[45,43951,33007],{"class":337},[45,43953,43954,43956,43958,43960,43962,43964,43966],{"class":47,"line":33010},[45,43955,36484],{"class":55},[45,43957,59],{"class":51},[45,43959,32782],{"class":55},[45,43961,32785],{"class":5366},[45,43963,59],{"class":51},[45,43965,495],{"class":79},[45,43967,139],{"class":55},[45,43969,43970],{"class":47,"line":33029},[45,43971,33032],{"class":337},[45,43973,43974,43976,43978],{"class":47,"line":33035},[45,43975,36505],{"class":55},[45,43977,59],{"class":51},[45,43979,32808],{"class":55},[45,43981,43982],{"class":47,"line":33046},[45,43983,33049],{"class":337},[45,43985,43986,43988,43990,43992,43994,43996,43998],{"class":47,"line":33052},[45,43987,36518],{"class":55},[45,43989,9627],{"class":51},[45,43991,36523],{"class":55},[45,43993,732],{"class":51},[45,43995,32866],{"class":55},[45,43997,469],{"class":79},[45,43999,139],{"class":55},[45,44001,44002,44004,44006,44008,44010],{"class":47,"line":33072},[45,44003,36536],{"class":55},[45,44005,9627],{"class":51},[45,44007,32887],{"class":55},[45,44009,3099],{"class":51},[45,44011,32892],{"class":55},[45,44013,44014],{"class":47,"line":33088},[45,44015,36549],{"class":337},[45,44017,44018,44020,44022,44024,44026],{"class":47,"line":33094},[45,44019,36554],{"class":55},[45,44021,9627],{"class":51},[45,44023,32866],{"class":55},[45,44025,469],{"class":79},[45,44027,139],{"class":55},[45,44029,44030],{"class":47,"line":33108},[45,44031,33111],{"class":337},[45,44033,44034],{"class":47,"line":33114},[45,44035,33117],{"class":337},[45,44037,44038,44040,44042],{"class":47,"line":33120},[45,44039,33123],{"class":55},[45,44041,861],{"class":51},[45,44043,33128],{"class":55},[45,44045,44046],{"class":47,"line":33131},[45,44047,33134],{"class":337},[45,44049,44050],{"class":47,"line":33137},[45,44051,33140],{"class":337},[45,44053,44054,44056,44058],{"class":47,"line":33143},[45,44055,33146],{"class":55},[45,44057,861],{"class":51},[45,44059,33128],{"class":55},[45,44061,44062],{"class":47,"line":33153},[45,44063,33156],{"class":337},[45,44065,44066,44068,44070],{"class":47,"line":33159},[45,44067,33162],{"class":55},[45,44069,861],{"class":51},[45,44071,33167],{"class":55},[45,44073,44074],{"class":47,"line":33170},[45,44075,33173],{"class":337},[45,44077,44078,44080,44082],{"class":47,"line":33176},[45,44079,33179],{"class":55},[45,44081,861],{"class":51},[45,44083,33167],{"class":55},[45,44085,44086],{"class":47,"line":33186},[45,44087,2550],{"emptyLinePlaceholder":207},[45,44089,44090],{"class":47,"line":33191},[45,44091,33194],{"class":337},[45,44093,44094,44096,44098,44100,44102,44104,44106,44108,44110,44112,44114,44116,44118,44120,44122,44124,44126,44128,44130,44132],{"class":47,"line":33197},[45,44095,32551],{"class":79},[45,44097,282],{"class":55},[45,44099,3742],{"class":62},[45,44101,32559],{"class":79},[45,44103,33208],{"class":62},[45,44105,1173],{"class":79},[45,44107,33213],{"class":51},[45,44109,1223],{"class":79},[45,44111,33218],{"class":62},[45,44113,1173],{"class":79},[45,44115,33213],{"class":51},[45,44117,1223],{"class":79},[45,44119,3742],{"class":62},[45,44121,33229],{"class":55},[45,44123,809],{"class":51},[45,44125,495],{"class":79},[45,44127,33236],{"class":55},[45,44129,809],{"class":51},[45,44131,495],{"class":79},[45,44133,33243],{"class":55},[45,44135,44136,44138,44140,44142,44144,44146,44148,44150,44152,44154,44156,44158,44160,44162,44164,44166,44168,44170,44172,44174],{"class":47,"line":33246},[45,44137,32551],{"class":79},[45,44139,282],{"class":55},[45,44141,3742],{"class":62},[45,44143,32559],{"class":79},[45,44145,33257],{"class":62},[45,44147,1173],{"class":79},[45,44149,33213],{"class":51},[45,44151,1223],{"class":79},[45,44153,33266],{"class":62},[45,44155,1173],{"class":79},[45,44157,33213],{"class":51},[45,44159,1223],{"class":79},[45,44161,3742],{"class":62},[45,44163,33277],{"class":55},[45,44165,809],{"class":51},[45,44167,495],{"class":79},[45,44169,33284],{"class":55},[45,44171,809],{"class":51},[45,44173,495],{"class":79},[45,44175,33243],{"class":55},[45,44177,44178],{"class":47,"line":33293},[45,44179,2550],{"emptyLinePlaceholder":207},[45,44181,44182],{"class":47,"line":33298},[45,44183,33301],{"class":337},[45,44185,44186,44188,44190,44192,44194,44196,44198],{"class":47,"line":33304},[45,44187,2647],{"class":51},[45,44189,33309],{"class":55},[45,44191,809],{"class":51},[45,44193,495],{"class":79},[45,44195,1217],{"class":55},[45,44197,1237],{"class":51},[45,44199,33320],{"class":55},[45,44201,44202],{"class":47,"line":33323},[45,44203,33326],{"class":337},[45,44205,44206,44208,44210,44212,44214,44216,44218],{"class":47,"line":33329},[45,44207,33332],{"class":55},[45,44209,320],{"class":79},[45,44211,59],{"class":51},[45,44213,33339],{"class":55},[45,44215,809],{"class":51},[45,44217,495],{"class":79},[45,44219,33346],{"class":55},[45,44221,44222],{"class":47,"line":33349},[45,44223,33352],{"class":337},[45,44225,44226],{"class":47,"line":33355},[45,44227,33358],{"class":337},[45,44229,44230,44232,44234],{"class":47,"line":33361},[45,44231,33364],{"class":55},[45,44233,59],{"class":51},[45,44235,32414],{"class":55},[45,44237,44238],{"class":47,"line":33371},[45,44239,2550],{"emptyLinePlaceholder":207},[45,44241,44242],{"class":47,"line":33376},[45,44243,33379],{"class":337},[45,44245,44246,44248,44250,44252,44254],{"class":47,"line":33382},[45,44247,33385],{"class":55},[45,44249,59],{"class":51},[45,44251,33390],{"class":55},[45,44253,809],{"class":51},[45,44255,33395],{"class":55},[45,44257,44258,44260,44262,44264,44266,44268,44270,44272,44274,44276,44278,44280,44282,44284,44286,44288,44290,44292],{"class":47,"line":33398},[45,44259,32551],{"class":79},[45,44261,282],{"class":55},[45,44263,33405],{"class":62},[45,44265,1173],{"class":79},[45,44267,33410],{"class":51},[45,44269,1223],{"class":79},[45,44271,821],{"class":62},[45,44273,1173],{"class":79},[45,44275,33410],{"class":51},[45,44277,1223],{"class":79},[45,44279,33423],{"class":62},[45,44281,33426],{"class":55},[45,44283,33429],{"class":51},[45,44285,1184],{"class":79},[45,44287,33434],{"class":55},[45,44289,605],{"class":51},[45,44291,1184],{"class":79},[45,44293,30597],{"class":55},[45,44295,44296],{"class":47,"line":33443},[45,44297,36833],{"class":337},[45,44299,44300],{"class":47,"line":33449},[45,44301,36838],{"class":337},[45,44303,44304,44306,44308],{"class":47,"line":33455},[45,44305,36843],{"class":55},[45,44307,33467],{"class":62},[45,44309,139],{"class":55},[45,44311,44312],{"class":47,"line":33461},[45,44313,33487],{"class":337},[45,44315,44316,44318,44320,44322,44324,44326],{"class":47,"line":33472},[45,44317,33493],{"class":55},[45,44319,59],{"class":51},[45,44321,33498],{"class":55},[45,44323,33501],{"class":5366},[45,44325,59],{"class":51},[45,44327,1697],{"class":55},[45,44329,44330,44332,44334,44336],{"class":47,"line":33478},[45,44331,33511],{"class":62},[45,44333,1136],{"class":55},[45,44335,33516],{"class":79},[45,44337,33519],{"class":55},[45,44339,44340,44342],{"class":47,"line":33484},[45,44341,33525],{"class":62},[45,44343,33528],{"class":55},[45,44345,44346,44348],{"class":47,"line":33490},[45,44347,33534],{"class":62},[45,44349,33537],{"class":55},[45,44351,44352,44354],{"class":47,"line":33508},[45,44353,33543],{"class":62},[45,44355,33546],{"class":55},[45,44357,44358,44360],{"class":47,"line":33522},[45,44359,33552],{"class":62},[45,44361,33555],{"class":55},[45,44363,44364],{"class":47,"line":33531},[45,44365,33561],{"class":55},[45,44367,44368],{"class":47,"line":33540},[45,44369,33567],{"class":337},[45,44371,44372,44374],{"class":47,"line":33549},[45,44373,4240],{"class":51},[45,44375,33575],{"class":55},[45,44377,44378],{"class":47,"line":33558},[45,44379,2550],{"emptyLinePlaceholder":207},[45,44381,44382],{"class":47,"line":33564},[45,44383,33586],{"class":337},[45,44385,44386,44388,44390],{"class":47,"line":33570},[45,44387,32047],{"class":51},[45,44389,33594],{"class":69},[45,44391,33597],{"class":55},[45,44393,44394],{"class":47,"line":33578},[45,44395,33603],{"class":337},[45,44397,44398,44400,44402,44404,44406,44408,44410,44412],{"class":47,"line":33583},[45,44399,33609],{"class":55},[45,44401,31793],{"class":5366},[45,44403,59],{"class":51},[45,44405,282],{"class":55},[45,44407,775],{"class":79},[45,44409,655],{"class":55},[45,44411,570],{"class":79},[45,44413,30597],{"class":55},[45,44415,44416],{"class":47,"line":33589},[45,44417,33629],{"class":337},[45,44419,44420],{"class":47,"line":33600},[45,44421,33635],{"class":337},[45,44423,44424],{"class":47,"line":33606},[45,44425,33641],{"class":337},[45,44427,44428,44430,44432,44434,44436,44438,44440],{"class":47,"line":33626},[45,44429,31827],{"class":55},[45,44431,495],{"class":79},[45,44433,655],{"class":55},[45,44435,356],{"class":79},[45,44437,655],{"class":55},[45,44439,495],{"class":79},[45,44441,139],{"class":55},[45,44443,44444],{"class":47,"line":33632},[45,44445,33664],{"class":337},[45,44447,44448],{"class":47,"line":33638},[45,44449,33670],{"class":337},[45,44451,44452],{"class":47,"line":33644},[45,44453,33676],{"class":337},[45,44455,44456],{"class":47,"line":33661},[45,44457,33682],{"class":337},[45,44459,44460],{"class":47,"line":33667},[45,44461,33688],{"class":337},[45,44463,44464,44466,44468,44470,44472,44474,44476,44478,44480],{"class":47,"line":33673},[45,44465,33694],{"class":55},[45,44467,33697],{"class":62},[45,44469,33700],{"class":55},[45,44471,33703],{"class":62},[45,44473,655],{"class":55},[45,44475,33708],{"class":5366},[45,44477,59],{"class":51},[45,44479,33713],{"class":62},[45,44481,139],{"class":55},[45,44483,44484,44486,44488,44490,44492,44494,44496,44498,44500],{"class":47,"line":33679},[45,44485,33694],{"class":55},[45,44487,33697],{"class":62},[45,44489,33725],{"class":55},[45,44491,33728],{"class":62},[45,44493,655],{"class":55},[45,44495,33708],{"class":5366},[45,44497,59],{"class":51},[45,44499,33737],{"class":62},[45,44501,139],{"class":55},[45,44503,44504],{"class":47,"line":33685},[45,44505,33745],{"class":337},[45,44507,44508],{"class":47,"line":33691},[45,44509,33751],{"class":55},[45,44511,44512],{"class":47,"line":33718},[45,44513,33757],{"class":337},[45,44515,44516,44518,44520],{"class":47,"line":33742},[45,44517,33763],{"class":55},[45,44519,33766],{"class":62},[45,44521,139],{"class":55},[45,44523,44524,44526,44528],{"class":47,"line":33748},[45,44525,33774],{"class":55},[45,44527,33777],{"class":62},[45,44529,139],{"class":55},[45,44531,44532],{"class":47,"line":33754},[45,44533,33785],{"class":337},[45,44535,44536,44538,44540,44542,44544,44546,44548],{"class":47,"line":33760},[45,44537,31827],{"class":55},[45,44539,495],{"class":79},[45,44541,655],{"class":55},[45,44543,356],{"class":79},[45,44545,655],{"class":55},[45,44547,356],{"class":79},[45,44549,139],{"class":55},[45,44551,44552,44554,44556,44558,44560,44562,44564,44566,44568],{"class":47,"line":33771},[45,44553,33694],{"class":55},[45,44555,33697],{"class":62},[45,44557,33812],{"class":55},[45,44559,33703],{"class":62},[45,44561,655],{"class":55},[45,44563,33708],{"class":5366},[45,44565,59],{"class":51},[45,44567,33823],{"class":62},[45,44569,139],{"class":55},[45,44571,44572,44574,44576,44578,44580,44582,44584,44586,44588],{"class":47,"line":33782},[45,44573,33694],{"class":55},[45,44575,33697],{"class":62},[45,44577,33835],{"class":55},[45,44579,33728],{"class":62},[45,44581,655],{"class":55},[45,44583,33708],{"class":5366},[45,44585,59],{"class":51},[45,44587,33846],{"class":62},[45,44589,139],{"class":55},[45,44591,44592],{"class":47,"line":33788},[45,44593,33854],{"class":337},[45,44595,44596],{"class":47,"line":33805},[45,44597,33751],{"class":55},[45,44599,44600,44602,44604],{"class":47,"line":33828},[45,44601,33763],{"class":55},[45,44603,33697],{"class":62},[45,44605,139],{"class":55},[45,44607,44608,44610,44612],{"class":47,"line":33851},[45,44609,33774],{"class":55},[45,44611,33876],{"class":62},[45,44613,139],{"class":55},[45,44615,44616],{"class":47,"line":33857},[45,44617,33884],{"class":55},[45,44619,44620],{"class":47,"line":33862},[45,44621,2550],{"emptyLinePlaceholder":207},[45,44623,44624],{"class":47,"line":33871},[45,44625,33895],{"class":337},[45,44627,44628,44630,44632,44634,44636],{"class":47,"line":33881},[45,44629,1682],{"class":51},[45,44631,31320],{"class":79},[45,44633,3099],{"class":51},[45,44635,31325],{"class":62},[45,44637,3889],{"class":55},[45,44639,44640],{"class":47,"line":33887},[45,44641,33914],{"class":337},[45,44643,44644,44647,44649],{"class":47,"line":33892},[45,44645,44646],{"class":55},"    GoogLeNet",[45,44648,59],{"class":51},[45,44650,44651],{"class":55},"GoogLeNet(Inception)\n",[45,44653,44654,44656,44658],{"class":47,"line":33898},[45,44655,33931],{"class":55},[45,44657,59],{"class":51},[45,44659,33936],{"class":55},[45,44661,44662,44664,44666,44669,44671,44673,44675],{"class":47,"line":33911},[45,44663,33493],{"class":55},[45,44665,59],{"class":51},[45,44667,44668],{"class":55},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[45,44670,33949],{"class":5366},[45,44672,59],{"class":51},[45,44674,1228],{"class":79},[45,44676,139],{"class":55},[45,44678,44679],{"class":47,"line":33917},[45,44680,33961],{"class":55},[233,44682,44683],{"start":1331},[169,44684,40674],{},[36,44686,44688],{"className":30478,"code":44687,"language":30480,"meta":25,"style":25},"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",[42,44689,44690,44696,44706,44716,44720,44730,44741,44745,44749,44753,44761,44777,44787,44803,44813,44827,44831,44841,44851,44861,44867,44871,44875,44883,44887,44903,44911,44915,44919,44927,44935,44939,44943,44947,44951,44957,44961,44971,44979,44987,44991,44995,44999,45007,45011,45027,45031,45035,45039,45051,45055,45067,45071,45075,45087,45091,45101,45105,45109,45121,45125,45133,45137,45141,45149,45153,45161,45165,45169,45173,45177,45181,45197,45205,45209,45213,45261,45267,45271,45281,45289,45297,45301,45305,45309,45313,45321,45325,45341,45345,45353,45361],{"__ignoreMap":25},[45,44691,44692,44694],{"class":47,"line":48},[45,44693,30492],{"class":51},[45,44695,30495],{"class":55},[45,44697,44698,44700,44702,44704],{"class":47,"line":66},[45,44699,30492],{"class":51},[45,44701,31515],{"class":55},[45,44703,31483],{"class":51},[45,44705,31520],{"class":55},[45,44707,44708,44710,44712,44714],{"class":47,"line":1331},[45,44709,30837],{"class":51},[45,44711,31498],{"class":55},[45,44713,30492],{"class":51},[45,44715,31503],{"class":55},[45,44717,44718],{"class":47,"line":1346},[45,44719,34022],{"class":337},[45,44721,44722,44724,44726,44728],{"class":47,"line":1352},[45,44723,30837],{"class":51},[45,44725,31468],{"class":55},[45,44727,30492],{"class":51},[45,44729,31473],{"class":55},[45,44731,44732,44734,44736,44738],{"class":47,"line":1366},[45,44733,30837],{"class":51},[45,44735,32014],{"class":55},[45,44737,30492],{"class":51},[45,44739,44740],{"class":55}," GoogLeNet,Inception\n",[45,44742,44743],{"class":47,"line":1372},[45,44744,2550],{"emptyLinePlaceholder":207},[45,44746,44747],{"class":47,"line":1463},[45,44748,2550],{"emptyLinePlaceholder":207},[45,44750,44751],{"class":47,"line":1469},[45,44752,34051],{"class":337},[45,44754,44755,44757,44759],{"class":47,"line":1481},[45,44756,32047],{"class":51},[45,44758,34058],{"class":69},[45,44760,32053],{"class":55},[45,44762,44763,44765,44767,44769,44771,44773,44775],{"class":47,"line":1763},[45,44764,34065],{"class":55},[45,44766,59],{"class":51},[45,44768,31555],{"class":55},[45,44770,31558],{"class":5366},[45,44772,59],{"class":51},[45,44774,31563],{"class":62},[45,44776,31566],{"class":55},[45,44778,44779,44781,44783,44785],{"class":47,"line":1768},[45,44780,34082],{"class":5366},[45,44782,59],{"class":51},[45,44784,34087],{"class":79},[45,44786,31566],{"class":55},[45,44788,44789,44791,44793,44795,44797,44799,44801],{"class":47,"line":1774},[45,44790,34094],{"class":5366},[45,44792,59],{"class":51},[45,44794,31593],{"class":55},[45,44796,31596],{"class":5366},[45,44798,59],{"class":51},[45,44800,35549],{"class":79},[45,44802,31604],{"class":55},[45,44804,44805,44807,44809,44811],{"class":47,"line":1779},[45,44806,34111],{"class":5366},[45,44808,59],{"class":51},[45,44810,31576],{"class":79},[45,44812,139],{"class":55},[45,44814,44815,44817,44819,44821,44823,44825],{"class":47,"line":1793},[45,44816,34122],{"class":55},[45,44818,59],{"class":51},[45,44820,31634],{"class":55},[45,44822,31637],{"class":5366},[45,44824,59],{"class":51},[45,44826,34133],{"class":55},[45,44828,44829],{"class":47,"line":1798},[45,44830,34138],{"class":337},[45,44832,44833,44835,44837,44839],{"class":47,"line":1804},[45,44834,34143],{"class":5366},[45,44836,59],{"class":51},[45,44838,495],{"class":79},[45,44840,31566],{"class":55},[45,44842,44843,44845,44847,44849],{"class":47,"line":1825},[45,44844,34154],{"class":5366},[45,44846,59],{"class":51},[45,44848,31576],{"class":79},[45,44850,31566],{"class":55},[45,44852,44853,44855,44857,44859],{"class":47,"line":1830},[45,44854,34165],{"class":5366},[45,44856,59],{"class":51},[45,44858,469],{"class":79},[45,44860,139],{"class":55},[45,44862,44863,44865],{"class":47,"line":1844},[45,44864,4240],{"class":51},[45,44866,34178],{"class":55},[45,44868,44869],{"class":47,"line":1849},[45,44870,2550],{"emptyLinePlaceholder":207},[45,44872,44873],{"class":47,"line":1878},[45,44874,34187],{"class":337},[45,44876,44877,44879,44881],{"class":47,"line":1883},[45,44878,32047],{"class":51},[45,44880,34194],{"class":69},[45,44882,34197],{"class":55},[45,44884,44885],{"class":47,"line":1900},[45,44886,34202],{"class":337},[45,44888,44889,44891,44893,44895,44897,44899,44901],{"class":47,"line":1905},[45,44890,31337],{"class":55},[45,44892,59],{"class":51},[45,44894,31344],{"class":62},[45,44896,1855],{"class":51},[45,44898,31349],{"class":55},[45,44900,1852],{"class":51},[45,44902,34219],{"class":62},[45,44904,44905,44907,44909],{"class":47,"line":1910},[45,44906,31389],{"class":55},[45,44908,59],{"class":51},[45,44910,32389],{"class":55},[45,44912,44913],{"class":47,"line":1915},[45,44914,2550],{"emptyLinePlaceholder":207},[45,44916,44917],{"class":47,"line":1929},[45,44918,34236],{"class":337},[45,44920,44921,44923,44925],{"class":47,"line":1934},[45,44922,34241],{"class":55},[45,44924,59],{"class":51},[45,44926,32442],{"class":79},[45,44928,44929,44931,44933],{"class":47,"line":2727},[45,44930,34250],{"class":55},[45,44932,59],{"class":51},[45,44934,3235],{"class":79},[45,44936,44937],{"class":47,"line":2741},[45,44938,2550],{"emptyLinePlaceholder":207},[45,44940,44941],{"class":47,"line":2749},[45,44942,34263],{"class":337},[45,44944,44945],{"class":47,"line":2754},[45,44946,34268],{"class":337},[45,44948,44949],{"class":47,"line":2760},[45,44950,34273],{"class":337},[45,44952,44953,44955],{"class":47,"line":2766},[45,44954,34278],{"class":51},[45,44956,32984],{"class":55},[45,44958,44959],{"class":47,"line":2771},[45,44960,34285],{"class":337},[45,44962,44963,44965,44967,44969],{"class":47,"line":8098},[45,44964,3553],{"class":51},[45,44966,34292],{"class":55},[45,44968,26143],{"class":51},[45,44970,34297],{"class":55},[45,44972,44973,44975,44977],{"class":47,"line":8122},[45,44974,34302],{"class":55},[45,44976,59],{"class":51},[45,44978,34307],{"class":55},[45,44980,44981,44983,44985],{"class":47,"line":8127},[45,44982,34312],{"class":55},[45,44984,59],{"class":51},[45,44986,34317],{"class":55},[45,44988,44989],{"class":47,"line":8133},[45,44990,34322],{"class":337},[45,44992,44993],{"class":47,"line":8160},[45,44994,32975],{"class":55},[45,44996,44997],{"class":47,"line":8165},[45,44998,34331],{"class":337},[45,45000,45001,45003,45005],{"class":47,"line":8171},[45,45002,32760],{"class":55},[45,45004,59],{"class":51},[45,45006,34340],{"class":55},[45,45008,45009],{"class":47,"line":8183},[45,45010,34345],{"class":337},[45,45012,45013,45015,45017,45019,45021,45023,45025],{"class":47,"line":8195},[45,45014,32777],{"class":55},[45,45016,59],{"class":51},[45,45018,32782],{"class":55},[45,45020,32785],{"class":5366},[45,45022,59],{"class":51},[45,45024,495],{"class":79},[45,45026,139],{"class":55},[45,45028,45029],{"class":47,"line":8207},[45,45030,34366],{"class":337},[45,45032,45033],{"class":47,"line":9866},[45,45034,34371],{"class":337},[45,45036,45037],{"class":47,"line":9890},[45,45038,34376],{"class":337},[45,45040,45041,45043,45045,45047,45049],{"class":47,"line":9913},[45,45042,34381],{"class":55},[45,45044,9627],{"class":51},[45,45046,32887],{"class":55},[45,45048,3099],{"class":51},[45,45050,34390],{"class":55},[45,45052,45053],{"class":47,"line":9937},[45,45054,34395],{"class":337},[45,45056,45057,45059,45061,45063,45065],{"class":47,"line":9942},[45,45058,34400],{"class":55},[45,45060,9627],{"class":51},[45,45062,34405],{"class":55},[45,45064,469],{"class":79},[45,45066,139],{"class":55},[45,45068,45069],{"class":47,"line":9947},[45,45070,2550],{"emptyLinePlaceholder":207},[45,45072,45073],{"class":47,"line":9952},[45,45074,34418],{"class":337},[45,45076,45077,45079,45081,45083,45085],{"class":47,"line":9961},[45,45078,34423],{"class":55},[45,45080,59],{"class":51},[45,45082,34428],{"class":55},[45,45084,861],{"class":51},[45,45086,34433],{"class":55},[45,45088,45089],{"class":47,"line":9966},[45,45090,34438],{"class":337},[45,45092,45093,45095,45097,45099],{"class":47,"line":9972},[45,45094,32551],{"class":79},[45,45096,282],{"class":55},[45,45098,34447],{"class":62},[45,45100,34450],{"class":55},[45,45102,45103],{"class":47,"line":9993},[45,45104,2550],{"emptyLinePlaceholder":207},[45,45106,45107],{"class":47,"line":9999},[45,45108,34459],{"class":337},[45,45110,45111,45113,45115,45117,45119],{"class":47,"line":10013},[45,45112,1682],{"class":51},[45,45114,31320],{"class":79},[45,45116,3099],{"class":51},[45,45118,31325],{"class":62},[45,45120,3889],{"class":55},[45,45122,45123],{"class":47,"line":10019},[45,45124,34476],{"class":337},[45,45126,45127,45129,45131],{"class":47,"line":10046},[45,45128,31389],{"class":55},[45,45130,59],{"class":51},[45,45132,44651],{"class":55},[45,45134,45135],{"class":47,"line":10055},[45,45136,34489],{"class":337},[45,45138,45139],{"class":47,"line":10061},[45,45140,34494],{"class":337},[45,45142,45143,45145,45147],{"class":47,"line":10069},[45,45144,34499],{"class":55},[45,45146,34502],{"class":62},[45,45148,30597],{"class":55},[45,45150,45151],{"class":47,"line":10074},[45,45152,34509],{"class":337},[45,45154,45155,45157,45159],{"class":47,"line":16753},[45,45156,34122],{"class":55},[45,45158,59],{"class":51},[45,45160,34518],{"class":55},[45,45162,45163],{"class":47,"line":16759},[45,45164,34523],{"class":337},[45,45166,45167],{"class":47,"line":16782},[45,45168,34528],{"class":55},[45,45170,45171],{"class":47,"line":16788},[45,45172,2550],{"emptyLinePlaceholder":207},[45,45174,45175],{"class":47,"line":16811},[45,45176,34537],{"class":337},[45,45178,45179],{"class":47,"line":16825},[45,45180,34542],{"class":337},[45,45182,45183,45185,45187,45189,45191,45193,45195],{"class":47,"line":16845},[45,45184,31337],{"class":55},[45,45186,59],{"class":51},[45,45188,31344],{"class":62},[45,45190,1855],{"class":51},[45,45192,31349],{"class":55},[45,45194,1852],{"class":51},[45,45196,34219],{"class":62},[45,45198,45199,45201,45203],{"class":47,"line":16851},[45,45200,31389],{"class":55},[45,45202,59],{"class":51},[45,45204,32389],{"class":55},[45,45206,45207],{"class":47,"line":16862},[45,45208,34571],{"class":337},[45,45210,45211],{"class":47,"line":16885},[45,45212,34576],{"class":337},[45,45214,45215,45217,45219,45221,45223,45225,45227,45229,45231,45233,45235,45237,45239,45241,45243,45245,45247,45249,45251,45253,45255,45257,45259],{"class":47,"line":16907},[45,45216,34581],{"class":55},[45,45218,59],{"class":51},[45,45220,1167],{"class":55},[45,45222,34588],{"class":62},[45,45224,655],{"class":55},[45,45226,34593],{"class":62},[45,45228,655],{"class":55},[45,45230,34598],{"class":62},[45,45232,655],{"class":55},[45,45234,34603],{"class":62},[45,45236,655],{"class":55},[45,45238,34608],{"class":62},[45,45240,655],{"class":55},[45,45242,34613],{"class":62},[45,45244,655],{"class":55},[45,45246,34618],{"class":62},[45,45248,655],{"class":55},[45,45250,34623],{"class":62},[45,45252,655],{"class":55},[45,45254,34628],{"class":62},[45,45256,655],{"class":55},[45,45258,34633],{"class":62},[45,45260,33346],{"class":55},[45,45262,45263,45265],{"class":47,"line":16912},[45,45264,34278],{"class":51},[45,45266,32984],{"class":55},[45,45268,45269],{"class":47,"line":16918},[45,45270,34646],{"class":337},[45,45272,45273,45275,45277,45279],{"class":47,"line":16932},[45,45274,3553],{"class":51},[45,45276,34653],{"class":55},[45,45278,26143],{"class":51},[45,45280,34297],{"class":55},[45,45282,45283,45285,45287],{"class":47,"line":16945},[45,45284,32710],{"class":55},[45,45286,59],{"class":51},[45,45288,32715],{"class":55},[45,45290,45291,45293,45295],{"class":47,"line":16950},[45,45292,32725],{"class":55},[45,45294,59],{"class":51},[45,45296,32730],{"class":55},[45,45298,45299],{"class":47,"line":16964},[45,45300,2550],{"emptyLinePlaceholder":207},[45,45302,45303],{"class":47,"line":16969},[45,45304,34682],{"class":337},[45,45306,45307],{"class":47,"line":16975},[45,45308,32975],{"class":55},[45,45310,45311],{"class":47,"line":16980},[45,45312,34691],{"class":337},[45,45314,45315,45317,45319],{"class":47,"line":16994},[45,45316,32760],{"class":55},[45,45318,59],{"class":51},[45,45320,32765],{"class":55},[45,45322,45323],{"class":47,"line":16999},[45,45324,34704],{"class":337},[45,45326,45327,45329,45331,45333,45335,45337,45339],{"class":47,"line":17004},[45,45328,32777],{"class":55},[45,45330,59],{"class":51},[45,45332,32782],{"class":55},[45,45334,32785],{"class":5366},[45,45336,59],{"class":51},[45,45338,495],{"class":79},[45,45340,139],{"class":55},[45,45342,45343],{"class":47,"line":17018},[45,45344,34725],{"class":337},[45,45346,45347,45349,45351],{"class":47,"line":17030},[45,45348,34730],{"class":55},[45,45350,59],{"class":51},[45,45352,34735],{"class":55},[45,45354,45355,45357,45359],{"class":47,"line":17035},[45,45356,34740],{"class":55},[45,45358,59],{"class":51},[45,45360,34745],{"class":55},[45,45362,45363,45365,45367,45369,45371,45373,45375,45377],{"class":47,"line":17048},[45,45364,34750],{"class":79},[45,45366,282],{"class":55},[45,45368,34755],{"class":62},[45,45370,34758],{"class":55},[45,45372,34761],{"class":62},[45,45374,655],{"class":55},[45,45376,34766],{"class":62},[45,45378,34769],{"class":55},[249,45380,45382],{"id":45381},"_24训练自己的数据集","2.4.训练自己的数据集",[20,45384,45385],{},"猫狗分类任务",[20,45387,45388],{},"划分数据集和验证集",[36,45390,45392],{"className":30478,"code":45391,"language":30480,"meta":25,"style":25},"# 创建脚本，用于划分数据集和验证集\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",[42,45393,45394,45399,45406,45411,45422,45429,45433,45443,45457,45466,45470,45475,45485,45505,45509,45514,45524,45535,45548,45552,45557,45566,45576,45587,45591,45596,45606,45610,45615,45620,45625,45630,45635,45639,45649,45676,45689,45701,45728,45733,45738,45752,45757,45769,45784,45799,45807,45811,45816,45822,45834,45847,45852,45857,45862,45912,45918,45922],{"__ignoreMap":25},[45,45395,45396],{"class":47,"line":48},[45,45397,45398],{"class":337},"# 创建脚本，用于划分数据集和验证集\n",[45,45400,45401,45403],{"class":47,"line":66},[45,45402,30492],{"class":51},[45,45404,45405],{"class":55}," os\n",[45,45407,45408],{"class":47,"line":1331},[45,45409,45410],{"class":337},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[45,45412,45413,45415,45418,45420],{"class":47,"line":1346},[45,45414,30837],{"class":51},[45,45416,45417],{"class":55}," shutil ",[45,45419,30492],{"class":51},[45,45421,31922],{"class":55},[45,45423,45424,45426],{"class":47,"line":1352},[45,45425,30492],{"class":51},[45,45427,45428],{"class":55}," random\n",[45,45430,45431],{"class":47,"line":1366},[45,45432,2550],{"emptyLinePlaceholder":207},[45,45434,45435,45437,45440],{"class":47,"line":1372},[45,45436,32047],{"class":51},[45,45438,45439],{"class":69}," mkfile",[45,45441,45442],{"class":55},"(file):\n",[45,45444,45445,45447,45449,45452,45455],{"class":47,"line":1463},[45,45446,3251],{"class":51},[45,45448,39030],{"class":51},[45,45450,45451],{"class":55}," os.path.exists(",[45,45453,45454],{"class":5366},"file",[45,45456,30886],{"class":55},[45,45458,45459,45462,45464],{"class":47,"line":1469},[45,45460,45461],{"class":55},"        os.makedirs(",[45,45463,45454],{"class":5366},[45,45465,139],{"class":55},[45,45467,45468],{"class":47,"line":1481},[45,45469,2550],{"emptyLinePlaceholder":207},[45,45471,45472],{"class":47,"line":1763},[45,45473,45474],{"class":337},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[45,45476,45477,45480,45482],{"class":47,"line":1768},[45,45478,45479],{"class":55},"file_path",[45,45481,59],{"class":51},[45,45483,45484],{"class":62},"'data_cat_dog'\n",[45,45486,45487,45490,45492,45495,45497,45500,45502],{"class":47,"line":1774},[45,45488,45489],{"class":55},"flower_class",[45,45491,59],{"class":51},[45,45493,45494],{"class":55},"[cla ",[45,45496,3175],{"class":51},[45,45498,45499],{"class":55}," cla ",[45,45501,26143],{"class":51},[45,45503,45504],{"class":55}," os.listdir(file_path)]\n",[45,45506,45507],{"class":47,"line":1779},[45,45508,2550],{"emptyLinePlaceholder":207},[45,45510,45511],{"class":47,"line":1793},[45,45512,45513],{"class":337},"# 创建训练集train文件夹\n",[45,45515,45516,45519,45522],{"class":47,"line":1798},[45,45517,45518],{"class":55},"mkfile(",[45,45520,45521],{"class":62},"'data\u002Ftrain'",[45,45523,139],{"class":55},[45,45525,45526,45528,45530,45532],{"class":47,"line":1804},[45,45527,3175],{"class":51},[45,45529,45499],{"class":55},[45,45531,26143],{"class":51},[45,45533,45534],{"class":55}," flower_class:\n",[45,45536,45537,45540,45543,45545],{"class":47,"line":1825},[45,45538,45539],{"class":55},"    mkfile(",[45,45541,45542],{"class":62},"'data\u002Ftrain\u002F'",[45,45544,758],{"class":51},[45,45546,45547],{"class":55},"cla)\n",[45,45549,45550],{"class":47,"line":1830},[45,45551,2550],{"emptyLinePlaceholder":207},[45,45553,45554],{"class":47,"line":1844},[45,45555,45556],{"class":337},"# 创建验证集val文件夹\n",[45,45558,45559,45561,45564],{"class":47,"line":1849},[45,45560,45518],{"class":55},[45,45562,45563],{"class":62},"'data\u002Ftest'",[45,45565,139],{"class":55},[45,45567,45568,45570,45572,45574],{"class":47,"line":1878},[45,45569,3175],{"class":51},[45,45571,45499],{"class":55},[45,45573,26143],{"class":51},[45,45575,45534],{"class":55},[45,45577,45578,45580,45583,45585],{"class":47,"line":1883},[45,45579,45539],{"class":55},[45,45581,45582],{"class":62},"'data\u002Ftest\u002F'",[45,45584,758],{"class":51},[45,45586,45547],{"class":55},[45,45588,45589],{"class":47,"line":1900},[45,45590,2550],{"emptyLinePlaceholder":207},[45,45592,45593],{"class":47,"line":1905},[45,45594,45595],{"class":337},"# 划分比例，训练集：测试集=9：1\n",[45,45597,45598,45601,45603],{"class":47,"line":1910},[45,45599,45600],{"class":55},"split_rate",[45,45602,59],{"class":51},[45,45604,45605],{"class":79},"0.1\n",[45,45607,45608],{"class":47,"line":1915},[45,45609,2550],{"emptyLinePlaceholder":207},[45,45611,45612],{"class":47,"line":1929},[45,45613,45614],{"class":337},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[45,45616,45617],{"class":47,"line":1934},[45,45618,45619],{"class":337},"# cla_path：当前类别的原始图片路径\n",[45,45621,45622],{"class":47,"line":2727},[45,45623,45624],{"class":337},"# images：当前类别下所有图片的文件名列表\n",[45,45626,45627],{"class":47,"line":2741},[45,45628,45629],{"class":337},"# num：该类别图片总数\n",[45,45631,45632],{"class":47,"line":2749},[45,45633,45634],{"class":337},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[45,45636,45637],{"class":47,"line":2754},[45,45638,2550],{"emptyLinePlaceholder":207},[45,45640,45641,45643,45645,45647],{"class":47,"line":2760},[45,45642,3175],{"class":51},[45,45644,45499],{"class":55},[45,45646,26143],{"class":51},[45,45648,45534],{"class":55},[45,45650,45651,45654,45656,45659,45661,45664,45667,45669,45671,45673],{"class":47,"line":2766},[45,45652,45653],{"class":55},"    cla_path ",[45,45655,59],{"class":51},[45,45657,45658],{"class":55}," file_path ",[45,45660,758],{"class":51},[45,45662,45663],{"class":62}," '\u002F'",[45,45665,45666],{"class":51}," +",[45,45668,45499],{"class":55},[45,45670,758],{"class":51},[45,45672,45663],{"class":62},[45,45674,45675],{"class":337},"  # 某一类别的子目录\n",[45,45677,45678,45681,45683,45686],{"class":47,"line":2771},[45,45679,45680],{"class":55},"    images ",[45,45682,59],{"class":51},[45,45684,45685],{"class":55}," os.listdir(cla_path)  ",[45,45687,45688],{"class":337},"# iamges 列表存储了该目录下所有图像的名称\n",[45,45690,45691,45694,45696,45698],{"class":47,"line":8098},[45,45692,45693],{"class":55},"    num ",[45,45695,59],{"class":51},[45,45697,7481],{"class":79},[45,45699,45700],{"class":55},"(images)\n",[45,45702,45703,45706,45708,45711,45713,45715,45717,45720,45722,45725],{"class":47,"line":8122},[45,45704,45705],{"class":55},"    eval_index ",[45,45707,59],{"class":51},[45,45709,45710],{"class":55}," random.sample(images, ",[45,45712,770],{"class":5366},[45,45714,59],{"class":51},[45,45716,285],{"class":79},[45,45718,45719],{"class":55},"(num ",[45,45721,732],{"class":51},[45,45723,45724],{"class":55}," split_rate))  ",[45,45726,45727],{"class":337},"# 从images列表中随机抽取 k 个图像名称\n",[45,45729,45730],{"class":47,"line":8127},[45,45731,45732],{"class":337},"    # 遍历该类别下的所有图片\n",[45,45734,45735],{"class":47,"line":8133},[45,45736,45737],{"class":337},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[45,45739,45740,45742,45745,45747,45749],{"class":47,"line":8160},[45,45741,3351],{"class":51},[45,45743,45744],{"class":55}," index, image ",[45,45746,26143],{"class":51},[45,45748,31706],{"class":79},[45,45750,45751],{"class":55},"(images):\n",[45,45753,45754],{"class":47,"line":8165},[45,45755,45756],{"class":337},"        # eval_index 中保存验证集val的图像名称\n",[45,45758,45759,45761,45764,45766],{"class":47,"line":8171},[45,45760,2647],{"class":51},[45,45762,45763],{"class":55}," image ",[45,45765,26143],{"class":51},[45,45767,45768],{"class":55}," eval_index:\n",[45,45770,45771,45774,45776,45779,45781],{"class":47,"line":8183},[45,45772,45773],{"class":55},"            image_path ",[45,45775,59],{"class":51},[45,45777,45778],{"class":55}," cla_path ",[45,45780,758],{"class":51},[45,45782,45783],{"class":55}," image\n",[45,45785,45786,45789,45791,45794,45796],{"class":47,"line":8195},[45,45787,45788],{"class":55},"            new_path ",[45,45790,59],{"class":51},[45,45792,45793],{"class":62}," 'data\u002Ftest\u002F'",[45,45795,45666],{"class":51},[45,45797,45798],{"class":55}," cla\n",[45,45800,45801,45804],{"class":47,"line":8207},[45,45802,45803],{"class":55},"            copy(image_path, new_path)  ",[45,45805,45806],{"class":337},"# 将选中的图像复制到新路径\n",[45,45808,45809],{"class":47,"line":9866},[45,45810,2550],{"emptyLinePlaceholder":207},[45,45812,45813],{"class":47,"line":9890},[45,45814,45815],{"class":337},"        # 其余的图像保存在训练集train中\n",[45,45817,45818,45820],{"class":47,"line":9913},[45,45819,2684],{"class":51},[45,45821,3889],{"class":55},[45,45823,45824,45826,45828,45830,45832],{"class":47,"line":9937},[45,45825,45773],{"class":55},[45,45827,59],{"class":51},[45,45829,45778],{"class":55},[45,45831,758],{"class":51},[45,45833,45783],{"class":55},[45,45835,45836,45838,45840,45843,45845],{"class":47,"line":9942},[45,45837,45788],{"class":55},[45,45839,59],{"class":51},[45,45841,45842],{"class":62}," 'data\u002Ftrain\u002F'",[45,45844,45666],{"class":51},[45,45846,45798],{"class":55},[45,45848,45849],{"class":47,"line":9947},[45,45850,45851],{"class":55},"            copy(image_path, new_path)\n",[45,45853,45854],{"class":47,"line":9952},[45,45855,45856],{"class":337},"            # 打印进度条信息\n",[45,45858,45859],{"class":47,"line":9961},[45,45860,45861],{"class":337},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[45,45863,45864,45866,45868,45870,45873,45875,45877,45880,45882,45884,45886,45889,45892,45894,45896,45899,45902,45904,45906,45909],{"class":47,"line":9966},[45,45865,32551],{"class":79},[45,45867,282],{"class":55},[45,45869,89],{"class":62},[45,45871,45872],{"class":79},"\\r",[45,45874,1167],{"class":62},[45,45876,32559],{"class":79},[45,45878,45879],{"class":62},"] processing [",[45,45881,32559],{"class":79},[45,45883,861],{"class":62},[45,45885,32559],{"class":79},[45,45887,45888],{"class":62},"]\"",[45,45890,45891],{"class":55},".format(cla, index ",[45,45893,758],{"class":51},[45,45895,136],{"class":79},[45,45897,45898],{"class":55},", num), ",[45,45900,45901],{"class":5366},"end",[45,45903,59],{"class":51},[45,45905,7802],{"class":62},[45,45907,45908],{"class":55},")  ",[45,45910,45911],{"class":337},"# processing bar\n",[45,45913,45914,45916],{"class":47,"line":9972},[45,45915,31399],{"class":79},[45,45917,2126],{"class":55},[45,45919,45920],{"class":47,"line":9993},[45,45921,2550],{"emptyLinePlaceholder":207},[45,45923,45924,45926,45928,45931],{"class":47,"line":9999},[45,45925,30515],{"class":79},[45,45927,282],{"class":55},[45,45929,45930],{"class":62},"\"processing done!\"",[45,45932,139],{"class":55},[20,45934,45935],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22147,45937,45939],{"id":45938},"_242模型代码","2.4.2.模型代码",[20,45941,45942],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[36,45944,45946],{"className":30478,"code":45945,"language":30480,"meta":25,"style":25},"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",[42,45947,45948,45954,45964,45974,45978,45994,46002,46016,46026,46030,46060,46064,46098,46144,46148,46182,46228,46232,46236,46270,46300,46304,46312,46326,46348,46370,46388,46392,46406,46410,46414,46430,46434,46442,46456,46466,46510,46514,46542,46546,46556,46584,46588,46624,46628,46656,46660,46670,46702,46734,46762,46766,46776,46808,46840,46872,46904,46936,46964,46968,46978,47010,47042,47054,47058,47070,47074,47078,47090,47098,47118,47122,47126,47130,47134,47138,47142,47156,47164,47172,47184,47198,47206,47210,47218,47228,47238,47248,47258,47268,47274,47278,47282,47294,47314,47322],{"__ignoreMap":25},[45,45949,45950,45952],{"class":47,"line":48},[45,45951,30492],{"class":51},[45,45953,30495],{"class":55},[45,45955,45956,45958,45960,45962],{"class":47,"line":66},[45,45957,30837],{"class":51},[45,45959,30840],{"class":55},[45,45961,30492],{"class":51},[45,45963,30845],{"class":55},[45,45965,45966,45968,45970,45972],{"class":47,"line":1331},[45,45967,30837],{"class":51},[45,45969,30857],{"class":55},[45,45971,30492],{"class":51},[45,45973,30862],{"class":55},[45,45975,45976],{"class":47,"line":1346},[45,45977,2550],{"emptyLinePlaceholder":207},[45,45979,45980,45982,45984,45986,45988,45990,45992],{"class":47,"line":1352},[45,45981,14843],{"class":51},[45,45983,41593],{"class":69},[45,45985,282],{"class":55},[45,45987,30878],{"class":69},[45,45989,835],{"class":55},[45,45991,30883],{"class":69},[45,45993,30886],{"class":55},[45,45995,45996,45998,46000],{"class":47,"line":1366},[45,45997,30901],{"class":51},[45,45999,30904],{"class":79},[45,46001,41612],{"class":55},[45,46003,46004,46006,46008,46010,46012,46014],{"class":47,"line":1372},[45,46005,30917],{"class":79},[45,46007,41619],{"class":55},[45,46009,30923],{"class":79},[45,46011,30926],{"class":55},[45,46013,30929],{"class":79},[45,46015,2126],{"class":55},[45,46017,46018,46020,46022,46024],{"class":47,"line":1463},[45,46019,30945],{"class":79},[45,46021,34871],{"class":55},[45,46023,59],{"class":51},[45,46025,34876],{"class":55},[45,46027,46028],{"class":47,"line":1469},[45,46029,41642],{"class":337},[45,46031,46032,46034,46036,46038,46040,46042,46044,46046,46048,46050,46052,46054,46056,46058],{"class":47,"line":1481},[45,46033,30945],{"class":79},[45,46035,41649],{"class":55},[45,46037,59],{"class":51},[45,46039,30953],{"class":55},[45,46041,30956],{"class":5366},[45,46043,59],{"class":51},[45,46045,41660],{"class":55},[45,46047,30965],{"class":5366},[45,46049,59],{"class":51},[45,46051,41667],{"class":55},[45,46053,30974],{"class":5366},[45,46055,59],{"class":51},[45,46057,495],{"class":79},[45,46059,139],{"class":55},[45,46061,46062],{"class":47,"line":1763},[45,46063,41680],{"class":337},[45,46065,46066,46068,46070,46072,46074,46076,46078,46080,46082,46084,46086,46088,46090,46092,46094,46096],{"class":47,"line":1768},[45,46067,30945],{"class":79},[45,46069,41687],{"class":55},[45,46071,59],{"class":51},[45,46073,30953],{"class":55},[45,46075,30956],{"class":5366},[45,46077,59],{"class":51},[45,46079,41660],{"class":55},[45,46081,30965],{"class":5366},[45,46083,59],{"class":51},[45,46085,41704],{"class":55},[45,46087,469],{"class":79},[45,46089,41709],{"class":55},[45,46091,30974],{"class":5366},[45,46093,59],{"class":51},[45,46095,495],{"class":79},[45,46097,139],{"class":55},[45,46099,46100,46102,46104,46106,46108,46110,46112,46114,46116,46118,46120,46122,46124,46126,46128,46130,46132,46134,46136,46138,46140,46142],{"class":47,"line":1774},[45,46101,30945],{"class":79},[45,46103,41724],{"class":55},[45,46105,59],{"class":51},[45,46107,30953],{"class":55},[45,46109,30956],{"class":5366},[45,46111,59],{"class":51},[45,46113,41704],{"class":55},[45,46115,469],{"class":79},[45,46117,41709],{"class":55},[45,46119,30965],{"class":5366},[45,46121,59],{"class":51},[45,46123,41704],{"class":55},[45,46125,495],{"class":79},[45,46127,41709],{"class":55},[45,46129,30974],{"class":5366},[45,46131,59],{"class":51},[45,46133,350],{"class":79},[45,46135,655],{"class":55},[45,46137,30983],{"class":5366},[45,46139,59],{"class":51},[45,46141,495],{"class":79},[45,46143,139],{"class":55},[45,46145,46146],{"class":47,"line":1779},[45,46147,41769],{"class":337},[45,46149,46150,46152,46154,46156,46158,46160,46162,46164,46166,46168,46170,46172,46174,46176,46178,46180],{"class":47,"line":1793},[45,46151,30945],{"class":79},[45,46153,41776],{"class":55},[45,46155,59],{"class":51},[45,46157,30953],{"class":55},[45,46159,30956],{"class":5366},[45,46161,59],{"class":51},[45,46163,41660],{"class":55},[45,46165,30965],{"class":5366},[45,46167,59],{"class":51},[45,46169,41793],{"class":55},[45,46171,469],{"class":79},[45,46173,41709],{"class":55},[45,46175,30974],{"class":5366},[45,46177,59],{"class":51},[45,46179,495],{"class":79},[45,46181,139],{"class":55},[45,46183,46184,46186,46188,46190,46192,46194,46196,46198,46200,46202,46204,46206,46208,46210,46212,46214,46216,46218,46220,46222,46224,46226],{"class":47,"line":1798},[45,46185,30945],{"class":79},[45,46187,41812],{"class":55},[45,46189,59],{"class":51},[45,46191,30953],{"class":55},[45,46193,30956],{"class":5366},[45,46195,59],{"class":51},[45,46197,41793],{"class":55},[45,46199,469],{"class":79},[45,46201,41709],{"class":55},[45,46203,30965],{"class":5366},[45,46205,59],{"class":51},[45,46207,41793],{"class":55},[45,46209,495],{"class":79},[45,46211,41709],{"class":55},[45,46213,30974],{"class":5366},[45,46215,59],{"class":51},[45,46217,596],{"class":79},[45,46219,655],{"class":55},[45,46221,30983],{"class":5366},[45,46223,59],{"class":51},[45,46225,356],{"class":79},[45,46227,139],{"class":55},[45,46229,46230],{"class":47,"line":1804},[45,46231,41857],{"class":337},[45,46233,46234],{"class":47,"line":1825},[45,46235,41862],{"class":337},[45,46237,46238,46240,46242,46244,46246,46248,46250,46252,46254,46256,46258,46260,46262,46264,46266,46268],{"class":47,"line":1830},[45,46239,30945],{"class":79},[45,46241,41869],{"class":55},[45,46243,59],{"class":51},[45,46245,34929],{"class":55},[45,46247,30974],{"class":5366},[45,46249,59],{"class":51},[45,46251,350],{"class":79},[45,46253,655],{"class":55},[45,46255,31029],{"class":5366},[45,46257,59],{"class":51},[45,46259,495],{"class":79},[45,46261,655],{"class":55},[45,46263,30983],{"class":5366},[45,46265,59],{"class":51},[45,46267,495],{"class":79},[45,46269,139],{"class":55},[45,46271,46272,46274,46276,46278,46280,46282,46284,46286,46288,46290,46292,46294,46296,46298],{"class":47,"line":1844},[45,46273,30945],{"class":79},[45,46275,41904],{"class":55},[45,46277,59],{"class":51},[45,46279,30953],{"class":55},[45,46281,30956],{"class":5366},[45,46283,59],{"class":51},[45,46285,41660],{"class":55},[45,46287,30965],{"class":5366},[45,46289,59],{"class":51},[45,46291,41921],{"class":55},[45,46293,30974],{"class":5366},[45,46295,59],{"class":51},[45,46297,495],{"class":79},[45,46299,139],{"class":55},[45,46301,46302],{"class":47,"line":1849},[45,46303,2550],{"emptyLinePlaceholder":207},[45,46305,46306,46308,46310],{"class":47,"line":1878},[45,46307,30901],{"class":51},[45,46309,31193],{"class":69},[45,46311,31196],{"class":55},[45,46313,46314,46316,46318,46320,46322,46324],{"class":47,"line":1883},[45,46315,41946],{"class":55},[45,46317,59],{"class":51},[45,46319,30923],{"class":79},[45,46321,35284],{"class":55},[45,46323,30923],{"class":79},[45,46325,41957],{"class":55},[45,46327,46328,46330,46332,46334,46336,46338,46340,46342,46344,46346],{"class":47,"line":1900},[45,46329,7235],{"class":55},[45,46331,59],{"class":51},[45,46333,30923],{"class":79},[45,46335,35284],{"class":55},[45,46337,30923],{"class":79},[45,46339,41972],{"class":55},[45,46341,30923],{"class":79},[45,46343,35284],{"class":55},[45,46345,30923],{"class":79},[45,46347,41981],{"class":55},[45,46349,46350,46352,46354,46356,46358,46360,46362,46364,46366,46368],{"class":47,"line":1905},[45,46351,41986],{"class":55},[45,46353,59],{"class":51},[45,46355,30923],{"class":79},[45,46357,35284],{"class":55},[45,46359,30923],{"class":79},[45,46361,41997],{"class":55},[45,46363,30923],{"class":79},[45,46365,35284],{"class":55},[45,46367,30923],{"class":79},[45,46369,42006],{"class":55},[45,46371,46372,46374,46376,46378,46380,46382,46384,46386],{"class":47,"line":1910},[45,46373,42011],{"class":55},[45,46375,59],{"class":51},[45,46377,30923],{"class":79},[45,46379,35284],{"class":55},[45,46381,30923],{"class":79},[45,46383,42022],{"class":55},[45,46385,30923],{"class":79},[45,46387,42027],{"class":55},[45,46389,46390],{"class":47,"line":1915},[45,46391,42032],{"class":337},[45,46393,46394,46396,46398,46400,46402,46404],{"class":47,"line":1929},[45,46395,14901],{"class":51},[45,46397,42039],{"class":55},[45,46399,32785],{"class":5366},[45,46401,59],{"class":51},[45,46403,495],{"class":79},[45,46405,139],{"class":55},[45,46407,46408],{"class":47,"line":1934},[45,46409,2550],{"emptyLinePlaceholder":207},[45,46411,46412],{"class":47,"line":2727},[45,46413,42060],{"class":337},[45,46415,46416,46418,46420,46422,46424,46426,46428],{"class":47,"line":2741},[45,46417,14843],{"class":51},[45,46419,42067],{"class":69},[45,46421,282],{"class":55},[45,46423,30878],{"class":69},[45,46425,835],{"class":55},[45,46427,30883],{"class":69},[45,46429,30886],{"class":55},[45,46431,46432],{"class":47,"line":2749},[45,46433,42082],{"class":337},[45,46435,46436,46438,46440],{"class":47,"line":2754},[45,46437,30901],{"class":51},[45,46439,30904],{"class":79},[45,46441,42091],{"class":55},[45,46443,46444,46446,46448,46450,46452,46454],{"class":47,"line":2760},[45,46445,30917],{"class":79},[45,46447,42098],{"class":55},[45,46449,30923],{"class":79},[45,46451,30926],{"class":55},[45,46453,30929],{"class":79},[45,46455,2126],{"class":55},[45,46457,46458,46460,46462,46464],{"class":47,"line":2766},[45,46459,30945],{"class":79},[45,46461,42113],{"class":55},[45,46463,59],{"class":51},[45,46465,38109],{"class":55},[45,46467,46468,46470,46472,46474,46476,46478,46480,46482,46484,46486,46488,46490,46492,46494,46496,46498,46500,46502,46504,46506,46508],{"class":47,"line":2771},[45,46469,38114],{"class":55},[45,46471,30956],{"class":5366},[45,46473,59],{"class":51},[45,46475,350],{"class":79},[45,46477,655],{"class":55},[45,46479,30965],{"class":5366},[45,46481,59],{"class":51},[45,46483,481],{"class":79},[45,46485,655],{"class":55},[45,46487,30974],{"class":5366},[45,46489,59],{"class":51},[45,46491,646],{"class":79},[45,46493,655],{"class":55},[45,46495,31029],{"class":5366},[45,46497,59],{"class":51},[45,46499,356],{"class":79},[45,46501,655],{"class":55},[45,46503,30983],{"class":5366},[45,46505,59],{"class":51},[45,46507,350],{"class":79},[45,46509,38147],{"class":55},[45,46511,46512],{"class":47,"line":8098},[45,46513,38152],{"class":55},[45,46515,46516,46518,46520,46522,46524,46526,46528,46530,46532,46534,46536,46538,46540],{"class":47,"line":8122},[45,46517,38197],{"class":55},[45,46519,30974],{"class":5366},[45,46521,59],{"class":51},[45,46523,350],{"class":79},[45,46525,655],{"class":55},[45,46527,31029],{"class":5366},[45,46529,59],{"class":51},[45,46531,356],{"class":79},[45,46533,655],{"class":55},[45,46535,30983],{"class":5366},[45,46537,59],{"class":51},[45,46539,495],{"class":79},[45,46541,139],{"class":55},[45,46543,46544],{"class":47,"line":8127},[45,46545,38226],{"class":55},[45,46547,46548,46550,46552,46554],{"class":47,"line":8133},[45,46549,30945],{"class":79},[45,46551,42204],{"class":55},[45,46553,59],{"class":51},[45,46555,38109],{"class":55},[45,46557,46558,46560,46562,46564,46566,46568,46570,46572,46574,46576,46578,46580,46582],{"class":47,"line":8160},[45,46559,38114],{"class":55},[45,46561,30956],{"class":5366},[45,46563,59],{"class":51},[45,46565,481],{"class":79},[45,46567,655],{"class":55},[45,46569,30965],{"class":5366},[45,46571,59],{"class":51},[45,46573,481],{"class":79},[45,46575,655],{"class":55},[45,46577,30974],{"class":5366},[45,46579,59],{"class":51},[45,46581,495],{"class":79},[45,46583,38147],{"class":55},[45,46585,46586],{"class":47,"line":8165},[45,46587,38152],{"class":55},[45,46589,46590,46592,46594,46596,46598,46600,46602,46604,46606,46608,46610,46612,46614,46616,46618,46620,46622],{"class":47,"line":8171},[45,46591,38114],{"class":55},[45,46593,30956],{"class":5366},[45,46595,59],{"class":51},[45,46597,481],{"class":79},[45,46599,655],{"class":55},[45,46601,30965],{"class":5366},[45,46603,59],{"class":51},[45,46605,42259],{"class":79},[45,46607,655],{"class":55},[45,46609,30974],{"class":5366},[45,46611,59],{"class":51},[45,46613,350],{"class":79},[45,46615,655],{"class":55},[45,46617,30983],{"class":5366},[45,46619,59],{"class":51},[45,46621,495],{"class":79},[45,46623,38147],{"class":55},[45,46625,46626],{"class":47,"line":8183},[45,46627,38152],{"class":55},[45,46629,46630,46632,46634,46636,46638,46640,46642,46644,46646,46648,46650,46652,46654],{"class":47,"line":8195},[45,46631,38197],{"class":55},[45,46633,30974],{"class":5366},[45,46635,59],{"class":51},[45,46637,350],{"class":79},[45,46639,655],{"class":55},[45,46641,31029],{"class":5366},[45,46643,59],{"class":51},[45,46645,356],{"class":79},[45,46647,655],{"class":55},[45,46649,30983],{"class":5366},[45,46651,59],{"class":51},[45,46653,495],{"class":79},[45,46655,139],{"class":55},[45,46657,46658],{"class":47,"line":8207},[45,46659,38226],{"class":55},[45,46661,46662,46664,46666,46668],{"class":47,"line":9866},[45,46663,30945],{"class":79},[45,46665,42320],{"class":55},[45,46667,59],{"class":51},[45,46669,38109],{"class":55},[45,46671,46672,46674,46676,46678,46680,46682,46684,46686,46688,46690,46692,46694,46696,46698,46700],{"class":47,"line":9890},[45,46673,42329],{"class":55},[45,46675,42259],{"class":79},[45,46677,655],{"class":55},[45,46679,481],{"class":79},[45,46681,42338],{"class":55},[45,46683,487],{"class":79},[45,46685,655],{"class":55},[45,46687,32170],{"class":79},[45,46689,42347],{"class":55},[45,46691,878],{"class":79},[45,46693,655],{"class":55},[45,46695,475],{"class":79},[45,46697,42356],{"class":55},[45,46699,475],{"class":79},[45,46701,38147],{"class":55},[45,46703,46704,46706,46708,46710,46712,46714,46716,46718,46720,46722,46724,46726,46728,46730,46732],{"class":47,"line":9913},[45,46705,42329],{"class":55},[45,46707,34970],{"class":79},[45,46709,655],{"class":55},[45,46711,32170],{"class":79},[45,46713,42338],{"class":55},[45,46715,32170],{"class":79},[45,46717,655],{"class":55},[45,46719,42259],{"class":79},[45,46721,42347],{"class":55},[45,46723,475],{"class":79},[45,46725,655],{"class":55},[45,46727,487],{"class":79},[45,46729,42356],{"class":55},[45,46731,481],{"class":79},[45,46733,38147],{"class":55},[45,46735,46736,46738,46740,46742,46744,46746,46748,46750,46752,46754,46756,46758,46760],{"class":47,"line":9937},[45,46737,38197],{"class":55},[45,46739,30974],{"class":5366},[45,46741,59],{"class":51},[45,46743,350],{"class":79},[45,46745,655],{"class":55},[45,46747,31029],{"class":5366},[45,46749,59],{"class":51},[45,46751,356],{"class":79},[45,46753,655],{"class":55},[45,46755,30983],{"class":5366},[45,46757,59],{"class":51},[45,46759,495],{"class":79},[45,46761,139],{"class":55},[45,46763,46764],{"class":47,"line":9942},[45,46765,38226],{"class":55},[45,46767,46768,46770,46772,46774],{"class":47,"line":9947},[45,46769,30945],{"class":79},[45,46771,42431],{"class":55},[45,46773,59],{"class":51},[45,46775,38109],{"class":55},[45,46777,46778,46780,46782,46784,46786,46788,46790,46792,46794,46796,46798,46800,46802,46804,46806],{"class":47,"line":9952},[45,46779,42329],{"class":55},[45,46781,42442],{"class":79},[45,46783,655],{"class":55},[45,46785,42259],{"class":79},[45,46787,42338],{"class":55},[45,46789,487],{"class":79},[45,46791,655],{"class":55},[45,46793,42455],{"class":79},[45,46795,42347],{"class":55},[45,46797,878],{"class":79},[45,46799,655],{"class":55},[45,46801,884],{"class":79},[45,46803,42356],{"class":55},[45,46805,481],{"class":79},[45,46807,38147],{"class":55},[45,46809,46810,46812,46814,46816,46818,46820,46822,46824,46826,46828,46830,46832,46834,46836,46838],{"class":47,"line":9961},[45,46811,42329],{"class":55},[45,46813,38557],{"class":79},[45,46815,655],{"class":55},[45,46817,21197],{"class":79},[45,46819,42338],{"class":55},[45,46821,895],{"class":79},[45,46823,655],{"class":55},[45,46825,31601],{"class":79},[45,46827,42347],{"class":55},[45,46829,1077],{"class":79},[45,46831,655],{"class":55},[45,46833,481],{"class":79},[45,46835,42356],{"class":55},[45,46837,481],{"class":79},[45,46839,38147],{"class":55},[45,46841,46842,46844,46846,46848,46850,46852,46854,46856,46858,46860,46862,46864,46866,46868,46870],{"class":47,"line":9966},[45,46843,42329],{"class":55},[45,46845,38557],{"class":79},[45,46847,655],{"class":55},[45,46849,32170],{"class":79},[45,46851,42338],{"class":55},[45,46853,32170],{"class":79},[45,46855,655],{"class":55},[45,46857,34970],{"class":79},[45,46859,42347],{"class":55},[45,46861,1077],{"class":79},[45,46863,655],{"class":55},[45,46865,481],{"class":79},[45,46867,42356],{"class":55},[45,46869,481],{"class":79},[45,46871,38147],{"class":55},[45,46873,46874,46876,46878,46880,46882,46884,46886,46888,46890,46892,46894,46896,46898,46900,46902],{"class":47,"line":9972},[45,46875,42329],{"class":55},[45,46877,38557],{"class":79},[45,46879,655],{"class":55},[45,46881,895],{"class":79},[45,46883,42338],{"class":55},[45,46885,32170],{"class":79},[45,46887,655],{"class":55},[45,46889,42552],{"class":79},[45,46891,42347],{"class":55},[45,46893,475],{"class":79},[45,46895,655],{"class":55},[45,46897,481],{"class":79},[45,46899,42356],{"class":55},[45,46901,481],{"class":79},[45,46903,38147],{"class":55},[45,46905,46906,46908,46910,46912,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932,46934],{"class":47,"line":9993},[45,46907,42329],{"class":55},[45,46909,42573],{"class":79},[45,46911,655],{"class":55},[45,46913,34970],{"class":79},[45,46915,42338],{"class":55},[45,46917,21197],{"class":79},[45,46919,655],{"class":55},[45,46921,42586],{"class":79},[45,46923,42347],{"class":55},[45,46925,475],{"class":79},[45,46927,655],{"class":55},[45,46929,32170],{"class":79},[45,46931,42356],{"class":55},[45,46933,32170],{"class":79},[45,46935,38147],{"class":55},[45,46937,46938,46940,46942,46944,46946,46948,46950,46952,46954,46956,46958,46960,46962],{"class":47,"line":9999},[45,46939,38197],{"class":55},[45,46941,30974],{"class":5366},[45,46943,59],{"class":51},[45,46945,350],{"class":79},[45,46947,655],{"class":55},[45,46949,31029],{"class":5366},[45,46951,59],{"class":51},[45,46953,356],{"class":79},[45,46955,655],{"class":55},[45,46957,30983],{"class":5366},[45,46959,59],{"class":51},[45,46961,495],{"class":79},[45,46963,139],{"class":55},[45,46965,46966],{"class":47,"line":10013},[45,46967,38226],{"class":55},[45,46969,46970,46972,46974,46976],{"class":47,"line":10019},[45,46971,30945],{"class":79},[45,46973,42639],{"class":55},[45,46975,59],{"class":51},[45,46977,38109],{"class":55},[45,46979,46980,46982,46984,46986,46988,46990,46992,46994,46996,46998,47000,47002,47004,47006,47008],{"class":47,"line":10046},[45,46981,42329],{"class":55},[45,46983,42650],{"class":79},[45,46985,655],{"class":55},[45,46987,34970],{"class":79},[45,46989,42338],{"class":55},[45,46991,21197],{"class":79},[45,46993,655],{"class":55},[45,46995,42586],{"class":79},[45,46997,42347],{"class":55},[45,46999,475],{"class":79},[45,47001,655],{"class":55},[45,47003,32170],{"class":79},[45,47005,42356],{"class":55},[45,47007,32170],{"class":79},[45,47009,38147],{"class":55},[45,47011,47012,47014,47016,47018,47020,47022,47024,47026,47028,47030,47032,47034,47036,47038,47040],{"class":47,"line":10055},[45,47013,42329],{"class":55},[45,47015,42650],{"class":79},[45,47017,655],{"class":55},[45,47019,35040],{"class":79},[45,47021,42338],{"class":55},[45,47023,42259],{"class":79},[45,47025,655],{"class":55},[45,47027,35040],{"class":79},[45,47029,42347],{"class":55},[45,47031,884],{"class":79},[45,47033,655],{"class":55},[45,47035,32170],{"class":79},[45,47037,42356],{"class":55},[45,47039,32170],{"class":79},[45,47041,38147],{"class":55},[45,47043,47044,47046,47048,47050,47052],{"class":47,"line":10061},[45,47045,42713],{"class":55},[45,47047,495],{"class":79},[45,47049,655],{"class":55},[45,47051,495],{"class":79},[45,47053,42722],{"class":55},[45,47055,47056],{"class":47,"line":10069},[45,47057,38890],{"class":55},[45,47059,47060,47062,47064,47066,47068],{"class":47,"line":10074},[45,47061,38895],{"class":55},[45,47063,42733],{"class":79},[45,47065,655],{"class":55},[45,47067,356],{"class":79},[45,47069,139],{"class":55},[45,47071,47072],{"class":47,"line":16753},[45,47073,38226],{"class":55},[45,47075,47076],{"class":47,"line":16759},[45,47077,42748],{"class":337},[45,47079,47080,47082,47084,47086,47088],{"class":47,"line":16782},[45,47081,3553],{"class":51},[45,47083,38968],{"class":55},[45,47085,26143],{"class":51},[45,47087,38973],{"class":79},[45,47089,38976],{"class":55},[45,47091,47092,47094,47096],{"class":47,"line":16788},[45,47093,4792],{"class":51},[45,47095,38988],{"class":79},[45,47097,38991],{"class":55},[45,47099,47100,47102,47104,47106,47108,47110,47112,47114,47116],{"class":47,"line":16811},[45,47101,39001],{"class":55},[45,47103,42775],{"class":5366},[45,47105,59],{"class":51},[45,47107,42780],{"class":62},[45,47109,655],{"class":55},[45,47111,39004],{"class":5366},[45,47113,59],{"class":51},[45,47115,39009],{"class":62},[45,47117,139],{"class":55},[45,47119,47120],{"class":47,"line":16825},[45,47121,42795],{"class":337},[45,47123,47124],{"class":47,"line":16845},[45,47125,42800],{"class":337},[45,47127,47128],{"class":47,"line":16851},[45,47129,42805],{"class":337},[45,47131,47132],{"class":47,"line":16862},[45,47133,42810],{"class":337},[45,47135,47136],{"class":47,"line":16885},[45,47137,42815],{"class":337},[45,47139,47140],{"class":47,"line":16907},[45,47141,42820],{"class":337},[45,47143,47144,47146,47148,47150,47152,47154],{"class":47,"line":16912},[45,47145,39021],{"class":51},[45,47147,39024],{"class":55},[45,47149,39027],{"class":51},[45,47151,39030],{"class":51},[45,47153,39033],{"class":79},[45,47155,3889],{"class":55},[45,47157,47158,47160,47162],{"class":47,"line":16918},[45,47159,39045],{"class":55},[45,47161,469],{"class":79},[45,47163,139],{"class":55},[45,47165,47166,47168,47170],{"class":47,"line":16932},[45,47167,42847],{"class":51},[45,47169,38988],{"class":79},[45,47171,39064],{"class":55},[45,47173,47174,47176,47178,47180,47182],{"class":47,"line":16945},[45,47175,42856],{"class":55},[45,47177,469],{"class":79},[45,47179,655],{"class":55},[45,47181,39086],{"class":79},[45,47183,139],{"class":55},[45,47185,47186,47188,47190,47192,47194,47196],{"class":47,"line":16950},[45,47187,42869],{"class":51},[45,47189,39024],{"class":55},[45,47191,39027],{"class":51},[45,47193,39030],{"class":51},[45,47195,39033],{"class":79},[45,47197,3889],{"class":55},[45,47199,47200,47202,47204],{"class":47,"line":16964},[45,47201,42884],{"class":55},[45,47203,469],{"class":79},[45,47205,139],{"class":55},[45,47207,47208],{"class":47,"line":16969},[45,47209,35265],{"class":337},[45,47211,47212,47214,47216],{"class":47,"line":16975},[45,47213,30901],{"class":51},[45,47215,31193],{"class":69},[45,47217,31196],{"class":55},[45,47219,47220,47222,47224,47226],{"class":47,"line":16980},[45,47221,31201],{"class":55},[45,47223,59],{"class":51},[45,47225,30923],{"class":79},[45,47227,42911],{"class":55},[45,47229,47230,47232,47234,47236],{"class":47,"line":16994},[45,47231,31201],{"class":55},[45,47233,59],{"class":51},[45,47235,30923],{"class":79},[45,47237,42922],{"class":55},[45,47239,47240,47242,47244,47246],{"class":47,"line":16999},[45,47241,31201],{"class":55},[45,47243,59],{"class":51},[45,47245,30923],{"class":79},[45,47247,42933],{"class":55},[45,47249,47250,47252,47254,47256],{"class":47,"line":17004},[45,47251,31201],{"class":55},[45,47253,59],{"class":51},[45,47255,30923],{"class":79},[45,47257,42944],{"class":55},[45,47259,47260,47262,47264,47266],{"class":47,"line":17018},[45,47261,31201],{"class":55},[45,47263,59],{"class":51},[45,47265,30923],{"class":79},[45,47267,42955],{"class":55},[45,47269,47270,47272],{"class":47,"line":17030},[45,47271,14901],{"class":51},[45,47273,31309],{"class":55},[45,47275,47276],{"class":47,"line":17035},[45,47277,2550],{"emptyLinePlaceholder":207},[45,47279,47280],{"class":47,"line":17048},[45,47281,42970],{"class":337},[45,47283,47284,47286,47288,47290,47292],{"class":47,"line":17053},[45,47285,1682],{"class":51},[45,47287,31320],{"class":79},[45,47289,3099],{"class":51},[45,47291,31325],{"class":62},[45,47293,3889],{"class":55},[45,47295,47296,47298,47300,47302,47304,47306,47308,47310,47312],{"class":47,"line":17058},[45,47297,31337],{"class":55},[45,47299,59],{"class":51},[45,47301,30551],{"class":55},[45,47303,31344],{"class":62},[45,47305,1855],{"class":51},[45,47307,31349],{"class":55},[45,47309,1852],{"class":51},[45,47311,30576],{"class":62},[45,47313,139],{"class":55},[45,47315,47316,47318,47320],{"class":47,"line":17063},[45,47317,31389],{"class":55},[45,47319,59],{"class":51},[45,47321,43011],{"class":55},[45,47323,47324,47326,47328,47330,47332,47334,47336,47338],{"class":47,"line":17076},[45,47325,31399],{"class":79},[45,47327,31402],{"class":55},[45,47329,495],{"class":79},[45,47331,655],{"class":55},[45,47333,31601],{"class":79},[45,47335,655],{"class":55},[45,47337,31601],{"class":79},[45,47339,31415],{"class":55},[22147,47341,47343],{"id":47342},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[20,47345,47346],{},"计算图片的均值与方差，用于训练中归一化处理操作",[36,47348,47350],{"className":30478,"code":47349,"language":30480,"meta":25,"style":25},"# 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",[42,47351,47352,47357,47370,47375,47381,47386,47396,47400,47405,47415,47419,47424,47434,47451,47455,47460,47472,47484,47515,47524,47534,47544,47548,47553,47568,47572,47577,47582,47587,47597,47602,47627,47631,47636,47651,47655,47668,47672,47677,47682,47687,47692,47697,47707,47717,47740,47748,47756,47764,47768,47780,47784,47789,47793,47797,47804,47824,47848,47855,47869,47874,47879,47883,47897,47901,47913],{"__ignoreMap":25},[45,47353,47354],{"class":47,"line":48},[45,47355,47356],{"class":337},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[45,47358,47359,47361,47364,47367],{"class":47,"line":66},[45,47360,30837],{"class":51},[45,47362,47363],{"class":79}," PIL",[45,47365,47366],{"class":51}," import",[45,47368,47369],{"class":55}," Image\n",[45,47371,47372],{"class":47,"line":1331},[45,47373,47374],{"class":337},"# os 用来处理文件夹和文件路径\n",[45,47376,47377,47379],{"class":47,"line":1346},[45,47378,30492],{"class":51},[45,47380,45405],{"class":55},[45,47382,47383],{"class":47,"line":1352},[45,47384,47385],{"class":337},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[45,47387,47388,47390,47392,47394],{"class":47,"line":1366},[45,47389,30492],{"class":51},[45,47391,31480],{"class":55},[45,47393,31483],{"class":51},[45,47395,31486],{"class":55},[45,47397,47398],{"class":47,"line":1372},[45,47399,2550],{"emptyLinePlaceholder":207},[45,47401,47402],{"class":47,"line":1463},[45,47403,47404],{"class":337},"# 文件夹路径，包含所有图片文件\n",[45,47406,47407,47410,47412],{"class":47,"line":1469},[45,47408,47409],{"class":55},"folder_path ",[45,47411,59],{"class":51},[45,47413,47414],{"class":62}," 'data_cat_dog'\n",[45,47416,47417],{"class":47,"line":1481},[45,47418,2550],{"emptyLinePlaceholder":207},[45,47420,47421],{"class":47,"line":1763},[45,47422,47423],{"class":337},"# 初始化累积变量\n",[45,47425,47426,47429,47431],{"class":47,"line":1768},[45,47427,47428],{"class":55},"total_pixels ",[45,47430,59],{"class":51},[45,47432,47433],{"class":79}," 0\n",[45,47435,47436,47439,47441,47444,47446,47448],{"class":47,"line":1774},[45,47437,47438],{"class":55},"sum_normalized_pixel_values ",[45,47440,59],{"class":51},[45,47442,47443],{"class":55}," np.zeros(",[45,47445,350],{"class":79},[45,47447,45908],{"class":55},[45,47449,47450],{"class":337},"# 如果是RGB图像，需要三个通道的均值和方差\n",[45,47452,47453],{"class":47,"line":1779},[45,47454,2550],{"emptyLinePlaceholder":207},[45,47456,47457],{"class":47,"line":1793},[45,47458,47459],{"class":337},"# 遍历文件夹中的图片文件\n",[45,47461,47462,47464,47467,47469],{"class":47,"line":1798},[45,47463,3175],{"class":51},[45,47465,47466],{"class":55}," root, dirs, files ",[45,47468,26143],{"class":51},[45,47470,47471],{"class":55}," os.walk(folder_path):\n",[45,47473,47474,47476,47479,47481],{"class":47,"line":1804},[45,47475,3351],{"class":51},[45,47477,47478],{"class":55}," filename ",[45,47480,26143],{"class":51},[45,47482,47483],{"class":55}," files:\n",[45,47485,47486,47488,47491,47494,47496,47499,47501,47504,47506,47509,47512],{"class":47,"line":1825},[45,47487,2647],{"class":51},[45,47489,47490],{"class":55}," filename.endswith((",[45,47492,47493],{"class":62},"'.jpg'",[45,47495,12584],{"class":55},[45,47497,47498],{"class":62},"'.jpeg'",[45,47500,12584],{"class":55},[45,47502,47503],{"class":62},"'.png'",[45,47505,12584],{"class":55},[45,47507,47508],{"class":62},"'.bmp'",[45,47510,47511],{"class":55},")):  ",[45,47513,47514],{"class":337},"# 可根据实际情况添加其他格式\n",[45,47516,47517,47519,47521],{"class":47,"line":1830},[45,47518,45773],{"class":55},[45,47520,59],{"class":51},[45,47522,47523],{"class":55}," os.path.join(root, filename)\n",[45,47525,47526,47529,47531],{"class":47,"line":1844},[45,47527,47528],{"class":55},"            image ",[45,47530,59],{"class":51},[45,47532,47533],{"class":55}," Image.open(image_path)\n",[45,47535,47536,47539,47541],{"class":47,"line":1849},[45,47537,47538],{"class":55},"            image_array ",[45,47540,59],{"class":51},[45,47542,47543],{"class":55}," np.array(image)\n",[45,47545,47546],{"class":47,"line":1878},[45,47547,2550],{"emptyLinePlaceholder":207},[45,47549,47550],{"class":47,"line":1883},[45,47551,47552],{"class":337},"            # 归一化像素值到0-1之间\n",[45,47554,47555,47558,47560,47563,47565],{"class":47,"line":1900},[45,47556,47557],{"class":55},"            normalized_image_array ",[45,47559,59],{"class":51},[45,47561,47562],{"class":55}," image_array ",[45,47564,861],{"class":51},[45,47566,47567],{"class":79}," 255.0\n",[45,47569,47570],{"class":47,"line":1905},[45,47571,2550],{"emptyLinePlaceholder":207},[45,47573,47574],{"class":47,"line":1910},[45,47575,47576],{"class":337},"            # print(image_path)\n",[45,47578,47579],{"class":47,"line":1915},[45,47580,47581],{"class":337},"            # print(normalized_image_array.shape)\n",[45,47583,47584],{"class":47,"line":1929},[45,47585,47586],{"class":337},"            # 累积归一化后的像素值和像素数量\n",[45,47588,47589,47592,47594],{"class":47,"line":1934},[45,47590,47591],{"class":55},"            total_pixels ",[45,47593,9627],{"class":51},[45,47595,47596],{"class":55}," normalized_image_array.size\n",[45,47598,47599],{"class":47,"line":2727},[45,47600,47601],{"class":337},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[45,47603,47604,47607,47609,47612,47615,47617,47619,47621,47623,47625],{"class":47,"line":2741},[45,47605,47606],{"class":55},"            sum_normalized_pixel_values ",[45,47608,9627],{"class":51},[45,47610,47611],{"class":55}," np.sum(normalized_image_array, ",[45,47613,47614],{"class":5366},"axis",[45,47616,59],{"class":51},[45,47618,282],{"class":55},[45,47620,469],{"class":79},[45,47622,12584],{"class":55},[45,47624,495],{"class":79},[45,47626,30597],{"class":55},[45,47628,47629],{"class":47,"line":2749},[45,47630,2550],{"emptyLinePlaceholder":207},[45,47632,47633],{"class":47,"line":2754},[45,47634,47635],{"class":337},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[45,47637,47638,47641,47643,47646,47648],{"class":47,"line":2760},[45,47639,47640],{"class":55},"mean ",[45,47642,59],{"class":51},[45,47644,47645],{"class":55}," sum_normalized_pixel_values ",[45,47647,861],{"class":51},[45,47649,47650],{"class":55}," total_pixels\n",[45,47652,47653],{"class":47,"line":2766},[45,47654,2550],{"emptyLinePlaceholder":207},[45,47656,47657,47660,47662,47664,47666],{"class":47,"line":2771},[45,47658,47659],{"class":55},"sum_squared_diff ",[45,47661,59],{"class":51},[45,47663,47443],{"class":55},[45,47665,350],{"class":79},[45,47667,139],{"class":55},[45,47669,47670],{"class":47,"line":8098},[45,47671,2550],{"emptyLinePlaceholder":207},[45,47673,47674],{"class":47,"line":8122},[45,47675,47676],{"class":337},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[45,47678,47679],{"class":47,"line":8127},[45,47680,47681],{"class":337},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[45,47683,47684],{"class":47,"line":8133},[45,47685,47686],{"class":337},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[45,47688,47689],{"class":47,"line":8160},[45,47690,47691],{"class":337},"# Image.open(image_path)：打开图片\n",[45,47693,47694],{"class":47,"line":8165},[45,47695,47696],{"class":337},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[45,47698,47699,47701,47703,47705],{"class":47,"line":8171},[45,47700,3175],{"class":51},[45,47702,47466],{"class":55},[45,47704,26143],{"class":51},[45,47706,47471],{"class":55},[45,47708,47709,47711,47713,47715],{"class":47,"line":8183},[45,47710,3351],{"class":51},[45,47712,47478],{"class":55},[45,47714,26143],{"class":51},[45,47716,47483],{"class":55},[45,47718,47719,47721,47723,47725,47727,47729,47731,47733,47735,47737],{"class":47,"line":8195},[45,47720,2647],{"class":51},[45,47722,47490],{"class":55},[45,47724,47493],{"class":62},[45,47726,12584],{"class":55},[45,47728,47498],{"class":62},[45,47730,12584],{"class":55},[45,47732,47503],{"class":62},[45,47734,12584],{"class":55},[45,47736,47508],{"class":62},[45,47738,47739],{"class":55},")):\n",[45,47741,47742,47744,47746],{"class":47,"line":8207},[45,47743,45773],{"class":55},[45,47745,59],{"class":51},[45,47747,47523],{"class":55},[45,47749,47750,47752,47754],{"class":47,"line":9866},[45,47751,47528],{"class":55},[45,47753,59],{"class":51},[45,47755,47533],{"class":55},[45,47757,47758,47760,47762],{"class":47,"line":9890},[45,47759,47538],{"class":55},[45,47761,59],{"class":51},[45,47763,47543],{"class":55},[45,47765,47766],{"class":47,"line":9913},[45,47767,47552],{"class":337},[45,47769,47770,47772,47774,47776,47778],{"class":47,"line":9937},[45,47771,47557],{"class":55},[45,47773,59],{"class":51},[45,47775,47562],{"class":55},[45,47777,861],{"class":51},[45,47779,47567],{"class":79},[45,47781,47782],{"class":47,"line":9942},[45,47783,47581],{"class":337},[45,47785,47786],{"class":47,"line":9947},[45,47787,47788],{"class":337},"            # print(mean.shape)\n",[45,47790,47791],{"class":47,"line":9952},[45,47792,47576],{"class":337},[45,47794,47795],{"class":47,"line":9961},[45,47796,2550],{"emptyLinePlaceholder":207},[45,47798,47799,47802],{"class":47,"line":9966},[45,47800,47801],{"class":51},"            try",[45,47803,3889],{"class":55},[45,47805,47806,47809,47811,47814,47816,47819,47821],{"class":47,"line":9972},[45,47807,47808],{"class":55},"                diff ",[45,47810,59],{"class":51},[45,47812,47813],{"class":55}," (normalized_image_array ",[45,47815,809],{"class":51},[45,47817,47818],{"class":55}," mean) ",[45,47820,10810],{"class":51},[45,47822,47823],{"class":79}," 2\n",[45,47825,47826,47829,47831,47834,47836,47838,47840,47842,47844,47846],{"class":47,"line":9993},[45,47827,47828],{"class":55},"                sum_squared_diff ",[45,47830,9627],{"class":51},[45,47832,47833],{"class":55}," np.sum(diff, ",[45,47835,47614],{"class":5366},[45,47837,59],{"class":51},[45,47839,282],{"class":55},[45,47841,469],{"class":79},[45,47843,12584],{"class":55},[45,47845,495],{"class":79},[45,47847,30597],{"class":55},[45,47849,47850,47853],{"class":47,"line":9999},[45,47851,47852],{"class":51},"            except",[45,47854,3889],{"class":55},[45,47856,47857,47860,47862,47864,47867],{"class":47,"line":10013},[45,47858,47859],{"class":79},"                print",[45,47861,282],{"class":55},[45,47863,331],{"class":51},[45,47865,47866],{"class":62},"\"捕获到自定义异常\"",[45,47868,139],{"class":55},[45,47870,47871],{"class":47,"line":10019},[45,47872,47873],{"class":337},"            # diff = (normalized_image_array - mean) ** 2\n",[45,47875,47876],{"class":47,"line":10046},[45,47877,47878],{"class":337},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[45,47880,47881],{"class":47,"line":10055},[45,47882,2550],{"emptyLinePlaceholder":207},[45,47884,47885,47888,47890,47893,47895],{"class":47,"line":10061},[45,47886,47887],{"class":55},"variance ",[45,47889,59],{"class":51},[45,47891,47892],{"class":55}," sum_squared_diff ",[45,47894,861],{"class":51},[45,47896,47650],{"class":55},[45,47898,47899],{"class":47,"line":10069},[45,47900,2550],{"emptyLinePlaceholder":207},[45,47902,47903,47905,47907,47910],{"class":47,"line":10074},[45,47904,30515],{"class":79},[45,47906,282],{"class":55},[45,47908,47909],{"class":62},"\"Mean:\"",[45,47911,47912],{"class":55},", mean)\n",[45,47914,47915,47917,47919,47922],{"class":47,"line":16753},[45,47916,30515],{"class":79},[45,47918,282],{"class":55},[45,47920,47921],{"class":62},"\"Variance:\"",[45,47923,47924],{"class":55},", variance)\n",[36,47926,47928],{"className":30478,"code":47927,"language":30480,"meta":25,"style":25},"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",[42,47929,47930,47936,47942,47952,47958,47968,47982,47992,48002,48012,48016,48026,48036,48040,48044,48052,48057,48062,48081,48085,48090,48095,48100,48105,48146,48151,48161,48166,48179,48184,48189,48194,48199,48204,48208,48213,48218,48240,48244,48276,48290,48300,48310,48314,48324,48338,48348,48358,48368,48374,48378,48382,48386,48390,48394,48402,48422,48426,48430,48434,48438,48454,48458,48462,48470,48474,48478,48486,48490,48494,48498,48506,48510,48514,48518,48526,48530,48538,48542,48550,48554,48562,48566,48574,48578,48582,48590,48594,48598,48610,48634,48648,48652,48656,48660,48668,48672,48680,48684,48692,48696,48704,48708,48716,48720,48728,48732,48744,48748,48756,48760,48768,48772,48776,48780,48784,48792,48796,48812,48816,48824,48828,48832,48836,48840,48844,48848,48852,48868,48872,48884,48888,48900,48904,48916,48920,48928,48932,48940,48944,48948,48952,48958,48962,48970,48974,48990,48994,49002,49006,49022,49034,49038,49050,49054,49058,49066,49070,49074,49082,49086,49094,49098,49106,49110,49114,49156,49198,49202,49206,49222,49226,49242,49246,49250,49258,49262,49266,49278,49316,49320,49324,49332,49336,49350,49360,49366,49372,49378,49384,49388,49392,49398,49402,49406,49414,49418,49436,49440,49444,49448,49464,49468,49472,49476,49480,49484,49504,49524,49528,49532,49536,49544,49552,49556,49572,49592,49612,49616,49621,49630,49639,49644,49649,49654,49667,49672,49681,49690,49707],{"__ignoreMap":25},[45,47931,47932,47934],{"class":47,"line":48},[45,47933,30492],{"class":51},[45,47935,31922],{"class":55},[45,47937,47938,47940],{"class":47,"line":66},[45,47939,30492],{"class":51},[45,47941,31929],{"class":55},[45,47943,47944,47946,47948,47950],{"class":47,"line":1331},[45,47945,30492],{"class":51},[45,47947,31940],{"class":55},[45,47949,31483],{"class":51},[45,47951,31945],{"class":55},[45,47953,47954,47956],{"class":47,"line":1346},[45,47955,30492],{"class":51},[45,47957,30495],{"class":55},[45,47959,47960,47962,47964,47966],{"class":47,"line":1352},[45,47961,30837],{"class":51},[45,47963,31515],{"class":55},[45,47965,30492],{"class":51},[45,47967,31962],{"class":55},[45,47969,47970,47972,47974,47976,47979],{"class":47,"line":1366},[45,47971,30837],{"class":51},[45,47973,31468],{"class":55},[45,47975,30492],{"class":51},[45,47977,47978],{"class":55}," ImageFolder ",[45,47980,47981],{"class":337},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[45,47983,47984,47986,47988,47990],{"class":47,"line":1372},[45,47985,30837],{"class":51},[45,47987,31498],{"class":55},[45,47989,30492],{"class":51},[45,47991,31503],{"class":55},[45,47993,47994,47996,47998,48000],{"class":47,"line":1463},[45,47995,30492],{"class":51},[45,47997,31515],{"class":55},[45,47999,31483],{"class":51},[45,48001,31520],{"class":55},[45,48003,48004,48006,48008,48010],{"class":47,"line":1469},[45,48005,30492],{"class":51},[45,48007,31532],{"class":55},[45,48009,31483],{"class":51},[45,48011,31537],{"class":55},[45,48013,48014],{"class":47,"line":1481},[45,48015,32007],{"class":337},[45,48017,48018,48020,48022,48024],{"class":47,"line":1763},[45,48019,30837],{"class":51},[45,48021,32014],{"class":55},[45,48023,30492],{"class":51},[45,48025,43131],{"class":55},[45,48027,48028,48030,48032,48034],{"class":47,"line":1768},[45,48029,30837],{"class":51},[45,48031,30840],{"class":55},[45,48033,30492],{"class":51},[45,48035,30845],{"class":55},[45,48037,48038],{"class":47,"line":1774},[45,48039,2550],{"emptyLinePlaceholder":207},[45,48041,48042],{"class":47,"line":1779},[45,48043,32042],{"class":337},[45,48045,48046,48048,48050],{"class":47,"line":1793},[45,48047,32047],{"class":51},[45,48049,32050],{"class":69},[45,48051,32053],{"class":55},[45,48053,48054],{"class":47,"line":1798},[45,48055,48056],{"class":337},"    # 导入自己的数据集，并进行数据处理\n",[45,48058,48059],{"class":47,"line":1804},[45,48060,48061],{"class":337},"    # 定义数据集的路径\n",[45,48063,48064,48067,48069,48071,48073,48075,48079],{"class":47,"line":1825},[45,48065,48066],{"class":79},"    ROOT_PATH",[45,48068,59],{"class":51},[45,48070,947],{"class":51},[45,48072,89],{"class":62},[45,48074,835],{"class":79},[45,48076,48078],{"class":48077},"sA_wV","\u002Fdata\u002Ftrain",[45,48080,152],{"class":62},[45,48082,48083],{"class":47,"line":1830},[45,48084,2550],{"emptyLinePlaceholder":207},[45,48086,48087],{"class":47,"line":1844},[45,48088,48089],{"class":337},"    # 定义归一化方法\n",[45,48091,48092],{"class":47,"line":1849},[45,48093,48094],{"class":337},"    # 这里需要先计算一下数据集的均值和方差\n",[45,48096,48097],{"class":47,"line":1878},[45,48098,48099],{"class":337},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[45,48101,48102],{"class":47,"line":1883},[45,48103,48104],{"class":337},"    # 第一个参数是均值，第二个参数是方差\n",[45,48106,48107,48110,48112,48115,48118,48120,48123,48125,48128,48131,48134,48136,48139,48141,48144],{"class":47,"line":1900},[45,48108,48109],{"class":55},"    normalize",[45,48111,59],{"class":51},[45,48113,48114],{"class":55},"transforms.Normalize([",[45,48116,48117],{"class":79},"0.162",[45,48119,655],{"class":55},[45,48121,48122],{"class":79},"0.151",[45,48124,655],{"class":55},[45,48126,48127],{"class":79},"0.138",[45,48129,48130],{"class":55},"],[",[45,48132,48133],{"class":79},"0.058",[45,48135,655],{"class":55},[45,48137,48138],{"class":79},"0.052",[45,48140,655],{"class":55},[45,48142,48143],{"class":79},"0.048",[45,48145,4807],{"class":55},[45,48147,48148],{"class":47,"line":1905},[45,48149,48150],{"class":337},"    # 定义数据集处理方法变量\n",[45,48152,48153,48156,48158],{"class":47,"line":1910},[45,48154,48155],{"class":55},"    train_transform",[45,48157,59],{"class":51},[45,48159,48160],{"class":55},"transforms.Compose([\n",[45,48162,48163],{"class":47,"line":1915},[45,48164,48165],{"class":337},"        # 调整图像大小为224*224\n",[45,48167,48168,48171,48173,48175,48177],{"class":47,"line":1929},[45,48169,48170],{"class":55},"        transforms.Resize((",[45,48172,31601],{"class":79},[45,48174,655],{"class":55},[45,48176,31601],{"class":79},[45,48178,42722],{"class":55},[45,48180,48181],{"class":47,"line":1934},[45,48182,48183],{"class":337},"        # 将图像转换为张量\n",[45,48185,48186],{"class":47,"line":2727},[45,48187,48188],{"class":55},"        transforms.ToTensor(),\n",[45,48190,48191],{"class":47,"line":2741},[45,48192,48193],{"class":55},"        normalize])\n",[45,48195,48196],{"class":47,"line":2749},[45,48197,48198],{"class":337},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[45,48200,48201],{"class":47,"line":2754},[45,48202,48203],{"class":337},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[45,48205,48206],{"class":47,"line":2760},[45,48207,2550],{"emptyLinePlaceholder":207},[45,48209,48210],{"class":47,"line":2766},[45,48211,48212],{"class":337},"    # 加载数据集\n",[45,48214,48215],{"class":47,"line":2771},[45,48216,48217],{"class":337},"    # 传入数据集路径与处理方法\n",[45,48219,48220,48222,48224,48227,48230,48232,48235,48237],{"class":47,"line":8098},[45,48221,32058],{"class":55},[45,48223,59],{"class":51},[45,48225,48226],{"class":55},"ImageFolder(",[45,48228,48229],{"class":79},"ROOT_PATH",[45,48231,655],{"class":55},[45,48233,48234],{"class":5366},"transform",[45,48236,59],{"class":51},[45,48238,48239],{"class":55},"train_transform)\n",[45,48241,48242],{"class":47,"line":8122},[45,48243,2550],{"emptyLinePlaceholder":207},[45,48245,48246,48248,48250,48252,48254,48256,48258,48260,48262,48264,48266,48268,48270,48272,48274],{"class":47,"line":8127},[45,48247,32110],{"class":55},[45,48249,59],{"class":51},[45,48251,32115],{"class":55},[45,48253,32118],{"class":79},[45,48255,282],{"class":55},[45,48257,32123],{"class":79},[45,48259,732],{"class":51},[45,48261,7508],{"class":79},[45,48263,32130],{"class":55},[45,48265,32118],{"class":79},[45,48267,282],{"class":55},[45,48269,32137],{"class":79},[45,48271,732],{"class":51},[45,48273,7508],{"class":79},[45,48275,32144],{"class":55},[45,48277,48278,48280,48282,48284,48286,48288],{"class":47,"line":8133},[45,48279,32149],{"class":55},[45,48281,59],{"class":51},[45,48283,32154],{"class":55},[45,48285,31637],{"class":5366},[45,48287,59],{"class":51},[45,48289,31642],{"class":55},[45,48291,48292,48294,48296,48298],{"class":47,"line":8160},[45,48293,32165],{"class":5366},[45,48295,59],{"class":51},[45,48297,475],{"class":79},[45,48299,31566],{"class":55},[45,48301,48302,48304,48306,48308],{"class":47,"line":8165},[45,48303,32177],{"class":5366},[45,48305,59],{"class":51},[45,48307,31576],{"class":79},[45,48309,31566],{"class":55},[45,48311,48312],{"class":47,"line":8171},[45,48313,32188],{"class":337},[45,48315,48316,48318,48320,48322],{"class":47,"line":8183},[45,48317,32193],{"class":5366},[45,48319,59],{"class":51},[45,48321,672],{"class":79},[45,48323,139],{"class":55},[45,48325,48326,48328,48330,48332,48334,48336],{"class":47,"line":8195},[45,48327,32204],{"class":55},[45,48329,59],{"class":51},[45,48331,31634],{"class":55},[45,48333,31637],{"class":5366},[45,48335,59],{"class":51},[45,48337,32215],{"class":55},[45,48339,48340,48342,48344,48346],{"class":47,"line":8207},[45,48341,32220],{"class":5366},[45,48343,59],{"class":51},[45,48345,475],{"class":79},[45,48347,31566],{"class":55},[45,48349,48350,48352,48354,48356],{"class":47,"line":9866},[45,48351,32231],{"class":5366},[45,48353,59],{"class":51},[45,48355,31576],{"class":79},[45,48357,31566],{"class":55},[45,48359,48360,48362,48364,48366],{"class":47,"line":9890},[45,48361,32242],{"class":5366},[45,48363,59],{"class":51},[45,48365,672],{"class":79},[45,48367,139],{"class":55},[45,48369,48370,48372],{"class":47,"line":9913},[45,48371,4240],{"class":51},[45,48373,32255],{"class":55},[45,48375,48376],{"class":47,"line":9937},[45,48377,2550],{"emptyLinePlaceholder":207},[45,48379,48380],{"class":47,"line":9942},[45,48381,32264],{"class":337},[45,48383,48384],{"class":47,"line":9947},[45,48385,32269],{"class":337},[45,48387,48388],{"class":47,"line":9952},[45,48389,2550],{"emptyLinePlaceholder":207},[45,48391,48392],{"class":47,"line":9961},[45,48393,32278],{"class":337},[45,48395,48396,48398,48400],{"class":47,"line":9966},[45,48397,32047],{"class":51},[45,48399,32285],{"class":69},[45,48401,32288],{"class":55},[45,48403,48404,48406,48408,48410,48412,48414,48416,48418,48420],{"class":47,"line":9972},[45,48405,31337],{"class":55},[45,48407,59],{"class":51},[45,48409,30551],{"class":55},[45,48411,31344],{"class":62},[45,48413,1855],{"class":51},[45,48415,31349],{"class":55},[45,48417,1852],{"class":51},[45,48419,32307],{"class":62},[45,48421,139],{"class":55},[45,48423,48424],{"class":47,"line":9993},[45,48425,2550],{"emptyLinePlaceholder":207},[45,48427,48428],{"class":47,"line":9999},[45,48429,32322],{"class":337},[45,48431,48432],{"class":47,"line":10013},[45,48433,32327],{"class":337},[45,48435,48436],{"class":47,"line":10019},[45,48437,32332],{"class":337},[45,48439,48440,48442,48444,48446,48448,48450,48452],{"class":47,"line":10046},[45,48441,32337],{"class":55},[45,48443,59],{"class":51},[45,48445,32342],{"class":55},[45,48447,32345],{"class":5366},[45,48449,59],{"class":51},[45,48451,32350],{"class":79},[45,48453,139],{"class":55},[45,48455,48456],{"class":47,"line":10055},[45,48457,2550],{"emptyLinePlaceholder":207},[45,48459,48460],{"class":47,"line":10061},[45,48461,32361],{"class":337},[45,48463,48464,48466,48468],{"class":47,"line":10069},[45,48465,32366],{"class":55},[45,48467,59],{"class":51},[45,48469,32371],{"class":55},[45,48471,48472],{"class":47,"line":10074},[45,48473,2550],{"emptyLinePlaceholder":207},[45,48475,48476],{"class":47,"line":16753},[45,48477,32380],{"class":337},[45,48479,48480,48482,48484],{"class":47,"line":16759},[45,48481,31389],{"class":55},[45,48483,59],{"class":51},[45,48485,32389],{"class":55},[45,48487,48488],{"class":47,"line":16782},[45,48489,32394],{"class":337},[45,48491,48492],{"class":47,"line":16788},[45,48493,32399],{"class":337},[45,48495,48496],{"class":47,"line":16811},[45,48497,32404],{"class":337},[45,48499,48500,48502,48504],{"class":47,"line":16825},[45,48501,32409],{"class":55},[45,48503,59],{"class":51},[45,48505,32414],{"class":55},[45,48507,48508],{"class":47,"line":16845},[45,48509,2550],{"emptyLinePlaceholder":207},[45,48511,48512],{"class":47,"line":16851},[45,48513,32427],{"class":337},[45,48515,48516],{"class":47,"line":16862},[45,48517,32432],{"class":337},[45,48519,48520,48522,48524],{"class":47,"line":16885},[45,48521,32437],{"class":55},[45,48523,59],{"class":51},[45,48525,32442],{"class":79},[45,48527,48528],{"class":47,"line":16907},[45,48529,32447],{"class":337},[45,48531,48532,48534,48536],{"class":47,"line":16912},[45,48533,32452],{"class":55},[45,48535,59],{"class":51},[45,48537,32457],{"class":55},[45,48539,48540],{"class":47,"line":16918},[45,48541,32462],{"class":337},[45,48543,48544,48546,48548],{"class":47,"line":16932},[45,48545,32467],{"class":55},[45,48547,59],{"class":51},[45,48549,32457],{"class":55},[45,48551,48552],{"class":47,"line":16945},[45,48553,32476],{"class":337},[45,48555,48556,48558,48560],{"class":47,"line":16950},[45,48557,32481],{"class":55},[45,48559,59],{"class":51},[45,48561,32457],{"class":55},[45,48563,48564],{"class":47,"line":16964},[45,48565,32490],{"class":337},[45,48567,48568,48570,48572],{"class":47,"line":16969},[45,48569,32495],{"class":55},[45,48571,59],{"class":51},[45,48573,32457],{"class":55},[45,48575,48576],{"class":47,"line":16975},[45,48577,2550],{"emptyLinePlaceholder":207},[45,48579,48580],{"class":47,"line":16980},[45,48581,32508],{"class":337},[45,48583,48584,48586,48588],{"class":47,"line":16994},[45,48585,32513],{"class":55},[45,48587,59],{"class":51},[45,48589,32518],{"class":55},[45,48591,48592],{"class":47,"line":16999},[45,48593,2550],{"emptyLinePlaceholder":207},[45,48595,48596],{"class":47,"line":17004},[45,48597,32531],{"class":337},[45,48599,48600,48602,48604,48606,48608],{"class":47,"line":17018},[45,48601,3351],{"class":51},[45,48603,32538],{"class":55},[45,48605,26143],{"class":51},[45,48607,32543],{"class":79},[45,48609,32546],{"class":55},[45,48611,48612,48614,48616,48618,48620,48622,48624,48626,48628,48630,48632],{"class":47,"line":17030},[45,48613,32551],{"class":79},[45,48615,282],{"class":55},[45,48617,32556],{"class":62},[45,48619,32559],{"class":79},[45,48621,861],{"class":62},[45,48623,32559],{"class":79},[45,48625,89],{"class":62},[45,48627,32568],{"class":55},[45,48629,809],{"class":51},[45,48631,495],{"class":79},[45,48633,30597],{"class":55},[45,48635,48636,48638,48640,48642,48644,48646],{"class":47,"line":17035},[45,48637,32551],{"class":79},[45,48639,282],{"class":55},[45,48641,32583],{"class":62},[45,48643,732],{"class":51},[45,48645,723],{"class":79},[45,48647,139],{"class":55},[45,48649,48650],{"class":47,"line":17048},[45,48651,2550],{"emptyLinePlaceholder":207},[45,48653,48654],{"class":47,"line":17053},[45,48655,32598],{"class":337},[45,48657,48658],{"class":47,"line":17058},[45,48659,32603],{"class":337},[45,48661,48662,48664,48666],{"class":47,"line":17063},[45,48663,32608],{"class":55},[45,48665,59],{"class":51},[45,48667,32442],{"class":79},[45,48669,48670],{"class":47,"line":17076},[45,48671,32617],{"class":337},[45,48673,48674,48676,48678],{"class":47,"line":17081},[45,48675,32622],{"class":55},[45,48677,59],{"class":51},[45,48679,3235],{"class":79},[45,48681,48682],{"class":47,"line":32733},[45,48683,32631],{"class":337},[45,48685,48686,48688,48690],{"class":47,"line":32739},[45,48687,32636],{"class":55},[45,48689,59],{"class":51},[45,48691,32442],{"class":79},[45,48693,48694],{"class":47,"line":32745},[45,48695,32645],{"class":337},[45,48697,48698,48700,48702],{"class":47,"line":32751},[45,48699,32650],{"class":55},[45,48701,59],{"class":51},[45,48703,3235],{"class":79},[45,48705,48706],{"class":47,"line":32757},[45,48707,32659],{"class":337},[45,48709,48710,48712,48714],{"class":47,"line":32768},[45,48711,32664],{"class":55},[45,48713,59],{"class":51},[45,48715,3235],{"class":79},[45,48717,48718],{"class":47,"line":32774},[45,48719,32673],{"class":337},[45,48721,48722,48724,48726],{"class":47,"line":32794},[45,48723,32678],{"class":55},[45,48725,59],{"class":51},[45,48727,3235],{"class":79},[45,48729,48730],{"class":47,"line":32800},[45,48731,32687],{"class":337},[45,48733,48734,48736,48738,48740,48742],{"class":47,"line":32811},[45,48735,3553],{"class":51},[45,48737,31701],{"class":55},[45,48739,26143],{"class":51},[45,48741,31706],{"class":79},[45,48743,32700],{"class":55},[45,48745,48746],{"class":47,"line":32817},[45,48747,32705],{"class":337},[45,48749,48750,48752,48754],{"class":47,"line":32823},[45,48751,32710],{"class":55},[45,48753,59],{"class":51},[45,48755,32715],{"class":55},[45,48757,48758],{"class":47,"line":32829},[45,48759,32720],{"class":337},[45,48761,48762,48764,48766],{"class":47,"line":32835},[45,48763,32725],{"class":55},[45,48765,59],{"class":51},[45,48767,32730],{"class":55},[45,48769,48770],{"class":47,"line":32841},[45,48771,32736],{"class":337},[45,48773,48774],{"class":47,"line":32847},[45,48775,32742],{"class":55},[45,48777,48778],{"class":47,"line":32853},[45,48779,32748],{"class":337},[45,48781,48782],{"class":47,"line":32873},[45,48783,32754],{"class":337},[45,48785,48786,48788,48790],{"class":47,"line":32879},[45,48787,32760],{"class":55},[45,48789,59],{"class":51},[45,48791,32765],{"class":55},[45,48793,48794],{"class":47,"line":32895},[45,48795,32771],{"class":337},[45,48797,48798,48800,48802,48804,48806,48808,48810],{"class":47,"line":32901},[45,48799,32777],{"class":55},[45,48801,59],{"class":51},[45,48803,32782],{"class":55},[45,48805,32785],{"class":5366},[45,48807,59],{"class":51},[45,48809,495],{"class":79},[45,48811,139],{"class":55},[45,48813,48814],{"class":47,"line":32915},[45,48815,32797],{"class":337},[45,48817,48818,48820,48822],{"class":47,"line":32921},[45,48819,32803],{"class":55},[45,48821,59],{"class":51},[45,48823,32808],{"class":55},[45,48825,48826],{"class":47,"line":32936},[45,48827,32814],{"class":337},[45,48829,48830],{"class":47,"line":32942},[45,48831,32820],{"class":55},[45,48833,48834],{"class":47,"line":32951},[45,48835,32826],{"class":337},[45,48837,48838],{"class":47,"line":32957},[45,48839,32832],{"class":55},[45,48841,48842],{"class":47,"line":32966},[45,48843,32838],{"class":337},[45,48845,48846],{"class":47,"line":32972},[45,48847,32844],{"class":55},[45,48849,48850],{"class":47,"line":32978},[45,48851,32850],{"class":337},[45,48853,48854,48856,48858,48860,48862,48864,48866],{"class":47,"line":32987},[45,48855,32856],{"class":55},[45,48857,9627],{"class":51},[45,48859,32861],{"class":55},[45,48861,732],{"class":51},[45,48863,32866],{"class":55},[45,48865,469],{"class":79},[45,48867,139],{"class":55},[45,48869,48870],{"class":47,"line":32993},[45,48871,32876],{"class":337},[45,48873,48874,48876,48878,48880,48882],{"class":47,"line":33004},[45,48875,32882],{"class":55},[45,48877,9627],{"class":51},[45,48879,32887],{"class":55},[45,48881,3099],{"class":51},[45,48883,32892],{"class":55},[45,48885,48886],{"class":47,"line":33010},[45,48887,32898],{"class":337},[45,48889,48890,48892,48894,48896,48898],{"class":47,"line":33029},[45,48891,32904],{"class":55},[45,48893,9627],{"class":51},[45,48895,32866],{"class":55},[45,48897,469],{"class":79},[45,48899,139],{"class":55},[45,48901,48902],{"class":47,"line":33035},[45,48903,32918],{"class":337},[45,48905,48906,48908,48910,48912,48914],{"class":47,"line":33046},[45,48907,3553],{"class":51},[45,48909,32926],{"class":55},[45,48911,26143],{"class":51},[45,48913,31706],{"class":79},[45,48915,32933],{"class":55},[45,48917,48918],{"class":47,"line":33052},[45,48919,32939],{"class":337},[45,48921,48922,48924,48926],{"class":47,"line":33072},[45,48923,32710],{"class":55},[45,48925,59],{"class":51},[45,48927,32715],{"class":55},[45,48929,48930],{"class":47,"line":33088},[45,48931,32954],{"class":337},[45,48933,48934,48936,48938],{"class":47,"line":33094},[45,48935,32725],{"class":55},[45,48937,59],{"class":51},[45,48939,32730],{"class":55},[45,48941,48942],{"class":47,"line":33108},[45,48943,32969],{"class":337},[45,48945,48946],{"class":47,"line":33114},[45,48947,32975],{"class":55},[45,48949,48950],{"class":47,"line":33120},[45,48951,36456],{"class":337},[45,48953,48954,48956],{"class":47,"line":33131},[45,48955,32981],{"class":51},[45,48957,32984],{"class":55},[45,48959,48960],{"class":47,"line":33137},[45,48961,32990],{"class":337},[45,48963,48964,48966,48968],{"class":47,"line":33143},[45,48965,36471],{"class":55},[45,48967,59],{"class":51},[45,48969,32765],{"class":55},[45,48971,48972],{"class":47,"line":33153},[45,48973,33007],{"class":337},[45,48975,48976,48978,48980,48982,48984,48986,48988],{"class":47,"line":33159},[45,48977,36484],{"class":55},[45,48979,59],{"class":51},[45,48981,32782],{"class":55},[45,48983,32785],{"class":5366},[45,48985,59],{"class":51},[45,48987,495],{"class":79},[45,48989,139],{"class":55},[45,48991,48992],{"class":47,"line":33170},[45,48993,33032],{"class":337},[45,48995,48996,48998,49000],{"class":47,"line":33176},[45,48997,36505],{"class":55},[45,48999,59],{"class":51},[45,49001,32808],{"class":55},[45,49003,49004],{"class":47,"line":33186},[45,49005,33049],{"class":337},[45,49007,49008,49010,49012,49014,49016,49018,49020],{"class":47,"line":33191},[45,49009,36518],{"class":55},[45,49011,9627],{"class":51},[45,49013,36523],{"class":55},[45,49015,732],{"class":51},[45,49017,32866],{"class":55},[45,49019,469],{"class":79},[45,49021,139],{"class":55},[45,49023,49024,49026,49028,49030,49032],{"class":47,"line":33197},[45,49025,36536],{"class":55},[45,49027,9627],{"class":51},[45,49029,32887],{"class":55},[45,49031,3099],{"class":51},[45,49033,32892],{"class":55},[45,49035,49036],{"class":47,"line":33246},[45,49037,36549],{"class":337},[45,49039,49040,49042,49044,49046,49048],{"class":47,"line":33293},[45,49041,36554],{"class":55},[45,49043,9627],{"class":51},[45,49045,32866],{"class":55},[45,49047,469],{"class":79},[45,49049,139],{"class":55},[45,49051,49052],{"class":47,"line":33298},[45,49053,33111],{"class":337},[45,49055,49056],{"class":47,"line":33304},[45,49057,33117],{"class":337},[45,49059,49060,49062,49064],{"class":47,"line":33323},[45,49061,33123],{"class":55},[45,49063,861],{"class":51},[45,49065,33128],{"class":55},[45,49067,49068],{"class":47,"line":33329},[45,49069,33134],{"class":337},[45,49071,49072],{"class":47,"line":33349},[45,49073,33140],{"class":337},[45,49075,49076,49078,49080],{"class":47,"line":33355},[45,49077,33146],{"class":55},[45,49079,861],{"class":51},[45,49081,33128],{"class":55},[45,49083,49084],{"class":47,"line":33361},[45,49085,33156],{"class":337},[45,49087,49088,49090,49092],{"class":47,"line":33371},[45,49089,33162],{"class":55},[45,49091,861],{"class":51},[45,49093,33167],{"class":55},[45,49095,49096],{"class":47,"line":33376},[45,49097,33173],{"class":337},[45,49099,49100,49102,49104],{"class":47,"line":33382},[45,49101,33179],{"class":55},[45,49103,861],{"class":51},[45,49105,33167],{"class":55},[45,49107,49108],{"class":47,"line":33398},[45,49109,2550],{"emptyLinePlaceholder":207},[45,49111,49112],{"class":47,"line":33443},[45,49113,33194],{"class":337},[45,49115,49116,49118,49120,49122,49124,49126,49128,49130,49132,49134,49136,49138,49140,49142,49144,49146,49148,49150,49152,49154],{"class":47,"line":33449},[45,49117,32551],{"class":79},[45,49119,282],{"class":55},[45,49121,3742],{"class":62},[45,49123,32559],{"class":79},[45,49125,33208],{"class":62},[45,49127,1173],{"class":79},[45,49129,33213],{"class":51},[45,49131,1223],{"class":79},[45,49133,33218],{"class":62},[45,49135,1173],{"class":79},[45,49137,33213],{"class":51},[45,49139,1223],{"class":79},[45,49141,3742],{"class":62},[45,49143,33229],{"class":55},[45,49145,809],{"class":51},[45,49147,495],{"class":79},[45,49149,33236],{"class":55},[45,49151,809],{"class":51},[45,49153,495],{"class":79},[45,49155,33243],{"class":55},[45,49157,49158,49160,49162,49164,49166,49168,49170,49172,49174,49176,49178,49180,49182,49184,49186,49188,49190,49192,49194,49196],{"class":47,"line":33455},[45,49159,32551],{"class":79},[45,49161,282],{"class":55},[45,49163,3742],{"class":62},[45,49165,32559],{"class":79},[45,49167,33257],{"class":62},[45,49169,1173],{"class":79},[45,49171,33213],{"class":51},[45,49173,1223],{"class":79},[45,49175,33266],{"class":62},[45,49177,1173],{"class":79},[45,49179,33213],{"class":51},[45,49181,1223],{"class":79},[45,49183,3742],{"class":62},[45,49185,33277],{"class":55},[45,49187,809],{"class":51},[45,49189,495],{"class":79},[45,49191,33284],{"class":55},[45,49193,809],{"class":51},[45,49195,495],{"class":79},[45,49197,33243],{"class":55},[45,49199,49200],{"class":47,"line":33461},[45,49201,2550],{"emptyLinePlaceholder":207},[45,49203,49204],{"class":47,"line":33472},[45,49205,33301],{"class":337},[45,49207,49208,49210,49212,49214,49216,49218,49220],{"class":47,"line":33478},[45,49209,2647],{"class":51},[45,49211,33309],{"class":55},[45,49213,809],{"class":51},[45,49215,495],{"class":79},[45,49217,1217],{"class":55},[45,49219,1237],{"class":51},[45,49221,33320],{"class":55},[45,49223,49224],{"class":47,"line":33484},[45,49225,33326],{"class":337},[45,49227,49228,49230,49232,49234,49236,49238,49240],{"class":47,"line":33490},[45,49229,33332],{"class":55},[45,49231,320],{"class":79},[45,49233,59],{"class":51},[45,49235,33339],{"class":55},[45,49237,809],{"class":51},[45,49239,495],{"class":79},[45,49241,33346],{"class":55},[45,49243,49244],{"class":47,"line":33508},[45,49245,33352],{"class":337},[45,49247,49248],{"class":47,"line":33522},[45,49249,33358],{"class":337},[45,49251,49252,49254,49256],{"class":47,"line":33531},[45,49253,33364],{"class":55},[45,49255,59],{"class":51},[45,49257,32414],{"class":55},[45,49259,49260],{"class":47,"line":33540},[45,49261,2550],{"emptyLinePlaceholder":207},[45,49263,49264],{"class":47,"line":33549},[45,49265,33379],{"class":337},[45,49267,49268,49270,49272,49274,49276],{"class":47,"line":33558},[45,49269,33385],{"class":55},[45,49271,59],{"class":51},[45,49273,33390],{"class":55},[45,49275,809],{"class":51},[45,49277,33395],{"class":55},[45,49279,49280,49282,49284,49286,49288,49290,49292,49294,49296,49298,49300,49302,49304,49306,49308,49310,49312,49314],{"class":47,"line":33564},[45,49281,32551],{"class":79},[45,49283,282],{"class":55},[45,49285,33405],{"class":62},[45,49287,1173],{"class":79},[45,49289,33410],{"class":51},[45,49291,1223],{"class":79},[45,49293,821],{"class":62},[45,49295,1173],{"class":79},[45,49297,33410],{"class":51},[45,49299,1223],{"class":79},[45,49301,33423],{"class":62},[45,49303,33426],{"class":55},[45,49305,33429],{"class":51},[45,49307,1184],{"class":79},[45,49309,33434],{"class":55},[45,49311,605],{"class":51},[45,49313,1184],{"class":79},[45,49315,30597],{"class":55},[45,49317,49318],{"class":47,"line":33570},[45,49319,36833],{"class":337},[45,49321,49322],{"class":47,"line":33578},[45,49323,36838],{"class":337},[45,49325,49326,49328,49330],{"class":47,"line":33583},[45,49327,36843],{"class":55},[45,49329,33467],{"class":62},[45,49331,139],{"class":55},[45,49333,49334],{"class":47,"line":33589},[45,49335,33487],{"class":337},[45,49337,49338,49340,49342,49344,49346,49348],{"class":47,"line":33600},[45,49339,33493],{"class":55},[45,49341,59],{"class":51},[45,49343,33498],{"class":55},[45,49345,33501],{"class":5366},[45,49347,59],{"class":51},[45,49349,1697],{"class":55},[45,49351,49352,49354,49356,49358],{"class":47,"line":33606},[45,49353,33511],{"class":62},[45,49355,1136],{"class":55},[45,49357,33516],{"class":79},[45,49359,33519],{"class":55},[45,49361,49362,49364],{"class":47,"line":33626},[45,49363,33525],{"class":62},[45,49365,33528],{"class":55},[45,49367,49368,49370],{"class":47,"line":33632},[45,49369,33534],{"class":62},[45,49371,33537],{"class":55},[45,49373,49374,49376],{"class":47,"line":33638},[45,49375,33543],{"class":62},[45,49377,33546],{"class":55},[45,49379,49380,49382],{"class":47,"line":33644},[45,49381,33552],{"class":62},[45,49383,33555],{"class":55},[45,49385,49386],{"class":47,"line":33661},[45,49387,33561],{"class":55},[45,49389,49390],{"class":47,"line":33667},[45,49391,33567],{"class":337},[45,49393,49394,49396],{"class":47,"line":33673},[45,49395,4240],{"class":51},[45,49397,33575],{"class":55},[45,49399,49400],{"class":47,"line":33679},[45,49401,2550],{"emptyLinePlaceholder":207},[45,49403,49404],{"class":47,"line":33685},[45,49405,33586],{"class":337},[45,49407,49408,49410,49412],{"class":47,"line":33691},[45,49409,32047],{"class":51},[45,49411,33594],{"class":69},[45,49413,33597],{"class":55},[45,49415,49416],{"class":47,"line":33718},[45,49417,33603],{"class":337},[45,49419,49420,49422,49424,49426,49428,49430,49432,49434],{"class":47,"line":33742},[45,49421,33609],{"class":55},[45,49423,31793],{"class":5366},[45,49425,59],{"class":51},[45,49427,282],{"class":55},[45,49429,775],{"class":79},[45,49431,655],{"class":55},[45,49433,570],{"class":79},[45,49435,30597],{"class":55},[45,49437,49438],{"class":47,"line":33748},[45,49439,33629],{"class":337},[45,49441,49442],{"class":47,"line":33754},[45,49443,33635],{"class":337},[45,49445,49446],{"class":47,"line":33760},[45,49447,33641],{"class":337},[45,49449,49450,49452,49454,49456,49458,49460,49462],{"class":47,"line":33771},[45,49451,31827],{"class":55},[45,49453,495],{"class":79},[45,49455,655],{"class":55},[45,49457,356],{"class":79},[45,49459,655],{"class":55},[45,49461,495],{"class":79},[45,49463,139],{"class":55},[45,49465,49466],{"class":47,"line":33782},[45,49467,33664],{"class":337},[45,49469,49470],{"class":47,"line":33788},[45,49471,33670],{"class":337},[45,49473,49474],{"class":47,"line":33805},[45,49475,33676],{"class":337},[45,49477,49478],{"class":47,"line":33828},[45,49479,33682],{"class":337},[45,49481,49482],{"class":47,"line":33851},[45,49483,33688],{"class":337},[45,49485,49486,49488,49490,49492,49494,49496,49498,49500,49502],{"class":47,"line":33857},[45,49487,33694],{"class":55},[45,49489,33697],{"class":62},[45,49491,33700],{"class":55},[45,49493,33703],{"class":62},[45,49495,655],{"class":55},[45,49497,33708],{"class":5366},[45,49499,59],{"class":51},[45,49501,33713],{"class":62},[45,49503,139],{"class":55},[45,49505,49506,49508,49510,49512,49514,49516,49518,49520,49522],{"class":47,"line":33862},[45,49507,33694],{"class":55},[45,49509,33697],{"class":62},[45,49511,33725],{"class":55},[45,49513,33728],{"class":62},[45,49515,655],{"class":55},[45,49517,33708],{"class":5366},[45,49519,59],{"class":51},[45,49521,33737],{"class":62},[45,49523,139],{"class":55},[45,49525,49526],{"class":47,"line":33871},[45,49527,33745],{"class":337},[45,49529,49530],{"class":47,"line":33881},[45,49531,33751],{"class":55},[45,49533,49534],{"class":47,"line":33887},[45,49535,33757],{"class":337},[45,49537,49538,49540,49542],{"class":47,"line":33892},[45,49539,33763],{"class":55},[45,49541,33766],{"class":62},[45,49543,139],{"class":55},[45,49545,49546,49548,49550],{"class":47,"line":33898},[45,49547,33774],{"class":55},[45,49549,33777],{"class":62},[45,49551,139],{"class":55},[45,49553,49554],{"class":47,"line":33911},[45,49555,33785],{"class":337},[45,49557,49558,49560,49562,49564,49566,49568,49570],{"class":47,"line":33917},[45,49559,31827],{"class":55},[45,49561,495],{"class":79},[45,49563,655],{"class":55},[45,49565,356],{"class":79},[45,49567,655],{"class":55},[45,49569,356],{"class":79},[45,49571,139],{"class":55},[45,49573,49574,49576,49578,49580,49582,49584,49586,49588,49590],{"class":47,"line":33928},[45,49575,33694],{"class":55},[45,49577,33697],{"class":62},[45,49579,33812],{"class":55},[45,49581,33703],{"class":62},[45,49583,655],{"class":55},[45,49585,33708],{"class":5366},[45,49587,59],{"class":51},[45,49589,33823],{"class":62},[45,49591,139],{"class":55},[45,49593,49594,49596,49598,49600,49602,49604,49606,49608,49610],{"class":47,"line":33939},[45,49595,33694],{"class":55},[45,49597,33697],{"class":62},[45,49599,33835],{"class":55},[45,49601,33728],{"class":62},[45,49603,655],{"class":55},[45,49605,33708],{"class":5366},[45,49607,59],{"class":51},[45,49609,33846],{"class":62},[45,49611,139],{"class":55},[45,49613,49614],{"class":47,"line":33958},[45,49615,33854],{"class":337},[45,49617,49619],{"class":47,"line":49618},219,[45,49620,33751],{"class":55},[45,49622,49624,49626,49628],{"class":47,"line":49623},220,[45,49625,33763],{"class":55},[45,49627,33697],{"class":62},[45,49629,139],{"class":55},[45,49631,49633,49635,49637],{"class":47,"line":49632},221,[45,49634,33774],{"class":55},[45,49636,33876],{"class":62},[45,49638,139],{"class":55},[45,49640,49642],{"class":47,"line":49641},222,[45,49643,33884],{"class":55},[45,49645,49647],{"class":47,"line":49646},223,[45,49648,2550],{"emptyLinePlaceholder":207},[45,49650,49652],{"class":47,"line":49651},224,[45,49653,33895],{"class":337},[45,49655,49657,49659,49661,49663,49665],{"class":47,"line":49656},225,[45,49658,1682],{"class":51},[45,49660,31320],{"class":79},[45,49662,3099],{"class":51},[45,49664,31325],{"class":62},[45,49666,3889],{"class":55},[45,49668,49670],{"class":47,"line":49669},226,[45,49671,33914],{"class":337},[45,49673,49675,49677,49679],{"class":47,"line":49674},227,[45,49676,44646],{"class":55},[45,49678,59],{"class":51},[45,49680,44651],{"class":55},[45,49682,49684,49686,49688],{"class":47,"line":49683},228,[45,49685,33931],{"class":55},[45,49687,59],{"class":51},[45,49689,33936],{"class":55},[45,49691,49693,49695,49697,49699,49701,49703,49705],{"class":47,"line":49692},229,[45,49694,33493],{"class":55},[45,49696,59],{"class":51},[45,49698,44668],{"class":55},[45,49700,33949],{"class":5366},[45,49702,59],{"class":51},[45,49704,1184],{"class":79},[45,49706,139],{"class":55},[45,49708,49710],{"class":47,"line":49709},230,[45,49711,33961],{"class":55},[22147,49713,49715],{"id":49714},"_242测试代码","2.4.2.测试代码",[20,49717,49718],{},"使用测试集进行测试与推理",[36,49720,49722],{"className":30478,"code":49721,"language":30480,"meta":25,"style":25},"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",[42,49723,49724,49730,49740,49750,49761,49771,49775,49779,49787,49792,49796,49813,49817,49821,49825,49829,49833,49865,49869,49877,49881,49893,49897,49901,49905,49909,49913,49917,49921,49925,49943,49957,49961,49971,49981,49991,49997,50001,50005,50013,50017,50033,50041,50045,50049,50057,50065,50069,50073,50077,50081,50087,50091,50101,50109,50117,50121,50125,50129,50137,50141,50157,50161,50165,50169,50181,50185,50197,50201,50205,50217,50221,50231,50235,50239,50251,50255,50263,50267,50271,50279,50283,50291,50295,50299,50303,50307,50311,50327,50335,50339,50343,50361,50367,50371,50381,50389,50397,50401,50405,50409,50413,50421,50425,50441,50445,50453,50461],{"__ignoreMap":25},[45,49725,49726,49728],{"class":47,"line":48},[45,49727,30492],{"class":51},[45,49729,30495],{"class":55},[45,49731,49732,49734,49736,49738],{"class":47,"line":66},[45,49733,30492],{"class":51},[45,49735,31515],{"class":55},[45,49737,31483],{"class":51},[45,49739,31520],{"class":55},[45,49741,49742,49744,49746,49748],{"class":47,"line":1331},[45,49743,30837],{"class":51},[45,49745,31498],{"class":55},[45,49747,30492],{"class":51},[45,49749,31503],{"class":55},[45,49751,49752,49754,49756,49758],{"class":47,"line":1346},[45,49753,30837],{"class":51},[45,49755,31468],{"class":55},[45,49757,30492],{"class":51},[45,49759,49760],{"class":55}," ImageFolder\n",[45,49762,49763,49765,49767,49769],{"class":47,"line":1352},[45,49764,30837],{"class":51},[45,49766,32014],{"class":55},[45,49768,30492],{"class":51},[45,49770,44740],{"class":55},[45,49772,49773],{"class":47,"line":1366},[45,49774,2550],{"emptyLinePlaceholder":207},[45,49776,49777],{"class":47,"line":1372},[45,49778,34051],{"class":337},[45,49780,49781,49783,49785],{"class":47,"line":1463},[45,49782,32047],{"class":51},[45,49784,34058],{"class":69},[45,49786,32053],{"class":55},[45,49788,49789],{"class":47,"line":1469},[45,49790,49791],{"class":337},"   # 导入自己的数据集，并进行数据处理\n",[45,49793,49794],{"class":47,"line":1481},[45,49795,48061],{"class":337},[45,49797,49798,49800,49802,49804,49806,49808,49811],{"class":47,"line":1763},[45,49799,48066],{"class":79},[45,49801,59],{"class":51},[45,49803,947],{"class":51},[45,49805,89],{"class":62},[45,49807,835],{"class":79},[45,49809,49810],{"class":48077},"\u002Fdata\u002Ftest",[45,49812,152],{"class":62},[45,49814,49815],{"class":47,"line":1768},[45,49816,2550],{"emptyLinePlaceholder":207},[45,49818,49819],{"class":47,"line":1774},[45,49820,48089],{"class":337},[45,49822,49823],{"class":47,"line":1779},[45,49824,48094],{"class":337},[45,49826,49827],{"class":47,"line":1793},[45,49828,48099],{"class":337},[45,49830,49831],{"class":47,"line":1798},[45,49832,48104],{"class":337},[45,49834,49835,49837,49839,49841,49843,49845,49847,49849,49851,49853,49855,49857,49859,49861,49863],{"class":47,"line":1804},[45,49836,48109],{"class":55},[45,49838,59],{"class":51},[45,49840,48114],{"class":55},[45,49842,48117],{"class":79},[45,49844,655],{"class":55},[45,49846,48122],{"class":79},[45,49848,655],{"class":55},[45,49850,48127],{"class":79},[45,49852,48130],{"class":55},[45,49854,48133],{"class":79},[45,49856,655],{"class":55},[45,49858,48138],{"class":79},[45,49860,655],{"class":55},[45,49862,48143],{"class":79},[45,49864,4807],{"class":55},[45,49866,49867],{"class":47,"line":1825},[45,49868,48150],{"class":337},[45,49870,49871,49873,49875],{"class":47,"line":1830},[45,49872,48155],{"class":55},[45,49874,59],{"class":51},[45,49876,48160],{"class":55},[45,49878,49879],{"class":47,"line":1844},[45,49880,48165],{"class":337},[45,49882,49883,49885,49887,49889,49891],{"class":47,"line":1849},[45,49884,48170],{"class":55},[45,49886,31601],{"class":79},[45,49888,655],{"class":55},[45,49890,31601],{"class":79},[45,49892,42722],{"class":55},[45,49894,49895],{"class":47,"line":1878},[45,49896,48183],{"class":337},[45,49898,49899],{"class":47,"line":1883},[45,49900,48188],{"class":55},[45,49902,49903],{"class":47,"line":1900},[45,49904,48193],{"class":55},[45,49906,49907],{"class":47,"line":1905},[45,49908,48198],{"class":337},[45,49910,49911],{"class":47,"line":1910},[45,49912,48203],{"class":337},[45,49914,49915],{"class":47,"line":1915},[45,49916,2550],{"emptyLinePlaceholder":207},[45,49918,49919],{"class":47,"line":1929},[45,49920,48212],{"class":337},[45,49922,49923],{"class":47,"line":1934},[45,49924,48217],{"class":337},[45,49926,49927,49929,49931,49933,49935,49937,49939,49941],{"class":47,"line":2727},[45,49928,34065],{"class":55},[45,49930,59],{"class":51},[45,49932,48226],{"class":55},[45,49934,48229],{"class":79},[45,49936,655],{"class":55},[45,49938,48234],{"class":5366},[45,49940,59],{"class":51},[45,49942,48239],{"class":55},[45,49944,49945,49947,49949,49951,49953,49955],{"class":47,"line":2741},[45,49946,34122],{"class":55},[45,49948,59],{"class":51},[45,49950,31634],{"class":55},[45,49952,31637],{"class":5366},[45,49954,59],{"class":51},[45,49956,34133],{"class":55},[45,49958,49959],{"class":47,"line":2749},[45,49960,34138],{"class":337},[45,49962,49963,49965,49967,49969],{"class":47,"line":2754},[45,49964,34143],{"class":5366},[45,49966,59],{"class":51},[45,49968,495],{"class":79},[45,49970,31566],{"class":55},[45,49972,49973,49975,49977,49979],{"class":47,"line":2760},[45,49974,34154],{"class":5366},[45,49976,59],{"class":51},[45,49978,31576],{"class":79},[45,49980,31566],{"class":55},[45,49982,49983,49985,49987,49989],{"class":47,"line":2766},[45,49984,34165],{"class":5366},[45,49986,59],{"class":51},[45,49988,469],{"class":79},[45,49990,139],{"class":55},[45,49992,49993,49995],{"class":47,"line":2771},[45,49994,4240],{"class":51},[45,49996,34178],{"class":55},[45,49998,49999],{"class":47,"line":8098},[45,50000,2550],{"emptyLinePlaceholder":207},[45,50002,50003],{"class":47,"line":8122},[45,50004,34187],{"class":337},[45,50006,50007,50009,50011],{"class":47,"line":8127},[45,50008,32047],{"class":51},[45,50010,34194],{"class":69},[45,50012,34197],{"class":55},[45,50014,50015],{"class":47,"line":8133},[45,50016,34202],{"class":337},[45,50018,50019,50021,50023,50025,50027,50029,50031],{"class":47,"line":8160},[45,50020,31337],{"class":55},[45,50022,59],{"class":51},[45,50024,31344],{"class":62},[45,50026,1855],{"class":51},[45,50028,31349],{"class":55},[45,50030,1852],{"class":51},[45,50032,34219],{"class":62},[45,50034,50035,50037,50039],{"class":47,"line":8165},[45,50036,31389],{"class":55},[45,50038,59],{"class":51},[45,50040,32389],{"class":55},[45,50042,50043],{"class":47,"line":8171},[45,50044,2550],{"emptyLinePlaceholder":207},[45,50046,50047],{"class":47,"line":8183},[45,50048,34236],{"class":337},[45,50050,50051,50053,50055],{"class":47,"line":8195},[45,50052,34241],{"class":55},[45,50054,59],{"class":51},[45,50056,32442],{"class":79},[45,50058,50059,50061,50063],{"class":47,"line":8207},[45,50060,34250],{"class":55},[45,50062,59],{"class":51},[45,50064,3235],{"class":79},[45,50066,50067],{"class":47,"line":9866},[45,50068,2550],{"emptyLinePlaceholder":207},[45,50070,50071],{"class":47,"line":9890},[45,50072,34263],{"class":337},[45,50074,50075],{"class":47,"line":9913},[45,50076,34268],{"class":337},[45,50078,50079],{"class":47,"line":9937},[45,50080,34273],{"class":337},[45,50082,50083,50085],{"class":47,"line":9942},[45,50084,34278],{"class":51},[45,50086,32984],{"class":55},[45,50088,50089],{"class":47,"line":9947},[45,50090,34285],{"class":337},[45,50092,50093,50095,50097,50099],{"class":47,"line":9952},[45,50094,3553],{"class":51},[45,50096,34292],{"class":55},[45,50098,26143],{"class":51},[45,50100,34297],{"class":55},[45,50102,50103,50105,50107],{"class":47,"line":9961},[45,50104,34302],{"class":55},[45,50106,59],{"class":51},[45,50108,34307],{"class":55},[45,50110,50111,50113,50115],{"class":47,"line":9966},[45,50112,34312],{"class":55},[45,50114,59],{"class":51},[45,50116,34317],{"class":55},[45,50118,50119],{"class":47,"line":9972},[45,50120,34322],{"class":337},[45,50122,50123],{"class":47,"line":9993},[45,50124,32975],{"class":55},[45,50126,50127],{"class":47,"line":9999},[45,50128,34331],{"class":337},[45,50130,50131,50133,50135],{"class":47,"line":10013},[45,50132,32760],{"class":55},[45,50134,59],{"class":51},[45,50136,34340],{"class":55},[45,50138,50139],{"class":47,"line":10019},[45,50140,34345],{"class":337},[45,50142,50143,50145,50147,50149,50151,50153,50155],{"class":47,"line":10046},[45,50144,32777],{"class":55},[45,50146,59],{"class":51},[45,50148,32782],{"class":55},[45,50150,32785],{"class":5366},[45,50152,59],{"class":51},[45,50154,495],{"class":79},[45,50156,139],{"class":55},[45,50158,50159],{"class":47,"line":10055},[45,50160,34366],{"class":337},[45,50162,50163],{"class":47,"line":10061},[45,50164,34371],{"class":337},[45,50166,50167],{"class":47,"line":10069},[45,50168,34376],{"class":337},[45,50170,50171,50173,50175,50177,50179],{"class":47,"line":10074},[45,50172,34381],{"class":55},[45,50174,9627],{"class":51},[45,50176,32887],{"class":55},[45,50178,3099],{"class":51},[45,50180,34390],{"class":55},[45,50182,50183],{"class":47,"line":16753},[45,50184,34395],{"class":337},[45,50186,50187,50189,50191,50193,50195],{"class":47,"line":16759},[45,50188,34400],{"class":55},[45,50190,9627],{"class":51},[45,50192,34405],{"class":55},[45,50194,469],{"class":79},[45,50196,139],{"class":55},[45,50198,50199],{"class":47,"line":16782},[45,50200,2550],{"emptyLinePlaceholder":207},[45,50202,50203],{"class":47,"line":16788},[45,50204,34418],{"class":337},[45,50206,50207,50209,50211,50213,50215],{"class":47,"line":16811},[45,50208,34423],{"class":55},[45,50210,59],{"class":51},[45,50212,34428],{"class":55},[45,50214,861],{"class":51},[45,50216,34433],{"class":55},[45,50218,50219],{"class":47,"line":16825},[45,50220,34438],{"class":337},[45,50222,50223,50225,50227,50229],{"class":47,"line":16845},[45,50224,32551],{"class":79},[45,50226,282],{"class":55},[45,50228,34447],{"class":62},[45,50230,34450],{"class":55},[45,50232,50233],{"class":47,"line":16851},[45,50234,2550],{"emptyLinePlaceholder":207},[45,50236,50237],{"class":47,"line":16862},[45,50238,34459],{"class":337},[45,50240,50241,50243,50245,50247,50249],{"class":47,"line":16885},[45,50242,1682],{"class":51},[45,50244,31320],{"class":79},[45,50246,3099],{"class":51},[45,50248,31325],{"class":62},[45,50250,3889],{"class":55},[45,50252,50253],{"class":47,"line":16907},[45,50254,34476],{"class":337},[45,50256,50257,50259,50261],{"class":47,"line":16912},[45,50258,31389],{"class":55},[45,50260,59],{"class":51},[45,50262,44651],{"class":55},[45,50264,50265],{"class":47,"line":16918},[45,50266,34489],{"class":337},[45,50268,50269],{"class":47,"line":16932},[45,50270,34494],{"class":337},[45,50272,50273,50275,50277],{"class":47,"line":16945},[45,50274,34499],{"class":55},[45,50276,34502],{"class":62},[45,50278,30597],{"class":55},[45,50280,50281],{"class":47,"line":16950},[45,50282,34509],{"class":337},[45,50284,50285,50287,50289],{"class":47,"line":16964},[45,50286,34122],{"class":55},[45,50288,59],{"class":51},[45,50290,34518],{"class":55},[45,50292,50293],{"class":47,"line":16969},[45,50294,34523],{"class":337},[45,50296,50297],{"class":47,"line":16975},[45,50298,34528],{"class":55},[45,50300,50301],{"class":47,"line":16980},[45,50302,2550],{"emptyLinePlaceholder":207},[45,50304,50305],{"class":47,"line":16994},[45,50306,34537],{"class":337},[45,50308,50309],{"class":47,"line":16999},[45,50310,34542],{"class":337},[45,50312,50313,50315,50317,50319,50321,50323,50325],{"class":47,"line":17004},[45,50314,31337],{"class":55},[45,50316,59],{"class":51},[45,50318,31344],{"class":62},[45,50320,1855],{"class":51},[45,50322,31349],{"class":55},[45,50324,1852],{"class":51},[45,50326,34219],{"class":62},[45,50328,50329,50331,50333],{"class":47,"line":17018},[45,50330,31389],{"class":55},[45,50332,59],{"class":51},[45,50334,32389],{"class":55},[45,50336,50337],{"class":47,"line":17030},[45,50338,34571],{"class":337},[45,50340,50341],{"class":47,"line":17035},[45,50342,34576],{"class":337},[45,50344,50345,50347,50349,50351,50354,50356,50359],{"class":47,"line":17048},[45,50346,34581],{"class":55},[45,50348,59],{"class":51},[45,50350,1167],{"class":55},[45,50352,50353],{"class":62},"'猫'",[45,50355,655],{"class":55},[45,50357,50358],{"class":62},"'狗'",[45,50360,33346],{"class":55},[45,50362,50363,50365],{"class":47,"line":17053},[45,50364,34278],{"class":51},[45,50366,32984],{"class":55},[45,50368,50369],{"class":47,"line":17058},[45,50370,34646],{"class":337},[45,50372,50373,50375,50377,50379],{"class":47,"line":17063},[45,50374,3553],{"class":51},[45,50376,34653],{"class":55},[45,50378,26143],{"class":51},[45,50380,34297],{"class":55},[45,50382,50383,50385,50387],{"class":47,"line":17076},[45,50384,32710],{"class":55},[45,50386,59],{"class":51},[45,50388,32715],{"class":55},[45,50390,50391,50393,50395],{"class":47,"line":17081},[45,50392,32725],{"class":55},[45,50394,59],{"class":51},[45,50396,32730],{"class":55},[45,50398,50399],{"class":47,"line":32733},[45,50400,2550],{"emptyLinePlaceholder":207},[45,50402,50403],{"class":47,"line":32739},[45,50404,34682],{"class":337},[45,50406,50407],{"class":47,"line":32745},[45,50408,32975],{"class":55},[45,50410,50411],{"class":47,"line":32751},[45,50412,34691],{"class":337},[45,50414,50415,50417,50419],{"class":47,"line":32757},[45,50416,32760],{"class":55},[45,50418,59],{"class":51},[45,50420,32765],{"class":55},[45,50422,50423],{"class":47,"line":32768},[45,50424,34704],{"class":337},[45,50426,50427,50429,50431,50433,50435,50437,50439],{"class":47,"line":32774},[45,50428,32777],{"class":55},[45,50430,59],{"class":51},[45,50432,32782],{"class":55},[45,50434,32785],{"class":5366},[45,50436,59],{"class":51},[45,50438,495],{"class":79},[45,50440,139],{"class":55},[45,50442,50443],{"class":47,"line":32794},[45,50444,34725],{"class":337},[45,50446,50447,50449,50451],{"class":47,"line":32800},[45,50448,34730],{"class":55},[45,50450,59],{"class":51},[45,50452,34735],{"class":55},[45,50454,50455,50457,50459],{"class":47,"line":32811},[45,50456,34740],{"class":55},[45,50458,59],{"class":51},[45,50460,34745],{"class":55},[45,50462,50463,50465,50467,50469,50471,50473,50475,50477],{"class":47,"line":32817},[45,50464,34750],{"class":79},[45,50466,282],{"class":55},[45,50468,34755],{"class":62},[45,50470,34758],{"class":55},[45,50472,34761],{"class":62},[45,50474,655],{"class":55},[45,50476,34766],{"class":62},[45,50478,34769],{"class":55},[196,50480,50481],{},"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":25,"searchDepth":66,"depth":66,"links":50483},[50484,50485,50486,50487],{"id":30691,"depth":1331,"text":30692},{"id":37939,"depth":1331,"text":37940},{"id":41372,"depth":1331,"text":41373},{"id":45381,"depth":1331,"text":45382},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30683,"description":204},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50494,"title":50495,"body":50496,"description":204,"extension":205,"meta":50503,"navigation":207,"path":50504,"seo":50505,"stem":50506,"__hash__":50507},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50497,"toc":50501},[50498],[10,50499,50495],{"id":50500},"_3yolo模型学习",{"title":25,"searchDepth":66,"depth":66,"links":50502},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50495,"description":204},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50509,"title":50510,"body":50511,"description":50518,"extension":205,"meta":50519,"navigation":207,"path":50521,"seo":50522,"stem":50523,"__hash__":50524},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50512,"toc":50516},[50513],[20,50514,50515],{},"yolo模型还未补充",{"title":25,"searchDepth":66,"depth":66,"links":50517},[],"深度学习学习",{"category":50520},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50510,"description":50518},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50526,"title":50527,"body":50528,"description":204,"extension":205,"meta":50553,"navigation":207,"path":50554,"seo":50555,"stem":50556,"__hash__":50557},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50529,"toc":50551},[50530,50533,50536,50541,50548],[10,50531,50527],{"id":50532},"_1工具",[20,50534,50535],{},"提示错误插件：有问题会提前报错",[20,50537,50538],{},[23,50539],{"alt":25,"src":50540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[20,50542,50543],{},[516,50544,50547],{"href":50545,"rel":50546},"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",[24012],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[20,50549,50550],{},"alt键加上下箭头可以实现语句的移动",{"title":25,"searchDepth":66,"depth":66,"links":50552},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50527,"description":204},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50559,"title":50560,"body":50561,"description":204,"extension":205,"meta":53425,"navigation":207,"path":53426,"seo":53427,"stem":53428,"__hash__":53429},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50562,"toc":53376},[50563,50566,50570,50574,50579,50582,50587,50591,50598,50603,50610,50615,50622,50627,50631,50636,50639,50643,50648,50652,50657,50660,50663,50666,50669,50672,50675,50678,50681,50686,50691,50696,50700,50703,50706,50710,50715,50718,50726,50731,50748,50756,50761,50766,50771,50776,50781,50784,50789,50794,50798,50807,50812,50817,50821,50826,50829,50833,50838,50846,50851,50856,50859,50864,50869,50874,50877,50880,50883,50888,50893,50896,50901,50904,50909,50912,50915,50918,50923,50926,50929,50944,50949,50954,50959,50962,50965,50968,50982,50985,50990,50995,50998,51001,51004,51007,51010,51013,51016,51020,51024,51029,51033,51036,51041,51046,51049,51054,51057,51061,51066,51069,51072,51075,51078,51081,51084,51087,51090,51093,51097,51102,51107,51112,51115,51118,51122,51127,51130,51134,51137,51140,51145,51148,51151,51155,51159,51162,51167,51172,51175,51204,51209,51214,51219,51224,51228,51233,51237,51242,51245,51249,51253,51258,51262,51267,51272,51276,51281,51284,51286,51289,51294,51298,51303,51307,51311,51316,51321,51326,51331,51335,51340,51345,51350,51353,51356,51361,51364,51369,51374,51379,51384,51388,52195,52199,52542,52547,52550,52553,52556,52559,52562,52565,52568,52571,52573,52576,52578,52581,52585,52590,52593,52596,52599,52603,52608,52613,52633,52636,52640,52645,52650,52667,52671,52700,52704,52726,52728,52767,52775,52781,52785,52788,52791,52796,52801,52804,52807,52810,52815,52820,52823,52826,52829,52832,52835,52838,52841,52844,52847,52850,52853,52855,52858,52861,52864,52867,52870,52873,52876,52879,52883,52888,52891,52896,52899,52902,52905,52908,52911,52914,52917,52919,52922,52925,52928,52931,52934,52937,52941,52944,52953,52956,52961,52964,52969,52972,52975,52978,52981,52984,52987,52990,52994,52998,53001,53004,53009,53014,53019,53023,53028,53033,53036,53039,53042,53045,53048,53053,53056,53061,53063,53068,53071,53075,53080,53083,53086,53091,53095,53098,53103,53106,53109,53138,53143,53146,53149,53152,53155,53158,53162,53165,53251,53255,53258,53263,53268,53275,53278,53281,53284,53287,53290,53295,53300,53303,53306,53309,53312,53315,53318,53321,53324,53327,53329,53332,53336,53341,53346,53351,53354,53359,53364,53367,53370,53373],[10,50564,50560],{"id":50565},"_2基础语法",[15,50567,50569],{"id":50568},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[249,50571,50573],{"id":50572},"_211-js组成","2.1.1 js组成",[233,50575,50576],{},[169,50577,50578],{},"js是编程语言，html和css不是编程语言，是标记语言",[20,50580,50581],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[233,50583,50584],{"start":66},[169,50585,50586],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[249,50588,50590],{"id":50589},"_212-js书写位置","2.1.2 js书写位置",[233,50592,50593],{},[169,50594,50595],{},[427,50596,50597],{},"内部 JavaScript",[20,50599,50600],{},[23,50601],{"alt":25,"src":50602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[233,50604,50605],{"start":66},[169,50606,50607],{},[427,50608,50609],{},"外部 JavaScript",[20,50611,50612],{},[23,50613],{"alt":25,"src":50614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[233,50616,50617],{"start":1331},[169,50618,50619],{},[427,50620,50621],{},"内联 JavaScript",[20,50623,50624],{},[23,50625],{"alt":25,"src":50626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[249,50628,50630],{"id":50629},"_213-javascript注释","2.1.3 JavaScript注释",[20,50632,50633],{},[23,50634],{"alt":25,"src":50635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[20,50637,50638],{},"alt+shift+a一定要记住！",[249,50640,50642],{"id":50641},"_214-javascript结束符","2.1.4 JavaScript结束符",[20,50644,50645],{},[23,50646],{"alt":25,"src":50647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[249,50649,50651],{"id":50650},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[233,50653,50654],{},[169,50655,50656],{},"输出语法：",[20,50658,50659],{},"①document.write('要出的内容')",[20,50661,50662],{},"向body内输出内容；",[20,50664,50665],{},"如果输出的内容写的是标签，也会被解析cheng",[20,50667,50668],{},"②alert('要出的内容')",[20,50670,50671],{},"页面弹出警告对话框",[20,50673,50674],{},"③console.log('控制台打印')",[20,50676,50677],{},"控制台输出语法，程序员调试使用",[20,50679,50680],{},"输入log就行，自动生成：",[20,50682,50683],{},[23,50684],{"alt":25,"src":50685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[233,50687,50688],{"start":66},[169,50689,50690],{},"输入语法：",[20,50692,50693],{},[23,50694],{"alt":25,"src":50695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[249,50697,50699],{"id":50698},"_2116-字面量","21.1.6 字面量",[20,50701,50702],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[20,50704,50705],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[15,50707,50709],{"id":50708},"_22-变量","2.2 变量",[233,50711,50712],{},[169,50713,50714],{},"变量声明",[20,50716,50717],{},"let 变量名",[166,50719,50720,50723],{},[169,50721,50722],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[169,50724,50725],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[233,50727,50728],{"start":66},[169,50729,50730],{},"变量赋值",[36,50732,50736],{"className":50733,"code":50734,"language":50735,"meta":25,"style":25},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[42,50737,50738,50743],{"__ignoreMap":25},[45,50739,50740],{"class":47,"line":48},[45,50741,50742],{"class":55},"let age\n",[45,50744,50745],{"class":47,"line":66},[45,50746,50747],{"class":55},"age=18\n",[233,50749,50750,50753],{"start":1331},[169,50751,50752],{},"连这些（变量的初始化）：let age=18",[169,50754,50755],{},"更新变量",[20,50757,50758],{},[23,50759],{"alt":25,"src":50760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[233,50762,50763],{"start":1352},[169,50764,50765],{},"声明多个变量",[20,50767,50768],{},[23,50769],{"alt":25,"src":50770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[233,50772,50773],{"start":1366},[169,50774,50775],{},"变量命名规则与规范",[20,50777,50778],{},[23,50779],{"alt":25,"src":50780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[20,50782,50783],{},"遵守小驼峰！",[233,50785,50786],{"start":1372},[169,50787,50788],{},"变量拓展-let和var的区别",[20,50790,50791],{},[23,50792],{"alt":25,"src":50793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[15,50795,50797],{"id":50796},"_23-数组","2.3 数组",[36,50799,50801],{"className":50733,"code":50800,"language":50735,"meta":25,"style":25},"let arr = []\n",[42,50802,50803],{"__ignoreMap":25},[45,50804,50805],{"class":47,"line":48},[45,50806,50800],{"class":55},[20,50808,50809],{},[23,50810],{"alt":25,"src":50811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[20,50813,50814],{},[23,50815],{"alt":25,"src":50816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[15,50818,50820],{"id":50819},"_24-常量","2.4 常量",[20,50822,50823],{},[23,50824],{"alt":25,"src":50825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[20,50827,50828],{},"const — 类似于 let ，但是变量的值无法被修改",[15,50830,50832],{"id":50831},"_25-数据类型","2.5 数据类型",[20,50834,50835],{},[23,50836],{"alt":25,"src":50837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[233,50839,50840,50843],{},[169,50841,50842],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[169,50844,50845],{},"算数运算符：",[20,50847,50848],{},[23,50849],{"alt":25,"src":50850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[233,50852,50853],{"start":1331},[169,50854,50855],{},"数字类型（Number）",[20,50857,50858],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[20,50860,50861],{},[23,50862],{"alt":25,"src":50863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[233,50865,50866],{"start":1346},[169,50867,50868],{},"字符串类型（string）",[20,50870,50871],{},[23,50872],{"alt":25,"src":50873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[20,50875,50876],{},"反引号也是可以使用的",[20,50878,50879],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[20,50881,50882],{},"例如：document.write(\"我今年\"+age+\"岁\")",[233,50884,50885],{"start":1352},[169,50886,50887],{},"模板字符串",[20,50889,50890],{},[23,50891],{"alt":25,"src":50892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[20,50894,50895],{},"类似于python的字符串格式化",[233,50897,50898],{"start":1366},[169,50899,50900],{},"布尔类型",[20,50902,50903],{},"true 和 false",[233,50905,50906],{"start":1372},[169,50907,50908],{},"未定义类型（underfined）",[20,50910,50911],{},"表示没有赋值",[20,50913,50914],{},"未定义类型是比较特殊的类型，只有一个值undefined",[20,50916,50917],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[233,50919,50920],{"start":1463},[169,50921,50922],{},"null（空类型）",[20,50924,50925],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[20,50927,50928],{},"赋值了，但是内容为空",[36,50930,50932],{"className":50733,"code":50931,"language":50735,"meta":25,"style":25},"typeof null\n输出的是'object'，是一个对象数据类型\n",[42,50933,50934,50939],{"__ignoreMap":25},[45,50935,50936],{"class":47,"line":48},[45,50937,50938],{"class":55},"typeof null\n",[45,50940,50941],{"class":47,"line":66},[45,50942,50943],{"class":55},"输出的是'object'，是一个对象数据类型\n",[233,50945,50946],{"start":1469},[169,50947,50948],{},"控制台检测数据类型",[20,50950,50951],{},[23,50952],{"alt":25,"src":50953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[233,50955,50956],{"start":1481},[169,50957,50958],{},"类型转换",[20,50960,50961],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[20,50963,50964],{},"转换方式：隐式转换和显示转换",[20,50966,50967],{},"①隐式转换",[166,50969,50970,50973,50976,50979],{},[169,50971,50972],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[169,50974,50975],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[169,50977,50978],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[169,50980,50981],{},"任何数据和字符串相加结果都是字符串",[20,50983,50984],{},"②显示转换",[20,50986,50987],{},[23,50988],{"alt":25,"src":50989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[20,50991,50992],{},[23,50993],{"alt":25,"src":50994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[20,50996,50997],{},"在输入的时候要用好隐式转换，简单写起来",[20,50999,51000],{},"let num = +prompt(’请输入数字：‘)",[20,51002,51003],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[20,51005,51006],{},"console.log(parseInt('12.333px'))",[20,51008,51009],{},"输出为：12",[20,51011,51012],{},"console.log(parseInt('a'a'a12.333px'))",[20,51014,51015],{},"输出：NaN",[15,51017,51019],{"id":51018},"_26-运算符","2.6 运算符",[249,51021,51023],{"id":51022},"_261-赋值运算符","2.6.1 赋值运算符",[20,51025,51026],{},[23,51027],{"alt":25,"src":51028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[249,51030,51032],{"id":51031},"_262-一元运算符","2.6.2 一元运算符",[20,51034,51035],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[20,51037,51038],{},[23,51039],{"alt":25,"src":51040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[20,51042,51043],{},[23,51044],{"alt":25,"src":51045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[20,51047,51048],{},"两者的区别：",[20,51050,51051],{},[23,51052],{"alt":25,"src":51053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[20,51055,51056],{},"前置先自加；后置后加，代码执行完之后再加",[249,51058,51060],{"id":51059},"_263-比较运算符","2.6.3 比较运算符",[20,51062,51063],{},[23,51064],{"alt":25,"src":51065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[20,51067,51068],{},"比较运算符也有隐式转换",[20,51070,51071],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[20,51073,51074],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[20,51076,51077],{},"要使用三等，开发的时候",[20,51079,51080],{},"NaN不等于任何人，包括它自己",[20,51082,51083],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[20,51085,51086],{},"7\u002F10=0.7",[20,51088,51089],{},"最后：0.5+0.2=0.7",[20,51091,51092],{},"字符串比较，比较的是字符对应的ASCII码",[249,51094,51096],{"id":51095},"_264-逻辑运算符","2.6.4 逻辑运算符",[20,51098,51099],{},[23,51100],{"alt":25,"src":51101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[20,51103,51104],{},[23,51105],{"alt":25,"src":51106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[20,51108,51109],{},[23,51110],{"alt":25,"src":51111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[20,51113,51114],{},"上述题目选D",[20,51116,51117],{},"与真2假1；或真1假2",[249,51119,51121],{"id":51120},"_265-运算符优先级","2.6.5 运算符优先级",[20,51123,51124],{},[23,51125],{"alt":25,"src":51126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[20,51128,51129],{},"先算逻辑与，后算逻辑或",[15,51131,51133],{"id":51132},"_27-语句","2.7 语句",[20,51135,51136],{},"表达式：是可以被求值的代码，会有结果给我们",[20,51138,51139],{},"语句：语句是可以被执行的代码，例如prompt()",[20,51141,51142],{},[23,51143],{"alt":25,"src":51144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[20,51146,51147],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[20,51149,51150],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[249,51152,51154],{"id":51153},"_271-分支语句","2.7.1 分支语句",[22147,51156,51158],{"id":51157},"_2711-if分支语句","2.7.1.1 if分支语句",[20,51160,51161],{},"if语句单行简单的话，可以不写{}，写在一行就行",[233,51163,51164],{},[169,51165,51166],{},"单分支语句",[20,51168,51169],{},[23,51170],{"alt":25,"src":51171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[20,51173,51174],{},"除了0，所有数字都为真",[36,51176,51178],{"className":50733,"code":51177,"language":50735,"meta":25,"style":25},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[42,51179,51180,51185,51190,51195,51199],{"__ignoreMap":25},[45,51181,51182],{"class":47,"line":48},[45,51183,51184],{"class":55},"if（0) {\n",[45,51186,51187],{"class":47,"line":66},[45,51188,51189],{"class":55},"    let a=1\n",[45,51191,51192],{"class":47,"line":1331},[45,51193,51194],{"class":55},"    alert(typeof a)\n",[45,51196,51197],{"class":47,"line":1346},[45,51198,1716],{"class":55},[45,51200,51201],{"class":47,"line":1352},[45,51202,51203],{"class":55},"不输出，括号为假\n",[233,51205,51206],{"start":66},[169,51207,51208],{},"双分支语句",[20,51210,51211],{},[23,51212],{"alt":25,"src":51213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[233,51215,51216],{"start":1331},[169,51217,51218],{},"多分支语句",[20,51220,51221],{},[23,51222],{"alt":25,"src":51223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22147,51225,51227],{"id":51226},"_2712-三元运算符","2.7.1.2 三元运算符",[20,51229,51230],{},[23,51231],{"alt":25,"src":51232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22147,51234,51236],{"id":51235},"_2713-switch语句","2.7.1.3 switch语句",[20,51238,51239],{},[23,51240],{"alt":25,"src":51241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[20,51243,51244],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[249,51246,51248],{"id":51247},"_272-循环语句","2.7.2 循环语句",[22147,51250,51252],{"id":51251},"_2721-断点演示","2.7.2.1 断点演示",[20,51254,51255],{},[23,51256],{"alt":25,"src":51257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22147,51259,51261],{"id":51260},"_2722-while循环","2.7.2.2 while循环",[20,51263,51264],{},[23,51265],{"alt":25,"src":51266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[20,51268,51269],{},[23,51270],{"alt":25,"src":51271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22147,51273,51275],{"id":51274},"_2723-for循环","2.7.2.3 for循环",[20,51277,51278],{},[23,51279],{"alt":25,"src":51280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[20,51282,51283],{},"for(;;) {",[20,51285,1223],{},[20,51287,51288],{},"表示无限循环",[20,51290,51291],{},[23,51292],{"alt":25,"src":51293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22147,51295,51297],{"id":51296},"_2724-循环的退出","2.7.2.4 循环的退出",[20,51299,51300],{},[23,51301],{"alt":25,"src":51302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[15,51304,51306],{"id":51305},"_28-数组","2.8 数组",[249,51308,51310],{"id":51309},"_281-基础认识","2.8.1 基础认识",[20,51312,51313],{},[23,51314],{"alt":25,"src":51315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[20,51317,51318],{},[23,51319],{"alt":25,"src":51320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[20,51322,51323],{},[23,51324],{"alt":25,"src":51325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[20,51327,51328],{},[23,51329],{"alt":25,"src":51330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[249,51332,51334],{"id":51333},"_282-操作数组","2.8.2 操作数组",[20,51336,51337],{},[23,51338],{"alt":25,"src":51339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[233,51341,51342],{},[169,51343,51344],{},"添加元素",[20,51346,51347],{},[23,51348],{"alt":25,"src":51349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[20,51351,51352],{},"console.log(arr.push('green'))",[20,51354,51355],{},"输出结果：为新数组的长度",[20,51357,51358],{},[23,51359],{"alt":25,"src":51360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[20,51362,51363],{},"push用的非常多，一定要记住",[233,51365,51366],{},[169,51367,51368],{},"删除元素",[20,51370,51371],{},[23,51372],{"alt":25,"src":51373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[20,51375,51376],{},[23,51377],{"alt":25,"src":51378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[20,51380,51381],{},[23,51382],{"alt":25,"src":51383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[249,51385,51387],{"id":51386},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[36,51389,51391],{"className":50733,"code":51390,"language":50735,"meta":25,"style":25},"\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",[42,51392,51393,51408,51424,51428,51437,51455,51479,51501,51515,51523,51530,51542,51553,51557,51561,51568,51580,51595,51608,51627,51644,51659,51671,51683,51695,51699,51703,51714,51724,51736,51748,51760,51771,51775,51779,51791,51795,51809,51813,51817,51828,51842,51854,51868,51872,51881,51890,51894,51903,51907,51916,51921,51926,51939,51967,51972,51977,52002,52007,52011,52016,52021,52036,52040,52045,52075,52087,52103,52119,52133,52138,52145,52149,52154,52167,52175,52183,52187],{"__ignoreMap":25},[45,51394,51395,51398,51402,51405],{"class":47,"line":48},[45,51396,51397],{"class":55},"\u003C!",[45,51399,51401],{"class":51400},"s9eBZ","DOCTYPE",[45,51403,51404],{"class":69}," html",[45,51406,51407],{"class":55},">\n",[45,51409,51410,51412,51414,51417,51419,51422],{"class":47,"line":66},[45,51411,1187],{"class":55},[45,51413,50735],{"class":51400},[45,51415,51416],{"class":69}," lang",[45,51418,59],{"class":55},[45,51420,51421],{"class":62},"\"en\"",[45,51423,51407],{"class":55},[45,51425,51426],{"class":47,"line":1331},[45,51427,2550],{"emptyLinePlaceholder":207},[45,51429,51430,51432,51435],{"class":47,"line":1346},[45,51431,1187],{"class":55},[45,51433,51434],{"class":51400},"head",[45,51436,51407],{"class":55},[45,51438,51439,51442,51445,51448,51450,51453],{"class":47,"line":1352},[45,51440,51441],{"class":55},"    \u003C",[45,51443,51444],{"class":51400},"meta",[45,51446,51447],{"class":69}," charset",[45,51449,59],{"class":55},[45,51451,51452],{"class":62},"\"UTF-8\"",[45,51454,51407],{"class":55},[45,51456,51457,51459,51461,51464,51466,51469,51472,51474,51477],{"class":47,"line":1366},[45,51458,51441],{"class":55},[45,51460,51444],{"class":51400},[45,51462,51463],{"class":69}," http-equiv",[45,51465,59],{"class":55},[45,51467,51468],{"class":62},"\"X-UA-Compatible\"",[45,51470,51471],{"class":69}," content",[45,51473,59],{"class":55},[45,51475,51476],{"class":62},"\"IE=edge\"",[45,51478,51407],{"class":55},[45,51480,51481,51483,51485,51487,51489,51492,51494,51496,51499],{"class":47,"line":1372},[45,51482,51441],{"class":55},[45,51484,51444],{"class":51400},[45,51486,15069],{"class":69},[45,51488,59],{"class":55},[45,51490,51491],{"class":62},"\"viewport\"",[45,51493,51471],{"class":69},[45,51495,59],{"class":55},[45,51497,51498],{"class":62},"\"width=device-width, initial-scale=1.0\"",[45,51500,51407],{"class":55},[45,51502,51503,51505,51508,51511,51513],{"class":47,"line":1463},[45,51504,51441],{"class":55},[45,51506,51507],{"class":51400},"title",[45,51509,51510],{"class":55},">Document\u003C\u002F",[45,51512,51507],{"class":51400},[45,51514,51407],{"class":55},[45,51516,51517,51519,51521],{"class":47,"line":1469},[45,51518,51441],{"class":55},[45,51520,196],{"class":51400},[45,51522,51407],{"class":55},[45,51524,51525,51528],{"class":47,"line":1481},[45,51526,51527],{"class":51400},"        *",[45,51529,15721],{"class":55},[45,51531,51532,51535,51538,51540],{"class":47,"line":1763},[45,51533,51534],{"class":79},"            margin",[45,51536,51537],{"class":55},": ",[45,51539,469],{"class":79},[45,51541,1442],{"class":55},[45,51543,51544,51547,51549,51551],{"class":47,"line":1768},[45,51545,51546],{"class":79},"            padding",[45,51548,51537],{"class":55},[45,51550,469],{"class":79},[45,51552,1442],{"class":55},[45,51554,51555],{"class":47,"line":1774},[45,51556,2679],{"class":55},[45,51558,51559],{"class":47,"line":1779},[45,51560,2550],{"emptyLinePlaceholder":207},[45,51562,51563,51566],{"class":47,"line":1793},[45,51564,51565],{"class":69},"        .box",[45,51567,15721],{"class":55},[45,51569,51570,51573,51575,51578],{"class":47,"line":1798},[45,51571,51572],{"class":79},"            display",[45,51574,51537],{"class":55},[45,51576,51577],{"class":79},"flex",[45,51579,1442],{"class":55},[45,51581,51582,51585,51587,51590,51593],{"class":47,"line":1804},[45,51583,51584],{"class":79},"            width",[45,51586,51537],{"class":55},[45,51588,51589],{"class":79},"700",[45,51591,51592],{"class":51},"px",[45,51594,1442],{"class":55},[45,51596,51597,51600,51602,51604,51606],{"class":47,"line":1825},[45,51598,51599],{"class":79},"            height",[45,51601,51537],{"class":55},[45,51603,4123],{"class":79},[45,51605,51592],{"class":51},[45,51607,1442],{"class":55},[45,51609,51610,51613,51615,51617,51619,51622,51625],{"class":47,"line":1830},[45,51611,51612],{"class":79},"            border-left",[45,51614,51537],{"class":55},[45,51616,495],{"class":79},[45,51618,51592],{"class":51},[45,51620,51621],{"class":79}," solid",[45,51623,51624],{"class":79}," pink",[45,51626,1442],{"class":55},[45,51628,51629,51632,51634,51636,51638,51640,51642],{"class":47,"line":1844},[45,51630,51631],{"class":79},"            border-bottom",[45,51633,51537],{"class":55},[45,51635,495],{"class":79},[45,51637,51592],{"class":51},[45,51639,51621],{"class":79},[45,51641,51624],{"class":79},[45,51643,1442],{"class":55},[45,51645,51646,51648,51650,51652,51654,51657],{"class":47,"line":1849},[45,51647,51534],{"class":79},[45,51649,51537],{"class":55},[45,51651,933],{"class":79},[45,51653,51592],{"class":51},[45,51655,51656],{"class":79}," auto",[45,51658,1442],{"class":55},[45,51660,51661,51664,51666,51669],{"class":47,"line":1878},[45,51662,51663],{"class":79},"            justify-content",[45,51665,51537],{"class":55},[45,51667,51668],{"class":79},"space-around",[45,51670,1442],{"class":55},[45,51672,51673,51676,51678,51681],{"class":47,"line":1883},[45,51674,51675],{"class":79},"            align-items",[45,51677,51537],{"class":55},[45,51679,51680],{"class":79},"flex-end",[45,51682,1442],{"class":55},[45,51684,51685,51688,51690,51693],{"class":47,"line":1900},[45,51686,51687],{"class":79},"            text-align",[45,51689,51537],{"class":55},[45,51691,51692],{"class":79},"center",[45,51694,1442],{"class":55},[45,51696,51697],{"class":47,"line":1905},[45,51698,2679],{"class":55},[45,51700,51701],{"class":47,"line":1910},[45,51702,2550],{"emptyLinePlaceholder":207},[45,51704,51705,51707,51709,51712],{"class":47,"line":1915},[45,51706,51565],{"class":69},[45,51708,1237],{"class":51},[45,51710,51711],{"class":51400},"div",[45,51713,15721],{"class":55},[45,51715,51716,51718,51720,51722],{"class":47,"line":1929},[45,51717,51572],{"class":79},[45,51719,51537],{"class":55},[45,51721,51577],{"class":79},[45,51723,1442],{"class":55},[45,51725,51726,51728,51730,51732,51734],{"class":47,"line":1934},[45,51727,51584],{"class":79},[45,51729,51537],{"class":55},[45,51731,933],{"class":79},[45,51733,51592],{"class":51},[45,51735,1442],{"class":55},[45,51737,51738,51741,51743,51746],{"class":47,"line":2727},[45,51739,51740],{"class":79},"            background-color",[45,51742,51537],{"class":55},[45,51744,51745],{"class":79},"pink",[45,51747,1442],{"class":55},[45,51749,51750,51753,51755,51758],{"class":47,"line":2741},[45,51751,51752],{"class":79},"            flex-direction",[45,51754,51537],{"class":55},[45,51756,51757],{"class":79},"column",[45,51759,1442],{"class":55},[45,51761,51762,51764,51766,51769],{"class":47,"line":2749},[45,51763,51663],{"class":79},[45,51765,51537],{"class":55},[45,51767,51768],{"class":79},"space-between",[45,51770,1442],{"class":55},[45,51772,51773],{"class":47,"line":2754},[45,51774,2679],{"class":55},[45,51776,51777],{"class":47,"line":2760},[45,51778,2550],{"emptyLinePlaceholder":207},[45,51780,51781,51783,51786,51789],{"class":47,"line":2766},[45,51782,51565],{"class":69},[45,51784,51785],{"class":51400}," div",[45,51787,51788],{"class":51400}," span",[45,51790,15721],{"class":55},[45,51792,51793],{"class":47,"line":2771},[45,51794,2550],{"emptyLinePlaceholder":207},[45,51796,51797,51800,51802,51805,51807],{"class":47,"line":8098},[45,51798,51799],{"class":79},"            margin-top",[45,51801,51537],{"class":55},[45,51803,51804],{"class":79},"-20",[45,51806,51592],{"class":51},[45,51808,1442],{"class":55},[45,51810,51811],{"class":47,"line":8122},[45,51812,2679],{"class":55},[45,51814,51815],{"class":47,"line":8127},[45,51816,2550],{"emptyLinePlaceholder":207},[45,51818,51819,51821,51823,51826],{"class":47,"line":8133},[45,51820,51565],{"class":69},[45,51822,51785],{"class":51400},[45,51824,51825],{"class":51400}," h4",[45,51827,15721],{"class":55},[45,51829,51830,51833,51835,51838,51840],{"class":47,"line":8160},[45,51831,51832],{"class":79},"            margin-bottom",[45,51834,51537],{"class":55},[45,51836,51837],{"class":79},"-35",[45,51839,51592],{"class":51},[45,51841,1442],{"class":55},[45,51843,51844,51846,51848,51850,51852],{"class":47,"line":8165},[45,51845,51584],{"class":79},[45,51847,51537],{"class":55},[45,51849,633],{"class":79},[45,51851,51592],{"class":51},[45,51853,1442],{"class":55},[45,51855,51856,51859,51861,51864,51866],{"class":47,"line":8171},[45,51857,51858],{"class":79},"            margin-left",[45,51860,51537],{"class":55},[45,51862,51863],{"class":79},"-10",[45,51865,51592],{"class":51},[45,51867,1442],{"class":55},[45,51869,51870],{"class":47,"line":8183},[45,51871,2679],{"class":55},[45,51873,51874,51877,51879],{"class":47,"line":8195},[45,51875,51876],{"class":55},"    \u003C\u002F",[45,51878,196],{"class":51400},[45,51880,51407],{"class":55},[45,51882,51883,51886,51888],{"class":47,"line":8207},[45,51884,51885],{"class":55},"\u003C\u002F",[45,51887,51434],{"class":51400},[45,51889,51407],{"class":55},[45,51891,51892],{"class":47,"line":9866},[45,51893,2550],{"emptyLinePlaceholder":207},[45,51895,51896,51898,51901],{"class":47,"line":9890},[45,51897,1187],{"class":55},[45,51899,51900],{"class":51400},"body",[45,51902,51407],{"class":55},[45,51904,51905],{"class":47,"line":9913},[45,51906,2550],{"emptyLinePlaceholder":207},[45,51908,51909,51911,51914],{"class":47,"line":9937},[45,51910,51441],{"class":55},[45,51912,51913],{"class":51400},"script",[45,51915,51407],{"class":55},[45,51917,51918],{"class":47,"line":9942},[45,51919,51920],{"class":337},"        \u002F\u002F 1. 四次弹框效果\n",[45,51922,51923],{"class":47,"line":9947},[45,51924,51925],{"class":337},"        \u002F\u002F 声明一个新的数组\n",[45,51927,51928,51931,51934,51936],{"class":47,"line":9952},[45,51929,51930],{"class":51},"        let",[45,51932,51933],{"class":55}," arr ",[45,51935,59],{"class":51},[45,51937,51938],{"class":55}," []\n",[45,51940,51941,51943,51945,51948,51950,51952,51954,51956,51958,51961,51963,51965],{"class":47,"line":9961},[45,51942,3553],{"class":51},[45,51944,1809],{"class":55},[45,51946,51947],{"class":51},"let",[45,51949,9588],{"class":55},[45,51951,59],{"class":51},[45,51953,136],{"class":79},[45,51955,9595],{"class":55},[45,51957,1739],{"class":51},[45,51959,51960],{"class":79}," 4",[45,51962,3364],{"class":55},[45,51964,2442],{"class":51},[45,51966,12591],{"class":55},[45,51968,51969],{"class":47,"line":9966},[45,51970,51971],{"class":337},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[45,51973,51974],{"class":47,"line":9972},[45,51975,51976],{"class":337},"            \u002F\u002F arr.push(num)\n",[45,51978,51979,51982,51985,51987,51990,51992,51995,51997,52000],{"class":47,"line":9993},[45,51980,51981],{"class":55},"            arr.",[45,51983,51984],{"class":69},"push",[45,51986,282],{"class":55},[45,51988,51989],{"class":69},"prompt",[45,51991,282],{"class":55},[45,51993,51994],{"class":62},"`请输入第${",[45,51996,718],{"class":55},[45,51998,51999],{"class":62},"}季度的数据:`",[45,52001,30597],{"class":55},[45,52003,52004],{"class":47,"line":9999},[45,52005,52006],{"class":337},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[45,52008,52009],{"class":47,"line":10013},[45,52010,2679],{"class":55},[45,52012,52013],{"class":47,"line":10019},[45,52014,52015],{"class":337},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[45,52017,52018],{"class":47,"line":10046},[45,52019,52020],{"class":337},"        \u002F\u002F 盒子开头\n",[45,52022,52023,52026,52029,52031,52034],{"class":47,"line":10055},[45,52024,52025],{"class":55},"        document.",[45,52027,52028],{"class":69},"write",[45,52030,282],{"class":55},[45,52032,52033],{"class":62},"` \u003Cdiv class=\"box\">`",[45,52035,139],{"class":55},[45,52037,52038],{"class":47,"line":10061},[45,52039,2550],{"emptyLinePlaceholder":207},[45,52041,52042],{"class":47,"line":10069},[45,52043,52044],{"class":337},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[45,52046,52047,52049,52051,52053,52055,52057,52059,52061,52063,52066,52069,52071,52073],{"class":47,"line":10074},[45,52048,3553],{"class":51},[45,52050,1809],{"class":55},[45,52052,51947],{"class":51},[45,52054,9588],{"class":55},[45,52056,59],{"class":51},[45,52058,4243],{"class":79},[45,52060,9595],{"class":55},[45,52062,1187],{"class":51},[45,52064,52065],{"class":55}," arr.",[45,52067,52068],{"class":79},"length",[45,52070,3364],{"class":55},[45,52072,2442],{"class":51},[45,52074,12591],{"class":55},[45,52076,52077,52080,52082,52084],{"class":47,"line":16753},[45,52078,52079],{"class":55},"            document.",[45,52081,52028],{"class":69},[45,52083,282],{"class":55},[45,52085,52086],{"class":62},"`\n",[45,52088,52089,52092,52094,52096,52098,52100],{"class":47,"line":16759},[45,52090,52091],{"class":62},"              \u003Cdiv style=\"height: ${",[45,52093,4030],{"class":55},[45,52095,1167],{"class":62},[45,52097,718],{"class":55},[45,52099,1217],{"class":62},[45,52101,52102],{"class":62},"}px;\">\n",[45,52104,52105,52108,52110,52112,52114,52116],{"class":47,"line":16782},[45,52106,52107],{"class":62},"                \u003Cspan>${",[45,52109,4030],{"class":55},[45,52111,1167],{"class":62},[45,52113,718],{"class":55},[45,52115,1217],{"class":62},[45,52117,52118],{"class":62},"}\u003C\u002Fspan>\n",[45,52120,52121,52124,52126,52128,52130],{"class":47,"line":16788},[45,52122,52123],{"class":62},"                \u003Ch4>第${",[45,52125,718],{"class":55},[45,52127,45666],{"class":51},[45,52129,136],{"class":79},[45,52131,52132],{"class":62},"}季度\u003C\u002Fh4>\n",[45,52134,52135],{"class":47,"line":16811},[45,52136,52137],{"class":62},"              \u003C\u002Fdiv>          \n",[45,52139,52140,52143],{"class":47,"line":16825},[45,52141,52142],{"class":62},"            `",[45,52144,139],{"class":55},[45,52146,52147],{"class":47,"line":16845},[45,52148,2679],{"class":55},[45,52150,52151],{"class":47,"line":16851},[45,52152,52153],{"class":337},"        \u002F\u002F 盒子结尾\n",[45,52155,52156,52158,52160,52162,52165],{"class":47,"line":16862},[45,52157,52025],{"class":55},[45,52159,52028],{"class":69},[45,52161,282],{"class":55},[45,52163,52164],{"class":62},"` \u003C\u002Fdiv>`",[45,52166,139],{"class":55},[45,52168,52169,52171,52173],{"class":47,"line":16885},[45,52170,51876],{"class":55},[45,52172,51913],{"class":51400},[45,52174,51407],{"class":55},[45,52176,52177,52179,52181],{"class":47,"line":16907},[45,52178,51885],{"class":55},[45,52180,51900],{"class":51400},[45,52182,51407],{"class":55},[45,52184,52185],{"class":47,"line":16912},[45,52186,2550],{"emptyLinePlaceholder":207},[45,52188,52189,52191,52193],{"class":47,"line":16918},[45,52190,51885],{"class":55},[45,52192,50735],{"class":51400},[45,52194,51407],{"class":55},[249,52196,52198],{"id":52197},"_284-冒泡排序","2.8.4 冒泡排序",[36,52200,52202],{"className":50733,"code":52201,"language":50735,"meta":25,"style":25},"\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",[42,52203,52204,52214,52228,52232,52240,52255,52275,52287,52295,52299,52307,52315,52347,52380,52417,52422,52441,52446,52459,52474,52490,52494,52499,52503,52513,52522,52530,52534],{"__ignoreMap":25},[45,52205,52206,52208,52210,52212],{"class":47,"line":48},[45,52207,51397],{"class":55},[45,52209,51401],{"class":51400},[45,52211,51404],{"class":69},[45,52213,51407],{"class":55},[45,52215,52216,52218,52220,52222,52224,52226],{"class":47,"line":66},[45,52217,1187],{"class":55},[45,52219,50735],{"class":51400},[45,52221,51416],{"class":69},[45,52223,59],{"class":55},[45,52225,51421],{"class":62},[45,52227,51407],{"class":55},[45,52229,52230],{"class":47,"line":1331},[45,52231,2550],{"emptyLinePlaceholder":207},[45,52233,52234,52236,52238],{"class":47,"line":1346},[45,52235,1187],{"class":55},[45,52237,51434],{"class":51400},[45,52239,51407],{"class":55},[45,52241,52242,52245,52247,52249,52251,52253],{"class":47,"line":1352},[45,52243,52244],{"class":55},"  \u003C",[45,52246,51444],{"class":51400},[45,52248,51447],{"class":69},[45,52250,59],{"class":55},[45,52252,51452],{"class":62},[45,52254,51407],{"class":55},[45,52256,52257,52259,52261,52263,52265,52267,52269,52271,52273],{"class":47,"line":1366},[45,52258,52244],{"class":55},[45,52260,51444],{"class":51400},[45,52262,15069],{"class":69},[45,52264,59],{"class":55},[45,52266,51491],{"class":62},[45,52268,51471],{"class":69},[45,52270,59],{"class":55},[45,52272,51498],{"class":62},[45,52274,51407],{"class":55},[45,52276,52277,52279,52281,52283,52285],{"class":47,"line":1372},[45,52278,52244],{"class":55},[45,52280,51507],{"class":51400},[45,52282,51510],{"class":55},[45,52284,51507],{"class":51400},[45,52286,51407],{"class":55},[45,52288,52289,52291,52293],{"class":47,"line":1463},[45,52290,51885],{"class":55},[45,52292,51434],{"class":51400},[45,52294,51407],{"class":55},[45,52296,52297],{"class":47,"line":1469},[45,52298,2550],{"emptyLinePlaceholder":207},[45,52300,52301,52303,52305],{"class":47,"line":1481},[45,52302,1187],{"class":55},[45,52304,51900],{"class":51400},[45,52306,51407],{"class":55},[45,52308,52309,52311,52313],{"class":47,"line":1763},[45,52310,52244],{"class":55},[45,52312,51913],{"class":51400},[45,52314,51407],{"class":55},[45,52316,52317,52320,52322,52324,52327,52329,52331,52333,52335,52337,52339,52341,52343,52345],{"class":47,"line":1768},[45,52318,52319],{"class":51},"    let",[45,52321,51933],{"class":55},[45,52323,59],{"class":51},[45,52325,52326],{"class":55}," [",[45,52328,596],{"class":79},[45,52330,12584],{"class":55},[45,52332,570],{"class":79},[45,52334,12584],{"class":55},[45,52336,350],{"class":79},[45,52338,12584],{"class":55},[45,52340,356],{"class":79},[45,52342,12584],{"class":55},[45,52344,495],{"class":79},[45,52346,33346],{"class":55},[45,52348,52349,52351,52353,52355,52357,52359,52361,52363,52365,52367,52369,52372,52374,52376,52378],{"class":47,"line":1774},[45,52350,3351],{"class":51},[45,52352,1809],{"class":55},[45,52354,51947],{"class":51},[45,52356,9588],{"class":55},[45,52358,59],{"class":51},[45,52360,4243],{"class":79},[45,52362,9595],{"class":55},[45,52364,1187],{"class":51},[45,52366,52065],{"class":55},[45,52368,52068],{"class":79},[45,52370,52371],{"class":51}," -",[45,52373,136],{"class":79},[45,52375,3364],{"class":55},[45,52377,2442],{"class":51},[45,52379,12591],{"class":55},[45,52381,52382,52385,52387,52389,52391,52393,52395,52397,52399,52401,52403,52405,52407,52409,52411,52413,52415],{"class":47,"line":1779},[45,52383,52384],{"class":51},"      for",[45,52386,1809],{"class":55},[45,52388,51947],{"class":51},[45,52390,9650],{"class":55},[45,52392,59],{"class":51},[45,52394,4243],{"class":79},[45,52396,9657],{"class":55},[45,52398,1187],{"class":51},[45,52400,52065],{"class":55},[45,52402,52068],{"class":79},[45,52404,52371],{"class":51},[45,52406,9588],{"class":55},[45,52408,809],{"class":51},[45,52410,136],{"class":79},[45,52412,9664],{"class":55},[45,52414,2442],{"class":51},[45,52416,12591],{"class":55},[45,52418,52419],{"class":47,"line":1793},[45,52420,52421],{"class":337},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[45,52423,52424,52426,52429,52431,52434,52436,52438],{"class":47,"line":1798},[45,52425,2647],{"class":51},[45,52427,52428],{"class":55}," (arr[j] ",[45,52430,1237],{"class":51},[45,52432,52433],{"class":55}," arr[j ",[45,52435,758],{"class":51},[45,52437,136],{"class":79},[45,52439,52440],{"class":55},"]) {\n",[45,52442,52443],{"class":47,"line":1804},[45,52444,52445],{"class":337},"          \u002F\u002F 交换两个变量\n",[45,52447,52448,52451,52454,52456],{"class":47,"line":1825},[45,52449,52450],{"class":51},"          let",[45,52452,52453],{"class":55}," tmp ",[45,52455,59],{"class":51},[45,52457,52458],{"class":55}," arr[j]\n",[45,52460,52461,52464,52466,52468,52470,52472],{"class":47,"line":1830},[45,52462,52463],{"class":55},"          arr[j] ",[45,52465,59],{"class":51},[45,52467,52433],{"class":55},[45,52469,758],{"class":51},[45,52471,136],{"class":79},[45,52473,33346],{"class":55},[45,52475,52476,52479,52481,52483,52485,52487],{"class":47,"line":1844},[45,52477,52478],{"class":55},"          arr[j ",[45,52480,758],{"class":51},[45,52482,136],{"class":79},[45,52484,4593],{"class":55},[45,52486,59],{"class":51},[45,52488,52489],{"class":55}," tmp\n",[45,52491,52492],{"class":47,"line":1849},[45,52493,2679],{"class":55},[45,52495,52496],{"class":47,"line":1878},[45,52497,52498],{"class":55},"      }\n",[45,52500,52501],{"class":47,"line":1883},[45,52502,2337],{"class":55},[45,52504,52505,52508,52510],{"class":47,"line":1900},[45,52506,52507],{"class":55},"    document.",[45,52509,52028],{"class":69},[45,52511,52512],{"class":55},"(arr)\n",[45,52514,52515,52518,52520],{"class":47,"line":1905},[45,52516,52517],{"class":55},"  \u003C\u002F",[45,52519,51913],{"class":51400},[45,52521,51407],{"class":55},[45,52523,52524,52526,52528],{"class":47,"line":1910},[45,52525,51885],{"class":55},[45,52527,51900],{"class":51400},[45,52529,51407],{"class":55},[45,52531,52532],{"class":47,"line":1915},[45,52533,2550],{"emptyLinePlaceholder":207},[45,52535,52536,52538,52540],{"class":47,"line":1929},[45,52537,51885],{"class":55},[45,52539,50735],{"class":51400},[45,52541,51407],{"class":55},[20,52543,52544],{},[23,52545],{"alt":25,"src":52546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[20,52548,52549],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[20,52551,52552],{},"let arr = [4, 2, 5, 1, 3]",[20,52554,52555],{},"\u002F\u002F 1.升序排列写法",[20,52557,52558],{},"arr.sort(function (a, b) {",[20,52560,52561],{},"return a - b",[20,52563,52564],{},"})",[20,52566,52567],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[20,52569,52570],{},"\u002F\u002F 降序排列写法",[20,52572,52558],{},[20,52574,52575],{},"return b - a",[20,52577,52564],{},[20,52579,52580],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[15,52582,52584],{"id":52583},"_29-函数","2.9 函数",[20,52586,52587],{},[23,52588],{"alt":25,"src":52589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[20,52591,52592],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[20,52594,52595],{},"函数的声明用function",[20,52597,52598],{},"函数里边可以嵌套函数",[249,52600,52602],{"id":52601},"_291-函数传参","2.9.1 函数传参",[20,52604,52605],{},[23,52606],{"alt":25,"src":52607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[20,52609,52610],{},[23,52611],{"alt":25,"src":52612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[166,52614,52615,52618,52621,52624,52627,52630],{},[169,52616,52617],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[169,52619,52620],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[169,52622,52623],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[169,52625,52626],{},"开发中尽量保持形参和实参个数一致",[169,52628,52629],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[169,52631,52632],{},"形参只在函数中有用，所以不需要进行声明这个变量",[20,52634,52635],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[249,52637,52639],{"id":52638},"_292-函数的返回值","2.9.2 函数的返回值",[20,52641,52642],{},[23,52643],{"alt":25,"src":52644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[20,52646,52647],{},[23,52648],{"alt":25,"src":52649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[166,52651,52652,52655,52658,52661,52664],{},[169,52653,52654],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[169,52656,52657],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[169,52659,52660],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[169,52662,52663],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[169,52665,52666],{},"断点调试:进入函数内部看执行过程F11",[249,52668,52670],{"id":52669},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[36,52672,52674],{"className":50733,"code":52673,"language":50735,"meta":25,"style":25},"    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",[42,52675,52676,52681,52686,52690,52695],{"__ignoreMap":25},[45,52677,52678],{"class":47,"line":48},[45,52679,52680],{"class":55},"    function fn(a, b) {\n",[45,52682,52683],{"class":47,"line":66},[45,52684,52685],{"class":55},"      console.log(a + b);\n",[45,52687,52688],{"class":47,"line":1331},[45,52689,2337],{"class":55},[45,52691,52692],{"class":47,"line":1346},[45,52693,52694],{"class":55},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[45,52696,52697],{"class":47,"line":1352},[45,52698,52699],{"class":55},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[249,52701,52703],{"id":52702},"_294-作用域","2.9.4 作用域",[166,52705,52706,52712,52717,52720,52723],{},[169,52707,52708,52709],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[427,52710,52711],{},"作用域",[169,52713,52714],{},[427,52715,52716],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[169,52718,52719],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[169,52721,52722],{},"函数内部可以直接所使用全局变量",[169,52724,52725],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[20,52727,14782],{},[36,52729,52731],{"className":50733,"code":52730,"language":50735,"meta":25,"style":25},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[42,52732,52733,52738,52743,52747,52752,52757,52762],{"__ignoreMap":25},[45,52734,52735],{"class":47,"line":48},[45,52736,52737],{"class":55},"    function fun() {\n",[45,52739,52740],{"class":47,"line":66},[45,52741,52742],{"class":55},"      num = 10\n",[45,52744,52745],{"class":47,"line":1331},[45,52746,2337],{"class":55},[45,52748,52749],{"class":47,"line":1346},[45,52750,52751],{"class":55},"    fun()\n",[45,52753,52754],{"class":47,"line":1352},[45,52755,52756],{"class":55},"    console.log(num)\n",[45,52758,52759],{"class":47,"line":1366},[45,52760,52761],{"class":55},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[45,52763,52764],{"class":47,"line":1372},[45,52765,52766],{"class":55},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[166,52768,52769,52772],{},[169,52770,52771],{},"函数内部的形参可以看做是局部变量",[169,52773,52774],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[20,52776,52777,52778],{},"变量访问原则： ",[427,52779,52780],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[249,52782,52784],{"id":52783},"_295-匿名函数","2.9.5 匿名函数",[20,52786,52787],{},"函数可以分为具名函数和匿名函数",[20,52789,52790],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[233,52792,52793],{},[169,52794,52795],{},"函数表达式",[20,52797,52798],{},[23,52799],{"alt":25,"src":52800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[20,52802,52803],{},"里边也可以写参数",[20,52805,52806],{},"具名函数调用位置可以随意调整；",[20,52808,52809],{},"匿名函数函数表达式形式只能在声明后才可以使用",[233,52811,52812],{"start":66},[169,52813,52814],{},"立即执行函数",[20,52816,52817],{},[23,52818],{"alt":25,"src":52819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[20,52821,52822],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[20,52824,52825],{},"写法：两个小括号，然后在第一个小括号中写function",[20,52827,52828],{},"(function () {})();",[20,52830,52831],{},"不要落下最后的;",[20,52833,52834],{},"立即执行函数必须要加;",[20,52836,52837],{},"分号写前写后都没问题",[20,52839,52840],{},"写前：",[20,52842,52843],{},"(function() {})()",[20,52845,52846],{},";(function () {})();",[20,52848,52849],{},"写后:",[20,52851,52852],{},"(function() {})();",[20,52854,52828],{},[20,52856,52857],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[20,52859,52860],{},"还有一种写法：",[20,52862,52863],{},"(function(){}());",[20,52865,52866],{},"或者:",[20,52868,52869],{},"!function(){}();",[20,52871,52872],{},"立即执行函数有时候也是可以加名字的：",[20,52874,52875],{},"(function flexible(window,document) {}(window,document));",[20,52877,52878],{},"省一些调用方法",[249,52880,52882],{"id":52881},"_296-逻辑中断","2.9.6 逻辑中断!!!",[20,52884,52885],{},[23,52886],{"alt":25,"src":52887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[20,52889,52890],{},"这样就不用非得给x,y初始化了",[20,52892,52893],{},[23,52894],{"alt":25,"src":52895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[20,52897,52898],{},"代码执行时先看左边",[20,52900,52901],{},"例如：console.log(false && 3+5)",[20,52903,52904],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[20,52906,52907],{},"&&都是真时，就返回最后一个真值",[20,52909,52910],{},"console.log(11 && 22)",[20,52912,52913],{},"输出22",[20,52915,52916],{},"逻辑与：遇真则真",[20,52918,14782],{},[20,52920,52921],{},"let age=1",[20,52923,52924],{},"console.log(11 || age++)",[20,52926,52927],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[20,52929,52930],{},"console.log(11 || 22)",[20,52932,52933],{},"||逻辑或遇到真就直接输出，输出结果为11",[20,52935,52936],{},"||如果都是假的话，就取最后一个假的值了",[249,52938,52940],{"id":52939},"_297-转换为boolean型","2.9.7 转换为Boolean型",[20,52942,52943],{},"显示转换：",[20,52945,52946,52949,52950],{},[427,52947,52948],{},"记忆","： ",[427,52951,52952],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[20,52954,52955],{},"空字符串为假，其他字符串全为真",[20,52957,52958],{},[23,52959],{"alt":25,"src":52960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[20,52962,52963],{},"隐式转换：",[20,52965,52966],{},[23,52967],{"alt":25,"src":52968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[20,52970,52971],{},"隐式转换:",[20,52973,52974],{},"null+3=3",[20,52976,52977],{},"undefined+3=NaN",[20,52979,52980],{},"null==undefined 输出true,他两个都当0看",[20,52982,52983],{},"null===undefined 输出false",[20,52985,52986],{},"undefined做任何操作都是NaN",[20,52988,52989],{},"NaN不等于NaN，NaN表示计算错误",[15,52991,52993],{"id":52992},"_210-对象","2.10 对象",[249,52995,52997],{"id":52996},"_2101-对象的介绍","2.10.1 对象的介绍",[20,52999,53000],{},"对象也是一种数据类型，里边的数据是无序的",[20,53002,53003],{},"对象由属性和方法组成",[20,53005,53006],{},[23,53007],{"alt":25,"src":53008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[20,53010,53011],{},[23,53012],{"alt":25,"src":53013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[20,53015,53016],{},[23,53017],{"alt":25,"src":53018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[249,53020,53022],{"id":53021},"_2102-对象属性","2.10.2 对象属性",[20,53024,53025],{},[23,53026],{"alt":25,"src":53027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[233,53029,53030],{},[169,53031,53032],{},"查询对象",[20,53034,53035],{},"对象名.属性 goods.uname",[20,53037,53038],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[20,53040,53041],{},"不带字符串的属性名也可以使用 对象名['属性名']",[20,53043,53044],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[20,53046,53047],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[233,53049,53050],{"start":66},[169,53051,53052],{},"重新赋值",[20,53054,53055],{},"对象名.属性=新值",[233,53057,53058],{"start":1331},[169,53059,53060],{},"增加新数据",[20,53062,53055],{},[233,53064,53065],{"start":1346},[169,53066,53067],{},"删除对象中的属性",[20,53069,53070],{},"delete 对象名.属性",[249,53072,53074],{"id":53073},"_2103-对象方法","2.10.3 对象方法",[20,53076,53077],{},[23,53078],{"alt":25,"src":53079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[20,53081,53082],{},"后边跟的是匿名函数",[20,53084,53085],{},"对象外面的叫函数；对象内部的叫方法",[20,53087,53088],{},[23,53089],{"alt":25,"src":53090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[249,53092,53094],{"id":53093},"_2104-遍历对象","2.10.4 遍历对象",[20,53096,53097],{},"理解为加括号的python字典遍历",[20,53099,53100],{},[23,53101],{"alt":25,"src":53102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[20,53104,53105],{},"k是字符串类型",[20,53107,53108],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[36,53110,53112],{"className":50733,"code":53111,"language":50735,"meta":25,"style":25},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[42,53113,53114,53119,53124,53129,53134],{"__ignoreMap":25},[45,53115,53116],{"class":47,"line":48},[45,53117,53118],{"class":55},"   let arr = [1, 2, 3]\n",[45,53120,53121],{"class":47,"line":66},[45,53122,53123],{"class":55},"    for (let k in arr) {\n",[45,53125,53126],{"class":47,"line":1331},[45,53127,53128],{"class":55},"      console.log(k)\n",[45,53130,53131],{"class":47,"line":1346},[45,53132,53133],{"class":55},"      console.log(arr[k])\n",[45,53135,53136],{"class":47,"line":1352},[45,53137,2337],{"class":55},[20,53139,53140],{},[23,53141],{"alt":25,"src":53142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[20,53144,53145],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[20,53147,53148],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[20,53150,53151],{},"for in 得到的k是属性名",[51913,53153,53154],{},"\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,53156,53157],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[249,53159,53161],{"id":53160},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[20,53163,53164],{},"数组中放对象信息",[36,53166,53170],{"className":53167,"code":53168,"language":53169,"meta":25,"style":25},"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",[42,53171,53172,53180,53185,53190,53195,53200,53205,53210,53215,53220,53225,53230,53235,53239,53243],{"__ignoreMap":25},[45,53173,53174,53176,53178],{"class":47,"line":48},[45,53175,1187],{"class":55},[45,53177,51913],{"class":51400},[45,53179,51407],{"class":55},[45,53181,53182],{"class":47,"line":66},[45,53183,53184],{"class":55},"    let students = [\n",[45,53186,53187],{"class":47,"line":1331},[45,53188,53189],{"class":55},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[45,53191,53192],{"class":47,"line":1346},[45,53193,53194],{"class":55},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[45,53196,53197],{"class":47,"line":1352},[45,53198,53199],{"class":55},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[45,53201,53202],{"class":47,"line":1366},[45,53203,53204],{"class":55},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[45,53206,53207],{"class":47,"line":1372},[45,53208,53209],{"class":55},"    ]\n",[45,53211,53212],{"class":47,"line":1463},[45,53213,53214],{"class":55},"    for (let i = 0; i \u003C students.length; i++) {\n",[45,53216,53217],{"class":47,"line":1469},[45,53218,53219],{"class":55},"      for (let k in students[i]) {\n",[45,53221,53222],{"class":47,"line":1481},[45,53223,53224],{"class":55},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[45,53226,53227],{"class":47,"line":1763},[45,53228,53229],{"class":55},"        \u002F\u002F输出每个人的名字：\n",[45,53231,53232],{"class":47,"line":1768},[45,53233,53234],{"class":55},"        \u002F\u002Fconsole.log(students[i].name)\n",[45,53236,53237],{"class":47,"line":1774},[45,53238,52498],{"class":55},[45,53240,53241],{"class":47,"line":1779},[45,53242,2337],{"class":55},[45,53244,53245,53247,53249],{"class":47,"line":1793},[45,53246,52517],{"class":55},[45,53248,51913],{"class":51400},[45,53250,51407],{"class":55},[249,53252,53254],{"id":53253},"_2106-内置对象","2.10.6 内置对象",[20,53256,53257],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[233,53259,53260],{},[169,53261,53262],{},"数学对象Math",[20,53264,53265],{},[23,53266],{"alt":25,"src":53267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[20,53269,53270],{},[516,53271,53274],{"href":53272,"rel":53273},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24012],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[20,53276,53277],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[20,53279,53280],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[20,53282,53283],{},"数组不可以使用Math中的max,min来求最大值与最小值",[20,53285,53286],{},"null是一个空对象，可以认为：null类似于let obj={}",[20,53288,53289],{},"null属于对象数据类型",[233,53291,53292],{"start":66},[169,53293,53294],{},"生成任意范围随机数",[20,53296,53297],{},[23,53298],{"alt":25,"src":53299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[20,53301,53302],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[20,53304,53305],{},"乘以几就取不到几",[20,53307,53308],{},"取数组中的随机元素：",[20,53310,53311],{},"let arr = ['red', 'green', 'blue']",[20,53313,53314],{},"let random = Math.floor(Math.random() * arr.length)",[20,53316,53317],{},"console.log(arr[random])",[20,53319,53320],{},"这个函数得到的是全闭区间",[20,53322,53323],{},"function getRandom(N, M) {",[20,53325,53326],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[20,53328,1223],{},[20,53330,53331],{},"console.log(getRandom(4, 8))",[249,53333,53335],{"id":53334},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[20,53337,53338],{},[23,53339],{"alt":25,"src":53340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[20,53342,53343],{},[23,53344],{"alt":25,"src":53345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[20,53347,53348],{},[23,53349],{"alt":25,"src":53350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[20,53352,53353],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[20,53355,53356],{},[23,53357],{"alt":25,"src":53358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[20,53360,53361],{},[23,53362],{"alt":25,"src":53363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[20,53365,53366],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[20,53368,53369],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[20,53371,53372],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[196,53374,53375],{},"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":25,"searchDepth":66,"depth":66,"links":53377},[53378,53386,53387,53388,53389,53390,53397,53401,53407,53416],{"id":50568,"depth":66,"text":50569,"children":53379},[53380,53381,53382,53383,53384,53385],{"id":50572,"depth":1331,"text":50573},{"id":50589,"depth":1331,"text":50590},{"id":50629,"depth":1331,"text":50630},{"id":50641,"depth":1331,"text":50642},{"id":50650,"depth":1331,"text":50651},{"id":50698,"depth":1331,"text":50699},{"id":50708,"depth":66,"text":50709},{"id":50796,"depth":66,"text":50797},{"id":50819,"depth":66,"text":50820},{"id":50831,"depth":66,"text":50832},{"id":51018,"depth":66,"text":51019,"children":53391},[53392,53393,53394,53395,53396],{"id":51022,"depth":1331,"text":51023},{"id":51031,"depth":1331,"text":51032},{"id":51059,"depth":1331,"text":51060},{"id":51095,"depth":1331,"text":51096},{"id":51120,"depth":1331,"text":51121},{"id":51132,"depth":66,"text":51133,"children":53398},[53399,53400],{"id":51153,"depth":1331,"text":51154},{"id":51247,"depth":1331,"text":51248},{"id":51305,"depth":66,"text":51306,"children":53402},[53403,53404,53405,53406],{"id":51309,"depth":1331,"text":51310},{"id":51333,"depth":1331,"text":51334},{"id":51386,"depth":1331,"text":51387},{"id":52197,"depth":1331,"text":52198},{"id":52583,"depth":66,"text":52584,"children":53408},[53409,53410,53411,53412,53413,53414,53415],{"id":52601,"depth":1331,"text":52602},{"id":52638,"depth":1331,"text":52639},{"id":52669,"depth":1331,"text":52670},{"id":52702,"depth":1331,"text":52703},{"id":52783,"depth":1331,"text":52784},{"id":52881,"depth":1331,"text":52882},{"id":52939,"depth":1331,"text":52940},{"id":52992,"depth":66,"text":52993,"children":53417},[53418,53419,53420,53421,53422,53423,53424],{"id":52996,"depth":1331,"text":52997},{"id":53021,"depth":1331,"text":53022},{"id":53073,"depth":1331,"text":53074},{"id":53093,"depth":1331,"text":53094},{"id":53160,"depth":1331,"text":53161},{"id":53253,"depth":1331,"text":53254},{"id":53334,"depth":1331,"text":53335},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50560,"description":204},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53431,"title":53432,"body":53433,"description":204,"extension":205,"meta":76773,"navigation":207,"path":76774,"seo":76775,"stem":76776,"__hash__":76777},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53434,"toc":76713},[53435,53438,53441,53444,53449,53452,53455,53458,53462,53466,53472,53477,53485,53492,53495,53499,53504,53509,53514,53517,53520,53531,53534,53538,53541,53544,53549,53554,53559,53562,53565,53657,53660,53665,53668,53673,53676,53679,53684,53687,53692,53696,53699,53713,53717,53722,53725,53728,53732,53737,53740,53744,53748,53753,53757,53762,53765,53768,53771,53774,53777,53780,53785,53790,53818,53821,53824,53827,53832,53835,53838,53841,53844,53848,53877,53881,53886,53891,53894,53897,53900,53905,54020,54025,54030,54191,54196,54199,54203,54208,54213,54216,54219,54222,54225,54228,54231,54234,54237,54240,54243,54246,54249,54252,54255,54257,54260,54263,54266,54271,54275,54672,54675,54681,54685,54690,55972,55977,55980,55983,55986,55991,57187,57191,57197,57202,57205,57210,57215,57219,57223,57228,57231,57236,57239,57242,57246,58154,58157,58161,58382,58385,58388,58391,58617,58620,58844,58847,58851,58856,58859,58862,59090,59093,59126,59129,59133,59138,59142,59145,59148,59151,59154,59157,59160,59163,59168,60448,60452,60455,61548,61552,61555,61558,61561,61564,61568,61571,61574,61576,61584,63065,63069,63072,63075,63078,63287,63290,63294,63298,63303,63308,63311,63314,63319,63323,63328,63331,63440,63444,63449,63454,63457,63460,63464,63469,63474,63479,63482,63485,63496,63499,63504,63509,63512,63515,63588,63592,63597,63600,63602,63613,63617,63622,64948,64951,64954,64957,64959,64962,64965,64968,64971,64974,64977,64980,64983,64986,64989,64992,64995,64997,64999,65002,65006,66100,66103,66106,66122,66136,66139,66144,66150,66155,66159,66163,66168,66172,66177,66619,66624,66627,66631,66636,66639,66642,66646,66651,66655,66660,66665,66669,66674,66679,66682,66687,66692,66696,66701,66706,66810,66813,66817,66822,67188,67191,67194,67197,67200,67203,67206,67209,67212,68508,68512,68517,68522,68525,68528,68531,68534,68536,68541,68546,68549,68553,68558,68563,68568,68571,68574,68577,68580,68583,68588,68591,68595,68600,68605,68609,68614,68617,68622,68625,68628,68631,68634,68637,68642,68645,68648,68651,68654,68658,68663,68666,68670,68675,68678,68681,68685,68714,68717,68721,68725,68730,68734,68739,68742,68745,68748,68751,68754,68757,68760,68763,68766,68769,68772,68775,68778,68781,68785,68790,68795,68798,68802,68806,68811,68814,68818,68821,68824,68829,68834,68839,68844,68849,68852,68855,68860,68865,68869,68874,68877,68882,68885,68888,68891,68894,68899,68902,68911,68915,68920,68923,68926,68930,68933,68938,68942,68945,68951,68957,68961,68987,68990,70551,70554,71050,71053,71058,71063,71068,71072,71077,71082,71087,71091,71096,71099,71102,71105,71108,71112,71115,71120,71123,71128,71132,71137,71140,71145,71150,71155,71158,71161,71166,71171,71174,71177,71181,71184,71189,71192,71197,71200,71205,71210,71215,71218,71223,71288,71291,71302,71306,71311,71483,71487,71492,71495,71498,71501,71505,71516,71520,71523,71528,71533,71536,71539,71542,71545,71548,71550,71553,71556,71559,71564,71567,71572,71575,71579,71582,71585,71599,71603,71606,71661,71666,71669,71672,71677,71680,71684,71689,71819,71823,71828,71833,71914,71919,71923,71926,71931,71936,71942,71945,71948,71951,71955,71960,71963,71974,71978,71995,75042,75046,75049,75052,75055,75076,75080,75083,75091,75094,75099,75102,75105,75110,75115,75119,75140,75144,75149,75152,75155,75158,75161,75165,75170,75173,75177,75182,75185,75190,75193,75198,75201,75206,76409,76413,76418,76421,76426,76710],[10,53436,53432],{"id":53437},"_3web-apis",[20,53439,53440],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[20,53442,53443],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[20,53445,53446],{},[23,53447],{"alt":25,"src":53448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[20,53450,53451],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[20,53453,53454],{},"建议数组和对象使用 const 来声明",[20,53456,53457],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[15,53459,53461],{"id":53460},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[249,53463,53465],{"id":53464},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[20,53467,53468,53471],{},[42,53469,53470],{},"document"," = HTML 文件解析后的对象化表示；",[20,53473,53474,53476],{},[42,53475,53470],{}," ≠ HTML 文件本身",[20,53478,53479,53484],{},[427,53480,53481],{},[42,53482,53483],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[20,53486,53487,53491],{},[427,53488,53489],{},[42,53490,53470],{}," ：容器里的内容，代表当前加载的网页（DOM）",[20,53493,53494],{},"document实际上为window.document的简写",[249,53496,53498],{"id":53497},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[20,53500,53501],{},[23,53502],{"alt":25,"src":53503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[20,53505,53506],{},[23,53507],{"alt":25,"src":53508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[20,53510,53511],{},[23,53512],{"alt":25,"src":53513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[20,53515,53516],{},"console.dir()",[20,53518,53519],{},"dir用来打印对象",[166,53521,53522,53525,53528],{},[169,53523,53524],{},"任何一个标签，都是一个对象",[169,53526,53527],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[169,53529,53530],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[20,53532,53533],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[249,53535,53537],{"id":53536},"_312-获取dom对象","3.1.2 获取DoM对象",[20,53539,53540],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[20,53542,53543],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[20,53545,53546],{},[427,53547,53548],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[233,53550,53551],{},[169,53552,53553],{},"利用CSS选择器来获取标签元素",[20,53555,53556],{},[23,53557],{"alt":25,"src":53558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[20,53560,53561],{},"里边的选择器必须必须加引号！！！",[20,53563,53564],{},"只选择第一个元素",[36,53566,53568],{"className":53167,"code":53567,"language":53169,"meta":25,"style":25},"\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",[42,53569,53570,53578,53599,53618,53626,53631,53636,53641,53649],{"__ignoreMap":25},[45,53571,53572,53574,53576],{"class":47,"line":48},[45,53573,1187],{"class":55},[45,53575,51900],{"class":51400},[45,53577,51407],{"class":55},[45,53579,53580,53582,53584,53587,53589,53592,53595,53597],{"class":47,"line":66},[45,53581,52244],{"class":55},[45,53583,51711],{"class":51400},[45,53585,53586],{"class":69}," class",[45,53588,59],{"class":55},[45,53590,53591],{"class":62},"\"box\"",[45,53593,53594],{"class":55},">123\u003C\u002F",[45,53596,51711],{"class":51400},[45,53598,51407],{"class":55},[45,53600,53601,53603,53605,53607,53609,53611,53614,53616],{"class":47,"line":1331},[45,53602,52244],{"class":55},[45,53604,51711],{"class":51400},[45,53606,53586],{"class":69},[45,53608,59],{"class":55},[45,53610,53591],{"class":62},[45,53612,53613],{"class":55},">456\u003C\u002F",[45,53615,51711],{"class":51400},[45,53617,51407],{"class":55},[45,53619,53620,53622,53624],{"class":47,"line":1346},[45,53621,52244],{"class":55},[45,53623,51913],{"class":51400},[45,53625,51407],{"class":55},[45,53627,53628],{"class":47,"line":1352},[45,53629,53630],{"class":55},"    \u002F\u002F 1.获取匹配的第一个元素\n",[45,53632,53633],{"class":47,"line":1366},[45,53634,53635],{"class":55},"    const box = document.querySelector('div')\n",[45,53637,53638],{"class":47,"line":1372},[45,53639,53640],{"class":55},"    console.dir(box)\n",[45,53642,53643,53645,53647],{"class":47,"line":1463},[45,53644,52517],{"class":55},[45,53646,51913],{"class":51400},[45,53648,51407],{"class":55},[45,53650,53651,53653,53655],{"class":47,"line":1469},[45,53652,51885],{"class":55},[45,53654,51900],{"class":51400},[45,53656,51407],{"class":55},[20,53658,53659],{},"只选123，不选456",[20,53661,53662],{},[23,53663],{"alt":25,"src":53664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[20,53666,53667],{},"返回的是一个数组的集合，不能对其进行直接修改",[20,53669,53670],{},[23,53671],{"alt":25,"src":53672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[20,53674,53675],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[20,53677,53678],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[233,53680,53681],{"start":66},[169,53682,53683],{},"其他方法来获取标签元素",[20,53685,53686],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[20,53688,53689],{},[23,53690],{"alt":25,"src":53691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[249,53693,53695],{"id":53694},"_313-操作元素的内容","3.1.3 操作元素的内容",[20,53697,53698],{},"设置修改DOM元素内容有两种方式：",[166,53700,53701,53704,53707,53710],{},[169,53702,53703],{},"元素.innerText=''",[169,53705,53706],{},"元素.innerHTML=''",[169,53708,53709],{},"不写字符串输出数字也是可以的",[169,53711,53712],{},"元素.innerHtml=1",[22147,53714,53716],{"id":53715},"_3131-innertext","3.1.3.1 innerText",[20,53718,53719],{},[23,53720],{"alt":25,"src":53721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[20,53723,53724],{},"思路：实现了修改盒子中的内容！",[20,53726,53727],{},"它只显示纯文本，不解析标签",[22147,53729,53731],{"id":53730},"_3132-innerhtml","3.1.3.2 innerHTML",[20,53733,53734],{},[23,53735],{"alt":25,"src":53736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[20,53738,53739],{},"相比于innerText，他的强大之处在于可以解析标签",[249,53741,53743],{"id":53742},"_314-操作元素属性","3.1.4 操作元素属性",[22147,53745,53747],{"id":53746},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[20,53749,53750],{},[23,53751],{"alt":25,"src":53752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22147,53754,53756],{"id":53755},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[20,53758,53759],{},[23,53760],{"alt":25,"src":53761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[20,53763,53764],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[20,53766,53767],{},"div.style.backgroundColor = 'hotpink'",[20,53769,53770],{},"如果按照css的写法，-表示减，就会出错",[20,53772,53773],{},"body元素不需要再获取，直接用就行！！！！！！",[20,53775,53776],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[20,53778,53779],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[20,53781,53782],{},[23,53783],{"alt":25,"src":53784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[20,53786,53787],{},[23,53788],{"alt":25,"src":53789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[233,53791,53792,53795,53798,53801,53804,53807],{},[169,53793,53794],{},"className这个方式就是修改很多样式的时候来使用的！",[169,53796,53797],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[169,53799,53800],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[169,53802,53803],{},"className为属性名，如果还用class的话就导致与关键字冲突",[169,53805,53806],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[169,53808,53809,53810,53815],{},"解析标签的时候就变为了",[51711,53811],{"className":53812},[53813,53814],"nav","box",[53816,53817],"br",{},[20,53819,53820],{},"例子：",[51711,53822],{"className":53823},[53813],[51913,53825,53826],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[20,53828,53829],{},[23,53830],{"alt":25,"src":53831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[20,53833,53834],{},"追加和删除类名用classList",[20,53836,53837],{},"常用于类似于开关的操作",[20,53839,53840],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[20,53842,53843],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22147,53845,53847],{"id":53846},"_3143-牢记点","3.1.4.3 牢记点",[233,53849,53850,53853,53856,53859,53862,53865,53868,53871,53874],{},[169,53851,53852],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[169,53854,53855],{},"使用style属性操作css时不要忘记引号",[169,53857,53858],{},"使用className或者classList时也不要忘记引号",[169,53860,53861],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[169,53863,53864],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[169,53866,53867],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[169,53869,53870],{},"若： let arr=['1','2',3] arr[0]=1",[169,53872,53873],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[169,53875,53876],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[249,53878,53880],{"id":53879},"_315-操作表单元素","3.1.5 操作表单元素",[233,53882,53883],{},[169,53884,53885],{},"天生的属性",[20,53887,53888],{},[23,53889],{"alt":25,"src":53890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[20,53892,53893],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[20,53895,53896],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[20,53898,53899],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[20,53901,53902],{},[23,53903],{"alt":25,"src":53904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[36,53906,53908],{"className":50733,"code":53907,"language":50735,"meta":25,"style":25},"在复选框中如果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",[42,53909,53910,53915,53947,53952,53957,53962,53967,53971,53976,53981,53998,54010,54015],{"__ignoreMap":25},[45,53911,53912],{"class":47,"line":48},[45,53913,53914],{"class":55},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[45,53916,53917,53919,53922,53925,53927,53930,53932,53934,53936,53938,53940,53942,53945],{"class":47,"line":66},[45,53918,1187],{"class":55},[45,53920,53921],{"class":51400},"input",[45,53923,53924],{"class":69}," type",[45,53926,59],{"class":55},[45,53928,53929],{"class":62},"\"checkbox\"",[45,53931,15069],{"class":69},[45,53933,59],{"class":55},[45,53935,7802],{"class":62},[45,53937,15108],{"class":69},[45,53939,59],{"class":55},[45,53941,7802],{"class":62},[45,53943,53944],{"class":69}," checked",[45,53946,51407],{"class":55},[45,53948,53949],{"class":47,"line":1331},[45,53950,53951],{"class":55},"不选的话：\n",[45,53953,53954],{"class":47,"line":1346},[45,53955,53956],{"class":55},"const input = document.querySelector('input')\n",[45,53958,53959],{"class":47,"line":1352},[45,53960,53961],{"class":55},"input.checked=false\n",[45,53963,53964],{"class":47,"line":1366},[45,53965,53966],{"class":55},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[45,53968,53969],{"class":47,"line":1372},[45,53970,2550],{"emptyLinePlaceholder":207},[45,53972,53973],{"class":47,"line":1463},[45,53974,53975],{"class":55},"禁用按钮：\n",[45,53977,53978],{"class":47,"line":1469},[45,53979,53980],{"class":55},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[45,53982,53983,53985,53988,53991,53994,53996],{"class":47,"line":1481},[45,53984,1187],{"class":55},[45,53986,53987],{"class":51400},"button",[45,53989,53990],{"class":69}," disabled",[45,53992,53993],{"class":55},">点击\u003C\u002F",[45,53995,53987],{"class":51400},[45,53997,51407],{"class":55},[45,53999,54000,54002,54004,54006,54008],{"class":47,"line":1763},[45,54001,1187],{"class":55},[45,54003,53987],{"class":51400},[45,54005,53993],{"class":55},[45,54007,53987],{"class":51400},[45,54009,51407],{"class":55},[45,54011,54012],{"class":47,"line":1768},[45,54013,54014],{"class":55},"const bt = document.querySelector('button')\n",[45,54016,54017],{"class":47,"line":1774},[45,54018,54019],{"class":55},"bt.disabled = false\n",[233,54021,54022],{"start":66},[169,54023,54024],{},"自定义属性",[20,54026,54027],{},[23,54028],{"alt":25,"src":54029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[36,54031,54033],{"className":53167,"code":54032,"language":53169,"meta":25,"style":25},"\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",[42,54034,54035,54043,54071,54090,54109,54128,54147,54155,54160,54165,54170,54175,54183],{"__ignoreMap":25},[45,54036,54037,54039,54041],{"class":47,"line":48},[45,54038,1187],{"class":55},[45,54040,51900],{"class":51400},[45,54042,51407],{"class":55},[45,54044,54045,54047,54049,54052,54054,54056,54059,54061,54064,54067,54069],{"class":47,"line":66},[45,54046,52244],{"class":55},[45,54048,51711],{"class":51400},[45,54050,54051],{"class":69}," data-id",[45,54053,59],{"class":55},[45,54055,3828],{"class":62},[45,54057,54058],{"class":69}," data-spm",[45,54060,59],{"class":55},[45,54062,54063],{"class":62},"\"我不知道\"",[45,54065,54066],{"class":55},">1\u003C\u002F",[45,54068,51711],{"class":51400},[45,54070,51407],{"class":55},[45,54072,54073,54075,54077,54079,54081,54083,54086,54088],{"class":47,"line":1331},[45,54074,52244],{"class":55},[45,54076,51711],{"class":51400},[45,54078,54051],{"class":69},[45,54080,59],{"class":55},[45,54082,3851],{"class":62},[45,54084,54085],{"class":55},">2\u003C\u002F",[45,54087,51711],{"class":51400},[45,54089,51407],{"class":55},[45,54091,54092,54094,54096,54098,54100,54102,54105,54107],{"class":47,"line":1346},[45,54093,52244],{"class":55},[45,54095,51711],{"class":51400},[45,54097,54051],{"class":69},[45,54099,59],{"class":55},[45,54101,3864],{"class":62},[45,54103,54104],{"class":55},">3\u003C\u002F",[45,54106,51711],{"class":51400},[45,54108,51407],{"class":55},[45,54110,54111,54113,54115,54117,54119,54121,54124,54126],{"class":47,"line":1352},[45,54112,52244],{"class":55},[45,54114,51711],{"class":51400},[45,54116,54051],{"class":69},[45,54118,59],{"class":55},[45,54120,3877],{"class":62},[45,54122,54123],{"class":55},">4\u003C\u002F",[45,54125,51711],{"class":51400},[45,54127,51407],{"class":55},[45,54129,54130,54132,54134,54136,54138,54140,54143,54145],{"class":47,"line":1366},[45,54131,52244],{"class":55},[45,54133,51711],{"class":51400},[45,54135,54051],{"class":69},[45,54137,59],{"class":55},[45,54139,3898],{"class":62},[45,54141,54142],{"class":55},">5\u003C\u002F",[45,54144,51711],{"class":51400},[45,54146,51407],{"class":55},[45,54148,54149,54151,54153],{"class":47,"line":1372},[45,54150,52244],{"class":55},[45,54152,51913],{"class":51400},[45,54154,51407],{"class":55},[45,54156,54157],{"class":47,"line":1463},[45,54158,54159],{"class":55},"    const one = document.querySelector('div')\n",[45,54161,54162],{"class":47,"line":1469},[45,54163,54164],{"class":55},"    console.log(one.dataset)\n",[45,54166,54167],{"class":47,"line":1481},[45,54168,54169],{"class":55},"    console.log(one.dataset.id)\n",[45,54171,54172],{"class":47,"line":1763},[45,54173,54174],{"class":55},"    console.log(one.dataset.spm)\n",[45,54176,54177,54179,54181],{"class":47,"line":1768},[45,54178,52517],{"class":55},[45,54180,51913],{"class":51400},[45,54182,51407],{"class":55},[45,54184,54185,54187,54189],{"class":47,"line":1774},[45,54186,51885],{"class":55},[45,54188,51900],{"class":51400},[45,54190,51407],{"class":55},[20,54192,54193],{},[23,54194],{"alt":25,"src":54195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[20,54197,54198],{},"document.querySelector选择的是第一个对象（元素）",[249,54200,54202],{"id":54201},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[20,54204,54205],{},[23,54206],{"alt":25,"src":54207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[20,54209,54210],{},[23,54211],{"alt":25,"src":54212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[20,54214,54215],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51913,54217,54218],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[20,54220,54221],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51913,54223,54224],{},"\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,54226,54227],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[20,54229,54230],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[20,54232,54233],{},"单位为毫秒！！！",[20,54235,54236],{},"可以搭配匿名函数来用！！！",[20,54238,54239],{},"setInterval(function () {",[20,54241,54242],{},"alert('两秒执行一次')",[20,54244,54245],{},"}, 2000)",[20,54247,54248],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[20,54250,54251],{},"function fn() {",[20,54253,54254],{},"document.write(1)",[20,54256,1223],{},[20,54258,54259],{},"setInterval(fn, 1000)",[20,54261,54262],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[20,54264,54265],{},"setInterval('fn()', 1000)",[20,54267,54268],{},[23,54269],{"alt":25,"src":54270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22147,54272,54274],{"id":54273},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[36,54276,54278],{"className":50733,"code":54277,"language":50735,"meta":25,"style":25},"\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",[42,54279,54280,54290,54304,54308,54316,54330,54350,54362,54370,54374,54382,54419,54424,54429,54434,54442,54450,54472,54480,54485,54507,54512,54517,54528,54533,54553,54561,54576,54591,54602,54607,54617,54627,54631,54640,54644,54652,54660,54664],{"__ignoreMap":25},[45,54281,54282,54284,54286,54288],{"class":47,"line":48},[45,54283,51397],{"class":55},[45,54285,51401],{"class":51400},[45,54287,51404],{"class":69},[45,54289,51407],{"class":55},[45,54291,54292,54294,54296,54298,54300,54302],{"class":47,"line":66},[45,54293,1187],{"class":55},[45,54295,50735],{"class":51400},[45,54297,51416],{"class":69},[45,54299,59],{"class":55},[45,54301,51421],{"class":62},[45,54303,51407],{"class":55},[45,54305,54306],{"class":47,"line":1331},[45,54307,2550],{"emptyLinePlaceholder":207},[45,54309,54310,54312,54314],{"class":47,"line":1346},[45,54311,1187],{"class":55},[45,54313,51434],{"class":51400},[45,54315,51407],{"class":55},[45,54317,54318,54320,54322,54324,54326,54328],{"class":47,"line":1352},[45,54319,52244],{"class":55},[45,54321,51444],{"class":51400},[45,54323,51447],{"class":69},[45,54325,59],{"class":55},[45,54327,51452],{"class":62},[45,54329,51407],{"class":55},[45,54331,54332,54334,54336,54338,54340,54342,54344,54346,54348],{"class":47,"line":1366},[45,54333,52244],{"class":55},[45,54335,51444],{"class":51400},[45,54337,15069],{"class":69},[45,54339,59],{"class":55},[45,54341,51491],{"class":62},[45,54343,51471],{"class":69},[45,54345,59],{"class":55},[45,54347,51498],{"class":62},[45,54349,51407],{"class":55},[45,54351,54352,54354,54356,54358,54360],{"class":47,"line":1372},[45,54353,52244],{"class":55},[45,54355,51507],{"class":51400},[45,54357,51510],{"class":55},[45,54359,51507],{"class":51400},[45,54361,51407],{"class":55},[45,54363,54364,54366,54368],{"class":47,"line":1463},[45,54365,51885],{"class":55},[45,54367,51434],{"class":51400},[45,54369,51407],{"class":55},[45,54371,54372],{"class":47,"line":1469},[45,54373,2550],{"emptyLinePlaceholder":207},[45,54375,54376,54378,54380],{"class":47,"line":1481},[45,54377,1187],{"class":55},[45,54379,51900],{"class":51400},[45,54381,51407],{"class":55},[45,54383,54384,54386,54389,54391,54393,54395,54397,54399,54401,54404,54406,54409,54412,54414,54417],{"class":47,"line":1763},[45,54385,52244],{"class":55},[45,54387,54388],{"class":51400},"textarea",[45,54390,15069],{"class":69},[45,54392,59],{"class":55},[45,54394,7802],{"class":62},[45,54396,15108],{"class":69},[45,54398,59],{"class":55},[45,54400,7802],{"class":62},[45,54402,54403],{"class":69}," cols",[45,54405,59],{"class":55},[45,54407,54408],{"class":62},"\"30\"",[45,54410,54411],{"class":69}," rows",[45,54413,59],{"class":55},[45,54415,54416],{"class":62},"\"10\"",[45,54418,51407],{"class":55},[45,54420,54421],{"class":47,"line":1768},[45,54422,54423],{"class":55},"        用户注册协议\n",[45,54425,54426],{"class":47,"line":1774},[45,54427,54428],{"class":55},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[45,54430,54431],{"class":47,"line":1779},[45,54432,54433],{"class":55},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[45,54435,54436,54438,54440],{"class":47,"line":1793},[45,54437,51876],{"class":55},[45,54439,54388],{"class":51400},[45,54441,51407],{"class":55},[45,54443,54444,54446,54448],{"class":47,"line":1798},[45,54445,52244],{"class":55},[45,54447,53816],{"class":51400},[45,54449,51407],{"class":55},[45,54451,54452,54454,54456,54458,54460,54463,54465,54468,54470],{"class":47,"line":1804},[45,54453,52244],{"class":55},[45,54455,53987],{"class":51400},[45,54457,53586],{"class":69},[45,54459,59],{"class":55},[45,54461,54462],{"class":62},"\"btn\"",[45,54464,53990],{"class":69},[45,54466,54467],{"class":55},">我已经阅读用户协议(5)\u003C\u002F",[45,54469,53987],{"class":51400},[45,54471,51407],{"class":55},[45,54473,54474,54476,54478],{"class":47,"line":1825},[45,54475,52244],{"class":55},[45,54477,51913],{"class":51400},[45,54479,51407],{"class":55},[45,54481,54482],{"class":47,"line":1830},[45,54483,54484],{"class":337},"    \u002F\u002F 1. 获取元素\n",[45,54486,54487,54489,54492,54494,54497,54500,54502,54505],{"class":47,"line":1844},[45,54488,11370],{"class":51},[45,54490,54491],{"class":79}," btn",[45,54493,13713],{"class":51},[45,54495,54496],{"class":55}," document.",[45,54498,54499],{"class":69},"querySelector",[45,54501,282],{"class":55},[45,54503,54504],{"class":62},"'.btn'",[45,54506,139],{"class":55},[45,54508,54509],{"class":47,"line":1849},[45,54510,54511],{"class":337},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[45,54513,54514],{"class":47,"line":1878},[45,54515,54516],{"class":337},"    \u002F\u002F 2. 倒计时\n",[45,54518,54519,54521,54523,54525],{"class":47,"line":1883},[45,54520,52319],{"class":51},[45,54522,9588],{"class":55},[45,54524,59],{"class":51},[45,54526,54527],{"class":79}," 5\n",[45,54529,54530],{"class":47,"line":1900},[45,54531,54532],{"class":337},"    \u002F\u002F 2.1 开启定时器\n",[45,54534,54535,54537,54540,54542,54545,54547,54550],{"class":47,"line":1905},[45,54536,52319],{"class":51},[45,54538,54539],{"class":55}," n ",[45,54541,59],{"class":51},[45,54543,54544],{"class":69}," setInterval",[45,54546,282],{"class":55},[45,54548,54549],{"class":51},"function",[45,54551,54552],{"class":55}," () {\n",[45,54554,54555,54558],{"class":47,"line":1910},[45,54556,54557],{"class":55},"      i",[45,54559,54560],{"class":51},"--\n",[45,54562,54563,54566,54568,54571,54573],{"class":47,"line":1915},[45,54564,54565],{"class":55},"      btn.innerHTML ",[45,54567,59],{"class":51},[45,54569,54570],{"class":62}," `我已经阅读用户协议(${",[45,54572,718],{"class":55},[45,54574,54575],{"class":62},"})`\n",[45,54577,54578,54581,54584,54587,54589],{"class":47,"line":1929},[45,54579,54580],{"class":51},"      if",[45,54582,54583],{"class":55}," (i ",[45,54585,54586],{"class":51},"===",[45,54588,4243],{"class":79},[45,54590,12591],{"class":55},[45,54592,54593,54596,54599],{"class":47,"line":1934},[45,54594,54595],{"class":69},"        clearInterval",[45,54597,54598],{"class":55},"(n)  ",[45,54600,54601],{"class":337},"\u002F\u002F 关闭定时器\n",[45,54603,54604],{"class":47,"line":2727},[45,54605,54606],{"class":337},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[45,54608,54609,54612,54614],{"class":47,"line":2741},[45,54610,54611],{"class":55},"        btn.disabled ",[45,54613,59],{"class":51},[45,54615,54616],{"class":79}," false\n",[45,54618,54619,54622,54624],{"class":47,"line":2749},[45,54620,54621],{"class":55},"        btn.innerHTML ",[45,54623,59],{"class":51},[45,54625,54626],{"class":62}," '同意'\n",[45,54628,54629],{"class":47,"line":2754},[45,54630,52498],{"class":55},[45,54632,54633,54636,54638],{"class":47,"line":2760},[45,54634,54635],{"class":55},"    }, ",[45,54637,6560],{"class":79},[45,54639,139],{"class":55},[45,54641,54642],{"class":47,"line":2766},[45,54643,2550],{"emptyLinePlaceholder":207},[45,54645,54646,54648,54650],{"class":47,"line":2771},[45,54647,52517],{"class":55},[45,54649,51913],{"class":51400},[45,54651,51407],{"class":55},[45,54653,54654,54656,54658],{"class":47,"line":8098},[45,54655,51885],{"class":55},[45,54657,51900],{"class":51400},[45,54659,51407],{"class":55},[45,54661,54662],{"class":47,"line":8122},[45,54663,2550],{"emptyLinePlaceholder":207},[45,54665,54666,54668,54670],{"class":47,"line":8127},[45,54667,51885],{"class":55},[45,54669,50735],{"class":51400},[45,54671,51407],{"class":55},[20,54673,54674],{},"不要一直想着用死循环,避免死循环",[20,54676,54677,54680],{},[42,54678,54679],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22147,54682,54684],{"id":54683},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[233,54686,54687],{},[169,54688,54689],{},"法1",[36,54691,54693],{"className":50733,"code":54692,"language":50735,"meta":25,"style":25},"\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",[42,54694,54695,54705,54719,54723,54731,54745,54765,54777,54785,54791,54802,54813,54817,54821,54828,54840,54844,54848,54855,54867,54881,54894,54908,54912,54916,54923,54934,54945,54956,54968,54980,54992,54996,55000,55008,55018,55031,55043,55056,55060,55064,55071,55081,55093,55105,55116,55127,55137,55149,55161,55165,55169,55178,55190,55202,55230,55243,55247,55251,55258,55269,55273,55281,55289,55293,55301,55315,55330,55354,55362,55377,55390,55398,55419,55431,55443,55455,55467,55479,55491,55503,55512,55520,55528,55536,55548,55571,55590,55609,55628,55647,55666,55685,55705,55709,55729,55748,55768,55789,55800,55817,55827,55837,55847,55852,55857,55862,55867,55892,55905,55909,55932,55936,55944,55952,55960,55964],{"__ignoreMap":25},[45,54696,54697,54699,54701,54703],{"class":47,"line":48},[45,54698,51397],{"class":55},[45,54700,51401],{"class":51400},[45,54702,51404],{"class":69},[45,54704,51407],{"class":55},[45,54706,54707,54709,54711,54713,54715,54717],{"class":47,"line":66},[45,54708,1187],{"class":55},[45,54710,50735],{"class":51400},[45,54712,51416],{"class":69},[45,54714,59],{"class":55},[45,54716,51421],{"class":62},[45,54718,51407],{"class":55},[45,54720,54721],{"class":47,"line":1331},[45,54722,2550],{"emptyLinePlaceholder":207},[45,54724,54725,54727,54729],{"class":47,"line":1346},[45,54726,1187],{"class":55},[45,54728,51434],{"class":51400},[45,54730,51407],{"class":55},[45,54732,54733,54735,54737,54739,54741,54743],{"class":47,"line":1352},[45,54734,52244],{"class":55},[45,54736,51444],{"class":51400},[45,54738,51447],{"class":69},[45,54740,59],{"class":55},[45,54742,51452],{"class":62},[45,54744,51407],{"class":55},[45,54746,54747,54749,54751,54753,54755,54757,54759,54761,54763],{"class":47,"line":1366},[45,54748,52244],{"class":55},[45,54750,51444],{"class":51400},[45,54752,15069],{"class":69},[45,54754,59],{"class":55},[45,54756,51491],{"class":62},[45,54758,51471],{"class":69},[45,54760,59],{"class":55},[45,54762,51498],{"class":62},[45,54764,51407],{"class":55},[45,54766,54767,54769,54771,54773,54775],{"class":47,"line":1372},[45,54768,52244],{"class":55},[45,54770,51507],{"class":51400},[45,54772,51510],{"class":55},[45,54774,51507],{"class":51400},[45,54776,51407],{"class":55},[45,54778,54779,54781,54783],{"class":47,"line":1463},[45,54780,52244],{"class":55},[45,54782,196],{"class":51400},[45,54784,51407],{"class":55},[45,54786,54787,54789],{"class":47,"line":1469},[45,54788,6553],{"class":51400},[45,54790,15721],{"class":55},[45,54792,54793,54796,54798,54800],{"class":47,"line":1481},[45,54794,54795],{"class":79},"      padding",[45,54797,51537],{"class":55},[45,54799,469],{"class":79},[45,54801,1442],{"class":55},[45,54803,54804,54807,54809,54811],{"class":47,"line":1763},[45,54805,54806],{"class":79},"      margin",[45,54808,51537],{"class":55},[45,54810,469],{"class":79},[45,54812,1442],{"class":55},[45,54814,54815],{"class":47,"line":1768},[45,54816,2337],{"class":55},[45,54818,54819],{"class":47,"line":1774},[45,54820,2550],{"emptyLinePlaceholder":207},[45,54822,54823,54826],{"class":47,"line":1779},[45,54824,54825],{"class":51400},"    li",[45,54827,15721],{"class":55},[45,54829,54830,54833,54835,54838],{"class":47,"line":1793},[45,54831,54832],{"class":79},"      list-style",[45,54834,51537],{"class":55},[45,54836,54837],{"class":79},"none",[45,54839,1442],{"class":55},[45,54841,54842],{"class":47,"line":1798},[45,54843,2337],{"class":55},[45,54845,54846],{"class":47,"line":1804},[45,54847,2550],{"emptyLinePlaceholder":207},[45,54849,54850,54853],{"class":47,"line":1825},[45,54851,54852],{"class":69},"    .box",[45,54854,15721],{"class":55},[45,54856,54857,54860,54862,54865],{"class":47,"line":1830},[45,54858,54859],{"class":79},"      position",[45,54861,51537],{"class":55},[45,54863,54864],{"class":79},"relative",[45,54866,1442],{"class":55},[45,54868,54869,54872,54874,54877,54879],{"class":47,"line":1844},[45,54870,54871],{"class":79},"      width",[45,54873,51537],{"class":55},[45,54875,54876],{"class":79},"976",[45,54878,51592],{"class":51},[45,54880,1442],{"class":55},[45,54882,54883,54886,54888,54890,54892],{"class":47,"line":1849},[45,54884,54885],{"class":79},"      height",[45,54887,51537],{"class":55},[45,54889,1690],{"class":79},[45,54891,51592],{"class":51},[45,54893,1442],{"class":55},[45,54895,54896,54898,54900,54902,54904,54906],{"class":47,"line":1878},[45,54897,54806],{"class":79},[45,54899,51537],{"class":55},[45,54901,588],{"class":79},[45,54903,51592],{"class":51},[45,54905,51656],{"class":79},[45,54907,1442],{"class":55},[45,54909,54910],{"class":47,"line":1883},[45,54911,2337],{"class":55},[45,54913,54914],{"class":47,"line":1900},[45,54915,2550],{"emptyLinePlaceholder":207},[45,54917,54918,54921],{"class":47,"line":1905},[45,54919,54920],{"class":69},"    .slider-footer",[45,54922,15721],{"class":55},[45,54924,54925,54927,54929,54932],{"class":47,"line":1910},[45,54926,54859],{"class":79},[45,54928,51537],{"class":55},[45,54930,54931],{"class":79},"absolute",[45,54933,1442],{"class":55},[45,54935,54936,54939,54941,54943],{"class":47,"line":1915},[45,54937,54938],{"class":79},"      left",[45,54940,51537],{"class":55},[45,54942,469],{"class":79},[45,54944,1442],{"class":55},[45,54946,54947,54950,54952,54954],{"class":47,"line":1929},[45,54948,54949],{"class":79},"      bottom",[45,54951,51537],{"class":55},[45,54953,469],{"class":79},[45,54955,1442],{"class":55},[45,54957,54958,54960,54962,54964,54966],{"class":47,"line":1934},[45,54959,54871],{"class":79},[45,54961,51537],{"class":55},[45,54963,588],{"class":79},[45,54965,605],{"class":51},[45,54967,1442],{"class":55},[45,54969,54970,54972,54974,54976,54978],{"class":47,"line":2727},[45,54971,54885],{"class":79},[45,54973,51537],{"class":55},[45,54975,852],{"class":79},[45,54977,605],{"class":51},[45,54979,1442],{"class":55},[45,54981,54982,54985,54987,54990],{"class":47,"line":2741},[45,54983,54984],{"class":79},"      background-color",[45,54986,51537],{"class":55},[45,54988,54989],{"class":79},"skyblue",[45,54991,1442],{"class":55},[45,54993,54994],{"class":47,"line":2749},[45,54995,2337],{"class":55},[45,54997,54998],{"class":47,"line":2754},[45,54999,2550],{"emptyLinePlaceholder":207},[45,55001,55002,55004,55006],{"class":47,"line":2760},[45,55003,54920],{"class":69},[45,55005,6975],{"class":51400},[45,55007,15721],{"class":55},[45,55009,55010,55012,55014,55016],{"class":47,"line":2766},[45,55011,54859],{"class":79},[45,55013,51537],{"class":55},[45,55015,54931],{"class":79},[45,55017,1442],{"class":55},[45,55019,55020,55023,55025,55027,55029],{"class":47,"line":2771},[45,55021,55022],{"class":79},"      font-size",[45,55024,51537],{"class":55},[45,55026,1178],{"class":79},[45,55028,51592],{"class":51},[45,55030,1442],{"class":55},[45,55032,55033,55035,55037,55039,55041],{"class":47,"line":8098},[45,55034,54938],{"class":79},[45,55036,51537],{"class":55},[45,55038,977],{"class":79},[45,55040,51592],{"class":51},[45,55042,1442],{"class":55},[45,55044,55045,55048,55050,55052,55054],{"class":47,"line":8122},[45,55046,55047],{"class":79},"      top",[45,55049,51537],{"class":55},[45,55051,596],{"class":79},[45,55053,51592],{"class":51},[45,55055,1442],{"class":55},[45,55057,55058],{"class":47,"line":8127},[45,55059,2337],{"class":55},[45,55061,55062],{"class":47,"line":8133},[45,55063,2550],{"emptyLinePlaceholder":207},[45,55065,55066,55069],{"class":47,"line":8160},[45,55067,55068],{"class":51400},"    ul",[45,55070,15721],{"class":55},[45,55072,55073,55075,55077,55079],{"class":47,"line":8165},[45,55074,54859],{"class":79},[45,55076,51537],{"class":55},[45,55078,54931],{"class":79},[45,55080,1442],{"class":55},[45,55082,55083,55085,55087,55089,55091],{"class":47,"line":8171},[45,55084,55047],{"class":79},[45,55086,51537],{"class":55},[45,55088,1058],{"class":79},[45,55090,51592],{"class":51},[45,55092,1442],{"class":55},[45,55094,55095,55097,55099,55101,55103],{"class":47,"line":8183},[45,55096,54938],{"class":79},[45,55098,51537],{"class":55},[45,55100,977],{"class":79},[45,55102,51592],{"class":51},[45,55104,1442],{"class":55},[45,55106,55107,55110,55112,55114],{"class":47,"line":8195},[45,55108,55109],{"class":79},"      display",[45,55111,51537],{"class":55},[45,55113,51577],{"class":79},[45,55115,1442],{"class":55},[45,55117,55118,55121,55123,55125],{"class":47,"line":8207},[45,55119,55120],{"class":79},"      justify-content",[45,55122,51537],{"class":55},[45,55124,51768],{"class":79},[45,55126,1442],{"class":55},[45,55128,55129,55131,55133,55135],{"class":47,"line":9866},[45,55130,54859],{"class":79},[45,55132,51537],{"class":55},[45,55134,54931],{"class":79},[45,55136,1442],{"class":55},[45,55138,55139,55141,55143,55145,55147],{"class":47,"line":9890},[45,55140,54871],{"class":79},[45,55142,51537],{"class":55},[45,55144,4142],{"class":79},[45,55146,51592],{"class":51},[45,55148,1442],{"class":55},[45,55150,55151,55153,55155,55157,55159],{"class":47,"line":9913},[45,55152,54885],{"class":79},[45,55154,51537],{"class":55},[45,55156,977],{"class":79},[45,55158,51592],{"class":51},[45,55160,1442],{"class":55},[45,55162,55163],{"class":47,"line":9937},[45,55164,2337],{"class":55},[45,55166,55167],{"class":47,"line":9942},[45,55168,2550],{"emptyLinePlaceholder":207},[45,55170,55171,55173,55176],{"class":47,"line":9947},[45,55172,55068],{"class":51400},[45,55174,55175],{"class":51400}," li",[45,55177,15721],{"class":55},[45,55179,55180,55182,55184,55186,55188],{"class":47,"line":9952},[45,55181,54871],{"class":79},[45,55183,51537],{"class":55},[45,55185,977],{"class":79},[45,55187,51592],{"class":51},[45,55189,1442],{"class":55},[45,55191,55192,55194,55196,55198,55200],{"class":47,"line":9961},[45,55193,54885],{"class":79},[45,55195,51537],{"class":55},[45,55197,977],{"class":79},[45,55199,51592],{"class":51},[45,55201,1442],{"class":55},[45,55203,55204,55206,55208,55211,55213,55215,55217,55219,55221,55223,55225,55228],{"class":47,"line":9966},[45,55205,54984],{"class":79},[45,55207,51537],{"class":55},[45,55209,55210],{"class":79},"rgba",[45,55212,282],{"class":55},[45,55214,469],{"class":79},[45,55216,12584],{"class":55},[45,55218,469],{"class":79},[45,55220,12584],{"class":55},[45,55222,469],{"class":79},[45,55224,12584],{"class":55},[45,55226,55227],{"class":79},".4",[45,55229,2869],{"class":55},[45,55231,55232,55235,55237,55239,55241],{"class":47,"line":9972},[45,55233,55234],{"class":79},"      border-radius",[45,55236,51537],{"class":55},[45,55238,723],{"class":79},[45,55240,51592],{"class":51},[45,55242,1442],{"class":55},[45,55244,55245],{"class":47,"line":9993},[45,55246,2337],{"class":55},[45,55248,55249],{"class":47,"line":9999},[45,55250,2550],{"emptyLinePlaceholder":207},[45,55252,55253,55256],{"class":47,"line":10013},[45,55254,55255],{"class":69},"    .activate",[45,55257,15721],{"class":55},[45,55259,55260,55262,55264,55267],{"class":47,"line":10019},[45,55261,54984],{"class":79},[45,55263,51537],{"class":55},[45,55265,55266],{"class":79},"#f7f7f7",[45,55268,1442],{"class":55},[45,55270,55271],{"class":47,"line":10046},[45,55272,2337],{"class":55},[45,55274,55275,55277,55279],{"class":47,"line":10055},[45,55276,52517],{"class":55},[45,55278,196],{"class":51400},[45,55280,51407],{"class":55},[45,55282,55283,55285,55287],{"class":47,"line":10061},[45,55284,51885],{"class":55},[45,55286,51434],{"class":51400},[45,55288,51407],{"class":55},[45,55290,55291],{"class":47,"line":10069},[45,55292,2550],{"emptyLinePlaceholder":207},[45,55294,55295,55297,55299],{"class":47,"line":10074},[45,55296,1187],{"class":55},[45,55298,51900],{"class":51400},[45,55300,51407],{"class":55},[45,55302,55303,55305,55307,55309,55311,55313],{"class":47,"line":16753},[45,55304,52244],{"class":55},[45,55306,51711],{"class":51400},[45,55308,53586],{"class":69},[45,55310,59],{"class":55},[45,55312,53591],{"class":62},[45,55314,51407],{"class":55},[45,55316,55317,55319,55321,55323,55325,55328],{"class":47,"line":16759},[45,55318,51441],{"class":55},[45,55320,51711],{"class":51400},[45,55322,53586],{"class":69},[45,55324,59],{"class":55},[45,55326,55327],{"class":62},"\"slider-wrapper\"",[45,55329,51407],{"class":55},[45,55331,55332,55335,55337,55340,55342,55345,55348,55350,55352],{"class":47,"line":16782},[45,55333,55334],{"class":55},"      \u003C",[45,55336,23],{"class":51400},[45,55338,55339],{"class":69}," src",[45,55341,59],{"class":55},[45,55343,55344],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[45,55346,55347],{"class":69}," alt",[45,55349,59],{"class":55},[45,55351,7802],{"class":62},[45,55353,51407],{"class":55},[45,55355,55356,55358,55360],{"class":47,"line":16788},[45,55357,51876],{"class":55},[45,55359,51711],{"class":51400},[45,55361,51407],{"class":55},[45,55363,55364,55366,55368,55370,55372,55375],{"class":47,"line":16811},[45,55365,51441],{"class":55},[45,55367,51711],{"class":51400},[45,55369,53586],{"class":69},[45,55371,59],{"class":55},[45,55373,55374],{"class":62},"\"slider-footer\"",[45,55376,51407],{"class":55},[45,55378,55379,55381,55383,55386,55388],{"class":47,"line":16825},[45,55380,55334],{"class":55},[45,55382,20],{"class":51400},[45,55384,55385],{"class":55},">对人类来说会不会太超前了?\u003C\u002F",[45,55387,20],{"class":51400},[45,55389,51407],{"class":55},[45,55391,55392,55394,55396],{"class":47,"line":16845},[45,55393,55334],{"class":55},[45,55395,166],{"class":51400},[45,55397,51407],{"class":55},[45,55399,55400,55403,55405,55407,55409,55412,55415,55417],{"class":47,"line":16851},[45,55401,55402],{"class":55},"        \u003C",[45,55404,169],{"class":51400},[45,55406,53586],{"class":69},[45,55408,59],{"class":55},[45,55410,55411],{"class":62},"\"activate\"",[45,55413,55414],{"class":55},">\u003C\u002F",[45,55416,169],{"class":51400},[45,55418,51407],{"class":55},[45,55420,55421,55423,55425,55427,55429],{"class":47,"line":16862},[45,55422,55402],{"class":55},[45,55424,169],{"class":51400},[45,55426,55414],{"class":55},[45,55428,169],{"class":51400},[45,55430,51407],{"class":55},[45,55432,55433,55435,55437,55439,55441],{"class":47,"line":16885},[45,55434,55402],{"class":55},[45,55436,169],{"class":51400},[45,55438,55414],{"class":55},[45,55440,169],{"class":51400},[45,55442,51407],{"class":55},[45,55444,55445,55447,55449,55451,55453],{"class":47,"line":16907},[45,55446,55402],{"class":55},[45,55448,169],{"class":51400},[45,55450,55414],{"class":55},[45,55452,169],{"class":51400},[45,55454,51407],{"class":55},[45,55456,55457,55459,55461,55463,55465],{"class":47,"line":16912},[45,55458,55402],{"class":55},[45,55460,169],{"class":51400},[45,55462,55414],{"class":55},[45,55464,169],{"class":51400},[45,55466,51407],{"class":55},[45,55468,55469,55471,55473,55475,55477],{"class":47,"line":16918},[45,55470,55402],{"class":55},[45,55472,169],{"class":51400},[45,55474,55414],{"class":55},[45,55476,169],{"class":51400},[45,55478,51407],{"class":55},[45,55480,55481,55483,55485,55487,55489],{"class":47,"line":16932},[45,55482,55402],{"class":55},[45,55484,169],{"class":51400},[45,55486,55414],{"class":55},[45,55488,169],{"class":51400},[45,55490,51407],{"class":55},[45,55492,55493,55495,55497,55499,55501],{"class":47,"line":16945},[45,55494,55402],{"class":55},[45,55496,169],{"class":51400},[45,55498,55414],{"class":55},[45,55500,169],{"class":51400},[45,55502,51407],{"class":55},[45,55504,55505,55508,55510],{"class":47,"line":16950},[45,55506,55507],{"class":55},"      \u003C\u002F",[45,55509,166],{"class":51400},[45,55511,51407],{"class":55},[45,55513,55514,55516,55518],{"class":47,"line":16964},[45,55515,51876],{"class":55},[45,55517,51711],{"class":51400},[45,55519,51407],{"class":55},[45,55521,55522,55524,55526],{"class":47,"line":16969},[45,55523,52517],{"class":55},[45,55525,51711],{"class":51400},[45,55527,51407],{"class":55},[45,55529,55530,55532,55534],{"class":47,"line":16975},[45,55531,52244],{"class":55},[45,55533,51913],{"class":51400},[45,55535,51407],{"class":55},[45,55537,55538,55540,55543,55545],{"class":47,"line":16980},[45,55539,11370],{"class":51},[45,55541,55542],{"class":79}," arrImage",[45,55544,13713],{"class":51},[45,55546,55547],{"class":55}," [\n",[45,55549,55550,55553,55556,55559,55562,55565,55568],{"class":47,"line":16994},[45,55551,55552],{"class":55},"      { url: ",[45,55554,55555],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[45,55557,55558],{"class":55},", title: ",[45,55560,55561],{"class":62},"'对人类来说会不会太超前了?'",[45,55563,55564],{"class":55},", color: ",[45,55566,55567],{"class":62},"'rgba(100,67,68)'",[45,55569,55570],{"class":55}," },\n",[45,55572,55573,55575,55578,55580,55583,55585,55588],{"class":47,"line":16999},[45,55574,55552],{"class":55},[45,55576,55577],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[45,55579,55558],{"class":55},[45,55581,55582],{"class":62},"'开启剑与雪的黑暗传说!'",[45,55584,55564],{"class":55},[45,55586,55587],{"class":62},"'rgba(43,35,26)'",[45,55589,55570],{"class":55},[45,55591,55592,55594,55597,55599,55602,55604,55607],{"class":47,"line":17004},[45,55593,55552],{"class":55},[45,55595,55596],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[45,55598,55558],{"class":55},[45,55600,55601],{"class":62},"'真正的jo厨出现了!'",[45,55603,55564],{"class":55},[45,55605,55606],{"class":62},"'rgba(36,31,33)'",[45,55608,55570],{"class":55},[45,55610,55611,55613,55616,55618,55621,55623,55626],{"class":47,"line":17018},[45,55612,55552],{"class":55},[45,55614,55615],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[45,55617,55558],{"class":55},[45,55619,55620],{"class":62},"'李玉刚:让世界通过b站看到东方大国文化'",[45,55622,55564],{"class":55},[45,55624,55625],{"class":62},"'rgba(139,98,66)'",[45,55627,55570],{"class":55},[45,55629,55630,55632,55635,55637,55640,55642,55645],{"class":47,"line":17030},[45,55631,55552],{"class":55},[45,55633,55634],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[45,55636,55558],{"class":55},[45,55638,55639],{"class":62},"'快来分享你的寒假日常吧'",[45,55641,55564],{"class":55},[45,55643,55644],{"class":62},"'rgba(67,90,92)'",[45,55646,55570],{"class":55},[45,55648,55649,55651,55654,55656,55659,55661,55664],{"class":47,"line":17035},[45,55650,55552],{"class":55},[45,55652,55653],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[45,55655,55558],{"class":55},[45,55657,55658],{"class":62},"'哔哩哔哩小年YEAR'",[45,55660,55564],{"class":55},[45,55662,55663],{"class":62},"'rgba(166,131,143)'",[45,55665,55570],{"class":55},[45,55667,55668,55670,55673,55675,55678,55680,55683],{"class":47,"line":17048},[45,55669,55552],{"class":55},[45,55671,55672],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[45,55674,55558],{"class":55},[45,55676,55677],{"class":62},"'一站式解决你的电脑配置问题'",[45,55679,55564],{"class":55},[45,55681,55682],{"class":62},"'rgba(53,29,25)'",[45,55684,55570],{"class":55},[45,55686,55687,55689,55692,55694,55697,55699,55702],{"class":47,"line":17053},[45,55688,55552],{"class":55},[45,55690,55691],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[45,55693,55558],{"class":55},[45,55695,55696],{"class":62},"'谁不想和小猫咪贴贴呢?'",[45,55698,55564],{"class":55},[45,55700,55701],{"class":62},"'rgba(99,72,114)'",[45,55703,55704],{"class":55}," }\n",[45,55706,55707],{"class":47,"line":17058},[45,55708,53209],{"class":55},[45,55710,55711,55713,55716,55718,55720,55722,55724,55727],{"class":47,"line":17063},[45,55712,11370],{"class":51},[45,55714,55715],{"class":79}," img",[45,55717,13713],{"class":51},[45,55719,54496],{"class":55},[45,55721,54499],{"class":69},[45,55723,282],{"class":55},[45,55725,55726],{"class":62},"'.slider-wrapper img'",[45,55728,139],{"class":55},[45,55730,55731,55733,55735,55737,55739,55741,55743,55746],{"class":47,"line":17076},[45,55732,11370],{"class":51},[45,55734,6975],{"class":79},[45,55736,13713],{"class":51},[45,55738,54496],{"class":55},[45,55740,54499],{"class":69},[45,55742,282],{"class":55},[45,55744,55745],{"class":62},"'.slider-footer p'",[45,55747,139],{"class":55},[45,55749,55750,55752,55755,55757,55759,55761,55763,55766],{"class":47,"line":17081},[45,55751,11370],{"class":51},[45,55753,55754],{"class":79}," color",[45,55756,13713],{"class":51},[45,55758,54496],{"class":55},[45,55760,54499],{"class":69},[45,55762,282],{"class":55},[45,55764,55765],{"class":62},"'.slider-footer'",[45,55767,139],{"class":55},[45,55769,55770,55772,55775,55777,55779,55782,55784,55787],{"class":47,"line":32733},[45,55771,11370],{"class":51},[45,55773,55774],{"class":79}," lis",[45,55776,13713],{"class":51},[45,55778,54496],{"class":55},[45,55780,55781],{"class":69},"querySelectorAll",[45,55783,282],{"class":55},[45,55785,55786],{"class":62},"'.slider-footer ul li'",[45,55788,139],{"class":55},[45,55790,55791,55793,55795,55797],{"class":47,"line":32739},[45,55792,52319],{"class":51},[45,55794,9588],{"class":55},[45,55796,59],{"class":51},[45,55798,55799],{"class":79}," 1\n",[45,55801,55802,55804,55807,55809,55811,55813,55815],{"class":47,"line":32745},[45,55803,52319],{"class":51},[45,55805,55806],{"class":55}," timer ",[45,55808,59],{"class":51},[45,55810,54544],{"class":69},[45,55812,282],{"class":55},[45,55814,54549],{"class":51},[45,55816,54552],{"class":55},[45,55818,55819,55822,55824],{"class":47,"line":32751},[45,55820,55821],{"class":55},"      img.src ",[45,55823,59],{"class":51},[45,55825,55826],{"class":55}," arrImage[i].url\n",[45,55828,55829,55832,55834],{"class":47,"line":32757},[45,55830,55831],{"class":55},"      p.innerHTML ",[45,55833,59],{"class":51},[45,55835,55836],{"class":55}," arrImage[i].title\n",[45,55838,55839,55842,55844],{"class":47,"line":32768},[45,55840,55841],{"class":55},"      color.style.backgroundColor ",[45,55843,59],{"class":51},[45,55845,55846],{"class":55}," arrImage[i].color\n",[45,55848,55849],{"class":47,"line":32774},[45,55850,55851],{"class":337},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[45,55853,55854],{"class":47,"line":32794},[45,55855,55856],{"class":337},"      \u002F\u002F li.classList.add('activate')\n",[45,55858,55859],{"class":47,"line":32800},[45,55860,55861],{"class":337},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[45,55863,55864],{"class":47,"line":32811},[45,55865,55866],{"class":337},"      \u002F\u002F lis[i].classList.remove('activate')\n",[45,55868,55869,55872,55874,55876,55879,55882,55885,55887,55890],{"class":47,"line":32817},[45,55870,55871],{"class":55},"      document.",[45,55873,54499],{"class":69},[45,55875,282],{"class":55},[45,55877,55878],{"class":62},"'.activate'",[45,55880,55881],{"class":55},")?.classList.",[45,55883,55884],{"class":69},"toggle",[45,55886,282],{"class":55},[45,55888,55889],{"class":62},"'activate'",[45,55891,139],{"class":55},[45,55893,55894,55897,55899,55901,55903],{"class":47,"line":32823},[45,55895,55896],{"class":55},"      lis[i].classList.",[45,55898,5484],{"class":69},[45,55900,282],{"class":55},[45,55902,55889],{"class":62},[45,55904,139],{"class":55},[45,55906,55907],{"class":47,"line":32829},[45,55908,2550],{"emptyLinePlaceholder":207},[45,55910,55911,55914,55916,55918,55920,55922,55924,55926,55929],{"class":47,"line":32835},[45,55912,55913],{"class":55},"      i ",[45,55915,59],{"class":51},[45,55917,54583],{"class":55},[45,55919,758],{"class":51},[45,55921,136],{"class":79},[45,55923,13863],{"class":55},[45,55925,605],{"class":51},[45,55927,55928],{"class":55}," arrImage.",[45,55930,55931],{"class":79},"length\n",[45,55933,55934],{"class":47,"line":32841},[45,55935,2550],{"emptyLinePlaceholder":207},[45,55937,55938,55940,55942],{"class":47,"line":32847},[45,55939,54635],{"class":55},[45,55941,6560],{"class":79},[45,55943,139],{"class":55},[45,55945,55946,55948,55950],{"class":47,"line":32853},[45,55947,52517],{"class":55},[45,55949,51913],{"class":51400},[45,55951,51407],{"class":55},[45,55953,55954,55956,55958],{"class":47,"line":32873},[45,55955,51885],{"class":55},[45,55957,51900],{"class":51400},[45,55959,51407],{"class":55},[45,55961,55962],{"class":47,"line":32879},[45,55963,2550],{"emptyLinePlaceholder":207},[45,55965,55966,55968,55970],{"class":47,"line":32895},[45,55967,51885],{"class":55},[45,55969,50735],{"class":51400},[45,55971,51407],{"class":55},[20,55973,55974],{},[23,55975],{"alt":25,"src":55976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[20,55978,55979],{},"?.就是短路保护,确保输出正常进行",[20,55981,55982],{},"不要忘记取余%,有时候可以用",[20,55984,55985],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[233,55987,55988],{"start":66},[169,55989,55990],{},"法2",[36,55992,55994],{"className":50733,"code":55993,"language":50735,"meta":25,"style":25},"\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",[42,55995,55996,56006,56020,56024,56032,56046,56066,56078,56086,56092,56102,56112,56116,56120,56126,56136,56140,56144,56150,56160,56172,56184,56198,56202,56206,56212,56222,56232,56242,56254,56266,56276,56280,56284,56292,56302,56314,56326,56338,56342,56346,56352,56362,56374,56386,56396,56406,56416,56428,56440,56444,56448,56456,56468,56480,56506,56518,56522,56526,56532,56542,56546,56554,56562,56566,56574,56588,56602,56622,56630,56644,56656,56664,56682,56694,56706,56718,56730,56742,56754,56766,56774,56782,56790,56798,56809,56825,56841,56857,56873,56889,56905,56921,56937,56941,56946,56964,56982,56992,56997,57002,57013,57019,57034,57043,57047,57052,57061,57066,57075,57080,57085,57090,57113,57143,57147,57155,57159,57167,57175,57179],{"__ignoreMap":25},[45,55997,55998,56000,56002,56004],{"class":47,"line":48},[45,55999,51397],{"class":55},[45,56001,51401],{"class":51400},[45,56003,51404],{"class":69},[45,56005,51407],{"class":55},[45,56007,56008,56010,56012,56014,56016,56018],{"class":47,"line":66},[45,56009,1187],{"class":55},[45,56011,50735],{"class":51400},[45,56013,51416],{"class":69},[45,56015,59],{"class":55},[45,56017,51421],{"class":62},[45,56019,51407],{"class":55},[45,56021,56022],{"class":47,"line":1331},[45,56023,2550],{"emptyLinePlaceholder":207},[45,56025,56026,56028,56030],{"class":47,"line":1346},[45,56027,1187],{"class":55},[45,56029,51434],{"class":51400},[45,56031,51407],{"class":55},[45,56033,56034,56036,56038,56040,56042,56044],{"class":47,"line":1352},[45,56035,52244],{"class":55},[45,56037,51444],{"class":51400},[45,56039,51447],{"class":69},[45,56041,59],{"class":55},[45,56043,51452],{"class":62},[45,56045,51407],{"class":55},[45,56047,56048,56050,56052,56054,56056,56058,56060,56062,56064],{"class":47,"line":1366},[45,56049,52244],{"class":55},[45,56051,51444],{"class":51400},[45,56053,15069],{"class":69},[45,56055,59],{"class":55},[45,56057,51491],{"class":62},[45,56059,51471],{"class":69},[45,56061,59],{"class":55},[45,56063,51498],{"class":62},[45,56065,51407],{"class":55},[45,56067,56068,56070,56072,56074,56076],{"class":47,"line":1372},[45,56069,52244],{"class":55},[45,56071,51507],{"class":51400},[45,56073,51510],{"class":55},[45,56075,51507],{"class":51400},[45,56077,51407],{"class":55},[45,56079,56080,56082,56084],{"class":47,"line":1463},[45,56081,52244],{"class":55},[45,56083,196],{"class":51400},[45,56085,51407],{"class":55},[45,56087,56088,56090],{"class":47,"line":1469},[45,56089,6553],{"class":51400},[45,56091,15721],{"class":55},[45,56093,56094,56096,56098,56100],{"class":47,"line":1481},[45,56095,54795],{"class":79},[45,56097,51537],{"class":55},[45,56099,469],{"class":79},[45,56101,1442],{"class":55},[45,56103,56104,56106,56108,56110],{"class":47,"line":1763},[45,56105,54806],{"class":79},[45,56107,51537],{"class":55},[45,56109,469],{"class":79},[45,56111,1442],{"class":55},[45,56113,56114],{"class":47,"line":1768},[45,56115,2337],{"class":55},[45,56117,56118],{"class":47,"line":1774},[45,56119,2550],{"emptyLinePlaceholder":207},[45,56121,56122,56124],{"class":47,"line":1779},[45,56123,54825],{"class":51400},[45,56125,15721],{"class":55},[45,56127,56128,56130,56132,56134],{"class":47,"line":1793},[45,56129,54832],{"class":79},[45,56131,51537],{"class":55},[45,56133,54837],{"class":79},[45,56135,1442],{"class":55},[45,56137,56138],{"class":47,"line":1798},[45,56139,2337],{"class":55},[45,56141,56142],{"class":47,"line":1804},[45,56143,2550],{"emptyLinePlaceholder":207},[45,56145,56146,56148],{"class":47,"line":1825},[45,56147,54852],{"class":69},[45,56149,15721],{"class":55},[45,56151,56152,56154,56156,56158],{"class":47,"line":1830},[45,56153,54859],{"class":79},[45,56155,51537],{"class":55},[45,56157,54864],{"class":79},[45,56159,1442],{"class":55},[45,56161,56162,56164,56166,56168,56170],{"class":47,"line":1844},[45,56163,54871],{"class":79},[45,56165,51537],{"class":55},[45,56167,54876],{"class":79},[45,56169,51592],{"class":51},[45,56171,1442],{"class":55},[45,56173,56174,56176,56178,56180,56182],{"class":47,"line":1849},[45,56175,54885],{"class":79},[45,56177,51537],{"class":55},[45,56179,1690],{"class":79},[45,56181,51592],{"class":51},[45,56183,1442],{"class":55},[45,56185,56186,56188,56190,56192,56194,56196],{"class":47,"line":1878},[45,56187,54806],{"class":79},[45,56189,51537],{"class":55},[45,56191,588],{"class":79},[45,56193,51592],{"class":51},[45,56195,51656],{"class":79},[45,56197,1442],{"class":55},[45,56199,56200],{"class":47,"line":1883},[45,56201,2337],{"class":55},[45,56203,56204],{"class":47,"line":1900},[45,56205,2550],{"emptyLinePlaceholder":207},[45,56207,56208,56210],{"class":47,"line":1905},[45,56209,54920],{"class":69},[45,56211,15721],{"class":55},[45,56213,56214,56216,56218,56220],{"class":47,"line":1910},[45,56215,54859],{"class":79},[45,56217,51537],{"class":55},[45,56219,54931],{"class":79},[45,56221,1442],{"class":55},[45,56223,56224,56226,56228,56230],{"class":47,"line":1915},[45,56225,54938],{"class":79},[45,56227,51537],{"class":55},[45,56229,469],{"class":79},[45,56231,1442],{"class":55},[45,56233,56234,56236,56238,56240],{"class":47,"line":1929},[45,56235,54949],{"class":79},[45,56237,51537],{"class":55},[45,56239,469],{"class":79},[45,56241,1442],{"class":55},[45,56243,56244,56246,56248,56250,56252],{"class":47,"line":1934},[45,56245,54871],{"class":79},[45,56247,51537],{"class":55},[45,56249,588],{"class":79},[45,56251,605],{"class":51},[45,56253,1442],{"class":55},[45,56255,56256,56258,56260,56262,56264],{"class":47,"line":2727},[45,56257,54885],{"class":79},[45,56259,51537],{"class":55},[45,56261,852],{"class":79},[45,56263,605],{"class":51},[45,56265,1442],{"class":55},[45,56267,56268,56270,56272,56274],{"class":47,"line":2741},[45,56269,54984],{"class":79},[45,56271,51537],{"class":55},[45,56273,54989],{"class":79},[45,56275,1442],{"class":55},[45,56277,56278],{"class":47,"line":2749},[45,56279,2337],{"class":55},[45,56281,56282],{"class":47,"line":2754},[45,56283,2550],{"emptyLinePlaceholder":207},[45,56285,56286,56288,56290],{"class":47,"line":2760},[45,56287,54920],{"class":69},[45,56289,6975],{"class":51400},[45,56291,15721],{"class":55},[45,56293,56294,56296,56298,56300],{"class":47,"line":2766},[45,56295,54859],{"class":79},[45,56297,51537],{"class":55},[45,56299,54931],{"class":79},[45,56301,1442],{"class":55},[45,56303,56304,56306,56308,56310,56312],{"class":47,"line":2771},[45,56305,55022],{"class":79},[45,56307,51537],{"class":55},[45,56309,1178],{"class":79},[45,56311,51592],{"class":51},[45,56313,1442],{"class":55},[45,56315,56316,56318,56320,56322,56324],{"class":47,"line":8098},[45,56317,54938],{"class":79},[45,56319,51537],{"class":55},[45,56321,977],{"class":79},[45,56323,51592],{"class":51},[45,56325,1442],{"class":55},[45,56327,56328,56330,56332,56334,56336],{"class":47,"line":8122},[45,56329,55047],{"class":79},[45,56331,51537],{"class":55},[45,56333,596],{"class":79},[45,56335,51592],{"class":51},[45,56337,1442],{"class":55},[45,56339,56340],{"class":47,"line":8127},[45,56341,2337],{"class":55},[45,56343,56344],{"class":47,"line":8133},[45,56345,2550],{"emptyLinePlaceholder":207},[45,56347,56348,56350],{"class":47,"line":8160},[45,56349,55068],{"class":51400},[45,56351,15721],{"class":55},[45,56353,56354,56356,56358,56360],{"class":47,"line":8165},[45,56355,54859],{"class":79},[45,56357,51537],{"class":55},[45,56359,54931],{"class":79},[45,56361,1442],{"class":55},[45,56363,56364,56366,56368,56370,56372],{"class":47,"line":8171},[45,56365,55047],{"class":79},[45,56367,51537],{"class":55},[45,56369,1058],{"class":79},[45,56371,51592],{"class":51},[45,56373,1442],{"class":55},[45,56375,56376,56378,56380,56382,56384],{"class":47,"line":8183},[45,56377,54938],{"class":79},[45,56379,51537],{"class":55},[45,56381,977],{"class":79},[45,56383,51592],{"class":51},[45,56385,1442],{"class":55},[45,56387,56388,56390,56392,56394],{"class":47,"line":8195},[45,56389,55109],{"class":79},[45,56391,51537],{"class":55},[45,56393,51577],{"class":79},[45,56395,1442],{"class":55},[45,56397,56398,56400,56402,56404],{"class":47,"line":8207},[45,56399,55120],{"class":79},[45,56401,51537],{"class":55},[45,56403,51768],{"class":79},[45,56405,1442],{"class":55},[45,56407,56408,56410,56412,56414],{"class":47,"line":9866},[45,56409,54859],{"class":79},[45,56411,51537],{"class":55},[45,56413,54931],{"class":79},[45,56415,1442],{"class":55},[45,56417,56418,56420,56422,56424,56426],{"class":47,"line":9890},[45,56419,54871],{"class":79},[45,56421,51537],{"class":55},[45,56423,4142],{"class":79},[45,56425,51592],{"class":51},[45,56427,1442],{"class":55},[45,56429,56430,56432,56434,56436,56438],{"class":47,"line":9913},[45,56431,54885],{"class":79},[45,56433,51537],{"class":55},[45,56435,977],{"class":79},[45,56437,51592],{"class":51},[45,56439,1442],{"class":55},[45,56441,56442],{"class":47,"line":9937},[45,56443,2337],{"class":55},[45,56445,56446],{"class":47,"line":9942},[45,56447,2550],{"emptyLinePlaceholder":207},[45,56449,56450,56452,56454],{"class":47,"line":9947},[45,56451,55068],{"class":51400},[45,56453,55175],{"class":51400},[45,56455,15721],{"class":55},[45,56457,56458,56460,56462,56464,56466],{"class":47,"line":9952},[45,56459,54871],{"class":79},[45,56461,51537],{"class":55},[45,56463,977],{"class":79},[45,56465,51592],{"class":51},[45,56467,1442],{"class":55},[45,56469,56470,56472,56474,56476,56478],{"class":47,"line":9961},[45,56471,54885],{"class":79},[45,56473,51537],{"class":55},[45,56475,977],{"class":79},[45,56477,51592],{"class":51},[45,56479,1442],{"class":55},[45,56481,56482,56484,56486,56488,56490,56492,56494,56496,56498,56500,56502,56504],{"class":47,"line":9966},[45,56483,54984],{"class":79},[45,56485,51537],{"class":55},[45,56487,55210],{"class":79},[45,56489,282],{"class":55},[45,56491,469],{"class":79},[45,56493,12584],{"class":55},[45,56495,469],{"class":79},[45,56497,12584],{"class":55},[45,56499,469],{"class":79},[45,56501,12584],{"class":55},[45,56503,55227],{"class":79},[45,56505,2869],{"class":55},[45,56507,56508,56510,56512,56514,56516],{"class":47,"line":9972},[45,56509,55234],{"class":79},[45,56511,51537],{"class":55},[45,56513,723],{"class":79},[45,56515,51592],{"class":51},[45,56517,1442],{"class":55},[45,56519,56520],{"class":47,"line":9993},[45,56521,2337],{"class":55},[45,56523,56524],{"class":47,"line":9999},[45,56525,2550],{"emptyLinePlaceholder":207},[45,56527,56528,56530],{"class":47,"line":10013},[45,56529,55255],{"class":69},[45,56531,15721],{"class":55},[45,56533,56534,56536,56538,56540],{"class":47,"line":10019},[45,56535,54984],{"class":79},[45,56537,51537],{"class":55},[45,56539,55266],{"class":79},[45,56541,1442],{"class":55},[45,56543,56544],{"class":47,"line":10046},[45,56545,2337],{"class":55},[45,56547,56548,56550,56552],{"class":47,"line":10055},[45,56549,52517],{"class":55},[45,56551,196],{"class":51400},[45,56553,51407],{"class":55},[45,56555,56556,56558,56560],{"class":47,"line":10061},[45,56557,51885],{"class":55},[45,56559,51434],{"class":51400},[45,56561,51407],{"class":55},[45,56563,56564],{"class":47,"line":10069},[45,56565,2550],{"emptyLinePlaceholder":207},[45,56567,56568,56570,56572],{"class":47,"line":10074},[45,56569,1187],{"class":55},[45,56571,51900],{"class":51400},[45,56573,51407],{"class":55},[45,56575,56576,56578,56580,56582,56584,56586],{"class":47,"line":16753},[45,56577,52244],{"class":55},[45,56579,51711],{"class":51400},[45,56581,53586],{"class":69},[45,56583,59],{"class":55},[45,56585,53591],{"class":62},[45,56587,51407],{"class":55},[45,56589,56590,56592,56594,56596,56598,56600],{"class":47,"line":16759},[45,56591,51441],{"class":55},[45,56593,51711],{"class":51400},[45,56595,53586],{"class":69},[45,56597,59],{"class":55},[45,56599,55327],{"class":62},[45,56601,51407],{"class":55},[45,56603,56604,56606,56608,56610,56612,56614,56616,56618,56620],{"class":47,"line":16782},[45,56605,55334],{"class":55},[45,56607,23],{"class":51400},[45,56609,55339],{"class":69},[45,56611,59],{"class":55},[45,56613,55344],{"class":62},[45,56615,55347],{"class":69},[45,56617,59],{"class":55},[45,56619,7802],{"class":62},[45,56621,51407],{"class":55},[45,56623,56624,56626,56628],{"class":47,"line":16788},[45,56625,51876],{"class":55},[45,56627,51711],{"class":51400},[45,56629,51407],{"class":55},[45,56631,56632,56634,56636,56638,56640,56642],{"class":47,"line":16811},[45,56633,51441],{"class":55},[45,56635,51711],{"class":51400},[45,56637,53586],{"class":69},[45,56639,59],{"class":55},[45,56641,55374],{"class":62},[45,56643,51407],{"class":55},[45,56645,56646,56648,56650,56652,56654],{"class":47,"line":16825},[45,56647,55334],{"class":55},[45,56649,20],{"class":51400},[45,56651,55385],{"class":55},[45,56653,20],{"class":51400},[45,56655,51407],{"class":55},[45,56657,56658,56660,56662],{"class":47,"line":16845},[45,56659,55334],{"class":55},[45,56661,166],{"class":51400},[45,56663,51407],{"class":55},[45,56665,56666,56668,56670,56672,56674,56676,56678,56680],{"class":47,"line":16851},[45,56667,55402],{"class":55},[45,56669,169],{"class":51400},[45,56671,53586],{"class":69},[45,56673,59],{"class":55},[45,56675,55411],{"class":62},[45,56677,55414],{"class":55},[45,56679,169],{"class":51400},[45,56681,51407],{"class":55},[45,56683,56684,56686,56688,56690,56692],{"class":47,"line":16862},[45,56685,55402],{"class":55},[45,56687,169],{"class":51400},[45,56689,55414],{"class":55},[45,56691,169],{"class":51400},[45,56693,51407],{"class":55},[45,56695,56696,56698,56700,56702,56704],{"class":47,"line":16885},[45,56697,55402],{"class":55},[45,56699,169],{"class":51400},[45,56701,55414],{"class":55},[45,56703,169],{"class":51400},[45,56705,51407],{"class":55},[45,56707,56708,56710,56712,56714,56716],{"class":47,"line":16907},[45,56709,55402],{"class":55},[45,56711,169],{"class":51400},[45,56713,55414],{"class":55},[45,56715,169],{"class":51400},[45,56717,51407],{"class":55},[45,56719,56720,56722,56724,56726,56728],{"class":47,"line":16912},[45,56721,55402],{"class":55},[45,56723,169],{"class":51400},[45,56725,55414],{"class":55},[45,56727,169],{"class":51400},[45,56729,51407],{"class":55},[45,56731,56732,56734,56736,56738,56740],{"class":47,"line":16918},[45,56733,55402],{"class":55},[45,56735,169],{"class":51400},[45,56737,55414],{"class":55},[45,56739,169],{"class":51400},[45,56741,51407],{"class":55},[45,56743,56744,56746,56748,56750,56752],{"class":47,"line":16932},[45,56745,55402],{"class":55},[45,56747,169],{"class":51400},[45,56749,55414],{"class":55},[45,56751,169],{"class":51400},[45,56753,51407],{"class":55},[45,56755,56756,56758,56760,56762,56764],{"class":47,"line":16945},[45,56757,55402],{"class":55},[45,56759,169],{"class":51400},[45,56761,55414],{"class":55},[45,56763,169],{"class":51400},[45,56765,51407],{"class":55},[45,56767,56768,56770,56772],{"class":47,"line":16950},[45,56769,55507],{"class":55},[45,56771,166],{"class":51400},[45,56773,51407],{"class":55},[45,56775,56776,56778,56780],{"class":47,"line":16964},[45,56777,51876],{"class":55},[45,56779,51711],{"class":51400},[45,56781,51407],{"class":55},[45,56783,56784,56786,56788],{"class":47,"line":16969},[45,56785,52517],{"class":55},[45,56787,51711],{"class":51400},[45,56789,51407],{"class":55},[45,56791,56792,56794,56796],{"class":47,"line":16975},[45,56793,52244],{"class":55},[45,56795,51913],{"class":51400},[45,56797,51407],{"class":55},[45,56799,56800,56802,56805,56807],{"class":47,"line":16980},[45,56801,11370],{"class":51},[45,56803,56804],{"class":79}," sliderData",[45,56806,13713],{"class":51},[45,56808,55547],{"class":55},[45,56810,56811,56813,56815,56817,56819,56821,56823],{"class":47,"line":16994},[45,56812,55552],{"class":55},[45,56814,55555],{"class":62},[45,56816,55558],{"class":55},[45,56818,55561],{"class":62},[45,56820,55564],{"class":55},[45,56822,55567],{"class":62},[45,56824,55570],{"class":55},[45,56826,56827,56829,56831,56833,56835,56837,56839],{"class":47,"line":16999},[45,56828,55552],{"class":55},[45,56830,55577],{"class":62},[45,56832,55558],{"class":55},[45,56834,55582],{"class":62},[45,56836,55564],{"class":55},[45,56838,55587],{"class":62},[45,56840,55570],{"class":55},[45,56842,56843,56845,56847,56849,56851,56853,56855],{"class":47,"line":17004},[45,56844,55552],{"class":55},[45,56846,55596],{"class":62},[45,56848,55558],{"class":55},[45,56850,55601],{"class":62},[45,56852,55564],{"class":55},[45,56854,55606],{"class":62},[45,56856,55570],{"class":55},[45,56858,56859,56861,56863,56865,56867,56869,56871],{"class":47,"line":17018},[45,56860,55552],{"class":55},[45,56862,55615],{"class":62},[45,56864,55558],{"class":55},[45,56866,55620],{"class":62},[45,56868,55564],{"class":55},[45,56870,55625],{"class":62},[45,56872,55570],{"class":55},[45,56874,56875,56877,56879,56881,56883,56885,56887],{"class":47,"line":17030},[45,56876,55552],{"class":55},[45,56878,55634],{"class":62},[45,56880,55558],{"class":55},[45,56882,55639],{"class":62},[45,56884,55564],{"class":55},[45,56886,55644],{"class":62},[45,56888,55570],{"class":55},[45,56890,56891,56893,56895,56897,56899,56901,56903],{"class":47,"line":17035},[45,56892,55552],{"class":55},[45,56894,55653],{"class":62},[45,56896,55558],{"class":55},[45,56898,55658],{"class":62},[45,56900,55564],{"class":55},[45,56902,55663],{"class":62},[45,56904,55570],{"class":55},[45,56906,56907,56909,56911,56913,56915,56917,56919],{"class":47,"line":17048},[45,56908,55552],{"class":55},[45,56910,55672],{"class":62},[45,56912,55558],{"class":55},[45,56914,55677],{"class":62},[45,56916,55564],{"class":55},[45,56918,55682],{"class":62},[45,56920,55570],{"class":55},[45,56922,56923,56925,56927,56929,56931,56933,56935],{"class":47,"line":17053},[45,56924,55552],{"class":55},[45,56926,55691],{"class":62},[45,56928,55558],{"class":55},[45,56930,55696],{"class":62},[45,56932,55564],{"class":55},[45,56934,55701],{"class":62},[45,56936,55704],{"class":55},[45,56938,56939],{"class":47,"line":17058},[45,56940,53209],{"class":55},[45,56942,56943],{"class":47,"line":17063},[45,56944,56945],{"class":337},"    \u002F\u002F 1.获取元素\n",[45,56947,56948,56950,56952,56954,56956,56958,56960,56962],{"class":47,"line":17076},[45,56949,11370],{"class":51},[45,56951,55715],{"class":79},[45,56953,13713],{"class":51},[45,56955,54496],{"class":55},[45,56957,54499],{"class":69},[45,56959,282],{"class":55},[45,56961,55726],{"class":62},[45,56963,139],{"class":55},[45,56965,56966,56968,56970,56972,56974,56976,56978,56980],{"class":47,"line":17081},[45,56967,11370],{"class":51},[45,56969,6975],{"class":79},[45,56971,13713],{"class":51},[45,56973,54496],{"class":55},[45,56975,54499],{"class":69},[45,56977,282],{"class":55},[45,56979,55745],{"class":62},[45,56981,139],{"class":55},[45,56983,56984,56986,56988,56990],{"class":47,"line":32733},[45,56985,52319],{"class":51},[45,56987,9588],{"class":55},[45,56989,59],{"class":51},[45,56991,47433],{"class":79},[45,56993,56994],{"class":47,"line":32739},[45,56995,56996],{"class":337},"    \u002F\u002F 2.开启定时器\n",[45,56998,56999],{"class":47,"line":32745},[45,57000,57001],{"class":337},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[45,57003,57004,57007,57009,57011],{"class":47,"line":32751},[45,57005,57006],{"class":69},"    setInterval",[45,57008,282],{"class":55},[45,57010,54549],{"class":51},[45,57012,54552],{"class":55},[45,57014,57015,57017],{"class":47,"line":32757},[45,57016,54557],{"class":55},[45,57018,2852],{"class":51},[45,57020,57021,57023,57025,57027,57030,57032],{"class":47,"line":32768},[45,57022,54580],{"class":51},[45,57024,54583],{"class":55},[45,57026,1861],{"class":51},[45,57028,57029],{"class":55}," sliderData.",[45,57031,52068],{"class":79},[45,57033,12591],{"class":55},[45,57035,57036,57039,57041],{"class":47,"line":32774},[45,57037,57038],{"class":55},"        i ",[45,57040,59],{"class":51},[45,57042,47433],{"class":79},[45,57044,57045],{"class":47,"line":32794},[45,57046,52498],{"class":55},[45,57048,57049],{"class":47,"line":32800},[45,57050,57051],{"class":337},"      \u002F\u002F 更换图片路径\n",[45,57053,57054,57056,57058],{"class":47,"line":32811},[45,57055,55821],{"class":55},[45,57057,59],{"class":51},[45,57059,57060],{"class":55}," sliderData[i].url\n",[45,57062,57063],{"class":47,"line":32817},[45,57064,57065],{"class":337},"      \u002F\u002F 把文字写到p里面\n",[45,57067,57068,57070,57072],{"class":47,"line":32823},[45,57069,55831],{"class":55},[45,57071,59],{"class":51},[45,57073,57074],{"class":55}," sliderData[i].title\n",[45,57076,57077],{"class":47,"line":32829},[45,57078,57079],{"class":337},"      \u002F\u002F 小圆点\n",[45,57081,57082],{"class":47,"line":32835},[45,57083,57084],{"class":337},"      \u002F\u002F 先删除以前的active\n",[45,57086,57087],{"class":47,"line":32841},[45,57088,57089],{"class":337},"      \u002F\u002F 只让当前li添加active\n",[45,57091,57092,57094,57096,57098,57101,57104,57107,57109,57111],{"class":47,"line":32847},[45,57093,55871],{"class":55},[45,57095,54499],{"class":69},[45,57097,282],{"class":55},[45,57099,57100],{"class":62},"'.slider-footer .activate'",[45,57102,57103],{"class":55},").classList.",[45,57105,57106],{"class":69},"remove",[45,57108,282],{"class":55},[45,57110,55889],{"class":62},[45,57112,139],{"class":55},[45,57114,57115,57117,57119,57121,57124,57126,57128,57130,57133,57135,57137,57139,57141],{"class":47,"line":32853},[45,57116,55871],{"class":55},[45,57118,54499],{"class":69},[45,57120,282],{"class":55},[45,57122,57123],{"class":62},"`.slider-footer ul li:nth-child(${",[45,57125,718],{"class":55},[45,57127,45666],{"class":51},[45,57129,136],{"class":79},[45,57131,57132],{"class":62},"})`",[45,57134,57103],{"class":55},[45,57136,5484],{"class":69},[45,57138,282],{"class":55},[45,57140,55889],{"class":62},[45,57142,139],{"class":55},[45,57144,57145],{"class":47,"line":32873},[45,57146,2550],{"emptyLinePlaceholder":207},[45,57148,57149,57151,57153],{"class":47,"line":32879},[45,57150,54635],{"class":55},[45,57152,6560],{"class":79},[45,57154,139],{"class":55},[45,57156,57157],{"class":47,"line":32895},[45,57158,2550],{"emptyLinePlaceholder":207},[45,57160,57161,57163,57165],{"class":47,"line":32901},[45,57162,52517],{"class":55},[45,57164,51913],{"class":51400},[45,57166,51407],{"class":55},[45,57168,57169,57171,57173],{"class":47,"line":32915},[45,57170,51885],{"class":55},[45,57172,51900],{"class":51400},[45,57174,51407],{"class":55},[45,57176,57177],{"class":47,"line":32921},[45,57178,2550],{"emptyLinePlaceholder":207},[45,57180,57181,57183,57185],{"class":47,"line":32936},[45,57182,51885],{"class":55},[45,57184,50735],{"class":51400},[45,57186,51407],{"class":55},[249,57188,57190],{"id":57189},"_317-重要知识点","3.1.7 重要知识点",[20,57192,57193,57194],{},"浏览器在渲染文本时， ",[427,57195,57196],{},"没有空格或换行符就没有“断行点”",[20,57198,57199],{},[23,57200],{"alt":25,"src":57201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[20,57203,57204],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[20,57206,57207],{},[23,57208],{"alt":25,"src":57209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[20,57211,57212],{},[23,57213],{"alt":25,"src":57214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[15,57216,57218],{"id":57217},"_32-dom事件基础","3.2 DOM事件基础",[249,57220,57222],{"id":57221},"_321-事件监听","3.2.1 事件监听",[20,57224,57225],{},[23,57226],{"alt":25,"src":57227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[20,57229,57230],{},"事件监听有响应的发生",[20,57232,57233],{},[23,57234],{"alt":25,"src":57235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[20,57237,57238],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[20,57240,57241],{},"对于有名函数,要执行的函数名后边不要加()",[249,57243,57245],{"id":57244},"_322-随机点名案例","3.2.2 随机点名案例",[36,57247,57249],{"className":50733,"code":57248,"language":50735,"meta":25,"style":25},"\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",[42,57250,57251,57261,57275,57279,57287,57301,57321,57333,57341,57347,57357,57367,57371,57375,57382,57393,57397,57401,57407,57419,57433,57443,57455,57468,57472,57476,57483,57487,57500,57512,57524,57528,57532,57536,57543,57553,57557,57561,57570,57582,57594,57609,57613,57621,57629,57633,57641,57654,57668,57681,57701,57709,57724,57744,57764,57772,57776,57784,57789,57825,57845,57850,57869,57874,57885,57890,57901,57906,57925,57940,57945,57971,57981,57990,57995,58011,58016,58021,58026,58041,58045,58049,58054,58073,58090,58098,58103,58118,58122,58126,58134,58142,58146],{"__ignoreMap":25},[45,57252,57253,57255,57257,57259],{"class":47,"line":48},[45,57254,51397],{"class":55},[45,57256,51401],{"class":51400},[45,57258,51404],{"class":69},[45,57260,51407],{"class":55},[45,57262,57263,57265,57267,57269,57271,57273],{"class":47,"line":66},[45,57264,1187],{"class":55},[45,57266,50735],{"class":51400},[45,57268,51416],{"class":69},[45,57270,59],{"class":55},[45,57272,51421],{"class":62},[45,57274,51407],{"class":55},[45,57276,57277],{"class":47,"line":1331},[45,57278,2550],{"emptyLinePlaceholder":207},[45,57280,57281,57283,57285],{"class":47,"line":1346},[45,57282,1187],{"class":55},[45,57284,51434],{"class":51400},[45,57286,51407],{"class":55},[45,57288,57289,57291,57293,57295,57297,57299],{"class":47,"line":1352},[45,57290,52244],{"class":55},[45,57292,51444],{"class":51400},[45,57294,51447],{"class":69},[45,57296,59],{"class":55},[45,57298,51452],{"class":62},[45,57300,51407],{"class":55},[45,57302,57303,57305,57307,57309,57311,57313,57315,57317,57319],{"class":47,"line":1366},[45,57304,52244],{"class":55},[45,57306,51444],{"class":51400},[45,57308,15069],{"class":69},[45,57310,59],{"class":55},[45,57312,51491],{"class":62},[45,57314,51471],{"class":69},[45,57316,59],{"class":55},[45,57318,51498],{"class":62},[45,57320,51407],{"class":55},[45,57322,57323,57325,57327,57329,57331],{"class":47,"line":1372},[45,57324,52244],{"class":55},[45,57326,51507],{"class":51400},[45,57328,51510],{"class":55},[45,57330,51507],{"class":51400},[45,57332,51407],{"class":55},[45,57334,57335,57337,57339],{"class":47,"line":1463},[45,57336,52244],{"class":55},[45,57338,196],{"class":51400},[45,57340,51407],{"class":55},[45,57342,57343,57345],{"class":47,"line":1469},[45,57344,6553],{"class":51400},[45,57346,15721],{"class":55},[45,57348,57349,57351,57353,57355],{"class":47,"line":1481},[45,57350,54806],{"class":79},[45,57352,51537],{"class":55},[45,57354,469],{"class":79},[45,57356,1442],{"class":55},[45,57358,57359,57361,57363,57365],{"class":47,"line":1763},[45,57360,54795],{"class":79},[45,57362,51537],{"class":55},[45,57364,469],{"class":79},[45,57366,1442],{"class":55},[45,57368,57369],{"class":47,"line":1768},[45,57370,2337],{"class":55},[45,57372,57373],{"class":47,"line":1774},[45,57374,2550],{"emptyLinePlaceholder":207},[45,57376,57377,57380],{"class":47,"line":1779},[45,57378,57379],{"class":51400},"    h2",[45,57381,15721],{"class":55},[45,57383,57384,57387,57389,57391],{"class":47,"line":1793},[45,57385,57386],{"class":79},"      text-align",[45,57388,51537],{"class":55},[45,57390,51692],{"class":79},[45,57392,1442],{"class":55},[45,57394,57395],{"class":47,"line":1798},[45,57396,2337],{"class":55},[45,57398,57399],{"class":47,"line":1804},[45,57400,2550],{"emptyLinePlaceholder":207},[45,57402,57403,57405],{"class":47,"line":1825},[45,57404,54852],{"class":69},[45,57406,15721],{"class":55},[45,57408,57409,57411,57413,57415,57417],{"class":47,"line":1830},[45,57410,54871],{"class":79},[45,57412,51537],{"class":55},[45,57414,1690],{"class":79},[45,57416,51592],{"class":51},[45,57418,1442],{"class":55},[45,57420,57421,57423,57425,57427,57429,57431],{"class":47,"line":1844},[45,57422,54806],{"class":79},[45,57424,51537],{"class":55},[45,57426,933],{"class":79},[45,57428,51592],{"class":51},[45,57430,51656],{"class":79},[45,57432,1442],{"class":55},[45,57434,57435,57437,57439,57441],{"class":47,"line":1849},[45,57436,55109],{"class":79},[45,57438,51537],{"class":55},[45,57440,51577],{"class":79},[45,57442,1442],{"class":55},[45,57444,57445,57447,57449,57451,57453],{"class":47,"line":1878},[45,57446,55022],{"class":79},[45,57448,51537],{"class":55},[45,57450,1102],{"class":79},[45,57452,51592],{"class":51},[45,57454,1442],{"class":55},[45,57456,57457,57460,57462,57464,57466],{"class":47,"line":1883},[45,57458,57459],{"class":79},"      line-height",[45,57461,51537],{"class":55},[45,57463,678],{"class":79},[45,57465,51592],{"class":51},[45,57467,1442],{"class":55},[45,57469,57470],{"class":47,"line":1900},[45,57471,2337],{"class":55},[45,57473,57474],{"class":47,"line":1905},[45,57475,2550],{"emptyLinePlaceholder":207},[45,57477,57478,57481],{"class":47,"line":1910},[45,57479,57480],{"class":69},"    .qs",[45,57482,15721],{"class":55},[45,57484,57485],{"class":47,"line":1915},[45,57486,2550],{"emptyLinePlaceholder":207},[45,57488,57489,57491,57493,57496,57498],{"class":47,"line":1929},[45,57490,54871],{"class":79},[45,57492,51537],{"class":55},[45,57494,57495],{"class":79},"450",[45,57497,51592],{"class":51},[45,57499,1442],{"class":55},[45,57501,57502,57504,57506,57508,57510],{"class":47,"line":1934},[45,57503,54885],{"class":79},[45,57505,51537],{"class":55},[45,57507,678],{"class":79},[45,57509,51592],{"class":51},[45,57511,1442],{"class":55},[45,57513,57514,57517,57519,57522],{"class":47,"line":2727},[45,57515,57516],{"class":79},"      color",[45,57518,51537],{"class":55},[45,57520,57521],{"class":79},"red",[45,57523,1442],{"class":55},[45,57525,57526],{"class":47,"line":2741},[45,57527,2550],{"emptyLinePlaceholder":207},[45,57529,57530],{"class":47,"line":2749},[45,57531,2337],{"class":55},[45,57533,57534],{"class":47,"line":2754},[45,57535,2550],{"emptyLinePlaceholder":207},[45,57537,57538,57541],{"class":47,"line":2760},[45,57539,57540],{"class":69},"    .btns",[45,57542,15721],{"class":55},[45,57544,57545,57547,57549,57551],{"class":47,"line":2766},[45,57546,57386],{"class":79},[45,57548,51537],{"class":55},[45,57550,51692],{"class":79},[45,57552,1442],{"class":55},[45,57554,57555],{"class":47,"line":2771},[45,57556,2337],{"class":55},[45,57558,57559],{"class":47,"line":8098},[45,57560,2550],{"emptyLinePlaceholder":207},[45,57562,57563,57565,57568],{"class":47,"line":8122},[45,57564,57540],{"class":69},[45,57566,57567],{"class":51400}," button",[45,57569,15721],{"class":55},[45,57571,57572,57574,57576,57578,57580],{"class":47,"line":8127},[45,57573,54871],{"class":79},[45,57575,51537],{"class":55},[45,57577,1094],{"class":79},[45,57579,51592],{"class":51},[45,57581,1442],{"class":55},[45,57583,57584,57586,57588,57590,57592],{"class":47,"line":8133},[45,57585,54885],{"class":79},[45,57587,51537],{"class":55},[45,57589,550],{"class":79},[45,57591,51592],{"class":51},[45,57593,1442],{"class":55},[45,57595,57596,57598,57600,57602,57605,57607],{"class":47,"line":8160},[45,57597,54806],{"class":79},[45,57599,51537],{"class":55},[45,57601,469],{"class":79},[45,57603,57604],{"class":79}," 50",[45,57606,51592],{"class":51},[45,57608,1442],{"class":55},[45,57610,57611],{"class":47,"line":8165},[45,57612,2337],{"class":55},[45,57614,57615,57617,57619],{"class":47,"line":8171},[45,57616,52517],{"class":55},[45,57618,196],{"class":51400},[45,57620,51407],{"class":55},[45,57622,57623,57625,57627],{"class":47,"line":8183},[45,57624,51885],{"class":55},[45,57626,51434],{"class":51400},[45,57628,51407],{"class":55},[45,57630,57631],{"class":47,"line":8195},[45,57632,2550],{"emptyLinePlaceholder":207},[45,57634,57635,57637,57639],{"class":47,"line":8207},[45,57636,1187],{"class":55},[45,57638,51900],{"class":51400},[45,57640,51407],{"class":55},[45,57642,57643,57645,57647,57650,57652],{"class":47,"line":9866},[45,57644,52244],{"class":55},[45,57646,15],{"class":51400},[45,57648,57649],{"class":55},">随机点名\u003C\u002F",[45,57651,15],{"class":51400},[45,57653,51407],{"class":55},[45,57655,57656,57658,57660,57662,57664,57666],{"class":47,"line":9890},[45,57657,52244],{"class":55},[45,57659,51711],{"class":51400},[45,57661,53586],{"class":69},[45,57663,59],{"class":55},[45,57665,53591],{"class":62},[45,57667,51407],{"class":55},[45,57669,57670,57672,57674,57677,57679],{"class":47,"line":9913},[45,57671,51441],{"class":55},[45,57673,45],{"class":51400},[45,57675,57676],{"class":55},">名字是：\u003C\u002F",[45,57678,45],{"class":51400},[45,57680,51407],{"class":55},[45,57682,57683,57685,57687,57689,57691,57694,57697,57699],{"class":47,"line":9937},[45,57684,51441],{"class":55},[45,57686,51711],{"class":51400},[45,57688,53586],{"class":69},[45,57690,59],{"class":55},[45,57692,57693],{"class":62},"\"qs\"",[45,57695,57696],{"class":55},">这里显示姓名\u003C\u002F",[45,57698,51711],{"class":51400},[45,57700,51407],{"class":55},[45,57702,57703,57705,57707],{"class":47,"line":9942},[45,57704,52517],{"class":55},[45,57706,51711],{"class":51400},[45,57708,51407],{"class":55},[45,57710,57711,57713,57715,57717,57719,57722],{"class":47,"line":9947},[45,57712,52244],{"class":55},[45,57714,51711],{"class":51400},[45,57716,53586],{"class":69},[45,57718,59],{"class":55},[45,57720,57721],{"class":62},"\"btns\"",[45,57723,51407],{"class":55},[45,57725,57726,57728,57730,57732,57734,57737,57740,57742],{"class":47,"line":9952},[45,57727,51441],{"class":55},[45,57729,53987],{"class":51400},[45,57731,53586],{"class":69},[45,57733,59],{"class":55},[45,57735,57736],{"class":62},"\"start\"",[45,57738,57739],{"class":55},">开始\u003C\u002F",[45,57741,53987],{"class":51400},[45,57743,51407],{"class":55},[45,57745,57746,57748,57750,57752,57754,57757,57760,57762],{"class":47,"line":9961},[45,57747,51441],{"class":55},[45,57749,53987],{"class":51400},[45,57751,53586],{"class":69},[45,57753,59],{"class":55},[45,57755,57756],{"class":62},"\"end\"",[45,57758,57759],{"class":55},">结束\u003C\u002F",[45,57761,53987],{"class":51400},[45,57763,51407],{"class":55},[45,57765,57766,57768,57770],{"class":47,"line":9966},[45,57767,52517],{"class":55},[45,57769,51711],{"class":51400},[45,57771,51407],{"class":55},[45,57773,57774],{"class":47,"line":9972},[45,57775,2550],{"emptyLinePlaceholder":207},[45,57777,57778,57780,57782],{"class":47,"line":9993},[45,57779,52244],{"class":55},[45,57781,51913],{"class":51400},[45,57783,51407],{"class":55},[45,57785,57786],{"class":47,"line":9999},[45,57787,57788],{"class":337},"    \u002F\u002F 数据数组\n",[45,57790,57791,57793,57796,57798,57800,57803,57805,57808,57810,57813,57815,57818,57820,57823],{"class":47,"line":10013},[45,57792,11370],{"class":51},[45,57794,57795],{"class":79}," arr",[45,57797,13713],{"class":51},[45,57799,52326],{"class":55},[45,57801,57802],{"class":62},"'马超'",[45,57804,12584],{"class":55},[45,57806,57807],{"class":62},"'黄忠'",[45,57809,12584],{"class":55},[45,57811,57812],{"class":62},"'赵云'",[45,57814,12584],{"class":55},[45,57816,57817],{"class":62},"'关羽'",[45,57819,12584],{"class":55},[45,57821,57822],{"class":62},"'张飞'",[45,57824,33346],{"class":55},[45,57826,57827,57829,57832,57834,57836,57838,57840,57843],{"class":47,"line":10019},[45,57828,11370],{"class":51},[45,57830,57831],{"class":79}," qs",[45,57833,13713],{"class":51},[45,57835,54496],{"class":55},[45,57837,54499],{"class":69},[45,57839,282],{"class":55},[45,57841,57842],{"class":62},"'.qs'",[45,57844,139],{"class":55},[45,57846,57847],{"class":47,"line":10046},[45,57848,57849],{"class":337},"    \u002F\u002F 1.业务1.开始按钮模块\n",[45,57851,57852,57854,57856,57858,57860,57862,57864,57867],{"class":47,"line":10055},[45,57853,11370],{"class":51},[45,57855,4334],{"class":79},[45,57857,13713],{"class":51},[45,57859,54496],{"class":55},[45,57861,54499],{"class":69},[45,57863,282],{"class":55},[45,57865,57866],{"class":62},"'.start'",[45,57868,139],{"class":55},[45,57870,57871],{"class":47,"line":10061},[45,57872,57873],{"class":337},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[45,57875,57876,57878,57881,57883],{"class":47,"line":10069},[45,57877,52319],{"class":51},[45,57879,57880],{"class":55}," timerId ",[45,57882,59],{"class":51},[45,57884,47433],{"class":79},[45,57886,57887],{"class":47,"line":10074},[45,57888,57889],{"class":337},"    \u002F\u002F 随机号要全局变量\n",[45,57891,57892,57894,57897,57899],{"class":47,"line":16753},[45,57893,52319],{"class":51},[45,57895,57896],{"class":55}," random ",[45,57898,59],{"class":51},[45,57900,47433],{"class":79},[45,57902,57903],{"class":47,"line":16759},[45,57904,57905],{"class":337},"    \u002F\u002F 1.1 添加点击事件\n",[45,57907,57908,57911,57914,57916,57919,57921,57923],{"class":47,"line":16782},[45,57909,57910],{"class":55},"    start.",[45,57912,57913],{"class":69},"addEventListener",[45,57915,282],{"class":55},[45,57917,57918],{"class":62},"'click'",[45,57920,12584],{"class":55},[45,57922,54549],{"class":51},[45,57924,54552],{"class":55},[45,57926,57927,57930,57932,57934,57936,57938],{"class":47,"line":16788},[45,57928,57929],{"class":55},"      timerId ",[45,57931,59],{"class":51},[45,57933,54544],{"class":69},[45,57935,282],{"class":55},[45,57937,54549],{"class":51},[45,57939,54552],{"class":55},[45,57941,57942],{"class":47,"line":16811},[45,57943,57944],{"class":337},"        \u002F\u002F 随机数\n",[45,57946,57947,57950,57952,57955,57958,57961,57963,57965,57967,57969],{"class":47,"line":16825},[45,57948,57949],{"class":55},"        random ",[45,57951,59],{"class":51},[45,57953,57954],{"class":69}," parseInt",[45,57956,57957],{"class":55},"(Math.",[45,57959,57960],{"class":69},"random",[45,57962,13199],{"class":55},[45,57964,732],{"class":51},[45,57966,52065],{"class":55},[45,57968,52068],{"class":79},[45,57970,139],{"class":55},[45,57972,57973,57976,57978],{"class":47,"line":16845},[45,57974,57975],{"class":55},"        qs.innerHTML ",[45,57977,59],{"class":51},[45,57979,57980],{"class":55}," arr[random]\n",[45,57982,57983,57986,57988],{"class":47,"line":16851},[45,57984,57985],{"class":55},"      }, ",[45,57987,550],{"class":79},[45,57989,139],{"class":55},[45,57991,57992],{"class":47,"line":16862},[45,57993,57994],{"class":337},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[45,57996,57997,57999,58002,58004,58007,58009],{"class":47,"line":16885},[45,57998,54580],{"class":51},[45,58000,58001],{"class":55}," (arr.",[45,58003,52068],{"class":79},[45,58005,58006],{"class":51}," ===",[45,58008,136],{"class":79},[45,58010,12591],{"class":55},[45,58012,58013],{"class":47,"line":16907},[45,58014,58015],{"class":337},"        \u002F\u002F start.disabled = true\n",[45,58017,58018],{"class":47,"line":16912},[45,58019,58020],{"class":337},"        \u002F\u002F end.disabled = true\n",[45,58022,58023],{"class":47,"line":16918},[45,58024,58025],{"class":337},"        \u002F\u002F 可以合起来写\n",[45,58027,58028,58031,58033,58036,58038],{"class":47,"line":16932},[45,58029,58030],{"class":55},"        start.disabled ",[45,58032,59],{"class":51},[45,58034,58035],{"class":55}," end.disabled ",[45,58037,59],{"class":51},[45,58039,58040],{"class":79}," true\n",[45,58042,58043],{"class":47,"line":16945},[45,58044,52498],{"class":55},[45,58046,58047],{"class":47,"line":16950},[45,58048,33561],{"class":55},[45,58050,58051],{"class":47,"line":16964},[45,58052,58053],{"class":337},"    \u002F\u002F 1.2 关闭按钮模块\n",[45,58055,58056,58058,58060,58062,58064,58066,58068,58071],{"class":47,"line":16969},[45,58057,11370],{"class":51},[45,58059,4350],{"class":79},[45,58061,13713],{"class":51},[45,58063,54496],{"class":55},[45,58065,54499],{"class":69},[45,58067,282],{"class":55},[45,58069,58070],{"class":62},"'.end'",[45,58072,139],{"class":55},[45,58074,58075,58078,58080,58082,58084,58086,58088],{"class":47,"line":16975},[45,58076,58077],{"class":55},"    end.",[45,58079,57913],{"class":69},[45,58081,282],{"class":55},[45,58083,57918],{"class":62},[45,58085,12584],{"class":55},[45,58087,54549],{"class":51},[45,58089,54552],{"class":55},[45,58091,58092,58095],{"class":47,"line":16980},[45,58093,58094],{"class":69},"      clearInterval",[45,58096,58097],{"class":55},"(timerId)\n",[45,58099,58100],{"class":47,"line":16994},[45,58101,58102],{"class":337},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[45,58104,58105,58108,58111,58114,58116],{"class":47,"line":16999},[45,58106,58107],{"class":55},"      arr.",[45,58109,58110],{"class":69},"splice",[45,58112,58113],{"class":55},"(random, ",[45,58115,495],{"class":79},[45,58117,139],{"class":55},[45,58119,58120],{"class":47,"line":17004},[45,58121,33561],{"class":55},[45,58123,58124],{"class":47,"line":17018},[45,58125,2550],{"emptyLinePlaceholder":207},[45,58127,58128,58130,58132],{"class":47,"line":17030},[45,58129,52517],{"class":55},[45,58131,51913],{"class":51400},[45,58133,51407],{"class":55},[45,58135,58136,58138,58140],{"class":47,"line":17035},[45,58137,51885],{"class":55},[45,58139,51900],{"class":51400},[45,58141,51407],{"class":55},[45,58143,58144],{"class":47,"line":17048},[45,58145,2550],{"emptyLinePlaceholder":207},[45,58147,58148,58150,58152],{"class":47,"line":17053},[45,58149,51885],{"class":55},[45,58151,50735],{"class":51400},[45,58153,51407],{"class":55},[20,58155,58156],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[249,58158,58160],{"id":58159},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[36,58162,58164],{"className":50733,"code":58163,"language":50735,"meta":25,"style":25},"\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",[42,58165,58166,58176,58190,58194,58202,58216,58236,58248,58256,58260,58268,58280,58288,58307,58324,58340,58350,58354,58362,58370,58374],{"__ignoreMap":25},[45,58167,58168,58170,58172,58174],{"class":47,"line":48},[45,58169,51397],{"class":55},[45,58171,51401],{"class":51400},[45,58173,51404],{"class":69},[45,58175,51407],{"class":55},[45,58177,58178,58180,58182,58184,58186,58188],{"class":47,"line":66},[45,58179,1187],{"class":55},[45,58181,50735],{"class":51400},[45,58183,51416],{"class":69},[45,58185,59],{"class":55},[45,58187,51421],{"class":62},[45,58189,51407],{"class":55},[45,58191,58192],{"class":47,"line":1331},[45,58193,2550],{"emptyLinePlaceholder":207},[45,58195,58196,58198,58200],{"class":47,"line":1346},[45,58197,1187],{"class":55},[45,58199,51434],{"class":51400},[45,58201,51407],{"class":55},[45,58203,58204,58206,58208,58210,58212,58214],{"class":47,"line":1352},[45,58205,52244],{"class":55},[45,58207,51444],{"class":51400},[45,58209,51447],{"class":69},[45,58211,59],{"class":55},[45,58213,51452],{"class":62},[45,58215,51407],{"class":55},[45,58217,58218,58220,58222,58224,58226,58228,58230,58232,58234],{"class":47,"line":1366},[45,58219,52244],{"class":55},[45,58221,51444],{"class":51400},[45,58223,15069],{"class":69},[45,58225,59],{"class":55},[45,58227,51491],{"class":62},[45,58229,51471],{"class":69},[45,58231,59],{"class":55},[45,58233,51498],{"class":62},[45,58235,51407],{"class":55},[45,58237,58238,58240,58242,58244,58246],{"class":47,"line":1372},[45,58239,52244],{"class":55},[45,58241,51507],{"class":51400},[45,58243,51510],{"class":55},[45,58245,51507],{"class":51400},[45,58247,51407],{"class":55},[45,58249,58250,58252,58254],{"class":47,"line":1463},[45,58251,51885],{"class":55},[45,58253,51434],{"class":51400},[45,58255,51407],{"class":55},[45,58257,58258],{"class":47,"line":1469},[45,58259,2550],{"emptyLinePlaceholder":207},[45,58261,58262,58264,58266],{"class":47,"line":1481},[45,58263,1187],{"class":55},[45,58265,51900],{"class":51400},[45,58267,51407],{"class":55},[45,58269,58270,58272,58274,58276,58278],{"class":47,"line":1763},[45,58271,52244],{"class":55},[45,58273,53987],{"class":51400},[45,58275,53993],{"class":55},[45,58277,53987],{"class":51400},[45,58279,51407],{"class":55},[45,58281,58282,58284,58286],{"class":47,"line":1768},[45,58283,52244],{"class":55},[45,58285,51913],{"class":51400},[45,58287,51407],{"class":55},[45,58289,58290,58292,58294,58296,58298,58300,58302,58305],{"class":47,"line":1774},[45,58291,11370],{"class":51},[45,58293,54491],{"class":79},[45,58295,13713],{"class":51},[45,58297,54496],{"class":55},[45,58299,54499],{"class":69},[45,58301,282],{"class":55},[45,58303,58304],{"class":62},"'button'",[45,58306,139],{"class":55},[45,58308,58309,58312,58314,58316,58318,58320,58322],{"class":47,"line":1779},[45,58310,58311],{"class":55},"    btn.",[45,58313,57913],{"class":69},[45,58315,282],{"class":55},[45,58317,57918],{"class":62},[45,58319,12584],{"class":55},[45,58321,54549],{"class":51},[45,58323,54552],{"class":55},[45,58325,58326,58329,58331,58333,58336,58338],{"class":47,"line":1793},[45,58327,58328],{"class":51},"      const",[45,58330,2390],{"class":79},[45,58332,13713],{"class":51},[45,58334,58335],{"class":55}," Math.",[45,58337,57960],{"class":69},[45,58339,2126],{"class":55},[45,58341,58342,58345,58348],{"class":47,"line":1798},[45,58343,58344],{"class":55},"      console.",[45,58346,58347],{"class":69},"log",[45,58349,294],{"class":55},[45,58351,58352],{"class":47,"line":1804},[45,58353,33561],{"class":55},[45,58355,58356,58358,58360],{"class":47,"line":1825},[45,58357,52517],{"class":55},[45,58359,51913],{"class":51400},[45,58361,51407],{"class":55},[45,58363,58364,58366,58368],{"class":47,"line":1830},[45,58365,51885],{"class":55},[45,58367,51900],{"class":51400},[45,58369,51407],{"class":55},[45,58371,58372],{"class":47,"line":1844},[45,58373,2550],{"emptyLinePlaceholder":207},[45,58375,58376,58378,58380],{"class":47,"line":1849},[45,58377,51885],{"class":55},[45,58379,50735],{"class":51400},[45,58381,51407],{"class":55},[20,58383,58384],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[20,58386,58387],{},"常量不可以重新赋值",[20,58389,58390],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[36,58392,58394],{"className":50733,"code":58393,"language":50735,"meta":25,"style":25},"\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",[42,58395,58396,58406,58420,58424,58432,58446,58466,58478,58486,58490,58498,58510,58518,58529,58547,58563,58577,58585,58589,58597,58605,58609],{"__ignoreMap":25},[45,58397,58398,58400,58402,58404],{"class":47,"line":48},[45,58399,51397],{"class":55},[45,58401,51401],{"class":51400},[45,58403,51404],{"class":69},[45,58405,51407],{"class":55},[45,58407,58408,58410,58412,58414,58416,58418],{"class":47,"line":66},[45,58409,1187],{"class":55},[45,58411,50735],{"class":51400},[45,58413,51416],{"class":69},[45,58415,59],{"class":55},[45,58417,51421],{"class":62},[45,58419,51407],{"class":55},[45,58421,58422],{"class":47,"line":1331},[45,58423,2550],{"emptyLinePlaceholder":207},[45,58425,58426,58428,58430],{"class":47,"line":1346},[45,58427,1187],{"class":55},[45,58429,51434],{"class":51400},[45,58431,51407],{"class":55},[45,58433,58434,58436,58438,58440,58442,58444],{"class":47,"line":1352},[45,58435,52244],{"class":55},[45,58437,51444],{"class":51400},[45,58439,51447],{"class":69},[45,58441,59],{"class":55},[45,58443,51452],{"class":62},[45,58445,51407],{"class":55},[45,58447,58448,58450,58452,58454,58456,58458,58460,58462,58464],{"class":47,"line":1366},[45,58449,52244],{"class":55},[45,58451,51444],{"class":51400},[45,58453,15069],{"class":69},[45,58455,59],{"class":55},[45,58457,51491],{"class":62},[45,58459,51471],{"class":69},[45,58461,59],{"class":55},[45,58463,51498],{"class":62},[45,58465,51407],{"class":55},[45,58467,58468,58470,58472,58474,58476],{"class":47,"line":1372},[45,58469,52244],{"class":55},[45,58471,51507],{"class":51400},[45,58473,51510],{"class":55},[45,58475,51507],{"class":51400},[45,58477,51407],{"class":55},[45,58479,58480,58482,58484],{"class":47,"line":1463},[45,58481,51885],{"class":55},[45,58483,51434],{"class":51400},[45,58485,51407],{"class":55},[45,58487,58488],{"class":47,"line":1469},[45,58489,2550],{"emptyLinePlaceholder":207},[45,58491,58492,58494,58496],{"class":47,"line":1481},[45,58493,1187],{"class":55},[45,58495,51900],{"class":51400},[45,58497,51407],{"class":55},[45,58499,58500,58502,58504,58506,58508],{"class":47,"line":1763},[45,58501,52244],{"class":55},[45,58503,53987],{"class":51400},[45,58505,53993],{"class":55},[45,58507,53987],{"class":51400},[45,58509,51407],{"class":55},[45,58511,58512,58514,58516],{"class":47,"line":1768},[45,58513,52244],{"class":55},[45,58515,51913],{"class":51400},[45,58517,51407],{"class":55},[45,58519,58520,58522,58524,58526],{"class":47,"line":1774},[45,58521,11370],{"class":51},[45,58523,2390],{"class":79},[45,58525,13713],{"class":51},[45,58527,58528],{"class":79}," 10\n",[45,58530,58531,58533,58535,58537,58539,58541,58543,58545],{"class":47,"line":1779},[45,58532,11370],{"class":51},[45,58534,54491],{"class":79},[45,58536,13713],{"class":51},[45,58538,54496],{"class":55},[45,58540,54499],{"class":69},[45,58542,282],{"class":55},[45,58544,58304],{"class":62},[45,58546,139],{"class":55},[45,58548,58549,58551,58553,58555,58557,58559,58561],{"class":47,"line":1793},[45,58550,58311],{"class":55},[45,58552,57913],{"class":69},[45,58554,282],{"class":55},[45,58556,57918],{"class":62},[45,58558,12584],{"class":55},[45,58560,54549],{"class":51},[45,58562,54552],{"class":55},[45,58564,58565,58567,58569,58571,58573,58575],{"class":47,"line":1798},[45,58566,58328],{"class":51},[45,58568,2390],{"class":79},[45,58570,13713],{"class":51},[45,58572,58335],{"class":55},[45,58574,57960],{"class":69},[45,58576,2126],{"class":55},[45,58578,58579,58581,58583],{"class":47,"line":1804},[45,58580,58344],{"class":55},[45,58582,58347],{"class":69},[45,58584,294],{"class":55},[45,58586,58587],{"class":47,"line":1825},[45,58588,33561],{"class":55},[45,58590,58591,58593,58595],{"class":47,"line":1830},[45,58592,52517],{"class":55},[45,58594,51913],{"class":51400},[45,58596,51407],{"class":55},[45,58598,58599,58601,58603],{"class":47,"line":1844},[45,58600,51885],{"class":55},[45,58602,51900],{"class":51400},[45,58604,51407],{"class":55},[45,58606,58607],{"class":47,"line":1849},[45,58608,2550],{"emptyLinePlaceholder":207},[45,58610,58611,58613,58615],{"class":47,"line":1878},[45,58612,51885],{"class":55},[45,58614,50735],{"class":51400},[45,58616,51407],{"class":55},[20,58618,58619],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[36,58621,58623],{"className":50733,"code":58622,"language":50735,"meta":25,"style":25},"\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",[42,58624,58625,58635,58649,58653,58661,58675,58695,58707,58715,58719,58727,58739,58747,58757,58775,58791,58804,58812,58816,58824,58832,58836],{"__ignoreMap":25},[45,58626,58627,58629,58631,58633],{"class":47,"line":48},[45,58628,51397],{"class":55},[45,58630,51401],{"class":51400},[45,58632,51404],{"class":69},[45,58634,51407],{"class":55},[45,58636,58637,58639,58641,58643,58645,58647],{"class":47,"line":66},[45,58638,1187],{"class":55},[45,58640,50735],{"class":51400},[45,58642,51416],{"class":69},[45,58644,59],{"class":55},[45,58646,51421],{"class":62},[45,58648,51407],{"class":55},[45,58650,58651],{"class":47,"line":1331},[45,58652,2550],{"emptyLinePlaceholder":207},[45,58654,58655,58657,58659],{"class":47,"line":1346},[45,58656,1187],{"class":55},[45,58658,51434],{"class":51400},[45,58660,51407],{"class":55},[45,58662,58663,58665,58667,58669,58671,58673],{"class":47,"line":1352},[45,58664,52244],{"class":55},[45,58666,51444],{"class":51400},[45,58668,51447],{"class":69},[45,58670,59],{"class":55},[45,58672,51452],{"class":62},[45,58674,51407],{"class":55},[45,58676,58677,58679,58681,58683,58685,58687,58689,58691,58693],{"class":47,"line":1366},[45,58678,52244],{"class":55},[45,58680,51444],{"class":51400},[45,58682,15069],{"class":69},[45,58684,59],{"class":55},[45,58686,51491],{"class":62},[45,58688,51471],{"class":69},[45,58690,59],{"class":55},[45,58692,51498],{"class":62},[45,58694,51407],{"class":55},[45,58696,58697,58699,58701,58703,58705],{"class":47,"line":1372},[45,58698,52244],{"class":55},[45,58700,51507],{"class":51400},[45,58702,51510],{"class":55},[45,58704,51507],{"class":51400},[45,58706,51407],{"class":55},[45,58708,58709,58711,58713],{"class":47,"line":1463},[45,58710,51885],{"class":55},[45,58712,51434],{"class":51400},[45,58714,51407],{"class":55},[45,58716,58717],{"class":47,"line":1469},[45,58718,2550],{"emptyLinePlaceholder":207},[45,58720,58721,58723,58725],{"class":47,"line":1481},[45,58722,1187],{"class":55},[45,58724,51900],{"class":51400},[45,58726,51407],{"class":55},[45,58728,58729,58731,58733,58735,58737],{"class":47,"line":1763},[45,58730,52244],{"class":55},[45,58732,53987],{"class":51400},[45,58734,53993],{"class":55},[45,58736,53987],{"class":51400},[45,58738,51407],{"class":55},[45,58740,58741,58743,58745],{"class":47,"line":1768},[45,58742,52244],{"class":55},[45,58744,51913],{"class":51400},[45,58746,51407],{"class":55},[45,58748,58749,58751,58753,58755],{"class":47,"line":1774},[45,58750,11370],{"class":51},[45,58752,2390],{"class":79},[45,58754,13713],{"class":51},[45,58756,58528],{"class":79},[45,58758,58759,58761,58763,58765,58767,58769,58771,58773],{"class":47,"line":1779},[45,58760,11370],{"class":51},[45,58762,54491],{"class":79},[45,58764,13713],{"class":51},[45,58766,54496],{"class":55},[45,58768,54499],{"class":69},[45,58770,282],{"class":55},[45,58772,58304],{"class":62},[45,58774,139],{"class":55},[45,58776,58777,58779,58781,58783,58785,58787,58789],{"class":47,"line":1793},[45,58778,58311],{"class":55},[45,58780,57913],{"class":69},[45,58782,282],{"class":55},[45,58784,57918],{"class":62},[45,58786,12584],{"class":55},[45,58788,54549],{"class":51},[45,58790,54552],{"class":55},[45,58792,58793,58796,58798,58800,58802],{"class":47,"line":1798},[45,58794,58795],{"class":55},"      num ",[45,58797,59],{"class":51},[45,58799,58335],{"class":55},[45,58801,57960],{"class":69},[45,58803,2126],{"class":55},[45,58805,58806,58808,58810],{"class":47,"line":1804},[45,58807,58344],{"class":55},[45,58809,58347],{"class":69},[45,58811,294],{"class":55},[45,58813,58814],{"class":47,"line":1825},[45,58815,33561],{"class":55},[45,58817,58818,58820,58822],{"class":47,"line":1830},[45,58819,52517],{"class":55},[45,58821,51913],{"class":51400},[45,58823,51407],{"class":55},[45,58825,58826,58828,58830],{"class":47,"line":1844},[45,58827,51885],{"class":55},[45,58829,51900],{"class":51400},[45,58831,51407],{"class":55},[45,58833,58834],{"class":47,"line":1849},[45,58835,2550],{"emptyLinePlaceholder":207},[45,58837,58838,58840,58842],{"class":47,"line":1878},[45,58839,51885],{"class":55},[45,58841,50735],{"class":51400},[45,58843,51407],{"class":55},[20,58845,58846],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[249,58848,58850],{"id":58849},"_324-事件监听版本","3.2.4 事件监听版本",[20,58852,58853],{},[23,58854],{"alt":25,"src":58855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[20,58857,58858],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[20,58860,58861],{},"这种方式会覆盖前边的事件监听:",[36,58863,58865],{"className":50733,"code":58864,"language":50735,"meta":25,"style":25},"\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",[42,58866,58867,58877,58891,58895,58903,58917,58937,58949,58957,58961,58969,58981,58989,59007,59021,59032,59036,59048,59058,59062,59070,59078,59082],{"__ignoreMap":25},[45,58868,58869,58871,58873,58875],{"class":47,"line":48},[45,58870,51397],{"class":55},[45,58872,51401],{"class":51400},[45,58874,51404],{"class":69},[45,58876,51407],{"class":55},[45,58878,58879,58881,58883,58885,58887,58889],{"class":47,"line":66},[45,58880,1187],{"class":55},[45,58882,50735],{"class":51400},[45,58884,51416],{"class":69},[45,58886,59],{"class":55},[45,58888,51421],{"class":62},[45,58890,51407],{"class":55},[45,58892,58893],{"class":47,"line":1331},[45,58894,2550],{"emptyLinePlaceholder":207},[45,58896,58897,58899,58901],{"class":47,"line":1346},[45,58898,1187],{"class":55},[45,58900,51434],{"class":51400},[45,58902,51407],{"class":55},[45,58904,58905,58907,58909,58911,58913,58915],{"class":47,"line":1352},[45,58906,52244],{"class":55},[45,58908,51444],{"class":51400},[45,58910,51447],{"class":69},[45,58912,59],{"class":55},[45,58914,51452],{"class":62},[45,58916,51407],{"class":55},[45,58918,58919,58921,58923,58925,58927,58929,58931,58933,58935],{"class":47,"line":1366},[45,58920,52244],{"class":55},[45,58922,51444],{"class":51400},[45,58924,15069],{"class":69},[45,58926,59],{"class":55},[45,58928,51491],{"class":62},[45,58930,51471],{"class":69},[45,58932,59],{"class":55},[45,58934,51498],{"class":62},[45,58936,51407],{"class":55},[45,58938,58939,58941,58943,58945,58947],{"class":47,"line":1372},[45,58940,52244],{"class":55},[45,58942,51507],{"class":51400},[45,58944,51510],{"class":55},[45,58946,51507],{"class":51400},[45,58948,51407],{"class":55},[45,58950,58951,58953,58955],{"class":47,"line":1463},[45,58952,51885],{"class":55},[45,58954,51434],{"class":51400},[45,58956,51407],{"class":55},[45,58958,58959],{"class":47,"line":1469},[45,58960,2550],{"emptyLinePlaceholder":207},[45,58962,58963,58965,58967],{"class":47,"line":1481},[45,58964,1187],{"class":55},[45,58966,51900],{"class":51400},[45,58968,51407],{"class":55},[45,58970,58971,58973,58975,58977,58979],{"class":47,"line":1763},[45,58972,52244],{"class":55},[45,58974,53987],{"class":51400},[45,58976,53993],{"class":55},[45,58978,53987],{"class":51400},[45,58980,51407],{"class":55},[45,58982,58983,58985,58987],{"class":47,"line":1768},[45,58984,52244],{"class":55},[45,58986,51913],{"class":51400},[45,58988,51407],{"class":55},[45,58990,58991,58993,58995,58997,58999,59001,59003,59005],{"class":47,"line":1774},[45,58992,11370],{"class":51},[45,58994,54491],{"class":79},[45,58996,13713],{"class":51},[45,58998,54496],{"class":55},[45,59000,54499],{"class":69},[45,59002,282],{"class":55},[45,59004,58304],{"class":62},[45,59006,139],{"class":55},[45,59008,59009,59011,59014,59016,59019],{"class":47,"line":1779},[45,59010,58311],{"class":55},[45,59012,59013],{"class":69},"onclick",[45,59015,13713],{"class":51},[45,59017,59018],{"class":51}," function",[45,59020,54552],{"class":55},[45,59022,59023,59026,59028,59030],{"class":47,"line":1793},[45,59024,59025],{"class":69},"      alert",[45,59027,282],{"class":55},[45,59029,749],{"class":79},[45,59031,139],{"class":55},[45,59033,59034],{"class":47,"line":1798},[45,59035,2337],{"class":55},[45,59037,59038,59040,59042,59044,59046],{"class":47,"line":1804},[45,59039,58311],{"class":55},[45,59041,59013],{"class":69},[45,59043,13713],{"class":51},[45,59045,59018],{"class":51},[45,59047,54552],{"class":55},[45,59049,59050,59052,59054,59056],{"class":47,"line":1825},[45,59051,59025],{"class":69},[45,59053,282],{"class":55},[45,59055,1027],{"class":79},[45,59057,139],{"class":55},[45,59059,59060],{"class":47,"line":1830},[45,59061,2337],{"class":55},[45,59063,59064,59066,59068],{"class":47,"line":1844},[45,59065,52517],{"class":55},[45,59067,51913],{"class":51400},[45,59069,51407],{"class":55},[45,59071,59072,59074,59076],{"class":47,"line":1849},[45,59073,51885],{"class":55},[45,59075,51900],{"class":51400},[45,59077,51407],{"class":55},[45,59079,59080],{"class":47,"line":1878},[45,59081,2550],{"emptyLinePlaceholder":207},[45,59083,59084,59086,59088],{"class":47,"line":1883},[45,59085,51885],{"class":55},[45,59087,50735],{"class":51400},[45,59089,51407],{"class":55},[20,59091,59092],{},"只要点击就输出结果为22,前边11被覆盖了",[36,59094,59096],{"className":50733,"code":59095,"language":50735,"meta":25,"style":25},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[42,59097,59098,59103,59108,59112,59117,59122],{"__ignoreMap":25},[45,59099,59100],{"class":47,"line":48},[45,59101,59102],{"class":55},"  btn.addEventListener('click', function () {\n",[45,59104,59105],{"class":47,"line":66},[45,59106,59107],{"class":55},"      alert(11)\n",[45,59109,59110],{"class":47,"line":1331},[45,59111,33561],{"class":55},[45,59113,59114],{"class":47,"line":1346},[45,59115,59116],{"class":55},"    btn.addEventListener('click', function () {\n",[45,59118,59119],{"class":47,"line":1352},[45,59120,59121],{"class":55},"      alert(22)\n",[45,59123,59124],{"class":47,"line":1366},[45,59125,33561],{"class":55},[20,59127,59128],{},"点击第一次输出11,第二次点击为22",[249,59130,59132],{"id":59131},"_325-事件类型","3.2.5 事件类型",[20,59134,59135],{},[23,59136],{"alt":25,"src":59137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22147,59139,59141],{"id":59140},"_3251-鼠标事件","3.2.5.1 鼠标事件",[20,59143,59144],{},"补充知识:",[20,59146,59147],{},"轮播图自动播放模块,可以使用",[20,59149,59150],{},"let timerId = setInterval(function () {",[20,59152,59153],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[20,59155,59156],{},"用js方法模拟进行点击事件,click必须加()",[20,59158,59159],{},"next.click()",[20,59161,59162],{},"}, 1000)",[20,59164,59165],{},[23,59166],{"alt":25,"src":59167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[36,59169,59171],{"className":53167,"code":59170,"language":53169,"meta":25,"style":25},"\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",[42,59172,59173,59177,59187,59201,59205,59213,59228,59248,59268,59281,59289,59294,59299,59303,59307,59312,59317,59322,59327,59331,59335,59340,59345,59350,59354,59358,59363,59367,59372,59377,59381,59385,59390,59395,59400,59405,59410,59414,59418,59423,59428,59433,59438,59443,59447,59451,59456,59461,59466,59471,59476,59481,59486,59491,59496,59501,59505,59509,59514,59519,59523,59527,59532,59537,59541,59546,59551,59555,59559,59564,59568,59573,59578,59582,59587,59591,59595,59600,59605,59610,59615,59620,59625,59630,59634,59638,59642,59647,59652,59657,59662,59666,59674,59682,59686,59694,59709,59723,59744,59752,59766,59779,59794,59813,59825,59837,59849,59861,59873,59885,59897,59905,59920,59944,59968,59976,59984,59992,60000,60005,60010,60015,60020,60025,60030,60035,60040,60045,60050,60054,60059,60064,60069,60074,60079,60084,60089,60094,60099,60103,60108,60113,60118,60123,60128,60133,60138,60143,60148,60153,60158,60163,60167,60171,60176,60181,60186,60190,60195,60200,60205,60210,60215,60219,60224,60228,60232,60236,60240,60244,60248,60253,60258,60263,60268,60273,60278,60283,60288,60293,60297,60301,60306,60311,60316,60321,60326,60330,60335,60340,60345,60350,60355,60360,60364,60368,60373,60377,60382,60386,60391,60396,60401,60406,60411,60416,60420,60428,60436,60440],{"__ignoreMap":25},[45,59174,59175],{"class":47,"line":48},[45,59176,2550],{"emptyLinePlaceholder":207},[45,59178,59179,59181,59183,59185],{"class":47,"line":66},[45,59180,51397],{"class":55},[45,59182,51401],{"class":51},[45,59184,51404],{"class":79},[45,59186,51407],{"class":55},[45,59188,59189,59191,59193,59195,59197,59199],{"class":47,"line":1331},[45,59190,1187],{"class":55},[45,59192,50735],{"class":51400},[45,59194,51416],{"class":69},[45,59196,59],{"class":55},[45,59198,51421],{"class":62},[45,59200,51407],{"class":55},[45,59202,59203],{"class":47,"line":1346},[45,59204,2550],{"emptyLinePlaceholder":207},[45,59206,59207,59209,59211],{"class":47,"line":1352},[45,59208,1187],{"class":55},[45,59210,51434],{"class":51400},[45,59212,51407],{"class":55},[45,59214,59215,59217,59219,59221,59223,59225],{"class":47,"line":1366},[45,59216,52244],{"class":55},[45,59218,51444],{"class":51400},[45,59220,51447],{"class":69},[45,59222,59],{"class":55},[45,59224,51452],{"class":62},[45,59226,59227],{"class":55}," \u002F>\n",[45,59229,59230,59232,59234,59236,59238,59240,59242,59244,59246],{"class":47,"line":1372},[45,59231,52244],{"class":55},[45,59233,51444],{"class":51400},[45,59235,51463],{"class":69},[45,59237,59],{"class":55},[45,59239,51468],{"class":62},[45,59241,51471],{"class":69},[45,59243,59],{"class":55},[45,59245,51476],{"class":62},[45,59247,59227],{"class":55},[45,59249,59250,59252,59254,59256,59258,59260,59262,59264,59266],{"class":47,"line":1463},[45,59251,52244],{"class":55},[45,59253,51444],{"class":51400},[45,59255,15069],{"class":69},[45,59257,59],{"class":55},[45,59259,51491],{"class":62},[45,59261,51471],{"class":69},[45,59263,59],{"class":55},[45,59265,51498],{"class":62},[45,59267,59227],{"class":55},[45,59269,59270,59272,59274,59277,59279],{"class":47,"line":1469},[45,59271,52244],{"class":55},[45,59273,51507],{"class":51400},[45,59275,59276],{"class":55},">轮播图点击切换\u003C\u002F",[45,59278,51507],{"class":51400},[45,59280,51407],{"class":55},[45,59282,59283,59285,59287],{"class":47,"line":1481},[45,59284,52244],{"class":55},[45,59286,196],{"class":51400},[45,59288,51407],{"class":55},[45,59290,59291],{"class":47,"line":1763},[45,59292,59293],{"class":55},"    * {\n",[45,59295,59296],{"class":47,"line":1768},[45,59297,59298],{"class":55},"      box-sizing: border-box;\n",[45,59300,59301],{"class":47,"line":1774},[45,59302,2337],{"class":55},[45,59304,59305],{"class":47,"line":1779},[45,59306,2550],{"emptyLinePlaceholder":207},[45,59308,59309],{"class":47,"line":1793},[45,59310,59311],{"class":55},"    .slider {\n",[45,59313,59314],{"class":47,"line":1798},[45,59315,59316],{"class":55},"      width: 560px;\n",[45,59318,59319],{"class":47,"line":1804},[45,59320,59321],{"class":55},"      height: 400px;\n",[45,59323,59324],{"class":47,"line":1825},[45,59325,59326],{"class":55},"      overflow: hidden;\n",[45,59328,59329],{"class":47,"line":1830},[45,59330,2337],{"class":55},[45,59332,59333],{"class":47,"line":1844},[45,59334,2550],{"emptyLinePlaceholder":207},[45,59336,59337],{"class":47,"line":1849},[45,59338,59339],{"class":55},"    .slider-wrapper {\n",[45,59341,59342],{"class":47,"line":1878},[45,59343,59344],{"class":55},"      width: 100%;\n",[45,59346,59347],{"class":47,"line":1883},[45,59348,59349],{"class":55},"      height: 320px;\n",[45,59351,59352],{"class":47,"line":1900},[45,59353,2337],{"class":55},[45,59355,59356],{"class":47,"line":1905},[45,59357,2550],{"emptyLinePlaceholder":207},[45,59359,59360],{"class":47,"line":1910},[45,59361,59362],{"class":55},"    .slider-wrapper img {\n",[45,59364,59365],{"class":47,"line":1915},[45,59366,59344],{"class":55},[45,59368,59369],{"class":47,"line":1929},[45,59370,59371],{"class":55},"      height: 100%;\n",[45,59373,59374],{"class":47,"line":1934},[45,59375,59376],{"class":55},"      display: block;\n",[45,59378,59379],{"class":47,"line":2727},[45,59380,2337],{"class":55},[45,59382,59383],{"class":47,"line":2741},[45,59384,2550],{"emptyLinePlaceholder":207},[45,59386,59387],{"class":47,"line":2749},[45,59388,59389],{"class":55},"    .slider-footer {\n",[45,59391,59392],{"class":47,"line":2754},[45,59393,59394],{"class":55},"      height: 80px;\n",[45,59396,59397],{"class":47,"line":2760},[45,59398,59399],{"class":55},"      background-color: rgb(100, 67, 68);\n",[45,59401,59402],{"class":47,"line":2766},[45,59403,59404],{"class":55},"      padding: 12px 12px 0 12px;\n",[45,59406,59407],{"class":47,"line":2771},[45,59408,59409],{"class":55},"      position: relative;\n",[45,59411,59412],{"class":47,"line":8098},[45,59413,2337],{"class":55},[45,59415,59416],{"class":47,"line":8122},[45,59417,2550],{"emptyLinePlaceholder":207},[45,59419,59420],{"class":47,"line":8127},[45,59421,59422],{"class":55},"    .slider-footer .toggle {\n",[45,59424,59425],{"class":47,"line":8133},[45,59426,59427],{"class":55},"      position: absolute;\n",[45,59429,59430],{"class":47,"line":8160},[45,59431,59432],{"class":55},"      right: 0;\n",[45,59434,59435],{"class":47,"line":8165},[45,59436,59437],{"class":55},"      top: 12px;\n",[45,59439,59440],{"class":47,"line":8171},[45,59441,59442],{"class":55},"      display: flex;\n",[45,59444,59445],{"class":47,"line":8183},[45,59446,2337],{"class":55},[45,59448,59449],{"class":47,"line":8195},[45,59450,2550],{"emptyLinePlaceholder":207},[45,59452,59453],{"class":47,"line":8207},[45,59454,59455],{"class":55},"    .slider-footer .toggle button {\n",[45,59457,59458],{"class":47,"line":9866},[45,59459,59460],{"class":55},"      margin-right: 12px;\n",[45,59462,59463],{"class":47,"line":9890},[45,59464,59465],{"class":55},"      width: 28px;\n",[45,59467,59468],{"class":47,"line":9913},[45,59469,59470],{"class":55},"      height: 28px;\n",[45,59472,59473],{"class":47,"line":9937},[45,59474,59475],{"class":55},"      appearance: none;\n",[45,59477,59478],{"class":47,"line":9942},[45,59479,59480],{"class":55},"      border: none;\n",[45,59482,59483],{"class":47,"line":9947},[45,59484,59485],{"class":55},"      background: rgba(255, 255, 255, 0.1);\n",[45,59487,59488],{"class":47,"line":9952},[45,59489,59490],{"class":55},"      color: #fff;\n",[45,59492,59493],{"class":47,"line":9961},[45,59494,59495],{"class":55},"      border-radius: 4px;\n",[45,59497,59498],{"class":47,"line":9966},[45,59499,59500],{"class":55},"      cursor: pointer;\n",[45,59502,59503],{"class":47,"line":9972},[45,59504,2337],{"class":55},[45,59506,59507],{"class":47,"line":9993},[45,59508,2550],{"emptyLinePlaceholder":207},[45,59510,59511],{"class":47,"line":9999},[45,59512,59513],{"class":55},"    .slider-footer .toggle button:hover {\n",[45,59515,59516],{"class":47,"line":10013},[45,59517,59518],{"class":55},"      background: rgba(255, 255, 255, 0.2);\n",[45,59520,59521],{"class":47,"line":10019},[45,59522,2337],{"class":55},[45,59524,59525],{"class":47,"line":10046},[45,59526,2550],{"emptyLinePlaceholder":207},[45,59528,59529],{"class":47,"line":10055},[45,59530,59531],{"class":55},"    .slider-footer p {\n",[45,59533,59534],{"class":47,"line":10061},[45,59535,59536],{"class":55},"      margin: 0;\n",[45,59538,59539],{"class":47,"line":10069},[45,59540,59490],{"class":55},[45,59542,59543],{"class":47,"line":10074},[45,59544,59545],{"class":55},"      font-size: 18px;\n",[45,59547,59548],{"class":47,"line":16753},[45,59549,59550],{"class":55},"      margin-bottom: 10px;\n",[45,59552,59553],{"class":47,"line":16759},[45,59554,2337],{"class":55},[45,59556,59557],{"class":47,"line":16782},[45,59558,2550],{"emptyLinePlaceholder":207},[45,59560,59561],{"class":47,"line":16788},[45,59562,59563],{"class":55},"    .slider-indicator {\n",[45,59565,59566],{"class":47,"line":16811},[45,59567,59536],{"class":55},[45,59569,59570],{"class":47,"line":16825},[45,59571,59572],{"class":55},"      padding: 0;\n",[45,59574,59575],{"class":47,"line":16845},[45,59576,59577],{"class":55},"      list-style: none;\n",[45,59579,59580],{"class":47,"line":16851},[45,59581,59442],{"class":55},[45,59583,59584],{"class":47,"line":16862},[45,59585,59586],{"class":55},"      align-items: center;\n",[45,59588,59589],{"class":47,"line":16885},[45,59590,2337],{"class":55},[45,59592,59593],{"class":47,"line":16907},[45,59594,2550],{"emptyLinePlaceholder":207},[45,59596,59597],{"class":47,"line":16912},[45,59598,59599],{"class":55},"    .slider-indicator li {\n",[45,59601,59602],{"class":47,"line":16918},[45,59603,59604],{"class":55},"      width: 8px;\n",[45,59606,59607],{"class":47,"line":16932},[45,59608,59609],{"class":55},"      height: 8px;\n",[45,59611,59612],{"class":47,"line":16945},[45,59613,59614],{"class":55},"      margin: 4px;\n",[45,59616,59617],{"class":47,"line":16950},[45,59618,59619],{"class":55},"      border-radius: 50%;\n",[45,59621,59622],{"class":47,"line":16964},[45,59623,59624],{"class":55},"      background: #fff;\n",[45,59626,59627],{"class":47,"line":16969},[45,59628,59629],{"class":55},"      opacity: 0.4;\n",[45,59631,59632],{"class":47,"line":16975},[45,59633,59500],{"class":55},[45,59635,59636],{"class":47,"line":16980},[45,59637,2337],{"class":55},[45,59639,59640],{"class":47,"line":16994},[45,59641,2550],{"emptyLinePlaceholder":207},[45,59643,59644],{"class":47,"line":16999},[45,59645,59646],{"class":55},"    .slider-indicator li.active {\n",[45,59648,59649],{"class":47,"line":17004},[45,59650,59651],{"class":55},"      width: 12px;\n",[45,59653,59654],{"class":47,"line":17018},[45,59655,59656],{"class":55},"      height: 12px;\n",[45,59658,59659],{"class":47,"line":17030},[45,59660,59661],{"class":55},"      opacity: 1;\n",[45,59663,59664],{"class":47,"line":17035},[45,59665,2337],{"class":55},[45,59667,59668,59670,59672],{"class":47,"line":17048},[45,59669,52517],{"class":55},[45,59671,196],{"class":51400},[45,59673,51407],{"class":55},[45,59675,59676,59678,59680],{"class":47,"line":17053},[45,59677,51885],{"class":55},[45,59679,51434],{"class":51400},[45,59681,51407],{"class":55},[45,59683,59684],{"class":47,"line":17058},[45,59685,2550],{"emptyLinePlaceholder":207},[45,59687,59688,59690,59692],{"class":47,"line":17063},[45,59689,1187],{"class":55},[45,59691,51900],{"class":51400},[45,59693,51407],{"class":55},[45,59695,59696,59698,59700,59702,59704,59707],{"class":47,"line":17076},[45,59697,52244],{"class":55},[45,59699,51711],{"class":51400},[45,59701,53586],{"class":69},[45,59703,59],{"class":55},[45,59705,59706],{"class":62},"\"slider\"",[45,59708,51407],{"class":55},[45,59710,59711,59713,59715,59717,59719,59721],{"class":47,"line":17081},[45,59712,51441],{"class":55},[45,59714,51711],{"class":51400},[45,59716,53586],{"class":69},[45,59718,59],{"class":55},[45,59720,55327],{"class":62},[45,59722,51407],{"class":55},[45,59724,59725,59727,59729,59731,59733,59736,59738,59740,59742],{"class":47,"line":32733},[45,59726,55334],{"class":55},[45,59728,23],{"class":51400},[45,59730,55339],{"class":69},[45,59732,59],{"class":55},[45,59734,59735],{"class":62},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[45,59737,55347],{"class":69},[45,59739,59],{"class":55},[45,59741,7802],{"class":62},[45,59743,59227],{"class":55},[45,59745,59746,59748,59750],{"class":47,"line":32739},[45,59747,51876],{"class":55},[45,59749,51711],{"class":51400},[45,59751,51407],{"class":55},[45,59753,59754,59756,59758,59760,59762,59764],{"class":47,"line":32745},[45,59755,51441],{"class":55},[45,59757,51711],{"class":51400},[45,59759,53586],{"class":69},[45,59761,59],{"class":55},[45,59763,55374],{"class":62},[45,59765,51407],{"class":55},[45,59767,59768,59770,59772,59775,59777],{"class":47,"line":32751},[45,59769,55334],{"class":55},[45,59771,20],{"class":51400},[45,59773,59774],{"class":55},">对人类来说会不会太超前了？\u003C\u002F",[45,59776,20],{"class":51400},[45,59778,51407],{"class":55},[45,59780,59781,59783,59785,59787,59789,59792],{"class":47,"line":32757},[45,59782,55334],{"class":55},[45,59784,166],{"class":51400},[45,59786,53586],{"class":69},[45,59788,59],{"class":55},[45,59790,59791],{"class":62},"\"slider-indicator\"",[45,59793,51407],{"class":55},[45,59795,59796,59798,59800,59802,59804,59807,59809,59811],{"class":47,"line":32768},[45,59797,55402],{"class":55},[45,59799,169],{"class":51400},[45,59801,53586],{"class":69},[45,59803,59],{"class":55},[45,59805,59806],{"class":62},"\"active\"",[45,59808,55414],{"class":55},[45,59810,169],{"class":51400},[45,59812,51407],{"class":55},[45,59814,59815,59817,59819,59821,59823],{"class":47,"line":32774},[45,59816,55402],{"class":55},[45,59818,169],{"class":51400},[45,59820,55414],{"class":55},[45,59822,169],{"class":51400},[45,59824,51407],{"class":55},[45,59826,59827,59829,59831,59833,59835],{"class":47,"line":32794},[45,59828,55402],{"class":55},[45,59830,169],{"class":51400},[45,59832,55414],{"class":55},[45,59834,169],{"class":51400},[45,59836,51407],{"class":55},[45,59838,59839,59841,59843,59845,59847],{"class":47,"line":32800},[45,59840,55402],{"class":55},[45,59842,169],{"class":51400},[45,59844,55414],{"class":55},[45,59846,169],{"class":51400},[45,59848,51407],{"class":55},[45,59850,59851,59853,59855,59857,59859],{"class":47,"line":32811},[45,59852,55402],{"class":55},[45,59854,169],{"class":51400},[45,59856,55414],{"class":55},[45,59858,169],{"class":51400},[45,59860,51407],{"class":55},[45,59862,59863,59865,59867,59869,59871],{"class":47,"line":32817},[45,59864,55402],{"class":55},[45,59866,169],{"class":51400},[45,59868,55414],{"class":55},[45,59870,169],{"class":51400},[45,59872,51407],{"class":55},[45,59874,59875,59877,59879,59881,59883],{"class":47,"line":32823},[45,59876,55402],{"class":55},[45,59878,169],{"class":51400},[45,59880,55414],{"class":55},[45,59882,169],{"class":51400},[45,59884,51407],{"class":55},[45,59886,59887,59889,59891,59893,59895],{"class":47,"line":32829},[45,59888,55402],{"class":55},[45,59890,169],{"class":51400},[45,59892,55414],{"class":55},[45,59894,169],{"class":51400},[45,59896,51407],{"class":55},[45,59898,59899,59901,59903],{"class":47,"line":32835},[45,59900,55507],{"class":55},[45,59902,166],{"class":51400},[45,59904,51407],{"class":55},[45,59906,59907,59909,59911,59913,59915,59918],{"class":47,"line":32841},[45,59908,55334],{"class":55},[45,59910,51711],{"class":51400},[45,59912,53586],{"class":69},[45,59914,59],{"class":55},[45,59916,59917],{"class":62},"\"toggle\"",[45,59919,51407],{"class":55},[45,59921,59922,59924,59926,59928,59930,59933,59935,59938,59940,59942],{"class":47,"line":32847},[45,59923,55402],{"class":55},[45,59925,53987],{"class":51400},[45,59927,53586],{"class":69},[45,59929,59],{"class":55},[45,59931,59932],{"class":62},"\"prev\"",[45,59934,1237],{"class":55},[45,59936,59937],{"class":79},"&lt;",[45,59939,51885],{"class":55},[45,59941,53987],{"class":51400},[45,59943,51407],{"class":55},[45,59945,59946,59948,59950,59952,59954,59957,59959,59962,59964,59966],{"class":47,"line":32853},[45,59947,55402],{"class":55},[45,59949,53987],{"class":51400},[45,59951,53586],{"class":69},[45,59953,59],{"class":55},[45,59955,59956],{"class":62},"\"next\"",[45,59958,1237],{"class":55},[45,59960,59961],{"class":79},"&gt;",[45,59963,51885],{"class":55},[45,59965,53987],{"class":51400},[45,59967,51407],{"class":55},[45,59969,59970,59972,59974],{"class":47,"line":32873},[45,59971,55507],{"class":55},[45,59973,51711],{"class":51400},[45,59975,51407],{"class":55},[45,59977,59978,59980,59982],{"class":47,"line":32879},[45,59979,51876],{"class":55},[45,59981,51711],{"class":51400},[45,59983,51407],{"class":55},[45,59985,59986,59988,59990],{"class":47,"line":32895},[45,59987,52517],{"class":55},[45,59989,51711],{"class":51400},[45,59991,51407],{"class":55},[45,59993,59994,59996,59998],{"class":47,"line":32901},[45,59995,52244],{"class":55},[45,59997,51913],{"class":51400},[45,59999,51407],{"class":55},[45,60001,60002],{"class":47,"line":32915},[45,60003,60004],{"class":55},"    \u002F\u002F 1. 初始数据\n",[45,60006,60007],{"class":47,"line":32921},[45,60008,60009],{"class":55},"    const data = [\n",[45,60011,60012],{"class":47,"line":32936},[45,60013,60014],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[45,60016,60017],{"class":47,"line":32942},[45,60018,60019],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[45,60021,60022],{"class":47,"line":32951},[45,60023,60024],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[45,60026,60027],{"class":47,"line":32957},[45,60028,60029],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[45,60031,60032],{"class":47,"line":32966},[45,60033,60034],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[45,60036,60037],{"class":47,"line":32972},[45,60038,60039],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[45,60041,60042],{"class":47,"line":32978},[45,60043,60044],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[45,60046,60047],{"class":47,"line":32987},[45,60048,60049],{"class":55},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[45,60051,60052],{"class":47,"line":32993},[45,60053,53209],{"class":55},[45,60055,60056],{"class":47,"line":33004},[45,60057,60058],{"class":55},"    \u002F\u002F 获取元素\n",[45,60060,60061],{"class":47,"line":33010},[45,60062,60063],{"class":55},"    const img = document.querySelector('.slider-wrapper img')\n",[45,60065,60066],{"class":47,"line":33029},[45,60067,60068],{"class":55},"    const p = document.querySelector('.slider-footer p')\n",[45,60070,60071],{"class":47,"line":33035},[45,60072,60073],{"class":55},"    const footer = document.querySelector('.slider-footer')\n",[45,60075,60076],{"class":47,"line":33046},[45,60077,60078],{"class":55},"    \u002F\u002F 1. 右按钮业务\n",[45,60080,60081],{"class":47,"line":33052},[45,60082,60083],{"class":55},"    \u002F\u002F 1.1 获取右侧按钮 \n",[45,60085,60086],{"class":47,"line":33072},[45,60087,60088],{"class":55},"    const next = document.querySelector('.next')\n",[45,60090,60091],{"class":47,"line":33088},[45,60092,60093],{"class":55},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[45,60095,60096],{"class":47,"line":33094},[45,60097,60098],{"class":55},"    \u002F\u002F 1.2 注册点击事件\n",[45,60100,60101],{"class":47,"line":33108},[45,60102,2550],{"emptyLinePlaceholder":207},[45,60104,60105],{"class":47,"line":33114},[45,60106,60107],{"class":55},"    next.addEventListener('click', function () {\n",[45,60109,60110],{"class":47,"line":33120},[45,60111,60112],{"class":55},"      \u002F\u002F console.log(11)\n",[45,60114,60115],{"class":47,"line":33131},[45,60116,60117],{"class":55},"      i++\n",[45,60119,60120],{"class":47,"line":33137},[45,60121,60122],{"class":55},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[45,60124,60125],{"class":47,"line":33143},[45,60126,60127],{"class":55},"      \u002F\u002F if (i >= 8) {\n",[45,60129,60130],{"class":47,"line":33153},[45,60131,60132],{"class":55},"      \u002F\u002F   i = 0\n",[45,60134,60135],{"class":47,"line":33159},[45,60136,60137],{"class":55},"      \u002F\u002F }\n",[45,60139,60140],{"class":47,"line":33170},[45,60141,60142],{"class":55},"      i = i >= data.length ? 0 : i\n",[45,60144,60145],{"class":47,"line":33176},[45,60146,60147],{"class":55},"      \u002F\u002F 1.3 得到对应的对象\n",[45,60149,60150],{"class":47,"line":33186},[45,60151,60152],{"class":55},"      \u002F\u002F console.log(data[i])\n",[45,60154,60155],{"class":47,"line":33191},[45,60156,60157],{"class":55},"      \u002F\u002F 调用函数\n",[45,60159,60160],{"class":47,"line":33197},[45,60161,60162],{"class":55},"      toggle()\n",[45,60164,60165],{"class":47,"line":33246},[45,60166,33561],{"class":55},[45,60168,60169],{"class":47,"line":33293},[45,60170,2550],{"emptyLinePlaceholder":207},[45,60172,60173],{"class":47,"line":33298},[45,60174,60175],{"class":55},"    \u002F\u002F 2. 左侧按钮业务\n",[45,60177,60178],{"class":47,"line":33304},[45,60179,60180],{"class":55},"    \u002F\u002F 2.1 获取左侧按钮 \n",[45,60182,60183],{"class":47,"line":33323},[45,60184,60185],{"class":55},"    const prev = document.querySelector('.prev')\n",[45,60187,60188],{"class":47,"line":33329},[45,60189,60098],{"class":55},[45,60191,60192],{"class":47,"line":33349},[45,60193,60194],{"class":55},"    prev.addEventListener('click', function () {\n",[45,60196,60197],{"class":47,"line":33355},[45,60198,60199],{"class":55},"      i--\n",[45,60201,60202],{"class":47,"line":33361},[45,60203,60204],{"class":55},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[45,60206,60207],{"class":47,"line":33371},[45,60208,60209],{"class":55},"      \u002F\u002F if (i \u003C 0) {\n",[45,60211,60212],{"class":47,"line":33376},[45,60213,60214],{"class":55},"      \u002F\u002F   i = 7\n",[45,60216,60217],{"class":47,"line":33382},[45,60218,60137],{"class":55},[45,60220,60221],{"class":47,"line":33398},[45,60222,60223],{"class":55},"      i = i \u003C 0 ? data.length - 1 : i\n",[45,60225,60226],{"class":47,"line":33443},[45,60227,60147],{"class":55},[45,60229,60230],{"class":47,"line":33449},[45,60231,60152],{"class":55},[45,60233,60234],{"class":47,"line":33455},[45,60235,60157],{"class":55},[45,60237,60238],{"class":47,"line":33461},[45,60239,60162],{"class":55},[45,60241,60242],{"class":47,"line":33472},[45,60243,33561],{"class":55},[45,60245,60246],{"class":47,"line":33478},[45,60247,2550],{"emptyLinePlaceholder":207},[45,60249,60250],{"class":47,"line":33484},[45,60251,60252],{"class":55},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[45,60254,60255],{"class":47,"line":33490},[45,60256,60257],{"class":55},"    function toggle() {\n",[45,60259,60260],{"class":47,"line":33508},[45,60261,60262],{"class":55},"      \u002F\u002F 1.4 渲染对应的数据\n",[45,60264,60265],{"class":47,"line":33522},[45,60266,60267],{"class":55},"      img.src = data[i].url\n",[45,60269,60270],{"class":47,"line":33531},[45,60271,60272],{"class":55},"      p.innerHTML = data[i].title\n",[45,60274,60275],{"class":47,"line":33540},[45,60276,60277],{"class":55},"      footer.style.backgroundColor = data[i].color\n",[45,60279,60280],{"class":47,"line":33549},[45,60281,60282],{"class":55},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[45,60284,60285],{"class":47,"line":33558},[45,60286,60287],{"class":55},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[45,60289,60290],{"class":47,"line":33564},[45,60291,60292],{"class":55},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[45,60294,60295],{"class":47,"line":33570},[45,60296,2337],{"class":55},[45,60298,60299],{"class":47,"line":33578},[45,60300,2550],{"emptyLinePlaceholder":207},[45,60302,60303],{"class":47,"line":33583},[45,60304,60305],{"class":55},"    \u002F\u002F 3. 自动播放模块\n",[45,60307,60308],{"class":47,"line":33589},[45,60309,60310],{"class":55},"    let timerId = setInterval(function () {\n",[45,60312,60313],{"class":47,"line":33600},[45,60314,60315],{"class":55},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[45,60317,60318],{"class":47,"line":33606},[45,60319,60320],{"class":55},"      next.click()\n",[45,60322,60323],{"class":47,"line":33626},[45,60324,60325],{"class":55},"    }, 1000)\n",[45,60327,60328],{"class":47,"line":33632},[45,60329,2550],{"emptyLinePlaceholder":207},[45,60331,60332],{"class":47,"line":33638},[45,60333,60334],{"class":55},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[45,60336,60337],{"class":47,"line":33644},[45,60338,60339],{"class":55},"    const slider = document.querySelector('.slider')\n",[45,60341,60342],{"class":47,"line":33661},[45,60343,60344],{"class":55},"    \u002F\u002F 注册事件\n",[45,60346,60347],{"class":47,"line":33667},[45,60348,60349],{"class":55},"    slider.addEventListener('mouseenter', function () {\n",[45,60351,60352],{"class":47,"line":33673},[45,60353,60354],{"class":55},"      \u002F\u002F 停止定时器\n",[45,60356,60357],{"class":47,"line":33679},[45,60358,60359],{"class":55},"      clearInterval(timerId)\n",[45,60361,60362],{"class":47,"line":33685},[45,60363,33561],{"class":55},[45,60365,60366],{"class":47,"line":33691},[45,60367,2550],{"emptyLinePlaceholder":207},[45,60369,60370],{"class":47,"line":33718},[45,60371,60372],{"class":55},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[45,60374,60375],{"class":47,"line":33742},[45,60376,60344],{"class":55},[45,60378,60379],{"class":47,"line":33748},[45,60380,60381],{"class":55},"    slider.addEventListener('mouseleave', function () {\n",[45,60383,60384],{"class":47,"line":33754},[45,60385,60354],{"class":55},[45,60387,60388],{"class":47,"line":33760},[45,60389,60390],{"class":55},"      if (timerId) clearInterval(timerId)\n",[45,60392,60393],{"class":47,"line":33771},[45,60394,60395],{"class":55},"      \u002F\u002F 开启定时器\n",[45,60397,60398],{"class":47,"line":33782},[45,60399,60400],{"class":55},"      timerId = setInterval(function () {\n",[45,60402,60403],{"class":47,"line":33788},[45,60404,60405],{"class":55},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[45,60407,60408],{"class":47,"line":33805},[45,60409,60410],{"class":55},"        next.click()\n",[45,60412,60413],{"class":47,"line":33828},[45,60414,60415],{"class":55},"      }, 1000)\n",[45,60417,60418],{"class":47,"line":33851},[45,60419,33561],{"class":55},[45,60421,60422,60424,60426],{"class":47,"line":33857},[45,60423,52517],{"class":55},[45,60425,51913],{"class":51400},[45,60427,51407],{"class":55},[45,60429,60430,60432,60434],{"class":47,"line":33862},[45,60431,51885],{"class":55},[45,60433,51900],{"class":51400},[45,60435,51407],{"class":55},[45,60437,60438],{"class":47,"line":33871},[45,60439,2550],{"emptyLinePlaceholder":207},[45,60441,60442,60444,60446],{"class":47,"line":33881},[45,60443,51885],{"class":55},[45,60445,50735],{"class":51400},[45,60447,51407],{"class":55},[22147,60449,60451],{"id":60450},"_3252-焦点事件","3.2.5.2 焦点事件",[20,60453,60454],{},"小米搜索框案例：",[36,60456,60458],{"className":50733,"code":60457,"language":50735,"meta":25,"style":25},"\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",[42,60459,60460,60470,60484,60488,60496,60510,60530,60550,60562,60570,60576,60586,60596,60608,60612,60616,60623,60627,60638,60642,60646,60653,60664,60677,60691,60695,60699,60708,60720,60732,60746,60759,60772,60790,60801,60805,60809,60818,60835,60839,60843,60850,60860,60870,60881,60894,60906,60922,60933,60945,60949,60953,60961,60972,60989,61001,61013,61024,61028,61032,61043,61054,61058,61066,61070,61078,61082,61090,61105,61128,61143,61174,61201,61228,61255,61282,61309,61336,61345,61353,61361,61366,61386,61406,61411,61416,61434,61439,61449,61454,61468,61473,61478,61495,61504,61516,61520,61528,61536,61540],{"__ignoreMap":25},[45,60461,60462,60464,60466,60468],{"class":47,"line":48},[45,60463,51397],{"class":55},[45,60465,51401],{"class":51400},[45,60467,51404],{"class":69},[45,60469,51407],{"class":55},[45,60471,60472,60474,60476,60478,60480,60482],{"class":47,"line":66},[45,60473,1187],{"class":55},[45,60475,50735],{"class":51400},[45,60477,51416],{"class":69},[45,60479,59],{"class":55},[45,60481,51421],{"class":62},[45,60483,51407],{"class":55},[45,60485,60486],{"class":47,"line":1331},[45,60487,2550],{"emptyLinePlaceholder":207},[45,60489,60490,60492,60494],{"class":47,"line":1346},[45,60491,1187],{"class":55},[45,60493,51434],{"class":51400},[45,60495,51407],{"class":55},[45,60497,60498,60500,60502,60504,60506,60508],{"class":47,"line":1352},[45,60499,51441],{"class":55},[45,60501,51444],{"class":51400},[45,60503,51447],{"class":69},[45,60505,59],{"class":55},[45,60507,51452],{"class":62},[45,60509,51407],{"class":55},[45,60511,60512,60514,60516,60518,60520,60522,60524,60526,60528],{"class":47,"line":1366},[45,60513,51441],{"class":55},[45,60515,51444],{"class":51400},[45,60517,51463],{"class":69},[45,60519,59],{"class":55},[45,60521,51468],{"class":62},[45,60523,51471],{"class":69},[45,60525,59],{"class":55},[45,60527,51476],{"class":62},[45,60529,51407],{"class":55},[45,60531,60532,60534,60536,60538,60540,60542,60544,60546,60548],{"class":47,"line":1372},[45,60533,51441],{"class":55},[45,60535,51444],{"class":51400},[45,60537,15069],{"class":69},[45,60539,59],{"class":55},[45,60541,51491],{"class":62},[45,60543,51471],{"class":69},[45,60545,59],{"class":55},[45,60547,51498],{"class":62},[45,60549,51407],{"class":55},[45,60551,60552,60554,60556,60558,60560],{"class":47,"line":1463},[45,60553,51441],{"class":55},[45,60555,51507],{"class":51400},[45,60557,51510],{"class":55},[45,60559,51507],{"class":51400},[45,60561,51407],{"class":55},[45,60563,60564,60566,60568],{"class":47,"line":1469},[45,60565,51441],{"class":55},[45,60567,196],{"class":51400},[45,60569,51407],{"class":55},[45,60571,60572,60574],{"class":47,"line":1481},[45,60573,51527],{"class":51400},[45,60575,15721],{"class":55},[45,60577,60578,60580,60582,60584],{"class":47,"line":1763},[45,60579,51534],{"class":79},[45,60581,51537],{"class":55},[45,60583,469],{"class":79},[45,60585,1442],{"class":55},[45,60587,60588,60590,60592,60594],{"class":47,"line":1768},[45,60589,51546],{"class":79},[45,60591,51537],{"class":55},[45,60593,469],{"class":79},[45,60595,1442],{"class":55},[45,60597,60598,60601,60603,60606],{"class":47,"line":1774},[45,60599,60600],{"class":79},"            box-sizing",[45,60602,51537],{"class":55},[45,60604,60605],{"class":79},"border-box",[45,60607,1442],{"class":55},[45,60609,60610],{"class":47,"line":1779},[45,60611,2679],{"class":55},[45,60613,60614],{"class":47,"line":1793},[45,60615,2550],{"emptyLinePlaceholder":207},[45,60617,60618,60621],{"class":47,"line":1798},[45,60619,60620],{"class":51400},"        ul",[45,60622,15721],{"class":55},[45,60624,60625],{"class":47,"line":1804},[45,60626,2550],{"emptyLinePlaceholder":207},[45,60628,60629,60632,60634,60636],{"class":47,"line":1825},[45,60630,60631],{"class":79},"            list-style",[45,60633,51537],{"class":55},[45,60635,54837],{"class":79},[45,60637,1442],{"class":55},[45,60639,60640],{"class":47,"line":1830},[45,60641,2679],{"class":55},[45,60643,60644],{"class":47,"line":1844},[45,60645,2550],{"emptyLinePlaceholder":207},[45,60647,60648,60651],{"class":47,"line":1849},[45,60649,60650],{"class":69},"        .mi",[45,60652,15721],{"class":55},[45,60654,60655,60658,60660,60662],{"class":47,"line":1878},[45,60656,60657],{"class":79},"            position",[45,60659,51537],{"class":55},[45,60661,54864],{"class":79},[45,60663,1442],{"class":55},[45,60665,60666,60668,60670,60673,60675],{"class":47,"line":1883},[45,60667,51584],{"class":79},[45,60669,51537],{"class":55},[45,60671,60672],{"class":79},"223",[45,60674,51592],{"class":51},[45,60676,1442],{"class":55},[45,60678,60679,60681,60683,60685,60687,60689],{"class":47,"line":1900},[45,60680,51534],{"class":79},[45,60682,51537],{"class":55},[45,60684,588],{"class":79},[45,60686,51592],{"class":51},[45,60688,51656],{"class":79},[45,60690,1442],{"class":55},[45,60692,60693],{"class":47,"line":1905},[45,60694,2679],{"class":55},[45,60696,60697],{"class":47,"line":1910},[45,60698,2550],{"emptyLinePlaceholder":207},[45,60700,60701,60703,60706],{"class":47,"line":1915},[45,60702,60650],{"class":69},[45,60704,60705],{"class":51400}," input",[45,60707,15721],{"class":55},[45,60709,60710,60712,60714,60716,60718],{"class":47,"line":1929},[45,60711,51584],{"class":79},[45,60713,51537],{"class":55},[45,60715,60672],{"class":79},[45,60717,51592],{"class":51},[45,60719,1442],{"class":55},[45,60721,60722,60724,60726,60728,60730],{"class":47,"line":1934},[45,60723,51599],{"class":79},[45,60725,51537],{"class":55},[45,60727,884],{"class":79},[45,60729,51592],{"class":51},[45,60731,1442],{"class":55},[45,60733,60734,60736,60738,60740,60742,60744],{"class":47,"line":2727},[45,60735,51546],{"class":79},[45,60737,51537],{"class":55},[45,60739,469],{"class":79},[45,60741,2188],{"class":79},[45,60743,51592],{"class":51},[45,60745,1442],{"class":55},[45,60747,60748,60751,60753,60755,60757],{"class":47,"line":2741},[45,60749,60750],{"class":79},"            font-size",[45,60752,51537],{"class":55},[45,60754,826],{"class":79},[45,60756,51592],{"class":51},[45,60758,1442],{"class":55},[45,60760,60761,60764,60766,60768,60770],{"class":47,"line":2749},[45,60762,60763],{"class":79},"            line-height",[45,60765,51537],{"class":55},[45,60767,884],{"class":79},[45,60769,51592],{"class":51},[45,60771,1442],{"class":55},[45,60773,60774,60777,60779,60781,60783,60785,60788],{"class":47,"line":2754},[45,60775,60776],{"class":79},"            border",[45,60778,51537],{"class":55},[45,60780,495],{"class":79},[45,60782,51592],{"class":51},[45,60784,51621],{"class":79},[45,60786,60787],{"class":79}," #e0e0e0",[45,60789,1442],{"class":55},[45,60791,60792,60795,60797,60799],{"class":47,"line":2760},[45,60793,60794],{"class":79},"            outline",[45,60796,51537],{"class":55},[45,60798,54837],{"class":79},[45,60800,1442],{"class":55},[45,60802,60803],{"class":47,"line":2766},[45,60804,2679],{"class":55},[45,60806,60807],{"class":47,"line":2771},[45,60808,2550],{"emptyLinePlaceholder":207},[45,60810,60811,60813,60816],{"class":47,"line":8098},[45,60812,60650],{"class":69},[45,60814,60815],{"class":69}," .search",[45,60817,15721],{"class":55},[45,60819,60820,60822,60824,60826,60828,60830,60833],{"class":47,"line":8122},[45,60821,60776],{"class":79},[45,60823,51537],{"class":55},[45,60825,495],{"class":79},[45,60827,51592],{"class":51},[45,60829,51621],{"class":79},[45,60831,60832],{"class":79}," #ff6700",[45,60834,1442],{"class":55},[45,60836,60837],{"class":47,"line":8127},[45,60838,2679],{"class":55},[45,60840,60841],{"class":47,"line":8133},[45,60842,2550],{"emptyLinePlaceholder":207},[45,60844,60845,60848],{"class":47,"line":8160},[45,60846,60847],{"class":69},"        .result-list",[45,60849,15721],{"class":55},[45,60851,60852,60854,60856,60858],{"class":47,"line":8165},[45,60853,51572],{"class":79},[45,60855,51537],{"class":55},[45,60857,54837],{"class":79},[45,60859,1442],{"class":55},[45,60861,60862,60864,60866,60868],{"class":47,"line":8171},[45,60863,60657],{"class":79},[45,60865,51537],{"class":55},[45,60867,54931],{"class":79},[45,60869,1442],{"class":55},[45,60871,60872,60875,60877,60879],{"class":47,"line":8183},[45,60873,60874],{"class":79},"            left",[45,60876,51537],{"class":55},[45,60878,469],{"class":79},[45,60880,1442],{"class":55},[45,60882,60883,60886,60888,60890,60892],{"class":47,"line":8195},[45,60884,60885],{"class":79},"            top",[45,60887,51537],{"class":55},[45,60889,884],{"class":79},[45,60891,51592],{"class":51},[45,60893,1442],{"class":55},[45,60895,60896,60898,60900,60902,60904],{"class":47,"line":8207},[45,60897,51584],{"class":79},[45,60899,51537],{"class":55},[45,60901,60672],{"class":79},[45,60903,51592],{"class":51},[45,60905,1442],{"class":55},[45,60907,60908,60910,60912,60914,60916,60918,60920],{"class":47,"line":9866},[45,60909,60776],{"class":79},[45,60911,51537],{"class":55},[45,60913,495],{"class":79},[45,60915,51592],{"class":51},[45,60917,51621],{"class":79},[45,60919,60832],{"class":79},[45,60921,1442],{"class":55},[45,60923,60924,60927,60929,60931],{"class":47,"line":9890},[45,60925,60926],{"class":79},"            border-top",[45,60928,51537],{"class":55},[45,60930,469],{"class":79},[45,60932,1442],{"class":55},[45,60934,60935,60938,60940,60943],{"class":47,"line":9913},[45,60936,60937],{"class":79},"            background",[45,60939,51537],{"class":55},[45,60941,60942],{"class":79},"#fff",[45,60944,1442],{"class":55},[45,60946,60947],{"class":47,"line":9937},[45,60948,2679],{"class":55},[45,60950,60951],{"class":47,"line":9942},[45,60952,2550],{"emptyLinePlaceholder":207},[45,60954,60955,60957,60959],{"class":47,"line":9947},[45,60956,60847],{"class":69},[45,60958,1550],{"class":51400},[45,60960,15721],{"class":55},[45,60962,60963,60965,60967,60970],{"class":47,"line":9952},[45,60964,51572],{"class":79},[45,60966,51537],{"class":55},[45,60968,60969],{"class":79},"block",[45,60971,1442],{"class":55},[45,60973,60974,60976,60978,60980,60982,60985,60987],{"class":47,"line":9961},[45,60975,51546],{"class":79},[45,60977,51537],{"class":55},[45,60979,621],{"class":79},[45,60981,51592],{"class":51},[45,60983,60984],{"class":79}," 15",[45,60986,51592],{"class":51},[45,60988,1442],{"class":55},[45,60990,60991,60993,60995,60997,60999],{"class":47,"line":9966},[45,60992,60750],{"class":79},[45,60994,51537],{"class":55},[45,60996,775],{"class":79},[45,60998,51592],{"class":51},[45,61000,1442],{"class":55},[45,61002,61003,61006,61008,61011],{"class":47,"line":9972},[45,61004,61005],{"class":79},"            color",[45,61007,51537],{"class":55},[45,61009,61010],{"class":79},"#424242",[45,61012,1442],{"class":55},[45,61014,61015,61018,61020,61022],{"class":47,"line":9993},[45,61016,61017],{"class":79},"            text-decoration",[45,61019,51537],{"class":55},[45,61021,54837],{"class":79},[45,61023,1442],{"class":55},[45,61025,61026],{"class":47,"line":9999},[45,61027,2679],{"class":55},[45,61029,61030],{"class":47,"line":10013},[45,61031,2550],{"emptyLinePlaceholder":207},[45,61033,61034,61036,61038,61041],{"class":47,"line":10019},[45,61035,60847],{"class":69},[45,61037,1550],{"class":51400},[45,61039,61040],{"class":69},":hover",[45,61042,15721],{"class":55},[45,61044,61045,61047,61049,61052],{"class":47,"line":10046},[45,61046,51740],{"class":79},[45,61048,51537],{"class":55},[45,61050,61051],{"class":79},"#eee",[45,61053,1442],{"class":55},[45,61055,61056],{"class":47,"line":10055},[45,61057,2679],{"class":55},[45,61059,61060,61062,61064],{"class":47,"line":10061},[45,61061,51876],{"class":55},[45,61063,196],{"class":51400},[45,61065,51407],{"class":55},[45,61067,61068],{"class":47,"line":10069},[45,61069,2550],{"emptyLinePlaceholder":207},[45,61071,61072,61074,61076],{"class":47,"line":10074},[45,61073,51885],{"class":55},[45,61075,51434],{"class":51400},[45,61077,51407],{"class":55},[45,61079,61080],{"class":47,"line":16753},[45,61081,2550],{"emptyLinePlaceholder":207},[45,61083,61084,61086,61088],{"class":47,"line":16759},[45,61085,1187],{"class":55},[45,61087,51900],{"class":51400},[45,61089,51407],{"class":55},[45,61091,61092,61094,61096,61098,61100,61103],{"class":47,"line":16782},[45,61093,51441],{"class":55},[45,61095,51711],{"class":51400},[45,61097,53586],{"class":69},[45,61099,59],{"class":55},[45,61101,61102],{"class":62},"\"mi\"",[45,61104,51407],{"class":55},[45,61106,61107,61109,61111,61113,61115,61118,61121,61123,61126],{"class":47,"line":16788},[45,61108,55402],{"class":55},[45,61110,53921],{"class":51400},[45,61112,53924],{"class":69},[45,61114,59],{"class":55},[45,61116,61117],{"class":62},"\"search\"",[45,61119,61120],{"class":69}," placeholder",[45,61122,59],{"class":55},[45,61124,61125],{"class":62},"\"小米笔记本\"",[45,61127,51407],{"class":55},[45,61129,61130,61132,61134,61136,61138,61141],{"class":47,"line":16811},[45,61131,55402],{"class":55},[45,61133,166],{"class":51400},[45,61135,53586],{"class":69},[45,61137,59],{"class":55},[45,61139,61140],{"class":62},"\"result-list\"",[45,61142,51407],{"class":55},[45,61144,61145,61148,61150,61153,61155,61158,61160,61163,61166,61168,61170,61172],{"class":47,"line":16825},[45,61146,61147],{"class":55},"            \u003C",[45,61149,169],{"class":51400},[45,61151,61152],{"class":55},">\u003C",[45,61154,516],{"class":51400},[45,61156,61157],{"class":69}," href",[45,61159,59],{"class":55},[45,61161,61162],{"class":62},"\"#\"",[45,61164,61165],{"class":55},">全部商品\u003C\u002F",[45,61167,516],{"class":51400},[45,61169,55414],{"class":55},[45,61171,169],{"class":51400},[45,61173,51407],{"class":55},[45,61175,61176,61178,61180,61182,61184,61186,61188,61190,61193,61195,61197,61199],{"class":47,"line":16845},[45,61177,61147],{"class":55},[45,61179,169],{"class":51400},[45,61181,61152],{"class":55},[45,61183,516],{"class":51400},[45,61185,61157],{"class":69},[45,61187,59],{"class":55},[45,61189,61162],{"class":62},[45,61191,61192],{"class":55},">小米11\u003C\u002F",[45,61194,516],{"class":51400},[45,61196,55414],{"class":55},[45,61198,169],{"class":51400},[45,61200,51407],{"class":55},[45,61202,61203,61205,61207,61209,61211,61213,61215,61217,61220,61222,61224,61226],{"class":47,"line":16851},[45,61204,61147],{"class":55},[45,61206,169],{"class":51400},[45,61208,61152],{"class":55},[45,61210,516],{"class":51400},[45,61212,61157],{"class":69},[45,61214,59],{"class":55},[45,61216,61162],{"class":62},[45,61218,61219],{"class":55},">小米10S\u003C\u002F",[45,61221,516],{"class":51400},[45,61223,55414],{"class":55},[45,61225,169],{"class":51400},[45,61227,51407],{"class":55},[45,61229,61230,61232,61234,61236,61238,61240,61242,61244,61247,61249,61251,61253],{"class":47,"line":16862},[45,61231,61147],{"class":55},[45,61233,169],{"class":51400},[45,61235,61152],{"class":55},[45,61237,516],{"class":51400},[45,61239,61157],{"class":69},[45,61241,59],{"class":55},[45,61243,61162],{"class":62},[45,61245,61246],{"class":55},">小米笔记本\u003C\u002F",[45,61248,516],{"class":51400},[45,61250,55414],{"class":55},[45,61252,169],{"class":51400},[45,61254,51407],{"class":55},[45,61256,61257,61259,61261,61263,61265,61267,61269,61271,61274,61276,61278,61280],{"class":47,"line":16885},[45,61258,61147],{"class":55},[45,61260,169],{"class":51400},[45,61262,61152],{"class":55},[45,61264,516],{"class":51400},[45,61266,61157],{"class":69},[45,61268,59],{"class":55},[45,61270,61162],{"class":62},[45,61272,61273],{"class":55},">小米手机\u003C\u002F",[45,61275,516],{"class":51400},[45,61277,55414],{"class":55},[45,61279,169],{"class":51400},[45,61281,51407],{"class":55},[45,61283,61284,61286,61288,61290,61292,61294,61296,61298,61301,61303,61305,61307],{"class":47,"line":16907},[45,61285,61147],{"class":55},[45,61287,169],{"class":51400},[45,61289,61152],{"class":55},[45,61291,516],{"class":51400},[45,61293,61157],{"class":69},[45,61295,59],{"class":55},[45,61297,61162],{"class":62},[45,61299,61300],{"class":55},">黑鲨4\u003C\u002F",[45,61302,516],{"class":51400},[45,61304,55414],{"class":55},[45,61306,169],{"class":51400},[45,61308,51407],{"class":55},[45,61310,61311,61313,61315,61317,61319,61321,61323,61325,61328,61330,61332,61334],{"class":47,"line":16912},[45,61312,61147],{"class":55},[45,61314,169],{"class":51400},[45,61316,61152],{"class":55},[45,61318,516],{"class":51400},[45,61320,61157],{"class":69},[45,61322,59],{"class":55},[45,61324,61162],{"class":62},[45,61326,61327],{"class":55},">空调\u003C\u002F",[45,61329,516],{"class":51400},[45,61331,55414],{"class":55},[45,61333,169],{"class":51400},[45,61335,51407],{"class":55},[45,61337,61338,61341,61343],{"class":47,"line":16918},[45,61339,61340],{"class":55},"        \u003C\u002F",[45,61342,166],{"class":51400},[45,61344,51407],{"class":55},[45,61346,61347,61349,61351],{"class":47,"line":16932},[45,61348,51876],{"class":55},[45,61350,51711],{"class":51400},[45,61352,51407],{"class":55},[45,61354,61355,61357,61359],{"class":47,"line":16945},[45,61356,51441],{"class":55},[45,61358,51913],{"class":51400},[45,61360,51407],{"class":55},[45,61362,61363],{"class":47,"line":16950},[45,61364,61365],{"class":337},"        \u002F\u002F 1. 获取元素\n",[45,61367,61368,61371,61373,61375,61377,61379,61381,61384],{"class":47,"line":16964},[45,61369,61370],{"class":51},"        const",[45,61372,60705],{"class":79},[45,61374,13713],{"class":51},[45,61376,54496],{"class":55},[45,61378,54499],{"class":69},[45,61380,282],{"class":55},[45,61382,61383],{"class":62},"'[type=search]'",[45,61385,139],{"class":55},[45,61387,61388,61390,61393,61395,61397,61399,61401,61404],{"class":47,"line":16969},[45,61389,61370],{"class":51},[45,61391,61392],{"class":79}," ul",[45,61394,13713],{"class":51},[45,61396,54496],{"class":55},[45,61398,54499],{"class":69},[45,61400,282],{"class":55},[45,61402,61403],{"class":62},"'.result-list'",[45,61405,139],{"class":55},[45,61407,61408],{"class":47,"line":16975},[45,61409,61410],{"class":337},"        \u002F\u002F console.log(input)\n",[45,61412,61413],{"class":47,"line":16980},[45,61414,61415],{"class":337},"        \u002F\u002F 2. 监听事件 获得焦点\n",[45,61417,61418,61421,61423,61425,61428,61430,61432],{"class":47,"line":16994},[45,61419,61420],{"class":55},"        input.",[45,61422,57913],{"class":69},[45,61424,282],{"class":55},[45,61426,61427],{"class":62},"'focus'",[45,61429,12584],{"class":55},[45,61431,54549],{"class":51},[45,61433,54552],{"class":55},[45,61435,61436],{"class":47,"line":16999},[45,61437,61438],{"class":337},"            \u002F\u002F ul显示\n",[45,61440,61441,61444,61446],{"class":47,"line":17004},[45,61442,61443],{"class":55},"            ul.style.display ",[45,61445,59],{"class":51},[45,61447,61448],{"class":62}," 'block'\n",[45,61450,61451],{"class":47,"line":17018},[45,61452,61453],{"class":337},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[45,61455,61456,61459,61461,61463,61466],{"class":47,"line":17030},[45,61457,61458],{"class":55},"            input.classList.",[45,61460,5484],{"class":69},[45,61462,282],{"class":55},[45,61464,61465],{"class":62},"'search'",[45,61467,139],{"class":55},[45,61469,61470],{"class":47,"line":17035},[45,61471,61472],{"class":55},"        })\n",[45,61474,61475],{"class":47,"line":17048},[45,61476,61477],{"class":337},"        \u002F\u002F 3. 监听事件 失去焦点\n",[45,61479,61480,61482,61484,61486,61489,61491,61493],{"class":47,"line":17053},[45,61481,61420],{"class":55},[45,61483,57913],{"class":69},[45,61485,282],{"class":55},[45,61487,61488],{"class":62},"'blur'",[45,61490,12584],{"class":55},[45,61492,54549],{"class":51},[45,61494,54552],{"class":55},[45,61496,61497,61499,61501],{"class":47,"line":17058},[45,61498,61443],{"class":55},[45,61500,59],{"class":51},[45,61502,61503],{"class":62}," 'none'\n",[45,61505,61506,61508,61510,61512,61514],{"class":47,"line":17063},[45,61507,61458],{"class":55},[45,61509,57106],{"class":69},[45,61511,282],{"class":55},[45,61513,61465],{"class":62},[45,61515,139],{"class":55},[45,61517,61518],{"class":47,"line":17076},[45,61519,61472],{"class":55},[45,61521,61522,61524,61526],{"class":47,"line":17081},[45,61523,51876],{"class":55},[45,61525,51913],{"class":51400},[45,61527,51407],{"class":55},[45,61529,61530,61532,61534],{"class":47,"line":32733},[45,61531,51885],{"class":55},[45,61533,51900],{"class":51400},[45,61535,51407],{"class":55},[45,61537,61538],{"class":47,"line":32739},[45,61539,2550],{"emptyLinePlaceholder":207},[45,61541,61542,61544,61546],{"class":47,"line":32745},[45,61543,51885],{"class":55},[45,61545,50735],{"class":51400},[45,61547,51407],{"class":55},[22147,61549,61551],{"id":61550},"_3253-键盘事件","3.2.5.3 键盘事件",[20,61553,61554],{},"评论字数统计案例",[20,61556,61557],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[20,61559,61560],{},"牢记focus伪类选择器",[51444,61562],{"charSet":61563},"UTF-8",[51444,61565],{"name":61566,"content":61567},"viewport","width=device-width, initial-scale=1.0",[51507,61569,61570],{},"Document",[196,61572,61573],{},"\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",[53921,61575],{"type":5337},[166,61577,61578,61581],{},[169,61579,61580],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[169,61582,61583],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[36,61585,61587],{"className":50733,"code":61586,"language":50735,"meta":25,"style":25},"\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",[42,61588,61589,61599,61613,61617,61625,61639,61659,61679,61692,61700,61707,61720,61734,61744,61754,61758,61762,61769,61781,61793,61805,61817,61846,61859,61863,61867,61876,61887,61899,61910,61921,61933,61944,61956,61972,61984,61988,61992,62003,62014,62024,62036,62040,62044,62052,62063,62073,62084,62096,62109,62121,62133,62137,62141,62150,62162,62173,62186,62197,62211,62215,62219,62226,62238,62250,62260,62264,62268,62277,62289,62299,62303,62307,62318,62328,62347,62360,62364,62368,62378,62388,62392,62396,62407,62418,62430,62442,62446,62450,62461,62472,62486,62490,62494,62505,62515,62527,62531,62539,62547,62551,62559,62574,62593,62633,62646,62654,62668,62688,62696,62711,62734,62752,62767,62787,62807,62827,62835,62843,62851,62859,62879,62899,62904,62921,62930,62934,62939,62955,62963,62967,62972,62989,62994,63019,63023,63027,63032,63037,63045,63053,63057],{"__ignoreMap":25},[45,61590,61591,61593,61595,61597],{"class":47,"line":48},[45,61592,51397],{"class":55},[45,61594,51401],{"class":51400},[45,61596,51404],{"class":69},[45,61598,51407],{"class":55},[45,61600,61601,61603,61605,61607,61609,61611],{"class":47,"line":66},[45,61602,1187],{"class":55},[45,61604,50735],{"class":51400},[45,61606,51416],{"class":69},[45,61608,59],{"class":55},[45,61610,51421],{"class":62},[45,61612,51407],{"class":55},[45,61614,61615],{"class":47,"line":1331},[45,61616,2550],{"emptyLinePlaceholder":207},[45,61618,61619,61621,61623],{"class":47,"line":1346},[45,61620,1187],{"class":55},[45,61622,51434],{"class":51400},[45,61624,51407],{"class":55},[45,61626,61627,61629,61631,61633,61635,61637],{"class":47,"line":1352},[45,61628,52244],{"class":55},[45,61630,51444],{"class":51400},[45,61632,51447],{"class":69},[45,61634,59],{"class":55},[45,61636,51452],{"class":62},[45,61638,51407],{"class":55},[45,61640,61641,61643,61645,61647,61649,61651,61653,61655,61657],{"class":47,"line":1366},[45,61642,52244],{"class":55},[45,61644,51444],{"class":51400},[45,61646,51463],{"class":69},[45,61648,59],{"class":55},[45,61650,51468],{"class":62},[45,61652,51471],{"class":69},[45,61654,59],{"class":55},[45,61656,51476],{"class":62},[45,61658,51407],{"class":55},[45,61660,61661,61663,61665,61667,61669,61671,61673,61675,61677],{"class":47,"line":1372},[45,61662,52244],{"class":55},[45,61664,51444],{"class":51400},[45,61666,15069],{"class":69},[45,61668,59],{"class":55},[45,61670,51491],{"class":62},[45,61672,51471],{"class":69},[45,61674,59],{"class":55},[45,61676,51498],{"class":62},[45,61678,51407],{"class":55},[45,61680,61681,61683,61685,61688,61690],{"class":47,"line":1463},[45,61682,52244],{"class":55},[45,61684,51507],{"class":51400},[45,61686,61687],{"class":55},">评论回车发布\u003C\u002F",[45,61689,51507],{"class":51400},[45,61691,51407],{"class":55},[45,61693,61694,61696,61698],{"class":47,"line":1469},[45,61695,52244],{"class":55},[45,61697,196],{"class":51400},[45,61699,51407],{"class":55},[45,61701,61702,61705],{"class":47,"line":1481},[45,61703,61704],{"class":69},"    .wrapper",[45,61706,15721],{"class":55},[45,61708,61709,61712,61714,61716,61718],{"class":47,"line":1763},[45,61710,61711],{"class":79},"      min-width",[45,61713,51537],{"class":55},[45,61715,4137],{"class":79},[45,61717,51592],{"class":51},[45,61719,1442],{"class":55},[45,61721,61722,61725,61727,61730,61732],{"class":47,"line":1768},[45,61723,61724],{"class":79},"      max-width",[45,61726,51537],{"class":55},[45,61728,61729],{"class":79},"800",[45,61731,51592],{"class":51},[45,61733,1442],{"class":55},[45,61735,61736,61738,61740,61742],{"class":47,"line":1774},[45,61737,55109],{"class":79},[45,61739,51537],{"class":55},[45,61741,51577],{"class":79},[45,61743,1442],{"class":55},[45,61745,61746,61748,61750,61752],{"class":47,"line":1779},[45,61747,55120],{"class":79},[45,61749,51537],{"class":55},[45,61751,51680],{"class":79},[45,61753,1442],{"class":55},[45,61755,61756],{"class":47,"line":1793},[45,61757,2337],{"class":55},[45,61759,61760],{"class":47,"line":1798},[45,61761,2550],{"emptyLinePlaceholder":207},[45,61763,61764,61767],{"class":47,"line":1804},[45,61765,61766],{"class":69},"    .avatar",[45,61768,15721],{"class":55},[45,61770,61771,61773,61775,61777,61779],{"class":47,"line":1825},[45,61772,54871],{"class":79},[45,61774,51537],{"class":55},[45,61776,884],{"class":79},[45,61778,51592],{"class":51},[45,61780,1442],{"class":55},[45,61782,61783,61785,61787,61789,61791],{"class":47,"line":1830},[45,61784,54885],{"class":79},[45,61786,51537],{"class":55},[45,61788,884],{"class":79},[45,61790,51592],{"class":51},[45,61792,1442],{"class":55},[45,61794,61795,61797,61799,61801,61803],{"class":47,"line":1844},[45,61796,55234],{"class":79},[45,61798,51537],{"class":55},[45,61800,933],{"class":79},[45,61802,605],{"class":51},[45,61804,1442],{"class":55},[45,61806,61807,61810,61812,61815],{"class":47,"line":1849},[45,61808,61809],{"class":79},"      overflow",[45,61811,51537],{"class":55},[45,61813,61814],{"class":79},"hidden",[45,61816,1442],{"class":55},[45,61818,61819,61822,61824,61827,61829,61832,61834,61837,61839,61841,61844],{"class":47,"line":1878},[45,61820,61821],{"class":79},"      background",[45,61823,51537],{"class":55},[45,61825,61826],{"class":79},"url",[45,61828,282],{"class":55},[45,61830,61831],{"class":5366},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[45,61833,13863],{"class":55},[45,61835,61836],{"class":79},"no-repeat",[45,61838,17293],{"class":79},[45,61840,25126],{"class":55},[45,61842,61843],{"class":79},"cover",[45,61845,1442],{"class":55},[45,61847,61848,61851,61853,61855,61857],{"class":47,"line":1883},[45,61849,61850],{"class":79},"      margin-right",[45,61852,51537],{"class":55},[45,61854,977],{"class":79},[45,61856,51592],{"class":51},[45,61858,1442],{"class":55},[45,61860,61861],{"class":47,"line":1900},[45,61862,2337],{"class":55},[45,61864,61865],{"class":47,"line":1905},[45,61866,2550],{"emptyLinePlaceholder":207},[45,61868,61869,61871,61874],{"class":47,"line":1910},[45,61870,61704],{"class":69},[45,61872,61873],{"class":51400}," textarea",[45,61875,15721],{"class":55},[45,61877,61878,61881,61883,61885],{"class":47,"line":1915},[45,61879,61880],{"class":79},"      outline",[45,61882,51537],{"class":55},[45,61884,54837],{"class":79},[45,61886,1442],{"class":55},[45,61888,61889,61892,61894,61897],{"class":47,"line":1929},[45,61890,61891],{"class":79},"      border-color",[45,61893,51537],{"class":55},[45,61895,61896],{"class":79},"transparent",[45,61898,1442],{"class":55},[45,61900,61901,61904,61906,61908],{"class":47,"line":1934},[45,61902,61903],{"class":79},"      resize",[45,61905,51537],{"class":55},[45,61907,54837],{"class":79},[45,61909,1442],{"class":55},[45,61911,61912,61914,61916,61919],{"class":47,"line":2727},[45,61913,61821],{"class":79},[45,61915,51537],{"class":55},[45,61917,61918],{"class":79},"#f5f5f5",[45,61920,1442],{"class":55},[45,61922,61923,61925,61927,61929,61931],{"class":47,"line":2741},[45,61924,55234],{"class":79},[45,61926,51537],{"class":55},[45,61928,570],{"class":79},[45,61930,51592],{"class":51},[45,61932,1442],{"class":55},[45,61934,61935,61938,61940,61942],{"class":47,"line":2749},[45,61936,61937],{"class":79},"      flex",[45,61939,51537],{"class":55},[45,61941,495],{"class":79},[45,61943,1442],{"class":55},[45,61945,61946,61948,61950,61952,61954],{"class":47,"line":2754},[45,61947,54795],{"class":79},[45,61949,51537],{"class":55},[45,61951,723],{"class":79},[45,61953,51592],{"class":51},[45,61955,1442],{"class":55},[45,61957,61958,61961,61963,61965,61968,61970],{"class":47,"line":2760},[45,61959,61960],{"class":79},"      transition",[45,61962,51537],{"class":55},[45,61964,28221],{"class":79},[45,61966,61967],{"class":79}," 0.5",[45,61969,972],{"class":51},[45,61971,1442],{"class":55},[45,61973,61974,61976,61978,61980,61982],{"class":47,"line":2766},[45,61975,54885],{"class":79},[45,61977,51537],{"class":55},[45,61979,1228],{"class":79},[45,61981,51592],{"class":51},[45,61983,1442],{"class":55},[45,61985,61986],{"class":47,"line":2771},[45,61987,2337],{"class":55},[45,61989,61990],{"class":47,"line":8098},[45,61991,2550],{"emptyLinePlaceholder":207},[45,61993,61994,61996,61998,62001],{"class":47,"line":8122},[45,61995,61704],{"class":69},[45,61997,61873],{"class":51400},[45,61999,62000],{"class":69},":focus",[45,62002,15721],{"class":55},[45,62004,62005,62007,62009,62012],{"class":47,"line":8127},[45,62006,61891],{"class":79},[45,62008,51537],{"class":55},[45,62010,62011],{"class":79},"#e4e4e4",[45,62013,1442],{"class":55},[45,62015,62016,62018,62020,62022],{"class":47,"line":8133},[45,62017,61821],{"class":79},[45,62019,51537],{"class":55},[45,62021,60942],{"class":79},[45,62023,1442],{"class":55},[45,62025,62026,62028,62030,62032,62034],{"class":47,"line":8160},[45,62027,54885],{"class":79},[45,62029,51537],{"class":55},[45,62031,933],{"class":79},[45,62033,51592],{"class":51},[45,62035,1442],{"class":55},[45,62037,62038],{"class":47,"line":8165},[45,62039,2337],{"class":55},[45,62041,62042],{"class":47,"line":8171},[45,62043,2550],{"emptyLinePlaceholder":207},[45,62045,62046,62048,62050],{"class":47,"line":8183},[45,62047,61704],{"class":69},[45,62049,57567],{"class":51400},[45,62051,15721],{"class":55},[45,62053,62054,62056,62058,62061],{"class":47,"line":8195},[45,62055,61821],{"class":79},[45,62057,51537],{"class":55},[45,62059,62060],{"class":79},"#00aeec",[45,62062,1442],{"class":55},[45,62064,62065,62067,62069,62071],{"class":47,"line":8207},[45,62066,57516],{"class":79},[45,62068,51537],{"class":55},[45,62070,60942],{"class":79},[45,62072,1442],{"class":55},[45,62074,62075,62078,62080,62082],{"class":47,"line":9866},[45,62076,62077],{"class":79},"      border",[45,62079,51537],{"class":55},[45,62081,54837],{"class":79},[45,62083,1442],{"class":55},[45,62085,62086,62088,62090,62092,62094],{"class":47,"line":9890},[45,62087,55234],{"class":79},[45,62089,51537],{"class":55},[45,62091,570],{"class":79},[45,62093,51592],{"class":51},[45,62095,1442],{"class":55},[45,62097,62098,62101,62103,62105,62107],{"class":47,"line":9913},[45,62099,62100],{"class":79},"      margin-left",[45,62102,51537],{"class":55},[45,62104,723],{"class":79},[45,62106,51592],{"class":51},[45,62108,1442],{"class":55},[45,62110,62111,62113,62115,62117,62119],{"class":47,"line":9937},[45,62112,54871],{"class":79},[45,62114,51537],{"class":55},[45,62116,633],{"class":79},[45,62118,51592],{"class":51},[45,62120,1442],{"class":55},[45,62122,62123,62126,62128,62131],{"class":47,"line":9942},[45,62124,62125],{"class":79},"      cursor",[45,62127,51537],{"class":55},[45,62129,62130],{"class":79},"pointer",[45,62132,1442],{"class":55},[45,62134,62135],{"class":47,"line":9947},[45,62136,2337],{"class":55},[45,62138,62139],{"class":47,"line":9952},[45,62140,2550],{"emptyLinePlaceholder":207},[45,62142,62143,62145,62148],{"class":47,"line":9961},[45,62144,61704],{"class":69},[45,62146,62147],{"class":69}," .total",[45,62149,15721],{"class":55},[45,62151,62152,62154,62156,62158,62160],{"class":47,"line":9966},[45,62153,61850],{"class":79},[45,62155,51537],{"class":55},[45,62157,889],{"class":79},[45,62159,51592],{"class":51},[45,62161,1442],{"class":55},[45,62163,62164,62166,62168,62171],{"class":47,"line":9972},[45,62165,57516],{"class":79},[45,62167,51537],{"class":55},[45,62169,62170],{"class":79},"#999",[45,62172,1442],{"class":55},[45,62174,62175,62178,62180,62182,62184],{"class":47,"line":9993},[45,62176,62177],{"class":79},"      margin-top",[45,62179,51537],{"class":55},[45,62181,596],{"class":79},[45,62183,51592],{"class":51},[45,62185,1442],{"class":55},[45,62187,62188,62191,62193,62195],{"class":47,"line":9999},[45,62189,62190],{"class":79},"      opacity",[45,62192,51537],{"class":55},[45,62194,469],{"class":79},[45,62196,1442],{"class":55},[45,62198,62199,62201,62203,62205,62207,62209],{"class":47,"line":10013},[45,62200,61960],{"class":79},[45,62202,51537],{"class":55},[45,62204,28221],{"class":79},[45,62206,61967],{"class":79},[45,62208,972],{"class":51},[45,62210,1442],{"class":55},[45,62212,62213],{"class":47,"line":10019},[45,62214,2337],{"class":55},[45,62216,62217],{"class":47,"line":10046},[45,62218,2550],{"emptyLinePlaceholder":207},[45,62220,62221,62224],{"class":47,"line":10055},[45,62222,62223],{"class":69},"    .list",[45,62225,15721],{"class":55},[45,62227,62228,62230,62232,62234,62236],{"class":47,"line":10061},[45,62229,61711],{"class":79},[45,62231,51537],{"class":55},[45,62233,4137],{"class":79},[45,62235,51592],{"class":51},[45,62237,1442],{"class":55},[45,62239,62240,62242,62244,62246,62248],{"class":47,"line":10069},[45,62241,61724],{"class":79},[45,62243,51537],{"class":55},[45,62245,61729],{"class":79},[45,62247,51592],{"class":51},[45,62249,1442],{"class":55},[45,62251,62252,62254,62256,62258],{"class":47,"line":10074},[45,62253,55109],{"class":79},[45,62255,51537],{"class":55},[45,62257,51577],{"class":79},[45,62259,1442],{"class":55},[45,62261,62262],{"class":47,"line":16753},[45,62263,2337],{"class":55},[45,62265,62266],{"class":47,"line":16759},[45,62267,2550],{"emptyLinePlaceholder":207},[45,62269,62270,62272,62275],{"class":47,"line":16782},[45,62271,62223],{"class":69},[45,62273,62274],{"class":69}," .item",[45,62276,15721],{"class":55},[45,62278,62279,62281,62283,62285,62287],{"class":47,"line":16788},[45,62280,54871],{"class":79},[45,62282,51537],{"class":55},[45,62284,588],{"class":79},[45,62286,605],{"class":51},[45,62288,1442],{"class":55},[45,62290,62291,62293,62295,62297],{"class":47,"line":16811},[45,62292,55109],{"class":79},[45,62294,51537],{"class":55},[45,62296,51577],{"class":79},[45,62298,1442],{"class":55},[45,62300,62301],{"class":47,"line":16825},[45,62302,2337],{"class":55},[45,62304,62305],{"class":47,"line":16845},[45,62306,2550],{"emptyLinePlaceholder":207},[45,62308,62309,62311,62313,62316],{"class":47,"line":16851},[45,62310,62223],{"class":69},[45,62312,62274],{"class":69},[45,62314,62315],{"class":69}," .info",[45,62317,15721],{"class":55},[45,62319,62320,62322,62324,62326],{"class":47,"line":16862},[45,62321,61937],{"class":79},[45,62323,51537],{"class":55},[45,62325,495],{"class":79},[45,62327,1442],{"class":55},[45,62329,62330,62333,62335,62337,62339,62342,62345],{"class":47,"line":16885},[45,62331,62332],{"class":79},"      border-bottom",[45,62334,51537],{"class":55},[45,62336,495],{"class":79},[45,62338,51592],{"class":51},[45,62340,62341],{"class":79}," dashed",[45,62343,62344],{"class":79}," #e4e4e4",[45,62346,1442],{"class":55},[45,62348,62349,62352,62354,62356,62358],{"class":47,"line":16907},[45,62350,62351],{"class":79},"      padding-bottom",[45,62353,51537],{"class":55},[45,62355,723],{"class":79},[45,62357,51592],{"class":51},[45,62359,1442],{"class":55},[45,62361,62362],{"class":47,"line":16912},[45,62363,2337],{"class":55},[45,62365,62366],{"class":47,"line":16918},[45,62367,2550],{"emptyLinePlaceholder":207},[45,62369,62370,62372,62374,62376],{"class":47,"line":16932},[45,62371,62223],{"class":69},[45,62373,62274],{"class":69},[45,62375,6975],{"class":51400},[45,62377,15721],{"class":55},[45,62379,62380,62382,62384,62386],{"class":47,"line":16945},[45,62381,54806],{"class":79},[45,62383,51537],{"class":55},[45,62385,469],{"class":79},[45,62387,1442],{"class":55},[45,62389,62390],{"class":47,"line":16950},[45,62391,2337],{"class":55},[45,62393,62394],{"class":47,"line":16964},[45,62395,2550],{"emptyLinePlaceholder":207},[45,62397,62398,62400,62402,62405],{"class":47,"line":16969},[45,62399,62223],{"class":69},[45,62401,62274],{"class":69},[45,62403,62404],{"class":69}," .name",[45,62406,15721],{"class":55},[45,62408,62409,62411,62413,62416],{"class":47,"line":16975},[45,62410,57516],{"class":79},[45,62412,51537],{"class":55},[45,62414,62415],{"class":79},"#FB7299",[45,62417,1442],{"class":55},[45,62419,62420,62422,62424,62426,62428],{"class":47,"line":16980},[45,62421,55022],{"class":79},[45,62423,51537],{"class":55},[45,62425,826],{"class":79},[45,62427,51592],{"class":51},[45,62429,1442],{"class":55},[45,62431,62432,62435,62437,62440],{"class":47,"line":16994},[45,62433,62434],{"class":79},"      font-weight",[45,62436,51537],{"class":55},[45,62438,62439],{"class":79},"bold",[45,62441,1442],{"class":55},[45,62443,62444],{"class":47,"line":16999},[45,62445,2337],{"class":55},[45,62447,62448],{"class":47,"line":17004},[45,62449,2550],{"emptyLinePlaceholder":207},[45,62451,62452,62454,62456,62459],{"class":47,"line":17018},[45,62453,62223],{"class":69},[45,62455,62274],{"class":69},[45,62457,62458],{"class":69}," .text",[45,62460,15721],{"class":55},[45,62462,62463,62465,62467,62470],{"class":47,"line":17030},[45,62464,57516],{"class":79},[45,62466,51537],{"class":55},[45,62468,62469],{"class":79},"#333",[45,62471,1442],{"class":55},[45,62473,62474,62476,62478,62480,62482,62484],{"class":47,"line":17035},[45,62475,54795],{"class":79},[45,62477,51537],{"class":55},[45,62479,723],{"class":79},[45,62481,51592],{"class":51},[45,62483,4243],{"class":79},[45,62485,1442],{"class":55},[45,62487,62488],{"class":47,"line":17048},[45,62489,2337],{"class":55},[45,62491,62492],{"class":47,"line":17053},[45,62493,2550],{"emptyLinePlaceholder":207},[45,62495,62496,62498,62500,62503],{"class":47,"line":17058},[45,62497,62223],{"class":69},[45,62499,62274],{"class":69},[45,62501,62502],{"class":69}," .time",[45,62504,15721],{"class":55},[45,62506,62507,62509,62511,62513],{"class":47,"line":17063},[45,62508,57516],{"class":79},[45,62510,51537],{"class":55},[45,62512,62170],{"class":79},[45,62514,1442],{"class":55},[45,62516,62517,62519,62521,62523,62525],{"class":47,"line":17076},[45,62518,55022],{"class":79},[45,62520,51537],{"class":55},[45,62522,775],{"class":79},[45,62524,51592],{"class":51},[45,62526,1442],{"class":55},[45,62528,62529],{"class":47,"line":17081},[45,62530,2337],{"class":55},[45,62532,62533,62535,62537],{"class":47,"line":32733},[45,62534,52517],{"class":55},[45,62536,196],{"class":51400},[45,62538,51407],{"class":55},[45,62540,62541,62543,62545],{"class":47,"line":32739},[45,62542,51885],{"class":55},[45,62544,51434],{"class":51400},[45,62546,51407],{"class":55},[45,62548,62549],{"class":47,"line":32745},[45,62550,2550],{"emptyLinePlaceholder":207},[45,62552,62553,62555,62557],{"class":47,"line":32751},[45,62554,1187],{"class":55},[45,62556,51900],{"class":51400},[45,62558,51407],{"class":55},[45,62560,62561,62563,62565,62567,62569,62572],{"class":47,"line":32757},[45,62562,52244],{"class":55},[45,62564,51711],{"class":51400},[45,62566,53586],{"class":69},[45,62568,59],{"class":55},[45,62570,62571],{"class":62},"\"wrapper\"",[45,62573,51407],{"class":55},[45,62575,62576,62578,62580,62582,62584,62587,62589,62591],{"class":47,"line":32768},[45,62577,51441],{"class":55},[45,62579,718],{"class":51400},[45,62581,53586],{"class":69},[45,62583,59],{"class":55},[45,62585,62586],{"class":62},"\"avatar\"",[45,62588,55414],{"class":55},[45,62590,718],{"class":51400},[45,62592,51407],{"class":55},[45,62594,62595,62597,62599,62601,62603,62606,62608,62610,62613,62615,62617,62619,62622,62624,62627,62629,62631],{"class":47,"line":32774},[45,62596,51441],{"class":55},[45,62598,54388],{"class":51400},[45,62600,15108],{"class":69},[45,62602,59],{"class":55},[45,62604,62605],{"class":62},"\"tx\"",[45,62607,61120],{"class":69},[45,62609,59],{"class":55},[45,62611,62612],{"class":62},"\"发一条友善的评论\"",[45,62614,54411],{"class":69},[45,62616,59],{"class":55},[45,62618,3851],{"class":62},[45,62620,62621],{"class":69}," maxlength",[45,62623,59],{"class":55},[45,62625,62626],{"class":62},"\"200\"",[45,62628,55414],{"class":55},[45,62630,54388],{"class":51400},[45,62632,51407],{"class":55},[45,62634,62635,62637,62639,62642,62644],{"class":47,"line":32794},[45,62636,51441],{"class":55},[45,62638,53987],{"class":51400},[45,62640,62641],{"class":55},">发布\u003C\u002F",[45,62643,53987],{"class":51400},[45,62645,51407],{"class":55},[45,62647,62648,62650,62652],{"class":47,"line":32800},[45,62649,52517],{"class":55},[45,62651,51711],{"class":51400},[45,62653,51407],{"class":55},[45,62655,62656,62658,62660,62662,62664,62666],{"class":47,"line":32811},[45,62657,52244],{"class":55},[45,62659,51711],{"class":51400},[45,62661,53586],{"class":69},[45,62663,59],{"class":55},[45,62665,62571],{"class":62},[45,62667,51407],{"class":55},[45,62669,62670,62672,62674,62676,62678,62681,62684,62686],{"class":47,"line":32817},[45,62671,51441],{"class":55},[45,62673,45],{"class":51400},[45,62675,53586],{"class":69},[45,62677,59],{"class":55},[45,62679,62680],{"class":62},"\"total\"",[45,62682,62683],{"class":55},">0\u002F200字\u003C\u002F",[45,62685,45],{"class":51400},[45,62687,51407],{"class":55},[45,62689,62690,62692,62694],{"class":47,"line":32823},[45,62691,52517],{"class":55},[45,62693,51711],{"class":51400},[45,62695,51407],{"class":55},[45,62697,62698,62700,62702,62704,62706,62709],{"class":47,"line":32829},[45,62699,52244],{"class":55},[45,62701,51711],{"class":51400},[45,62703,53586],{"class":69},[45,62705,59],{"class":55},[45,62707,62708],{"class":62},"\"list\"",[45,62710,51407],{"class":55},[45,62712,62713,62715,62717,62719,62721,62724,62727,62729,62732],{"class":47,"line":32835},[45,62714,51441],{"class":55},[45,62716,51711],{"class":51400},[45,62718,53586],{"class":69},[45,62720,59],{"class":55},[45,62722,62723],{"class":62},"\"item\"",[45,62725,62726],{"class":69}," style",[45,62728,59],{"class":55},[45,62730,62731],{"class":62},"\"display: none;\"",[45,62733,51407],{"class":55},[45,62735,62736,62738,62740,62742,62744,62746,62748,62750],{"class":47,"line":32841},[45,62737,55334],{"class":55},[45,62739,718],{"class":51400},[45,62741,53586],{"class":69},[45,62743,59],{"class":55},[45,62745,62586],{"class":62},[45,62747,55414],{"class":55},[45,62749,718],{"class":51400},[45,62751,51407],{"class":55},[45,62753,62754,62756,62758,62760,62762,62765],{"class":47,"line":32847},[45,62755,55334],{"class":55},[45,62757,51711],{"class":51400},[45,62759,53586],{"class":69},[45,62761,59],{"class":55},[45,62763,62764],{"class":62},"\"info\"",[45,62766,51407],{"class":55},[45,62768,62769,62771,62773,62775,62777,62780,62783,62785],{"class":47,"line":32853},[45,62770,55402],{"class":55},[45,62772,20],{"class":51400},[45,62774,53586],{"class":69},[45,62776,59],{"class":55},[45,62778,62779],{"class":62},"\"name\"",[45,62781,62782],{"class":55},">清风徐来\u003C\u002F",[45,62784,20],{"class":51400},[45,62786,51407],{"class":55},[45,62788,62789,62791,62793,62795,62797,62800,62803,62805],{"class":47,"line":32873},[45,62790,55402],{"class":55},[45,62792,20],{"class":51400},[45,62794,53586],{"class":69},[45,62796,59],{"class":55},[45,62798,62799],{"class":62},"\"text\"",[45,62801,62802],{"class":55},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[45,62804,20],{"class":51400},[45,62806,51407],{"class":55},[45,62808,62809,62811,62813,62815,62817,62820,62823,62825],{"class":47,"line":32879},[45,62810,55402],{"class":55},[45,62812,20],{"class":51400},[45,62814,53586],{"class":69},[45,62816,59],{"class":55},[45,62818,62819],{"class":62},"\"time\"",[45,62821,62822],{"class":55},">2022-10-10 20:29:21\u003C\u002F",[45,62824,20],{"class":51400},[45,62826,51407],{"class":55},[45,62828,62829,62831,62833],{"class":47,"line":32895},[45,62830,55507],{"class":55},[45,62832,51711],{"class":51400},[45,62834,51407],{"class":55},[45,62836,62837,62839,62841],{"class":47,"line":32901},[45,62838,51876],{"class":55},[45,62840,51711],{"class":51400},[45,62842,51407],{"class":55},[45,62844,62845,62847,62849],{"class":47,"line":32915},[45,62846,52517],{"class":55},[45,62848,51711],{"class":51400},[45,62850,51407],{"class":55},[45,62852,62853,62855,62857],{"class":47,"line":32921},[45,62854,52244],{"class":55},[45,62856,51913],{"class":51400},[45,62858,51407],{"class":55},[45,62860,62861,62863,62866,62868,62870,62872,62874,62877],{"class":47,"line":32936},[45,62862,11370],{"class":51},[45,62864,62865],{"class":79}," tx",[45,62867,13713],{"class":51},[45,62869,54496],{"class":55},[45,62871,54499],{"class":69},[45,62873,282],{"class":55},[45,62875,62876],{"class":62},"'#tx'",[45,62878,139],{"class":55},[45,62880,62881,62883,62886,62888,62890,62892,62894,62897],{"class":47,"line":32942},[45,62882,11370],{"class":51},[45,62884,62885],{"class":79}," total",[45,62887,13713],{"class":51},[45,62889,54496],{"class":55},[45,62891,54499],{"class":69},[45,62893,282],{"class":55},[45,62895,62896],{"class":62},"'.total'",[45,62898,139],{"class":55},[45,62900,62901],{"class":47,"line":32951},[45,62902,62903],{"class":337},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[45,62905,62906,62909,62911,62913,62915,62917,62919],{"class":47,"line":32957},[45,62907,62908],{"class":55},"    tx.",[45,62910,57913],{"class":69},[45,62912,282],{"class":55},[45,62914,61427],{"class":62},[45,62916,12584],{"class":55},[45,62918,54549],{"class":51},[45,62920,54552],{"class":55},[45,62922,62923,62926,62928],{"class":47,"line":32966},[45,62924,62925],{"class":55},"      total.style.opacity ",[45,62927,59],{"class":51},[45,62929,55799],{"class":79},[45,62931,62932],{"class":47,"line":32972},[45,62933,33561],{"class":55},[45,62935,62936],{"class":47,"line":32978},[45,62937,62938],{"class":337},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[45,62940,62941,62943,62945,62947,62949,62951,62953],{"class":47,"line":32987},[45,62942,62908],{"class":55},[45,62944,57913],{"class":69},[45,62946,282],{"class":55},[45,62948,61488],{"class":62},[45,62950,12584],{"class":55},[45,62952,54549],{"class":51},[45,62954,54552],{"class":55},[45,62956,62957,62959,62961],{"class":47,"line":32993},[45,62958,62925],{"class":55},[45,62960,59],{"class":51},[45,62962,47433],{"class":79},[45,62964,62965],{"class":47,"line":33004},[45,62966,33561],{"class":55},[45,62968,62969],{"class":47,"line":33010},[45,62970,62971],{"class":337},"    \u002F\u002F 3. 检测用户输入\n",[45,62973,62974,62976,62978,62980,62983,62985,62987],{"class":47,"line":33029},[45,62975,62908],{"class":55},[45,62977,57913],{"class":69},[45,62979,282],{"class":55},[45,62981,62982],{"class":62},"'input'",[45,62984,12584],{"class":55},[45,62986,54549],{"class":51},[45,62988,54552],{"class":55},[45,62990,62991],{"class":47,"line":33035},[45,62992,62993],{"class":337},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[45,62995,62996,62999,63001,63004,63007,63009,63012,63014,63016],{"class":47,"line":33046},[45,62997,62998],{"class":55},"      total.innerHTML ",[45,63000,59],{"class":51},[45,63002,63003],{"class":62}," `${",[45,63005,63006],{"class":55},"tx",[45,63008,835],{"class":62},[45,63010,63011],{"class":55},"value",[45,63013,835],{"class":62},[45,63015,52068],{"class":79},[45,63017,63018],{"class":62},"}\u002F200字`\n",[45,63020,63021],{"class":47,"line":33052},[45,63022,33561],{"class":55},[45,63024,63025],{"class":47,"line":33072},[45,63026,2550],{"emptyLinePlaceholder":207},[45,63028,63029],{"class":47,"line":33088},[45,63030,63031],{"class":337},"    \u002F\u002F const str = 'andy'\n",[45,63033,63034],{"class":47,"line":33094},[45,63035,63036],{"class":337},"    \u002F\u002F console.log(str.length)\n",[45,63038,63039,63041,63043],{"class":47,"line":33108},[45,63040,52517],{"class":55},[45,63042,51913],{"class":51400},[45,63044,51407],{"class":55},[45,63046,63047,63049,63051],{"class":47,"line":33114},[45,63048,51885],{"class":55},[45,63050,51900],{"class":51400},[45,63052,51407],{"class":55},[45,63054,63055],{"class":47,"line":33120},[45,63056,2550],{"emptyLinePlaceholder":207},[45,63058,63059,63061,63063],{"class":47,"line":33131},[45,63060,51885],{"class":55},[45,63062,50735],{"class":51400},[45,63064,51407],{"class":55},[22147,63066,63068],{"id":63067},"_3254-change事件","3.2.5.4 change事件",[20,63070,63071],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[20,63073,63074],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[20,63076,63077],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[36,63079,63081],{"className":50733,"code":63080,"language":50735,"meta":25,"style":25},"\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",[42,63082,63083,63093,63107,63111,63119,63133,63153,63165,63173,63177,63185,63199,63207,63225,63243,63255,63259,63267,63275,63279],{"__ignoreMap":25},[45,63084,63085,63087,63089,63091],{"class":47,"line":48},[45,63086,51397],{"class":55},[45,63088,51401],{"class":51400},[45,63090,51404],{"class":69},[45,63092,51407],{"class":55},[45,63094,63095,63097,63099,63101,63103,63105],{"class":47,"line":66},[45,63096,1187],{"class":55},[45,63098,50735],{"class":51400},[45,63100,51416],{"class":69},[45,63102,59],{"class":55},[45,63104,51421],{"class":62},[45,63106,51407],{"class":55},[45,63108,63109],{"class":47,"line":1331},[45,63110,2550],{"emptyLinePlaceholder":207},[45,63112,63113,63115,63117],{"class":47,"line":1346},[45,63114,1187],{"class":55},[45,63116,51434],{"class":51400},[45,63118,51407],{"class":55},[45,63120,63121,63123,63125,63127,63129,63131],{"class":47,"line":1352},[45,63122,52244],{"class":55},[45,63124,51444],{"class":51400},[45,63126,51447],{"class":69},[45,63128,59],{"class":55},[45,63130,51452],{"class":62},[45,63132,51407],{"class":55},[45,63134,63135,63137,63139,63141,63143,63145,63147,63149,63151],{"class":47,"line":1366},[45,63136,52244],{"class":55},[45,63138,51444],{"class":51400},[45,63140,15069],{"class":69},[45,63142,59],{"class":55},[45,63144,51491],{"class":62},[45,63146,51471],{"class":69},[45,63148,59],{"class":55},[45,63150,51498],{"class":62},[45,63152,51407],{"class":55},[45,63154,63155,63157,63159,63161,63163],{"class":47,"line":1372},[45,63156,52244],{"class":55},[45,63158,51507],{"class":51400},[45,63160,51510],{"class":55},[45,63162,51507],{"class":51400},[45,63164,51407],{"class":55},[45,63166,63167,63169,63171],{"class":47,"line":1463},[45,63168,51885],{"class":55},[45,63170,51434],{"class":51400},[45,63172,51407],{"class":55},[45,63174,63175],{"class":47,"line":1469},[45,63176,2550],{"emptyLinePlaceholder":207},[45,63178,63179,63181,63183],{"class":47,"line":1481},[45,63180,1187],{"class":55},[45,63182,51900],{"class":51400},[45,63184,51407],{"class":55},[45,63186,63187,63189,63191,63193,63195,63197],{"class":47,"line":1763},[45,63188,52244],{"class":55},[45,63190,53921],{"class":51400},[45,63192,53924],{"class":69},[45,63194,59],{"class":55},[45,63196,62799],{"class":62},[45,63198,51407],{"class":55},[45,63200,63201,63203,63205],{"class":47,"line":1768},[45,63202,52244],{"class":55},[45,63204,51913],{"class":51400},[45,63206,51407],{"class":55},[45,63208,63209,63211,63213,63215,63217,63219,63221,63223],{"class":47,"line":1774},[45,63210,11370],{"class":51},[45,63212,60705],{"class":79},[45,63214,13713],{"class":51},[45,63216,54496],{"class":55},[45,63218,54499],{"class":69},[45,63220,282],{"class":55},[45,63222,62982],{"class":62},[45,63224,139],{"class":55},[45,63226,63227,63230,63232,63234,63237,63239,63241],{"class":47,"line":1779},[45,63228,63229],{"class":55},"    input.",[45,63231,57913],{"class":69},[45,63233,282],{"class":55},[45,63235,63236],{"class":62},"'change'",[45,63238,12584],{"class":55},[45,63240,54549],{"class":51},[45,63242,54552],{"class":55},[45,63244,63245,63247,63249,63251,63253],{"class":47,"line":1793},[45,63246,58344],{"class":55},[45,63248,58347],{"class":69},[45,63250,282],{"class":55},[45,63252,870],{"class":79},[45,63254,139],{"class":55},[45,63256,63257],{"class":47,"line":1798},[45,63258,33561],{"class":55},[45,63260,63261,63263,63265],{"class":47,"line":1804},[45,63262,52517],{"class":55},[45,63264,51913],{"class":51400},[45,63266,51407],{"class":55},[45,63268,63269,63271,63273],{"class":47,"line":1825},[45,63270,51885],{"class":55},[45,63272,51900],{"class":51400},[45,63274,51407],{"class":55},[45,63276,63277],{"class":47,"line":1830},[45,63278,2550],{"emptyLinePlaceholder":207},[45,63280,63281,63283,63285],{"class":47,"line":1844},[45,63282,51885],{"class":55},[45,63284,50735],{"class":51400},[45,63286,51407],{"class":55},[20,63288,63289],{},"总结：内容发生改变才回去触发",[249,63291,63293],{"id":63292},"_326-事件对象","3.2.6 事件对象",[22147,63295,63297],{"id":63296},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[20,63299,63300],{},[23,63301],{"alt":25,"src":63302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[20,63304,63305],{},[23,63306],{"alt":25,"src":63307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[20,63309,63310],{},"点击一次，就输出了事件对象，它是个对象",[20,63312,63313],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[20,63315,63316],{},[23,63317],{"alt":25,"src":63318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22147,63320,63322],{"id":63321},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[20,63324,63325],{},[23,63326],{"alt":25,"src":63327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[20,63329,63330],{},"实现按特殊字符才是实现打印输出效果：",[36,63332,63334],{"className":53167,"code":63333,"language":53169,"meta":25,"style":25},"\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",[42,63335,63336,63344,63349,63363,63371,63376,63381,63386,63391,63396,63401,63406,63411,63416,63420,63424,63432],{"__ignoreMap":25},[45,63337,63338,63340,63342],{"class":47,"line":48},[45,63339,1187],{"class":55},[45,63341,51900],{"class":51400},[45,63343,51407],{"class":55},[45,63345,63346],{"class":47,"line":66},[45,63347,63348],{"class":337},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[45,63350,63351,63353,63355,63357,63359,63361],{"class":47,"line":1331},[45,63352,52244],{"class":55},[45,63354,53921],{"class":51400},[45,63356,53924],{"class":69},[45,63358,59],{"class":55},[45,63360,62799],{"class":62},[45,63362,51407],{"class":55},[45,63364,63365,63367,63369],{"class":47,"line":1346},[45,63366,52244],{"class":55},[45,63368,51913],{"class":51400},[45,63370,51407],{"class":55},[45,63372,63373],{"class":47,"line":1352},[45,63374,63375],{"class":55},"    \u002F\u002F const btn = document.querySelector('button')\n",[45,63377,63378],{"class":47,"line":1366},[45,63379,63380],{"class":55},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[45,63382,63383],{"class":47,"line":1372},[45,63384,63385],{"class":55},"    \u002F\u002F   console.log(e);\n",[45,63387,63388],{"class":47,"line":1463},[45,63389,63390],{"class":55},"    \u002F\u002F })\n",[45,63392,63393],{"class":47,"line":1469},[45,63394,63395],{"class":55},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[45,63397,63398],{"class":47,"line":1481},[45,63399,63400],{"class":55},"    const input = document.querySelector('input')\n",[45,63402,63403],{"class":47,"line":1763},[45,63404,63405],{"class":55},"    input.addEventListener('keyup', function (e) {\n",[45,63407,63408],{"class":47,"line":1768},[45,63409,63410],{"class":55},"      if (e.key === 'Enter') {\n",[45,63412,63413],{"class":47,"line":1774},[45,63414,63415],{"class":55},"        console.log('我按下了回车键')\n",[45,63417,63418],{"class":47,"line":1779},[45,63419,52498],{"class":55},[45,63421,63422],{"class":47,"line":1793},[45,63423,33561],{"class":55},[45,63425,63426,63428,63430],{"class":47,"line":1798},[45,63427,52517],{"class":55},[45,63429,51913],{"class":51400},[45,63431,51407],{"class":55},[45,63433,63434,63436,63438],{"class":47,"line":1804},[45,63435,51885],{"class":55},[45,63437,51900],{"class":51400},[45,63439,51407],{"class":55},[22147,63441,63443],{"id":63442},"_3263-trim方法","3.2.6.3 trim方法",[20,63445,63446],{},[23,63447],{"alt":25,"src":63448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[20,63450,63451],{},[23,63452],{"alt":25,"src":63453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[20,63455,63456],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[20,63458,63459],{},"str.trim()",[249,63461,63463],{"id":63462},"_327-环境对象","3.2.7 环境对象",[20,63465,63466],{},[23,63467],{"alt":25,"src":63468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[20,63470,63471],{},[23,63472],{"alt":25,"src":63473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[20,63475,63476],{},[23,63477],{"alt":25,"src":63478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[20,63480,63481],{},"实际函数调用是window.fn()",[20,63483,63484],{},"普通函数里面this指向的是window",[166,63486,63487,63490,63493],{},[169,63488,63489],{},"在普通函数下，this指向的是window",[169,63491,63492],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[169,63494,63495],{},"箭头函数没有this",[20,63497,63498],{},"粗略记法就是：谁调用，this就指向谁",[20,63500,63501],{},[23,63502],{"alt":25,"src":63503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[20,63505,63506],{},[23,63507],{"alt":25,"src":63508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[20,63510,63511],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[20,63513,63514],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[36,63516,63518],{"className":53167,"code":63517,"language":53169,"meta":25,"style":25},"\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",[42,63519,63520,63528,63540,63548,63553,63558,63563,63568,63572,63580],{"__ignoreMap":25},[45,63521,63522,63524,63526],{"class":47,"line":48},[45,63523,1187],{"class":55},[45,63525,51900],{"class":51400},[45,63527,51407],{"class":55},[45,63529,63530,63532,63534,63536,63538],{"class":47,"line":66},[45,63531,52244],{"class":55},[45,63533,53987],{"class":51400},[45,63535,53993],{"class":55},[45,63537,53987],{"class":51400},[45,63539,51407],{"class":55},[45,63541,63542,63544,63546],{"class":47,"line":1331},[45,63543,52244],{"class":55},[45,63545,51913],{"class":51400},[45,63547,51407],{"class":55},[45,63549,63550],{"class":47,"line":1346},[45,63551,63552],{"class":55},"    const button = document.querySelector('button')\n",[45,63554,63555],{"class":47,"line":1352},[45,63556,63557],{"class":55},"    button.addEventListener('click', function () {\n",[45,63559,63560],{"class":47,"line":1366},[45,63561,63562],{"class":55},"      \u002F\u002F console.log(this);\n",[45,63564,63565],{"class":47,"line":1372},[45,63566,63567],{"class":55},"      this.style.color = 'pink'\n",[45,63569,63570],{"class":47,"line":1463},[45,63571,33561],{"class":55},[45,63573,63574,63576,63578],{"class":47,"line":1469},[45,63575,52517],{"class":55},[45,63577,51913],{"class":51400},[45,63579,51407],{"class":55},[45,63581,63582,63584,63586],{"class":47,"line":1481},[45,63583,51885],{"class":55},[45,63585,51900],{"class":51400},[45,63587,51407],{"class":55},[249,63589,63591],{"id":63590},"_328-回调函数","3.2.8 回调函数",[20,63593,63594],{},[23,63595],{"alt":25,"src":63596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[20,63598,63599],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[20,63601,11481],{},[166,63603,63604,63607,63610],{},[169,63605,63606],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[169,63608,63609],{},"回调函数本质还是函数，只不过把它当成参数使用",[169,63611,63612],{},"使用匿名函数做为回调函数比较常见",[249,63614,63616],{"id":63615},"_329-tab栏切换","3.2.9 tab栏切换",[20,63618,63619],{},[23,63620],{"alt":25,"src":63621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[36,63623,63625],{"className":50733,"code":63624,"language":50735,"meta":25,"style":25},"\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",[42,63626,63627,63637,63651,63655,63663,63677,63697,63717,63730,63738,63744,63754,63764,63768,63772,63779,63792,63805,63817,63833,63837,63841,63848,63860,63872,63884,63894,63904,63908,63912,63921,63933,63944,63956,63960,63964,63972,63982,63992,64002,64006,64010,64020,64034,64046,64050,64054,64066,64077,64094,64104,64108,64112,64127,64138,64148,64152,64156,64163,64178,64182,64186,64194,64204,64208,64212,64221,64231,64235,64243,64251,64255,64263,64278,64293,64306,64314,64348,64375,64402,64429,64456,64464,64472,64487,64524,64559,64594,64629,64664,64672,64680,64688,64693,64698,64718,64723,64752,64757,64762,64780,64785,64790,64795,64817,64822,64838,64842,64847,64852,64873,64878,64907,64911,64916,64920,64928,64936,64940],{"__ignoreMap":25},[45,63628,63629,63631,63633,63635],{"class":47,"line":48},[45,63630,51397],{"class":55},[45,63632,51401],{"class":51400},[45,63634,51404],{"class":69},[45,63636,51407],{"class":55},[45,63638,63639,63641,63643,63645,63647,63649],{"class":47,"line":66},[45,63640,1187],{"class":55},[45,63642,50735],{"class":51400},[45,63644,51416],{"class":69},[45,63646,59],{"class":55},[45,63648,51421],{"class":62},[45,63650,51407],{"class":55},[45,63652,63653],{"class":47,"line":1331},[45,63654,2550],{"emptyLinePlaceholder":207},[45,63656,63657,63659,63661],{"class":47,"line":1346},[45,63658,1187],{"class":55},[45,63660,51434],{"class":51400},[45,63662,51407],{"class":55},[45,63664,63665,63667,63669,63671,63673,63675],{"class":47,"line":1352},[45,63666,52244],{"class":55},[45,63668,51444],{"class":51400},[45,63670,51447],{"class":69},[45,63672,59],{"class":55},[45,63674,51452],{"class":62},[45,63676,59227],{"class":55},[45,63678,63679,63681,63683,63685,63687,63689,63691,63693,63695],{"class":47,"line":1366},[45,63680,52244],{"class":55},[45,63682,51444],{"class":51400},[45,63684,51463],{"class":69},[45,63686,59],{"class":55},[45,63688,51468],{"class":62},[45,63690,51471],{"class":69},[45,63692,59],{"class":55},[45,63694,51476],{"class":62},[45,63696,59227],{"class":55},[45,63698,63699,63701,63703,63705,63707,63709,63711,63713,63715],{"class":47,"line":1372},[45,63700,52244],{"class":55},[45,63702,51444],{"class":51400},[45,63704,15069],{"class":69},[45,63706,59],{"class":55},[45,63708,51491],{"class":62},[45,63710,51471],{"class":69},[45,63712,59],{"class":55},[45,63714,51498],{"class":62},[45,63716,59227],{"class":55},[45,63718,63719,63721,63723,63726,63728],{"class":47,"line":1463},[45,63720,52244],{"class":55},[45,63722,51507],{"class":51400},[45,63724,63725],{"class":55},">tab栏切换\u003C\u002F",[45,63727,51507],{"class":51400},[45,63729,51407],{"class":55},[45,63731,63732,63734,63736],{"class":47,"line":1469},[45,63733,52244],{"class":55},[45,63735,196],{"class":51400},[45,63737,51407],{"class":55},[45,63739,63740,63742],{"class":47,"line":1481},[45,63741,6553],{"class":51400},[45,63743,15721],{"class":55},[45,63745,63746,63748,63750,63752],{"class":47,"line":1763},[45,63747,54806],{"class":79},[45,63749,51537],{"class":55},[45,63751,469],{"class":79},[45,63753,1442],{"class":55},[45,63755,63756,63758,63760,63762],{"class":47,"line":1768},[45,63757,54795],{"class":79},[45,63759,51537],{"class":55},[45,63761,469],{"class":79},[45,63763,1442],{"class":55},[45,63765,63766],{"class":47,"line":1774},[45,63767,2337],{"class":55},[45,63769,63770],{"class":47,"line":1779},[45,63771,2550],{"emptyLinePlaceholder":207},[45,63773,63774,63777],{"class":47,"line":1793},[45,63775,63776],{"class":69},"    .tab",[45,63778,15721],{"class":55},[45,63780,63781,63783,63785,63788,63790],{"class":47,"line":1798},[45,63782,54871],{"class":79},[45,63784,51537],{"class":55},[45,63786,63787],{"class":79},"590",[45,63789,51592],{"class":51},[45,63791,1442],{"class":55},[45,63793,63794,63796,63798,63801,63803],{"class":47,"line":1804},[45,63795,54885],{"class":79},[45,63797,51537],{"class":55},[45,63799,63800],{"class":79},"340",[45,63802,51592],{"class":51},[45,63804,1442],{"class":55},[45,63806,63807,63809,63811,63813,63815],{"class":47,"line":1825},[45,63808,54806],{"class":79},[45,63810,51537],{"class":55},[45,63812,977],{"class":79},[45,63814,51592],{"class":51},[45,63816,1442],{"class":55},[45,63818,63819,63821,63823,63825,63827,63829,63831],{"class":47,"line":1830},[45,63820,62077],{"class":79},[45,63822,51537],{"class":55},[45,63824,495],{"class":79},[45,63826,51592],{"class":51},[45,63828,51621],{"class":79},[45,63830,62344],{"class":79},[45,63832,1442],{"class":55},[45,63834,63835],{"class":47,"line":1844},[45,63836,2337],{"class":55},[45,63838,63839],{"class":47,"line":1849},[45,63840,2550],{"emptyLinePlaceholder":207},[45,63842,63843,63846],{"class":47,"line":1878},[45,63844,63845],{"class":69},"    .tab-nav",[45,63847,15721],{"class":55},[45,63849,63850,63852,63854,63856,63858],{"class":47,"line":1883},[45,63851,54871],{"class":79},[45,63853,51537],{"class":55},[45,63855,588],{"class":79},[45,63857,605],{"class":51},[45,63859,1442],{"class":55},[45,63861,63862,63864,63866,63868,63870],{"class":47,"line":1900},[45,63863,54885],{"class":79},[45,63865,51537],{"class":55},[45,63867,1184],{"class":79},[45,63869,51592],{"class":51},[45,63871,1442],{"class":55},[45,63873,63874,63876,63878,63880,63882],{"class":47,"line":1905},[45,63875,57459],{"class":79},[45,63877,51537],{"class":55},[45,63879,1184],{"class":79},[45,63881,51592],{"class":51},[45,63883,1442],{"class":55},[45,63885,63886,63888,63890,63892],{"class":47,"line":1910},[45,63887,55109],{"class":79},[45,63889,51537],{"class":55},[45,63891,51577],{"class":79},[45,63893,1442],{"class":55},[45,63895,63896,63898,63900,63902],{"class":47,"line":1915},[45,63897,55120],{"class":79},[45,63899,51537],{"class":55},[45,63901,51768],{"class":79},[45,63903,1442],{"class":55},[45,63905,63906],{"class":47,"line":1929},[45,63907,2337],{"class":55},[45,63909,63910],{"class":47,"line":1934},[45,63911,2550],{"emptyLinePlaceholder":207},[45,63913,63914,63916,63919],{"class":47,"line":2727},[45,63915,63845],{"class":69},[45,63917,63918],{"class":51400}," h3",[45,63920,15721],{"class":55},[45,63922,63923,63925,63927,63929,63931],{"class":47,"line":2741},[45,63924,55022],{"class":79},[45,63926,51537],{"class":55},[45,63928,1077],{"class":79},[45,63930,51592],{"class":51},[45,63932,1442],{"class":55},[45,63934,63935,63937,63939,63942],{"class":47,"line":2749},[45,63936,62434],{"class":79},[45,63938,51537],{"class":55},[45,63940,63941],{"class":79},"normal",[45,63943,1442],{"class":55},[45,63945,63946,63948,63950,63952,63954],{"class":47,"line":2754},[45,63947,62100],{"class":79},[45,63949,51537],{"class":55},[45,63951,977],{"class":79},[45,63953,51592],{"class":51},[45,63955,1442],{"class":55},[45,63957,63958],{"class":47,"line":2760},[45,63959,2337],{"class":55},[45,63961,63962],{"class":47,"line":2766},[45,63963,2550],{"emptyLinePlaceholder":207},[45,63965,63966,63968,63970],{"class":47,"line":2771},[45,63967,63845],{"class":69},[45,63969,61392],{"class":51400},[45,63971,15721],{"class":55},[45,63973,63974,63976,63978,63980],{"class":47,"line":8098},[45,63975,54832],{"class":79},[45,63977,51537],{"class":55},[45,63979,54837],{"class":79},[45,63981,1442],{"class":55},[45,63983,63984,63986,63988,63990],{"class":47,"line":8122},[45,63985,55109],{"class":79},[45,63987,51537],{"class":55},[45,63989,51577],{"class":79},[45,63991,1442],{"class":55},[45,63993,63994,63996,63998,64000],{"class":47,"line":8127},[45,63995,55120],{"class":79},[45,63997,51537],{"class":55},[45,63999,51680],{"class":79},[45,64001,1442],{"class":55},[45,64003,64004],{"class":47,"line":8133},[45,64005,2337],{"class":55},[45,64007,64008],{"class":47,"line":8160},[45,64009,2550],{"emptyLinePlaceholder":207},[45,64011,64012,64014,64016,64018],{"class":47,"line":8165},[45,64013,63845],{"class":69},[45,64015,61392],{"class":51400},[45,64017,55175],{"class":51400},[45,64019,15721],{"class":55},[45,64021,64022,64024,64026,64028,64030,64032],{"class":47,"line":8171},[45,64023,54806],{"class":79},[45,64025,51537],{"class":55},[45,64027,469],{"class":79},[45,64029,9100],{"class":79},[45,64031,51592],{"class":51},[45,64033,1442],{"class":55},[45,64035,64036,64038,64040,64042,64044],{"class":47,"line":8183},[45,64037,55022],{"class":79},[45,64039,51537],{"class":55},[45,64041,826],{"class":79},[45,64043,51592],{"class":51},[45,64045,1442],{"class":55},[45,64047,64048],{"class":47,"line":8195},[45,64049,2337],{"class":55},[45,64051,64052],{"class":47,"line":8207},[45,64053,2550],{"emptyLinePlaceholder":207},[45,64055,64056,64058,64060,64062,64064],{"class":47,"line":9866},[45,64057,63845],{"class":69},[45,64059,61392],{"class":51400},[45,64061,55175],{"class":51400},[45,64063,1550],{"class":51400},[45,64065,15721],{"class":55},[45,64067,64068,64071,64073,64075],{"class":47,"line":9890},[45,64069,64070],{"class":79},"      text-decoration",[45,64072,51537],{"class":55},[45,64074,54837],{"class":79},[45,64076,1442],{"class":55},[45,64078,64079,64081,64083,64085,64087,64089,64092],{"class":47,"line":9913},[45,64080,62332],{"class":79},[45,64082,51537],{"class":55},[45,64084,356],{"class":79},[45,64086,51592],{"class":51},[45,64088,51621],{"class":79},[45,64090,64091],{"class":79}," transparent",[45,64093,1442],{"class":55},[45,64095,64096,64098,64100,64102],{"class":47,"line":9937},[45,64097,57516],{"class":79},[45,64099,51537],{"class":55},[45,64101,62469],{"class":79},[45,64103,1442],{"class":55},[45,64105,64106],{"class":47,"line":9942},[45,64107,2337],{"class":55},[45,64109,64110],{"class":47,"line":9947},[45,64111,2550],{"emptyLinePlaceholder":207},[45,64113,64114,64116,64118,64120,64122,64125],{"class":47,"line":9952},[45,64115,63845],{"class":69},[45,64117,61392],{"class":51400},[45,64119,55175],{"class":51400},[45,64121,1550],{"class":51400},[45,64123,64124],{"class":69},".active",[45,64126,15721],{"class":55},[45,64128,64129,64131,64133,64136],{"class":47,"line":9961},[45,64130,61891],{"class":79},[45,64132,51537],{"class":55},[45,64134,64135],{"class":79},"#e1251b",[45,64137,1442],{"class":55},[45,64139,64140,64142,64144,64146],{"class":47,"line":9966},[45,64141,57516],{"class":79},[45,64143,51537],{"class":55},[45,64145,64135],{"class":79},[45,64147,1442],{"class":55},[45,64149,64150],{"class":47,"line":9972},[45,64151,2337],{"class":55},[45,64153,64154],{"class":47,"line":9993},[45,64155,2550],{"emptyLinePlaceholder":207},[45,64157,64158,64161],{"class":47,"line":9999},[45,64159,64160],{"class":69},"    .tab-content",[45,64162,15721],{"class":55},[45,64164,64165,64167,64169,64171,64174,64176],{"class":47,"line":10013},[45,64166,54795],{"class":79},[45,64168,51537],{"class":55},[45,64170,469],{"class":79},[45,64172,64173],{"class":79}," 16",[45,64175,51592],{"class":51},[45,64177,1442],{"class":55},[45,64179,64180],{"class":47,"line":10019},[45,64181,2337],{"class":55},[45,64183,64184],{"class":47,"line":10046},[45,64185,2550],{"emptyLinePlaceholder":207},[45,64187,64188,64190,64192],{"class":47,"line":10055},[45,64189,64160],{"class":69},[45,64191,62274],{"class":69},[45,64193,15721],{"class":55},[45,64195,64196,64198,64200,64202],{"class":47,"line":10061},[45,64197,55109],{"class":79},[45,64199,51537],{"class":55},[45,64201,54837],{"class":79},[45,64203,1442],{"class":55},[45,64205,64206],{"class":47,"line":10069},[45,64207,2337],{"class":55},[45,64209,64210],{"class":47,"line":10074},[45,64211,2550],{"emptyLinePlaceholder":207},[45,64213,64214,64216,64219],{"class":47,"line":16753},[45,64215,64160],{"class":69},[45,64217,64218],{"class":69}," .item.active",[45,64220,15721],{"class":55},[45,64222,64223,64225,64227,64229],{"class":47,"line":16759},[45,64224,55109],{"class":79},[45,64226,51537],{"class":55},[45,64228,60969],{"class":79},[45,64230,1442],{"class":55},[45,64232,64233],{"class":47,"line":16782},[45,64234,2337],{"class":55},[45,64236,64237,64239,64241],{"class":47,"line":16788},[45,64238,52517],{"class":55},[45,64240,196],{"class":51400},[45,64242,51407],{"class":55},[45,64244,64245,64247,64249],{"class":47,"line":16811},[45,64246,51885],{"class":55},[45,64248,51434],{"class":51400},[45,64250,51407],{"class":55},[45,64252,64253],{"class":47,"line":16825},[45,64254,2550],{"emptyLinePlaceholder":207},[45,64256,64257,64259,64261],{"class":47,"line":16845},[45,64258,1187],{"class":55},[45,64260,51900],{"class":51400},[45,64262,51407],{"class":55},[45,64264,64265,64267,64269,64271,64273,64276],{"class":47,"line":16851},[45,64266,52244],{"class":55},[45,64268,51711],{"class":51400},[45,64270,53586],{"class":69},[45,64272,59],{"class":55},[45,64274,64275],{"class":62},"\"tab\"",[45,64277,51407],{"class":55},[45,64279,64280,64282,64284,64286,64288,64291],{"class":47,"line":16862},[45,64281,51441],{"class":55},[45,64283,51711],{"class":51400},[45,64285,53586],{"class":69},[45,64287,59],{"class":55},[45,64289,64290],{"class":62},"\"tab-nav\"",[45,64292,51407],{"class":55},[45,64294,64295,64297,64299,64302,64304],{"class":47,"line":16885},[45,64296,55334],{"class":55},[45,64298,249],{"class":51400},[45,64300,64301],{"class":55},">每日特价\u003C\u002F",[45,64303,249],{"class":51400},[45,64305,51407],{"class":55},[45,64307,64308,64310,64312],{"class":47,"line":16907},[45,64309,55334],{"class":55},[45,64311,166],{"class":51400},[45,64313,51407],{"class":55},[45,64315,64316,64318,64320,64322,64324,64326,64328,64330,64332,64334,64337,64340,64342,64344,64346],{"class":47,"line":16912},[45,64317,55402],{"class":55},[45,64319,169],{"class":51400},[45,64321,61152],{"class":55},[45,64323,516],{"class":51400},[45,64325,53586],{"class":69},[45,64327,59],{"class":55},[45,64329,59806],{"class":62},[45,64331,61157],{"class":69},[45,64333,59],{"class":55},[45,64335,64336],{"class":62},"\"javascript:;\"",[45,64338,64339],{"class":55},">精选\u003C\u002F",[45,64341,516],{"class":51400},[45,64343,55414],{"class":55},[45,64345,169],{"class":51400},[45,64347,51407],{"class":55},[45,64349,64350,64352,64354,64356,64358,64360,64362,64364,64367,64369,64371,64373],{"class":47,"line":16918},[45,64351,55402],{"class":55},[45,64353,169],{"class":51400},[45,64355,61152],{"class":55},[45,64357,516],{"class":51400},[45,64359,61157],{"class":69},[45,64361,59],{"class":55},[45,64363,64336],{"class":62},[45,64365,64366],{"class":55},">美食\u003C\u002F",[45,64368,516],{"class":51400},[45,64370,55414],{"class":55},[45,64372,169],{"class":51400},[45,64374,51407],{"class":55},[45,64376,64377,64379,64381,64383,64385,64387,64389,64391,64394,64396,64398,64400],{"class":47,"line":16932},[45,64378,55402],{"class":55},[45,64380,169],{"class":51400},[45,64382,61152],{"class":55},[45,64384,516],{"class":51400},[45,64386,61157],{"class":69},[45,64388,59],{"class":55},[45,64390,64336],{"class":62},[45,64392,64393],{"class":55},">百货\u003C\u002F",[45,64395,516],{"class":51400},[45,64397,55414],{"class":55},[45,64399,169],{"class":51400},[45,64401,51407],{"class":55},[45,64403,64404,64406,64408,64410,64412,64414,64416,64418,64421,64423,64425,64427],{"class":47,"line":16945},[45,64405,55402],{"class":55},[45,64407,169],{"class":51400},[45,64409,61152],{"class":55},[45,64411,516],{"class":51400},[45,64413,61157],{"class":69},[45,64415,59],{"class":55},[45,64417,64336],{"class":62},[45,64419,64420],{"class":55},">个护\u003C\u002F",[45,64422,516],{"class":51400},[45,64424,55414],{"class":55},[45,64426,169],{"class":51400},[45,64428,51407],{"class":55},[45,64430,64431,64433,64435,64437,64439,64441,64443,64445,64448,64450,64452,64454],{"class":47,"line":16950},[45,64432,55402],{"class":55},[45,64434,169],{"class":51400},[45,64436,61152],{"class":55},[45,64438,516],{"class":51400},[45,64440,61157],{"class":69},[45,64442,59],{"class":55},[45,64444,64336],{"class":62},[45,64446,64447],{"class":55},">预告\u003C\u002F",[45,64449,516],{"class":51400},[45,64451,55414],{"class":55},[45,64453,169],{"class":51400},[45,64455,51407],{"class":55},[45,64457,64458,64460,64462],{"class":47,"line":16964},[45,64459,55507],{"class":55},[45,64461,166],{"class":51400},[45,64463,51407],{"class":55},[45,64465,64466,64468,64470],{"class":47,"line":16969},[45,64467,51876],{"class":55},[45,64469,51711],{"class":51400},[45,64471,51407],{"class":55},[45,64473,64474,64476,64478,64480,64482,64485],{"class":47,"line":16975},[45,64475,51441],{"class":55},[45,64477,51711],{"class":51400},[45,64479,53586],{"class":69},[45,64481,59],{"class":55},[45,64483,64484],{"class":62},"\"tab-content\"",[45,64486,51407],{"class":55},[45,64488,64489,64491,64493,64495,64497,64500,64502,64504,64506,64508,64511,64513,64515,64517,64520,64522],{"class":47,"line":16980},[45,64490,55334],{"class":55},[45,64492,51711],{"class":51400},[45,64494,53586],{"class":69},[45,64496,59],{"class":55},[45,64498,64499],{"class":62},"\"item active\"",[45,64501,61152],{"class":55},[45,64503,23],{"class":51400},[45,64505,55339],{"class":69},[45,64507,59],{"class":55},[45,64509,64510],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[45,64512,55347],{"class":69},[45,64514,59],{"class":55},[45,64516,7802],{"class":62},[45,64518,64519],{"class":55}," \u002F>\u003C\u002F",[45,64521,51711],{"class":51400},[45,64523,51407],{"class":55},[45,64525,64526,64528,64530,64532,64534,64536,64538,64540,64542,64544,64547,64549,64551,64553,64555,64557],{"class":47,"line":16994},[45,64527,55334],{"class":55},[45,64529,51711],{"class":51400},[45,64531,53586],{"class":69},[45,64533,59],{"class":55},[45,64535,62723],{"class":62},[45,64537,61152],{"class":55},[45,64539,23],{"class":51400},[45,64541,55339],{"class":69},[45,64543,59],{"class":55},[45,64545,64546],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[45,64548,55347],{"class":69},[45,64550,59],{"class":55},[45,64552,7802],{"class":62},[45,64554,64519],{"class":55},[45,64556,51711],{"class":51400},[45,64558,51407],{"class":55},[45,64560,64561,64563,64565,64567,64569,64571,64573,64575,64577,64579,64582,64584,64586,64588,64590,64592],{"class":47,"line":16999},[45,64562,55334],{"class":55},[45,64564,51711],{"class":51400},[45,64566,53586],{"class":69},[45,64568,59],{"class":55},[45,64570,62723],{"class":62},[45,64572,61152],{"class":55},[45,64574,23],{"class":51400},[45,64576,55339],{"class":69},[45,64578,59],{"class":55},[45,64580,64581],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[45,64583,55347],{"class":69},[45,64585,59],{"class":55},[45,64587,7802],{"class":62},[45,64589,64519],{"class":55},[45,64591,51711],{"class":51400},[45,64593,51407],{"class":55},[45,64595,64596,64598,64600,64602,64604,64606,64608,64610,64612,64614,64617,64619,64621,64623,64625,64627],{"class":47,"line":17004},[45,64597,55334],{"class":55},[45,64599,51711],{"class":51400},[45,64601,53586],{"class":69},[45,64603,59],{"class":55},[45,64605,62723],{"class":62},[45,64607,61152],{"class":55},[45,64609,23],{"class":51400},[45,64611,55339],{"class":69},[45,64613,59],{"class":55},[45,64615,64616],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[45,64618,55347],{"class":69},[45,64620,59],{"class":55},[45,64622,7802],{"class":62},[45,64624,64519],{"class":55},[45,64626,51711],{"class":51400},[45,64628,51407],{"class":55},[45,64630,64631,64633,64635,64637,64639,64641,64643,64645,64647,64649,64652,64654,64656,64658,64660,64662],{"class":47,"line":17018},[45,64632,55334],{"class":55},[45,64634,51711],{"class":51400},[45,64636,53586],{"class":69},[45,64638,59],{"class":55},[45,64640,62723],{"class":62},[45,64642,61152],{"class":55},[45,64644,23],{"class":51400},[45,64646,55339],{"class":69},[45,64648,59],{"class":55},[45,64650,64651],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[45,64653,55347],{"class":69},[45,64655,59],{"class":55},[45,64657,7802],{"class":62},[45,64659,64519],{"class":55},[45,64661,51711],{"class":51400},[45,64663,51407],{"class":55},[45,64665,64666,64668,64670],{"class":47,"line":17030},[45,64667,51876],{"class":55},[45,64669,51711],{"class":51400},[45,64671,51407],{"class":55},[45,64673,64674,64676,64678],{"class":47,"line":17035},[45,64675,52517],{"class":55},[45,64677,51711],{"class":51400},[45,64679,51407],{"class":55},[45,64681,64682,64684,64686],{"class":47,"line":17048},[45,64683,52244],{"class":55},[45,64685,51913],{"class":51400},[45,64687,51407],{"class":55},[45,64689,64690],{"class":47,"line":17053},[45,64691,64692],{"class":337},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[45,64694,64695],{"class":47,"line":17058},[45,64696,64697],{"class":337},"    \u002F\u002F 1.1 获取 a 元素 \n",[45,64699,64700,64702,64705,64707,64709,64711,64713,64716],{"class":47,"line":17063},[45,64701,11370],{"class":51},[45,64703,64704],{"class":79}," as",[45,64706,13713],{"class":51},[45,64708,54496],{"class":55},[45,64710,55781],{"class":69},[45,64712,282],{"class":55},[45,64714,64715],{"class":62},"'.tab-nav a'",[45,64717,139],{"class":55},[45,64719,64720],{"class":47,"line":17076},[45,64721,64722],{"class":337},"    \u002F\u002F console.log(as) \n",[45,64724,64725,64727,64729,64731,64733,64735,64737,64739,64741,64744,64746,64748,64750],{"class":47,"line":17081},[45,64726,3351],{"class":51},[45,64728,1809],{"class":55},[45,64730,51947],{"class":51},[45,64732,9588],{"class":55},[45,64734,59],{"class":51},[45,64736,4243],{"class":79},[45,64738,9595],{"class":55},[45,64740,1187],{"class":51},[45,64742,64743],{"class":55}," as.",[45,64745,52068],{"class":79},[45,64747,3364],{"class":55},[45,64749,2442],{"class":51},[45,64751,12591],{"class":55},[45,64753,64754],{"class":47,"line":32733},[45,64755,64756],{"class":337},"      \u002F\u002F console.log(as[i])\n",[45,64758,64759],{"class":47,"line":32739},[45,64760,64761],{"class":337},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[45,64763,64764,64767,64769,64771,64774,64776,64778],{"class":47,"line":32745},[45,64765,64766],{"class":55},"      as[i].",[45,64768,57913],{"class":69},[45,64770,282],{"class":55},[45,64772,64773],{"class":62},"'mouseenter'",[45,64775,12584],{"class":55},[45,64777,54549],{"class":51},[45,64779,54552],{"class":55},[45,64781,64782],{"class":47,"line":32751},[45,64783,64784],{"class":337},"        \u002F\u002F console.log('鼠标经过')\n",[45,64786,64787],{"class":47,"line":32757},[45,64788,64789],{"class":337},"        \u002F\u002F 排他思想  \n",[45,64791,64792],{"class":47,"line":32768},[45,64793,64794],{"class":337},"        \u002F\u002F 干掉别人 移除类active\n",[45,64796,64797,64799,64801,64803,64806,64808,64810,64812,64815],{"class":47,"line":32774},[45,64798,52025],{"class":55},[45,64800,54499],{"class":69},[45,64802,282],{"class":55},[45,64804,64805],{"class":62},"'.tab-nav .active'",[45,64807,57103],{"class":55},[45,64809,57106],{"class":69},[45,64811,282],{"class":55},[45,64813,64814],{"class":62},"'active'",[45,64816,139],{"class":55},[45,64818,64819],{"class":47,"line":32794},[45,64820,64821],{"class":337},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[45,64823,64824,64827,64830,64832,64834,64836],{"class":47,"line":32800},[45,64825,64826],{"class":79},"        this",[45,64828,64829],{"class":55},".classList.",[45,64831,5484],{"class":69},[45,64833,282],{"class":55},[45,64835,64814],{"class":62},[45,64837,139],{"class":55},[45,64839,64840],{"class":47,"line":32811},[45,64841,2550],{"emptyLinePlaceholder":207},[45,64843,64844],{"class":47,"line":32817},[45,64845,64846],{"class":337},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[45,64848,64849],{"class":47,"line":32823},[45,64850,64851],{"class":337},"        \u002F\u002F 干掉别人\n",[45,64853,64854,64856,64858,64860,64863,64865,64867,64869,64871],{"class":47,"line":32829},[45,64855,52025],{"class":55},[45,64857,54499],{"class":69},[45,64859,282],{"class":55},[45,64861,64862],{"class":62},"'.tab-content .active'",[45,64864,57103],{"class":55},[45,64866,57106],{"class":69},[45,64868,282],{"class":55},[45,64870,64814],{"class":62},[45,64872,139],{"class":55},[45,64874,64875],{"class":47,"line":32835},[45,64876,64877],{"class":337},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[45,64879,64880,64882,64884,64886,64889,64891,64893,64895,64897,64899,64901,64903,64905],{"class":47,"line":32841},[45,64881,52025],{"class":55},[45,64883,54499],{"class":69},[45,64885,282],{"class":55},[45,64887,64888],{"class":62},"`.tab-content .item:nth-child(${",[45,64890,718],{"class":55},[45,64892,45666],{"class":51},[45,64894,136],{"class":79},[45,64896,57132],{"class":62},[45,64898,57103],{"class":55},[45,64900,5484],{"class":69},[45,64902,282],{"class":55},[45,64904,64814],{"class":62},[45,64906,139],{"class":55},[45,64908,64909],{"class":47,"line":32847},[45,64910,2550],{"emptyLinePlaceholder":207},[45,64912,64913],{"class":47,"line":32853},[45,64914,64915],{"class":55},"      })\n",[45,64917,64918],{"class":47,"line":32873},[45,64919,2337],{"class":55},[45,64921,64922,64924,64926],{"class":47,"line":32879},[45,64923,52517],{"class":55},[45,64925,51913],{"class":51400},[45,64927,51407],{"class":55},[45,64929,64930,64932,64934],{"class":47,"line":32895},[45,64931,51885],{"class":55},[45,64933,51900],{"class":51400},[45,64935,51407],{"class":55},[45,64937,64938],{"class":47,"line":32901},[45,64939,2550],{"emptyLinePlaceholder":207},[45,64941,64942,64944,64946],{"class":47,"line":32915},[45,64943,51885],{"class":55},[45,64945,50735],{"class":51400},[45,64947,51407],{"class":55},[20,64949,64950],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[20,64952,64953],{},"在监听事件中，this指向的就是他的调用者",[20,64955,64956],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[20,64958,53820],{},[20,64960,64961],{},"(function () {",[20,64963,64964],{},"const list = document.querySelector('.xtx-elevator-list')",[20,64966,64967],{},"list.addEventListener('click', function (e) {",[20,64969,64970],{},"if (e.target.tagName === 'A') {",[20,64972,64973],{},"\u002F\u002F 排他思想",[20,64975,64976],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[20,64978,64979],{},"const old = document.querySelector('.xtx-elevator-list .active')",[20,64981,64982],{},"\u002F\u002F console.log(old);",[20,64984,64985],{},"\u002F\u002F 判断",[20,64987,64988],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[20,64990,64991],{},"if (old) old.classList.remove('active')",[20,64993,64994],{},"e.target.classList.add('active')",[20,64996,1223],{},[20,64998,52564],{},[20,65000,65001],{},"})();",[249,65003,65005],{"id":65004},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[36,65007,65009],{"className":50733,"code":65008,"language":50735,"meta":25,"style":25},"\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",[42,65010,65011,65021,65025,65033,65037,65051,65065,65077,65085,65091,65101,65111,65115,65119,65126,65138,65149,65166,65179,65193,65203,65207,65211,65218,65229,65247,65257,65269,65273,65277,65284,65301,65312,65324,65328,65332,65339,65351,65355,65363,65371,65375,65383,65391,65399,65414,65458,65466,65479,65492,65505,65513,65521,65529,65557,65565,65577,65590,65603,65611,65619,65627,65653,65661,65674,65686,65699,65707,65715,65723,65749,65757,65770,65782,65795,65803,65811,65819,65824,65844,65849,65869,65874,65891,65896,65904,65909,65938,65951,65955,65959,65964,65968,65996,66001,66018,66023,66028,66033,66038,66064,66068,66072,66080,66088,66092],{"__ignoreMap":25},[45,65012,65013,65015,65017,65019],{"class":47,"line":48},[45,65014,51397],{"class":55},[45,65016,51401],{"class":51400},[45,65018,51404],{"class":69},[45,65020,51407],{"class":55},[45,65022,65023],{"class":47,"line":66},[45,65024,2550],{"emptyLinePlaceholder":207},[45,65026,65027,65029,65031],{"class":47,"line":1331},[45,65028,1187],{"class":55},[45,65030,50735],{"class":51400},[45,65032,51407],{"class":55},[45,65034,65035],{"class":47,"line":1346},[45,65036,2550],{"emptyLinePlaceholder":207},[45,65038,65039,65041,65043,65045,65047,65049],{"class":47,"line":1352},[45,65040,1187],{"class":55},[45,65042,51434],{"class":51400},[45,65044,51416],{"class":69},[45,65046,59],{"class":55},[45,65048,51421],{"class":62},[45,65050,51407],{"class":55},[45,65052,65053,65055,65057,65059,65061,65063],{"class":47,"line":1366},[45,65054,52244],{"class":55},[45,65056,51444],{"class":51400},[45,65058,51447],{"class":69},[45,65060,59],{"class":55},[45,65062,51452],{"class":62},[45,65064,51407],{"class":55},[45,65066,65067,65069,65071,65073,65075],{"class":47,"line":1372},[45,65068,52244],{"class":55},[45,65070,51507],{"class":51400},[45,65072,55414],{"class":55},[45,65074,51507],{"class":51400},[45,65076,51407],{"class":55},[45,65078,65079,65081,65083],{"class":47,"line":1463},[45,65080,52244],{"class":55},[45,65082,196],{"class":51400},[45,65084,51407],{"class":55},[45,65086,65087,65089],{"class":47,"line":1469},[45,65088,6553],{"class":51400},[45,65090,15721],{"class":55},[45,65092,65093,65095,65097,65099],{"class":47,"line":1481},[45,65094,54806],{"class":79},[45,65096,51537],{"class":55},[45,65098,469],{"class":79},[45,65100,1442],{"class":55},[45,65102,65103,65105,65107,65109],{"class":47,"line":1763},[45,65104,54795],{"class":79},[45,65106,51537],{"class":55},[45,65108,469],{"class":79},[45,65110,1442],{"class":55},[45,65112,65113],{"class":47,"line":1768},[45,65114,2337],{"class":55},[45,65116,65117],{"class":47,"line":1774},[45,65118,2550],{"emptyLinePlaceholder":207},[45,65120,65121,65124],{"class":47,"line":1779},[45,65122,65123],{"class":51400},"    table",[45,65125,15721],{"class":55},[45,65127,65128,65131,65133,65136],{"class":47,"line":1793},[45,65129,65130],{"class":79},"      border-collapse",[45,65132,51537],{"class":55},[45,65134,65135],{"class":79},"collapse",[45,65137,1442],{"class":55},[45,65139,65140,65143,65145,65147],{"class":47,"line":1798},[45,65141,65142],{"class":79},"      border-spacing",[45,65144,51537],{"class":55},[45,65146,469],{"class":79},[45,65148,1442],{"class":55},[45,65150,65151,65153,65155,65157,65159,65161,65164],{"class":47,"line":1804},[45,65152,62077],{"class":79},[45,65154,51537],{"class":55},[45,65156,495],{"class":79},[45,65158,51592],{"class":51},[45,65160,51621],{"class":79},[45,65162,65163],{"class":79}," #c0c0c0",[45,65165,1442],{"class":55},[45,65167,65168,65170,65172,65175,65177],{"class":47,"line":1825},[45,65169,54871],{"class":79},[45,65171,51537],{"class":55},[45,65173,65174],{"class":79},"500",[45,65176,51592],{"class":51},[45,65178,1442],{"class":55},[45,65180,65181,65183,65185,65187,65189,65191],{"class":47,"line":1830},[45,65182,54806],{"class":79},[45,65184,51537],{"class":55},[45,65186,588],{"class":79},[45,65188,51592],{"class":51},[45,65190,51656],{"class":79},[45,65192,1442],{"class":55},[45,65194,65195,65197,65199,65201],{"class":47,"line":1844},[45,65196,57386],{"class":79},[45,65198,51537],{"class":55},[45,65200,51692],{"class":79},[45,65202,1442],{"class":55},[45,65204,65205],{"class":47,"line":1849},[45,65206,2337],{"class":55},[45,65208,65209],{"class":47,"line":1878},[45,65210,2550],{"emptyLinePlaceholder":207},[45,65212,65213,65216],{"class":47,"line":1883},[45,65214,65215],{"class":51400},"    th",[45,65217,15721],{"class":55},[45,65219,65220,65222,65224,65227],{"class":47,"line":1900},[45,65221,54984],{"class":79},[45,65223,51537],{"class":55},[45,65225,65226],{"class":79},"#09c",[45,65228,1442],{"class":55},[45,65230,65231,65234,65236,65238,65240,65242,65245],{"class":47,"line":1905},[45,65232,65233],{"class":79},"      font",[45,65235,51537],{"class":55},[45,65237,62439],{"class":79},[45,65239,64173],{"class":79},[45,65241,51592],{"class":51},[45,65243,65244],{"class":62}," \"微软雅黑\"",[45,65246,1442],{"class":55},[45,65248,65249,65251,65253,65255],{"class":47,"line":1910},[45,65250,57516],{"class":79},[45,65252,51537],{"class":55},[45,65254,60942],{"class":79},[45,65256,1442],{"class":55},[45,65258,65259,65261,65263,65265,65267],{"class":47,"line":1915},[45,65260,54885],{"class":79},[45,65262,51537],{"class":55},[45,65264,1077],{"class":79},[45,65266,51592],{"class":51},[45,65268,1442],{"class":55},[45,65270,65271],{"class":47,"line":1929},[45,65272,2337],{"class":55},[45,65274,65275],{"class":47,"line":1934},[45,65276,2550],{"emptyLinePlaceholder":207},[45,65278,65279,65282],{"class":47,"line":2727},[45,65280,65281],{"class":51400},"    td",[45,65283,15721],{"class":55},[45,65285,65286,65288,65290,65292,65294,65296,65299],{"class":47,"line":2741},[45,65287,62077],{"class":79},[45,65289,51537],{"class":55},[45,65291,495],{"class":79},[45,65293,51592],{"class":51},[45,65295,51621],{"class":79},[45,65297,65298],{"class":79}," #d0d0d0",[45,65300,1442],{"class":55},[45,65302,65303,65305,65307,65310],{"class":47,"line":2749},[45,65304,57516],{"class":79},[45,65306,51537],{"class":55},[45,65308,65309],{"class":79},"#404060",[45,65311,1442],{"class":55},[45,65313,65314,65316,65318,65320,65322],{"class":47,"line":2754},[45,65315,54795],{"class":79},[45,65317,51537],{"class":55},[45,65319,723],{"class":79},[45,65321,51592],{"class":51},[45,65323,1442],{"class":55},[45,65325,65326],{"class":47,"line":2760},[45,65327,2337],{"class":55},[45,65329,65330],{"class":47,"line":2766},[45,65331,2550],{"emptyLinePlaceholder":207},[45,65333,65334,65337],{"class":47,"line":2771},[45,65335,65336],{"class":69},"    .allCheck",[45,65338,15721],{"class":55},[45,65340,65341,65343,65345,65347,65349],{"class":47,"line":8098},[45,65342,54871],{"class":79},[45,65344,51537],{"class":55},[45,65346,889],{"class":79},[45,65348,51592],{"class":51},[45,65350,1442],{"class":55},[45,65352,65353],{"class":47,"line":8122},[45,65354,2337],{"class":55},[45,65356,65357,65359,65361],{"class":47,"line":8127},[45,65358,52517],{"class":55},[45,65360,196],{"class":51400},[45,65362,51407],{"class":55},[45,65364,65365,65367,65369],{"class":47,"line":8133},[45,65366,51885],{"class":55},[45,65368,51434],{"class":51400},[45,65370,51407],{"class":55},[45,65372,65373],{"class":47,"line":8160},[45,65374,2550],{"emptyLinePlaceholder":207},[45,65376,65377,65379,65381],{"class":47,"line":8165},[45,65378,1187],{"class":55},[45,65380,51900],{"class":51400},[45,65382,51407],{"class":55},[45,65384,65385,65387,65389],{"class":47,"line":8171},[45,65386,52244],{"class":55},[45,65388,415],{"class":51400},[45,65390,51407],{"class":55},[45,65392,65393,65395,65397],{"class":47,"line":8183},[45,65394,51441],{"class":55},[45,65396,421],{"class":51400},[45,65398,51407],{"class":55},[45,65400,65401,65403,65405,65407,65409,65412],{"class":47,"line":8195},[45,65402,55334],{"class":55},[45,65404,424],{"class":51400},[45,65406,53586],{"class":69},[45,65408,59],{"class":55},[45,65410,65411],{"class":62},"\"allCheck\"",[45,65413,51407],{"class":55},[45,65415,65416,65418,65420,65422,65424,65426,65428,65430,65432,65434,65436,65439,65442,65444,65446,65448,65451,65454,65456],{"class":47,"line":8207},[45,65417,55402],{"class":55},[45,65419,53921],{"class":51400},[45,65421,53924],{"class":69},[45,65423,59],{"class":55},[45,65425,53929],{"class":62},[45,65427,15069],{"class":69},[45,65429,59],{"class":55},[45,65431,7802],{"class":62},[45,65433,15108],{"class":69},[45,65435,59],{"class":55},[45,65437,65438],{"class":62},"\"checkAll\"",[45,65440,65441],{"class":55},"> \u003C",[45,65443,45],{"class":51400},[45,65445,53586],{"class":69},[45,65447,59],{"class":55},[45,65449,65450],{"class":62},"\"all\"",[45,65452,65453],{"class":55},">全选\u003C\u002F",[45,65455,45],{"class":51400},[45,65457,51407],{"class":55},[45,65459,65460,65462,65464],{"class":47,"line":9866},[45,65461,55507],{"class":55},[45,65463,424],{"class":51400},[45,65465,51407],{"class":55},[45,65467,65468,65470,65472,65475,65477],{"class":47,"line":9890},[45,65469,55334],{"class":55},[45,65471,424],{"class":51400},[45,65473,65474],{"class":55},">商品\u003C\u002F",[45,65476,424],{"class":51400},[45,65478,51407],{"class":55},[45,65480,65481,65483,65485,65488,65490],{"class":47,"line":9913},[45,65482,55334],{"class":55},[45,65484,424],{"class":51400},[45,65486,65487],{"class":55},">商家\u003C\u002F",[45,65489,424],{"class":51400},[45,65491,51407],{"class":55},[45,65493,65494,65496,65498,65501,65503],{"class":47,"line":9937},[45,65495,55334],{"class":55},[45,65497,424],{"class":51400},[45,65499,65500],{"class":55},">价格\u003C\u002F",[45,65502,424],{"class":51400},[45,65504,51407],{"class":55},[45,65506,65507,65509,65511],{"class":47,"line":9942},[45,65508,51876],{"class":55},[45,65510,421],{"class":51400},[45,65512,51407],{"class":55},[45,65514,65515,65517,65519],{"class":47,"line":9947},[45,65516,51441],{"class":55},[45,65518,421],{"class":51400},[45,65520,51407],{"class":55},[45,65522,65523,65525,65527],{"class":47,"line":9952},[45,65524,55334],{"class":55},[45,65526,467],{"class":51400},[45,65528,51407],{"class":55},[45,65530,65531,65533,65535,65537,65539,65541,65543,65545,65548,65550,65552,65555],{"class":47,"line":9961},[45,65532,55402],{"class":55},[45,65534,53921],{"class":51400},[45,65536,53924],{"class":69},[45,65538,59],{"class":55},[45,65540,53929],{"class":62},[45,65542,15069],{"class":69},[45,65544,59],{"class":55},[45,65546,65547],{"class":62},"\"check\"",[45,65549,53586],{"class":69},[45,65551,59],{"class":55},[45,65553,65554],{"class":62},"\"ck\"",[45,65556,51407],{"class":55},[45,65558,65559,65561,65563],{"class":47,"line":9966},[45,65560,55507],{"class":55},[45,65562,467],{"class":51400},[45,65564,51407],{"class":55},[45,65566,65567,65569,65571,65573,65575],{"class":47,"line":9972},[45,65568,55334],{"class":55},[45,65570,467],{"class":51400},[45,65572,61273],{"class":55},[45,65574,467],{"class":51400},[45,65576,51407],{"class":55},[45,65578,65579,65581,65583,65586,65588],{"class":47,"line":9993},[45,65580,55334],{"class":55},[45,65582,467],{"class":51400},[45,65584,65585],{"class":55},">小米\u003C\u002F",[45,65587,467],{"class":51400},[45,65589,51407],{"class":55},[45,65591,65592,65594,65596,65599,65601],{"class":47,"line":9999},[45,65593,55334],{"class":55},[45,65595,467],{"class":51400},[45,65597,65598],{"class":55},">￥1999\u003C\u002F",[45,65600,467],{"class":51400},[45,65602,51407],{"class":55},[45,65604,65605,65607,65609],{"class":47,"line":10013},[45,65606,51876],{"class":55},[45,65608,421],{"class":51400},[45,65610,51407],{"class":55},[45,65612,65613,65615,65617],{"class":47,"line":10019},[45,65614,51441],{"class":55},[45,65616,421],{"class":51400},[45,65618,51407],{"class":55},[45,65620,65621,65623,65625],{"class":47,"line":10046},[45,65622,55334],{"class":55},[45,65624,467],{"class":51400},[45,65626,51407],{"class":55},[45,65628,65629,65631,65633,65635,65637,65639,65641,65643,65645,65647,65649,65651],{"class":47,"line":10055},[45,65630,55402],{"class":55},[45,65632,53921],{"class":51400},[45,65634,53924],{"class":69},[45,65636,59],{"class":55},[45,65638,53929],{"class":62},[45,65640,15069],{"class":69},[45,65642,59],{"class":55},[45,65644,65547],{"class":62},[45,65646,53586],{"class":69},[45,65648,59],{"class":55},[45,65650,65554],{"class":62},[45,65652,51407],{"class":55},[45,65654,65655,65657,65659],{"class":47,"line":10061},[45,65656,55507],{"class":55},[45,65658,467],{"class":51400},[45,65660,51407],{"class":55},[45,65662,65663,65665,65667,65670,65672],{"class":47,"line":10069},[45,65664,55334],{"class":55},[45,65666,467],{"class":51400},[45,65668,65669],{"class":55},">小米净水器\u003C\u002F",[45,65671,467],{"class":51400},[45,65673,51407],{"class":55},[45,65675,65676,65678,65680,65682,65684],{"class":47,"line":10074},[45,65677,55334],{"class":55},[45,65679,467],{"class":51400},[45,65681,65585],{"class":55},[45,65683,467],{"class":51400},[45,65685,51407],{"class":55},[45,65687,65688,65690,65692,65695,65697],{"class":47,"line":16753},[45,65689,55334],{"class":55},[45,65691,467],{"class":51400},[45,65693,65694],{"class":55},">￥4999\u003C\u002F",[45,65696,467],{"class":51400},[45,65698,51407],{"class":55},[45,65700,65701,65703,65705],{"class":47,"line":16759},[45,65702,51876],{"class":55},[45,65704,421],{"class":51400},[45,65706,51407],{"class":55},[45,65708,65709,65711,65713],{"class":47,"line":16782},[45,65710,51441],{"class":55},[45,65712,421],{"class":51400},[45,65714,51407],{"class":55},[45,65716,65717,65719,65721],{"class":47,"line":16788},[45,65718,55334],{"class":55},[45,65720,467],{"class":51400},[45,65722,51407],{"class":55},[45,65724,65725,65727,65729,65731,65733,65735,65737,65739,65741,65743,65745,65747],{"class":47,"line":16811},[45,65726,55402],{"class":55},[45,65728,53921],{"class":51400},[45,65730,53924],{"class":69},[45,65732,59],{"class":55},[45,65734,53929],{"class":62},[45,65736,15069],{"class":69},[45,65738,59],{"class":55},[45,65740,65547],{"class":62},[45,65742,53586],{"class":69},[45,65744,59],{"class":55},[45,65746,65554],{"class":62},[45,65748,51407],{"class":55},[45,65750,65751,65753,65755],{"class":47,"line":16825},[45,65752,55507],{"class":55},[45,65754,467],{"class":51400},[45,65756,51407],{"class":55},[45,65758,65759,65761,65763,65766,65768],{"class":47,"line":16845},[45,65760,55334],{"class":55},[45,65762,467],{"class":51400},[45,65764,65765],{"class":55},">小米电视\u003C\u002F",[45,65767,467],{"class":51400},[45,65769,51407],{"class":55},[45,65771,65772,65774,65776,65778,65780],{"class":47,"line":16851},[45,65773,55334],{"class":55},[45,65775,467],{"class":51400},[45,65777,65585],{"class":55},[45,65779,467],{"class":51400},[45,65781,51407],{"class":55},[45,65783,65784,65786,65788,65791,65793],{"class":47,"line":16862},[45,65785,55334],{"class":55},[45,65787,467],{"class":51400},[45,65789,65790],{"class":55},">￥5999\u003C\u002F",[45,65792,467],{"class":51400},[45,65794,51407],{"class":55},[45,65796,65797,65799,65801],{"class":47,"line":16885},[45,65798,51876],{"class":55},[45,65800,421],{"class":51400},[45,65802,51407],{"class":55},[45,65804,65805,65807,65809],{"class":47,"line":16907},[45,65806,52517],{"class":55},[45,65808,415],{"class":51400},[45,65810,51407],{"class":55},[45,65812,65813,65815,65817],{"class":47,"line":16912},[45,65814,52244],{"class":55},[45,65816,51913],{"class":51400},[45,65818,51407],{"class":55},[45,65820,65821],{"class":47,"line":16918},[45,65822,65823],{"class":337},"    \u002F\u002F 1. 获取大复选框\n",[45,65825,65826,65828,65831,65833,65835,65837,65839,65842],{"class":47,"line":16932},[45,65827,11370],{"class":51},[45,65829,65830],{"class":79}," checkAll",[45,65832,13713],{"class":51},[45,65834,54496],{"class":55},[45,65836,54499],{"class":69},[45,65838,282],{"class":55},[45,65840,65841],{"class":62},"'#checkAll'",[45,65843,139],{"class":55},[45,65845,65846],{"class":47,"line":16945},[45,65847,65848],{"class":337},"    \u002F\u002F 2. 获取所有的小复选框\n",[45,65850,65851,65853,65856,65858,65860,65862,65864,65867],{"class":47,"line":16950},[45,65852,11370],{"class":51},[45,65854,65855],{"class":79}," cks",[45,65857,13713],{"class":51},[45,65859,54496],{"class":55},[45,65861,55781],{"class":69},[45,65863,282],{"class":55},[45,65865,65866],{"class":62},"'.ck'",[45,65868,139],{"class":55},[45,65870,65871],{"class":47,"line":16964},[45,65872,65873],{"class":337},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[45,65875,65876,65879,65881,65883,65885,65887,65889],{"class":47,"line":16969},[45,65877,65878],{"class":55},"    checkAll.",[45,65880,57913],{"class":69},[45,65882,282],{"class":55},[45,65884,57918],{"class":62},[45,65886,12584],{"class":55},[45,65888,54549],{"class":51},[45,65890,54552],{"class":55},[45,65892,65893],{"class":47,"line":16975},[45,65894,65895],{"class":337},"      \u002F\u002F 得到当前大复选框的选中状态\n",[45,65897,65898,65901],{"class":47,"line":16980},[45,65899,65900],{"class":337},"      \u002F\u002F console.log(checkAll.checked)",[45,65902,65903],{"class":337},"  \u002F\u002F 得到 是 true 或者是 false\n",[45,65905,65906],{"class":47,"line":16994},[45,65907,65908],{"class":337},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[45,65910,65911,65913,65915,65917,65919,65921,65923,65925,65927,65930,65932,65934,65936],{"class":47,"line":16999},[45,65912,52384],{"class":51},[45,65914,1809],{"class":55},[45,65916,51947],{"class":51},[45,65918,9588],{"class":55},[45,65920,59],{"class":51},[45,65922,4243],{"class":79},[45,65924,9595],{"class":55},[45,65926,1187],{"class":51},[45,65928,65929],{"class":55}," cks.",[45,65931,52068],{"class":79},[45,65933,3364],{"class":55},[45,65935,2442],{"class":51},[45,65937,12591],{"class":55},[45,65939,65940,65943,65945,65948],{"class":47,"line":17004},[45,65941,65942],{"class":55},"        cks[i].checked ",[45,65944,59],{"class":51},[45,65946,65947],{"class":79}," this",[45,65949,65950],{"class":55},".checked\n",[45,65952,65953],{"class":47,"line":17018},[45,65954,52498],{"class":55},[45,65956,65957],{"class":47,"line":17030},[45,65958,33561],{"class":55},[45,65960,65961],{"class":47,"line":17035},[45,65962,65963],{"class":337},"    \u002F\u002F 5. 小复选框控制大复选框\n",[45,65965,65966],{"class":47,"line":17048},[45,65967,2550],{"emptyLinePlaceholder":207},[45,65969,65970,65972,65974,65976,65978,65980,65982,65984,65986,65988,65990,65992,65994],{"class":47,"line":17053},[45,65971,3351],{"class":51},[45,65973,1809],{"class":55},[45,65975,51947],{"class":51},[45,65977,9588],{"class":55},[45,65979,59],{"class":51},[45,65981,4243],{"class":79},[45,65983,9595],{"class":55},[45,65985,1187],{"class":51},[45,65987,65929],{"class":55},[45,65989,52068],{"class":79},[45,65991,3364],{"class":55},[45,65993,2442],{"class":51},[45,65995,12591],{"class":55},[45,65997,65998],{"class":47,"line":17058},[45,65999,66000],{"class":337},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[45,66002,66003,66006,66008,66010,66012,66014,66016],{"class":47,"line":17063},[45,66004,66005],{"class":55},"      cks[i].",[45,66007,57913],{"class":69},[45,66009,282],{"class":55},[45,66011,57918],{"class":62},[45,66013,12584],{"class":55},[45,66015,54549],{"class":51},[45,66017,54552],{"class":55},[45,66019,66020],{"class":47,"line":17076},[45,66021,66022],{"class":337},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[45,66024,66025],{"class":47,"line":17081},[45,66026,66027],{"class":337},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[45,66029,66030],{"class":47,"line":32733},[45,66031,66032],{"class":337},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[45,66034,66035],{"class":47,"line":32739},[45,66036,66037],{"class":337},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[45,66039,66040,66043,66045,66047,66049,66051,66054,66056,66058,66060,66062],{"class":47,"line":32745},[45,66041,66042],{"class":55},"        checkAll.checked ",[45,66044,59],{"class":51},[45,66046,54496],{"class":55},[45,66048,55781],{"class":69},[45,66050,282],{"class":55},[45,66052,66053],{"class":62},"'.ck:checked'",[45,66055,30926],{"class":55},[45,66057,52068],{"class":79},[45,66059,58006],{"class":51},[45,66061,65929],{"class":55},[45,66063,55931],{"class":79},[45,66065,66066],{"class":47,"line":32751},[45,66067,64915],{"class":55},[45,66069,66070],{"class":47,"line":32757},[45,66071,2337],{"class":55},[45,66073,66074,66076,66078],{"class":47,"line":32768},[45,66075,52517],{"class":55},[45,66077,51913],{"class":51400},[45,66079,51407],{"class":55},[45,66081,66082,66084,66086],{"class":47,"line":32774},[45,66083,51885],{"class":55},[45,66085,51900],{"class":51400},[45,66087,51407],{"class":55},[45,66089,66090],{"class":47,"line":32794},[45,66091,2550],{"emptyLinePlaceholder":207},[45,66093,66094,66096,66098],{"class":47,"line":32800},[45,66095,51885],{"class":55},[45,66097,50735],{"class":51400},[45,66099,51407],{"class":55},[20,66101,66102],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[20,66104,66105],{},"用好之间比较得到的布尔值！！！",[20,66107,66108,66109,66112,66113,1809,66116,861,66118,66121],{},"在 JS 里访问的时候，",[42,66110,66111],{},"checkbox.checked"," 是一个 ",[427,66114,66115],{},"布尔值",[42,66117,1514],{},[42,66119,66120],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[20,66123,66124,66125,66128,66129],{},"HTML 的 ",[42,66126,66127],{},"checked=\"checked\""," 只是 ",[427,66130,66131,66132,66135],{},"初始值；JS 的 ",[42,66133,66134],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[20,66137,66138],{},"：checked是一个伪类选择器",[20,66140,66141],{},[23,66142],{"alt":25,"src":66143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[20,66145,66146,66149],{},[66147,66148],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[20,66151,66152],{},[23,66153],{"alt":25,"src":66154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[15,66156,66158],{"id":66157},"_33-dom事件进阶","3.3 DOM事件进阶",[249,66160,66162],{"id":66161},"_331-事件流","3.3.1 事件流",[20,66164,66165],{},[23,66166],{"alt":25,"src":66167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22147,66169,66171],{"id":66170},"_3311-事件捕获","3.3.1.1 事件捕获",[20,66173,66174],{},[23,66175],{"alt":25,"src":66176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[36,66178,66180],{"className":50733,"code":66179,"language":50735,"meta":25,"style":25},"\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",[42,66181,66182,66192,66206,66210,66218,66232,66252,66264,66272,66279,66291,66303,66313,66317,66321,66328,66340,66352,66362,66366,66374,66382,66386,66394,66409,66428,66436,66444,66464,66484,66500,66511,66519,66536,66547,66555,66572,66583,66591,66599,66607,66611],{"__ignoreMap":25},[45,66183,66184,66186,66188,66190],{"class":47,"line":48},[45,66185,51397],{"class":55},[45,66187,51401],{"class":51400},[45,66189,51404],{"class":69},[45,66191,51407],{"class":55},[45,66193,66194,66196,66198,66200,66202,66204],{"class":47,"line":66},[45,66195,1187],{"class":55},[45,66197,50735],{"class":51400},[45,66199,51416],{"class":69},[45,66201,59],{"class":55},[45,66203,51421],{"class":62},[45,66205,51407],{"class":55},[45,66207,66208],{"class":47,"line":1331},[45,66209,2550],{"emptyLinePlaceholder":207},[45,66211,66212,66214,66216],{"class":47,"line":1346},[45,66213,1187],{"class":55},[45,66215,51434],{"class":51400},[45,66217,51407],{"class":55},[45,66219,66220,66222,66224,66226,66228,66230],{"class":47,"line":1352},[45,66221,52244],{"class":55},[45,66223,51444],{"class":51400},[45,66225,51447],{"class":69},[45,66227,59],{"class":55},[45,66229,51452],{"class":62},[45,66231,51407],{"class":55},[45,66233,66234,66236,66238,66240,66242,66244,66246,66248,66250],{"class":47,"line":1366},[45,66235,52244],{"class":55},[45,66237,51444],{"class":51400},[45,66239,15069],{"class":69},[45,66241,59],{"class":55},[45,66243,51491],{"class":62},[45,66245,51471],{"class":69},[45,66247,59],{"class":55},[45,66249,51498],{"class":62},[45,66251,51407],{"class":55},[45,66253,66254,66256,66258,66260,66262],{"class":47,"line":1372},[45,66255,52244],{"class":55},[45,66257,51507],{"class":51400},[45,66259,51510],{"class":55},[45,66261,51507],{"class":51400},[45,66263,51407],{"class":55},[45,66265,66266,66268,66270],{"class":47,"line":1463},[45,66267,52244],{"class":55},[45,66269,196],{"class":51400},[45,66271,51407],{"class":55},[45,66273,66274,66277],{"class":47,"line":1469},[45,66275,66276],{"class":69},"    .father",[45,66278,15721],{"class":55},[45,66280,66281,66283,66285,66287,66289],{"class":47,"line":1481},[45,66282,54871],{"class":79},[45,66284,51537],{"class":55},[45,66286,65174],{"class":79},[45,66288,51592],{"class":51},[45,66290,1442],{"class":55},[45,66292,66293,66295,66297,66299,66301],{"class":47,"line":1763},[45,66294,54885],{"class":79},[45,66296,51537],{"class":55},[45,66298,65174],{"class":79},[45,66300,51592],{"class":51},[45,66302,1442],{"class":55},[45,66304,66305,66307,66309,66311],{"class":47,"line":1768},[45,66306,54984],{"class":79},[45,66308,51537],{"class":55},[45,66310,51745],{"class":79},[45,66312,1442],{"class":55},[45,66314,66315],{"class":47,"line":1774},[45,66316,2337],{"class":55},[45,66318,66319],{"class":47,"line":1779},[45,66320,2550],{"emptyLinePlaceholder":207},[45,66322,66323,66326],{"class":47,"line":1793},[45,66324,66325],{"class":69},"    .son",[45,66327,15721],{"class":55},[45,66329,66330,66332,66334,66336,66338],{"class":47,"line":1798},[45,66331,54871],{"class":79},[45,66333,51537],{"class":55},[45,66335,1873],{"class":79},[45,66337,51592],{"class":51},[45,66339,1442],{"class":55},[45,66341,66342,66344,66346,66348,66350],{"class":47,"line":1804},[45,66343,54885],{"class":79},[45,66345,51537],{"class":55},[45,66347,1873],{"class":79},[45,66349,51592],{"class":51},[45,66351,1442],{"class":55},[45,66353,66354,66356,66358,66360],{"class":47,"line":1825},[45,66355,54984],{"class":79},[45,66357,51537],{"class":55},[45,66359,54989],{"class":79},[45,66361,1442],{"class":55},[45,66363,66364],{"class":47,"line":1830},[45,66365,2337],{"class":55},[45,66367,66368,66370,66372],{"class":47,"line":1844},[45,66369,52517],{"class":55},[45,66371,196],{"class":51400},[45,66373,51407],{"class":55},[45,66375,66376,66378,66380],{"class":47,"line":1849},[45,66377,51885],{"class":55},[45,66379,51434],{"class":51400},[45,66381,51407],{"class":55},[45,66383,66384],{"class":47,"line":1878},[45,66385,2550],{"emptyLinePlaceholder":207},[45,66387,66388,66390,66392],{"class":47,"line":1883},[45,66389,1187],{"class":55},[45,66391,51900],{"class":51400},[45,66393,51407],{"class":55},[45,66395,66396,66398,66400,66402,66404,66407],{"class":47,"line":1900},[45,66397,52244],{"class":55},[45,66399,51711],{"class":51400},[45,66401,53586],{"class":69},[45,66403,59],{"class":55},[45,66405,66406],{"class":62},"\"father\"",[45,66408,51407],{"class":55},[45,66410,66411,66413,66415,66417,66419,66422,66424,66426],{"class":47,"line":1905},[45,66412,51441],{"class":55},[45,66414,51711],{"class":51400},[45,66416,53586],{"class":69},[45,66418,59],{"class":55},[45,66420,66421],{"class":62},"\"son\"",[45,66423,55414],{"class":55},[45,66425,51711],{"class":51400},[45,66427,51407],{"class":55},[45,66429,66430,66432,66434],{"class":47,"line":1910},[45,66431,52517],{"class":55},[45,66433,51711],{"class":51400},[45,66435,51407],{"class":55},[45,66437,66438,66440,66442],{"class":47,"line":1915},[45,66439,52244],{"class":55},[45,66441,51913],{"class":51400},[45,66443,51407],{"class":55},[45,66445,66446,66448,66451,66453,66455,66457,66459,66462],{"class":47,"line":1929},[45,66447,11370],{"class":51},[45,66449,66450],{"class":79}," fa",[45,66452,13713],{"class":51},[45,66454,54496],{"class":55},[45,66456,54499],{"class":69},[45,66458,282],{"class":55},[45,66460,66461],{"class":62},"'.father'",[45,66463,139],{"class":55},[45,66465,66466,66468,66471,66473,66475,66477,66479,66482],{"class":47,"line":1934},[45,66467,11370],{"class":51},[45,66469,66470],{"class":79}," son",[45,66472,13713],{"class":51},[45,66474,54496],{"class":55},[45,66476,54499],{"class":69},[45,66478,282],{"class":55},[45,66480,66481],{"class":62},"'.son'",[45,66483,139],{"class":55},[45,66485,66486,66488,66490,66492,66494,66496,66498],{"class":47,"line":2727},[45,66487,52507],{"class":55},[45,66489,57913],{"class":69},[45,66491,282],{"class":55},[45,66493,57918],{"class":62},[45,66495,12584],{"class":55},[45,66497,54549],{"class":51},[45,66499,54552],{"class":55},[45,66501,66502,66504,66506,66509],{"class":47,"line":2741},[45,66503,59025],{"class":69},[45,66505,282],{"class":55},[45,66507,66508],{"class":62},"'woshiu1'",[45,66510,139],{"class":55},[45,66512,66513,66515,66517],{"class":47,"line":2749},[45,66514,54635],{"class":55},[45,66516,1514],{"class":79},[45,66518,139],{"class":55},[45,66520,66521,66524,66526,66528,66530,66532,66534],{"class":47,"line":2754},[45,66522,66523],{"class":55},"    fa.",[45,66525,57913],{"class":69},[45,66527,282],{"class":55},[45,66529,57918],{"class":62},[45,66531,12584],{"class":55},[45,66533,54549],{"class":51},[45,66535,54552],{"class":55},[45,66537,66538,66540,66542,66545],{"class":47,"line":2760},[45,66539,59025],{"class":69},[45,66541,282],{"class":55},[45,66543,66544],{"class":62},"'1'",[45,66546,139],{"class":55},[45,66548,66549,66551,66553],{"class":47,"line":2766},[45,66550,54635],{"class":55},[45,66552,1514],{"class":79},[45,66554,139],{"class":55},[45,66556,66557,66560,66562,66564,66566,66568,66570],{"class":47,"line":2771},[45,66558,66559],{"class":55},"    son.",[45,66561,57913],{"class":69},[45,66563,282],{"class":55},[45,66565,57918],{"class":62},[45,66567,12584],{"class":55},[45,66569,54549],{"class":51},[45,66571,54552],{"class":55},[45,66573,66574,66576,66578,66581],{"class":47,"line":8098},[45,66575,59025],{"class":69},[45,66577,282],{"class":55},[45,66579,66580],{"class":62},"'2'",[45,66582,139],{"class":55},[45,66584,66585,66587,66589],{"class":47,"line":8122},[45,66586,54635],{"class":55},[45,66588,1514],{"class":79},[45,66590,139],{"class":55},[45,66592,66593,66595,66597],{"class":47,"line":8127},[45,66594,52517],{"class":55},[45,66596,51913],{"class":51400},[45,66598,51407],{"class":55},[45,66600,66601,66603,66605],{"class":47,"line":8133},[45,66602,51885],{"class":55},[45,66604,51900],{"class":51400},[45,66606,51407],{"class":55},[45,66608,66609],{"class":47,"line":8160},[45,66610,2550],{"emptyLinePlaceholder":207},[45,66612,66613,66615,66617],{"class":47,"line":8165},[45,66614,51885],{"class":55},[45,66616,50735],{"class":51400},[45,66618,51407],{"class":55},[20,66620,66621],{},[23,66622],{"alt":25,"src":66623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[20,66625,66626],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22147,66628,66630],{"id":66629},"_3312-事件冒泡","3.3.1.2 事件冒泡",[20,66632,66633],{},[23,66634],{"alt":25,"src":66635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[20,66637,66638],{},"反着来",[20,66640,66641],{},"注意是同名事件，比如都是‘click’",[22147,66643,66645],{"id":66644},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[20,66647,66648],{},[23,66649],{"alt":25,"src":66650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22147,66652,66654],{"id":66653},"_3314-解绑事件","3.3.1.4 解绑事件",[20,66656,66657],{},[23,66658],{"alt":25,"src":66659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[20,66661,66662],{},[23,66663],{"alt":25,"src":66664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22147,66666,66668],{"id":66667},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[233,66670,66671],{},[169,66672,66673],{},"事件类型的区别",[20,66675,66676],{},[23,66677],{"alt":25,"src":66678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[20,66680,66681],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[233,66683,66684],{"start":66},[169,66685,66686],{},"注册事件的区别",[20,66688,66689],{},[23,66690],{"alt":25,"src":66691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22147,66693,66695],{"id":66694},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[20,66697,66698],{},[23,66699],{"alt":25,"src":66700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[20,66702,66703],{},[23,66704],{"alt":25,"src":66705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[36,66707,66709],{"className":53167,"code":66708,"language":53169,"meta":25,"style":25},"\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",[42,66710,66711,66719,66736,66759,66767,66772,66777,66782,66786,66794,66802],{"__ignoreMap":25},[45,66712,66713,66715,66717],{"class":47,"line":48},[45,66714,1187],{"class":55},[45,66716,51900],{"class":51400},[45,66718,51407],{"class":55},[45,66720,66721,66723,66726,66729,66731,66734],{"class":47,"line":66},[45,66722,52244],{"class":55},[45,66724,66725],{"class":51400},"form",[45,66727,66728],{"class":69}," action",[45,66730,59],{"class":55},[45,66732,66733],{"class":62},"\"http:\u002F\u002Fwww.itcast.cn\"",[45,66735,51407],{"class":55},[45,66737,66738,66740,66742,66744,66746,66749,66752,66754,66757],{"class":47,"line":1331},[45,66739,51441],{"class":55},[45,66741,53921],{"class":51400},[45,66743,53924],{"class":69},[45,66745,59],{"class":55},[45,66747,66748],{"class":62},"\"submit\"",[45,66750,66751],{"class":69}," value",[45,66753,59],{"class":55},[45,66755,66756],{"class":62},"\"免费注册\"",[45,66758,51407],{"class":55},[45,66760,66761,66763,66765],{"class":47,"line":1346},[45,66762,51441],{"class":55},[45,66764,51913],{"class":51400},[45,66766,51407],{"class":55},[45,66768,66769],{"class":47,"line":1352},[45,66770,66771],{"class":55},"      const form = document.querySelector('form')\n",[45,66773,66774],{"class":47,"line":1366},[45,66775,66776],{"class":55},"      form.addEventListener('submit', function (e) {\n",[45,66778,66779],{"class":47,"line":1372},[45,66780,66781],{"class":55},"        e.preventDefault()\n",[45,66783,66784],{"class":47,"line":1463},[45,66785,64915],{"class":55},[45,66787,66788,66790,66792],{"class":47,"line":1469},[45,66789,51876],{"class":55},[45,66791,51913],{"class":51400},[45,66793,51407],{"class":55},[45,66795,66796,66798,66800],{"class":47,"line":1481},[45,66797,52517],{"class":55},[45,66799,66725],{"class":51400},[45,66801,51407],{"class":55},[45,66803,66804,66806,66808],{"class":47,"line":1763},[45,66805,51885],{"class":55},[45,66807,51900],{"class":51400},[45,66809,51407],{"class":55},[20,66811,66812],{},"点击不在跳转！！！",[249,66814,66816],{"id":66815},"_332-事件委托","3.3.2 事件委托",[20,66818,66819],{},[23,66820],{"alt":25,"src":66821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[36,66823,66825],{"className":50733,"code":66824,"language":50735,"meta":25,"style":25},"\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",[42,66826,66827,66837,66851,66855,66863,66877,66897,66909,66917,66921,66929,66937,66949,66961,66973,66985,66997,67010,67018,67026,67031,67050,67071,67076,67081,67086,67091,67100,67104,67114,67118,67123,67128,67142,67152,67156,67160,67168,67176,67180],{"__ignoreMap":25},[45,66828,66829,66831,66833,66835],{"class":47,"line":48},[45,66830,51397],{"class":55},[45,66832,51401],{"class":51400},[45,66834,51404],{"class":69},[45,66836,51407],{"class":55},[45,66838,66839,66841,66843,66845,66847,66849],{"class":47,"line":66},[45,66840,1187],{"class":55},[45,66842,50735],{"class":51400},[45,66844,51416],{"class":69},[45,66846,59],{"class":55},[45,66848,51421],{"class":62},[45,66850,51407],{"class":55},[45,66852,66853],{"class":47,"line":1331},[45,66854,2550],{"emptyLinePlaceholder":207},[45,66856,66857,66859,66861],{"class":47,"line":1346},[45,66858,1187],{"class":55},[45,66860,51434],{"class":51400},[45,66862,51407],{"class":55},[45,66864,66865,66867,66869,66871,66873,66875],{"class":47,"line":1352},[45,66866,52244],{"class":55},[45,66868,51444],{"class":51400},[45,66870,51447],{"class":69},[45,66872,59],{"class":55},[45,66874,51452],{"class":62},[45,66876,51407],{"class":55},[45,66878,66879,66881,66883,66885,66887,66889,66891,66893,66895],{"class":47,"line":1366},[45,66880,52244],{"class":55},[45,66882,51444],{"class":51400},[45,66884,15069],{"class":69},[45,66886,59],{"class":55},[45,66888,51491],{"class":62},[45,66890,51471],{"class":69},[45,66892,59],{"class":55},[45,66894,51498],{"class":62},[45,66896,51407],{"class":55},[45,66898,66899,66901,66903,66905,66907],{"class":47,"line":1372},[45,66900,52244],{"class":55},[45,66902,51507],{"class":51400},[45,66904,51510],{"class":55},[45,66906,51507],{"class":51400},[45,66908,51407],{"class":55},[45,66910,66911,66913,66915],{"class":47,"line":1463},[45,66912,51885],{"class":55},[45,66914,51434],{"class":51400},[45,66916,51407],{"class":55},[45,66918,66919],{"class":47,"line":1469},[45,66920,2550],{"emptyLinePlaceholder":207},[45,66922,66923,66925,66927],{"class":47,"line":1481},[45,66924,1187],{"class":55},[45,66926,51900],{"class":51400},[45,66928,51407],{"class":55},[45,66930,66931,66933,66935],{"class":47,"line":1763},[45,66932,52244],{"class":55},[45,66934,166],{"class":51400},[45,66936,51407],{"class":55},[45,66938,66939,66941,66943,66945,66947],{"class":47,"line":1768},[45,66940,51441],{"class":55},[45,66942,169],{"class":51400},[45,66944,54066],{"class":55},[45,66946,169],{"class":51400},[45,66948,51407],{"class":55},[45,66950,66951,66953,66955,66957,66959],{"class":47,"line":1774},[45,66952,51441],{"class":55},[45,66954,169],{"class":51400},[45,66956,54085],{"class":55},[45,66958,169],{"class":51400},[45,66960,51407],{"class":55},[45,66962,66963,66965,66967,66969,66971],{"class":47,"line":1779},[45,66964,51441],{"class":55},[45,66966,169],{"class":51400},[45,66968,54104],{"class":55},[45,66970,169],{"class":51400},[45,66972,51407],{"class":55},[45,66974,66975,66977,66979,66981,66983],{"class":47,"line":1793},[45,66976,51441],{"class":55},[45,66978,169],{"class":51400},[45,66980,54123],{"class":55},[45,66982,169],{"class":51400},[45,66984,51407],{"class":55},[45,66986,66987,66989,66991,66993,66995],{"class":47,"line":1798},[45,66988,51441],{"class":55},[45,66990,169],{"class":51400},[45,66992,54142],{"class":55},[45,66994,169],{"class":51400},[45,66996,51407],{"class":55},[45,66998,66999,67001,67003,67006,67008],{"class":47,"line":1804},[45,67000,51441],{"class":55},[45,67002,20],{"class":51400},[45,67004,67005],{"class":55},">我不需要变色\u003C\u002F",[45,67007,20],{"class":51400},[45,67009,51407],{"class":55},[45,67011,67012,67014,67016],{"class":47,"line":1825},[45,67013,52517],{"class":55},[45,67015,166],{"class":51400},[45,67017,51407],{"class":55},[45,67019,67020,67022,67024],{"class":47,"line":1830},[45,67021,52244],{"class":55},[45,67023,51913],{"class":51400},[45,67025,51407],{"class":55},[45,67027,67028],{"class":47,"line":1844},[45,67029,67030],{"class":337},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[45,67032,67033,67035,67037,67039,67041,67043,67045,67048],{"class":47,"line":1849},[45,67034,11370],{"class":51},[45,67036,61392],{"class":79},[45,67038,13713],{"class":51},[45,67040,54496],{"class":55},[45,67042,54499],{"class":69},[45,67044,282],{"class":55},[45,67046,67047],{"class":62},"'ul'",[45,67049,139],{"class":55},[45,67051,67052,67055,67057,67059,67061,67063,67065,67067,67069],{"class":47,"line":1878},[45,67053,67054],{"class":55},"    ul.",[45,67056,57913],{"class":69},[45,67058,282],{"class":55},[45,67060,57918],{"class":62},[45,67062,12584],{"class":55},[45,67064,54549],{"class":51},[45,67066,1809],{"class":55},[45,67068,353],{"class":5366},[45,67070,12591],{"class":55},[45,67072,67073],{"class":47,"line":1883},[45,67074,67075],{"class":337},"      \u002F\u002F alert(1)\n",[45,67077,67078],{"class":47,"line":1900},[45,67079,67080],{"class":337},"      \u002F\u002F e.target就是我们点击的对象\n",[45,67082,67083],{"class":47,"line":1905},[45,67084,67085],{"class":337},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[45,67087,67088],{"class":47,"line":1910},[45,67089,67090],{"class":337},"      \u002F\u002F e.target.style.color = 'red'\n",[45,67092,67093,67095,67097],{"class":47,"line":1915},[45,67094,58344],{"class":55},[45,67096,58347],{"class":69},[45,67098,67099],{"class":55},"(e)\n",[45,67101,67102],{"class":47,"line":1929},[45,67103,2550],{"emptyLinePlaceholder":207},[45,67105,67106,67108,67111],{"class":47,"line":1934},[45,67107,58344],{"class":55},[45,67109,67110],{"class":69},"dir",[45,67112,67113],{"class":55},"(e.target)\n",[45,67115,67116],{"class":47,"line":2727},[45,67117,2550],{"emptyLinePlaceholder":207},[45,67119,67120],{"class":47,"line":2741},[45,67121,67122],{"class":337},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[45,67124,67125],{"class":47,"line":2749},[45,67126,67127],{"class":337},"      \u002F\u002F 通过tagName来进行判断\n",[45,67129,67130,67132,67135,67137,67140],{"class":47,"line":2754},[45,67131,54580],{"class":51},[45,67133,67134],{"class":55}," (e.target.tagName ",[45,67136,54586],{"class":51},[45,67138,67139],{"class":62}," 'LI'",[45,67141,12591],{"class":55},[45,67143,67144,67147,67149],{"class":47,"line":2760},[45,67145,67146],{"class":55},"        e.target.style.color ",[45,67148,59],{"class":51},[45,67150,67151],{"class":62}," 'red'\n",[45,67153,67154],{"class":47,"line":2766},[45,67155,52498],{"class":55},[45,67157,67158],{"class":47,"line":2771},[45,67159,33561],{"class":55},[45,67161,67162,67164,67166],{"class":47,"line":8098},[45,67163,52517],{"class":55},[45,67165,51913],{"class":51400},[45,67167,51407],{"class":55},[45,67169,67170,67172,67174],{"class":47,"line":8122},[45,67171,51885],{"class":55},[45,67173,51900],{"class":51400},[45,67175,51407],{"class":55},[45,67177,67178],{"class":47,"line":8127},[45,67179,2550],{"emptyLinePlaceholder":207},[45,67181,67182,67184,67186],{"class":47,"line":8133},[45,67183,51885],{"class":55},[45,67185,50735],{"class":51400},[45,67187,51407],{"class":55},[20,67189,67190],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[20,67192,67193],{},"if(e.target.ragName==='P') {}",[20,67195,67196],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[20,67198,67199],{},"通过事件委托的方式实现tab栏切换改造：",[20,67201,67202],{},"一定要记住自定义属性！！！！！！",[20,67204,67205],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[20,67207,67208],{},"id是自定义的属性名",[20,67210,67211],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[36,67213,67215],{"className":50733,"code":67214,"language":50735,"meta":25,"style":25},"\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",[42,67216,67217,67227,67241,67245,67253,67267,67287,67307,67319,67327,67333,67343,67353,67357,67361,67367,67379,67391,67403,67419,67423,67427,67433,67445,67457,67469,67479,67489,67493,67497,67505,67517,67527,67539,67543,67547,67555,67565,67575,67585,67589,67593,67603,67617,67629,67633,67637,67649,67659,67675,67685,67689,67693,67707,67717,67727,67731,67735,67741,67755,67759,67763,67771,67781,67785,67789,67798,67808,67812,67820,67828,67832,67840,67854,67868,67880,67888,67927,67959,67991,68023,68055,68063,68071,68085,68119,68153,68187,68221,68255,68263,68271,68279,68284,68289,68308,68313,68333,68341,68346,68359,68380,68393,68397,68402,68407,68420,68440,68468,68472,68476,68480,68488,68496,68500],{"__ignoreMap":25},[45,67218,67219,67221,67223,67225],{"class":47,"line":48},[45,67220,51397],{"class":55},[45,67222,51401],{"class":51400},[45,67224,51404],{"class":69},[45,67226,51407],{"class":55},[45,67228,67229,67231,67233,67235,67237,67239],{"class":47,"line":66},[45,67230,1187],{"class":55},[45,67232,50735],{"class":51400},[45,67234,51416],{"class":69},[45,67236,59],{"class":55},[45,67238,51421],{"class":62},[45,67240,51407],{"class":55},[45,67242,67243],{"class":47,"line":1331},[45,67244,2550],{"emptyLinePlaceholder":207},[45,67246,67247,67249,67251],{"class":47,"line":1346},[45,67248,1187],{"class":55},[45,67250,51434],{"class":51400},[45,67252,51407],{"class":55},[45,67254,67255,67257,67259,67261,67263,67265],{"class":47,"line":1352},[45,67256,52244],{"class":55},[45,67258,51444],{"class":51400},[45,67260,51447],{"class":69},[45,67262,59],{"class":55},[45,67264,51452],{"class":62},[45,67266,59227],{"class":55},[45,67268,67269,67271,67273,67275,67277,67279,67281,67283,67285],{"class":47,"line":1366},[45,67270,52244],{"class":55},[45,67272,51444],{"class":51400},[45,67274,51463],{"class":69},[45,67276,59],{"class":55},[45,67278,51468],{"class":62},[45,67280,51471],{"class":69},[45,67282,59],{"class":55},[45,67284,51476],{"class":62},[45,67286,59227],{"class":55},[45,67288,67289,67291,67293,67295,67297,67299,67301,67303,67305],{"class":47,"line":1372},[45,67290,52244],{"class":55},[45,67292,51444],{"class":51400},[45,67294,15069],{"class":69},[45,67296,59],{"class":55},[45,67298,51491],{"class":62},[45,67300,51471],{"class":69},[45,67302,59],{"class":55},[45,67304,51498],{"class":62},[45,67306,59227],{"class":55},[45,67308,67309,67311,67313,67315,67317],{"class":47,"line":1463},[45,67310,52244],{"class":55},[45,67312,51507],{"class":51400},[45,67314,63725],{"class":55},[45,67316,51507],{"class":51400},[45,67318,51407],{"class":55},[45,67320,67321,67323,67325],{"class":47,"line":1469},[45,67322,52244],{"class":55},[45,67324,196],{"class":51400},[45,67326,51407],{"class":55},[45,67328,67329,67331],{"class":47,"line":1481},[45,67330,6553],{"class":51400},[45,67332,15721],{"class":55},[45,67334,67335,67337,67339,67341],{"class":47,"line":1763},[45,67336,54806],{"class":79},[45,67338,51537],{"class":55},[45,67340,469],{"class":79},[45,67342,1442],{"class":55},[45,67344,67345,67347,67349,67351],{"class":47,"line":1768},[45,67346,54795],{"class":79},[45,67348,51537],{"class":55},[45,67350,469],{"class":79},[45,67352,1442],{"class":55},[45,67354,67355],{"class":47,"line":1774},[45,67356,2337],{"class":55},[45,67358,67359],{"class":47,"line":1779},[45,67360,2550],{"emptyLinePlaceholder":207},[45,67362,67363,67365],{"class":47,"line":1793},[45,67364,63776],{"class":69},[45,67366,15721],{"class":55},[45,67368,67369,67371,67373,67375,67377],{"class":47,"line":1798},[45,67370,54871],{"class":79},[45,67372,51537],{"class":55},[45,67374,63787],{"class":79},[45,67376,51592],{"class":51},[45,67378,1442],{"class":55},[45,67380,67381,67383,67385,67387,67389],{"class":47,"line":1804},[45,67382,54885],{"class":79},[45,67384,51537],{"class":55},[45,67386,63800],{"class":79},[45,67388,51592],{"class":51},[45,67390,1442],{"class":55},[45,67392,67393,67395,67397,67399,67401],{"class":47,"line":1825},[45,67394,54806],{"class":79},[45,67396,51537],{"class":55},[45,67398,977],{"class":79},[45,67400,51592],{"class":51},[45,67402,1442],{"class":55},[45,67404,67405,67407,67409,67411,67413,67415,67417],{"class":47,"line":1830},[45,67406,62077],{"class":79},[45,67408,51537],{"class":55},[45,67410,495],{"class":79},[45,67412,51592],{"class":51},[45,67414,51621],{"class":79},[45,67416,62344],{"class":79},[45,67418,1442],{"class":55},[45,67420,67421],{"class":47,"line":1844},[45,67422,2337],{"class":55},[45,67424,67425],{"class":47,"line":1849},[45,67426,2550],{"emptyLinePlaceholder":207},[45,67428,67429,67431],{"class":47,"line":1878},[45,67430,63845],{"class":69},[45,67432,15721],{"class":55},[45,67434,67435,67437,67439,67441,67443],{"class":47,"line":1883},[45,67436,54871],{"class":79},[45,67438,51537],{"class":55},[45,67440,588],{"class":79},[45,67442,605],{"class":51},[45,67444,1442],{"class":55},[45,67446,67447,67449,67451,67453,67455],{"class":47,"line":1900},[45,67448,54885],{"class":79},[45,67450,51537],{"class":55},[45,67452,1184],{"class":79},[45,67454,51592],{"class":51},[45,67456,1442],{"class":55},[45,67458,67459,67461,67463,67465,67467],{"class":47,"line":1905},[45,67460,57459],{"class":79},[45,67462,51537],{"class":55},[45,67464,1184],{"class":79},[45,67466,51592],{"class":51},[45,67468,1442],{"class":55},[45,67470,67471,67473,67475,67477],{"class":47,"line":1910},[45,67472,55109],{"class":79},[45,67474,51537],{"class":55},[45,67476,51577],{"class":79},[45,67478,1442],{"class":55},[45,67480,67481,67483,67485,67487],{"class":47,"line":1915},[45,67482,55120],{"class":79},[45,67484,51537],{"class":55},[45,67486,51768],{"class":79},[45,67488,1442],{"class":55},[45,67490,67491],{"class":47,"line":1929},[45,67492,2337],{"class":55},[45,67494,67495],{"class":47,"line":1934},[45,67496,2550],{"emptyLinePlaceholder":207},[45,67498,67499,67501,67503],{"class":47,"line":2727},[45,67500,63845],{"class":69},[45,67502,63918],{"class":51400},[45,67504,15721],{"class":55},[45,67506,67507,67509,67511,67513,67515],{"class":47,"line":2741},[45,67508,55022],{"class":79},[45,67510,51537],{"class":55},[45,67512,1077],{"class":79},[45,67514,51592],{"class":51},[45,67516,1442],{"class":55},[45,67518,67519,67521,67523,67525],{"class":47,"line":2749},[45,67520,62434],{"class":79},[45,67522,51537],{"class":55},[45,67524,63941],{"class":79},[45,67526,1442],{"class":55},[45,67528,67529,67531,67533,67535,67537],{"class":47,"line":2754},[45,67530,62100],{"class":79},[45,67532,51537],{"class":55},[45,67534,977],{"class":79},[45,67536,51592],{"class":51},[45,67538,1442],{"class":55},[45,67540,67541],{"class":47,"line":2760},[45,67542,2337],{"class":55},[45,67544,67545],{"class":47,"line":2766},[45,67546,2550],{"emptyLinePlaceholder":207},[45,67548,67549,67551,67553],{"class":47,"line":2771},[45,67550,63845],{"class":69},[45,67552,61392],{"class":51400},[45,67554,15721],{"class":55},[45,67556,67557,67559,67561,67563],{"class":47,"line":8098},[45,67558,54832],{"class":79},[45,67560,51537],{"class":55},[45,67562,54837],{"class":79},[45,67564,1442],{"class":55},[45,67566,67567,67569,67571,67573],{"class":47,"line":8122},[45,67568,55109],{"class":79},[45,67570,51537],{"class":55},[45,67572,51577],{"class":79},[45,67574,1442],{"class":55},[45,67576,67577,67579,67581,67583],{"class":47,"line":8127},[45,67578,55120],{"class":79},[45,67580,51537],{"class":55},[45,67582,51680],{"class":79},[45,67584,1442],{"class":55},[45,67586,67587],{"class":47,"line":8133},[45,67588,2337],{"class":55},[45,67590,67591],{"class":47,"line":8160},[45,67592,2550],{"emptyLinePlaceholder":207},[45,67594,67595,67597,67599,67601],{"class":47,"line":8165},[45,67596,63845],{"class":69},[45,67598,61392],{"class":51400},[45,67600,55175],{"class":51400},[45,67602,15721],{"class":55},[45,67604,67605,67607,67609,67611,67613,67615],{"class":47,"line":8171},[45,67606,54806],{"class":79},[45,67608,51537],{"class":55},[45,67610,469],{"class":79},[45,67612,9100],{"class":79},[45,67614,51592],{"class":51},[45,67616,1442],{"class":55},[45,67618,67619,67621,67623,67625,67627],{"class":47,"line":8183},[45,67620,55022],{"class":79},[45,67622,51537],{"class":55},[45,67624,826],{"class":79},[45,67626,51592],{"class":51},[45,67628,1442],{"class":55},[45,67630,67631],{"class":47,"line":8195},[45,67632,2337],{"class":55},[45,67634,67635],{"class":47,"line":8207},[45,67636,2550],{"emptyLinePlaceholder":207},[45,67638,67639,67641,67643,67645,67647],{"class":47,"line":9866},[45,67640,63845],{"class":69},[45,67642,61392],{"class":51400},[45,67644,55175],{"class":51400},[45,67646,1550],{"class":51400},[45,67648,15721],{"class":55},[45,67650,67651,67653,67655,67657],{"class":47,"line":9890},[45,67652,64070],{"class":79},[45,67654,51537],{"class":55},[45,67656,54837],{"class":79},[45,67658,1442],{"class":55},[45,67660,67661,67663,67665,67667,67669,67671,67673],{"class":47,"line":9913},[45,67662,62332],{"class":79},[45,67664,51537],{"class":55},[45,67666,356],{"class":79},[45,67668,51592],{"class":51},[45,67670,51621],{"class":79},[45,67672,64091],{"class":79},[45,67674,1442],{"class":55},[45,67676,67677,67679,67681,67683],{"class":47,"line":9937},[45,67678,57516],{"class":79},[45,67680,51537],{"class":55},[45,67682,62469],{"class":79},[45,67684,1442],{"class":55},[45,67686,67687],{"class":47,"line":9942},[45,67688,2337],{"class":55},[45,67690,67691],{"class":47,"line":9947},[45,67692,2550],{"emptyLinePlaceholder":207},[45,67694,67695,67697,67699,67701,67703,67705],{"class":47,"line":9952},[45,67696,63845],{"class":69},[45,67698,61392],{"class":51400},[45,67700,55175],{"class":51400},[45,67702,1550],{"class":51400},[45,67704,64124],{"class":69},[45,67706,15721],{"class":55},[45,67708,67709,67711,67713,67715],{"class":47,"line":9961},[45,67710,61891],{"class":79},[45,67712,51537],{"class":55},[45,67714,64135],{"class":79},[45,67716,1442],{"class":55},[45,67718,67719,67721,67723,67725],{"class":47,"line":9966},[45,67720,57516],{"class":79},[45,67722,51537],{"class":55},[45,67724,64135],{"class":79},[45,67726,1442],{"class":55},[45,67728,67729],{"class":47,"line":9972},[45,67730,2337],{"class":55},[45,67732,67733],{"class":47,"line":9993},[45,67734,2550],{"emptyLinePlaceholder":207},[45,67736,67737,67739],{"class":47,"line":9999},[45,67738,64160],{"class":69},[45,67740,15721],{"class":55},[45,67742,67743,67745,67747,67749,67751,67753],{"class":47,"line":10013},[45,67744,54795],{"class":79},[45,67746,51537],{"class":55},[45,67748,469],{"class":79},[45,67750,64173],{"class":79},[45,67752,51592],{"class":51},[45,67754,1442],{"class":55},[45,67756,67757],{"class":47,"line":10019},[45,67758,2337],{"class":55},[45,67760,67761],{"class":47,"line":10046},[45,67762,2550],{"emptyLinePlaceholder":207},[45,67764,67765,67767,67769],{"class":47,"line":10055},[45,67766,64160],{"class":69},[45,67768,62274],{"class":69},[45,67770,15721],{"class":55},[45,67772,67773,67775,67777,67779],{"class":47,"line":10061},[45,67774,55109],{"class":79},[45,67776,51537],{"class":55},[45,67778,54837],{"class":79},[45,67780,1442],{"class":55},[45,67782,67783],{"class":47,"line":10069},[45,67784,2337],{"class":55},[45,67786,67787],{"class":47,"line":10074},[45,67788,2550],{"emptyLinePlaceholder":207},[45,67790,67791,67793,67796],{"class":47,"line":16753},[45,67792,64160],{"class":69},[45,67794,67795],{"class":69}," .active",[45,67797,15721],{"class":55},[45,67799,67800,67802,67804,67806],{"class":47,"line":16759},[45,67801,55109],{"class":79},[45,67803,51537],{"class":55},[45,67805,60969],{"class":79},[45,67807,1442],{"class":55},[45,67809,67810],{"class":47,"line":16782},[45,67811,2337],{"class":55},[45,67813,67814,67816,67818],{"class":47,"line":16788},[45,67815,52517],{"class":55},[45,67817,196],{"class":51400},[45,67819,51407],{"class":55},[45,67821,67822,67824,67826],{"class":47,"line":16811},[45,67823,51885],{"class":55},[45,67825,51434],{"class":51400},[45,67827,51407],{"class":55},[45,67829,67830],{"class":47,"line":16825},[45,67831,2550],{"emptyLinePlaceholder":207},[45,67833,67834,67836,67838],{"class":47,"line":16845},[45,67835,1187],{"class":55},[45,67837,51900],{"class":51400},[45,67839,51407],{"class":55},[45,67841,67842,67844,67846,67848,67850,67852],{"class":47,"line":16851},[45,67843,52244],{"class":55},[45,67845,51711],{"class":51400},[45,67847,53586],{"class":69},[45,67849,59],{"class":55},[45,67851,64275],{"class":62},[45,67853,51407],{"class":55},[45,67855,67856,67858,67860,67862,67864,67866],{"class":47,"line":16862},[45,67857,51441],{"class":55},[45,67859,51711],{"class":51400},[45,67861,53586],{"class":69},[45,67863,59],{"class":55},[45,67865,64290],{"class":62},[45,67867,51407],{"class":55},[45,67869,67870,67872,67874,67876,67878],{"class":47,"line":16885},[45,67871,55334],{"class":55},[45,67873,249],{"class":51400},[45,67875,64301],{"class":55},[45,67877,249],{"class":51400},[45,67879,51407],{"class":55},[45,67881,67882,67884,67886],{"class":47,"line":16907},[45,67883,55334],{"class":55},[45,67885,166],{"class":51400},[45,67887,51407],{"class":55},[45,67889,67890,67892,67894,67896,67898,67900,67902,67904,67906,67908,67910,67912,67914,67917,67919,67921,67923,67925],{"class":47,"line":16912},[45,67891,55402],{"class":55},[45,67893,169],{"class":51400},[45,67895,61152],{"class":55},[45,67897,516],{"class":51400},[45,67899,53586],{"class":69},[45,67901,59],{"class":55},[45,67903,59806],{"class":62},[45,67905,61157],{"class":69},[45,67907,59],{"class":55},[45,67909,64336],{"class":62},[45,67911,54051],{"class":69},[45,67913,59],{"class":55},[45,67915,67916],{"class":62},"\"0\"",[45,67918,64339],{"class":55},[45,67920,516],{"class":51400},[45,67922,55414],{"class":55},[45,67924,169],{"class":51400},[45,67926,51407],{"class":55},[45,67928,67929,67931,67933,67935,67937,67939,67941,67943,67945,67947,67949,67951,67953,67955,67957],{"class":47,"line":16918},[45,67930,55402],{"class":55},[45,67932,169],{"class":51400},[45,67934,61152],{"class":55},[45,67936,516],{"class":51400},[45,67938,61157],{"class":69},[45,67940,59],{"class":55},[45,67942,64336],{"class":62},[45,67944,54051],{"class":69},[45,67946,59],{"class":55},[45,67948,3828],{"class":62},[45,67950,64366],{"class":55},[45,67952,516],{"class":51400},[45,67954,55414],{"class":55},[45,67956,169],{"class":51400},[45,67958,51407],{"class":55},[45,67960,67961,67963,67965,67967,67969,67971,67973,67975,67977,67979,67981,67983,67985,67987,67989],{"class":47,"line":16932},[45,67962,55402],{"class":55},[45,67964,169],{"class":51400},[45,67966,61152],{"class":55},[45,67968,516],{"class":51400},[45,67970,61157],{"class":69},[45,67972,59],{"class":55},[45,67974,64336],{"class":62},[45,67976,54051],{"class":69},[45,67978,59],{"class":55},[45,67980,3851],{"class":62},[45,67982,64393],{"class":55},[45,67984,516],{"class":51400},[45,67986,55414],{"class":55},[45,67988,169],{"class":51400},[45,67990,51407],{"class":55},[45,67992,67993,67995,67997,67999,68001,68003,68005,68007,68009,68011,68013,68015,68017,68019,68021],{"class":47,"line":16945},[45,67994,55402],{"class":55},[45,67996,169],{"class":51400},[45,67998,61152],{"class":55},[45,68000,516],{"class":51400},[45,68002,61157],{"class":69},[45,68004,59],{"class":55},[45,68006,64336],{"class":62},[45,68008,54051],{"class":69},[45,68010,59],{"class":55},[45,68012,3864],{"class":62},[45,68014,64420],{"class":55},[45,68016,516],{"class":51400},[45,68018,55414],{"class":55},[45,68020,169],{"class":51400},[45,68022,51407],{"class":55},[45,68024,68025,68027,68029,68031,68033,68035,68037,68039,68041,68043,68045,68047,68049,68051,68053],{"class":47,"line":16950},[45,68026,55402],{"class":55},[45,68028,169],{"class":51400},[45,68030,61152],{"class":55},[45,68032,516],{"class":51400},[45,68034,61157],{"class":69},[45,68036,59],{"class":55},[45,68038,64336],{"class":62},[45,68040,54051],{"class":69},[45,68042,59],{"class":55},[45,68044,3877],{"class":62},[45,68046,64447],{"class":55},[45,68048,516],{"class":51400},[45,68050,55414],{"class":55},[45,68052,169],{"class":51400},[45,68054,51407],{"class":55},[45,68056,68057,68059,68061],{"class":47,"line":16964},[45,68058,55507],{"class":55},[45,68060,166],{"class":51400},[45,68062,51407],{"class":55},[45,68064,68065,68067,68069],{"class":47,"line":16969},[45,68066,51876],{"class":55},[45,68068,51711],{"class":51400},[45,68070,51407],{"class":55},[45,68072,68073,68075,68077,68079,68081,68083],{"class":47,"line":16975},[45,68074,51441],{"class":55},[45,68076,51711],{"class":51400},[45,68078,53586],{"class":69},[45,68080,59],{"class":55},[45,68082,64484],{"class":62},[45,68084,51407],{"class":55},[45,68086,68087,68089,68091,68093,68095,68097,68099,68101,68103,68105,68107,68109,68111,68113,68115,68117],{"class":47,"line":16980},[45,68088,55334],{"class":55},[45,68090,51711],{"class":51400},[45,68092,53586],{"class":69},[45,68094,59],{"class":55},[45,68096,64499],{"class":62},[45,68098,61152],{"class":55},[45,68100,23],{"class":51400},[45,68102,55339],{"class":69},[45,68104,59],{"class":55},[45,68106,64510],{"class":62},[45,68108,55347],{"class":69},[45,68110,59],{"class":55},[45,68112,7802],{"class":62},[45,68114,64519],{"class":55},[45,68116,51711],{"class":51400},[45,68118,51407],{"class":55},[45,68120,68121,68123,68125,68127,68129,68131,68133,68135,68137,68139,68141,68143,68145,68147,68149,68151],{"class":47,"line":16994},[45,68122,55334],{"class":55},[45,68124,51711],{"class":51400},[45,68126,53586],{"class":69},[45,68128,59],{"class":55},[45,68130,62723],{"class":62},[45,68132,61152],{"class":55},[45,68134,23],{"class":51400},[45,68136,55339],{"class":69},[45,68138,59],{"class":55},[45,68140,64546],{"class":62},[45,68142,55347],{"class":69},[45,68144,59],{"class":55},[45,68146,7802],{"class":62},[45,68148,64519],{"class":55},[45,68150,51711],{"class":51400},[45,68152,51407],{"class":55},[45,68154,68155,68157,68159,68161,68163,68165,68167,68169,68171,68173,68175,68177,68179,68181,68183,68185],{"class":47,"line":16999},[45,68156,55334],{"class":55},[45,68158,51711],{"class":51400},[45,68160,53586],{"class":69},[45,68162,59],{"class":55},[45,68164,62723],{"class":62},[45,68166,61152],{"class":55},[45,68168,23],{"class":51400},[45,68170,55339],{"class":69},[45,68172,59],{"class":55},[45,68174,64581],{"class":62},[45,68176,55347],{"class":69},[45,68178,59],{"class":55},[45,68180,7802],{"class":62},[45,68182,64519],{"class":55},[45,68184,51711],{"class":51400},[45,68186,51407],{"class":55},[45,68188,68189,68191,68193,68195,68197,68199,68201,68203,68205,68207,68209,68211,68213,68215,68217,68219],{"class":47,"line":17004},[45,68190,55334],{"class":55},[45,68192,51711],{"class":51400},[45,68194,53586],{"class":69},[45,68196,59],{"class":55},[45,68198,62723],{"class":62},[45,68200,61152],{"class":55},[45,68202,23],{"class":51400},[45,68204,55339],{"class":69},[45,68206,59],{"class":55},[45,68208,64616],{"class":62},[45,68210,55347],{"class":69},[45,68212,59],{"class":55},[45,68214,7802],{"class":62},[45,68216,64519],{"class":55},[45,68218,51711],{"class":51400},[45,68220,51407],{"class":55},[45,68222,68223,68225,68227,68229,68231,68233,68235,68237,68239,68241,68243,68245,68247,68249,68251,68253],{"class":47,"line":17018},[45,68224,55334],{"class":55},[45,68226,51711],{"class":51400},[45,68228,53586],{"class":69},[45,68230,59],{"class":55},[45,68232,62723],{"class":62},[45,68234,61152],{"class":55},[45,68236,23],{"class":51400},[45,68238,55339],{"class":69},[45,68240,59],{"class":55},[45,68242,64651],{"class":62},[45,68244,55347],{"class":69},[45,68246,59],{"class":55},[45,68248,7802],{"class":62},[45,68250,64519],{"class":55},[45,68252,51711],{"class":51400},[45,68254,51407],{"class":55},[45,68256,68257,68259,68261],{"class":47,"line":17030},[45,68258,51876],{"class":55},[45,68260,51711],{"class":51400},[45,68262,51407],{"class":55},[45,68264,68265,68267,68269],{"class":47,"line":17035},[45,68266,52517],{"class":55},[45,68268,51711],{"class":51400},[45,68270,51407],{"class":55},[45,68272,68273,68275,68277],{"class":47,"line":17048},[45,68274,52244],{"class":55},[45,68276,51913],{"class":51400},[45,68278,51407],{"class":55},[45,68280,68281],{"class":47,"line":17053},[45,68282,68283],{"class":337},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[45,68285,68286],{"class":47,"line":17058},[45,68287,68288],{"class":337},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[45,68290,68291,68293,68295,68297,68299,68301,68303,68306],{"class":47,"line":17063},[45,68292,11370],{"class":51},[45,68294,61392],{"class":79},[45,68296,13713],{"class":51},[45,68298,54496],{"class":55},[45,68300,54499],{"class":69},[45,68302,282],{"class":55},[45,68304,68305],{"class":62},"'.tab-nav ul'",[45,68307,139],{"class":55},[45,68309,68310],{"class":47,"line":17076},[45,68311,68312],{"class":337},"    \u002F\u002F 2.添加事件\n",[45,68314,68315,68317,68319,68321,68323,68325,68327,68329,68331],{"class":47,"line":17081},[45,68316,67054],{"class":55},[45,68318,57913],{"class":69},[45,68320,282],{"class":55},[45,68322,57918],{"class":62},[45,68324,12584],{"class":55},[45,68326,54549],{"class":51},[45,68328,1809],{"class":55},[45,68330,353],{"class":5366},[45,68332,12591],{"class":55},[45,68334,68335,68337,68339],{"class":47,"line":32733},[45,68336,58344],{"class":55},[45,68338,67110],{"class":69},[45,68340,67113],{"class":55},[45,68342,68343],{"class":47,"line":32739},[45,68344,68345],{"class":337},"      \u002F\u002Fe.targer是我们点击的对象\n",[45,68347,68348,68350,68352,68354,68357],{"class":47,"line":32745},[45,68349,54580],{"class":51},[45,68351,67134],{"class":55},[45,68353,54586],{"class":51},[45,68355,68356],{"class":62}," 'A'",[45,68358,12591],{"class":55},[45,68360,68361,68363,68365,68367,68370,68372,68374,68376,68378],{"class":47,"line":32751},[45,68362,52025],{"class":55},[45,68364,54499],{"class":69},[45,68366,282],{"class":55},[45,68368,68369],{"class":62},"'.active'",[45,68371,57103],{"class":55},[45,68373,57106],{"class":69},[45,68375,282],{"class":55},[45,68377,64814],{"class":62},[45,68379,139],{"class":55},[45,68381,68382,68385,68387,68389,68391],{"class":47,"line":32757},[45,68383,68384],{"class":55},"        e.target.classList.",[45,68386,5484],{"class":69},[45,68388,282],{"class":55},[45,68390,64814],{"class":62},[45,68392,139],{"class":55},[45,68394,68395],{"class":47,"line":32768},[45,68396,2550],{"emptyLinePlaceholder":207},[45,68398,68399],{"class":47,"line":32774},[45,68400,68401],{"class":337},"        \u002F\u002F 下面大盒子模块\n",[45,68403,68404],{"class":47,"line":32794},[45,68405,68406],{"class":337},"        \u002F\u002F console.log(e.target.dataset.id)\n",[45,68408,68409,68411,68413,68415,68417],{"class":47,"line":32800},[45,68410,61370],{"class":51},[45,68412,3182],{"class":79},[45,68414,13713],{"class":51},[45,68416,45666],{"class":51},[45,68418,68419],{"class":55},"e.target.dataset.id\n",[45,68421,68422,68424,68426,68428,68430,68432,68434,68436,68438],{"class":47,"line":32811},[45,68423,52025],{"class":55},[45,68425,54499],{"class":69},[45,68427,282],{"class":55},[45,68429,64862],{"class":62},[45,68431,57103],{"class":55},[45,68433,57106],{"class":69},[45,68435,282],{"class":55},[45,68437,64814],{"class":62},[45,68439,139],{"class":55},[45,68441,68442,68444,68446,68448,68450,68452,68454,68456,68458,68460,68462,68464,68466],{"class":47,"line":32817},[45,68443,52025],{"class":55},[45,68445,54499],{"class":69},[45,68447,282],{"class":55},[45,68449,64888],{"class":62},[45,68451,718],{"class":55},[45,68453,45666],{"class":51},[45,68455,136],{"class":79},[45,68457,57132],{"class":62},[45,68459,57103],{"class":55},[45,68461,5484],{"class":69},[45,68463,282],{"class":55},[45,68465,64814],{"class":62},[45,68467,139],{"class":55},[45,68469,68470],{"class":47,"line":32823},[45,68471,2550],{"emptyLinePlaceholder":207},[45,68473,68474],{"class":47,"line":32829},[45,68475,52498],{"class":55},[45,68477,68478],{"class":47,"line":32835},[45,68479,33561],{"class":55},[45,68481,68482,68484,68486],{"class":47,"line":32841},[45,68483,52517],{"class":55},[45,68485,51913],{"class":51400},[45,68487,51407],{"class":55},[45,68489,68490,68492,68494],{"class":47,"line":32847},[45,68491,51885],{"class":55},[45,68493,51900],{"class":51400},[45,68495,51407],{"class":55},[45,68497,68498],{"class":47,"line":32853},[45,68499,2550],{"emptyLinePlaceholder":207},[45,68501,68502,68504,68506],{"class":47,"line":32873},[45,68503,51885],{"class":55},[45,68505,50735],{"class":51400},[45,68507,51407],{"class":55},[249,68509,68511],{"id":68510},"_333-页面加载事件","3.3.3 页面加载事件",[233,68513,68514],{},[169,68515,68516],{},"load",[20,68518,68519],{},[23,68520],{"alt":25,"src":68521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[20,68523,68524],{},"window代表整个窗口，比document还要大",[20,68526,68527],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[20,68529,68530],{},"img.addEventListener('load', function () {",[20,68532,68533],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[20,68535,52564],{},[233,68537,68538],{"start":66},[169,68539,68540],{},"DOMContentLoaded",[20,68542,68543],{},[23,68544],{"alt":25,"src":68545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[20,68547,68548],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[249,68550,68552],{"id":68551},"_334-元素滚动事件","3.3.4 元素滚动事件",[20,68554,68555],{},[23,68556],{"alt":25,"src":68557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[20,68559,68560],{},[23,68561],{"alt":25,"src":68562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[20,68564,68565],{},[23,68566],{"alt":25,"src":68567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[20,68569,68570],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[20,68572,68573],{},"获得的是数字型数据，不带单位",[20,68575,68576],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[20,68578,68579],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[20,68581,68582],{},"它是通过document.documentElement来获取",[20,68584,68585],{},[23,68586],{"alt":25,"src":68587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[20,68589,68590],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[249,68592,68594],{"id":68593},"_335-页面缩放事件","3.3.5 页面缩放事件",[20,68596,68597],{},[23,68598],{"alt":25,"src":68599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[20,68601,68602],{},[23,68603],{"alt":25,"src":68604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[249,68606,68608],{"id":68607},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[20,68610,68611],{},[23,68612],{"alt":25,"src":68613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[20,68615,68616],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[20,68618,68619],{},[23,68620],{"alt":25,"src":68621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[20,68623,68624],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[20,68626,68627],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[20,68629,68630],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[20,68632,68633],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[20,68635,68636],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[20,68638,68639],{},[23,68640],{"alt":25,"src":68641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[20,68643,68644],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[20,68646,68647],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[20,68649,68650],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[20,68652,68653],{},"e.pageX-box.getBoundingClientRect()",[249,68655,68657],{"id":68656},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[20,68659,68660],{},[23,68661],{"alt":25,"src":68662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[20,68664,68665],{},"这个是相对于视口来说的，它是个方法，不是属性值",[249,68667,68669],{"id":68668},"_338-总结","3.3.8 总结",[20,68671,68672],{},[23,68673],{"alt":25,"src":68674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[20,68676,68677],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[20,68679,68680],{},"修改盒子的宽高只能通过width和height来实现",[249,68682,68684],{"id":68683},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[36,68686,68688],{"className":50733,"code":68687,"language":50735,"meta":25,"style":25},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[42,68689,68690,68695,68700,68705,68710],{"__ignoreMap":25},[45,68691,68692],{"class":47,"line":48},[45,68693,68694],{"class":55},"\u002F* 页面滑动 *\u002F\n",[45,68696,68697],{"class":47,"line":66},[45,68698,68699],{"class":55},"html {\n",[45,68701,68702],{"class":47,"line":1331},[45,68703,68704],{"class":55},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[45,68706,68707],{"class":47,"line":1346},[45,68708,68709],{"class":55},"  scroll-behavior: smooth;\n",[45,68711,68712],{"class":47,"line":1352},[45,68713,1716],{"class":55},[20,68715,68716],{},"默认是auto",[249,68718,68720],{"id":68719},"_3310-日期对象","3.3.10 日期对象",[22147,68722,68724],{"id":68723},"_33101-实例化","3.3.10.1 实例化",[20,68726,68727],{},[23,68728],{"alt":25,"src":68729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22147,68731,68733],{"id":68732},"_33102-时期对象方法","3.3.10.2 时期对象方法",[20,68735,68736],{},[23,68737],{"alt":25,"src":68738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[20,68740,68741],{},"月份+1",[20,68743,68744],{},"老外认为第一天为0，星期天",[20,68746,68747],{},"方法使用的时候必须要跟括号",[20,68749,68750],{},"快速获得日期",[20,68752,68753],{},"\u002F\u002F 得到年月日",[20,68755,68756],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[20,68758,68759],{},"\u002F\u002F 得到当地日期",[20,68761,68762],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[20,68764,68765],{},"\u002F\u002F 得到当地时间",[20,68767,68768],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[20,68770,68771],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[20,68773,68774],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51913,68776,68777],{},"\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,68779,68780],{},"学会去封装函数！",[22147,68782,68784],{"id":68783},"_33103-时间戳","3.3.10.3 时间戳",[20,68786,68787],{},[23,68788],{"alt":25,"src":68789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[20,68791,68792],{},[23,68793],{"alt":25,"src":68794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[20,68796,68797],{},"三种方法记住一个就可以",[249,68799,68801],{"id":68800},"_3311-节点操作","3.3.11 节点操作",[22147,68803,68805],{"id":68804},"_33111-dom节点","3.3.11.1 DOM节点",[20,68807,68808],{},[23,68809],{"alt":25,"src":68810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[20,68812,68813],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22147,68815,68817],{"id":68816},"_33112-查找节点","3.3.11.2 查找节点",[20,68819,68820],{},"前边的document.querySelector()是获取的元素",[20,68822,68823],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[20,68825,68826],{},[23,68827],{"alt":25,"src":68828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[233,68830,68831],{},[169,68832,68833],{},"父节点",[20,68835,68836],{},[23,68837],{"alt":25,"src":68838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[233,68840,68841],{"start":66},[169,68842,68843],{},"子节点",[20,68845,68846],{},[23,68847],{"alt":25,"src":68848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[20,68850,68851],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[20,68853,68854],{},"children获得的是伪数组，是亲儿子",[233,68856,68857],{"start":1331},[169,68858,68859],{},"兄弟节点",[20,68861,68862],{},[23,68863],{"alt":25,"src":68864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22147,68866,68868],{"id":68867},"_33113-增加节点","3.3.11.3 增加节点",[20,68870,68871],{},[23,68872],{"alt":25,"src":68873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[20,68875,68876],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[20,68878,68879],{},[23,68880],{"alt":25,"src":68881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[20,68883,68884],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[20,68886,68887],{},"下面是写法的部分展示，就按照下边的格式来写",[20,68889,68890],{},"例：",[51913,68892,68893],{},"\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,68895,68896],{},[23,68897],{"alt":25,"src":68898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[20,68900,68901],{},"false只克隆标签，里边的内容不会克隆过来",[36,68903,68905],{"className":50733,"code":68904,"language":50735,"meta":25,"style":25},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[42,68906,68907],{"__ignoreMap":25},[45,68908,68909],{"class":47,"line":48},[45,68910,68904],{"class":55},[22147,68912,68914],{"id":68913},"_33114-删除节点","3.3.11.4 删除节点",[20,68916,68917],{},[23,68918],{"alt":25,"src":68919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[20,68921,68922],{},"父亲删儿子",[20,68924,68925],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[249,68927,68929],{"id":68928},"_3312-m端事件","3.3.12 M端事件",[20,68931,68932],{},"M端就是移动端",[20,68934,68935],{},[23,68936],{"alt":25,"src":68937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[249,68939,68941],{"id":68940},"_3313-插件","3.3.13 插件",[20,68943,68944],{},"要熟悉官网！！！",[20,68946,68947],{},[516,68948,68949],{"href":68949,"rel":68950},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24012],[20,68952,68953],{},[516,68954,68955],{"href":68955,"rel":68956},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24012],[249,68958,68960],{"id":68959},"_3314-学生信息表","3.3.14 学生信息表",[233,68962,68963,68966,68969,68972,68975,68978,68981,68984],{},[169,68964,68965],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[169,68967,68968],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[169,68970,68971],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[169,68973,68974],{},"用好表单元素自带的属性，value,name等",[169,68976,68977],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[169,68979,68980],{},"不要忘记事件对象",[169,68982,68983],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[169,68985,68986],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[20,68988,68989],{},"结构：",[36,68991,68993],{"className":50733,"code":68992,"language":50735,"meta":25,"style":25},"\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",[42,68994,68995,69005,69019,69023,69031,69045,69065,69086,69099,69123,69131,69135,69143,69156,69177,69205,69233,69238,69260,69280,69299,69307,69335,69357,69377,69397,69417,69437,69457,69465,69485,69493,69497,69510,69518,69526,69534,69547,69560,69573,69586,69599,69612,69625,69633,69641,69649,69654,69659,69664,69669,69674,69679,69684,69689,69694,69699,69704,69709,69714,69722,69730,69738,69742,69762,69781,69801,69821,69841,69861,69865,69870,69890,69895,69905,69910,69915,69935,69957,69962,69972,69976,69980,69985,69990,70019,70033,70048,70052,70056,70060,70065,70076,70089,70094,70099,70104,70109,70114,70118,70123,70128,70137,70142,70147,70159,70164,70171,70175,70180,70190,70195,70205,70210,70238,70259,70269,70289,70307,70324,70341,70358,70375,70379,70389,70394,70399,70404,70415,70419,70423,70427,70432,70437,70458,70470,70475,70480,70485,70499,70504,70511,70515,70519,70527,70531,70539,70543],{"__ignoreMap":25},[45,68996,68997,68999,69001,69003],{"class":47,"line":48},[45,68998,51397],{"class":55},[45,69000,51401],{"class":51400},[45,69002,51404],{"class":69},[45,69004,51407],{"class":55},[45,69006,69007,69009,69011,69013,69015,69017],{"class":47,"line":66},[45,69008,1187],{"class":55},[45,69010,50735],{"class":51400},[45,69012,51416],{"class":69},[45,69014,59],{"class":55},[45,69016,51421],{"class":62},[45,69018,51407],{"class":55},[45,69020,69021],{"class":47,"line":1331},[45,69022,2550],{"emptyLinePlaceholder":207},[45,69024,69025,69027,69029],{"class":47,"line":1346},[45,69026,1187],{"class":55},[45,69028,51434],{"class":51400},[45,69030,51407],{"class":55},[45,69032,69033,69035,69037,69039,69041,69043],{"class":47,"line":1352},[45,69034,52244],{"class":55},[45,69036,51444],{"class":51400},[45,69038,51447],{"class":69},[45,69040,59],{"class":55},[45,69042,51452],{"class":62},[45,69044,59227],{"class":55},[45,69046,69047,69049,69051,69053,69055,69057,69059,69061,69063],{"class":47,"line":1366},[45,69048,52244],{"class":55},[45,69050,51444],{"class":51400},[45,69052,15069],{"class":69},[45,69054,59],{"class":55},[45,69056,51491],{"class":62},[45,69058,51471],{"class":69},[45,69060,59],{"class":55},[45,69062,51498],{"class":62},[45,69064,59227],{"class":55},[45,69066,69067,69069,69071,69073,69075,69077,69079,69081,69084],{"class":47,"line":1372},[45,69068,52244],{"class":55},[45,69070,51444],{"class":51400},[45,69072,51463],{"class":69},[45,69074,59],{"class":55},[45,69076,51468],{"class":62},[45,69078,51471],{"class":69},[45,69080,59],{"class":55},[45,69082,69083],{"class":62},"\"ie=edge\"",[45,69085,59227],{"class":55},[45,69087,69088,69090,69092,69095,69097],{"class":47,"line":1463},[45,69089,52244],{"class":55},[45,69091,51507],{"class":51400},[45,69093,69094],{"class":55},">学生信息管理\u003C\u002F",[45,69096,51507],{"class":51400},[45,69098,51407],{"class":55},[45,69100,69101,69103,69106,69109,69111,69114,69116,69118,69121],{"class":47,"line":1469},[45,69102,52244],{"class":55},[45,69104,69105],{"class":51400},"link",[45,69107,69108],{"class":69}," rel",[45,69110,59],{"class":55},[45,69112,69113],{"class":62},"\"stylesheet\"",[45,69115,61157],{"class":69},[45,69117,59],{"class":55},[45,69119,69120],{"class":62},"\"css\u002Findex.css\"",[45,69122,59227],{"class":55},[45,69124,69125,69127,69129],{"class":47,"line":1481},[45,69126,51885],{"class":55},[45,69128,51434],{"class":51400},[45,69130,51407],{"class":55},[45,69132,69133],{"class":47,"line":1763},[45,69134,2550],{"emptyLinePlaceholder":207},[45,69136,69137,69139,69141],{"class":47,"line":1768},[45,69138,1187],{"class":55},[45,69140,51900],{"class":51400},[45,69142,51407],{"class":55},[45,69144,69145,69147,69149,69152,69154],{"class":47,"line":1774},[45,69146,52244],{"class":55},[45,69148,10],{"class":51400},[45,69150,69151],{"class":55},">新增学员\u003C\u002F",[45,69153,10],{"class":51400},[45,69155,51407],{"class":55},[45,69157,69158,69160,69162,69164,69166,69168,69171,69173,69175],{"class":47,"line":1779},[45,69159,52244],{"class":55},[45,69161,66725],{"class":51400},[45,69163,53586],{"class":69},[45,69165,59],{"class":55},[45,69167,62764],{"class":62},[45,69169,69170],{"class":69}," autocomplete",[45,69172,59],{"class":55},[45,69174,31876],{"class":62},[45,69176,51407],{"class":55},[45,69178,69179,69182,69184,69186,69188,69190,69192,69194,69197,69199,69201,69203],{"class":47,"line":1793},[45,69180,69181],{"class":55},"    姓名：\u003C",[45,69183,53921],{"class":51400},[45,69185,53924],{"class":69},[45,69187,59],{"class":55},[45,69189,62799],{"class":62},[45,69191,53586],{"class":69},[45,69193,59],{"class":55},[45,69195,69196],{"class":62},"\"uname\"",[45,69198,15069],{"class":69},[45,69200,59],{"class":55},[45,69202,69196],{"class":62},[45,69204,59227],{"class":55},[45,69206,69207,69210,69212,69214,69216,69218,69220,69222,69225,69227,69229,69231],{"class":47,"line":1798},[45,69208,69209],{"class":55},"    年龄：\u003C",[45,69211,53921],{"class":51400},[45,69213,53924],{"class":69},[45,69215,59],{"class":55},[45,69217,62799],{"class":62},[45,69219,53586],{"class":69},[45,69221,59],{"class":55},[45,69223,69224],{"class":62},"\"age\"",[45,69226,15069],{"class":69},[45,69228,59],{"class":55},[45,69230,69224],{"class":62},[45,69232,59227],{"class":55},[45,69234,69235],{"class":47,"line":1804},[45,69236,69237],{"class":55},"    性别:\n",[45,69239,69240,69242,69245,69247,69249,69252,69254,69256,69258],{"class":47,"line":1825},[45,69241,51441],{"class":55},[45,69243,69244],{"class":51400},"select",[45,69246,15069],{"class":69},[45,69248,59],{"class":55},[45,69250,69251],{"class":62},"\"gender\"",[45,69253,53586],{"class":69},[45,69255,59],{"class":55},[45,69257,69251],{"class":62},[45,69259,51407],{"class":55},[45,69261,69262,69264,69267,69269,69271,69273,69276,69278],{"class":47,"line":1830},[45,69263,55334],{"class":55},[45,69265,69266],{"class":51400},"option",[45,69268,66751],{"class":69},[45,69270,59],{"class":55},[45,69272,10110],{"class":62},[45,69274,69275],{"class":55},">男\u003C\u002F",[45,69277,69266],{"class":51400},[45,69279,51407],{"class":55},[45,69281,69282,69284,69286,69288,69290,69292,69295,69297],{"class":47,"line":1844},[45,69283,55334],{"class":55},[45,69285,69266],{"class":51400},[45,69287,66751],{"class":69},[45,69289,59],{"class":55},[45,69291,10179],{"class":62},[45,69293,69294],{"class":55},">女\u003C\u002F",[45,69296,69266],{"class":51400},[45,69298,51407],{"class":55},[45,69300,69301,69303,69305],{"class":47,"line":1849},[45,69302,51876],{"class":55},[45,69304,69244],{"class":51400},[45,69306,51407],{"class":55},[45,69308,69309,69312,69314,69316,69318,69320,69322,69324,69327,69329,69331,69333],{"class":47,"line":1878},[45,69310,69311],{"class":55},"    薪资：\u003C",[45,69313,53921],{"class":51400},[45,69315,53924],{"class":69},[45,69317,59],{"class":55},[45,69319,62799],{"class":62},[45,69321,53586],{"class":69},[45,69323,59],{"class":55},[45,69325,69326],{"class":62},"\"salary\"",[45,69328,15069],{"class":69},[45,69330,59],{"class":55},[45,69332,69326],{"class":62},[45,69334,59227],{"class":55},[45,69336,69337,69340,69342,69344,69346,69349,69351,69353,69355],{"class":47,"line":1883},[45,69338,69339],{"class":55},"    就业城市：\u003C",[45,69341,69244],{"class":51400},[45,69343,15069],{"class":69},[45,69345,59],{"class":55},[45,69347,69348],{"class":62},"\"city\"",[45,69350,53586],{"class":69},[45,69352,59],{"class":55},[45,69354,69348],{"class":62},[45,69356,51407],{"class":55},[45,69358,69359,69361,69363,69365,69367,69370,69373,69375],{"class":47,"line":1900},[45,69360,55334],{"class":55},[45,69362,69266],{"class":51400},[45,69364,66751],{"class":69},[45,69366,59],{"class":55},[45,69368,69369],{"class":62},"\"北京\"",[45,69371,69372],{"class":55},">北京\u003C\u002F",[45,69374,69266],{"class":51400},[45,69376,51407],{"class":55},[45,69378,69379,69381,69383,69385,69387,69390,69393,69395],{"class":47,"line":1905},[45,69380,55334],{"class":55},[45,69382,69266],{"class":51400},[45,69384,66751],{"class":69},[45,69386,59],{"class":55},[45,69388,69389],{"class":62},"\"上海\"",[45,69391,69392],{"class":55},">上海\u003C\u002F",[45,69394,69266],{"class":51400},[45,69396,51407],{"class":55},[45,69398,69399,69401,69403,69405,69407,69410,69413,69415],{"class":47,"line":1910},[45,69400,55334],{"class":55},[45,69402,69266],{"class":51400},[45,69404,66751],{"class":69},[45,69406,59],{"class":55},[45,69408,69409],{"class":62},"\"广州\"",[45,69411,69412],{"class":55},">广州\u003C\u002F",[45,69414,69266],{"class":51400},[45,69416,51407],{"class":55},[45,69418,69419,69421,69423,69425,69427,69430,69433,69435],{"class":47,"line":1915},[45,69420,55334],{"class":55},[45,69422,69266],{"class":51400},[45,69424,66751],{"class":69},[45,69426,59],{"class":55},[45,69428,69429],{"class":62},"\"深圳\"",[45,69431,69432],{"class":55},">深圳\u003C\u002F",[45,69434,69266],{"class":51400},[45,69436,51407],{"class":55},[45,69438,69439,69441,69443,69445,69447,69450,69453,69455],{"class":47,"line":1929},[45,69440,55334],{"class":55},[45,69442,69266],{"class":51400},[45,69444,66751],{"class":69},[45,69446,59],{"class":55},[45,69448,69449],{"class":62},"\"曹县\"",[45,69451,69452],{"class":55},">曹县\u003C\u002F",[45,69454,69266],{"class":51400},[45,69456,51407],{"class":55},[45,69458,69459,69461,69463],{"class":47,"line":1934},[45,69460,51876],{"class":55},[45,69462,69244],{"class":51400},[45,69464,51407],{"class":55},[45,69466,69467,69469,69471,69473,69475,69478,69481,69483],{"class":47,"line":2727},[45,69468,51441],{"class":55},[45,69470,53987],{"class":51400},[45,69472,53586],{"class":69},[45,69474,59],{"class":55},[45,69476,69477],{"class":62},"\"add\"",[45,69479,69480],{"class":55},">录入\u003C\u002F",[45,69482,53987],{"class":51400},[45,69484,51407],{"class":55},[45,69486,69487,69489,69491],{"class":47,"line":2741},[45,69488,52517],{"class":55},[45,69490,66725],{"class":51400},[45,69492,51407],{"class":55},[45,69494,69495],{"class":47,"line":2749},[45,69496,2550],{"emptyLinePlaceholder":207},[45,69498,69499,69501,69503,69506,69508],{"class":47,"line":2754},[45,69500,52244],{"class":55},[45,69502,10],{"class":51400},[45,69504,69505],{"class":55},">就业榜\u003C\u002F",[45,69507,10],{"class":51400},[45,69509,51407],{"class":55},[45,69511,69512,69514,69516],{"class":47,"line":2760},[45,69513,52244],{"class":55},[45,69515,415],{"class":51400},[45,69517,51407],{"class":55},[45,69519,69520,69522,69524],{"class":47,"line":2766},[45,69521,51441],{"class":55},[45,69523,418],{"class":51400},[45,69525,51407],{"class":55},[45,69527,69528,69530,69532],{"class":47,"line":2771},[45,69529,55334],{"class":55},[45,69531,421],{"class":51400},[45,69533,51407],{"class":55},[45,69535,69536,69538,69540,69543,69545],{"class":47,"line":8098},[45,69537,55402],{"class":55},[45,69539,424],{"class":51400},[45,69541,69542],{"class":55},">序号\u003C\u002F",[45,69544,424],{"class":51400},[45,69546,51407],{"class":55},[45,69548,69549,69551,69553,69556,69558],{"class":47,"line":8122},[45,69550,55402],{"class":55},[45,69552,424],{"class":51400},[45,69554,69555],{"class":55},">姓名\u003C\u002F",[45,69557,424],{"class":51400},[45,69559,51407],{"class":55},[45,69561,69562,69564,69566,69569,69571],{"class":47,"line":8127},[45,69563,55402],{"class":55},[45,69565,424],{"class":51400},[45,69567,69568],{"class":55},">年龄\u003C\u002F",[45,69570,424],{"class":51400},[45,69572,51407],{"class":55},[45,69574,69575,69577,69579,69582,69584],{"class":47,"line":8133},[45,69576,55402],{"class":55},[45,69578,424],{"class":51400},[45,69580,69581],{"class":55},">性别\u003C\u002F",[45,69583,424],{"class":51400},[45,69585,51407],{"class":55},[45,69587,69588,69590,69592,69595,69597],{"class":47,"line":8160},[45,69589,55402],{"class":55},[45,69591,424],{"class":51400},[45,69593,69594],{"class":55},">薪资\u003C\u002F",[45,69596,424],{"class":51400},[45,69598,51407],{"class":55},[45,69600,69601,69603,69605,69608,69610],{"class":47,"line":8165},[45,69602,55402],{"class":55},[45,69604,424],{"class":51400},[45,69606,69607],{"class":55},">就业城市\u003C\u002F",[45,69609,424],{"class":51400},[45,69611,51407],{"class":55},[45,69613,69614,69616,69618,69621,69623],{"class":47,"line":8171},[45,69615,55402],{"class":55},[45,69617,424],{"class":51400},[45,69619,69620],{"class":55},">操作\u003C\u002F",[45,69622,424],{"class":51400},[45,69624,51407],{"class":55},[45,69626,69627,69629,69631],{"class":47,"line":8183},[45,69628,55507],{"class":55},[45,69630,421],{"class":51400},[45,69632,51407],{"class":55},[45,69634,69635,69637,69639],{"class":47,"line":8195},[45,69636,51876],{"class":55},[45,69638,418],{"class":51400},[45,69640,51407],{"class":55},[45,69642,69643,69645,69647],{"class":47,"line":8207},[45,69644,51441],{"class":55},[45,69646,462],{"class":51400},[45,69648,51407],{"class":55},[45,69650,69651],{"class":47,"line":9866},[45,69652,69653],{"class":337},"      \u003C!-- \n",[45,69655,69656],{"class":47,"line":9890},[45,69657,69658],{"class":337},"        \u003Ctr>\n",[45,69660,69661],{"class":47,"line":9913},[45,69662,69663],{"class":337},"          \u003Ctd>1001\u003C\u002Ftd>\n",[45,69665,69666],{"class":47,"line":9937},[45,69667,69668],{"class":337},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[45,69670,69671],{"class":47,"line":9942},[45,69672,69673],{"class":337},"          \u003Ctd>19\u003C\u002Ftd>\n",[45,69675,69676],{"class":47,"line":9947},[45,69677,69678],{"class":337},"          \u003Ctd>男\u003C\u002Ftd>\n",[45,69680,69681],{"class":47,"line":9952},[45,69682,69683],{"class":337},"          \u003Ctd>15000\u003C\u002Ftd>\n",[45,69685,69686],{"class":47,"line":9961},[45,69687,69688],{"class":337},"          \u003Ctd>上海\u003C\u002Ftd>\n",[45,69690,69691],{"class":47,"line":9966},[45,69692,69693],{"class":337},"          \u003Ctd>\n",[45,69695,69696],{"class":47,"line":9972},[45,69697,69698],{"class":337},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[45,69700,69701],{"class":47,"line":9993},[45,69702,69703],{"class":337},"          \u003C\u002Ftd>\n",[45,69705,69706],{"class":47,"line":9999},[45,69707,69708],{"class":337},"        \u003C\u002Ftr> \n",[45,69710,69711],{"class":47,"line":10013},[45,69712,69713],{"class":337},"        -->\n",[45,69715,69716,69718,69720],{"class":47,"line":10019},[45,69717,51876],{"class":55},[45,69719,462],{"class":51400},[45,69721,51407],{"class":55},[45,69723,69724,69726,69728],{"class":47,"line":10046},[45,69725,52517],{"class":55},[45,69727,415],{"class":51400},[45,69729,51407],{"class":55},[45,69731,69732,69734,69736],{"class":47,"line":10055},[45,69733,52244],{"class":55},[45,69735,51913],{"class":51400},[45,69737,51407],{"class":55},[45,69739,69740],{"class":47,"line":10061},[45,69741,60058],{"class":337},[45,69743,69744,69746,69749,69751,69753,69755,69757,69760],{"class":47,"line":10069},[45,69745,11370],{"class":51},[45,69747,69748],{"class":79}," uname",[45,69750,13713],{"class":51},[45,69752,54496],{"class":55},[45,69754,54499],{"class":69},[45,69756,282],{"class":55},[45,69758,69759],{"class":62},"'.uname'",[45,69761,139],{"class":55},[45,69763,69764,69766,69768,69770,69772,69774,69776,69779],{"class":47,"line":10074},[45,69765,11370],{"class":51},[45,69767,15838],{"class":79},[45,69769,13713],{"class":51},[45,69771,54496],{"class":55},[45,69773,54499],{"class":69},[45,69775,282],{"class":55},[45,69777,69778],{"class":62},"'.age'",[45,69780,139],{"class":55},[45,69782,69783,69785,69788,69790,69792,69794,69796,69799],{"class":47,"line":16753},[45,69784,11370],{"class":51},[45,69786,69787],{"class":79}," gender",[45,69789,13713],{"class":51},[45,69791,54496],{"class":55},[45,69793,54499],{"class":69},[45,69795,282],{"class":55},[45,69797,69798],{"class":62},"'.gender'",[45,69800,139],{"class":55},[45,69802,69803,69805,69808,69810,69812,69814,69816,69819],{"class":47,"line":16759},[45,69804,11370],{"class":51},[45,69806,69807],{"class":79}," salary",[45,69809,13713],{"class":51},[45,69811,54496],{"class":55},[45,69813,54499],{"class":69},[45,69815,282],{"class":55},[45,69817,69818],{"class":62},"'.salary'",[45,69820,139],{"class":55},[45,69822,69823,69825,69828,69830,69832,69834,69836,69839],{"class":47,"line":16782},[45,69824,11370],{"class":51},[45,69826,69827],{"class":79}," city",[45,69829,13713],{"class":51},[45,69831,54496],{"class":55},[45,69833,54499],{"class":69},[45,69835,282],{"class":55},[45,69837,69838],{"class":62},"'.city'",[45,69840,139],{"class":55},[45,69842,69843,69845,69848,69850,69852,69854,69856,69859],{"class":47,"line":16788},[45,69844,11370],{"class":51},[45,69846,69847],{"class":79}," tbody",[45,69849,13713],{"class":51},[45,69851,54496],{"class":55},[45,69853,54499],{"class":69},[45,69855,282],{"class":55},[45,69857,69858],{"class":62},"'tbody'",[45,69860,139],{"class":55},[45,69862,69863],{"class":47,"line":16811},[45,69864,2550],{"emptyLinePlaceholder":207},[45,69866,69867],{"class":47,"line":16825},[45,69868,69869],{"class":337},"    \u002F\u002F 获取所有带有name属性的元素\n",[45,69871,69872,69874,69877,69879,69881,69883,69885,69888],{"class":47,"line":16845},[45,69873,11370],{"class":51},[45,69875,69876],{"class":79}," items",[45,69878,13713],{"class":51},[45,69880,54496],{"class":55},[45,69882,55781],{"class":69},[45,69884,282],{"class":55},[45,69886,69887],{"class":62},"'[name]'",[45,69889,139],{"class":55},[45,69891,69892],{"class":47,"line":16851},[45,69893,69894],{"class":337},"    \u002F\u002F 声明一个空的数组\n",[45,69896,69897,69899,69901,69903],{"class":47,"line":16862},[45,69898,11370],{"class":51},[45,69900,57795],{"class":79},[45,69902,13713],{"class":51},[45,69904,51938],{"class":55},[45,69906,69907],{"class":47,"line":16885},[45,69908,69909],{"class":337},"    \u002F\u002F 1.录入模块\n",[45,69911,69912],{"class":47,"line":16907},[45,69913,69914],{"class":337},"    \u002F\u002F 1.1这是一个表单提交事件\n",[45,69916,69917,69919,69922,69924,69926,69928,69930,69933],{"class":47,"line":16912},[45,69918,11370],{"class":51},[45,69920,69921],{"class":79}," info",[45,69923,13713],{"class":51},[45,69925,54496],{"class":55},[45,69927,54499],{"class":69},[45,69929,282],{"class":55},[45,69931,69932],{"class":62},"'.info'",[45,69934,139],{"class":55},[45,69936,69937,69940,69942,69944,69947,69949,69951,69953,69955],{"class":47,"line":16918},[45,69938,69939],{"class":55},"    info.",[45,69941,57913],{"class":69},[45,69943,282],{"class":55},[45,69945,69946],{"class":62},"'submit'",[45,69948,12584],{"class":55},[45,69950,54549],{"class":51},[45,69952,1809],{"class":55},[45,69954,353],{"class":5366},[45,69956,12591],{"class":55},[45,69958,69959],{"class":47,"line":16932},[45,69960,69961],{"class":337},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[45,69963,69964,69967,69970],{"class":47,"line":16945},[45,69965,69966],{"class":55},"      e.",[45,69968,69969],{"class":69},"preventDefault",[45,69971,2126],{"class":55},[45,69973,69974],{"class":47,"line":16950},[45,69975,60112],{"class":337},[45,69977,69978],{"class":47,"line":16964},[45,69979,2550],{"emptyLinePlaceholder":207},[45,69981,69982],{"class":47,"line":16969},[45,69983,69984],{"class":337},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[45,69986,69987],{"class":47,"line":16975},[45,69988,69989],{"class":337},"      \u002F\u002F 先遍历循环\n",[45,69991,69992,69994,69996,69998,70000,70002,70004,70006,70008,70011,70013,70015,70017],{"class":47,"line":16980},[45,69993,52384],{"class":51},[45,69995,1809],{"class":55},[45,69997,51947],{"class":51},[45,69999,9588],{"class":55},[45,70001,59],{"class":51},[45,70003,4243],{"class":79},[45,70005,9595],{"class":55},[45,70007,1187],{"class":51},[45,70009,70010],{"class":55}," items.",[45,70012,52068],{"class":79},[45,70014,3364],{"class":55},[45,70016,2442],{"class":51},[45,70018,12591],{"class":55},[45,70020,70021,70023,70026,70028,70031],{"class":47,"line":16994},[45,70022,2647],{"class":51},[45,70024,70025],{"class":55}," (items[i].value ",[45,70027,54586],{"class":51},[45,70029,70030],{"class":62}," ''",[45,70032,12591],{"class":55},[45,70034,70035,70038,70041,70043,70046],{"class":47,"line":16999},[45,70036,70037],{"class":51},"          return",[45,70039,70040],{"class":69}," alert",[45,70042,282],{"class":55},[45,70044,70045],{"class":62},"'输入内容不能为空'",[45,70047,139],{"class":55},[45,70049,70050],{"class":47,"line":17004},[45,70051,2679],{"class":55},[45,70053,70054],{"class":47,"line":17018},[45,70055,52498],{"class":55},[45,70057,70058],{"class":47,"line":17030},[45,70059,2550],{"emptyLinePlaceholder":207},[45,70061,70062],{"class":47,"line":17035},[45,70063,70064],{"class":337},"      \u002F\u002F 创建新的对象\n",[45,70066,70067,70069,70072,70074],{"class":47,"line":17048},[45,70068,58328],{"class":51},[45,70070,70071],{"class":79}," obj",[45,70073,13713],{"class":51},[45,70075,15721],{"class":55},[45,70077,70078,70081,70083,70085,70087],{"class":47,"line":17053},[45,70079,70080],{"class":55},"        stuID: arr.",[45,70082,52068],{"class":79},[45,70084,45666],{"class":51},[45,70086,136],{"class":79},[45,70088,31566],{"class":55},[45,70090,70091],{"class":47,"line":17058},[45,70092,70093],{"class":55},"        uname: uname.value,\n",[45,70095,70096],{"class":47,"line":17063},[45,70097,70098],{"class":55},"        age: age.value,\n",[45,70100,70101],{"class":47,"line":17076},[45,70102,70103],{"class":55},"        gender: gender.value,\n",[45,70105,70106],{"class":47,"line":17081},[45,70107,70108],{"class":55},"        salary: salary.value,\n",[45,70110,70111],{"class":47,"line":32733},[45,70112,70113],{"class":55},"        city: city.value\n",[45,70115,70116],{"class":47,"line":32739},[45,70117,52498],{"class":55},[45,70119,70120],{"class":47,"line":32745},[45,70121,70122],{"class":337},"      \u002F\u002F console.log(obj);\n",[45,70124,70125],{"class":47,"line":32751},[45,70126,70127],{"class":337},"      \u002F\u002F 追加到数组里面\n",[45,70129,70130,70132,70134],{"class":47,"line":32757},[45,70131,58107],{"class":55},[45,70133,51984],{"class":69},[45,70135,70136],{"class":55},"(obj)\n",[45,70138,70139],{"class":47,"line":32768},[45,70140,70141],{"class":337},"      \u002F\u002F console.log(arr);\n",[45,70143,70144],{"class":47,"line":32774},[45,70145,70146],{"class":337},"      \u002F\u002F 清空表单  reset重置表单\n",[45,70148,70149,70152,70154,70157],{"class":47,"line":32794},[45,70150,70151],{"class":79},"      this",[45,70153,835],{"class":55},[45,70155,70156],{"class":69},"reset",[45,70158,2126],{"class":55},[45,70160,70161],{"class":47,"line":32800},[45,70162,70163],{"class":337},"      \u002F\u002F 调用渲染函数\n",[45,70165,70166,70169],{"class":47,"line":32811},[45,70167,70168],{"class":69},"      render",[45,70170,2126],{"class":55},[45,70172,70173],{"class":47,"line":32817},[45,70174,33561],{"class":55},[45,70176,70177],{"class":47,"line":32823},[45,70178,70179],{"class":337},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[45,70181,70182,70185,70188],{"class":47,"line":32829},[45,70183,70184],{"class":51},"    function",[45,70186,70187],{"class":69}," render",[45,70189,11002],{"class":55},[45,70191,70192],{"class":47,"line":32835},[45,70193,70194],{"class":337},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[45,70196,70197,70200,70202],{"class":47,"line":32841},[45,70198,70199],{"class":55},"      tbody.innerHTML ",[45,70201,59],{"class":51},[45,70203,70204],{"class":62}," ''\n",[45,70206,70207],{"class":47,"line":32847},[45,70208,70209],{"class":337},"      \u002F\u002F 遍历数组\n",[45,70211,70212,70214,70216,70218,70220,70222,70224,70226,70228,70230,70232,70234,70236],{"class":47,"line":32853},[45,70213,52384],{"class":51},[45,70215,1809],{"class":55},[45,70217,51947],{"class":51},[45,70219,9588],{"class":55},[45,70221,59],{"class":51},[45,70223,4243],{"class":79},[45,70225,9595],{"class":55},[45,70227,1187],{"class":51},[45,70229,52065],{"class":55},[45,70231,52068],{"class":79},[45,70233,3364],{"class":55},[45,70235,2442],{"class":51},[45,70237,12591],{"class":55},[45,70239,70240,70242,70245,70247,70249,70252,70254,70257],{"class":47,"line":32873},[45,70241,61370],{"class":51},[45,70243,70244],{"class":79}," tr",[45,70246,13713],{"class":51},[45,70248,54496],{"class":55},[45,70250,70251],{"class":69},"createElement",[45,70253,282],{"class":55},[45,70255,70256],{"class":62},"'tr'",[45,70258,139],{"class":55},[45,70260,70261,70264,70266],{"class":47,"line":32879},[45,70262,70263],{"class":55},"        tr.innerHTML ",[45,70265,59],{"class":51},[45,70267,70268],{"class":62}," `\n",[45,70270,70271,70274,70276,70278,70280,70283,70286],{"class":47,"line":32895},[45,70272,70273],{"class":62},"        \u003Ctd>${",[45,70275,4030],{"class":55},[45,70277,1167],{"class":62},[45,70279,718],{"class":55},[45,70281,70282],{"class":62},"].",[45,70284,70285],{"class":55},"stuID",[45,70287,70288],{"class":62},"}\u003C\u002Ftd>\n",[45,70290,70291,70294,70296,70298,70300,70302,70305],{"class":47,"line":32901},[45,70292,70293],{"class":62},"          \u003Ctd>${",[45,70295,4030],{"class":55},[45,70297,1167],{"class":62},[45,70299,718],{"class":55},[45,70301,70282],{"class":62},[45,70303,70304],{"class":55},"uname",[45,70306,70288],{"class":62},[45,70308,70309,70311,70313,70315,70317,70319,70322],{"class":47,"line":32915},[45,70310,70293],{"class":62},[45,70312,4030],{"class":55},[45,70314,1167],{"class":62},[45,70316,718],{"class":55},[45,70318,70282],{"class":62},[45,70320,70321],{"class":55},"age",[45,70323,70288],{"class":62},[45,70325,70326,70328,70330,70332,70334,70336,70339],{"class":47,"line":32921},[45,70327,70293],{"class":62},[45,70329,4030],{"class":55},[45,70331,1167],{"class":62},[45,70333,718],{"class":55},[45,70335,70282],{"class":62},[45,70337,70338],{"class":55},"gender",[45,70340,70288],{"class":62},[45,70342,70343,70345,70347,70349,70351,70353,70356],{"class":47,"line":32936},[45,70344,70293],{"class":62},[45,70346,4030],{"class":55},[45,70348,1167],{"class":62},[45,70350,718],{"class":55},[45,70352,70282],{"class":62},[45,70354,70355],{"class":55},"salary",[45,70357,70288],{"class":62},[45,70359,70360,70362,70364,70366,70368,70370,70373],{"class":47,"line":32942},[45,70361,70293],{"class":62},[45,70363,4030],{"class":55},[45,70365,1167],{"class":62},[45,70367,718],{"class":55},[45,70369,70282],{"class":62},[45,70371,70372],{"class":55},"city",[45,70374,70288],{"class":62},[45,70376,70377],{"class":47,"line":32951},[45,70378,69693],{"class":62},[45,70380,70381,70384,70386],{"class":47,"line":32957},[45,70382,70383],{"class":62},"            \u003Ca href=\"javascript:\" data-id=${",[45,70385,718],{"class":55},[45,70387,70388],{"class":62},"}>删除\u003C\u002Fa>\n",[45,70390,70391],{"class":47,"line":32966},[45,70392,70393],{"class":62},"          \u003C\u002Ftd> \n",[45,70395,70396],{"class":47,"line":32972},[45,70397,70398],{"class":62},"          `\n",[45,70400,70401],{"class":47,"line":32978},[45,70402,70403],{"class":337},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[45,70405,70406,70409,70412],{"class":47,"line":32987},[45,70407,70408],{"class":55},"        tbody.",[45,70410,70411],{"class":69},"appendChild",[45,70413,70414],{"class":55},"(tr)\n",[45,70416,70417],{"class":47,"line":32993},[45,70418,52498],{"class":55},[45,70420,70421],{"class":47,"line":33004},[45,70422,2337],{"class":55},[45,70424,70425],{"class":47,"line":33010},[45,70426,2550],{"emptyLinePlaceholder":207},[45,70428,70429],{"class":47,"line":33029},[45,70430,70431],{"class":337},"    \u002F\u002F 3.删除委托\n",[45,70433,70434],{"class":47,"line":33035},[45,70435,70436],{"class":337},"    \u002F\u002F 3.1 事件委托 tbody\n",[45,70438,70439,70442,70444,70446,70448,70450,70452,70454,70456],{"class":47,"line":33046},[45,70440,70441],{"class":55},"    tbody.",[45,70443,57913],{"class":69},[45,70445,282],{"class":55},[45,70447,57918],{"class":62},[45,70449,12584],{"class":55},[45,70451,54549],{"class":51},[45,70453,1809],{"class":55},[45,70455,353],{"class":5366},[45,70457,12591],{"class":55},[45,70459,70460,70462,70464,70466,70468],{"class":47,"line":33052},[45,70461,54580],{"class":51},[45,70463,67134],{"class":55},[45,70465,54586],{"class":51},[45,70467,68356],{"class":62},[45,70469,12591],{"class":55},[45,70471,70472],{"class":47,"line":33072},[45,70473,70474],{"class":337},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[45,70476,70477],{"class":47,"line":33088},[45,70478,70479],{"class":337},"        \u002F\u002F console.log(e.target.dataset.id);\n",[45,70481,70482],{"class":47,"line":33094},[45,70483,70484],{"class":337},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[45,70486,70487,70490,70492,70495,70497],{"class":47,"line":33108},[45,70488,70489],{"class":55},"        arr.",[45,70491,58110],{"class":69},[45,70493,70494],{"class":55},"(e.target.dataset.id, ",[45,70496,495],{"class":79},[45,70498,139],{"class":55},[45,70500,70501],{"class":47,"line":33114},[45,70502,70503],{"class":337},"        \u002F\u002F 重新渲染一次\n",[45,70505,70506,70509],{"class":47,"line":33120},[45,70507,70508],{"class":69},"        render",[45,70510,2126],{"class":55},[45,70512,70513],{"class":47,"line":33131},[45,70514,52498],{"class":55},[45,70516,70517],{"class":47,"line":33137},[45,70518,33561],{"class":55},[45,70520,70521,70523,70525],{"class":47,"line":33143},[45,70522,52517],{"class":55},[45,70524,51913],{"class":51400},[45,70526,51407],{"class":55},[45,70528,70529],{"class":47,"line":33153},[45,70530,2550],{"emptyLinePlaceholder":207},[45,70532,70533,70535,70537],{"class":47,"line":33159},[45,70534,51885],{"class":55},[45,70536,51900],{"class":51400},[45,70538,51407],{"class":55},[45,70540,70541],{"class":47,"line":33170},[45,70542,2550],{"emptyLinePlaceholder":207},[45,70544,70545,70547,70549],{"class":47,"line":33176},[45,70546,51885],{"class":55},[45,70548,50735],{"class":51400},[45,70550,51407],{"class":55},[20,70552,70553],{},"样式：",[36,70555,70559],{"className":70556,"code":70557,"language":70558,"meta":25,"style":25},"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",[42,70560,70561,70566,70576,70585,70589,70593,70598,70608,70613,70617,70622,70632,70637,70646,70650,70654,70659,70664,70674,70684,70689,70693,70698,70707,70717,70722,70732,70742,70746,70751,70759,70763,70768,70773,70778,70786,70795,70799,70804,70813,70817,70822,70831,70835,70840,70849,70858,70866,70870,70875,70884,70894,70903,70913,70919,70928,70938,70948,70952,70957,70966,70974,70984,70992,71001,71010,71020,71028,71032,71037,71046],{"__ignoreMap":25},[45,70562,70563],{"class":47,"line":48},[45,70564,70565],{"class":55},"* {\n",[45,70567,70568,70571,70573],{"class":47,"line":66},[45,70569,70570],{"class":51400},"  margin",[45,70572,51537],{"class":55},[45,70574,70575],{"class":62},"0;\n",[45,70577,70578,70581,70583],{"class":47,"line":1331},[45,70579,70580],{"class":62},"  padding",[45,70582,51537],{"class":55},[45,70584,70575],{"class":62},[45,70586,70587],{"class":47,"line":1346},[45,70588,1716],{"class":55},[45,70590,70591],{"class":47,"line":1352},[45,70592,2550],{"emptyLinePlaceholder":207},[45,70594,70595],{"class":47,"line":1366},[45,70596,70597],{"class":62},"a {\n",[45,70599,70600,70603,70605],{"class":47,"line":1372},[45,70601,70602],{"class":51400},"  text-decoration",[45,70604,51537],{"class":55},[45,70606,70607],{"class":62},"none;\n",[45,70609,70610],{"class":47,"line":1463},[45,70611,70612],{"class":62},"  color:#721c24;\n",[45,70614,70615],{"class":47,"line":1469},[45,70616,1716],{"class":55},[45,70618,70619],{"class":47,"line":1481},[45,70620,70621],{"class":62},"h1 {\n",[45,70623,70624,70627,70629],{"class":47,"line":1763},[45,70625,70626],{"class":51400},"  text-align",[45,70628,51537],{"class":55},[45,70630,70631],{"class":62},"center;\n",[45,70633,70634],{"class":47,"line":1768},[45,70635,70636],{"class":62},"  color:#333;\n",[45,70638,70639,70641,70643],{"class":47,"line":1774},[45,70640,70570],{"class":51400},[45,70642,51537],{"class":55},[45,70644,70645],{"class":62},"20px 0;\n",[45,70647,70648],{"class":47,"line":1779},[45,70649,2824],{"class":55},[45,70651,70652],{"class":47,"line":1793},[45,70653,1716],{"class":55},[45,70655,70656],{"class":47,"line":1798},[45,70657,70658],{"class":62},"table {\n",[45,70660,70661],{"class":47,"line":1804},[45,70662,70663],{"class":62},"  margin:0 auto;\n",[45,70665,70666,70669,70671],{"class":47,"line":1825},[45,70667,70668],{"class":51400},"  width",[45,70670,51537],{"class":55},[45,70672,70673],{"class":62},"800px;\n",[45,70675,70676,70679,70681],{"class":47,"line":1830},[45,70677,70678],{"class":51400},"  border-collapse",[45,70680,51537],{"class":55},[45,70682,70683],{"class":62},"collapse;\n",[45,70685,70686],{"class":47,"line":1844},[45,70687,70688],{"class":62},"  color:#004085;\n",[45,70690,70691],{"class":47,"line":1849},[45,70692,1716],{"class":55},[45,70694,70695],{"class":47,"line":1878},[45,70696,70697],{"class":62},"th {\n",[45,70699,70700,70702,70704],{"class":47,"line":1883},[45,70701,70580],{"class":51400},[45,70703,51537],{"class":55},[45,70705,70706],{"class":62},"10px;\n",[45,70708,70709,70712,70714],{"class":47,"line":1900},[45,70710,70711],{"class":51400},"  background",[45,70713,51537],{"class":55},[45,70715,70716],{"class":337},"#cfe5ff;\n",[45,70718,70719],{"class":47,"line":1905},[45,70720,70721],{"class":55},"  \n",[45,70723,70724,70727,70729],{"class":47,"line":1910},[45,70725,70726],{"class":51400},"  font-size",[45,70728,51537],{"class":55},[45,70730,70731],{"class":62},"20px;\n",[45,70733,70734,70737,70739],{"class":47,"line":1915},[45,70735,70736],{"class":51400},"  font-weight",[45,70738,51537],{"class":55},[45,70740,70741],{"class":62},"400;\n",[45,70743,70744],{"class":47,"line":1929},[45,70745,1716],{"class":55},[45,70747,70748],{"class":47,"line":1934},[45,70749,70750],{"class":62},"td,th {\n",[45,70752,70753,70756],{"class":47,"line":2727},[45,70754,70755],{"class":62},"  border:1px solid",[45,70757,70758],{"class":337}," #b8daff;\n",[45,70760,70761],{"class":47,"line":2741},[45,70762,1716],{"class":55},[45,70764,70765],{"class":47,"line":2749},[45,70766,70767],{"class":62},"td {\n",[45,70769,70770],{"class":47,"line":2754},[45,70771,70772],{"class":62},"  padding:10px;\n",[45,70774,70775],{"class":47,"line":2760},[45,70776,70777],{"class":62},"  color:#666;\n",[45,70779,70780,70782,70784],{"class":47,"line":2766},[45,70781,70626],{"class":51400},[45,70783,51537],{"class":55},[45,70785,70631],{"class":62},[45,70787,70788,70790,70792],{"class":47,"line":2771},[45,70789,70726],{"class":51400},[45,70791,51537],{"class":55},[45,70793,70794],{"class":62},"16px;\n",[45,70796,70797],{"class":47,"line":8098},[45,70798,1716],{"class":55},[45,70800,70801],{"class":47,"line":8122},[45,70802,70803],{"class":62},"tbody tr {\n",[45,70805,70806,70808,70810],{"class":47,"line":8127},[45,70807,70711],{"class":51400},[45,70809,51537],{"class":55},[45,70811,70812],{"class":337},"#fff;\n",[45,70814,70815],{"class":47,"line":8133},[45,70816,1716],{"class":55},[45,70818,70819],{"class":47,"line":8160},[45,70820,70821],{"class":62},"tbody tr:hover {\n",[45,70823,70824,70826,70828],{"class":47,"line":8165},[45,70825,70711],{"class":51400},[45,70827,51537],{"class":55},[45,70829,70830],{"class":337},"#e1ecf8;\n",[45,70832,70833],{"class":47,"line":8171},[45,70834,1716],{"class":55},[45,70836,70837],{"class":47,"line":8183},[45,70838,70839],{"class":62},".info {\n",[45,70841,70842,70844,70846],{"class":47,"line":8195},[45,70843,70668],{"class":51400},[45,70845,51537],{"class":55},[45,70847,70848],{"class":62},"900px;\n",[45,70850,70851,70853,70855],{"class":47,"line":8207},[45,70852,70570],{"class":51400},[45,70854,51537],{"class":55},[45,70856,70857],{"class":62},"50px auto;\n",[45,70859,70860,70862,70864],{"class":47,"line":9866},[45,70861,70626],{"class":51400},[45,70863,51537],{"class":55},[45,70865,70631],{"class":62},[45,70867,70868],{"class":47,"line":9890},[45,70869,1716],{"class":55},[45,70871,70872],{"class":47,"line":9913},[45,70873,70874],{"class":62},".info  input, .info select {\n",[45,70876,70877,70879,70881],{"class":47,"line":9937},[45,70878,70668],{"class":51400},[45,70880,51537],{"class":55},[45,70882,70883],{"class":62},"80px;\n",[45,70885,70886,70889,70891],{"class":47,"line":9942},[45,70887,70888],{"class":51400},"  height",[45,70890,51537],{"class":55},[45,70892,70893],{"class":62},"27px;\n",[45,70895,70896,70899,70901],{"class":47,"line":9947},[45,70897,70898],{"class":51400},"  outline",[45,70900,51537],{"class":55},[45,70902,70607],{"class":62},[45,70904,70905,70908,70910],{"class":47,"line":9952},[45,70906,70907],{"class":51400},"  border-radius",[45,70909,51537],{"class":55},[45,70911,70912],{"class":62},"5px;\n",[45,70914,70915,70917],{"class":47,"line":9961},[45,70916,70755],{"class":62},[45,70918,70758],{"class":337},[45,70920,70921,70924,70926],{"class":47,"line":9966},[45,70922,70923],{"class":51400},"  padding-left",[45,70925,51537],{"class":55},[45,70927,70912],{"class":62},[45,70929,70930,70933,70935],{"class":47,"line":9972},[45,70931,70932],{"class":51400},"  box-sizing",[45,70934,51537],{"class":55},[45,70936,70937],{"class":62},"border-box;\n",[45,70939,70940,70943,70945],{"class":47,"line":9993},[45,70941,70942],{"class":51400},"  margin-right",[45,70944,51537],{"class":55},[45,70946,70947],{"class":62},"15px;\n",[45,70949,70950],{"class":47,"line":9999},[45,70951,1716],{"class":55},[45,70953,70954],{"class":47,"line":10013},[45,70955,70956],{"class":62},".info button {\n",[45,70958,70959,70961,70963],{"class":47,"line":10019},[45,70960,70668],{"class":51400},[45,70962,51537],{"class":55},[45,70964,70965],{"class":62},"60px;\n",[45,70967,70968,70970,70972],{"class":47,"line":10046},[45,70969,70888],{"class":51400},[45,70971,51537],{"class":55},[45,70973,70893],{"class":62},[45,70975,70976,70979,70981],{"class":47,"line":10055},[45,70977,70978],{"class":51400},"  background-color",[45,70980,51537],{"class":55},[45,70982,70983],{"class":337},"#004085;\n",[45,70985,70986,70988,70990],{"class":47,"line":10061},[45,70987,70898],{"class":51400},[45,70989,51537],{"class":55},[45,70991,70607],{"class":62},[45,70993,70994,70997,70999],{"class":47,"line":10069},[45,70995,70996],{"class":51400},"  border",[45,70998,51537],{"class":55},[45,71000,70575],{"class":62},[45,71002,71003,71006,71008],{"class":47,"line":10074},[45,71004,71005],{"class":51400},"  color",[45,71007,51537],{"class":55},[45,71009,70812],{"class":337},[45,71011,71012,71015,71017],{"class":47,"line":16753},[45,71013,71014],{"class":51400},"  cursor",[45,71016,51537],{"class":55},[45,71018,71019],{"class":62},"pointer;\n",[45,71021,71022,71024,71026],{"class":47,"line":16759},[45,71023,70907],{"class":51400},[45,71025,51537],{"class":55},[45,71027,70912],{"class":62},[45,71029,71030],{"class":47,"line":16782},[45,71031,1716],{"class":55},[45,71033,71034],{"class":47,"line":16788},[45,71035,71036],{"class":62},".info .age {\n",[45,71038,71039,71041,71043],{"class":47,"line":16811},[45,71040,70668],{"class":51400},[45,71042,51537],{"class":55},[45,71044,71045],{"class":62},"50px;\n",[45,71047,71048],{"class":47,"line":16825},[45,71049,1716],{"class":55},[20,71051,71052],{},"思路：",[20,71054,71055],{},[23,71056],{"alt":25,"src":71057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[20,71059,71060],{},[23,71061],{"alt":25,"src":71062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[20,71064,71065],{},[23,71066],{"alt":25,"src":71067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[249,71069,71071],{"id":71070},"_3315-重绘回流","3.3.15 重绘回流",[20,71073,71074],{},[23,71075],{"alt":25,"src":71076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[20,71078,71079],{},[23,71080],{"alt":25,"src":71081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[20,71083,71084],{},[23,71085],{"alt":25,"src":71086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[15,71088,71090],{"id":71089},"_34-bom","3.4 BOM",[20,71092,71093],{},[23,71094],{"alt":25,"src":71095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[20,71097,71098],{},"平时写的document省略了window而已，实际上是window.document",[20,71100,71101],{},"函数也是这样，调用的时候实际为window.fn()",[20,71103,71104],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[20,71106,71107],{},"window大部分情况下可以省略",[249,71109,71111],{"id":71110},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[20,71113,71114],{},"只执行一次",[20,71116,71117],{},[23,71118],{"alt":25,"src":71119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[20,71121,71122],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[20,71124,71125],{},[23,71126],{"alt":25,"src":71127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[249,71129,71131],{"id":71130},"_342-js执行机制","3.4.2 JS执行机制",[20,71133,71134],{},[23,71135],{"alt":25,"src":71136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[20,71138,71139],{},"两个的结果都是1111 3333 2222",[20,71141,71142],{},[23,71143],{"alt":25,"src":71144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[20,71146,71147],{},[23,71148],{"alt":25,"src":71149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[20,71151,71152],{},[23,71153],{"alt":25,"src":71154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[20,71156,71157],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[20,71159,71160],{},"工作流程：",[20,71162,71163],{},[23,71164],{"alt":25,"src":71165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[20,71167,71168],{},[23,71169],{"alt":25,"src":71170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[20,71172,71173],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[20,71175,71176],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[249,71178,71180],{"id":71179},"_343-location对象","3.4.3 location对象",[20,71182,71183],{},"location对象属于window这个全局对象下的，可以 省略window",[20,71185,71186],{},[23,71187],{"alt":25,"src":71188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[20,71190,71191],{},"href可以跳转页面",[233,71193,71194],{},[169,71195,71196],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[20,71198,71199],{},"search得到提交信息之后网站后边的地址",[20,71201,71202],{},[23,71203],{"alt":25,"src":71204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[20,71206,71207],{},[23,71208],{"alt":25,"src":71209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[233,71211,71212],{"start":66},[169,71213,71214],{},"hash:这个获取单页面应用#后边的地址",[20,71216,71217],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[20,71219,71220],{},[23,71221],{"alt":25,"src":71222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[36,71224,71226],{"className":53167,"code":71225,"language":53169,"meta":25,"style":25},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[42,71227,71228,71248,71268],{"__ignoreMap":25},[45,71229,71230,71232,71234,71236,71238,71241,71244,71246],{"class":47,"line":48},[45,71231,52244],{"class":55},[45,71233,516],{"class":51400},[45,71235,61157],{"class":69},[45,71237,59],{"class":55},[45,71239,71240],{"class":62},"\"#\u002Fmy\"",[45,71242,71243],{"class":55},">我的\u003C\u002F",[45,71245,516],{"class":51400},[45,71247,51407],{"class":55},[45,71249,71250,71252,71254,71256,71258,71261,71264,71266],{"class":47,"line":66},[45,71251,52244],{"class":55},[45,71253,516],{"class":51400},[45,71255,61157],{"class":69},[45,71257,59],{"class":55},[45,71259,71260],{"class":62},"\"#\u002Ffriend\"",[45,71262,71263],{"class":55},">关注\u003C\u002F",[45,71265,516],{"class":51400},[45,71267,51407],{"class":55},[45,71269,71270,71272,71274,71276,71278,71281,71284,71286],{"class":47,"line":1331},[45,71271,52244],{"class":55},[45,71273,516],{"class":51400},[45,71275,61157],{"class":69},[45,71277,59],{"class":55},[45,71279,71280],{"class":62},"\"#\u002Fdownload\"",[45,71282,71283],{"class":55},">下载\u003C\u002F",[45,71285,516],{"class":51400},[45,71287,51407],{"class":55},[20,71289,71290],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[233,71292,71293],{"start":1331},[169,71294,71295,71296,71298,71299,71301],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53816,71297],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53816,71300],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[249,71303,71305],{"id":71304},"_345-navigator对象","3.4.5 navigator对象",[20,71307,71308],{},[23,71309],{"alt":25,"src":71310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[36,71312,71316],{"className":71313,"code":71314,"language":71315,"meta":25,"style":25},"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",[42,71317,71318,71323,71334,71346,71351,71402,71443,71448,71461,71473,71478],{"__ignoreMap":25},[45,71319,71320],{"class":47,"line":48},[45,71321,71322],{"class":337},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[45,71324,71325,71327,71329,71331],{"class":47,"line":66},[45,71326,504],{"class":51},[45,71328,282],{"class":55},[45,71330,54549],{"class":51},[45,71332,71333],{"class":55}," () { \n",[45,71335,71336,71338,71341,71343],{"class":47,"line":1331},[45,71337,6942],{"class":51},[45,71339,71340],{"class":79}," userAgent",[45,71342,13713],{"class":51},[45,71344,71345],{"class":55}," navigator.userAgent \n",[45,71347,71348],{"class":47,"line":1346},[45,71349,71350],{"class":337},"\u002F\u002F 验证是否为Android或iPhone \n",[45,71352,71353,71355,71358,71360,71363,71366,71368,71370,71373,71375,71378,71382,71384,71386,71388,71391,71393,71395,71397,71399],{"class":47,"line":1352},[45,71354,6942],{"class":51},[45,71356,71357],{"class":79}," android",[45,71359,13713],{"class":51},[45,71361,71362],{"class":55}," userAgent.",[45,71364,71365],{"class":69},"match",[45,71367,282],{"class":55},[45,71369,861],{"class":62},[45,71371,71372],{"class":48077},"(Android);",[45,71374,1263],{"class":51},[45,71376,71377],{"class":79},"[\\s",[45,71379,71381],{"class":71380},"snhLl","\\\u002F",[45,71383,1217],{"class":79},[45,71385,758],{"class":51},[45,71387,282],{"class":48077},[45,71389,71390],{"class":79},"[\\d.]",[45,71392,758],{"class":51},[45,71394,706],{"class":48077},[45,71396,1263],{"class":51},[45,71398,861],{"class":62},[45,71400,71401],{"class":55},") \n",[45,71403,71404,71406,71409,71411,71413,71415,71417,71419,71422,71425,71428,71430,71432,71435,71437,71439,71441],{"class":47,"line":1366},[45,71405,6942],{"class":51},[45,71407,71408],{"class":79}," iphone",[45,71410,13713],{"class":51},[45,71412,71362],{"class":55},[45,71414,71365],{"class":69},[45,71416,282],{"class":55},[45,71418,861],{"class":62},[45,71420,71421],{"class":48077},"(iPhone",[45,71423,71424],{"class":79},"\\s",[45,71426,71427],{"class":48077},"OS)",[45,71429,71424],{"class":79},[45,71431,282],{"class":48077},[45,71433,71434],{"class":79},"[\\d_]",[45,71436,758],{"class":51},[45,71438,706],{"class":48077},[45,71440,861],{"class":62},[45,71442,71401],{"class":55},[45,71444,71445],{"class":47,"line":1372},[45,71446,71447],{"class":337},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[45,71449,71450,71452,71455,71458],{"class":47,"line":1463},[45,71451,1682],{"class":51},[45,71453,71454],{"class":55}," (android ",[45,71456,71457],{"class":51},"||",[45,71459,71460],{"class":55}," iphone) { \n",[45,71462,71463,71466,71468,71471],{"class":47,"line":1469},[45,71464,71465],{"class":55},"location.href ",[45,71467,59],{"class":51},[45,71469,71470],{"class":62}," 'http:\u002F\u002Fm.itcast.cn'",[45,71472,2824],{"class":55},[45,71474,71475],{"class":47,"line":1481},[45,71476,71477],{"class":55},"} \n",[45,71479,71480],{"class":47,"line":1763},[45,71481,71482],{"class":55},"})()\n",[249,71484,71486],{"id":71485},"_346-histroy对象","3.4.6 histroy对象",[20,71488,71489],{},[23,71490],{"alt":25,"src":71491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[20,71493,71494],{},"浏览器地址的前进与后退!!!",[20,71496,71497],{},"history.back() 等效于 history.go(-1)",[20,71499,71500],{},"history.forward() 等效于 history.go(1)",[15,71502,71504],{"id":71503},"_35-本地存储","3.5 本地存储",[233,71506,71507,71510,71513],{},[169,71508,71509],{},"数据存储在用户浏览器中",[169,71511,71512],{},"设置、读取方便、甚至页面刷新不丢失数据",[169,71514,71515],{},"容量较大，sessionStorage和localStorage约 5M 左右",[249,71517,71519],{"id":71518},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[20,71521,71522],{},"只能存储字符串",[20,71524,71525],{},[23,71526],{"alt":25,"src":71527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[20,71529,71530],{},[23,71531],{"alt":25,"src":71532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[20,71534,71535],{},"键值对要加引号,不然就会当变量来看了",[20,71537,71538],{},"localStorage.setItem('uname', 'pink')",[20,71540,71541],{},"刷新之后信息不再丢失",[20,71543,71544],{},"操作key,value会跟着变",[20,71546,71547],{},"删除只删除键就可以,即名字",[20,71549,71538],{},[20,71551,71552],{},"改:",[20,71554,71555],{},"localStorage.setItem('uname','red')",[20,71557,71558],{},"有这个键就是改,没有这个键就是改",[20,71560,71561],{},[23,71562],{"alt":25,"src":71563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[20,71565,71566],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[20,71568,71569],{},[23,71570],{"alt":25,"src":71571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[20,71573,71574],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[249,71576,71578],{"id":71577},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[20,71580,71581],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[20,71583,71584],{},"特性:",[233,71586,71587,71590,71593,71596],{},[169,71588,71589],{},"生命周期为关闭浏览器窗口",[169,71591,71592],{},"在同一个窗口(页面)下数据可以共享",[169,71594,71595],{},"以键值对的形式存储使用",[169,71597,71598],{},"用法跟localStorage 基本相同",[249,71600,71602],{"id":71601},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[20,71604,71605],{},"本地只能存储字符串,无法直接存储复杂数据类型",[36,71607,71609],{"className":53167,"code":71608,"language":53169,"meta":25,"style":25},"\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",[42,71610,71611,71619,71624,71629,71634,71639,71643,71648,71653],{"__ignoreMap":25},[45,71612,71613,71615,71617],{"class":47,"line":48},[45,71614,1187],{"class":55},[45,71616,51913],{"class":51400},[45,71618,51407],{"class":55},[45,71620,71621],{"class":47,"line":66},[45,71622,71623],{"class":55},"    const obj = {\n",[45,71625,71626],{"class":47,"line":1331},[45,71627,71628],{"class":55},"      uname: 'pink老师',\n",[45,71630,71631],{"class":47,"line":1346},[45,71632,71633],{"class":55},"      age: 18,\n",[45,71635,71636],{"class":47,"line":1352},[45,71637,71638],{"class":55},"      gender: '女'\n",[45,71640,71641],{"class":47,"line":1366},[45,71642,2337],{"class":55},[45,71644,71645],{"class":47,"line":1372},[45,71646,71647],{"class":55},"    \u002F\u002F 存储复杂数据类型\n",[45,71649,71650],{"class":47,"line":1463},[45,71651,71652],{"class":55},"    localStorage.setItem('obj', obj)\n",[45,71654,71655,71657,71659],{"class":47,"line":1469},[45,71656,52517],{"class":55},[45,71658,51913],{"class":51400},[45,71660,51407],{"class":55},[20,71662,71663],{},[23,71664],{"alt":25,"src":71665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[20,71667,71668],{},"如果获取一下数据:",[20,71670,71671],{},"log(localStorage.getItem('obj'))",[20,71673,71674],{},[23,71675],{"alt":25,"src":71676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[20,71678,71679],{},"发现直接存对象是使用不了的!!!",[22147,71681,71683],{"id":71682},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[20,71685,71686],{},[23,71687],{"alt":25,"src":71688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[36,71690,71692],{"className":50733,"code":71691,"language":50735,"meta":25,"style":25},"\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",[42,71693,71694,71702,71712,71722,71731,71739,71743,71747,71773,71792,71800,71804,71809,71814],{"__ignoreMap":25},[45,71695,71696,71698,71700],{"class":47,"line":48},[45,71697,1187],{"class":55},[45,71699,51913],{"class":51400},[45,71701,51407],{"class":55},[45,71703,71704,71706,71708,71710],{"class":47,"line":66},[45,71705,11370],{"class":51},[45,71707,70071],{"class":79},[45,71709,13713],{"class":51},[45,71711,15721],{"class":55},[45,71713,71714,71717,71720],{"class":47,"line":1331},[45,71715,71716],{"class":55},"      uname: ",[45,71718,71719],{"class":62},"'pink老师'",[45,71721,31566],{"class":55},[45,71723,71724,71727,71729],{"class":47,"line":1346},[45,71725,71726],{"class":55},"      age: ",[45,71728,927],{"class":79},[45,71730,31566],{"class":55},[45,71732,71733,71736],{"class":47,"line":1352},[45,71734,71735],{"class":55},"      gender: ",[45,71737,71738],{"class":62},"'女'\n",[45,71740,71741],{"class":47,"line":1366},[45,71742,2337],{"class":55},[45,71744,71745],{"class":47,"line":1372},[45,71746,71647],{"class":337},[45,71748,71749,71752,71755,71757,71760,71762,71765,71767,71770],{"class":47,"line":1463},[45,71750,71751],{"class":55},"  localStorage.",[45,71753,71754],{"class":69},"setItem",[45,71756,282],{"class":55},[45,71758,71759],{"class":62},"'obj'",[45,71761,12584],{"class":55},[45,71763,71764],{"class":79},"JSON",[45,71766,835],{"class":55},[45,71768,71769],{"class":69},"stringify",[45,71771,71772],{"class":55},"(obj))\n",[45,71774,71775,71778,71780,71783,71786,71788,71790],{"class":47,"line":1469},[45,71776,71777],{"class":55},"  console.",[45,71779,58347],{"class":69},[45,71781,71782],{"class":55},"(localStorage.",[45,71784,71785],{"class":69},"getItem",[45,71787,282],{"class":55},[45,71789,71759],{"class":62},[45,71791,30597],{"class":55},[45,71793,71794,71796,71798],{"class":47,"line":1481},[45,71795,52517],{"class":55},[45,71797,51913],{"class":51400},[45,71799,51407],{"class":55},[45,71801,71802],{"class":47,"line":1763},[45,71803,70721],{"class":55},[45,71805,71806],{"class":47,"line":1768},[45,71807,71808],{"class":55},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[45,71810,71811],{"class":47,"line":1774},[45,71812,71813],{"class":55},"  类型是字符串的\n",[45,71815,71816],{"class":47,"line":1779},[45,71817,71818],{"class":55},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22147,71820,71822],{"id":71821},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[20,71824,71825],{},[23,71826],{"alt":25,"src":71827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[20,71829,71830],{},[23,71831],{"alt":25,"src":71832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[36,71834,71836],{"className":53167,"code":71835,"language":53169,"meta":25,"style":25},"  \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",[42,71837,71838,71846,71850,71854,71858,71862,71866,71871,71876,71881,71886,71891,71896,71901,71906],{"__ignoreMap":25},[45,71839,71840,71842,71844],{"class":47,"line":48},[45,71841,52244],{"class":55},[45,71843,51913],{"class":51400},[45,71845,51407],{"class":55},[45,71847,71848],{"class":47,"line":66},[45,71849,71623],{"class":55},[45,71851,71852],{"class":47,"line":1331},[45,71853,71628],{"class":55},[45,71855,71856],{"class":47,"line":1346},[45,71857,71633],{"class":55},[45,71859,71860],{"class":47,"line":1352},[45,71861,71638],{"class":55},[45,71863,71864],{"class":47,"line":1366},[45,71865,2337],{"class":55},[45,71867,71868],{"class":47,"line":1372},[45,71869,71870],{"class":55},"    \u002F\u002F 1.存储复杂数据类型\n",[45,71872,71873],{"class":47,"line":1463},[45,71874,71875],{"class":55},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[45,71877,71878],{"class":47,"line":1469},[45,71879,71880],{"class":55},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[45,71882,71883],{"class":47,"line":1481},[45,71884,71885],{"class":55},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[45,71887,71888],{"class":47,"line":1763},[45,71889,71890],{"class":55},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[45,71892,71893],{"class":47,"line":1768},[45,71894,71895],{"class":55},"    \u002F\u002F 取\n",[45,71897,71898],{"class":47,"line":1774},[45,71899,71900],{"class":55},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[45,71902,71903],{"class":47,"line":1779},[45,71904,71905],{"class":55},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[45,71907,71908,71910,71912],{"class":47,"line":1793},[45,71909,52517],{"class":55},[45,71911,51913],{"class":51400},[45,71913,51407],{"class":55},[20,71915,71916],{},[23,71917],{"alt":25,"src":71918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[249,71920,71922],{"id":71921},"_356-数组map方法","3.5.6 数组map方法",[20,71924,71925],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[20,71927,71928],{},[23,71929],{"alt":25,"src":71930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[20,71932,71933],{},[23,71934],{"alt":25,"src":71935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[20,71937,71938,71941],{},[427,71939,71940],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[20,71943,71944],{},"map有返回值，但是forEach没有返回值",[20,71946,71947],{},"map是个方法。用的时候要加 ()",[20,71949,71950],{},"map返回的是一个数组",[249,71952,71954],{"id":71953},"_357-数组中join方法","3.5.7 数组中join方法",[20,71956,71957],{},[23,71958],{"alt":25,"src":71959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[20,71961,71962],{},"类似于python中拼接字符串一样！",[233,71964,71965,71968,71971],{},[169,71966,71967],{},"小括号为空则逗号分开",[169,71969,71970],{},"小括号为空字符串 ''，则元素之间没有分隔符",[169,71972,71973],{},"小括号用啥符号就用进行分割",[249,71975,71977],{"id":71976},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[233,71979,71980,71983,71986,71989,71992],{},[169,71981,71982],{},"记住本地时间获取快速方式：new Date().toDateString()",[169,71984,71985],{},"尽量减少DOM操作，用好map+join的渲染方式",[169,71987,71988],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[169,71990,71991],{},"return可以实现函数的结束",[169,71993,71994],{},"禁止跳转是 preventDefault() 不要忘记",[36,71996,71998],{"className":50733,"code":71997,"language":50735,"meta":25,"style":25},"\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",[42,71999,72000,72010,72024,72028,72036,72050,72070,72082,72090,72096,72106,72116,72120,72124,72130,72140,72152,72156,72160,72167,72179,72193,72203,72207,72211,72218,72225,72232,72244,72256,72266,72278,72282,72286,72293,72300,72312,72324,72334,72346,72376,72380,72384,72391,72403,72415,72439,72449,72459,72463,72467,72475,72486,72498,72510,72522,72539,72551,72563,72567,72571,72578,72590,72602,72614,72625,72643,72656,72668,72692,72703,72707,72711,72719,72729,72733,72737,72743,72755,72766,72776,72780,72784,72790,72812,72816,72820,72826,72832,72844,72854,72866,72896,72909,72926,72930,72934,72945,72967,72977,72981,72985,72998,73008,73020,73032,73044,73056,73066,73076,73086,73097,73110,73114,73122,73130,73134,73142,73155,73175,73208,73241,73274,73300,73318,73336,73344,73370,73388,73406,73424,73442,73460,73468,73476,73494,73502,73531,73539,73547,73555,73568,73580,73592,73604,73616,73628,73641,73653,73661,73669,73677,73682,73687,73691,73695,73699,73703,73707,73711,73716,73721,73726,73731,73739,73747,73755,73760,73765,73770,73775,73780,73785,73790,73795,73800,73805,73810,73815,73820,73825,73829,73834,73839,73849,73858,73862,73867,73876,73892,73934,73974,74013,74078,74086,74090,74095,74113,74121,74126,74131,74161,74167,74172,74185,74197,74209,74221,74233,74245,74257,74261,74271,74275,74280,74285,74289,74298,74302,74307,74312,74331,74336,74356,74360,74365,74369,74374,74392,74410,74428,74447,74466,74485,74490,74496,74517,74523,74532,74538,74544,74550,74577,74590,74595,74605,74611,74617,74623,74629,74634,74640,74646,74652,74658,74691,74696,74701,74706,74711,74717,74723,74729,74740,74745,74751,74758,74772,74778,74802,74807,74812,74818,74824,74845,74851,74864,74870,74876,74882,74888,74893,74899,74905,74911,74929,74943,74949,74957,74963,74985,74990,74995,75000,75005,75010,75019,75028,75033],{"__ignoreMap":25},[45,72001,72002,72004,72006,72008],{"class":47,"line":48},[45,72003,51397],{"class":55},[45,72005,51401],{"class":51400},[45,72007,51404],{"class":69},[45,72009,51407],{"class":55},[45,72011,72012,72014,72016,72018,72020,72022],{"class":47,"line":66},[45,72013,1187],{"class":55},[45,72015,50735],{"class":51400},[45,72017,51416],{"class":69},[45,72019,59],{"class":55},[45,72021,51421],{"class":62},[45,72023,51407],{"class":55},[45,72025,72026],{"class":47,"line":1331},[45,72027,2550],{"emptyLinePlaceholder":207},[45,72029,72030,72032,72034],{"class":47,"line":1346},[45,72031,1187],{"class":55},[45,72033,51434],{"class":51400},[45,72035,51407],{"class":55},[45,72037,72038,72040,72042,72044,72046,72048],{"class":47,"line":1352},[45,72039,52244],{"class":55},[45,72041,51444],{"class":51400},[45,72043,51447],{"class":69},[45,72045,59],{"class":55},[45,72047,51452],{"class":62},[45,72049,51407],{"class":55},[45,72051,72052,72054,72056,72058,72060,72062,72064,72066,72068],{"class":47,"line":1366},[45,72053,52244],{"class":55},[45,72055,51444],{"class":51400},[45,72057,15069],{"class":69},[45,72059,59],{"class":55},[45,72061,51491],{"class":62},[45,72063,51471],{"class":69},[45,72065,59],{"class":55},[45,72067,51498],{"class":62},[45,72069,51407],{"class":55},[45,72071,72072,72074,72076,72078,72080],{"class":47,"line":1372},[45,72073,52244],{"class":55},[45,72075,51507],{"class":51400},[45,72077,51510],{"class":55},[45,72079,51507],{"class":51400},[45,72081,51407],{"class":55},[45,72083,72084,72086,72088],{"class":47,"line":1463},[45,72085,52244],{"class":55},[45,72087,196],{"class":51400},[45,72089,51407],{"class":55},[45,72091,72092,72094],{"class":47,"line":1469},[45,72093,6553],{"class":51400},[45,72095,15721],{"class":55},[45,72097,72098,72100,72102,72104],{"class":47,"line":1481},[45,72099,54795],{"class":79},[45,72101,51537],{"class":55},[45,72103,469],{"class":79},[45,72105,1442],{"class":55},[45,72107,72108,72110,72112,72114],{"class":47,"line":1763},[45,72109,54806],{"class":79},[45,72111,51537],{"class":55},[45,72113,469],{"class":79},[45,72115,1442],{"class":55},[45,72117,72118],{"class":47,"line":1768},[45,72119,2337],{"class":55},[45,72121,72122],{"class":47,"line":1774},[45,72123,2550],{"emptyLinePlaceholder":207},[45,72125,72126,72128],{"class":47,"line":1779},[45,72127,57379],{"class":51400},[45,72129,15721],{"class":55},[45,72131,72132,72134,72136,72138],{"class":47,"line":1793},[45,72133,57386],{"class":79},[45,72135,51537],{"class":55},[45,72137,51692],{"class":79},[45,72139,1442],{"class":55},[45,72141,72142,72144,72146,72148,72150],{"class":47,"line":1798},[45,72143,62177],{"class":79},[45,72145,51537],{"class":55},[45,72147,977],{"class":79},[45,72149,51592],{"class":51},[45,72151,1442],{"class":55},[45,72153,72154],{"class":47,"line":1804},[45,72155,2337],{"class":55},[45,72157,72158],{"class":47,"line":1825},[45,72159,2550],{"emptyLinePlaceholder":207},[45,72161,72162,72165],{"class":47,"line":1830},[45,72163,72164],{"class":69},"    .info",[45,72166,15721],{"class":55},[45,72168,72169,72171,72173,72175,72177],{"class":47,"line":1844},[45,72170,54871],{"class":79},[45,72172,51537],{"class":55},[45,72174,51589],{"class":79},[45,72176,51592],{"class":51},[45,72178,1442],{"class":55},[45,72180,72181,72183,72185,72187,72189,72191],{"class":47,"line":1849},[45,72182,54806],{"class":79},[45,72184,51537],{"class":55},[45,72186,723],{"class":79},[45,72188,51592],{"class":51},[45,72190,51656],{"class":79},[45,72192,1442],{"class":55},[45,72194,72195,72197,72199,72201],{"class":47,"line":1878},[45,72196,57386],{"class":79},[45,72198,51537],{"class":55},[45,72200,51692],{"class":79},[45,72202,1442],{"class":55},[45,72204,72205],{"class":47,"line":1883},[45,72206,2337],{"class":55},[45,72208,72209],{"class":47,"line":1900},[45,72210,2550],{"emptyLinePlaceholder":207},[45,72212,72213,72216],{"class":47,"line":1905},[45,72214,72215],{"class":69},"    .uname",[45,72217,31566],{"class":55},[45,72219,72220,72223],{"class":47,"line":1910},[45,72221,72222],{"class":69},"    .age",[45,72224,31566],{"class":55},[45,72226,72227,72230],{"class":47,"line":1915},[45,72228,72229],{"class":69},"    .salary",[45,72231,15721],{"class":55},[45,72233,72234,72236,72238,72240,72242],{"class":47,"line":1929},[45,72235,54871],{"class":79},[45,72237,51537],{"class":55},[45,72239,588],{"class":79},[45,72241,51592],{"class":51},[45,72243,1442],{"class":55},[45,72245,72246,72248,72250,72252,72254],{"class":47,"line":1934},[45,72247,54885],{"class":79},[45,72249,51537],{"class":55},[45,72251,977],{"class":79},[45,72253,51592],{"class":51},[45,72255,1442],{"class":55},[45,72257,72258,72260,72262,72264],{"class":47,"line":2727},[45,72259,61880],{"class":79},[45,72261,51537],{"class":55},[45,72263,54837],{"class":79},[45,72265,1442],{"class":55},[45,72267,72268,72270,72272,72274,72276],{"class":47,"line":2741},[45,72269,61850],{"class":79},[45,72271,51537],{"class":55},[45,72273,852],{"class":79},[45,72275,51592],{"class":51},[45,72277,1442],{"class":55},[45,72279,72280],{"class":47,"line":2749},[45,72281,2337],{"class":55},[45,72283,72284],{"class":47,"line":2754},[45,72285,2550],{"emptyLinePlaceholder":207},[45,72287,72288,72291],{"class":47,"line":2760},[45,72289,72290],{"class":69},"    .gender",[45,72292,31566],{"class":55},[45,72294,72295,72298],{"class":47,"line":2766},[45,72296,72297],{"class":69},"    .city",[45,72299,15721],{"class":55},[45,72301,72302,72304,72306,72308,72310],{"class":47,"line":2771},[45,72303,54871],{"class":79},[45,72305,51537],{"class":55},[45,72307,588],{"class":79},[45,72309,51592],{"class":51},[45,72311,1442],{"class":55},[45,72313,72314,72316,72318,72320,72322],{"class":47,"line":8098},[45,72315,54885],{"class":79},[45,72317,51537],{"class":55},[45,72319,1102],{"class":79},[45,72321,51592],{"class":51},[45,72323,1442],{"class":55},[45,72325,72326,72328,72330,72332],{"class":47,"line":8122},[45,72327,61880],{"class":79},[45,72329,51537],{"class":55},[45,72331,54837],{"class":79},[45,72333,1442],{"class":55},[45,72335,72336,72338,72340,72342,72344],{"class":47,"line":8127},[45,72337,61850],{"class":79},[45,72339,51537],{"class":55},[45,72341,852],{"class":79},[45,72343,51592],{"class":51},[45,72345,1442],{"class":55},[45,72347,72348,72350,72352,72354,72356,72358,72361,72363,72365,72367,72370,72372,72374],{"class":47,"line":8133},[45,72349,62077],{"class":79},[45,72351,51537],{"class":55},[45,72353,495],{"class":79},[45,72355,51592],{"class":51},[45,72357,51621],{"class":79},[45,72359,72360],{"class":79}," rgb",[45,72362,282],{"class":55},[45,72364,1873],{"class":79},[45,72366,12584],{"class":55},[45,72368,72369],{"class":79},"197",[45,72371,12584],{"class":55},[45,72373,72369],{"class":79},[45,72375,2869],{"class":55},[45,72377,72378],{"class":47,"line":8160},[45,72379,2337],{"class":55},[45,72381,72382],{"class":47,"line":8165},[45,72383,2550],{"emptyLinePlaceholder":207},[45,72385,72386,72389],{"class":47,"line":8171},[45,72387,72388],{"class":51400},"    button",[45,72390,15721],{"class":55},[45,72392,72393,72395,72397,72399,72401],{"class":47,"line":8183},[45,72394,54885],{"class":79},[45,72396,51537],{"class":55},[45,72398,1102],{"class":79},[45,72400,51592],{"class":51},[45,72402,1442],{"class":55},[45,72404,72405,72407,72409,72411,72413],{"class":47,"line":8195},[45,72406,54871],{"class":79},[45,72408,51537],{"class":55},[45,72410,761],{"class":79},[45,72412,51592],{"class":51},[45,72414,1442],{"class":55},[45,72416,72417,72419,72421,72424,72426,72428,72430,72433,72435,72437],{"class":47,"line":8207},[45,72418,54984],{"class":79},[45,72420,51537],{"class":55},[45,72422,72423],{"class":79},"rgb",[45,72425,282],{"class":55},[45,72427,1246],{"class":79},[45,72429,12584],{"class":55},[45,72431,72432],{"class":79},"187",[45,72434,12584],{"class":55},[45,72436,576],{"class":79},[45,72438,2869],{"class":55},[45,72440,72441,72443,72445,72447],{"class":47,"line":9866},[45,72442,57516],{"class":79},[45,72444,51537],{"class":55},[45,72446,60942],{"class":79},[45,72448,1442],{"class":55},[45,72450,72451,72453,72455,72457],{"class":47,"line":9890},[45,72452,62077],{"class":79},[45,72454,51537],{"class":55},[45,72456,469],{"class":79},[45,72458,1442],{"class":55},[45,72460,72461],{"class":47,"line":9913},[45,72462,2337],{"class":55},[45,72464,72465],{"class":47,"line":9937},[45,72466,2550],{"emptyLinePlaceholder":207},[45,72468,72469,72471,72473],{"class":47,"line":9942},[45,72470,72388],{"class":51400},[45,72472,51788],{"class":51400},[45,72474,15721],{"class":55},[45,72476,72477,72479,72481,72484],{"class":47,"line":9947},[45,72478,55109],{"class":79},[45,72480,51537],{"class":55},[45,72482,72483],{"class":79},"inline-block",[45,72485,1442],{"class":55},[45,72487,72488,72490,72492,72494,72496],{"class":47,"line":9952},[45,72489,54871],{"class":79},[45,72491,51537],{"class":55},[45,72493,723],{"class":79},[45,72495,51592],{"class":51},[45,72497,1442],{"class":55},[45,72499,72500,72502,72504,72506,72508],{"class":47,"line":9961},[45,72501,54885],{"class":79},[45,72503,51537],{"class":55},[45,72505,723],{"class":79},[45,72507,51592],{"class":51},[45,72509,1442],{"class":55},[45,72511,72512,72514,72516,72518,72520],{"class":47,"line":9966},[45,72513,57459],{"class":79},[45,72515,51537],{"class":55},[45,72517,749],{"class":79},[45,72519,51592],{"class":51},[45,72521,1442],{"class":55},[45,72523,72524,72526,72528,72530,72532,72534,72537],{"class":47,"line":9972},[45,72525,62077],{"class":79},[45,72527,51537],{"class":55},[45,72529,495],{"class":79},[45,72531,51592],{"class":51},[45,72533,51621],{"class":79},[45,72535,72536],{"class":79}," #fff",[45,72538,1442],{"class":55},[45,72540,72541,72543,72545,72547,72549],{"class":47,"line":9993},[45,72542,55234],{"class":79},[45,72544,51537],{"class":55},[45,72546,596],{"class":79},[45,72548,51592],{"class":51},[45,72550,1442],{"class":55},[45,72552,72553,72555,72557,72559,72561],{"class":47,"line":9999},[45,72554,61850],{"class":79},[45,72556,51537],{"class":55},[45,72558,495],{"class":79},[45,72560,51592],{"class":51},[45,72562,1442],{"class":55},[45,72564,72565],{"class":47,"line":10013},[45,72566,2337],{"class":55},[45,72568,72569],{"class":47,"line":10019},[45,72570,2550],{"emptyLinePlaceholder":207},[45,72572,72573,72576],{"class":47,"line":10046},[45,72574,72575],{"class":69},"    .total",[45,72577,15721],{"class":55},[45,72579,72580,72582,72584,72586,72588],{"class":47,"line":10055},[45,72581,54871],{"class":79},[45,72583,51537],{"class":55},[45,72585,61729],{"class":79},[45,72587,51592],{"class":51},[45,72589,1442],{"class":55},[45,72591,72592,72594,72596,72598,72600],{"class":47,"line":10061},[45,72593,54885],{"class":79},[45,72595,51537],{"class":55},[45,72597,678],{"class":79},[45,72599,51592],{"class":51},[45,72601,1442],{"class":55},[45,72603,72604,72606,72608,72610,72612],{"class":47,"line":10069},[45,72605,57459],{"class":79},[45,72607,51537],{"class":55},[45,72609,678],{"class":79},[45,72611,51592],{"class":51},[45,72613,1442],{"class":55},[45,72615,72616,72618,72620,72623],{"class":47,"line":10074},[45,72617,57386],{"class":79},[45,72619,51537],{"class":55},[45,72621,72622],{"class":79},"right",[45,72624,1442],{"class":55},[45,72626,72627,72629,72631,72633,72635,72637,72639,72641],{"class":47,"line":16753},[45,72628,54806],{"class":79},[45,72630,51537],{"class":55},[45,72632,678],{"class":79},[45,72634,51592],{"class":51},[45,72636,51656],{"class":79},[45,72638,2188],{"class":79},[45,72640,51592],{"class":51},[45,72642,1442],{"class":55},[45,72644,72645,72648,72650,72652,72654],{"class":47,"line":16759},[45,72646,72647],{"class":79},"      padding-right",[45,72649,51537],{"class":55},[45,72651,723],{"class":79},[45,72653,51592],{"class":51},[45,72655,1442],{"class":55},[45,72657,72658,72660,72662,72664,72666],{"class":47,"line":16782},[45,72659,55022],{"class":79},[45,72661,51537],{"class":55},[45,72663,800],{"class":79},[45,72665,51592],{"class":51},[45,72667,1442],{"class":55},[45,72669,72670,72672,72674,72676,72678,72681,72683,72686,72688,72690],{"class":47,"line":16788},[45,72671,54984],{"class":79},[45,72673,51537],{"class":55},[45,72675,72423],{"class":79},[45,72677,282],{"class":55},[45,72679,72680],{"class":79},"237",[45,72682,12584],{"class":55},[45,72684,72685],{"class":79},"235",[45,72687,12584],{"class":55},[45,72689,72685],{"class":79},[45,72691,2869],{"class":55},[45,72693,72694,72697,72699,72701],{"class":47,"line":16811},[45,72695,72696],{"class":79},"      box-sizing",[45,72698,51537],{"class":55},[45,72700,60605],{"class":79},[45,72702,1442],{"class":55},[45,72704,72705],{"class":47,"line":16825},[45,72706,2337],{"class":55},[45,72708,72709],{"class":47,"line":16845},[45,72710,2550],{"emptyLinePlaceholder":207},[45,72712,72713,72715,72717],{"class":47,"line":16851},[45,72714,72575],{"class":69},[45,72716,51788],{"class":51400},[45,72718,15721],{"class":55},[45,72720,72721,72723,72725,72727],{"class":47,"line":16862},[45,72722,57516],{"class":79},[45,72724,51537],{"class":55},[45,72726,57521],{"class":79},[45,72728,1442],{"class":55},[45,72730,72731],{"class":47,"line":16885},[45,72732,2337],{"class":55},[45,72734,72735],{"class":47,"line":16907},[45,72736,2550],{"emptyLinePlaceholder":207},[45,72738,72739,72741],{"class":47,"line":16912},[45,72740,65123],{"class":51400},[45,72742,15721],{"class":55},[45,72744,72745,72747,72749,72751,72753],{"class":47,"line":16918},[45,72746,54871],{"class":79},[45,72748,51537],{"class":55},[45,72750,61729],{"class":79},[45,72752,51592],{"class":51},[45,72754,1442],{"class":55},[45,72756,72757,72759,72761,72764],{"class":47,"line":16932},[45,72758,54806],{"class":79},[45,72760,51537],{"class":55},[45,72762,72763],{"class":79},"auto",[45,72765,1442],{"class":55},[45,72767,72768,72770,72772,72774],{"class":47,"line":16945},[45,72769,65130],{"class":79},[45,72771,51537],{"class":55},[45,72773,65135],{"class":79},[45,72775,1442],{"class":55},[45,72777,72778],{"class":47,"line":16950},[45,72779,2337],{"class":55},[45,72781,72782],{"class":47,"line":16964},[45,72783,2550],{"emptyLinePlaceholder":207},[45,72785,72786,72788],{"class":47,"line":16969},[45,72787,65215],{"class":51400},[45,72789,15721],{"class":55},[45,72791,72792,72794,72796,72798,72800,72802,72804,72806,72808,72810],{"class":47,"line":16975},[45,72793,54984],{"class":79},[45,72795,51537],{"class":55},[45,72797,72423],{"class":79},[45,72799,282],{"class":55},[45,72801,72680],{"class":79},[45,72803,12584],{"class":55},[45,72805,72685],{"class":79},[45,72807,12584],{"class":55},[45,72809,72685],{"class":79},[45,72811,2869],{"class":55},[45,72813,72814],{"class":47,"line":16980},[45,72815,2337],{"class":55},[45,72817,72818],{"class":47,"line":16994},[45,72819,2550],{"emptyLinePlaceholder":207},[45,72821,72822,72824],{"class":47,"line":16999},[45,72823,65215],{"class":51400},[45,72825,31566],{"class":55},[45,72827,72828,72830],{"class":47,"line":17004},[45,72829,65281],{"class":51400},[45,72831,15721],{"class":55},[45,72833,72834,72836,72838,72840,72842],{"class":47,"line":17018},[45,72835,54885],{"class":79},[45,72837,51537],{"class":55},[45,72839,550],{"class":79},[45,72841,51592],{"class":51},[45,72843,1442],{"class":55},[45,72845,72846,72848,72850,72852],{"class":47,"line":17030},[45,72847,57386],{"class":79},[45,72849,51537],{"class":55},[45,72851,23885],{"class":79},[45,72853,1442],{"class":55},[45,72855,72856,72858,72860,72862,72864],{"class":47,"line":17035},[45,72857,55022],{"class":79},[45,72859,51537],{"class":55},[45,72861,826],{"class":79},[45,72863,51592],{"class":51},[45,72865,1442],{"class":55},[45,72867,72868,72870,72872,72874,72876,72878,72880,72882,72885,72887,72890,72892,72894],{"class":47,"line":17048},[45,72869,62077],{"class":79},[45,72871,51537],{"class":55},[45,72873,495],{"class":79},[45,72875,51592],{"class":51},[45,72877,51621],{"class":79},[45,72879,72360],{"class":79},[45,72881,282],{"class":55},[45,72883,72884],{"class":79},"228",[45,72886,12584],{"class":55},[45,72888,72889],{"class":79},"225",[45,72891,12584],{"class":55},[45,72893,72889],{"class":79},[45,72895,2869],{"class":55},[45,72897,72898,72901,72903,72905,72907],{"class":47,"line":17053},[45,72899,72900],{"class":79},"      padding-left",[45,72902,51537],{"class":55},[45,72904,596],{"class":79},[45,72906,51592],{"class":51},[45,72908,1442],{"class":55},[45,72910,72911,72913,72915,72917,72920,72922,72924],{"class":47,"line":17058},[45,72912,61960],{"class":79},[45,72914,51537],{"class":55},[45,72916,28221],{"class":79},[45,72918,72919],{"class":79}," linear",[45,72921,61967],{"class":79},[45,72923,972],{"class":51},[45,72925,1442],{"class":55},[45,72927,72928],{"class":47,"line":17063},[45,72929,2337],{"class":55},[45,72931,72932],{"class":47,"line":17076},[45,72933,2550],{"emptyLinePlaceholder":207},[45,72935,72936,72939,72941,72943],{"class":47,"line":17081},[45,72937,72938],{"class":51400},"    tbody",[45,72940,70244],{"class":51400},[45,72942,61040],{"class":69},[45,72944,15721],{"class":55},[45,72946,72947,72949,72951,72953,72955,72957,72959,72961,72963,72965],{"class":47,"line":32733},[45,72948,54984],{"class":79},[45,72950,51537],{"class":55},[45,72952,72423],{"class":79},[45,72954,282],{"class":55},[45,72956,72680],{"class":79},[45,72958,12584],{"class":55},[45,72960,72685],{"class":79},[45,72962,12584],{"class":55},[45,72964,72685],{"class":79},[45,72966,2869],{"class":55},[45,72968,72969,72971,72973,72975],{"class":47,"line":32739},[45,72970,62125],{"class":79},[45,72972,51537],{"class":55},[45,72974,62130],{"class":79},[45,72976,1442],{"class":55},[45,72978,72979],{"class":47,"line":32745},[45,72980,2337],{"class":55},[45,72982,72983],{"class":47,"line":32751},[45,72984,2550],{"emptyLinePlaceholder":207},[45,72986,72987,72989,72991,72994,72996],{"class":47,"line":32757},[45,72988,72938],{"class":51400},[45,72990,70244],{"class":51400},[45,72992,72993],{"class":51400}," td",[45,72995,1550],{"class":51400},[45,72997,15721],{"class":55},[45,72999,73000,73002,73004,73006],{"class":47,"line":32768},[45,73001,55109],{"class":79},[45,73003,51537],{"class":55},[45,73005,60969],{"class":79},[45,73007,1442],{"class":55},[45,73009,73010,73012,73014,73016,73018],{"class":47,"line":32774},[45,73011,54871],{"class":79},[45,73013,51537],{"class":55},[45,73015,1184],{"class":79},[45,73017,51592],{"class":51},[45,73019,1442],{"class":55},[45,73021,73022,73024,73026,73028,73030],{"class":47,"line":32794},[45,73023,54885],{"class":79},[45,73025,51537],{"class":55},[45,73027,1102],{"class":79},[45,73029,51592],{"class":51},[45,73031,1442],{"class":55},[45,73033,73034,73036,73038,73040,73042],{"class":47,"line":32800},[45,73035,57459],{"class":79},[45,73037,51537],{"class":55},[45,73039,1102],{"class":79},[45,73041,51592],{"class":51},[45,73043,1442],{"class":55},[45,73045,73046,73048,73050,73052,73054],{"class":47,"line":32811},[45,73047,62177],{"class":79},[45,73049,51537],{"class":55},[45,73051,356],{"class":79},[45,73053,51592],{"class":51},[45,73055,1442],{"class":55},[45,73057,73058,73060,73062,73064],{"class":47,"line":32817},[45,73059,57516],{"class":79},[45,73061,51537],{"class":55},[45,73063,60942],{"class":79},[45,73065,1442],{"class":55},[45,73067,73068,73070,73072,73074],{"class":47,"line":32823},[45,73069,57386],{"class":79},[45,73071,51537],{"class":55},[45,73073,51692],{"class":79},[45,73075,1442],{"class":55},[45,73077,73078,73080,73082,73084],{"class":47,"line":32829},[45,73079,64070],{"class":79},[45,73081,51537],{"class":55},[45,73083,54837],{"class":79},[45,73085,1442],{"class":55},[45,73087,73088,73090,73092,73095],{"class":47,"line":32835},[45,73089,54984],{"class":79},[45,73091,51537],{"class":55},[45,73093,73094],{"class":79},"orange",[45,73096,1442],{"class":55},[45,73098,73099,73101,73103,73106,73108],{"class":47,"line":32841},[45,73100,55234],{"class":79},[45,73102,51537],{"class":55},[45,73104,73105],{"class":79},"12.5",[45,73107,51592],{"class":51},[45,73109,1442],{"class":55},[45,73111,73112],{"class":47,"line":32847},[45,73113,2337],{"class":55},[45,73115,73116,73118,73120],{"class":47,"line":32853},[45,73117,52517],{"class":55},[45,73119,196],{"class":51400},[45,73121,51407],{"class":55},[45,73123,73124,73126,73128],{"class":47,"line":32873},[45,73125,51885],{"class":55},[45,73127,51434],{"class":51400},[45,73129,51407],{"class":55},[45,73131,73132],{"class":47,"line":32879},[45,73133,2550],{"emptyLinePlaceholder":207},[45,73135,73136,73138,73140],{"class":47,"line":32895},[45,73137,1187],{"class":55},[45,73139,51900],{"class":51400},[45,73141,51407],{"class":55},[45,73143,73144,73146,73148,73151,73153],{"class":47,"line":32901},[45,73145,52244],{"class":55},[45,73147,15],{"class":51400},[45,73149,73150],{"class":55},">学生就业统计表\u003C\u002F",[45,73152,15],{"class":51400},[45,73154,51407],{"class":55},[45,73156,73157,73159,73161,73163,73165,73167,73169,73171,73173],{"class":47,"line":32915},[45,73158,52244],{"class":55},[45,73160,66725],{"class":51400},[45,73162,53586],{"class":69},[45,73164,59],{"class":55},[45,73166,62764],{"class":62},[45,73168,69170],{"class":69},[45,73170,59],{"class":55},[45,73172,31876],{"class":62},[45,73174,51407],{"class":55},[45,73176,73177,73179,73181,73183,73185,73187,73189,73191,73193,73195,73197,73200,73202,73204,73206],{"class":47,"line":32921},[45,73178,51441],{"class":55},[45,73180,53921],{"class":51400},[45,73182,53924],{"class":69},[45,73184,59],{"class":55},[45,73186,62799],{"class":62},[45,73188,15069],{"class":69},[45,73190,59],{"class":55},[45,73192,69196],{"class":62},[45,73194,61120],{"class":69},[45,73196,59],{"class":55},[45,73198,73199],{"class":62},"\"姓名\"",[45,73201,53586],{"class":69},[45,73203,59],{"class":55},[45,73205,69196],{"class":62},[45,73207,51407],{"class":55},[45,73209,73210,73212,73214,73216,73218,73220,73222,73224,73226,73228,73230,73233,73235,73237,73239],{"class":47,"line":32936},[45,73211,51441],{"class":55},[45,73213,53921],{"class":51400},[45,73215,53924],{"class":69},[45,73217,59],{"class":55},[45,73219,62799],{"class":62},[45,73221,15069],{"class":69},[45,73223,59],{"class":55},[45,73225,69224],{"class":62},[45,73227,61120],{"class":69},[45,73229,59],{"class":55},[45,73231,73232],{"class":62},"\"年龄\"",[45,73234,53586],{"class":69},[45,73236,59],{"class":55},[45,73238,69224],{"class":62},[45,73240,51407],{"class":55},[45,73242,73243,73245,73247,73249,73251,73253,73255,73257,73259,73261,73263,73266,73268,73270,73272],{"class":47,"line":32942},[45,73244,51441],{"class":55},[45,73246,53921],{"class":51400},[45,73248,53924],{"class":69},[45,73250,59],{"class":55},[45,73252,62799],{"class":62},[45,73254,15069],{"class":69},[45,73256,59],{"class":55},[45,73258,69326],{"class":62},[45,73260,61120],{"class":69},[45,73262,59],{"class":55},[45,73264,73265],{"class":62},"\"薪资\"",[45,73267,53586],{"class":69},[45,73269,59],{"class":55},[45,73271,69326],{"class":62},[45,73273,51407],{"class":55},[45,73275,73276,73278,73280,73282,73284,73286,73288,73290,73292,73294,73296,73298],{"class":47,"line":32951},[45,73277,51441],{"class":55},[45,73279,69244],{"class":51400},[45,73281,15069],{"class":69},[45,73283,59],{"class":55},[45,73285,69251],{"class":62},[45,73287,15108],{"class":69},[45,73289,59],{"class":55},[45,73291,7802],{"class":62},[45,73293,53586],{"class":69},[45,73295,59],{"class":55},[45,73297,69251],{"class":62},[45,73299,51407],{"class":55},[45,73301,73302,73304,73306,73308,73310,73312,73314,73316],{"class":47,"line":32957},[45,73303,55334],{"class":55},[45,73305,69266],{"class":51400},[45,73307,66751],{"class":69},[45,73309,59],{"class":55},[45,73311,10110],{"class":62},[45,73313,69275],{"class":55},[45,73315,69266],{"class":51400},[45,73317,51407],{"class":55},[45,73319,73320,73322,73324,73326,73328,73330,73332,73334],{"class":47,"line":32966},[45,73321,55334],{"class":55},[45,73323,69266],{"class":51400},[45,73325,66751],{"class":69},[45,73327,59],{"class":55},[45,73329,10179],{"class":62},[45,73331,69294],{"class":55},[45,73333,69266],{"class":51400},[45,73335,51407],{"class":55},[45,73337,73338,73340,73342],{"class":47,"line":32972},[45,73339,51876],{"class":55},[45,73341,69244],{"class":51400},[45,73343,51407],{"class":55},[45,73345,73346,73348,73350,73352,73354,73356,73358,73360,73362,73364,73366,73368],{"class":47,"line":32978},[45,73347,51441],{"class":55},[45,73349,69244],{"class":51400},[45,73351,15069],{"class":69},[45,73353,59],{"class":55},[45,73355,69348],{"class":62},[45,73357,15108],{"class":69},[45,73359,59],{"class":55},[45,73361,7802],{"class":62},[45,73363,53586],{"class":69},[45,73365,59],{"class":55},[45,73367,69348],{"class":62},[45,73369,51407],{"class":55},[45,73371,73372,73374,73376,73378,73380,73382,73384,73386],{"class":47,"line":32987},[45,73373,55334],{"class":55},[45,73375,69266],{"class":51400},[45,73377,66751],{"class":69},[45,73379,59],{"class":55},[45,73381,69369],{"class":62},[45,73383,69372],{"class":55},[45,73385,69266],{"class":51400},[45,73387,51407],{"class":55},[45,73389,73390,73392,73394,73396,73398,73400,73402,73404],{"class":47,"line":32993},[45,73391,55334],{"class":55},[45,73393,69266],{"class":51400},[45,73395,66751],{"class":69},[45,73397,59],{"class":55},[45,73399,69389],{"class":62},[45,73401,69392],{"class":55},[45,73403,69266],{"class":51400},[45,73405,51407],{"class":55},[45,73407,73408,73410,73412,73414,73416,73418,73420,73422],{"class":47,"line":33004},[45,73409,55334],{"class":55},[45,73411,69266],{"class":51400},[45,73413,66751],{"class":69},[45,73415,59],{"class":55},[45,73417,69409],{"class":62},[45,73419,69412],{"class":55},[45,73421,69266],{"class":51400},[45,73423,51407],{"class":55},[45,73425,73426,73428,73430,73432,73434,73436,73438,73440],{"class":47,"line":33010},[45,73427,55334],{"class":55},[45,73429,69266],{"class":51400},[45,73431,66751],{"class":69},[45,73433,59],{"class":55},[45,73435,69429],{"class":62},[45,73437,69432],{"class":55},[45,73439,69266],{"class":51400},[45,73441,51407],{"class":55},[45,73443,73444,73446,73448,73450,73452,73454,73456,73458],{"class":47,"line":33029},[45,73445,55334],{"class":55},[45,73447,69266],{"class":51400},[45,73449,66751],{"class":69},[45,73451,59],{"class":55},[45,73453,69449],{"class":62},[45,73455,69452],{"class":55},[45,73457,69266],{"class":51400},[45,73459,51407],{"class":55},[45,73461,73462,73464,73466],{"class":47,"line":33035},[45,73463,51876],{"class":55},[45,73465,69244],{"class":51400},[45,73467,51407],{"class":55},[45,73469,73470,73472,73474],{"class":47,"line":33046},[45,73471,51441],{"class":55},[45,73473,53987],{"class":51400},[45,73475,51407],{"class":55},[45,73477,73478,73480,73482,73485,73487,73490,73492],{"class":47,"line":33052},[45,73479,55334],{"class":55},[45,73481,45],{"class":51400},[45,73483,73484],{"class":55},">+\u003C\u002F",[45,73486,45],{"class":51400},[45,73488,73489],{"class":55},">添加\u003C\u002F",[45,73491,53987],{"class":51400},[45,73493,51407],{"class":55},[45,73495,73496,73498,73500],{"class":47,"line":33072},[45,73497,52517],{"class":55},[45,73499,66725],{"class":51400},[45,73501,51407],{"class":55},[45,73503,73504,73506,73508,73510,73512,73514,73517,73519,73522,73524,73527,73529],{"class":47,"line":33088},[45,73505,52244],{"class":55},[45,73507,51711],{"class":51400},[45,73509,53586],{"class":69},[45,73511,59],{"class":55},[45,73513,62680],{"class":62},[45,73515,73516],{"class":55},">共有数据 \u003C",[45,73518,45],{"class":51400},[45,73520,73521],{"class":55},">0\u003C\u002F",[45,73523,45],{"class":51400},[45,73525,73526],{"class":55},"> 条\u003C\u002F",[45,73528,51711],{"class":51400},[45,73530,51407],{"class":55},[45,73532,73533,73535,73537],{"class":47,"line":33094},[45,73534,52244],{"class":55},[45,73536,415],{"class":51400},[45,73538,51407],{"class":55},[45,73540,73541,73543,73545],{"class":47,"line":33108},[45,73542,51441],{"class":55},[45,73544,418],{"class":51400},[45,73546,51407],{"class":55},[45,73548,73549,73551,73553],{"class":47,"line":33114},[45,73550,55334],{"class":55},[45,73552,421],{"class":51400},[45,73554,51407],{"class":55},[45,73556,73557,73559,73561,73564,73566],{"class":47,"line":33120},[45,73558,55402],{"class":55},[45,73560,424],{"class":51400},[45,73562,73563],{"class":55},">ID\u003C\u002F",[45,73565,424],{"class":51400},[45,73567,51407],{"class":55},[45,73569,73570,73572,73574,73576,73578],{"class":47,"line":33131},[45,73571,55402],{"class":55},[45,73573,424],{"class":51400},[45,73575,69555],{"class":55},[45,73577,424],{"class":51400},[45,73579,51407],{"class":55},[45,73581,73582,73584,73586,73588,73590],{"class":47,"line":33137},[45,73583,55402],{"class":55},[45,73585,424],{"class":51400},[45,73587,69568],{"class":55},[45,73589,424],{"class":51400},[45,73591,51407],{"class":55},[45,73593,73594,73596,73598,73600,73602],{"class":47,"line":33143},[45,73595,55402],{"class":55},[45,73597,424],{"class":51400},[45,73599,69581],{"class":55},[45,73601,424],{"class":51400},[45,73603,51407],{"class":55},[45,73605,73606,73608,73610,73612,73614],{"class":47,"line":33153},[45,73607,55402],{"class":55},[45,73609,424],{"class":51400},[45,73611,69594],{"class":55},[45,73613,424],{"class":51400},[45,73615,51407],{"class":55},[45,73617,73618,73620,73622,73624,73626],{"class":47,"line":33159},[45,73619,55402],{"class":55},[45,73621,424],{"class":51400},[45,73623,69607],{"class":55},[45,73625,424],{"class":51400},[45,73627,51407],{"class":55},[45,73629,73630,73632,73634,73637,73639],{"class":47,"line":33170},[45,73631,55402],{"class":55},[45,73633,424],{"class":51400},[45,73635,73636],{"class":55},">录入时间\u003C\u002F",[45,73638,424],{"class":51400},[45,73640,51407],{"class":55},[45,73642,73643,73645,73647,73649,73651],{"class":47,"line":33176},[45,73644,55402],{"class":55},[45,73646,424],{"class":51400},[45,73648,69620],{"class":55},[45,73650,424],{"class":51400},[45,73652,51407],{"class":55},[45,73654,73655,73657,73659],{"class":47,"line":33186},[45,73656,55507],{"class":55},[45,73658,421],{"class":51400},[45,73660,51407],{"class":55},[45,73662,73663,73665,73667],{"class":47,"line":33191},[45,73664,51876],{"class":55},[45,73666,418],{"class":51400},[45,73668,51407],{"class":55},[45,73670,73671,73673,73675],{"class":47,"line":33197},[45,73672,51441],{"class":55},[45,73674,462],{"class":51400},[45,73676,51407],{"class":55},[45,73678,73679],{"class":47,"line":33246},[45,73680,73681],{"class":337},"      \u003C!-- \u003Ctr>\n",[45,73683,73684],{"class":47,"line":33293},[45,73685,73686],{"class":337},"        \u003Ctd>1\u003C\u002Ftd>\n",[45,73688,73689],{"class":47,"line":33298},[45,73690,73686],{"class":337},[45,73692,73693],{"class":47,"line":33304},[45,73694,73686],{"class":337},[45,73696,73697],{"class":47,"line":33323},[45,73698,73686],{"class":337},[45,73700,73701],{"class":47,"line":33329},[45,73702,73686],{"class":337},[45,73704,73705],{"class":47,"line":33349},[45,73706,73686],{"class":337},[45,73708,73709],{"class":47,"line":33355},[45,73710,73686],{"class":337},[45,73712,73713],{"class":47,"line":33361},[45,73714,73715],{"class":337},"        \u003Ctd>\n",[45,73717,73718],{"class":47,"line":33371},[45,73719,73720],{"class":337},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[45,73722,73723],{"class":47,"line":33376},[45,73724,73725],{"class":337},"        \u003C\u002Ftd>\n",[45,73727,73728],{"class":47,"line":33382},[45,73729,73730],{"class":337},"      \u003C\u002Ftr> -->\n",[45,73732,73733,73735,73737],{"class":47,"line":33398},[45,73734,51876],{"class":55},[45,73736,462],{"class":51400},[45,73738,51407],{"class":55},[45,73740,73741,73743,73745],{"class":47,"line":33443},[45,73742,52517],{"class":55},[45,73744,415],{"class":51400},[45,73746,51407],{"class":55},[45,73748,73749,73751,73753],{"class":47,"line":33449},[45,73750,52244],{"class":55},[45,73752,51913],{"class":51400},[45,73754,51407],{"class":55},[45,73756,73757],{"class":47,"line":33455},[45,73758,73759],{"class":337},"    \u002F\u002F const initData = [{\n",[45,73761,73762],{"class":47,"line":33461},[45,73763,73764],{"class":337},"    \u002F\u002F   unameId: 1,\n",[45,73766,73767],{"class":47,"line":33472},[45,73768,73769],{"class":337},"    \u002F\u002F   uname: '华晨宇',\n",[45,73771,73772],{"class":47,"line":33478},[45,73773,73774],{"class":337},"    \u002F\u002F   age: 22,\n",[45,73776,73777],{"class":47,"line":33484},[45,73778,73779],{"class":337},"    \u002F\u002F   salary: 12000,\n",[45,73781,73782],{"class":47,"line":33490},[45,73783,73784],{"class":337},"    \u002F\u002F   gender: '男',\n",[45,73786,73787],{"class":47,"line":33508},[45,73788,73789],{"class":337},"    \u002F\u002F   city: '北京',\n",[45,73791,73792],{"class":47,"line":33522},[45,73793,73794],{"class":337},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[45,73796,73797],{"class":47,"line":33531},[45,73798,73799],{"class":337},"    \u002F\u002F }]\n",[45,73801,73802],{"class":47,"line":33540},[45,73803,73804],{"class":337},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[45,73806,73807],{"class":47,"line":33549},[45,73808,73809],{"class":337},"    \u002F\u002F 1.渲染业务\n",[45,73811,73812],{"class":47,"line":33558},[45,73813,73814],{"class":337},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[45,73816,73817],{"class":47,"line":33564},[45,73818,73819],{"class":337},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[45,73821,73822],{"class":47,"line":33570},[45,73823,73824],{"class":337},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[45,73826,73827],{"class":47,"line":33578},[45,73828,2550],{"emptyLinePlaceholder":207},[45,73830,73831],{"class":47,"line":33583},[45,73832,73833],{"class":337},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[45,73835,73836],{"class":47,"line":33589},[45,73837,73838],{"class":337},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[45,73840,73841,73843,73845,73847],{"class":47,"line":33600},[45,73842,11370],{"class":51},[45,73844,57795],{"class":79},[45,73846,13713],{"class":51},[45,73848,51938],{"class":55},[45,73850,73851,73854,73856],{"class":47,"line":33606},[45,73852,73853],{"class":55},"    console.",[45,73855,58347],{"class":69},[45,73857,52512],{"class":55},[45,73859,73860],{"class":47,"line":33626},[45,73861,2550],{"emptyLinePlaceholder":207},[45,73863,73864],{"class":47,"line":33632},[45,73865,73866],{"class":337},"    \u002F\u002F 时间函数\n",[45,73868,73869,73871,73874],{"class":47,"line":33638},[45,73870,70184],{"class":51},[45,73872,73873],{"class":69}," getTime",[45,73875,11002],{"class":55},[45,73877,73878,73880,73883,73885,73887,73890],{"class":47,"line":33644},[45,73879,58328],{"class":51},[45,73881,73882],{"class":79}," date",[45,73884,13713],{"class":51},[45,73886,11727],{"class":51},[45,73888,73889],{"class":69}," Date",[45,73891,2126],{"class":55},[45,73893,73894,73896,73898,73900,73903,73906,73908,73910,73912,73915,73918,73920,73922,73924,73926,73928,73930,73932],{"class":47,"line":33661},[45,73895,58328],{"class":51},[45,73897,16240],{"class":79},[45,73899,13713],{"class":51},[45,73901,73902],{"class":55}," date.",[45,73904,73905],{"class":69},"getHours",[45,73907,13199],{"class":55},[45,73909,1187],{"class":51},[45,73911,2188],{"class":79},[45,73913,73914],{"class":51}," ?",[45,73916,73917],{"class":62}," '0'",[45,73919,45666],{"class":51},[45,73921,73902],{"class":55},[45,73923,73905],{"class":69},[45,73925,13199],{"class":55},[45,73927,1136],{"class":51},[45,73929,73902],{"class":55},[45,73931,73905],{"class":69},[45,73933,2126],{"class":55},[45,73935,73936,73938,73941,73943,73945,73948,73950,73952,73954,73956,73958,73960,73962,73964,73966,73968,73970,73972],{"class":47,"line":33667},[45,73937,58328],{"class":51},[45,73939,73940],{"class":79}," m",[45,73942,13713],{"class":51},[45,73944,73902],{"class":55},[45,73946,73947],{"class":69},"getMinutes",[45,73949,13199],{"class":55},[45,73951,1187],{"class":51},[45,73953,2188],{"class":79},[45,73955,73914],{"class":51},[45,73957,73917],{"class":62},[45,73959,45666],{"class":51},[45,73961,73902],{"class":55},[45,73963,73947],{"class":69},[45,73965,13199],{"class":55},[45,73967,1136],{"class":51},[45,73969,73902],{"class":55},[45,73971,73947],{"class":69},[45,73973,2126],{"class":55},[45,73975,73976,73978,73980,73982,73984,73987,73989,73991,73993,73995,73997,73999,74001,74003,74005,74007,74009,74011],{"class":47,"line":33673},[45,73977,58328],{"class":51},[45,73979,8578],{"class":79},[45,73981,13713],{"class":51},[45,73983,73902],{"class":55},[45,73985,73986],{"class":69},"getSeconds",[45,73988,13199],{"class":55},[45,73990,1187],{"class":51},[45,73992,2188],{"class":79},[45,73994,73914],{"class":51},[45,73996,73917],{"class":62},[45,73998,45666],{"class":51},[45,74000,73902],{"class":55},[45,74002,73986],{"class":69},[45,74004,13199],{"class":55},[45,74006,1136],{"class":51},[45,74008,73902],{"class":55},[45,74010,73986],{"class":69},[45,74012,2126],{"class":55},[45,74014,74015,74017,74020,74022,74024,74027,74029,74032,74034,74037,74039,74041,74044,74046,74048,74050,74052,74054,74056,74059,74061,74064,74066,74069,74071,74073,74075],{"class":47,"line":33679},[45,74016,58328],{"class":51},[45,74018,74019],{"class":79}," str",[45,74021,13713],{"class":51},[45,74023,63003],{"class":62},[45,74025,74026],{"class":55},"date",[45,74028,835],{"class":62},[45,74030,74031],{"class":69},"getFullYear",[45,74033,2577],{"class":62},[45,74035,74036],{"class":62},"}\u002F${",[45,74038,74026],{"class":55},[45,74040,835],{"class":62},[45,74042,74043],{"class":69},"getMonth",[45,74045,13199],{"class":62},[45,74047,758],{"class":51},[45,74049,136],{"class":79},[45,74051,74036],{"class":62},[45,74053,74026],{"class":55},[45,74055,835],{"class":62},[45,74057,74058],{"class":69},"getDate",[45,74060,2577],{"class":62},[45,74062,74063],{"class":62},"} ${",[45,74065,692],{"class":55},[45,74067,74068],{"class":62},"}:${",[45,74070,821],{"class":55},[45,74072,74068],{"class":62},[45,74074,972],{"class":55},[45,74076,74077],{"class":62},"}`\n",[45,74079,74080,74083],{"class":47,"line":33685},[45,74081,74082],{"class":51},"      return",[45,74084,74085],{"class":55}," str\n",[45,74087,74088],{"class":47,"line":33691},[45,74089,2337],{"class":55},[45,74091,74092],{"class":47,"line":33718},[45,74093,74094],{"class":337},"    \u002F\u002F 渲染函数\n",[45,74096,74097,74099,74101,74103,74105,74107,74109,74111],{"class":47,"line":33742},[45,74098,11370],{"class":51},[45,74100,69847],{"class":79},[45,74102,13713],{"class":51},[45,74104,54496],{"class":55},[45,74106,54499],{"class":69},[45,74108,282],{"class":55},[45,74110,69858],{"class":62},[45,74112,139],{"class":55},[45,74114,74115,74117,74119],{"class":47,"line":33748},[45,74116,70184],{"class":51},[45,74118,70187],{"class":69},[45,74120,11002],{"class":55},[45,74122,74123],{"class":47,"line":33754},[45,74124,74125],{"class":337},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[45,74127,74128],{"class":47,"line":33760},[45,74129,74130],{"class":337},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[45,74132,74133,74135,74138,74140,74142,74145,74147,74149,74151,74154,74156,74159],{"class":47,"line":33771},[45,74134,58328],{"class":51},[45,74136,74137],{"class":79}," trArr",[45,74139,13713],{"class":51},[45,74141,52065],{"class":55},[45,74143,74144],{"class":69},"map",[45,74146,282],{"class":55},[45,74148,54549],{"class":51},[45,74150,1809],{"class":55},[45,74152,74153],{"class":5366},"ele",[45,74155,12584],{"class":55},[45,74157,74158],{"class":5366},"index",[45,74160,12591],{"class":55},[45,74162,74163,74165],{"class":47,"line":33782},[45,74164,14901],{"class":51},[45,74166,70268],{"class":62},[45,74168,74169],{"class":47,"line":33788},[45,74170,74171],{"class":62},"      \u003Ctr>\n",[45,74173,74174,74176,74178,74180,74183],{"class":47,"line":33805},[45,74175,70273],{"class":62},[45,74177,74153],{"class":55},[45,74179,835],{"class":62},[45,74181,74182],{"class":55},"unameId",[45,74184,70288],{"class":62},[45,74186,74187,74189,74191,74193,74195],{"class":47,"line":33828},[45,74188,70273],{"class":62},[45,74190,74153],{"class":55},[45,74192,835],{"class":62},[45,74194,70304],{"class":55},[45,74196,70288],{"class":62},[45,74198,74199,74201,74203,74205,74207],{"class":47,"line":33851},[45,74200,70273],{"class":62},[45,74202,74153],{"class":55},[45,74204,835],{"class":62},[45,74206,70321],{"class":55},[45,74208,70288],{"class":62},[45,74210,74211,74213,74215,74217,74219],{"class":47,"line":33857},[45,74212,70273],{"class":62},[45,74214,74153],{"class":55},[45,74216,835],{"class":62},[45,74218,70338],{"class":55},[45,74220,70288],{"class":62},[45,74222,74223,74225,74227,74229,74231],{"class":47,"line":33862},[45,74224,70273],{"class":62},[45,74226,74153],{"class":55},[45,74228,835],{"class":62},[45,74230,70355],{"class":55},[45,74232,70288],{"class":62},[45,74234,74235,74237,74239,74241,74243],{"class":47,"line":33871},[45,74236,70273],{"class":62},[45,74238,74153],{"class":55},[45,74240,835],{"class":62},[45,74242,70372],{"class":55},[45,74244,70288],{"class":62},[45,74246,74247,74249,74251,74253,74255],{"class":47,"line":33881},[45,74248,70273],{"class":62},[45,74250,74153],{"class":55},[45,74252,835],{"class":62},[45,74254,2537],{"class":55},[45,74256,70288],{"class":62},[45,74258,74259],{"class":47,"line":33887},[45,74260,73715],{"class":62},[45,74262,74263,74266,74268],{"class":47,"line":33892},[45,74264,74265],{"class":62},"          \u003Ca href=\"#\" data-id=\"${",[45,74267,74158],{"class":55},[45,74269,74270],{"class":62},"}\">删除\u003C\u002Fa>\n",[45,74272,74273],{"class":47,"line":33898},[45,74274,73725],{"class":62},[45,74276,74277],{"class":47,"line":33911},[45,74278,74279],{"class":62},"      \u003C\u002Ftr>\n",[45,74281,74282],{"class":47,"line":33917},[45,74283,74284],{"class":62},"  `\n",[45,74286,74287],{"class":47,"line":33928},[45,74288,64915],{"class":55},[45,74290,74291,74293,74295],{"class":47,"line":33939},[45,74292,58344],{"class":55},[45,74294,58347],{"class":69},[45,74296,74297],{"class":55},"(trArr)\n",[45,74299,74300],{"class":47,"line":33958},[45,74301,2550],{"emptyLinePlaceholder":207},[45,74303,74304],{"class":47,"line":49618},[45,74305,74306],{"class":337},"      \u002F\u002F (2) 把数组转换为字符串join\n",[45,74308,74309],{"class":47,"line":49623},[45,74310,74311],{"class":337},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[45,74313,74314,74316,74318,74321,74324,74326,74329],{"class":47,"line":49632},[45,74315,70199],{"class":55},[45,74317,59],{"class":51},[45,74319,74320],{"class":55}," trArr.",[45,74322,74323],{"class":69},"join",[45,74325,282],{"class":55},[45,74327,74328],{"class":62},"''",[45,74330,139],{"class":55},[45,74332,74333],{"class":47,"line":49641},[45,74334,74335],{"class":337},"      \u002F\u002F 显示共有几条\n",[45,74337,74338,74340,74342,74344,74347,74350,74352,74354],{"class":47,"line":49646},[45,74339,55871],{"class":55},[45,74341,54499],{"class":69},[45,74343,282],{"class":55},[45,74345,74346],{"class":62},"'.total span'",[45,74348,74349],{"class":55},").innerHTML ",[45,74351,59],{"class":51},[45,74353,52065],{"class":55},[45,74355,55931],{"class":79},[45,74357,74358],{"class":47,"line":49651},[45,74359,2337],{"class":55},[45,74361,74362],{"class":47,"line":49656},[45,74363,74364],{"class":337},"    \u002F\u002F render()\n",[45,74366,74367],{"class":47,"line":49669},[45,74368,2550],{"emptyLinePlaceholder":207},[45,74370,74371],{"class":47,"line":49674},[45,74372,74373],{"class":337},"    \u002F\u002F 获取DOM对象\n",[45,74375,74376,74378,74380,74382,74384,74386,74388,74390],{"class":47,"line":49683},[45,74377,11370],{"class":51},[45,74379,69921],{"class":79},[45,74381,13713],{"class":51},[45,74383,54496],{"class":55},[45,74385,54499],{"class":69},[45,74387,282],{"class":55},[45,74389,69932],{"class":62},[45,74391,139],{"class":55},[45,74393,74394,74396,74398,74400,74402,74404,74406,74408],{"class":47,"line":49692},[45,74395,11370],{"class":51},[45,74397,69748],{"class":79},[45,74399,13713],{"class":51},[45,74401,54496],{"class":55},[45,74403,54499],{"class":69},[45,74405,282],{"class":55},[45,74407,69759],{"class":62},[45,74409,139],{"class":55},[45,74411,74412,74414,74416,74418,74420,74422,74424,74426],{"class":47,"line":49709},[45,74413,11370],{"class":51},[45,74415,15838],{"class":79},[45,74417,13713],{"class":51},[45,74419,54496],{"class":55},[45,74421,54499],{"class":69},[45,74423,282],{"class":55},[45,74425,69778],{"class":62},[45,74427,139],{"class":55},[45,74429,74431,74433,74435,74437,74439,74441,74443,74445],{"class":47,"line":74430},231,[45,74432,11370],{"class":51},[45,74434,69807],{"class":79},[45,74436,13713],{"class":51},[45,74438,54496],{"class":55},[45,74440,54499],{"class":69},[45,74442,282],{"class":55},[45,74444,69818],{"class":62},[45,74446,139],{"class":55},[45,74448,74450,74452,74454,74456,74458,74460,74462,74464],{"class":47,"line":74449},232,[45,74451,11370],{"class":51},[45,74453,69787],{"class":79},[45,74455,13713],{"class":51},[45,74457,54496],{"class":55},[45,74459,54499],{"class":69},[45,74461,282],{"class":55},[45,74463,69798],{"class":62},[45,74465,139],{"class":55},[45,74467,74469,74471,74473,74475,74477,74479,74481,74483],{"class":47,"line":74468},233,[45,74470,11370],{"class":51},[45,74472,69827],{"class":79},[45,74474,13713],{"class":51},[45,74476,54496],{"class":55},[45,74478,54499],{"class":69},[45,74480,282],{"class":55},[45,74482,69838],{"class":62},[45,74484,139],{"class":55},[45,74486,74488],{"class":47,"line":74487},234,[45,74489,2550],{"emptyLinePlaceholder":207},[45,74491,74493],{"class":47,"line":74492},235,[45,74494,74495],{"class":337},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[45,74497,74499,74501,74503,74505,74507,74509,74511,74513,74515],{"class":47,"line":74498},236,[45,74500,69939],{"class":55},[45,74502,57913],{"class":69},[45,74504,282],{"class":55},[45,74506,69946],{"class":62},[45,74508,12584],{"class":55},[45,74510,54549],{"class":51},[45,74512,1809],{"class":55},[45,74514,353],{"class":5366},[45,74516,12591],{"class":55},[45,74518,74520],{"class":47,"line":74519},237,[45,74521,74522],{"class":337},"      \u002F\u002F 禁止浏览器跳转\n",[45,74524,74526,74528,74530],{"class":47,"line":74525},238,[45,74527,69966],{"class":55},[45,74529,69969],{"class":69},[45,74531,2126],{"class":55},[45,74533,74535],{"class":47,"line":74534},239,[45,74536,74537],{"class":337},"      \u002F\u002F 非空判断\n",[45,74539,74541],{"class":47,"line":74540},240,[45,74542,74543],{"class":337},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[45,74545,74547],{"class":47,"line":74546},241,[45,74548,74549],{"class":337},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[45,74551,74553,74555,74557,74559,74562,74564,74567,74570,74572,74574],{"class":47,"line":74552},242,[45,74554,54580],{"class":51},[45,74556,1809],{"class":55},[45,74558,504],{"class":51},[45,74560,74561],{"class":55},"uname.value ",[45,74563,71457],{"class":51},[45,74565,74566],{"class":51}," !",[45,74568,74569],{"class":55},"age.value ",[45,74571,71457],{"class":51},[45,74573,74566],{"class":51},[45,74575,74576],{"class":55},"salary.value) {\n",[45,74578,74580,74582,74584,74586,74588],{"class":47,"line":74579},243,[45,74581,14901],{"class":51},[45,74583,70040],{"class":69},[45,74585,282],{"class":55},[45,74587,70045],{"class":62},[45,74589,139],{"class":55},[45,74591,74593],{"class":47,"line":74592},244,[45,74594,52498],{"class":55},[45,74596,74598,74600,74602],{"class":47,"line":74597},245,[45,74599,58107],{"class":55},[45,74601,51984],{"class":69},[45,74603,74604],{"class":55},"({\n",[45,74606,74608],{"class":47,"line":74607},246,[45,74609,74610],{"class":337},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[45,74612,74614],{"class":47,"line":74613},247,[45,74615,74616],{"class":337},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[45,74618,74620],{"class":47,"line":74619},248,[45,74621,74622],{"class":337},"        \u002F\u002F 对象的序号应为数组长度+1\n",[45,74624,74626],{"class":47,"line":74625},249,[45,74627,74628],{"class":337},"        \u002F\u002F unameId: arr.length + 1,\n",[45,74630,74632],{"class":47,"line":74631},250,[45,74633,2550],{"emptyLinePlaceholder":207},[45,74635,74637],{"class":47,"line":74636},251,[45,74638,74639],{"class":337},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[45,74641,74643],{"class":47,"line":74642},252,[45,74644,74645],{"class":337},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[45,74647,74649],{"class":47,"line":74648},253,[45,74650,74651],{"class":337},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[45,74653,74655],{"class":47,"line":74654},254,[45,74656,74657],{"class":337},"        \u002F\u002F 0当假看\n",[45,74659,74661,74664,74666,74668,74671,74673,74675,74677,74680,74682,74684,74687,74689],{"class":47,"line":74660},255,[45,74662,74663],{"class":55},"        unameId: arr.",[45,74665,52068],{"class":79},[45,74667,73914],{"class":51},[45,74669,74670],{"class":55}," arr[arr.",[45,74672,52068],{"class":79},[45,74674,52371],{"class":51},[45,74676,136],{"class":79},[45,74678,74679],{"class":55},"].unameId ",[45,74681,758],{"class":51},[45,74683,136],{"class":79},[45,74685,74686],{"class":51}," :",[45,74688,136],{"class":79},[45,74690,31566],{"class":55},[45,74692,74694],{"class":47,"line":74693},256,[45,74695,70093],{"class":55},[45,74697,74699],{"class":47,"line":74698},257,[45,74700,70098],{"class":55},[45,74702,74704],{"class":47,"line":74703},258,[45,74705,70108],{"class":55},[45,74707,74709],{"class":47,"line":74708},259,[45,74710,70103],{"class":55},[45,74712,74714],{"class":47,"line":74713},260,[45,74715,74716],{"class":55},"        city: city.value,\n",[45,74718,74720],{"class":47,"line":74719},261,[45,74721,74722],{"class":337},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[45,74724,74726],{"class":47,"line":74725},262,[45,74727,74728],{"class":337},"        \u002F\u002F time: new Date().toDateString()\n",[45,74730,74732,74735,74738],{"class":47,"line":74731},263,[45,74733,74734],{"class":55},"        time: ",[45,74736,74737],{"class":69},"getTime",[45,74739,2126],{"class":55},[45,74741,74743],{"class":47,"line":74742},264,[45,74744,64915],{"class":55},[45,74746,74748],{"class":47,"line":74747},265,[45,74749,74750],{"class":337},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[45,74752,74754,74756],{"class":47,"line":74753},266,[45,74755,70168],{"class":69},[45,74757,2126],{"class":55},[45,74759,74761,74763,74765,74767,74769],{"class":47,"line":74760},267,[45,74762,70151],{"class":79},[45,74764,835],{"class":55},[45,74766,70156],{"class":69},[45,74768,13199],{"class":55},[45,74770,74771],{"class":337},"\u002F\u002F重置表单\n",[45,74773,74775],{"class":47,"line":74774},268,[45,74776,74777],{"class":337},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[45,74779,74781,74784,74786,74788,74791,74793,74795,74797,74799],{"class":47,"line":74780},269,[45,74782,74783],{"class":55},"      localStorage.",[45,74785,71754],{"class":69},[45,74787,282],{"class":55},[45,74789,74790],{"class":62},"'data'",[45,74792,12584],{"class":55},[45,74794,71764],{"class":79},[45,74796,835],{"class":55},[45,74798,71769],{"class":69},[45,74800,74801],{"class":55},"(arr))\n",[45,74803,74805],{"class":47,"line":74804},270,[45,74806,33561],{"class":55},[45,74808,74810],{"class":47,"line":74809},271,[45,74811,2550],{"emptyLinePlaceholder":207},[45,74813,74815],{"class":47,"line":74814},272,[45,74816,74817],{"class":337},"    \u002F\u002F 3.删除业务\n",[45,74819,74821],{"class":47,"line":74820},273,[45,74822,74823],{"class":337},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[45,74825,74827,74829,74831,74833,74835,74837,74839,74841,74843],{"class":47,"line":74826},274,[45,74828,70441],{"class":55},[45,74830,57913],{"class":69},[45,74832,282],{"class":55},[45,74834,57918],{"class":62},[45,74836,12584],{"class":55},[45,74838,54549],{"class":51},[45,74840,1809],{"class":55},[45,74842,353],{"class":5366},[45,74844,12591],{"class":55},[45,74846,74848],{"class":47,"line":74847},275,[45,74849,74850],{"class":337},"      \u002F\u002F 判断是否点击的是删除按钮\n",[45,74852,74854,74856,74858,74860,74862],{"class":47,"line":74853},276,[45,74855,54580],{"class":51},[45,74857,67134],{"class":55},[45,74859,54586],{"class":51},[45,74861,68356],{"class":62},[45,74863,12591],{"class":55},[45,74865,74867],{"class":47,"line":74866},277,[45,74868,74869],{"class":337},"        \u002F\u002F alert(1)\n",[45,74871,74873],{"class":47,"line":74872},278,[45,74874,74875],{"class":337},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[45,74877,74879],{"class":47,"line":74878},279,[45,74880,74881],{"class":337},"        \u002F\u002F console.log(e.target)\n",[45,74883,74885],{"class":47,"line":74884},280,[45,74886,74887],{"class":337},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[45,74889,74891],{"class":47,"line":74890},281,[45,74892,2550],{"emptyLinePlaceholder":207},[45,74894,74896],{"class":47,"line":74895},282,[45,74897,74898],{"class":337},"        \u002F\u002F 确认框，确然是否真的要删除\n",[45,74900,74902],{"class":47,"line":74901},283,[45,74903,74904],{"class":337},"        \u002F\u002F confirm()为确认框\n",[45,74906,74908],{"class":47,"line":74907},284,[45,74909,74910],{"class":337},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[45,74912,74914,74916,74918,74921,74923,74926],{"class":47,"line":74913},285,[45,74915,2647],{"class":51},[45,74917,1809],{"class":55},[45,74919,74920],{"class":69},"confirm",[45,74922,282],{"class":55},[45,74924,74925],{"class":62},"'您确定要删除这条数据吗？'",[45,74927,74928],{"class":55},")) {\n",[45,74930,74932,74935,74937,74939,74941],{"class":47,"line":74931},286,[45,74933,74934],{"class":55},"          arr.",[45,74936,58110],{"class":69},[45,74938,70494],{"class":55},[45,74940,495],{"class":79},[45,74942,139],{"class":55},[45,74944,74946],{"class":47,"line":74945},287,[45,74947,74948],{"class":337},"          \u002F\u002F 3.4 重新渲染页面\n",[45,74950,74952,74955],{"class":47,"line":74951},288,[45,74953,74954],{"class":69},"          render",[45,74956,2126],{"class":55},[45,74958,74960],{"class":47,"line":74959},289,[45,74961,74962],{"class":337},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[45,74964,74966,74969,74971,74973,74975,74977,74979,74981,74983],{"class":47,"line":74965},290,[45,74967,74968],{"class":55},"          localStorage.",[45,74970,71754],{"class":69},[45,74972,282],{"class":55},[45,74974,74790],{"class":62},[45,74976,12584],{"class":55},[45,74978,71764],{"class":79},[45,74980,835],{"class":55},[45,74982,71769],{"class":69},[45,74984,74801],{"class":55},[45,74986,74988],{"class":47,"line":74987},291,[45,74989,2679],{"class":55},[45,74991,74993],{"class":47,"line":74992},292,[45,74994,52498],{"class":55},[45,74996,74998],{"class":47,"line":74997},293,[45,74999,2550],{"emptyLinePlaceholder":207},[45,75001,75003],{"class":47,"line":75002},294,[45,75004,33561],{"class":55},[45,75006,75008],{"class":47,"line":75007},295,[45,75009,2550],{"emptyLinePlaceholder":207},[45,75011,75013,75015,75017],{"class":47,"line":75012},296,[45,75014,52517],{"class":55},[45,75016,51913],{"class":51400},[45,75018,51407],{"class":55},[45,75020,75022,75024,75026],{"class":47,"line":75021},297,[45,75023,51885],{"class":55},[45,75025,51900],{"class":51400},[45,75027,51407],{"class":55},[45,75029,75031],{"class":47,"line":75030},298,[45,75032,2550],{"emptyLinePlaceholder":207},[45,75034,75036,75038,75040],{"class":47,"line":75035},299,[45,75037,51885],{"class":55},[45,75039,50735],{"class":51400},[45,75041,51407],{"class":55},[15,75043,75045],{"id":75044},"_36-正则表达式","3.6 正则表达式",[20,75047,75048],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[20,75050,75051],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[20,75053,75054],{},"正则表达式的作用：",[166,75056,75057,75064,75070],{},[169,75058,75059,75060,75063],{},"表单验证（ ",[427,75061,75062],{},"匹配"," ）",[169,75065,75066,75067,75063],{},"过滤敏感词（ ",[427,75068,75069],{},"替换",[169,75071,75072,75073,75063],{},"字符串中提取我们想要的部分（ ",[427,75074,75075],{},"提取",[249,75077,75079],{"id":75078},"_361-语法","3.6.1 语法",[20,75081,75082],{},"正则表达式使用步骤：",[233,75084,75085,75088],{},[169,75086,75087],{},"定义规则",[169,75089,75090],{},"查找是否匹配",[20,75092,75093],{},"正则表达式里边不需要写引号",[20,75095,75096],{},[23,75097],{"alt":25,"src":75098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[20,75100,75101],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[20,75103,75104],{},"reg.test(str)",[20,75106,75107],{},[23,75108],{"alt":25,"src":75109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[20,75111,75112],{},[23,75113],{"alt":25,"src":75114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[249,75116,75118],{"id":75117},"_362-元字符","3.6.2 元字符",[233,75120,75121,75124,75127,75130,75137],{},[169,75122,75123],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[169,75125,75126],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[169,75128,75129],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[169,75131,75132,75133],{},"正则验证工具：",[516,75134,75135],{"href":75135,"rel":75136},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24012],[169,75138,75139],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22147,75141,75143],{"id":75142},"_3621-边界符","3.6.2.1 边界符",[20,75145,75146],{},[23,75147],{"alt":25,"src":75148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[20,75150,75151],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[20,75153,75154],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[20,75156,75157],{},"只匹配一次",[20,75159,75160],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22147,75162,75164],{"id":75163},"_3622-量词","3.6.2.2 量词",[20,75166,75167],{},[23,75168],{"alt":25,"src":75169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[20,75171,75172],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22147,75174,75176],{"id":75175},"_3623-元字符","3.6.2.3 元字符",[20,75178,75179],{},[23,75180],{"alt":25,"src":75181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[20,75183,75184],{},"匹配的是a或b或c []只选一个",[20,75186,75187],{},[23,75188],{"alt":25,"src":75189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[20,75191,75192],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[20,75194,75195],{},[23,75196],{"alt":25,"src":75197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[20,75199,75200],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[20,75202,75203],{},[23,75204],{"alt":25,"src":75205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[36,75207,75209],{"className":50733,"code":75208,"language":50735,"meta":25,"style":25},"\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",[42,75210,75211,75221,75235,75239,75247,75261,75281,75293,75301,75305,75313,75321,75326,75357,75384,75412,75416,75421,75449,75480,75485,75490,75521,75553,75585,75589,75594,75625,75655,75685,75689,75694,75725,75756,75786,75816,75820,75825,75858,75862,75867,75898,75929,75933,75938,75969,75999,76030,76034,76039,76071,76102,76133,76160,76191,76223,76256,76287,76318,76350,76381,76389,76397,76401],{"__ignoreMap":25},[45,75212,75213,75215,75217,75219],{"class":47,"line":48},[45,75214,51397],{"class":55},[45,75216,51401],{"class":51400},[45,75218,51404],{"class":69},[45,75220,51407],{"class":55},[45,75222,75223,75225,75227,75229,75231,75233],{"class":47,"line":66},[45,75224,1187],{"class":55},[45,75226,50735],{"class":51400},[45,75228,51416],{"class":69},[45,75230,59],{"class":55},[45,75232,51421],{"class":62},[45,75234,51407],{"class":55},[45,75236,75237],{"class":47,"line":1331},[45,75238,2550],{"emptyLinePlaceholder":207},[45,75240,75241,75243,75245],{"class":47,"line":1346},[45,75242,1187],{"class":55},[45,75244,51434],{"class":51400},[45,75246,51407],{"class":55},[45,75248,75249,75251,75253,75255,75257,75259],{"class":47,"line":1352},[45,75250,52244],{"class":55},[45,75252,51444],{"class":51400},[45,75254,51447],{"class":69},[45,75256,59],{"class":55},[45,75258,51452],{"class":62},[45,75260,51407],{"class":55},[45,75262,75263,75265,75267,75269,75271,75273,75275,75277,75279],{"class":47,"line":1366},[45,75264,52244],{"class":55},[45,75266,51444],{"class":51400},[45,75268,15069],{"class":69},[45,75270,59],{"class":55},[45,75272,51491],{"class":62},[45,75274,51471],{"class":69},[45,75276,59],{"class":55},[45,75278,51498],{"class":62},[45,75280,51407],{"class":55},[45,75282,75283,75285,75287,75289,75291],{"class":47,"line":1372},[45,75284,52244],{"class":55},[45,75286,51507],{"class":51400},[45,75288,51510],{"class":55},[45,75290,51507],{"class":51400},[45,75292,51407],{"class":55},[45,75294,75295,75297,75299],{"class":47,"line":1463},[45,75296,51885],{"class":55},[45,75298,51434],{"class":51400},[45,75300,51407],{"class":55},[45,75302,75303],{"class":47,"line":1469},[45,75304,2550],{"emptyLinePlaceholder":207},[45,75306,75307,75309,75311],{"class":47,"line":1481},[45,75308,1187],{"class":55},[45,75310,51900],{"class":51400},[45,75312,51407],{"class":55},[45,75314,75315,75317,75319],{"class":47,"line":1763},[45,75316,52244],{"class":55},[45,75318,51913],{"class":51400},[45,75320,51407],{"class":55},[45,75322,75323],{"class":47,"line":1768},[45,75324,75325],{"class":337},"    \u002F\u002F 元字符中\n",[45,75327,75328,75330,75332,75334,75336,75339,75341,75343,75346,75348,75351,75354],{"class":47,"line":1774},[45,75329,73853],{"class":55},[45,75331,58347],{"class":69},[45,75333,282],{"class":55},[45,75335,861],{"class":62},[45,75337,75338],{"class":48077},"哈",[45,75340,861],{"class":62},[45,75342,835],{"class":55},[45,75344,75345],{"class":69},"test",[45,75347,282],{"class":55},[45,75349,75350],{"class":62},"'哈'",[45,75352,75353],{"class":55},"))  ",[45,75355,75356],{"class":337},"\u002F\u002Ftrue\n",[45,75358,75359,75361,75363,75365,75367,75369,75371,75373,75375,75377,75380,75382],{"class":47,"line":1779},[45,75360,73853],{"class":55},[45,75362,58347],{"class":69},[45,75364,282],{"class":55},[45,75366,861],{"class":62},[45,75368,75338],{"class":48077},[45,75370,861],{"class":62},[45,75372,835],{"class":55},[45,75374,75345],{"class":69},[45,75376,282],{"class":55},[45,75378,75379],{"class":62},"'哈哈'",[45,75381,75353],{"class":55},[45,75383,75356],{"class":337},[45,75385,75386,75388,75390,75392,75394,75396,75398,75400,75402,75404,75407,75410],{"class":47,"line":1793},[45,75387,73853],{"class":55},[45,75389,58347],{"class":69},[45,75391,282],{"class":55},[45,75393,861],{"class":62},[45,75395,75338],{"class":48077},[45,75397,861],{"class":62},[45,75399,835],{"class":55},[45,75401,75345],{"class":69},[45,75403,282],{"class":55},[45,75405,75406],{"class":62},"'二哈'",[45,75408,75409],{"class":55},"))   ",[45,75411,75356],{"class":337},[45,75413,75414],{"class":47,"line":1798},[45,75415,2550],{"emptyLinePlaceholder":207},[45,75417,75418],{"class":47,"line":1804},[45,75419,75420],{"class":337},"    \u002F\u002F 1.边界符\n",[45,75422,75423,75425,75427,75429,75431,75433,75435,75437,75439,75441,75443,75445,75447],{"class":47,"line":1825},[45,75424,73853],{"class":55},[45,75426,58347],{"class":69},[45,75428,282],{"class":55},[45,75430,861],{"class":62},[45,75432,1243],{"class":51},[45,75434,75338],{"class":48077},[45,75436,861],{"class":62},[45,75438,835],{"class":55},[45,75440,75345],{"class":69},[45,75442,282],{"class":55},[45,75444,75350],{"class":62},[45,75446,75353],{"class":55},[45,75448,75356],{"class":337},[45,75450,75451,75453,75455,75457,75459,75461,75463,75465,75467,75469,75471,75473,75475,75477],{"class":47,"line":1830},[45,75452,73853],{"class":55},[45,75454,58347],{"class":69},[45,75456,282],{"class":55},[45,75458,861],{"class":62},[45,75460,1243],{"class":51},[45,75462,75338],{"class":48077},[45,75464,579],{"class":51},[45,75466,861],{"class":62},[45,75468,835],{"class":55},[45,75470,75345],{"class":69},[45,75472,282],{"class":55},[45,75474,75379],{"class":62},[45,75476,75353],{"class":55},[45,75478,75479],{"class":337},"\u002F\u002Ffalse\n",[45,75481,75482],{"class":47,"line":1844},[45,75483,75484],{"class":337},"    \u002F\u002F 2.量词\n",[45,75486,75487],{"class":47,"line":1849},[45,75488,75489],{"class":337},"    \u002F\u002F 量词 * 类似于 >= 0\n",[45,75491,75492,75494,75496,75498,75500,75502,75504,75507,75509,75511,75513,75515,75517,75519],{"class":47,"line":1878},[45,75493,73853],{"class":55},[45,75495,58347],{"class":69},[45,75497,282],{"class":55},[45,75499,861],{"class":62},[45,75501,1243],{"class":51},[45,75503,75338],{"class":48077},[45,75505,75506],{"class":51},"*$",[45,75508,861],{"class":62},[45,75510,835],{"class":55},[45,75512,75345],{"class":69},[45,75514,282],{"class":55},[45,75516,75379],{"class":62},[45,75518,75353],{"class":55},[45,75520,75356],{"class":337},[45,75522,75523,75525,75527,75529,75531,75533,75535,75537,75539,75541,75543,75545,75548,75550],{"class":47,"line":1883},[45,75524,73853],{"class":55},[45,75526,58347],{"class":69},[45,75528,282],{"class":55},[45,75530,861],{"class":62},[45,75532,1243],{"class":51},[45,75534,75338],{"class":48077},[45,75536,75506],{"class":51},[45,75538,861],{"class":62},[45,75540,835],{"class":55},[45,75542,75345],{"class":69},[45,75544,282],{"class":55},[45,75546,75547],{"class":62},"'二哈好傻'",[45,75549,75353],{"class":55},[45,75551,75552],{"class":337},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[45,75554,75555,75557,75559,75561,75563,75565,75567,75569,75571,75573,75575,75577,75580,75582],{"class":47,"line":1900},[45,75556,73853],{"class":55},[45,75558,58347],{"class":69},[45,75560,282],{"class":55},[45,75562,861],{"class":62},[45,75564,1243],{"class":51},[45,75566,75338],{"class":48077},[45,75568,75506],{"class":51},[45,75570,861],{"class":62},[45,75572,835],{"class":55},[45,75574,75345],{"class":69},[45,75576,282],{"class":55},[45,75578,75579],{"class":62},"'哈好哈'",[45,75581,75409],{"class":55},[45,75583,75584],{"class":337},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[45,75586,75587],{"class":47,"line":1905},[45,75588,2550],{"emptyLinePlaceholder":207},[45,75590,75591],{"class":47,"line":1910},[45,75592,75593],{"class":337},"    \u002F\u002F +类似于>=1\n",[45,75595,75596,75598,75600,75602,75604,75606,75608,75611,75613,75615,75617,75619,75621,75623],{"class":47,"line":1915},[45,75597,73853],{"class":55},[45,75599,58347],{"class":69},[45,75601,282],{"class":55},[45,75603,861],{"class":62},[45,75605,1243],{"class":51},[45,75607,75338],{"class":48077},[45,75609,75610],{"class":51},"+$",[45,75612,861],{"class":62},[45,75614,835],{"class":55},[45,75616,75345],{"class":69},[45,75618,282],{"class":55},[45,75620,75379],{"class":62},[45,75622,75353],{"class":55},[45,75624,75356],{"class":337},[45,75626,75627,75629,75631,75633,75635,75637,75639,75641,75643,75645,75647,75649,75651,75653],{"class":47,"line":1929},[45,75628,73853],{"class":55},[45,75630,58347],{"class":69},[45,75632,282],{"class":55},[45,75634,861],{"class":62},[45,75636,1243],{"class":51},[45,75638,75338],{"class":48077},[45,75640,75610],{"class":51},[45,75642,861],{"class":62},[45,75644,835],{"class":55},[45,75646,75345],{"class":69},[45,75648,282],{"class":55},[45,75650,75547],{"class":62},[45,75652,75353],{"class":55},[45,75654,75552],{"class":337},[45,75656,75657,75659,75661,75663,75665,75667,75669,75671,75673,75675,75677,75679,75681,75683],{"class":47,"line":1934},[45,75658,73853],{"class":55},[45,75660,58347],{"class":69},[45,75662,282],{"class":55},[45,75664,861],{"class":62},[45,75666,1243],{"class":51},[45,75668,75338],{"class":48077},[45,75670,75610],{"class":51},[45,75672,861],{"class":62},[45,75674,835],{"class":55},[45,75676,75345],{"class":69},[45,75678,282],{"class":55},[45,75680,75579],{"class":62},[45,75682,75409],{"class":55},[45,75684,75479],{"class":337},[45,75686,75687],{"class":47,"line":2727},[45,75688,2550],{"emptyLinePlaceholder":207},[45,75690,75691],{"class":47,"line":2741},[45,75692,75693],{"class":337},"    \u002F\u002F ?类似于0次或一次\n",[45,75695,75696,75698,75700,75702,75704,75706,75709,75711,75713,75715,75717,75719,75721,75723],{"class":47,"line":2749},[45,75697,73853],{"class":55},[45,75699,58347],{"class":69},[45,75701,282],{"class":55},[45,75703,861],{"class":62},[45,75705,1243],{"class":51},[45,75707,75708],{"class":48077},"哈？",[45,75710,579],{"class":51},[45,75712,861],{"class":62},[45,75714,835],{"class":55},[45,75716,75345],{"class":69},[45,75718,282],{"class":55},[45,75720,74328],{"class":62},[45,75722,75409],{"class":55},[45,75724,75356],{"class":337},[45,75726,75727,75729,75731,75733,75735,75737,75739,75742,75744,75746,75748,75750,75752,75754],{"class":47,"line":2754},[45,75728,73853],{"class":55},[45,75730,58347],{"class":69},[45,75732,282],{"class":55},[45,75734,861],{"class":62},[45,75736,1243],{"class":51},[45,75738,75338],{"class":48077},[45,75740,75741],{"class":51},"?$",[45,75743,861],{"class":62},[45,75745,835],{"class":55},[45,75747,75345],{"class":69},[45,75749,282],{"class":55},[45,75751,75379],{"class":62},[45,75753,75353],{"class":55},[45,75755,75479],{"class":337},[45,75757,75758,75760,75762,75764,75766,75768,75770,75772,75774,75776,75778,75780,75782,75784],{"class":47,"line":2760},[45,75759,73853],{"class":55},[45,75761,58347],{"class":69},[45,75763,282],{"class":55},[45,75765,861],{"class":62},[45,75767,1243],{"class":51},[45,75769,75338],{"class":48077},[45,75771,75741],{"class":51},[45,75773,861],{"class":62},[45,75775,835],{"class":55},[45,75777,75345],{"class":69},[45,75779,282],{"class":55},[45,75781,75547],{"class":62},[45,75783,75353],{"class":55},[45,75785,75552],{"class":337},[45,75787,75788,75790,75792,75794,75796,75798,75800,75802,75804,75806,75808,75810,75812,75814],{"class":47,"line":2766},[45,75789,73853],{"class":55},[45,75791,58347],{"class":69},[45,75793,282],{"class":55},[45,75795,861],{"class":62},[45,75797,1243],{"class":51},[45,75799,75338],{"class":48077},[45,75801,75741],{"class":51},[45,75803,861],{"class":62},[45,75805,835],{"class":55},[45,75807,75345],{"class":69},[45,75809,282],{"class":55},[45,75811,75579],{"class":62},[45,75813,75353],{"class":55},[45,75815,75479],{"class":337},[45,75817,75818],{"class":47,"line":2771},[45,75819,2550],{"emptyLinePlaceholder":207},[45,75821,75822],{"class":47,"line":8098},[45,75823,75824],{"class":337},"    \u002F\u002F {n}写几，就必须出现几次\n",[45,75826,75827,75829,75831,75833,75835,75837,75839,75842,75844,75846,75848,75850,75853,75856],{"class":47,"line":8122},[45,75828,73853],{"class":55},[45,75830,58347],{"class":69},[45,75832,282],{"class":55},[45,75834,861],{"class":62},[45,75836,1243],{"class":51},[45,75838,75338],{"class":48077},[45,75840,75841],{"class":51},"{4}$",[45,75843,861],{"class":62},[45,75845,835],{"class":55},[45,75847,75345],{"class":69},[45,75849,282],{"class":55},[45,75851,75852],{"class":62},"'哈哈哈哈'",[45,75854,75855],{"class":55},")) ",[45,75857,75356],{"class":337},[45,75859,75860],{"class":47,"line":8127},[45,75861,2550],{"emptyLinePlaceholder":207},[45,75863,75864],{"class":47,"line":8133},[45,75865,75866],{"class":337},"    \u002F\u002F {n,}大于等于n次\n",[45,75868,75869,75871,75873,75875,75877,75879,75881,75884,75886,75888,75890,75892,75894,75896],{"class":47,"line":8160},[45,75870,73853],{"class":55},[45,75872,58347],{"class":69},[45,75874,282],{"class":55},[45,75876,861],{"class":62},[45,75878,1243],{"class":51},[45,75880,75338],{"class":48077},[45,75882,75883],{"class":51},"{4,}$",[45,75885,861],{"class":62},[45,75887,835],{"class":55},[45,75889,75345],{"class":69},[45,75891,282],{"class":55},[45,75893,75852],{"class":62},[45,75895,75855],{"class":55},[45,75897,75356],{"class":337},[45,75899,75900,75902,75904,75906,75908,75910,75912,75914,75916,75918,75920,75922,75925,75927],{"class":47,"line":8165},[45,75901,73853],{"class":55},[45,75903,58347],{"class":69},[45,75905,282],{"class":55},[45,75907,861],{"class":62},[45,75909,1243],{"class":51},[45,75911,75338],{"class":48077},[45,75913,75883],{"class":51},[45,75915,861],{"class":62},[45,75917,835],{"class":55},[45,75919,75345],{"class":69},[45,75921,282],{"class":55},[45,75923,75924],{"class":62},"'哈哈哈哈哈'",[45,75926,75855],{"class":55},[45,75928,75356],{"class":337},[45,75930,75931],{"class":47,"line":8171},[45,75932,2550],{"emptyLinePlaceholder":207},[45,75934,75935],{"class":47,"line":8183},[45,75936,75937],{"class":337},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[45,75939,75940,75942,75944,75946,75948,75950,75952,75955,75957,75959,75961,75963,75965,75967],{"class":47,"line":8195},[45,75941,73853],{"class":55},[45,75943,58347],{"class":69},[45,75945,282],{"class":55},[45,75947,861],{"class":62},[45,75949,1243],{"class":51},[45,75951,75338],{"class":48077},[45,75953,75954],{"class":51},"{4,6}$",[45,75956,861],{"class":62},[45,75958,835],{"class":55},[45,75960,75345],{"class":69},[45,75962,282],{"class":55},[45,75964,75852],{"class":62},[45,75966,75855],{"class":55},[45,75968,75356],{"class":337},[45,75970,75971,75973,75975,75977,75979,75981,75983,75985,75987,75989,75991,75993,75995,75997],{"class":47,"line":8207},[45,75972,73853],{"class":55},[45,75974,58347],{"class":69},[45,75976,282],{"class":55},[45,75978,861],{"class":62},[45,75980,1243],{"class":51},[45,75982,75338],{"class":48077},[45,75984,75954],{"class":51},[45,75986,861],{"class":62},[45,75988,835],{"class":55},[45,75990,75345],{"class":69},[45,75992,282],{"class":55},[45,75994,75924],{"class":62},[45,75996,75855],{"class":55},[45,75998,75356],{"class":337},[45,76000,76001,76003,76005,76007,76009,76011,76013,76015,76017,76019,76021,76023,76026,76028],{"class":47,"line":9866},[45,76002,73853],{"class":55},[45,76004,58347],{"class":69},[45,76006,282],{"class":55},[45,76008,861],{"class":62},[45,76010,1243],{"class":51},[45,76012,75338],{"class":48077},[45,76014,75954],{"class":51},[45,76016,861],{"class":62},[45,76018,835],{"class":55},[45,76020,75345],{"class":69},[45,76022,282],{"class":55},[45,76024,76025],{"class":62},"'哈哈哈哈哈哈哈'",[45,76027,75855],{"class":55},[45,76029,75479],{"class":337},[45,76031,76032],{"class":47,"line":9890},[45,76033,2550],{"emptyLinePlaceholder":207},[45,76035,76036],{"class":47,"line":9913},[45,76037,76038],{"class":337},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[45,76040,76041,76043,76045,76047,76049,76051,76054,76056,76058,76060,76062,76064,76067,76069],{"class":47,"line":9937},[45,76042,73853],{"class":55},[45,76044,58347],{"class":69},[45,76046,282],{"class":55},[45,76048,861],{"class":62},[45,76050,1243],{"class":51},[45,76052,76053],{"class":79},"[abc]",[45,76055,579],{"class":51},[45,76057,861],{"class":62},[45,76059,835],{"class":55},[45,76061,75345],{"class":69},[45,76063,282],{"class":55},[45,76065,76066],{"class":62},"'a'",[45,76068,75353],{"class":55},[45,76070,75356],{"class":337},[45,76072,76073,76075,76077,76079,76081,76083,76085,76087,76089,76091,76093,76095,76098,76100],{"class":47,"line":9942},[45,76074,73853],{"class":55},[45,76076,58347],{"class":69},[45,76078,282],{"class":55},[45,76080,861],{"class":62},[45,76082,1243],{"class":51},[45,76084,76053],{"class":79},[45,76086,579],{"class":51},[45,76088,861],{"class":62},[45,76090,835],{"class":55},[45,76092,75345],{"class":69},[45,76094,282],{"class":55},[45,76096,76097],{"class":62},"'b'",[45,76099,75353],{"class":55},[45,76101,75356],{"class":337},[45,76103,76104,76106,76108,76110,76112,76114,76116,76118,76120,76122,76124,76126,76129,76131],{"class":47,"line":9947},[45,76105,73853],{"class":55},[45,76107,58347],{"class":69},[45,76109,282],{"class":55},[45,76111,861],{"class":62},[45,76113,1243],{"class":51},[45,76115,76053],{"class":79},[45,76117,579],{"class":51},[45,76119,861],{"class":62},[45,76121,835],{"class":55},[45,76123,75345],{"class":69},[45,76125,282],{"class":55},[45,76127,76128],{"class":62},"'c'",[45,76130,75353],{"class":55},[45,76132,75356],{"class":337},[45,76134,76135,76137,76139,76141,76143,76145,76147,76149,76151,76153,76156,76158],{"class":47,"line":9952},[45,76136,73853],{"class":55},[45,76138,58347],{"class":69},[45,76140,282],{"class":55},[45,76142,861],{"class":62},[45,76144,76053],{"class":79},[45,76146,861],{"class":62},[45,76148,835],{"class":55},[45,76150,75345],{"class":69},[45,76152,282],{"class":55},[45,76154,76155],{"class":62},"'ab'",[45,76157,75353],{"class":55},[45,76159,75356],{"class":337},[45,76161,76162,76164,76166,76168,76170,76172,76174,76176,76178,76180,76182,76184,76186,76188],{"class":47,"line":9961},[45,76163,73853],{"class":55},[45,76165,58347],{"class":69},[45,76167,282],{"class":55},[45,76169,861],{"class":62},[45,76171,1243],{"class":51},[45,76173,76053],{"class":79},[45,76175,579],{"class":51},[45,76177,861],{"class":62},[45,76179,835],{"class":55},[45,76181,75345],{"class":69},[45,76183,282],{"class":55},[45,76185,76155],{"class":62},[45,76187,75353],{"class":55},[45,76189,76190],{"class":337},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[45,76192,76193,76195,76197,76199,76201,76203,76205,76208,76210,76212,76214,76216,76218,76220],{"class":47,"line":9966},[45,76194,73853],{"class":55},[45,76196,58347],{"class":69},[45,76198,282],{"class":55},[45,76200,861],{"class":62},[45,76202,1243],{"class":51},[45,76204,76053],{"class":79},[45,76206,76207],{"class":51},"{2}$",[45,76209,861],{"class":62},[45,76211,835],{"class":55},[45,76213,75345],{"class":69},[45,76215,282],{"class":55},[45,76217,76155],{"class":62},[45,76219,75353],{"class":55},[45,76221,76222],{"class":337},"\u002F\u002Ftrue   可以选两个\n",[45,76224,76225,76227,76229,76231,76233,76235,76238,76240,76242,76244,76246,76248,76251,76253],{"class":47,"line":9972},[45,76226,73853],{"class":55},[45,76228,58347],{"class":69},[45,76230,282],{"class":55},[45,76232,861],{"class":62},[45,76234,1243],{"class":51},[45,76236,76237],{"class":79},"[a-z]",[45,76239,579],{"class":51},[45,76241,861],{"class":62},[45,76243,835],{"class":55},[45,76245,75345],{"class":69},[45,76247,282],{"class":55},[45,76249,76250],{"class":62},"'p'",[45,76252,75409],{"class":55},[45,76254,76255],{"class":337},"\u002F\u002Ftrue   依然只能选一个\n",[45,76257,76258,76260,76262,76264,76266,76268,76271,76273,76275,76277,76279,76281,76283,76285],{"class":47,"line":9993},[45,76259,73853],{"class":55},[45,76261,58347],{"class":69},[45,76263,282],{"class":55},[45,76265,861],{"class":62},[45,76267,1243],{"class":51},[45,76269,76270],{"class":79},"[A-Z]",[45,76272,579],{"class":51},[45,76274,861],{"class":62},[45,76276,835],{"class":55},[45,76278,75345],{"class":69},[45,76280,282],{"class":55},[45,76282,76250],{"class":62},[45,76284,75409],{"class":55},[45,76286,75479],{"class":337},[45,76288,76289,76291,76293,76295,76297,76299,76301,76303,76305,76307,76309,76311,76314,76316],{"class":47,"line":9999},[45,76290,73853],{"class":55},[45,76292,58347],{"class":69},[45,76294,282],{"class":55},[45,76296,861],{"class":62},[45,76298,1243],{"class":51},[45,76300,76270],{"class":79},[45,76302,579],{"class":51},[45,76304,861],{"class":62},[45,76306,835],{"class":55},[45,76308,75345],{"class":69},[45,76310,282],{"class":55},[45,76312,76313],{"class":62},"'P'",[45,76315,75409],{"class":55},[45,76317,75356],{"class":337},[45,76319,76320,76322,76324,76326,76328,76330,76333,76335,76337,76339,76341,76343,76346,76348],{"class":47,"line":10013},[45,76321,73853],{"class":55},[45,76323,58347],{"class":69},[45,76325,282],{"class":55},[45,76327,861],{"class":62},[45,76329,1243],{"class":51},[45,76331,76332],{"class":79},"[0-9]",[45,76334,579],{"class":51},[45,76336,861],{"class":62},[45,76338,835],{"class":55},[45,76340,75345],{"class":69},[45,76342,282],{"class":55},[45,76344,76345],{"class":62},"'0'",[45,76347,75409],{"class":55},[45,76349,75356],{"class":337},[45,76351,76352,76354,76356,76358,76360,76362,76365,76367,76369,76371,76373,76375,76377,76379],{"class":47,"line":10019},[45,76353,73853],{"class":55},[45,76355,58347],{"class":69},[45,76357,282],{"class":55},[45,76359,861],{"class":62},[45,76361,1243],{"class":51},[45,76363,76364],{"class":79},"[a-zA-Z0-9]",[45,76366,579],{"class":51},[45,76368,861],{"class":62},[45,76370,835],{"class":55},[45,76372,75345],{"class":69},[45,76374,282],{"class":55},[45,76376,76250],{"class":62},[45,76378,75353],{"class":55},[45,76380,75356],{"class":337},[45,76382,76383,76385,76387],{"class":47,"line":10046},[45,76384,52517],{"class":55},[45,76386,51913],{"class":51400},[45,76388,51407],{"class":55},[45,76390,76391,76393,76395],{"class":47,"line":10055},[45,76392,51885],{"class":55},[45,76394,51900],{"class":51400},[45,76396,51407],{"class":55},[45,76398,76399],{"class":47,"line":10061},[45,76400,2550],{"emptyLinePlaceholder":207},[45,76402,76403,76405,76407],{"class":47,"line":10069},[45,76404,51885],{"class":55},[45,76406,50735],{"class":51400},[45,76408,51407],{"class":55},[22147,76410,76412],{"id":76411},"_3624-修饰符","3.6.2.4 修饰符",[20,76414,76415],{},[23,76416],{"alt":25,"src":76417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[20,76419,76420],{},"replace是个方法，使用的时候一定不要忘记括号()",[20,76422,76423],{},[23,76424],{"alt":25,"src":76425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[36,76427,76429],{"className":50733,"code":76428,"language":50735,"meta":25,"style":25},"\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",[42,76430,76431,76441,76455,76463,76477,76497,76509,76517,76525,76533,76565,76596,76601,76633,76644,76677,76686,76694,76702],{"__ignoreMap":25},[45,76432,76433,76435,76437,76439],{"class":47,"line":48},[45,76434,51397],{"class":55},[45,76436,51401],{"class":51400},[45,76438,51404],{"class":69},[45,76440,51407],{"class":55},[45,76442,76443,76445,76447,76449,76451,76453],{"class":47,"line":66},[45,76444,1187],{"class":55},[45,76446,50735],{"class":51400},[45,76448,51416],{"class":69},[45,76450,59],{"class":55},[45,76452,51421],{"class":62},[45,76454,51407],{"class":55},[45,76456,76457,76459,76461],{"class":47,"line":1331},[45,76458,1187],{"class":55},[45,76460,51434],{"class":51400},[45,76462,51407],{"class":55},[45,76464,76465,76467,76469,76471,76473,76475],{"class":47,"line":1346},[45,76466,52244],{"class":55},[45,76468,51444],{"class":51400},[45,76470,51447],{"class":69},[45,76472,59],{"class":55},[45,76474,51452],{"class":62},[45,76476,51407],{"class":55},[45,76478,76479,76481,76483,76485,76487,76489,76491,76493,76495],{"class":47,"line":1352},[45,76480,52244],{"class":55},[45,76482,51444],{"class":51400},[45,76484,15069],{"class":69},[45,76486,59],{"class":55},[45,76488,51491],{"class":62},[45,76490,51471],{"class":69},[45,76492,59],{"class":55},[45,76494,51498],{"class":62},[45,76496,51407],{"class":55},[45,76498,76499,76501,76503,76505,76507],{"class":47,"line":1366},[45,76500,52244],{"class":55},[45,76502,51507],{"class":51400},[45,76504,51510],{"class":55},[45,76506,51507],{"class":51400},[45,76508,51407],{"class":55},[45,76510,76511,76513,76515],{"class":47,"line":1372},[45,76512,51885],{"class":55},[45,76514,51434],{"class":51400},[45,76516,51407],{"class":55},[45,76518,76519,76521,76523],{"class":47,"line":1463},[45,76520,1187],{"class":55},[45,76522,51900],{"class":51400},[45,76524,51407],{"class":55},[45,76526,76527,76529,76531],{"class":47,"line":1469},[45,76528,52244],{"class":55},[45,76530,51913],{"class":51400},[45,76532,51407],{"class":55},[45,76534,76535,76537,76539,76541,76543,76545,76548,76550,76552,76554,76556,76558,76561,76563],{"class":47,"line":1481},[45,76536,73853],{"class":55},[45,76538,58347],{"class":69},[45,76540,282],{"class":55},[45,76542,861],{"class":62},[45,76544,1243],{"class":51},[45,76546,76547],{"class":48077},"java",[45,76549,579],{"class":51},[45,76551,861],{"class":62},[45,76553,835],{"class":55},[45,76555,75345],{"class":69},[45,76557,282],{"class":55},[45,76559,76560],{"class":62},"'java'",[45,76562,75855],{"class":55},[45,76564,75356],{"class":337},[45,76566,76567,76569,76571,76573,76575,76577,76579,76581,76583,76585,76587,76589,76592,76594],{"class":47,"line":1763},[45,76568,73853],{"class":55},[45,76570,58347],{"class":69},[45,76572,282],{"class":55},[45,76574,861],{"class":62},[45,76576,1243],{"class":51},[45,76578,76547],{"class":48077},[45,76580,579],{"class":51},[45,76582,861],{"class":62},[45,76584,835],{"class":55},[45,76586,75345],{"class":69},[45,76588,282],{"class":55},[45,76590,76591],{"class":62},"'Java'",[45,76593,75855],{"class":55},[45,76595,75479],{"class":337},[45,76597,76598],{"class":47,"line":1768},[45,76599,76600],{"class":337},"    \u002F\u002F 不区分大小写、\n",[45,76602,76603,76605,76607,76609,76611,76613,76615,76617,76619,76621,76623,76625,76627,76629,76631],{"class":47,"line":1774},[45,76604,73853],{"class":55},[45,76606,58347],{"class":69},[45,76608,282],{"class":55},[45,76610,861],{"class":62},[45,76612,1243],{"class":51},[45,76614,76547],{"class":48077},[45,76616,579],{"class":51},[45,76618,861],{"class":62},[45,76620,718],{"class":51},[45,76622,835],{"class":55},[45,76624,75345],{"class":69},[45,76626,282],{"class":55},[45,76628,76591],{"class":62},[45,76630,75855],{"class":55},[45,76632,75356],{"class":337},[45,76634,76635,76637,76639,76641],{"class":47,"line":1779},[45,76636,11370],{"class":51},[45,76638,74019],{"class":79},[45,76640,13713],{"class":51},[45,76642,76643],{"class":62}," 'java是一门编程语言，学完java工资很高'\n",[45,76645,76646,76648,76651,76653,76656,76659,76661,76663,76665,76667,76670,76672,76675],{"class":47,"line":1793},[45,76647,11370],{"class":51},[45,76649,76650],{"class":79}," result",[45,76652,13713],{"class":51},[45,76654,76655],{"class":55}," str.",[45,76657,76658],{"class":69},"replace",[45,76660,282],{"class":55},[45,76662,861],{"class":62},[45,76664,76547],{"class":48077},[45,76666,861],{"class":62},[45,76668,76669],{"class":51},"ig",[45,76671,12584],{"class":55},[45,76673,76674],{"class":62},"'前端'",[45,76676,139],{"class":55},[45,76678,76679,76681,76683],{"class":47,"line":1798},[45,76680,73853],{"class":55},[45,76682,58347],{"class":69},[45,76684,76685],{"class":55},"(result)\n",[45,76687,76688,76690,76692],{"class":47,"line":1804},[45,76689,52517],{"class":55},[45,76691,51913],{"class":51400},[45,76693,51407],{"class":55},[45,76695,76696,76698,76700],{"class":47,"line":1825},[45,76697,51885],{"class":55},[45,76699,51900],{"class":51400},[45,76701,51407],{"class":55},[45,76703,76704,76706,76708],{"class":47,"line":1830},[45,76705,51885],{"class":55},[45,76707,50735],{"class":51400},[45,76709,51407],{"class":55},[196,76711,76712],{},"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":25,"searchDepth":66,"depth":66,"links":76714},[76715,76725,76737,76754,76761,76769],{"id":53460,"depth":66,"text":53461,"children":76716},[76717,76718,76719,76720,76721,76722,76723,76724],{"id":53464,"depth":1331,"text":53465},{"id":53497,"depth":1331,"text":53498},{"id":53536,"depth":1331,"text":53537},{"id":53694,"depth":1331,"text":53695},{"id":53742,"depth":1331,"text":53743},{"id":53879,"depth":1331,"text":53880},{"id":54201,"depth":1331,"text":54202},{"id":57189,"depth":1331,"text":57190},{"id":57217,"depth":66,"text":57218,"children":76726},[76727,76728,76729,76730,76731,76732,76733,76734,76735,76736],{"id":57221,"depth":1331,"text":57222},{"id":57244,"depth":1331,"text":57245},{"id":58159,"depth":1331,"text":58160},{"id":58849,"depth":1331,"text":58850},{"id":59131,"depth":1331,"text":59132},{"id":63292,"depth":1331,"text":63293},{"id":63462,"depth":1331,"text":63463},{"id":63590,"depth":1331,"text":63591},{"id":63615,"depth":1331,"text":63616},{"id":65004,"depth":1331,"text":65005},{"id":66157,"depth":66,"text":66158,"children":76738},[76739,76740,76741,76742,76743,76744,76745,76746,76747,76748,76749,76750,76751,76752,76753],{"id":66161,"depth":1331,"text":66162},{"id":66815,"depth":1331,"text":66816},{"id":68510,"depth":1331,"text":68511},{"id":68551,"depth":1331,"text":68552},{"id":68593,"depth":1331,"text":68594},{"id":68607,"depth":1331,"text":68608},{"id":68656,"depth":1331,"text":68657},{"id":68668,"depth":1331,"text":68669},{"id":68683,"depth":1331,"text":68684},{"id":68719,"depth":1331,"text":68720},{"id":68800,"depth":1331,"text":68801},{"id":68928,"depth":1331,"text":68929},{"id":68940,"depth":1331,"text":68941},{"id":68959,"depth":1331,"text":68960},{"id":71070,"depth":1331,"text":71071},{"id":71089,"depth":66,"text":71090,"children":76755},[76756,76757,76758,76759,76760],{"id":71110,"depth":1331,"text":71111},{"id":71130,"depth":1331,"text":71131},{"id":71179,"depth":1331,"text":71180},{"id":71304,"depth":1331,"text":71305},{"id":71485,"depth":1331,"text":71486},{"id":71503,"depth":66,"text":71504,"children":76762},[76763,76764,76765,76766,76767,76768],{"id":71518,"depth":1331,"text":71519},{"id":71577,"depth":1331,"text":71578},{"id":71601,"depth":1331,"text":71602},{"id":71921,"depth":1331,"text":71922},{"id":71953,"depth":1331,"text":71954},{"id":71976,"depth":1331,"text":71977},{"id":75044,"depth":66,"text":75045,"children":76770},[76771,76772],{"id":75078,"depth":1331,"text":75079},{"id":75117,"depth":1331,"text":75118},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53432,"description":204},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76779,"title":76780,"body":76781,"description":204,"extension":205,"meta":92918,"navigation":207,"path":92919,"seo":92920,"stem":92921,"__hash__":92922},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76782,"toc":92854},[76783,76786,76789,76793,76797,76802,76807,76818,76822,76827,76830,76834,76837,76842,76846,76850,76853,76858,76861,76865,76868,76876,76879,76883,76888,76893,76896,76900,76905,76910,76913,76917,76922,76925,76930,76933,76938,76941,76946,76951,76954,76957,76961,76966,76971,76974,76978,76982,76985,76988,76991,76995,76999,77004,77009,77012,77016,77021,77026,77029,77032,77035,77038,77041,77044,77047,77050,77053,77058,77062,77067,77072,77075,77078,77081,77084,77087,77090,77093,77096,77100,77104,77107,77110,77113,77118,77120,77123,77126,77129,77132,77135,77138,77141,77144,77147,77150,77153,77156,77159,77164,77169,77174,77177,77181,77184,77189,77193,77195,77206,77211,77312,77315,77318,77321,77324,77327,77330,77333,77336,77338,77341,77344,77347,77350,77353,77355,77358,77361,77364,77367,77370,77373,77375,77378,77380,77382,77385,77389,77393,77396,77399,77402,77405,77408,77411,77414,77417,77420,77425,77545,77548,77551,77556,77559,77562,77565,77568,77573,77576,77579,77582,77585,77590,77593,77693,77758,77832,77836,77839,77842,77846,77849,77863,77892,77895,77898,77901,77904,77907,77910,77913,77915,77918,77921,77924,77927,77931,77936,77940,77945,78020,78023,78206,78209,78212,78215,78218,78221,78223,78226,78229,78232,78235,78238,78241,78243,78247,78250,78255,78258,78261,78264,78267,78269,78274,78277,78280,78283,78286,78288,78293,78296,78299,78301,78303,78306,78310,78313,78316,78321,78324,78327,78330,78380,78385,78389,78394,78397,78466,78469,78478,78482,78487,78490,78493,78501,78504,78521,80323,80327,80331,80336,80339,80343,80349,80355,80507,80512,80517,80520,80523,80526,80529,80532,80535,80538,80541,80544,80547,80550,80553,80558,80562,80565,80576,80580,80585,80588,80591,80594,80597,80600,80602,80605,80608,80611,80614,80616,80633,80636,80640,80643,80648,80653,80656,80659,80663,80666,80669,80678,80681,80685,80688,80693,80698,80765,80769,80772,80775,80780,80785,80871,80876,80880,80883,80886,80901,80904,80909,80913,80918,81027,81030,81041,81191,81195,81200,81309,81313,81318,81323,81328,81331,81338,81358,81394,81558,81563,81566,81571,81578,81581,81584,81587,81646,81702,81758,81762,81767,82082,82085,82089,82092,82097,82206,82211,82215,82220,82224,82295,82299,82301,82304,82307,82345,82621,82625,82642,82708,82742,82746,82749,82754,82783,82790,82799,82804,82819,82824,82833,82836,82973,82977,83039,83043,83048,83293,83297,83302,83305,83308,83311,83314,83318,83323,84904,84908,84912,84918,84921,84926,84930,84933,84938,84941,84952,84956,84961,84965,84970,84975,84978,84983,84987,84991,84994,84999,85004,85007,85010,85013,85135,85140,85242,85245,85248,85252,85257,85429,85434,85438,85441,85446,85512,85517,85520,85651,85654,85659,85662,85665,85756,85761,85764,85767,85770,85773,85778,85783,85786,85791,85796,85801,85805,85808,85811,85816,85821,85826,85831,85885,85888,85891,85896,85899,85902,85907,85912,85917,85921,85926,85940,85945,85948,85953,85957,85962,85967,85972,85977,85982,85987,85992,85997,86000,86004,86009,86012,86015,86018,86023,86028,86031,86034,86038,86041,86044,86049,86054,86059,86064,86067,86072,86077,86138,86143,86146,86151,87392,87397,87401,87405,87410,87413,87418,87423,87426,87431,87433,87438,87442,87445,87448,87459,87463,87468,87473,87528,87533,87538,87543,87754,87759,87763,87768,87771,87773,87776,87779,88226,88231,88238,88244,88247,88250,88514,88519,88523,88788,88793,88797,88802,88807,88812,88817,89148,89151,89156,89161,89164,89168,89172,89177,89182,89187,89192,89197,89202,89206,89209,89214,89219,89222,89296,89301,89306,89311,89313,89316,89686,89691,89696,89701,89704,89707,89809,89814,89819,89922,89926,89931,89935,89939,89944,89949,89952,89957,89960,89963,90356,90361,90364,90367,90370,90373,90893,90897,90902,90907,90912,90915,90920,90923,90926,91308,91313,91315,91317,91320,91323,91835,91839,91900,91903,91906,91909,91913,91916,91921,91926,92851],[10,76784,76780],{"id":76785},"_4js进阶",[20,76787,76788],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[15,76790,76792],{"id":76791},"_41-作用域","4.1 作用域",[249,76794,76796],{"id":76795},"_411-局部作用域","4.1.1 局部作用域",[20,76798,76799],{},[23,76800],{"alt":25,"src":76801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[20,76803,76804],{},[23,76805],{"alt":25,"src":76806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[166,76808,76809,76812,76815],{},[169,76810,76811],{},"函数作用域在函数内部",[169,76813,76814],{},"块级作用域在{}",[169,76816,76817],{},"对象的那个{}不是作用域，不是块作用域",[249,76819,76821],{"id":76820},"_412-全局作用域","4.1.2 全局作用域",[20,76823,76824],{},[23,76825],{"alt":25,"src":76826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[20,76828,76829],{},"window.a=10不要这样写",[249,76831,76833],{"id":76832},"_413-作用域链","4.1.3 作用域链",[20,76835,76836],{},"变量查找机制",[20,76838,76839],{},[23,76840],{"alt":25,"src":76841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[15,76843,76845],{"id":76844},"_42-垃圾回收机制","4.2 垃圾回收机制",[249,76847,76849],{"id":76848},"_421-大体介绍","4.2.1 大体介绍",[20,76851,76852],{},"垃圾回收机制(Garbage Collection) 简称 GC",[20,76854,76855],{},[23,76856],{"alt":25,"src":76857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[20,76859,76860],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[249,76862,76864],{"id":76863},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[20,76866,76867],{},"堆栈空间分配区别：",[233,76869,76870,76873],{},[169,76871,76872],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[169,76874,76875],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[20,76877,76878],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22147,76880,76882],{"id":76881},"_4221-引用计数","4.2.2.1 引用计数",[20,76884,76885],{},[23,76886],{"alt":25,"src":76887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[20,76889,76890],{},[23,76891],{"alt":25,"src":76892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[20,76894,76895],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22147,76897,76899],{"id":76898},"_4222-标记清除法","4.2.2.2 标记清除法",[20,76901,76902],{},[23,76903],{"alt":25,"src":76904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[20,76906,76907],{},[23,76908],{"alt":25,"src":76909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[20,76911,76912],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[15,76914,76916],{"id":76915},"_43-闭包","4.3 闭包",[20,76918,76919],{},[23,76920],{"alt":25,"src":76921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[20,76923,76924],{},"闭包：内层函数+外层函数的变量",[20,76926,76927],{},[23,76928],{"alt":25,"src":76929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[20,76931,76932],{},"closure就是闭包",[20,76934,76935],{},[23,76936],{"alt":25,"src":76937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[20,76939,76940],{},"内层函数必须包含外层函数的变量才是闭包",[20,76942,76943],{},[23,76944],{"alt":25,"src":76945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[20,76947,76948],{},[23,76949],{"alt":25,"src":76950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[20,76952,76953],{},"闭包可能会引起内存泄漏",[20,76955,76956],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[15,76958,76960],{"id":76959},"_44-变量提升","4.4 变量提升",[20,76962,76963],{},[23,76964],{"alt":25,"src":76965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[20,76967,76968],{},[23,76969],{"alt":25,"src":76970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[20,76972,76973],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[15,76975,76977],{"id":76976},"_45-函数进阶","4.5 函数进阶",[249,76979,76981],{"id":76980},"_451-函数提升","4.5.1 函数提升",[20,76983,76984],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[20,76986,76987],{},"只提升函数声明，不提升函数调用",[51913,76989,76990],{},"\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",[249,76992,76994],{"id":76993},"_452-函数参数","4.5.2 函数参数",[22147,76996,76998],{"id":76997},"_4521-动态参数","4.5.2.1 动态参数",[20,77000,77001],{},[23,77002],{"alt":25,"src":77003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[20,77005,77006],{},[23,77007],{"alt":25,"src":77008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[20,77010,77011],{},"箭头函数里边没有arguments",[22147,77013,77015],{"id":77014},"_4522-剩余参数","4.5.2.2 剩余参数",[20,77017,77018],{},[23,77019],{"alt":25,"src":77020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[20,77022,77023],{},[23,77024],{"alt":25,"src":77025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[20,77027,77028],{},"剩余参数使用的时候不需要写...",[20,77030,77031],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[20,77033,77034],{},"  function getSum(a,b,...arr) {",[20,77036,77037],{},"  console.log(11)",[20,77039,77040],{},"  }",[20,77042,77043],{},"  getSum(1,2,3,4)",[20,77045,77046],{},"  将1传给a，2传给b，剩下的传给剩余参数",[20,77048,77049],{},"  getSum(1,2)",[20,77051,77052],{},"  将1传给a，2传给b，剩余参数为一个空数组",[20,77054,77055],{},[23,77056],{"alt":25,"src":77057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22147,77059,77061],{"id":77060},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[20,77063,77064],{},[23,77065],{"alt":25,"src":77066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[20,77068,77069],{},[23,77070],{"alt":25,"src":77071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[20,77073,77074],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[20,77076,77077],{},"展开运算符可以用于数组之间的合并：",[20,77079,77080],{},"const arr1 = [1, 2, 3]",[20,77082,77083],{},"const arr2 = [3, 4, 5]",[20,77085,77086],{},"const arr = [...arr1, ...arr2]",[20,77088,77089],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[20,77091,77092],{},"剩余参数：函数参数使用，得到真数组",[20,77094,77095],{},"展开运算符：数组中使用，数组展开",[249,77097,77099],{"id":77098},"_453-箭头函数","4.5.3 箭头函数",[22147,77101,77103],{"id":77102},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[20,77105,77106],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[20,77108,77109],{},"它不是万能的！！！",[20,77111,77112],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[20,77114,77115],{},[23,77116],{"alt":25,"src":77117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[20,77119,310],{},[20,77121,77122],{},"① 只有一个形参的时候，可以省略小括号：",[20,77124,77125],{},"const fn=x=>{console.log(x)}",[20,77127,77128],{},"② 只有一行代码时可以省略大括号：",[20,77130,77131],{},"const fn=x=>console.log(11)",[20,77133,77134],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[20,77136,77137],{},"const fn=x=>x+x",[20,77139,77140],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[20,77142,77143],{},"⑤ 阻止表单默认提交：",[20,77145,77146],{},"const form = document.querySelector('form')",[20,77148,77149],{},"form.addEventListener('click', ev => ev.preventDefault())",[20,77151,77152],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[20,77154,77155],{},"const fn=uname=>({uname:uname})",[20,77157,77158],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[20,77160,77161],{},[23,77162],{"alt":25,"src":77163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[20,77165,77166],{},[23,77167],{"alt":25,"src":77168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[20,77170,77171],{},[23,77172],{"alt":25,"src":77173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[20,77175,77176],{},"一定不要忘记用()，有()就理解为自带return",[22147,77178,77180],{"id":77179},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[20,77182,77183],{},"箭头函数是没有动态参数的arguments",[20,77185,77186],{},[23,77187],{"alt":25,"src":77188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22147,77190,77192],{"id":77191},"_4533-箭头函数this","4.5.3.3 箭头函数this",[20,77194,11481],{},[233,77196,77197,77200,77203],{},[169,77198,77199],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[169,77201,77202],{},"事件回调函数使用箭头函数时，this 为全局的 window",[169,77204,77205],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[20,77207,77208],{},[23,77209],{"alt":25,"src":77210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[36,77212,77214],{"className":53167,"code":77213,"language":53169,"meta":25,"style":25},"  \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",[42,77215,77216,77224,77229,77234,77239,77244,77249,77253,77258,77262,77266,77271,77276,77281,77285,77289,77294,77299,77304],{"__ignoreMap":25},[45,77217,77218,77220,77222],{"class":47,"line":48},[45,77219,52244],{"class":55},[45,77221,51913],{"class":51400},[45,77223,51407],{"class":55},[45,77225,77226],{"class":47,"line":66},[45,77227,77228],{"class":55},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[45,77230,77231],{"class":47,"line":1331},[45,77232,77233],{"class":55},"    console.log(this) \u002F\u002F指向window\n",[45,77235,77236],{"class":47,"line":1346},[45,77237,77238],{"class":55},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[45,77240,77241],{"class":47,"line":1352},[45,77242,77243],{"class":55},"    function fn() {\n",[45,77245,77246],{"class":47,"line":1366},[45,77247,77248],{"class":55},"      console.log(this)  \u002F\u002F指向window\n",[45,77250,77251],{"class":47,"line":1372},[45,77252,2337],{"class":55},[45,77254,77255],{"class":47,"line":1463},[45,77256,77257],{"class":55},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[45,77259,77260],{"class":47,"line":1469},[45,77261,2550],{"emptyLinePlaceholder":207},[45,77263,77264],{"class":47,"line":1481},[45,77265,71623],{"class":55},[45,77267,77268],{"class":47,"line":1763},[45,77269,77270],{"class":55},"      name: 'andy',\n",[45,77272,77273],{"class":47,"line":1768},[45,77274,77275],{"class":55},"      sayHai: function () {\n",[45,77277,77278],{"class":47,"line":1774},[45,77279,77280],{"class":55},"        console.log(this)\n",[45,77282,77283],{"class":47,"line":1779},[45,77284,52498],{"class":55},[45,77286,77287],{"class":47,"line":1793},[45,77288,2337],{"class":55},[45,77290,77291],{"class":47,"line":1798},[45,77292,77293],{"class":55},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[45,77295,77296],{"class":47,"line":1804},[45,77297,77298],{"class":55},"    \u002F\u002F 2.箭头函数的this\n",[45,77300,77301],{"class":47,"line":1825},[45,77302,77303],{"class":55},"    const fn = () => console.log(this)\n",[45,77305,77306,77308,77310],{"class":47,"line":1830},[45,77307,52517],{"class":55},[45,77309,51913],{"class":51400},[45,77311,51407],{"class":55},[20,77313,77314],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[20,77316,77317],{},"const fn = () => console.log(this)",[20,77319,77320],{},"fn() \u002F\u002F指向window",[20,77322,77323],{},"\u002F\u002F 3.对象方法箭头函数 this",[20,77325,77326],{},"①",[20,77328,77329],{},"const obj = {",[20,77331,77332],{},"uname: 'pink老师',",[20,77334,77335],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[20,77337,1223],{},[20,77339,77340],{},"调用对象里边的函数",[20,77342,77343],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[20,77345,77346],{},"obj.sayHai()",[20,77348,77349],{},"②",[20,77351,77352],{},"const obj1 = {",[20,77354,77332],{},[20,77356,77357],{},"sayHai: function () {",[20,77359,77360],{},"let i = 10",[20,77362,77363],{},"const count = () => {",[20,77365,77366],{},"console.log(this)",[20,77368,77369],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[20,77371,77372],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[20,77374,1223],{},[20,77376,77377],{},"count()",[20,77379,1223],{},[20,77381,1223],{},[20,77383,77384],{},"obj1.sayHai()",[15,77386,77388],{"id":77387},"_46-解构赋值","4.6 解构赋值",[249,77390,77392],{"id":77391},"_461-数组解构","4.6.1 数组解构",[20,77394,77395],{},"以前要是使用数组中的值的话：",[20,77397,77398],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[20,77400,77401],{},"const arr=[100,60,80]",[20,77403,77404],{},"const max=arr[0]",[20,77406,77407],{},"const min=arr[1]",[20,77409,77410],{},"const avg=arr[2]",[20,77412,77413],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[20,77415,77416],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[20,77418,77419],{},"这个写法就类似于上边的那种用很多const的方法",[20,77421,77422],{},[23,77423],{"alt":25,"src":77424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[36,77426,77428],{"className":50733,"code":77427,"language":50735,"meta":25,"style":25},"①变量之间交换值:\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",[42,77429,77430,77435,77440,77445,77450,77455,77459,77463,77468,77472,77477,77482,77486,77491,77496,77507,77517,77522,77527,77532,77536,77540],{"__ignoreMap":25},[45,77431,77432],{"class":47,"line":48},[45,77433,77434],{"class":55},"①变量之间交换值:\n",[45,77436,77437],{"class":47,"line":66},[45,77438,77439],{"class":55},"let a=1\n",[45,77441,77442],{"class":47,"line":1331},[45,77443,77444],{"class":55},"let b=2;\n",[45,77446,77447],{"class":47,"line":1346},[45,77448,77449],{"class":55},"必须加这行代码，不然就会报错\n",[45,77451,77452],{"class":47,"line":1352},[45,77453,77454],{"class":55},"[b,a]=[a,b]\n",[45,77456,77457],{"class":47,"line":1366},[45,77458,2550],{"emptyLinePlaceholder":207},[45,77460,77461],{"class":47,"line":1372},[45,77462,2550],{"emptyLinePlaceholder":207},[45,77464,77465],{"class":47,"line":1463},[45,77466,77467],{"class":55},"可以写成下面的方式：\n",[45,77469,77470],{"class":47,"line":1469},[45,77471,77439],{"class":55},[45,77473,77474],{"class":47,"line":1481},[45,77475,77476],{"class":55},"let b=2\n",[45,77478,77479],{"class":47,"line":1763},[45,77480,77481],{"class":55},";[b,a]=[a,b]\n",[45,77483,77484],{"class":47,"line":1768},[45,77485,2550],{"emptyLinePlaceholder":207},[45,77487,77488],{"class":47,"line":1774},[45,77489,77490],{"class":55},"②排序\n",[45,77492,77493],{"class":47,"line":1779},[45,77494,77495],{"class":55},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[45,77497,77498,77501,77504],{"class":47,"line":1793},[45,77499,77500],{"class":55},"for (let i = 0; i ",[45,77502,1187],{"class":77503},"s7hpK",[45,77505,77506],{"class":55}," arr1.length; i++) {\n",[45,77508,77509,77512,77514],{"class":47,"line":1798},[45,77510,77511],{"class":55},"   for (let j = 0; j ",[45,77513,1187],{"class":77503},[45,77515,77516],{"class":55}," arr1.length - 1; j++) {\n",[45,77518,77519],{"class":47,"line":1804},[45,77520,77521],{"class":55},"      if (arr1[j] > arr1[j + 1]) {\n",[45,77523,77524],{"class":47,"line":1825},[45,77525,77526],{"class":55},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[45,77528,77529],{"class":47,"line":1830},[45,77530,77531],{"class":55},"       }\n",[45,77533,77534],{"class":47,"line":1844},[45,77535,4459],{"class":55},[45,77537,77538],{"class":47,"line":1849},[45,77539,1716],{"class":55},[45,77541,77542],{"class":47,"line":1878},[45,77543,77544],{"class":55},"console.log(arr1)\n",[20,77546,77547],{},"数组解构的细节：",[20,77549,77550],{},"①变量多，单元值少",[20,77552,77553],{},[23,77554],{"alt":25,"src":77555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[20,77557,77558],{},"防止出现undefined的方法：",[20,77560,77561],{},"const [a=0,b=0] =[1]",[20,77563,77564],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[20,77566,77567],{},"②变量少，单元值多",[20,77569,77570],{},[23,77571],{"alt":25,"src":77572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[20,77574,77575],{},"此时可以使用剩余参数来接收多余的值",[20,77577,77578],{},"const [a,b,...c]=[1,2,3,4]",[20,77580,77581],{},"console.log(c) 输出[3,4]",[20,77583,77584],{},"③可以按需导入，忽略某些返回值",[20,77586,77587],{},[23,77588],{"alt":25,"src":77589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[20,77591,77592],{},"④支持多维数组的结构",[36,77594,77598],{"className":77595,"code":77596,"language":77597,"meta":25,"style":25},"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",[42,77599,77600,77628,77644,77659,77674],{"__ignoreMap":25},[45,77601,77602,77604,77606,77608,77610,77612,77614,77616,77619,77621,77623,77625],{"class":47,"line":48},[45,77603,6942],{"class":51},[45,77605,51933],{"class":55},[45,77607,59],{"class":51},[45,77609,52326],{"class":55},[45,77611,495],{"class":79},[45,77613,12584],{"class":55},[45,77615,356],{"class":79},[45,77617,77618],{"class":55},", [",[45,77620,350],{"class":79},[45,77622,12584],{"class":55},[45,77624,570],{"class":79},[45,77626,77627],{"class":55},"]]\n",[45,77629,77630,77633,77635,77637,77639,77641],{"class":47,"line":66},[45,77631,77632],{"class":55},"console.",[45,77634,58347],{"class":69},[45,77636,4001],{"class":55},[45,77638,469],{"class":79},[45,77640,4366],{"class":55},[45,77642,77643],{"class":337},"  \u002F\u002F1\n",[45,77645,77646,77648,77650,77652,77654,77656],{"class":47,"line":1331},[45,77647,77632],{"class":55},[45,77649,58347],{"class":69},[45,77651,4001],{"class":55},[45,77653,495],{"class":79},[45,77655,4366],{"class":55},[45,77657,77658],{"class":337},"  \u002F\u002F2\n",[45,77660,77661,77663,77665,77667,77669,77671],{"class":47,"line":1346},[45,77662,77632],{"class":55},[45,77664,58347],{"class":69},[45,77666,4001],{"class":55},[45,77668,356],{"class":79},[45,77670,4366],{"class":55},[45,77672,77673],{"class":337},"  \u002F\u002F[3,4]\n",[45,77675,77676,77678,77680,77682,77684,77686,77688,77690],{"class":47,"line":1352},[45,77677,77632],{"class":55},[45,77679,58347],{"class":69},[45,77681,4001],{"class":55},[45,77683,356],{"class":79},[45,77685,5051],{"class":55},[45,77687,469],{"class":79},[45,77689,4366],{"class":55},[45,77691,77692],{"class":337},"  \u002F\u002F3\n",[36,77694,77696],{"className":77595,"code":77695,"language":77597,"meta":25,"style":25},"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",[42,77697,77698,77725,77736,77747],{"__ignoreMap":25},[45,77699,77700,77702,77705,77707,77709,77711,77713,77715,77717,77719,77721,77723],{"class":47,"line":48},[45,77701,6942],{"class":51},[45,77703,77704],{"class":55}," [a, b, c] ",[45,77706,59],{"class":51},[45,77708,52326],{"class":55},[45,77710,495],{"class":79},[45,77712,12584],{"class":55},[45,77714,356],{"class":79},[45,77716,77618],{"class":55},[45,77718,350],{"class":79},[45,77720,12584],{"class":55},[45,77722,570],{"class":79},[45,77724,77627],{"class":55},[45,77726,77727,77729,77731,77734],{"class":47,"line":66},[45,77728,77632],{"class":55},[45,77730,58347],{"class":69},[45,77732,77733],{"class":55},"(a)",[45,77735,77643],{"class":337},[45,77737,77738,77740,77742,77745],{"class":47,"line":1331},[45,77739,77632],{"class":55},[45,77741,58347],{"class":69},[45,77743,77744],{"class":55},"(b)",[45,77746,77658],{"class":337},[45,77748,77749,77751,77753,77756],{"class":47,"line":1346},[45,77750,77632],{"class":55},[45,77752,58347],{"class":69},[45,77754,77755],{"class":55},"(c)",[45,77757,77673],{"class":337},[36,77759,77761],{"className":77595,"code":77760,"language":77597,"meta":25,"style":25},"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",[42,77762,77763,77790,77800,77810,77820],{"__ignoreMap":25},[45,77764,77765,77767,77770,77772,77774,77776,77778,77780,77782,77784,77786,77788],{"class":47,"line":48},[45,77766,6942],{"class":51},[45,77768,77769],{"class":55}," [a, b, [c, d]] ",[45,77771,59],{"class":51},[45,77773,52326],{"class":55},[45,77775,495],{"class":79},[45,77777,12584],{"class":55},[45,77779,356],{"class":79},[45,77781,77618],{"class":55},[45,77783,350],{"class":79},[45,77785,12584],{"class":55},[45,77787,570],{"class":79},[45,77789,77627],{"class":55},[45,77791,77792,77794,77796,77798],{"class":47,"line":66},[45,77793,77632],{"class":55},[45,77795,58347],{"class":69},[45,77797,77733],{"class":55},[45,77799,77643],{"class":337},[45,77801,77802,77804,77806,77808],{"class":47,"line":1331},[45,77803,77632],{"class":55},[45,77805,58347],{"class":69},[45,77807,77744],{"class":55},[45,77809,77658],{"class":337},[45,77811,77812,77814,77816,77818],{"class":47,"line":1346},[45,77813,77632],{"class":55},[45,77815,58347],{"class":69},[45,77817,77755],{"class":55},[45,77819,77692],{"class":337},[45,77821,77822,77824,77826,77829],{"class":47,"line":1352},[45,77823,77632],{"class":55},[45,77825,58347],{"class":69},[45,77827,77828],{"class":55},"(d)",[45,77830,77831],{"class":337},"  \u002F\u002F4\n",[249,77833,77835],{"id":77834},"_462-对象解构","4.6.2 对象解构",[20,77837,77838],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[20,77840,77841],{},"用的非常非常多！！！！！！",[22147,77843,77845],{"id":77844},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[20,77847,77848],{},"基本语法：",[233,77850,77851,77854,77857,77860],{},[169,77852,77853],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[169,77855,77856],{},"对象属性的值将被赋值给与属性名相同的变量",[169,77858,77859],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[169,77861,77862],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[36,77864,77866],{"className":50733,"code":77865,"language":50735,"meta":25,"style":25},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[42,77867,77868,77873,77878,77883,77887],{"__ignoreMap":25},[45,77869,77870],{"class":47,"line":48},[45,77871,77872],{"class":55},"const obj = {\n",[45,77874,77875],{"class":47,"line":66},[45,77876,77877],{"class":55},"   uname: 'pink老师',\n",[45,77879,77880],{"class":47,"line":1331},[45,77881,77882],{"class":55},"   age: 18,\n",[45,77884,77885],{"class":47,"line":1346},[45,77886,1716],{"class":55},[45,77888,77889],{"class":47,"line":1352},[45,77890,77891],{"class":55},"const { uname, age } = obj\n",[20,77893,77894],{},"上方代码这样写等价于：",[20,77896,77897],{},"const uname等价于obj.uname",[20,77899,77900],{},"变量名可以重新改名：",[20,77902,77903],{},"const uname='red老师'",[20,77905,77906],{},"const user={",[20,77908,77909],{},"  uname:'pink老师',",[20,77911,77912],{},"  age:18",[20,77914,1223],{},[20,77916,77917],{},"const {uname,age}=user",[20,77919,77920],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[20,77922,77923],{},"const {旧变量名：新变量名}=对象",[20,77925,77926],{},"const {uname:username,age}=user",[22147,77928,77930],{"id":77929},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[20,77932,77933],{},[23,77934],{"alt":25,"src":77935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22147,77937,77939],{"id":77938},"_4623-多级对象解构","4.6.2.3 多级对象解构",[20,77941,77942],{},[23,77943],{"alt":25,"src":77944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[36,77946,77948],{"className":53167,"code":77947,"language":53169,"meta":25,"style":25},"  \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",[42,77949,77950,77958,77963,77968,77973,77978,77983,77988,77993,77998,78002,78007,78012],{"__ignoreMap":25},[45,77951,77952,77954,77956],{"class":47,"line":48},[45,77953,52244],{"class":55},[45,77955,51913],{"class":51400},[45,77957,51407],{"class":55},[45,77959,77960],{"class":47,"line":66},[45,77961,77962],{"class":55},"    const pig = {\n",[45,77964,77965],{"class":47,"line":1331},[45,77966,77967],{"class":55},"      name: '佩奇',\n",[45,77969,77970],{"class":47,"line":1346},[45,77971,77972],{"class":55},"      family: {\n",[45,77974,77975],{"class":47,"line":1352},[45,77976,77977],{"class":55},"        mother: '猪妈妈',\n",[45,77979,77980],{"class":47,"line":1366},[45,77981,77982],{"class":55},"        father: '猪爸爸',\n",[45,77984,77985],{"class":47,"line":1372},[45,77986,77987],{"class":55},"        sister: '乔治'\n",[45,77989,77990],{"class":47,"line":1463},[45,77991,77992],{"class":55},"      },\n",[45,77994,77995],{"class":47,"line":1469},[45,77996,77997],{"class":55},"      age: 6\n",[45,77999,78000],{"class":47,"line":1481},[45,78001,2337],{"class":55},[45,78003,78004],{"class":47,"line":1763},[45,78005,78006],{"class":55},"    \u002F\u002F 多级对象解构\n",[45,78008,78009],{"class":47,"line":1768},[45,78010,78011],{"class":55},"    const { name, family: { mother, father, sister }, age } = pig\n",[45,78013,78014,78016,78018],{"class":47,"line":1774},[45,78015,52517],{"class":55},[45,78017,51913],{"class":51400},[45,78019,51407],{"class":55},[20,78021,78022],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[36,78024,78027],{"className":78025,"code":78026,"language":76547,"meta":25,"style":25},"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",[42,78028,78029,78034,78045,78057,78069,78078,78082,78093,78105,78115,78120,78124,78134,78145,78154,78158,78162,78173,78184,78193,78197,78202],{"__ignoreMap":25},[45,78030,78031],{"class":47,"line":48},[45,78032,78033],{"class":337},"    \u002F\u002F 这是后台传递过来的数据\n",[45,78035,78036,78038,78041,78043],{"class":47,"line":66},[45,78037,11370],{"class":51},[45,78039,78040],{"class":55}," msg ",[45,78042,59],{"class":51},[45,78044,15721],{"class":55},[45,78046,78047,78050,78052,78055],{"class":47,"line":1331},[45,78048,78049],{"class":62},"      \"code\"",[45,78051,1136],{"class":51},[45,78053,78054],{"class":79}," 200",[45,78056,31566],{"class":55},[45,78058,78059,78062,78064,78067],{"class":47,"line":1346},[45,78060,78061],{"class":62},"      \"msg\"",[45,78063,1136],{"class":51},[45,78065,78066],{"class":62}," \"获取新闻列表成功\"",[45,78068,31566],{"class":55},[45,78070,78071,78074,78076],{"class":47,"line":1352},[45,78072,78073],{"class":62},"      \"data\"",[45,78075,1136],{"class":51},[45,78077,55547],{"class":55},[45,78079,78080],{"class":47,"line":1366},[45,78081,2660],{"class":55},[45,78083,78084,78087,78089,78091],{"class":47,"line":1372},[45,78085,78086],{"class":62},"          \"id\"",[45,78088,1136],{"class":51},[45,78090,136],{"class":79},[45,78092,31566],{"class":55},[45,78094,78095,78098,78100,78103],{"class":47,"line":1463},[45,78096,78097],{"class":62},"          \"title\"",[45,78099,1136],{"class":51},[45,78101,78102],{"class":62}," \"5G商用自己，三大运用商收入下降\"",[45,78104,31566],{"class":55},[45,78106,78107,78110,78112],{"class":47,"line":1469},[45,78108,78109],{"class":62},"          \"count\"",[45,78111,1136],{"class":51},[45,78113,78114],{"class":79}," 58\n",[45,78116,78117],{"class":47,"line":1481},[45,78118,78119],{"class":55},"        },\n",[45,78121,78122],{"class":47,"line":1763},[45,78123,2660],{"class":55},[45,78125,78126,78128,78130,78132],{"class":47,"line":1768},[45,78127,78086],{"class":62},[45,78129,1136],{"class":51},[45,78131,14904],{"class":79},[45,78133,31566],{"class":55},[45,78135,78136,78138,78140,78143],{"class":47,"line":1774},[45,78137,78097],{"class":62},[45,78139,1136],{"class":51},[45,78141,78142],{"class":62}," \"国际媒体头条速览\"",[45,78144,31566],{"class":55},[45,78146,78147,78149,78151],{"class":47,"line":1779},[45,78148,78109],{"class":62},[45,78150,1136],{"class":51},[45,78152,78153],{"class":79}," 56\n",[45,78155,78156],{"class":47,"line":1793},[45,78157,78119],{"class":55},[45,78159,78160],{"class":47,"line":1798},[45,78161,2660],{"class":55},[45,78163,78164,78166,78168,78171],{"class":47,"line":1804},[45,78165,78086],{"class":62},[45,78167,1136],{"class":51},[45,78169,78170],{"class":79}," 3",[45,78172,31566],{"class":55},[45,78174,78175,78177,78179,78182],{"class":47,"line":1825},[45,78176,78097],{"class":62},[45,78178,1136],{"class":51},[45,78180,78181],{"class":62}," \"乌克兰和俄罗斯持续冲突\"",[45,78183,31566],{"class":55},[45,78185,78186,78188,78190],{"class":47,"line":1830},[45,78187,78109],{"class":62},[45,78189,1136],{"class":51},[45,78191,78192],{"class":79}," 1669\n",[45,78194,78195],{"class":47,"line":1844},[45,78196,78119],{"class":55},[45,78198,78199],{"class":47,"line":1849},[45,78200,78201],{"class":55},"      ]\n",[45,78203,78204],{"class":47,"line":1878},[45,78205,2337],{"class":55},[20,78207,78208],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[20,78210,78211],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[20,78213,78214],{},"\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,78216,78217],{},"function({data}) {",[20,78219,78220],{},"console.log(data)",[20,78222,1223],{},[20,78224,78225],{},"render(msg)",[20,78227,78228],{},"实参传递给形参的时候解构了",[20,78230,78231],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[20,78233,78234],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[20,78236,78237],{},"function render({data:mydata}) {",[20,78239,78240],{},"  console.log(data)",[20,78242,1223],{},[249,78244,78246],{"id":78245},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[20,78248,78249],{},"有两种情况：一个是数组结构，一个是立即执行函数",[233,78251,78252],{},[169,78253,78254],{},"如果对一个数组进行遍历，有两种方式：",[20,78256,78257],{},"①法1",[20,78259,78260],{},"const arr=[1,2,3]",[20,78262,78263],{},"arr.map(function(item,index) {",[20,78265,78266],{},"  console.log(item)",[20,78268,52564],{},[20,78270,78271],{},[23,78272],{"alt":25,"src":78273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[20,78275,78276],{},"②法2",[20,78278,78279],{},"const str='pink'",[20,78281,78282],{},"[1,2,3].map(function(item,index) {",[20,78284,78285],{},"console.log(item)",[20,78287,52564],{},[20,78289,78290],{},[23,78291],{"alt":25,"src":78292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[20,78294,78295],{},"此时会报错",[20,78297,78298],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[20,78300,78285],{},[20,78302,52564],{},[20,78304,78305],{},"内部会当成这样处理，所以我们用分号进行隔开",[15,78307,78309],{"id":78308},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[20,78311,78312],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[20,78314,78315],{},"可以理解为加强版的for循环",[20,78317,78318],{},[23,78319],{"alt":25,"src":78320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[20,78322,78323],{},"里边不写return，不返回数组，只遍历不返回",[20,78325,78326],{},"map是返回数组",[20,78328,78329],{},"forEach主要用于遍历数组对象",[36,78331,78333],{"className":53167,"code":78332,"language":53169,"meta":25,"style":25},"  \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",[42,78334,78335,78343,78348,78353,78358,78363,78367,78372],{"__ignoreMap":25},[45,78336,78337,78339,78341],{"class":47,"line":48},[45,78338,52244],{"class":55},[45,78340,51913],{"class":51400},[45,78342,51407],{"class":55},[45,78344,78345],{"class":47,"line":66},[45,78346,78347],{"class":55},"    const arr = ['red', 'green', 'pink']\n",[45,78349,78350],{"class":47,"line":1331},[45,78351,78352],{"class":55},"    const result = arr.forEach(function (item, index) {\n",[45,78354,78355],{"class":47,"line":1346},[45,78356,78357],{"class":55},"      console.log(item)\n",[45,78359,78360],{"class":47,"line":1352},[45,78361,78362],{"class":55},"      console.log(index)\n",[45,78364,78365],{"class":47,"line":1366},[45,78366,33561],{"class":55},[45,78368,78369],{"class":47,"line":1372},[45,78370,78371],{"class":55},"    console.log(result)\n",[45,78373,78374,78376,78378],{"class":47,"line":1463},[45,78375,52517],{"class":55},[45,78377,51913],{"class":51400},[45,78379,51407],{"class":55},[20,78381,78382],{},[23,78383],{"alt":25,"src":78384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[15,78386,78388],{"id":78387},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[20,78390,78391],{},[23,78392],{"alt":25,"src":78393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[20,78395,78396],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[36,78398,78400],{"className":53167,"code":78399,"language":53169,"meta":25,"style":25},"\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",[42,78401,78402,78410,78418,78423,78428,78432,78436,78441,78445,78450,78458],{"__ignoreMap":25},[45,78403,78404,78406,78408],{"class":47,"line":48},[45,78405,1187],{"class":55},[45,78407,51900],{"class":51400},[45,78409,51407],{"class":55},[45,78411,78412,78414,78416],{"class":47,"line":66},[45,78413,52244],{"class":55},[45,78415,51913],{"class":51400},[45,78417,51407],{"class":55},[45,78419,78420],{"class":47,"line":1331},[45,78421,78422],{"class":55},"    const arr = [10, 20, 30]\n",[45,78424,78425],{"class":47,"line":1346},[45,78426,78427],{"class":55},"    const newArr = arr.filter(function (item, index) {\n",[45,78429,78430],{"class":47,"line":1352},[45,78431,78357],{"class":55},[45,78433,78434],{"class":47,"line":1366},[45,78435,78362],{"class":55},[45,78437,78438],{"class":47,"line":1372},[45,78439,78440],{"class":55},"      return item >= 20\n",[45,78442,78443],{"class":47,"line":1463},[45,78444,33561],{"class":55},[45,78446,78447],{"class":47,"line":1469},[45,78448,78449],{"class":55},"    console.log(newArr)\n",[45,78451,78452,78454,78456],{"class":47,"line":1481},[45,78453,52517],{"class":55},[45,78455,51913],{"class":51400},[45,78457,51407],{"class":55},[45,78459,78460,78462,78464],{"class":47,"line":1763},[45,78461,51885],{"class":55},[45,78463,51900],{"class":51400},[45,78465,51407],{"class":55},[20,78467,78468],{},"这个也可以写成箭头函数：",[36,78470,78472],{"className":50733,"code":78471,"language":50735,"meta":25,"style":25},"const newArr = arr.filter(item => item >= 20)\n",[42,78473,78474],{"__ignoreMap":25},[45,78475,78476],{"class":47,"line":48},[45,78477,78471],{"class":55},[15,78479,78481],{"id":78480},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[20,78483,78484],{},[23,78485],{"alt":25,"src":78486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[20,78488,78489],{},"步骤：",[20,78491,78492],{},"①：渲染页面模块",[166,78494,78495,78498],{},[169,78496,78497],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[169,78499,78500],{},"用forEach+字符串的形式",[20,78502,78503],{},"②：点击不同需求，显示不同页面内容",[166,78505,78506,78509,78512,78515,78518],{},[169,78507,78508],{},"点击采取事件委托方式 .filter",[169,78510,78511],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[169,78513,78514],{},"筛选条件是根据点击的 data-index 来判断",[169,78516,78517],{},"可以使用对象解构，把事件对象解构",[169,78519,78520],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[36,78522,78524],{"className":50733,"code":78523,"language":50735,"meta":25,"style":25},"\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",[42,78525,78526,78536,78550,78554,78562,78576,78596,78608,78616,78622,78632,78642,78652,78656,78660,78666,78679,78691,78701,78713,78717,78721,78728,78741,78753,78770,78788,78801,78805,78809,78821,78831,78835,78839,78846,78887,78914,78924,78928,78932,78940,78952,78956,78960,78968,78980,78992,79003,79007,79011,79020,79032,79043,79047,79051,79060,79072,79084,79088,79092,79099,79109,79121,79133,79148,79152,79156,79164,79180,79190,79200,79210,79222,79226,79230,79240,79251,79261,79265,79273,79281,79285,79293,79308,79334,79359,79384,79403,79411,79425,79430,79435,79440,79445,79450,79458,79466,79471,79482,79487,79497,79507,79517,79527,79531,79535,79544,79553,79562,79571,79575,79579,79588,79597,79606,79615,79619,79623,79632,79641,79650,79659,79663,79667,79676,79685,79694,79703,79707,79711,79720,79729,79738,79747,79751,79755,79764,79773,79782,79791,79795,79799,79808,79817,79825,79834,79838,79842,79846,79851,79863,79868,79880,79884,79901,79929,79938,79943,79953,79963,79972,79977,79982,79986,79991,80008,80012,80017,80025,80030,80057,80062,80082,80087,80099,80104,80109,80114,80125,80139,80176,80194,80227,80244,80268,80272,80277,80283,80287,80291,80295,80303,80311,80315],{"__ignoreMap":25},[45,78527,78528,78530,78532,78534],{"class":47,"line":48},[45,78529,51397],{"class":55},[45,78531,51401],{"class":51400},[45,78533,51404],{"class":69},[45,78535,51407],{"class":55},[45,78537,78538,78540,78542,78544,78546,78548],{"class":47,"line":66},[45,78539,1187],{"class":55},[45,78541,50735],{"class":51400},[45,78543,51416],{"class":69},[45,78545,59],{"class":55},[45,78547,51421],{"class":62},[45,78549,51407],{"class":55},[45,78551,78552],{"class":47,"line":1331},[45,78553,2550],{"emptyLinePlaceholder":207},[45,78555,78556,78558,78560],{"class":47,"line":1346},[45,78557,1187],{"class":55},[45,78559,51434],{"class":51400},[45,78561,51407],{"class":55},[45,78563,78564,78566,78568,78570,78572,78574],{"class":47,"line":1352},[45,78565,52244],{"class":55},[45,78567,51444],{"class":51400},[45,78569,51447],{"class":69},[45,78571,59],{"class":55},[45,78573,51452],{"class":62},[45,78575,51407],{"class":55},[45,78577,78578,78580,78582,78584,78586,78588,78590,78592,78594],{"class":47,"line":1366},[45,78579,52244],{"class":55},[45,78581,51444],{"class":51400},[45,78583,15069],{"class":69},[45,78585,59],{"class":55},[45,78587,51491],{"class":62},[45,78589,51471],{"class":69},[45,78591,59],{"class":55},[45,78593,51498],{"class":62},[45,78595,51407],{"class":55},[45,78597,78598,78600,78602,78604,78606],{"class":47,"line":1372},[45,78599,52244],{"class":55},[45,78601,51507],{"class":51400},[45,78603,51510],{"class":55},[45,78605,51507],{"class":51400},[45,78607,51407],{"class":55},[45,78609,78610,78612,78614],{"class":47,"line":1463},[45,78611,52244],{"class":55},[45,78613,196],{"class":51400},[45,78615,51407],{"class":55},[45,78617,78618,78620],{"class":47,"line":1469},[45,78619,6553],{"class":51400},[45,78621,15721],{"class":55},[45,78623,78624,78626,78628,78630],{"class":47,"line":1481},[45,78625,54795],{"class":79},[45,78627,51537],{"class":55},[45,78629,469],{"class":79},[45,78631,1442],{"class":55},[45,78633,78634,78636,78638,78640],{"class":47,"line":1763},[45,78635,54806],{"class":79},[45,78637,51537],{"class":55},[45,78639,469],{"class":79},[45,78641,1442],{"class":55},[45,78643,78644,78646,78648,78650],{"class":47,"line":1768},[45,78645,72696],{"class":79},[45,78647,51537],{"class":55},[45,78649,60605],{"class":79},[45,78651,1442],{"class":55},[45,78653,78654],{"class":47,"line":1774},[45,78655,2337],{"class":55},[45,78657,78658],{"class":47,"line":1779},[45,78659,2550],{"emptyLinePlaceholder":207},[45,78661,78662,78664],{"class":47,"line":1793},[45,78663,62223],{"class":69},[45,78665,15721],{"class":55},[45,78667,78668,78670,78672,78675,78677],{"class":47,"line":1798},[45,78669,54871],{"class":79},[45,78671,51537],{"class":55},[45,78673,78674],{"class":79},"990",[45,78676,51592],{"class":51},[45,78678,1442],{"class":55},[45,78680,78681,78683,78685,78687,78689],{"class":47,"line":1804},[45,78682,54806],{"class":79},[45,78684,51537],{"class":55},[45,78686,469],{"class":79},[45,78688,51656],{"class":79},[45,78690,1442],{"class":55},[45,78692,78693,78695,78697,78699],{"class":47,"line":1825},[45,78694,55109],{"class":79},[45,78696,51537],{"class":55},[45,78698,51577],{"class":79},[45,78700,1442],{"class":55},[45,78702,78703,78706,78708,78711],{"class":47,"line":1830},[45,78704,78705],{"class":79},"      flex-wrap",[45,78707,51537],{"class":55},[45,78709,78710],{"class":79},"wrap",[45,78712,1442],{"class":55},[45,78714,78715],{"class":47,"line":1844},[45,78716,2337],{"class":55},[45,78718,78719],{"class":47,"line":1849},[45,78720,2550],{"emptyLinePlaceholder":207},[45,78722,78723,78726],{"class":47,"line":1878},[45,78724,78725],{"class":69},"    .item",[45,78727,15721],{"class":55},[45,78729,78730,78732,78734,78737,78739],{"class":47,"line":1883},[45,78731,54871],{"class":79},[45,78733,51537],{"class":55},[45,78735,78736],{"class":79},"240",[45,78738,51592],{"class":51},[45,78740,1442],{"class":55},[45,78742,78743,78745,78747,78749,78751],{"class":47,"line":1900},[45,78744,62100],{"class":79},[45,78746,51537],{"class":55},[45,78748,723],{"class":79},[45,78750,51592],{"class":51},[45,78752,1442],{"class":55},[45,78754,78755,78757,78759,78761,78763,78766,78768],{"class":47,"line":1905},[45,78756,54795],{"class":79},[45,78758,51537],{"class":55},[45,78760,977],{"class":79},[45,78762,51592],{"class":51},[45,78764,78765],{"class":79}," 30",[45,78767,51592],{"class":51},[45,78769,1442],{"class":55},[45,78771,78772,78774,78776,78778,78781,78784,78786],{"class":47,"line":1910},[45,78773,61960],{"class":79},[45,78775,51537],{"class":55},[45,78777,28221],{"class":79},[45,78779,78780],{"class":79}," ease",[45,78782,78783],{"class":79}," .5",[45,78785,972],{"class":51},[45,78787,1442],{"class":55},[45,78789,78790,78793,78795,78797,78799],{"class":47,"line":1915},[45,78791,78792],{"class":79},"      margin-bottom",[45,78794,51537],{"class":55},[45,78796,977],{"class":79},[45,78798,51592],{"class":51},[45,78800,1442],{"class":55},[45,78802,78803],{"class":47,"line":1929},[45,78804,2337],{"class":55},[45,78806,78807],{"class":47,"line":1934},[45,78808,2550],{"emptyLinePlaceholder":207},[45,78810,78811,78814,78816,78819],{"class":47,"line":2727},[45,78812,78813],{"class":69},"    .item:nth-child",[45,78815,282],{"class":55},[45,78817,78818],{"class":79},"4n",[45,78820,12591],{"class":55},[45,78822,78823,78825,78827,78829],{"class":47,"line":2741},[45,78824,62100],{"class":79},[45,78826,51537],{"class":55},[45,78828,469],{"class":79},[45,78830,1442],{"class":55},[45,78832,78833],{"class":47,"line":2749},[45,78834,2337],{"class":55},[45,78836,78837],{"class":47,"line":2754},[45,78838,2550],{"emptyLinePlaceholder":207},[45,78840,78841,78844],{"class":47,"line":2760},[45,78842,78843],{"class":69},"    .item:hover",[45,78845,15721],{"class":55},[45,78847,78848,78851,78853,78855,78857,78859,78861,78863,78865,78868,78870,78872,78874,78876,78878,78880,78882,78885],{"class":47,"line":2766},[45,78849,78850],{"class":79},"      box-shadow",[45,78852,51537],{"class":55},[45,78854,469],{"class":79},[45,78856,51592],{"class":51},[45,78858,4243],{"class":79},[45,78860,51592],{"class":51},[45,78862,2298],{"class":79},[45,78864,51592],{"class":51},[45,78866,78867],{"class":79}," rgba",[45,78869,282],{"class":55},[45,78871,469],{"class":79},[45,78873,12584],{"class":55},[45,78875,469],{"class":79},[45,78877,12584],{"class":55},[45,78879,469],{"class":79},[45,78881,12584],{"class":55},[45,78883,78884],{"class":79},".2",[45,78886,2869],{"class":55},[45,78888,78889,78892,78894,78897,78899,78901,78903,78906,78908,78910,78912],{"class":47,"line":2771},[45,78890,78891],{"class":79},"      transform",[45,78893,51537],{"class":55},[45,78895,78896],{"class":79},"translate3d",[45,78898,282],{"class":55},[45,78900,469],{"class":79},[45,78902,12584],{"class":55},[45,78904,78905],{"class":79},"-4",[45,78907,51592],{"class":51},[45,78909,12584],{"class":55},[45,78911,469],{"class":79},[45,78913,2869],{"class":55},[45,78915,78916,78918,78920,78922],{"class":47,"line":8098},[45,78917,62125],{"class":79},[45,78919,51537],{"class":55},[45,78921,62130],{"class":79},[45,78923,1442],{"class":55},[45,78925,78926],{"class":47,"line":8122},[45,78927,2337],{"class":55},[45,78929,78930],{"class":47,"line":8127},[45,78931,2550],{"emptyLinePlaceholder":207},[45,78933,78934,78936,78938],{"class":47,"line":8133},[45,78935,78725],{"class":69},[45,78937,55715],{"class":51400},[45,78939,15721],{"class":55},[45,78941,78942,78944,78946,78948,78950],{"class":47,"line":8160},[45,78943,54871],{"class":79},[45,78945,51537],{"class":55},[45,78947,588],{"class":79},[45,78949,605],{"class":51},[45,78951,1442],{"class":55},[45,78953,78954],{"class":47,"line":8165},[45,78955,2337],{"class":55},[45,78957,78958],{"class":47,"line":8171},[45,78959,2550],{"emptyLinePlaceholder":207},[45,78961,78962,78964,78966],{"class":47,"line":8183},[45,78963,78725],{"class":69},[45,78965,62404],{"class":69},[45,78967,15721],{"class":55},[45,78969,78970,78972,78974,78976,78978],{"class":47,"line":8195},[45,78971,55022],{"class":79},[45,78973,51537],{"class":55},[45,78975,927],{"class":79},[45,78977,51592],{"class":51},[45,78979,1442],{"class":55},[45,78981,78982,78984,78986,78988,78990],{"class":47,"line":8207},[45,78983,78792],{"class":79},[45,78985,51537],{"class":55},[45,78987,723],{"class":79},[45,78989,51592],{"class":51},[45,78991,1442],{"class":55},[45,78993,78994,78996,78998,79001],{"class":47,"line":9866},[45,78995,57516],{"class":79},[45,78997,51537],{"class":55},[45,78999,79000],{"class":79},"#666",[45,79002,1442],{"class":55},[45,79004,79005],{"class":47,"line":9890},[45,79006,2337],{"class":55},[45,79008,79009],{"class":47,"line":9913},[45,79010,2550],{"emptyLinePlaceholder":207},[45,79012,79013,79015,79018],{"class":47,"line":9937},[45,79014,78725],{"class":69},[45,79016,79017],{"class":69}," .price",[45,79019,15721],{"class":55},[45,79021,79022,79024,79026,79028,79030],{"class":47,"line":9942},[45,79023,55022],{"class":79},[45,79025,51537],{"class":55},[45,79027,1027],{"class":79},[45,79029,51592],{"class":51},[45,79031,1442],{"class":55},[45,79033,79034,79036,79038,79041],{"class":47,"line":9947},[45,79035,57516],{"class":79},[45,79037,51537],{"class":55},[45,79039,79040],{"class":79},"firebrick",[45,79042,1442],{"class":55},[45,79044,79045],{"class":47,"line":9952},[45,79046,2337],{"class":55},[45,79048,79049],{"class":47,"line":9961},[45,79050,2550],{"emptyLinePlaceholder":207},[45,79052,79053,79055,79058],{"class":47,"line":9966},[45,79054,78725],{"class":69},[45,79056,79057],{"class":69}," .price::before",[45,79059,15721],{"class":55},[45,79061,79062,79065,79067,79070],{"class":47,"line":9972},[45,79063,79064],{"class":79},"      content",[45,79066,51537],{"class":55},[45,79068,79069],{"class":62},"'￥'",[45,79071,1442],{"class":55},[45,79073,79074,79076,79078,79080,79082],{"class":47,"line":9993},[45,79075,55022],{"class":79},[45,79077,51537],{"class":55},[45,79079,826],{"class":79},[45,79081,51592],{"class":51},[45,79083,1442],{"class":55},[45,79085,79086],{"class":47,"line":9999},[45,79087,2337],{"class":55},[45,79089,79090],{"class":47,"line":10013},[45,79091,2550],{"emptyLinePlaceholder":207},[45,79093,79094,79097],{"class":47,"line":10019},[45,79095,79096],{"class":69},"    .filter",[45,79098,15721],{"class":55},[45,79100,79101,79103,79105,79107],{"class":47,"line":10046},[45,79102,55109],{"class":79},[45,79104,51537],{"class":55},[45,79106,51577],{"class":79},[45,79108,1442],{"class":55},[45,79110,79111,79113,79115,79117,79119],{"class":47,"line":10055},[45,79112,54871],{"class":79},[45,79114,51537],{"class":55},[45,79116,78674],{"class":79},[45,79118,51592],{"class":51},[45,79120,1442],{"class":55},[45,79122,79123,79125,79127,79129,79131],{"class":47,"line":10061},[45,79124,54806],{"class":79},[45,79126,51537],{"class":55},[45,79128,469],{"class":79},[45,79130,51656],{"class":79},[45,79132,1442],{"class":55},[45,79134,79135,79137,79139,79141,79143,79145],{"class":47,"line":10069},[45,79136,54795],{"class":79},[45,79138,51537],{"class":55},[45,79140,933],{"class":79},[45,79142,51592],{"class":51},[45,79144,78765],{"class":79},[45,79146,79147],{"class":51},"px\n",[45,79149,79150],{"class":47,"line":10074},[45,79151,2337],{"class":55},[45,79153,79154],{"class":47,"line":16753},[45,79155,2550],{"emptyLinePlaceholder":207},[45,79157,79158,79160,79162],{"class":47,"line":16759},[45,79159,79096],{"class":69},[45,79161,1550],{"class":51400},[45,79163,15721],{"class":55},[45,79165,79166,79168,79170,79172,79174,79176,79178],{"class":47,"line":16782},[45,79167,54795],{"class":79},[45,79169,51537],{"class":55},[45,79171,723],{"class":79},[45,79173,51592],{"class":51},[45,79175,9100],{"class":79},[45,79177,51592],{"class":51},[45,79179,1442],{"class":55},[45,79181,79182,79184,79186,79188],{"class":47,"line":16788},[45,79183,61821],{"class":79},[45,79185,51537],{"class":55},[45,79187,61918],{"class":79},[45,79189,1442],{"class":55},[45,79191,79192,79194,79196,79198],{"class":47,"line":16811},[45,79193,57516],{"class":79},[45,79195,51537],{"class":55},[45,79197,79000],{"class":79},[45,79199,1442],{"class":55},[45,79201,79202,79204,79206,79208],{"class":47,"line":16825},[45,79203,64070],{"class":79},[45,79205,51537],{"class":55},[45,79207,54837],{"class":79},[45,79209,1442],{"class":55},[45,79211,79212,79214,79216,79218,79220],{"class":47,"line":16845},[45,79213,61850],{"class":79},[45,79215,51537],{"class":55},[45,79217,977],{"class":79},[45,79219,51592],{"class":51},[45,79221,1442],{"class":55},[45,79223,79224],{"class":47,"line":16851},[45,79225,2337],{"class":55},[45,79227,79228],{"class":47,"line":16862},[45,79229,2550],{"emptyLinePlaceholder":207},[45,79231,79232,79234,79236,79238],{"class":47,"line":16885},[45,79233,79096],{"class":69},[45,79235,1550],{"class":51400},[45,79237,62000],{"class":69},[45,79239,15721],{"class":55},[45,79241,79242,79244,79246,79249],{"class":47,"line":16907},[45,79243,54984],{"class":79},[45,79245,51537],{"class":55},[45,79247,79248],{"class":79},"#05943c",[45,79250,1442],{"class":55},[45,79252,79253,79255,79257,79259],{"class":47,"line":16912},[45,79254,57516],{"class":79},[45,79256,51537],{"class":55},[45,79258,60942],{"class":79},[45,79260,1442],{"class":55},[45,79262,79263],{"class":47,"line":16918},[45,79264,2337],{"class":55},[45,79266,79267,79269,79271],{"class":47,"line":16932},[45,79268,52517],{"class":55},[45,79270,196],{"class":51400},[45,79272,51407],{"class":55},[45,79274,79275,79277,79279],{"class":47,"line":16945},[45,79276,51885],{"class":55},[45,79278,51434],{"class":51400},[45,79280,51407],{"class":55},[45,79282,79283],{"class":47,"line":16950},[45,79284,2550],{"emptyLinePlaceholder":207},[45,79286,79287,79289,79291],{"class":47,"line":16964},[45,79288,1187],{"class":55},[45,79290,51900],{"class":51400},[45,79292,51407],{"class":55},[45,79294,79295,79297,79299,79301,79303,79306],{"class":47,"line":16969},[45,79296,52244],{"class":55},[45,79298,51711],{"class":51400},[45,79300,53586],{"class":69},[45,79302,59],{"class":55},[45,79304,79305],{"class":62},"\"filter\"",[45,79307,51407],{"class":55},[45,79309,79310,79312,79314,79316,79318,79320,79323,79325,79327,79330,79332],{"class":47,"line":16975},[45,79311,51441],{"class":55},[45,79313,516],{"class":51400},[45,79315,61157],{"class":69},[45,79317,59],{"class":55},[45,79319,61162],{"class":62},[45,79321,79322],{"class":69}," data-index",[45,79324,59],{"class":55},[45,79326,3828],{"class":62},[45,79328,79329],{"class":55},">0-100元\u003C\u002F",[45,79331,516],{"class":51400},[45,79333,51407],{"class":55},[45,79335,79336,79338,79340,79342,79344,79346,79348,79350,79352,79355,79357],{"class":47,"line":16980},[45,79337,51441],{"class":55},[45,79339,516],{"class":51400},[45,79341,61157],{"class":69},[45,79343,59],{"class":55},[45,79345,61162],{"class":62},[45,79347,79322],{"class":69},[45,79349,59],{"class":55},[45,79351,3851],{"class":62},[45,79353,79354],{"class":55},">100-300元\u003C\u002F",[45,79356,516],{"class":51400},[45,79358,51407],{"class":55},[45,79360,79361,79363,79365,79367,79369,79371,79373,79375,79377,79380,79382],{"class":47,"line":16994},[45,79362,51441],{"class":55},[45,79364,516],{"class":51400},[45,79366,61157],{"class":69},[45,79368,59],{"class":55},[45,79370,61162],{"class":62},[45,79372,79322],{"class":69},[45,79374,59],{"class":55},[45,79376,3864],{"class":62},[45,79378,79379],{"class":55},">300元以上\u003C\u002F",[45,79381,516],{"class":51400},[45,79383,51407],{"class":55},[45,79385,79386,79388,79390,79392,79394,79396,79399,79401],{"class":47,"line":16999},[45,79387,51441],{"class":55},[45,79389,516],{"class":51400},[45,79391,61157],{"class":69},[45,79393,59],{"class":55},[45,79395,61162],{"class":62},[45,79397,79398],{"class":55},">全部区间\u003C\u002F",[45,79400,516],{"class":51400},[45,79402,51407],{"class":55},[45,79404,79405,79407,79409],{"class":47,"line":17004},[45,79406,52517],{"class":55},[45,79408,51711],{"class":51400},[45,79410,51407],{"class":55},[45,79412,79413,79415,79417,79419,79421,79423],{"class":47,"line":17018},[45,79414,52244],{"class":55},[45,79416,51711],{"class":51400},[45,79418,53586],{"class":69},[45,79420,59],{"class":55},[45,79422,62708],{"class":62},[45,79424,51407],{"class":55},[45,79426,79427],{"class":47,"line":17030},[45,79428,79429],{"class":337},"    \u003C!-- \u003Cdiv class=\"item\">\n",[45,79431,79432],{"class":47,"line":17035},[45,79433,79434],{"class":337},"      \u003Cimg src=\"\" alt=\"\">\n",[45,79436,79437],{"class":47,"line":17048},[45,79438,79439],{"class":337},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[45,79441,79442],{"class":47,"line":17053},[45,79443,79444],{"class":337},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[45,79446,79447],{"class":47,"line":17058},[45,79448,79449],{"class":337},"    \u003C\u002Fdiv> -->\n",[45,79451,79452,79454,79456],{"class":47,"line":17063},[45,79453,52517],{"class":55},[45,79455,51711],{"class":51400},[45,79457,51407],{"class":55},[45,79459,79460,79462,79464],{"class":47,"line":17076},[45,79461,52244],{"class":55},[45,79463,51913],{"class":51400},[45,79465,51407],{"class":55},[45,79467,79468],{"class":47,"line":17081},[45,79469,79470],{"class":337},"    \u002F\u002F 2. 初始化数据\n",[45,79472,79473,79475,79478,79480],{"class":47,"line":32733},[45,79474,11370],{"class":51},[45,79476,79477],{"class":79}," goodsList",[45,79479,13713],{"class":51},[45,79481,55547],{"class":55},[45,79483,79484],{"class":47,"line":32739},[45,79485,79486],{"class":55},"      {\n",[45,79488,79489,79492,79495],{"class":47,"line":32745},[45,79490,79491],{"class":55},"        id: ",[45,79493,79494],{"class":62},"'4001172'",[45,79496,31566],{"class":55},[45,79498,79499,79502,79505],{"class":47,"line":32751},[45,79500,79501],{"class":55},"        name: ",[45,79503,79504],{"class":62},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[45,79506,31566],{"class":55},[45,79508,79509,79512,79515],{"class":47,"line":32757},[45,79510,79511],{"class":55},"        price: ",[45,79513,79514],{"class":62},"'289.00'",[45,79516,31566],{"class":55},[45,79518,79519,79522,79525],{"class":47,"line":32768},[45,79520,79521],{"class":55},"        picture: ",[45,79523,79524],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[45,79526,31566],{"class":55},[45,79528,79529],{"class":47,"line":32774},[45,79530,77992],{"class":55},[45,79532,79533],{"class":47,"line":32794},[45,79534,79486],{"class":55},[45,79536,79537,79539,79542],{"class":47,"line":32800},[45,79538,79491],{"class":55},[45,79540,79541],{"class":62},"'4001594'",[45,79543,31566],{"class":55},[45,79545,79546,79548,79551],{"class":47,"line":32811},[45,79547,79501],{"class":55},[45,79549,79550],{"class":62},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[45,79552,31566],{"class":55},[45,79554,79555,79557,79560],{"class":47,"line":32817},[45,79556,79511],{"class":55},[45,79558,79559],{"class":62},"'288.00'",[45,79561,31566],{"class":55},[45,79563,79564,79566,79569],{"class":47,"line":32823},[45,79565,79521],{"class":55},[45,79567,79568],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[45,79570,31566],{"class":55},[45,79572,79573],{"class":47,"line":32829},[45,79574,77992],{"class":55},[45,79576,79577],{"class":47,"line":32835},[45,79578,79486],{"class":55},[45,79580,79581,79583,79586],{"class":47,"line":32841},[45,79582,79491],{"class":55},[45,79584,79585],{"class":62},"'4001009'",[45,79587,31566],{"class":55},[45,79589,79590,79592,79595],{"class":47,"line":32847},[45,79591,79501],{"class":55},[45,79593,79594],{"class":62},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[45,79596,31566],{"class":55},[45,79598,79599,79601,79604],{"class":47,"line":32853},[45,79600,79511],{"class":55},[45,79602,79603],{"class":62},"'109.00'",[45,79605,31566],{"class":55},[45,79607,79608,79610,79613],{"class":47,"line":32873},[45,79609,79521],{"class":55},[45,79611,79612],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[45,79614,31566],{"class":55},[45,79616,79617],{"class":47,"line":32879},[45,79618,77992],{"class":55},[45,79620,79621],{"class":47,"line":32895},[45,79622,79486],{"class":55},[45,79624,79625,79627,79630],{"class":47,"line":32901},[45,79626,79491],{"class":55},[45,79628,79629],{"class":62},"'4001874'",[45,79631,31566],{"class":55},[45,79633,79634,79636,79639],{"class":47,"line":32915},[45,79635,79501],{"class":55},[45,79637,79638],{"class":62},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[45,79640,31566],{"class":55},[45,79642,79643,79645,79648],{"class":47,"line":32921},[45,79644,79511],{"class":55},[45,79646,79647],{"class":62},"'488.00'",[45,79649,31566],{"class":55},[45,79651,79652,79654,79657],{"class":47,"line":32936},[45,79653,79521],{"class":55},[45,79655,79656],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[45,79658,31566],{"class":55},[45,79660,79661],{"class":47,"line":32942},[45,79662,77992],{"class":55},[45,79664,79665],{"class":47,"line":32951},[45,79666,79486],{"class":55},[45,79668,79669,79671,79674],{"class":47,"line":32957},[45,79670,79491],{"class":55},[45,79672,79673],{"class":62},"'4001649'",[45,79675,31566],{"class":55},[45,79677,79678,79680,79683],{"class":47,"line":32966},[45,79679,79501],{"class":55},[45,79681,79682],{"class":62},"'大师监制龙泉青瓷茶叶罐'",[45,79684,31566],{"class":55},[45,79686,79687,79689,79692],{"class":47,"line":32972},[45,79688,79511],{"class":55},[45,79690,79691],{"class":62},"'139.00'",[45,79693,31566],{"class":55},[45,79695,79696,79698,79701],{"class":47,"line":32978},[45,79697,79521],{"class":55},[45,79699,79700],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[45,79702,31566],{"class":55},[45,79704,79705],{"class":47,"line":32987},[45,79706,77992],{"class":55},[45,79708,79709],{"class":47,"line":32993},[45,79710,79486],{"class":55},[45,79712,79713,79715,79718],{"class":47,"line":33004},[45,79714,79491],{"class":55},[45,79716,79717],{"class":62},"'3997185'",[45,79719,31566],{"class":55},[45,79721,79722,79724,79727],{"class":47,"line":33010},[45,79723,79501],{"class":55},[45,79725,79726],{"class":62},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[45,79728,31566],{"class":55},[45,79730,79731,79733,79736],{"class":47,"line":33029},[45,79732,79511],{"class":55},[45,79734,79735],{"class":62},"'108.00'",[45,79737,31566],{"class":55},[45,79739,79740,79742,79745],{"class":47,"line":33035},[45,79741,79521],{"class":55},[45,79743,79744],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[45,79746,31566],{"class":55},[45,79748,79749],{"class":47,"line":33046},[45,79750,77992],{"class":55},[45,79752,79753],{"class":47,"line":33052},[45,79754,79486],{"class":55},[45,79756,79757,79759,79762],{"class":47,"line":33072},[45,79758,79491],{"class":55},[45,79760,79761],{"class":62},"'3997403'",[45,79763,31566],{"class":55},[45,79765,79766,79768,79771],{"class":47,"line":33088},[45,79767,79501],{"class":55},[45,79769,79770],{"class":62},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[45,79772,31566],{"class":55},[45,79774,79775,79777,79780],{"class":47,"line":33094},[45,79776,79511],{"class":55},[45,79778,79779],{"class":62},"'100.00'",[45,79781,31566],{"class":55},[45,79783,79784,79786,79789],{"class":47,"line":33108},[45,79785,79521],{"class":55},[45,79787,79788],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[45,79790,31566],{"class":55},[45,79792,79793],{"class":47,"line":33114},[45,79794,77992],{"class":55},[45,79796,79797],{"class":47,"line":33120},[45,79798,79486],{"class":55},[45,79800,79801,79803,79806],{"class":47,"line":33131},[45,79802,79491],{"class":55},[45,79804,79805],{"class":62},"'3998274'",[45,79807,31566],{"class":55},[45,79809,79810,79812,79815],{"class":47,"line":33137},[45,79811,79501],{"class":55},[45,79813,79814],{"class":62},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[45,79816,31566],{"class":55},[45,79818,79819,79821,79823],{"class":47,"line":33143},[45,79820,79511],{"class":55},[45,79822,79691],{"class":62},[45,79824,31566],{"class":55},[45,79826,79827,79829,79832],{"class":47,"line":33153},[45,79828,79521],{"class":55},[45,79830,79831],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[45,79833,31566],{"class":55},[45,79835,79836],{"class":47,"line":33159},[45,79837,77992],{"class":55},[45,79839,79840],{"class":47,"line":33170},[45,79841,53209],{"class":55},[45,79843,79844],{"class":47,"line":33176},[45,79845,2550],{"emptyLinePlaceholder":207},[45,79847,79848],{"class":47,"line":33186},[45,79849,79850],{"class":337},"    \u002F\u002F 1.渲染函数\n",[45,79852,79853,79855,79857,79859,79861],{"class":47,"line":33191},[45,79854,70184],{"class":51},[45,79856,70187],{"class":69},[45,79858,282],{"class":55},[45,79860,4030],{"class":5366},[45,79862,12591],{"class":55},[45,79864,79865],{"class":47,"line":33197},[45,79866,79867],{"class":337},"      \u002F\u002F 声明空字符串\n",[45,79869,79870,79873,79876,79878],{"class":47,"line":33246},[45,79871,79872],{"class":51},"      let",[45,79874,79875],{"class":55}," str ",[45,79877,59],{"class":51},[45,79879,70204],{"class":62},[45,79881,79882],{"class":47,"line":33293},[45,79883,70209],{"class":337},[45,79885,79886,79888,79891,79893,79896,79899],{"class":47,"line":33298},[45,79887,58107],{"class":55},[45,79889,79890],{"class":69},"forEach",[45,79892,282],{"class":55},[45,79894,79895],{"class":5366},"item",[45,79897,79898],{"class":51}," =>",[45,79900,15721],{"class":55},[45,79902,79903,79905,79908,79911,79913,79916,79918,79921,79924,79926],{"class":47,"line":33304},[45,79904,61370],{"class":51},[45,79906,79907],{"class":55}," { ",[45,79909,79910],{"class":79},"name",[45,79912,12584],{"class":55},[45,79914,79915],{"class":79},"price",[45,79917,12584],{"class":55},[45,79919,79920],{"class":79},"picture",[45,79922,79923],{"class":55}," } ",[45,79925,59],{"class":51},[45,79927,79928],{"class":55}," item\n",[45,79930,79931,79934,79936],{"class":47,"line":33323},[45,79932,79933],{"class":55},"        str ",[45,79935,9627],{"class":51},[45,79937,70268],{"class":62},[45,79939,79940],{"class":47,"line":33329},[45,79941,79942],{"class":62},"          \u003Cdiv class=\"item\">\n",[45,79944,79945,79948,79950],{"class":47,"line":33349},[45,79946,79947],{"class":62},"            \u003Cimg src=\"${",[45,79949,79920],{"class":55},[45,79951,79952],{"class":62},"}\" alt=\"\">\n",[45,79954,79955,79958,79960],{"class":47,"line":33355},[45,79956,79957],{"class":62},"            \u003Cp class=\"name\">${",[45,79959,79910],{"class":55},[45,79961,79962],{"class":62},"}\u003C\u002Fp>\n",[45,79964,79965,79968,79970],{"class":47,"line":33361},[45,79966,79967],{"class":62},"            \u003Cp class=\"price\">${",[45,79969,79915],{"class":55},[45,79971,79962],{"class":62},[45,79973,79974],{"class":47,"line":33371},[45,79975,79976],{"class":62},"          \u003C\u002Fdiv>\n",[45,79978,79979],{"class":47,"line":33376},[45,79980,79981],{"class":62},"        `\n",[45,79983,79984],{"class":47,"line":33382},[45,79985,64915],{"class":55},[45,79987,79988],{"class":47,"line":33398},[45,79989,79990],{"class":337},"      \u002F\u002F 追加给List\n",[45,79992,79993,79995,79997,79999,80002,80004,80006],{"class":47,"line":33443},[45,79994,55871],{"class":55},[45,79996,54499],{"class":69},[45,79998,282],{"class":55},[45,80000,80001],{"class":62},"'.list'",[45,80003,74349],{"class":55},[45,80005,59],{"class":51},[45,80007,74085],{"class":55},[45,80009,80010],{"class":47,"line":33449},[45,80011,2337],{"class":55},[45,80013,80014],{"class":47,"line":33455},[45,80015,80016],{"class":337},"    \u002F\u002F 页面一打开就需要渲染\n",[45,80018,80019,80022],{"class":47,"line":33461},[45,80020,80021],{"class":69},"    render",[45,80023,80024],{"class":55},"(goodsList)\n",[45,80026,80027],{"class":47,"line":33472},[45,80028,80029],{"class":337},"    \u002F\u002F 2.过滤筛选\n",[45,80031,80032,80034,80036,80038,80041,80043,80045,80047,80049,80051,80053,80055],{"class":47,"line":33478},[45,80033,52507],{"class":55},[45,80035,54499],{"class":69},[45,80037,282],{"class":55},[45,80039,80040],{"class":62},"'.filter'",[45,80042,30926],{"class":55},[45,80044,57913],{"class":69},[45,80046,282],{"class":55},[45,80048,57918],{"class":62},[45,80050,12584],{"class":55},[45,80052,353],{"class":5366},[45,80054,79898],{"class":51},[45,80056,15721],{"class":55},[45,80058,80059],{"class":47,"line":33484},[45,80060,80061],{"class":337},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[45,80063,80064,80066,80068,80071,80073,80075,80077,80079],{"class":47,"line":33490},[45,80065,58328],{"class":51},[45,80067,79907],{"class":55},[45,80069,80070],{"class":79},"tagName",[45,80072,12584],{"class":55},[45,80074,31637],{"class":79},[45,80076,79923],{"class":55},[45,80078,59],{"class":51},[45,80080,80081],{"class":55}," e.target\n",[45,80083,80084],{"class":47,"line":33508},[45,80085,80086],{"class":337},"      \u002F\u002F 判断\n",[45,80088,80089,80091,80093,80095,80097],{"class":47,"line":33522},[45,80090,54580],{"class":51},[45,80092,67134],{"class":55},[45,80094,54586],{"class":51},[45,80096,68356],{"class":62},[45,80098,12591],{"class":55},[45,80100,80101],{"class":47,"line":33531},[45,80102,80103],{"class":337},"        \u002F\u002F console.log(11)\n",[45,80105,80106],{"class":47,"line":33540},[45,80107,80108],{"class":337},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[45,80110,80111],{"class":47,"line":33549},[45,80112,80113],{"class":337},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[45,80115,80116,80118,80120,80122],{"class":47,"line":33558},[45,80117,51930],{"class":51},[45,80119,51933],{"class":55},[45,80121,59],{"class":51},[45,80123,80124],{"class":55}," goodsList\n",[45,80126,80127,80129,80132,80134,80137],{"class":47,"line":33564},[45,80128,2647],{"class":51},[45,80130,80131],{"class":55}," (dataset.index ",[45,80133,54586],{"class":51},[45,80135,80136],{"class":62}," '1'",[45,80138,12591],{"class":55},[45,80140,80141,80144,80146,80149,80152,80154,80156,80158,80161,80163,80165,80168,80170,80172,80174],{"class":47,"line":33570},[45,80142,80143],{"class":55},"          arr ",[45,80145,59],{"class":51},[45,80147,80148],{"class":55}," goodsList.",[45,80150,80151],{"class":69},"filter",[45,80153,282],{"class":55},[45,80155,79895],{"class":5366},[45,80157,79898],{"class":51},[45,80159,80160],{"class":55}," item.price ",[45,80162,1861],{"class":51},[45,80164,4243],{"class":79},[45,80166,80167],{"class":51}," &&",[45,80169,80160],{"class":55},[45,80171,1739],{"class":51},[45,80173,5904],{"class":79},[45,80175,139],{"class":55},[45,80177,80178,80181,80183,80185,80187,80189,80192],{"class":47,"line":33578},[45,80179,80180],{"class":55},"        } ",[45,80182,1852],{"class":51},[45,80184,1855],{"class":51},[45,80186,80131],{"class":55},[45,80188,54586],{"class":51},[45,80190,80191],{"class":62}," '2'",[45,80193,12591],{"class":55},[45,80195,80196,80198,80200,80202,80204,80206,80208,80210,80212,80214,80216,80218,80220,80222,80225],{"class":47,"line":33583},[45,80197,80143],{"class":55},[45,80199,59],{"class":51},[45,80201,80148],{"class":55},[45,80203,80151],{"class":69},[45,80205,282],{"class":55},[45,80207,79895],{"class":5366},[45,80209,79898],{"class":51},[45,80211,80160],{"class":55},[45,80213,1861],{"class":51},[45,80215,5904],{"class":79},[45,80217,80167],{"class":51},[45,80219,80160],{"class":55},[45,80221,1739],{"class":51},[45,80223,80224],{"class":79}," 300",[45,80226,139],{"class":55},[45,80228,80229,80231,80233,80235,80237,80239,80242],{"class":47,"line":33589},[45,80230,80180],{"class":55},[45,80232,1852],{"class":51},[45,80234,1855],{"class":51},[45,80236,80131],{"class":55},[45,80238,54586],{"class":51},[45,80240,80241],{"class":62}," '3'",[45,80243,12591],{"class":55},[45,80245,80246,80248,80250,80252,80254,80256,80258,80260,80262,80264,80266],{"class":47,"line":33600},[45,80247,80143],{"class":55},[45,80249,59],{"class":51},[45,80251,80148],{"class":55},[45,80253,80151],{"class":69},[45,80255,282],{"class":55},[45,80257,79895],{"class":5366},[45,80259,79898],{"class":51},[45,80261,80160],{"class":55},[45,80263,1861],{"class":51},[45,80265,80224],{"class":79},[45,80267,139],{"class":55},[45,80269,80270],{"class":47,"line":33606},[45,80271,2679],{"class":55},[45,80273,80274],{"class":47,"line":33626},[45,80275,80276],{"class":337},"        \u002F\u002F 渲染函数\n",[45,80278,80279,80281],{"class":47,"line":33632},[45,80280,70508],{"class":69},[45,80282,52512],{"class":55},[45,80284,80285],{"class":47,"line":33638},[45,80286,52498],{"class":55},[45,80288,80289],{"class":47,"line":33644},[45,80290,2550],{"emptyLinePlaceholder":207},[45,80292,80293],{"class":47,"line":33661},[45,80294,33561],{"class":55},[45,80296,80297,80299,80301],{"class":47,"line":33667},[45,80298,52517],{"class":55},[45,80300,51913],{"class":51400},[45,80302,51407],{"class":55},[45,80304,80305,80307,80309],{"class":47,"line":33673},[45,80306,51885],{"class":55},[45,80308,51900],{"class":51400},[45,80310,51407],{"class":55},[45,80312,80313],{"class":47,"line":33679},[45,80314,2550],{"emptyLinePlaceholder":207},[45,80316,80317,80319,80321],{"class":47,"line":33685},[45,80318,51885],{"class":55},[45,80320,50735],{"class":51400},[45,80322,51407],{"class":55},[15,80324,80326],{"id":80325},"_410-深入了解对象","4.10 深入了解对象",[249,80328,80330],{"id":80329},"_4101-创建对象","4.10.1 创建对象",[20,80332,80333],{},[23,80334],{"alt":25,"src":80335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[20,80337,80338],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[249,80340,80342],{"id":80341},"_4102-构造函数","4.10.2 构造函数",[20,80344,80345,80348],{},[427,80346,80347],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[20,80350,80351,80354],{},[427,80352,80353],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[36,80356,80358],{"className":50733,"code":80357,"language":50735,"meta":25,"style":25},"\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",[42,80359,80360,80368,80373,80394,80407,80419,80431,80435,80440,80467,80472,80499],{"__ignoreMap":25},[45,80361,80362,80364,80366],{"class":47,"line":48},[45,80363,1187],{"class":55},[45,80365,51913],{"class":51400},[45,80367,51407],{"class":55},[45,80369,80370],{"class":47,"line":66},[45,80371,80372],{"class":337},"\u002F\u002F例：\n",[45,80374,80375,80377,80380,80382,80384,80386,80388,80390,80392],{"class":47,"line":1331},[45,80376,54549],{"class":51},[45,80378,80379],{"class":69}," Pig",[45,80381,282],{"class":55},[45,80383,79910],{"class":5366},[45,80385,655],{"class":55},[45,80387,70321],{"class":5366},[45,80389,655],{"class":55},[45,80391,70338],{"class":5366},[45,80393,12591],{"class":55},[45,80395,80396,80399,80402,80404],{"class":47,"line":1346},[45,80397,80398],{"class":79},"    this",[45,80400,80401],{"class":55},".name",[45,80403,59],{"class":51},[45,80405,80406],{"class":55},"name\n",[45,80408,80409,80411,80414,80416],{"class":47,"line":1352},[45,80410,80398],{"class":79},[45,80412,80413],{"class":55},".age",[45,80415,59],{"class":51},[45,80417,80418],{"class":55},"age\n",[45,80420,80421,80423,80426,80428],{"class":47,"line":1366},[45,80422,80398],{"class":79},[45,80424,80425],{"class":55},".gender",[45,80427,59],{"class":51},[45,80429,80430],{"class":55},"gender    \n",[45,80432,80433],{"class":47,"line":1372},[45,80434,1716],{"class":55},[45,80436,80437],{"class":47,"line":1463},[45,80438,80439],{"class":337},"\u002F\u002F创建佩奇对象\n",[45,80441,80442,80444,80447,80449,80451,80453,80456,80458,80460,80462,80465],{"class":47,"line":1469},[45,80443,6942],{"class":51},[45,80445,80446],{"class":79}," Peppa",[45,80448,11866],{"class":51},[45,80450,80379],{"class":69},[45,80452,282],{"class":55},[45,80454,80455],{"class":62},"'佩奇'",[45,80457,655],{"class":55},[45,80459,621],{"class":79},[45,80461,655],{"class":55},[45,80463,80464],{"class":62},"'女'",[45,80466,139],{"class":55},[45,80468,80469],{"class":47,"line":1481},[45,80470,80471],{"class":337},"\u002F\u002F创建乔治对象\n",[45,80473,80474,80476,80479,80481,80483,80485,80488,80490,80492,80494,80497],{"class":47,"line":1763},[45,80475,6942],{"class":51},[45,80477,80478],{"class":79}," George",[45,80480,11866],{"class":51},[45,80482,80379],{"class":69},[45,80484,282],{"class":55},[45,80486,80487],{"class":62},"'乔治'",[45,80489,655],{"class":55},[45,80491,350],{"class":79},[45,80493,655],{"class":55},[45,80495,80496],{"class":62},"'男'",[45,80498,139],{"class":55},[45,80500,80501,80503,80505],{"class":47,"line":1768},[45,80502,51885],{"class":55},[45,80504,51913],{"class":51400},[45,80506,51407],{"class":55},[20,80508,80509],{},[23,80510],{"alt":25,"src":80511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[20,80513,80514],{},[23,80515],{"alt":25,"src":80516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[20,80518,80519],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[20,80521,80522],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[20,80524,80525],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[20,80527,80528],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[20,80530,80531],{},"这里用等号是因为：对象.属性=值",[20,80533,80534],{},"①利用对象字面量创建对象",[20,80536,80537],{},"const o={",[20,80539,80540],{},"name:'pink'",[20,80542,80543],{},"} ②利用new Object创建对象",[20,80545,80546],{},"const o=new Object({name:'pink'})",[20,80548,80549],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[20,80551,80552],{},"构造函数创建对象的执行过程：",[20,80554,80555],{},[23,80556],{"alt":25,"src":80557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[249,80559,80561],{"id":80560},"_4103-实例成员","4.10.3 实例成员",[20,80563,80564],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[233,80566,80567,80570,80573],{},[169,80568,80569],{},"实例对象的属性和方法即为实例成员",[169,80571,80572],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[169,80574,80575],{},"构造函数创建的实例对象彼此独立互不影响",[249,80577,80579],{"id":80578},"_4104-静态成员","4.10.4 静态成员",[20,80581,80582],{},[23,80583],{"alt":25,"src":80584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[20,80586,80587],{},"静态成员有Date.now() Math.PI Math.random()",[20,80589,80590],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[20,80592,80593],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[20,80595,80596],{},"function Pig(name) n {",[20,80598,80599],{},"this.name=name",[20,80601,1223],{},[20,80603,80604],{},"Pig.eyes=2",[20,80606,80607],{},"Pig.sayHai=function () { console.log(this) }",[20,80609,80610],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[20,80612,80613],{},"console.log(Pig.eyes) \u002F\u002F2",[20,80615,11481],{},[233,80617,80618,80621,80624,80627,80630],{},[169,80619,80620],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[169,80622,80623],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[169,80625,80626],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[169,80628,80629],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[169,80631,80632],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[20,80634,80635],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[249,80637,80639],{"id":80638},"_4105-内置构造函数","4.10.5 内置构造函数",[20,80641,80642],{},"内置构造函数包含：",[20,80644,80645],{},[23,80646],{"alt":25,"src":80647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[20,80649,80650],{},[23,80651],{"alt":25,"src":80652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[20,80654,80655],{},"这些基本数据类型，js对他们进行了包装",[51913,80657,80658],{},"\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",[22147,80660,80662],{"id":80661},"_41051-object","4.10.5.1 Object",[20,80664,80665],{},"Object 是内置的构造函数，用于创建普通对象",[20,80667,80668],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[36,80670,80672],{"className":50733,"code":80671,"language":50735,"meta":25,"style":25},"const user=new Object({name:'小明',age:15})\n",[42,80673,80674],{"__ignoreMap":25},[45,80675,80676],{"class":47,"line":48},[45,80677,80671],{"class":55},[20,80679,80680],{},"三个常用的静态方法：",[23059,80682,80684],{"id":80683},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[20,80686,80687],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[20,80689,80690],{},[23,80691],{"alt":25,"src":80692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[20,80694,80695],{},[23,80696],{"alt":25,"src":80697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[36,80699,80701],{"className":53167,"code":80700,"language":53169,"meta":25,"style":25},"\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",[42,80702,80703,80711,80719,80724,80729,80734,80739,80744,80749,80757],{"__ignoreMap":25},[45,80704,80705,80707,80709],{"class":47,"line":48},[45,80706,1187],{"class":55},[45,80708,51900],{"class":51400},[45,80710,51407],{"class":55},[45,80712,80713,80715,80717],{"class":47,"line":66},[45,80714,52244],{"class":55},[45,80716,51913],{"class":51400},[45,80718,51407],{"class":55},[45,80720,80721],{"class":47,"line":1331},[45,80722,80723],{"class":55},"    const o = { name: 'pink', age: 6 }\n",[45,80725,80726],{"class":47,"line":1346},[45,80727,80728],{"class":55},"    \u002F\u002F 获得所有属性名\n",[45,80730,80731],{"class":47,"line":1352},[45,80732,80733],{"class":55},"    const arr = Object.keys(o)\n",[45,80735,80736],{"class":47,"line":1366},[45,80737,80738],{"class":55},"    console.log(arr)\n",[45,80740,80741],{"class":47,"line":1372},[45,80742,80743],{"class":55},"    \u002F\u002F 获得所有属性值\n",[45,80745,80746],{"class":47,"line":1463},[45,80747,80748],{"class":55},"    console.log(Object.values(o))\n",[45,80750,80751,80753,80755],{"class":47,"line":1469},[45,80752,52517],{"class":55},[45,80754,51913],{"class":51400},[45,80756,51407],{"class":55},[45,80758,80759,80761,80763],{"class":47,"line":1481},[45,80760,51885],{"class":55},[45,80762,51900],{"class":51400},[45,80764,51407],{"class":55},[23059,80766,80768],{"id":80767},"_410512-object-assign","4.10.5.1.2 Object. assign",[20,80770,80771],{},"Object.assign(oo,o)",[20,80773,80774],{},"后的东西添加给前 是追加",[20,80776,80777],{},[23,80778],{"alt":25,"src":80779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[20,80781,80782],{},[23,80783],{"alt":25,"src":80784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[36,80786,80788],{"className":53167,"code":80787,"language":53169,"meta":25,"style":25},"\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",[42,80789,80790,80798,80806,80810,80814,80818,80822,80826,80830,80835,80840,80845,80850,80855,80863],{"__ignoreMap":25},[45,80791,80792,80794,80796],{"class":47,"line":48},[45,80793,1187],{"class":55},[45,80795,51900],{"class":51400},[45,80797,51407],{"class":55},[45,80799,80800,80802,80804],{"class":47,"line":66},[45,80801,52244],{"class":55},[45,80803,51913],{"class":51400},[45,80805,51407],{"class":55},[45,80807,80808],{"class":47,"line":1331},[45,80809,80723],{"class":55},[45,80811,80812],{"class":47,"line":1346},[45,80813,80728],{"class":55},[45,80815,80816],{"class":47,"line":1352},[45,80817,80733],{"class":55},[45,80819,80820],{"class":47,"line":1366},[45,80821,80738],{"class":55},[45,80823,80824],{"class":47,"line":1372},[45,80825,80743],{"class":55},[45,80827,80828],{"class":47,"line":1463},[45,80829,80748],{"class":55},[45,80831,80832],{"class":47,"line":1469},[45,80833,80834],{"class":55},"    const oo = {}\n",[45,80836,80837],{"class":47,"line":1481},[45,80838,80839],{"class":55},"    Object.assign(oo, o)\n",[45,80841,80842],{"class":47,"line":1763},[45,80843,80844],{"class":55},"    console.log(oo)\n",[45,80846,80847],{"class":47,"line":1768},[45,80848,80849],{"class":55},"    Object.assign(o, { gender: '女' })\n",[45,80851,80852],{"class":47,"line":1774},[45,80853,80854],{"class":55},"    console.log(o)\n",[45,80856,80857,80859,80861],{"class":47,"line":1779},[45,80858,52517],{"class":55},[45,80860,51913],{"class":51400},[45,80862,51407],{"class":55},[45,80864,80865,80867,80869],{"class":47,"line":1793},[45,80866,51885],{"class":55},[45,80868,51900],{"class":51400},[45,80870,51407],{"class":55},[20,80872,80873],{},[23,80874],{"alt":25,"src":80875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22147,80877,80879],{"id":80878},"_41052-array","4.10.5.2 Array",[20,80881,80882],{},"Array 是内置的构造函数，用于创建数组",[20,80884,80885],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[36,80887,80889],{"className":50733,"code":80888,"language":50735,"meta":25,"style":25},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[42,80890,80891,80896],{"__ignoreMap":25},[45,80892,80893],{"class":47,"line":48},[45,80894,80895],{"class":55},"const arr=new Array(3,5)\n",[45,80897,80898],{"class":47,"line":66},[45,80899,80900],{"class":55},"console.log(arr)  \u002F\u002F[3,5]\n",[20,80902,80903],{},"Array的实例方法，这个方法是实例成员",[20,80905,80906],{},[23,80907],{"alt":25,"src":80908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23059,80910,80912],{"id":80911},"_410521-reduce","4.10.5.2.1 reduce",[20,80914,80915],{},[23,80916],{"alt":25,"src":80917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[36,80919,80921],{"className":53167,"code":80920,"language":53169,"meta":25,"style":25},"\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",[42,80922,80923,80931,80939,80944,80949,80954,80959,80963,80968,80973,80978,80982,80987,80992,80996,81001,81006,81011,81019],{"__ignoreMap":25},[45,80924,80925,80927,80929],{"class":47,"line":48},[45,80926,1187],{"class":55},[45,80928,51900],{"class":51400},[45,80930,51407],{"class":55},[45,80932,80933,80935,80937],{"class":47,"line":66},[45,80934,52244],{"class":55},[45,80936,51913],{"class":51400},[45,80938,51407],{"class":55},[45,80940,80941],{"class":47,"line":1331},[45,80942,80943],{"class":55},"    const arr = [1, 5, 8]\n",[45,80945,80946],{"class":47,"line":1346},[45,80947,80948],{"class":55},"    \u002F\u002F 1.没有初始值\n",[45,80950,80951],{"class":47,"line":1352},[45,80952,80953],{"class":55},"    const total = arr.reduce(function (prev, current) {\n",[45,80955,80956],{"class":47,"line":1366},[45,80957,80958],{"class":55},"      return prev + current\n",[45,80960,80961],{"class":47,"line":1372},[45,80962,33561],{"class":55},[45,80964,80965],{"class":47,"line":1463},[45,80966,80967],{"class":55},"    console.log(total)   \u002F\u002F14\n",[45,80969,80970],{"class":47,"line":1469},[45,80971,80972],{"class":55},"    \u002F\u002F 2.有初始值\n",[45,80974,80975],{"class":47,"line":1481},[45,80976,80977],{"class":55},"    const total1 = arr.reduce(function (prev, current) {\n",[45,80979,80980],{"class":47,"line":1763},[45,80981,80958],{"class":55},[45,80983,80984],{"class":47,"line":1768},[45,80985,80986],{"class":55},"    }, 10)\n",[45,80988,80989],{"class":47,"line":1774},[45,80990,80991],{"class":55},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[45,80993,80994],{"class":47,"line":1779},[45,80995,2550],{"emptyLinePlaceholder":207},[45,80997,80998],{"class":47,"line":1793},[45,80999,81000],{"class":55},"    \u002F\u002F 3.箭头函数写法\n",[45,81002,81003],{"class":47,"line":1798},[45,81004,81005],{"class":55},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[45,81007,81008],{"class":47,"line":1804},[45,81009,81010],{"class":55},"    console.log(total2)   \u002F\u002F24\n",[45,81012,81013,81015,81017],{"class":47,"line":1825},[45,81014,52517],{"class":55},[45,81016,51913],{"class":51400},[45,81018,51407],{"class":55},[45,81020,81021,81023,81025],{"class":47,"line":1830},[45,81022,51885],{"class":55},[45,81024,51900],{"class":51400},[45,81026,51407],{"class":55},[20,81028,81029],{},"执行过程：",[233,81031,81032,81035,81038],{},[169,81033,81034],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[169,81036,81037],{},"每一次循环，把返回值给作为下一次循环的上一次值",[169,81039,81040],{},"如果有起始值，则起始值作为上一次值",[36,81042,81044],{"className":53167,"code":81043,"language":53169,"meta":25,"style":25},"\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",[42,81045,81046,81054,81062,81066,81070,81074,81078,81082,81086,81091,81096,81101,81106,81111,81115,81119,81123,81127,81131,81135,81140,81144,81149,81153,81158,81163,81167,81171,81175,81183],{"__ignoreMap":25},[45,81047,81048,81050,81052],{"class":47,"line":48},[45,81049,1187],{"class":55},[45,81051,51900],{"class":51400},[45,81053,51407],{"class":55},[45,81055,81056,81058,81060],{"class":47,"line":66},[45,81057,52244],{"class":55},[45,81059,51913],{"class":51400},[45,81061,51407],{"class":55},[45,81063,81064],{"class":47,"line":1331},[45,81065,80943],{"class":55},[45,81067,81068],{"class":47,"line":1346},[45,81069,80948],{"class":55},[45,81071,81072],{"class":47,"line":1352},[45,81073,80953],{"class":55},[45,81075,81076],{"class":47,"line":1366},[45,81077,80958],{"class":55},[45,81079,81080],{"class":47,"line":1372},[45,81081,33561],{"class":55},[45,81083,81084],{"class":47,"line":1463},[45,81085,80967],{"class":55},[45,81087,81088],{"class":47,"line":1469},[45,81089,81090],{"class":55},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[45,81092,81093],{"class":47,"line":1481},[45,81094,81095],{"class":55},"    \u002F\u002F     1              5                    6\n",[45,81097,81098],{"class":47,"line":1763},[45,81099,81100],{"class":55},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[45,81102,81103],{"class":47,"line":1768},[45,81104,81105],{"class":55},"    \u002F\u002F     6              8                    14\n",[45,81107,81108],{"class":47,"line":1774},[45,81109,81110],{"class":55},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[45,81112,81113],{"class":47,"line":1779},[45,81114,80972],{"class":55},[45,81116,81117],{"class":47,"line":1793},[45,81118,80977],{"class":55},[45,81120,81121],{"class":47,"line":1798},[45,81122,80958],{"class":55},[45,81124,81125],{"class":47,"line":1804},[45,81126,80986],{"class":55},[45,81128,81129],{"class":47,"line":1825},[45,81130,80991],{"class":55},[45,81132,81133],{"class":47,"line":1830},[45,81134,81090],{"class":55},[45,81136,81137],{"class":47,"line":1844},[45,81138,81139],{"class":55},"    \u002F\u002F     10             1                     11\n",[45,81141,81142],{"class":47,"line":1849},[45,81143,81100],{"class":55},[45,81145,81146],{"class":47,"line":1878},[45,81147,81148],{"class":55},"    \u002F\u002F     11             5                    16\n",[45,81150,81151],{"class":47,"line":1883},[45,81152,81100],{"class":55},[45,81154,81155],{"class":47,"line":1900},[45,81156,81157],{"class":55},"    \u002F\u002F     16             8                    24\n",[45,81159,81160],{"class":47,"line":1905},[45,81161,81162],{"class":55},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[45,81164,81165],{"class":47,"line":1910},[45,81166,81000],{"class":55},[45,81168,81169],{"class":47,"line":1915},[45,81170,81005],{"class":55},[45,81172,81173],{"class":47,"line":1929},[45,81174,81010],{"class":55},[45,81176,81177,81179,81181],{"class":47,"line":1934},[45,81178,52517],{"class":55},[45,81180,51913],{"class":51400},[45,81182,51407],{"class":55},[45,81184,81185,81187,81189],{"class":47,"line":2727},[45,81186,51885],{"class":55},[45,81188,51900],{"class":51400},[45,81190,51407],{"class":55},[23059,81192,81194],{"id":81193},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[20,81196,81197],{},[23,81198],{"alt":25,"src":81199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[36,81201,81203],{"className":53167,"code":81202,"language":53169,"meta":25,"style":25},"\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",[42,81204,81205,81213,81221,81226,81231,81236,81241,81245,81250,81255,81260,81265,81270,81275,81279,81284,81288,81293,81301],{"__ignoreMap":25},[45,81206,81207,81209,81211],{"class":47,"line":48},[45,81208,1187],{"class":55},[45,81210,51900],{"class":51400},[45,81212,51407],{"class":55},[45,81214,81215,81217,81219],{"class":47,"line":66},[45,81216,52244],{"class":55},[45,81218,51913],{"class":51400},[45,81220,51407],{"class":55},[45,81222,81223],{"class":47,"line":1331},[45,81224,81225],{"class":55},"    const arr = [\n",[45,81227,81228],{"class":47,"line":1346},[45,81229,81230],{"class":55},"      { name: '张三', salary: 10000 },\n",[45,81232,81233],{"class":47,"line":1352},[45,81234,81235],{"class":55},"      { name: '李四', salary: 10000 },\n",[45,81237,81238],{"class":47,"line":1366},[45,81239,81240],{"class":55},"      { name: '王五', salary: 10000 }\n",[45,81242,81243],{"class":47,"line":1372},[45,81244,53209],{"class":55},[45,81246,81247],{"class":47,"line":1463},[45,81248,81249],{"class":55},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[45,81251,81252],{"class":47,"line":1469},[45,81253,81254],{"class":55},"    \u002F\u002F prev是累计值\n",[45,81256,81257],{"class":47,"line":1481},[45,81258,81259],{"class":55},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[45,81261,81262],{"class":47,"line":1763},[45,81263,81264],{"class":55},"    console.log(total)\n",[45,81266,81267],{"class":47,"line":1768},[45,81268,81269],{"class":55},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[45,81271,81272],{"class":47,"line":1774},[45,81273,81274],{"class":55},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[45,81276,81277],{"class":47,"line":1779},[45,81278,81269],{"class":55},[45,81280,81281],{"class":47,"line":1793},[45,81282,81283],{"class":55},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[45,81285,81286],{"class":47,"line":1798},[45,81287,81269],{"class":55},[45,81289,81290],{"class":47,"line":1804},[45,81291,81292],{"class":55},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[45,81294,81295,81297,81299],{"class":47,"line":1825},[45,81296,52517],{"class":55},[45,81298,51913],{"class":51400},[45,81300,51407],{"class":55},[45,81302,81303,81305,81307],{"class":47,"line":1830},[45,81304,51885],{"class":55},[45,81306,51900],{"class":51400},[45,81308,51407],{"class":55},[23059,81310,81312],{"id":81311},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[20,81314,81315],{},[23,81316],{"alt":25,"src":81317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[20,81319,81320],{},[23,81321],{"alt":25,"src":81322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[233,81324,81325],{},[169,81326,81327],{},"find()",[20,81329,81330],{},"循环查找，找到第一个就ok",[20,81332,81333],{},[516,81334,81337],{"href":81335,"rel":81336},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24012],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[36,81339,81341],{"className":50733,"code":81340,"language":50735,"meta":25,"style":25},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[42,81342,81343,81348,81353],{"__ignoreMap":25},[45,81344,81345],{"class":47,"line":48},[45,81346,81347],{"class":55},"const array1 = [5, 12, 8, 130, 44]\n",[45,81349,81350],{"class":47,"line":66},[45,81351,81352],{"class":55},"const found = array1.find((element) => element > 10)\n",[45,81354,81355],{"class":47,"line":1331},[45,81356,81357],{"class":55},"console.log(found)  \u002F\u002F12\n",[20,81359,81360,81362,81363,81368,81369,81372,81373,81375,81376,81381,81382,81384,81385,81387,81388,81390,81391],{},[42,81361,81327],{}," 方法是一个",[516,81364,81367],{"href":81365,"rel":81366},"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",[24012],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[42,81370,81371],{},"callbackFn"," 函数，直到 ",[42,81374,81371],{}," 返回一个",[516,81377,81380],{"href":81378,"rel":81379},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24012],"真值","。然后 ",[42,81383,81327],{}," 返回该元素并停止迭代数组。如果 ",[42,81386,81371],{}," 从未返回真值，则 ",[42,81389,81327],{}," 返回 ",[42,81392,81393],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[36,81395,81397],{"className":53167,"code":81396,"language":53169,"meta":25,"style":25},"\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",[42,81398,81399,81407,81415,81420,81425,81430,81434,81439,81444,81448,81453,81458,81462,81466,81471,81476,81480,81484,81489,81494,81499,81504,81509,81513,81518,81523,81528,81533,81537,81542,81550],{"__ignoreMap":25},[45,81400,81401,81403,81405],{"class":47,"line":48},[45,81402,1187],{"class":55},[45,81404,51900],{"class":51400},[45,81406,51407],{"class":55},[45,81408,81409,81411,81413],{"class":47,"line":66},[45,81410,52244],{"class":55},[45,81412,51913],{"class":51400},[45,81414,51407],{"class":55},[45,81416,81417],{"class":47,"line":1331},[45,81418,81419],{"class":55},"    const arr = ['red', 'blue', 'green']\n",[45,81421,81422],{"class":47,"line":1346},[45,81423,81424],{"class":55},"    const found = arr.find(item => item === 'pink')\n",[45,81426,81427],{"class":47,"line":1352},[45,81428,81429],{"class":55},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[45,81431,81432],{"class":47,"line":1366},[45,81433,2550],{"emptyLinePlaceholder":207},[45,81435,81436],{"class":47,"line":1372},[45,81437,81438],{"class":55},"    \u002F\u002F 使用场景，用于查找数据\n",[45,81440,81441],{"class":47,"line":1463},[45,81442,81443],{"class":55},"    const arr1 = [\n",[45,81445,81446],{"class":47,"line":1469},[45,81447,79486],{"class":55},[45,81449,81450],{"class":47,"line":1481},[45,81451,81452],{"class":55},"        name: '小米',\n",[45,81454,81455],{"class":47,"line":1763},[45,81456,81457],{"class":55},"        price: 1999\n",[45,81459,81460],{"class":47,"line":1768},[45,81461,77992],{"class":55},[45,81463,81464],{"class":47,"line":1774},[45,81465,79486],{"class":55},[45,81467,81468],{"class":47,"line":1779},[45,81469,81470],{"class":55},"        name: '华为',\n",[45,81472,81473],{"class":47,"line":1793},[45,81474,81475],{"class":55},"        price: 3999\n",[45,81477,81478],{"class":47,"line":1798},[45,81479,52498],{"class":55},[45,81481,81482],{"class":47,"line":1804},[45,81483,53209],{"class":55},[45,81485,81486],{"class":47,"line":1825},[45,81487,81488],{"class":55},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[45,81490,81491],{"class":47,"line":1830},[45,81492,81493],{"class":55},"    \u002F\u002F const found1 = arr1.find(item => {\n",[45,81495,81496],{"class":47,"line":1844},[45,81497,81498],{"class":55},"    \u002F\u002F   if (item.name === '小米') {\n",[45,81500,81501],{"class":47,"line":1849},[45,81502,81503],{"class":55},"    \u002F\u002F     return item\n",[45,81505,81506],{"class":47,"line":1878},[45,81507,81508],{"class":55},"    \u002F\u002F   }\n",[45,81510,81511],{"class":47,"line":1883},[45,81512,63390],{"class":55},[45,81514,81515],{"class":47,"line":1900},[45,81516,81517],{"class":55},"    \u002F\u002F 另一种写法\n",[45,81519,81520],{"class":47,"line":1905},[45,81521,81522],{"class":55},"    const found1 = arr1.find(item => {\n",[45,81524,81525],{"class":47,"line":1910},[45,81526,81527],{"class":55},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[45,81529,81530],{"class":47,"line":1915},[45,81531,81532],{"class":55},"      return item.name = '小米'\n",[45,81534,81535],{"class":47,"line":1929},[45,81536,33561],{"class":55},[45,81538,81539],{"class":47,"line":1934},[45,81540,81541],{"class":55},"    console.log(found1)\n",[45,81543,81544,81546,81548],{"class":47,"line":2727},[45,81545,52517],{"class":55},[45,81547,51913],{"class":51400},[45,81549,51407],{"class":55},[45,81551,81552,81554,81556],{"class":47,"line":2741},[45,81553,51885],{"class":55},[45,81555,51900],{"class":51400},[45,81557,51407],{"class":55},[20,81559,81560],{},[23,81561],{"alt":25,"src":81562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[20,81564,81565],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[233,81567,81568],{"start":66},[169,81569,81570],{},"every()返回的是布尔值",[20,81572,81573],{},[516,81574,81577],{"href":81575,"rel":81576},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24012],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[20,81579,81580],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[20,81582,81583],{},"some是只有有一个就没问题",[20,81585,81586],{},"every是必须全是才行",[36,81588,81592],{"className":81589,"code":81590,"language":81591,"meta":25,"style":25},"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",[42,81593,81594,81610,81624,81628,81637],{"__ignoreMap":25},[45,81595,81596,81598,81601,81603,81605,81608],{"class":47,"line":48},[45,81597,54549],{"class":51},[45,81599,81600],{"class":55}," isBigEnough(element, ",[45,81602,74158],{"class":51},[45,81604,12584],{"class":55},[45,81606,81607],{"class":51},"array",[45,81609,12591],{"class":55},[45,81611,81612,81615,81618,81620,81622],{"class":47,"line":66},[45,81613,81614],{"class":51},"  return",[45,81616,81617],{"class":55}," element ",[45,81619,1861],{"class":51},[45,81621,2188],{"class":79},[45,81623,1442],{"class":55},[45,81625,81626],{"class":47,"line":1331},[45,81627,1716],{"class":55},[45,81629,81630,81633,81635],{"class":47,"line":1346},[45,81631,81632],{"class":55},"[12, 5, 8, 130, 44].every(isBigEnough); ",[45,81634,33429],{"class":51},[45,81636,54616],{"class":55},[45,81638,81639,81642,81644],{"class":47,"line":1352},[45,81640,81641],{"class":55},"[12, 54, 18, 130, 44].every(isBigEnough); ",[45,81643,33429],{"class":51},[45,81645,58040],{"class":55},[36,81647,81649],{"className":53167,"code":81648,"language":53169,"meta":25,"style":25},"\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",[42,81650,81651,81659,81667,81672,81676,81681,81686,81694],{"__ignoreMap":25},[45,81652,81653,81655,81657],{"class":47,"line":48},[45,81654,1187],{"class":55},[45,81656,51900],{"class":51400},[45,81658,51407],{"class":55},[45,81660,81661,81663,81665],{"class":47,"line":66},[45,81662,52244],{"class":55},[45,81664,51913],{"class":51400},[45,81666,51407],{"class":55},[45,81668,81669],{"class":47,"line":1331},[45,81670,81671],{"class":55},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[45,81673,81674],{"class":47,"line":1346},[45,81675,78422],{"class":55},[45,81677,81678],{"class":47,"line":1352},[45,81679,81680],{"class":55},"    const flag = arr.every(item => item >= 10)\n",[45,81682,81683],{"class":47,"line":1366},[45,81684,81685],{"class":55},"    console.log(flag)    \u002F\u002Ftrue\n",[45,81687,81688,81690,81692],{"class":47,"line":1372},[45,81689,52517],{"class":55},[45,81691,51913],{"class":51400},[45,81693,51407],{"class":55},[45,81695,81696,81698,81700],{"class":47,"line":1463},[45,81697,51885],{"class":55},[45,81699,51900],{"class":51400},[45,81701,51407],{"class":55},[36,81703,81705],{"className":53167,"code":81704,"language":53169,"meta":25,"style":25},"\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",[42,81706,81707,81715,81723,81727,81732,81737,81742,81750],{"__ignoreMap":25},[45,81708,81709,81711,81713],{"class":47,"line":48},[45,81710,1187],{"class":55},[45,81712,51900],{"class":51400},[45,81714,51407],{"class":55},[45,81716,81717,81719,81721],{"class":47,"line":66},[45,81718,52244],{"class":55},[45,81720,51913],{"class":51400},[45,81722,51407],{"class":55},[45,81724,81725],{"class":47,"line":1331},[45,81726,81671],{"class":55},[45,81728,81729],{"class":47,"line":1346},[45,81730,81731],{"class":55},"    const arr = [10, 0, 5]\n",[45,81733,81734],{"class":47,"line":1352},[45,81735,81736],{"class":55},"    const flag = arr.some(item => item >= 10)\n",[45,81738,81739],{"class":47,"line":1366},[45,81740,81741],{"class":55},"    console.log(flag)   \u002F\u002Ftrue\n",[45,81743,81744,81746,81748],{"class":47,"line":1372},[45,81745,52517],{"class":55},[45,81747,51913],{"class":51400},[45,81749,51407],{"class":55},[45,81751,81752,81754,81756],{"class":47,"line":1463},[45,81753,51885],{"class":55},[45,81755,51900],{"class":51400},[45,81757,51407],{"class":55},[23059,81759,81761],{"id":81760},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[20,81763,81764],{},[23,81765],{"alt":25,"src":81766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[36,81768,81770],{"className":50733,"code":81769,"language":50735,"meta":25,"style":25},"\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",[42,81771,81772,81782,81796,81800,81808,81822,81842,81854,81862,81869,81881,81893,81905,81917,81927,81937,81941,81949,81957,81961,81969,81981,81989,82011,82016,82021,82054,82062,82070,82074],{"__ignoreMap":25},[45,81773,81774,81776,81778,81780],{"class":47,"line":48},[45,81775,51397],{"class":55},[45,81777,51401],{"class":51400},[45,81779,51404],{"class":69},[45,81781,51407],{"class":55},[45,81783,81784,81786,81788,81790,81792,81794],{"class":47,"line":66},[45,81785,1187],{"class":55},[45,81787,50735],{"class":51400},[45,81789,51416],{"class":69},[45,81791,59],{"class":55},[45,81793,51421],{"class":62},[45,81795,51407],{"class":55},[45,81797,81798],{"class":47,"line":1331},[45,81799,2550],{"emptyLinePlaceholder":207},[45,81801,81802,81804,81806],{"class":47,"line":1346},[45,81803,1187],{"class":55},[45,81805,51434],{"class":51400},[45,81807,51407],{"class":55},[45,81809,81810,81812,81814,81816,81818,81820],{"class":47,"line":1352},[45,81811,52244],{"class":55},[45,81813,51444],{"class":51400},[45,81815,51447],{"class":69},[45,81817,59],{"class":55},[45,81819,51452],{"class":62},[45,81821,51407],{"class":55},[45,81823,81824,81826,81828,81830,81832,81834,81836,81838,81840],{"class":47,"line":1366},[45,81825,52244],{"class":55},[45,81827,51444],{"class":51400},[45,81829,15069],{"class":69},[45,81831,59],{"class":55},[45,81833,51491],{"class":62},[45,81835,51471],{"class":69},[45,81837,59],{"class":55},[45,81839,51498],{"class":62},[45,81841,51407],{"class":55},[45,81843,81844,81846,81848,81850,81852],{"class":47,"line":1372},[45,81845,52244],{"class":55},[45,81847,51507],{"class":51400},[45,81849,51510],{"class":55},[45,81851,51507],{"class":51400},[45,81853,51407],{"class":55},[45,81855,81856,81858,81860],{"class":47,"line":1463},[45,81857,52244],{"class":55},[45,81859,196],{"class":51400},[45,81861,51407],{"class":55},[45,81863,81864,81867],{"class":47,"line":1469},[45,81865,81866],{"class":51400},"    div",[45,81868,15721],{"class":55},[45,81870,81871,81873,81875,81877,81879],{"class":47,"line":1481},[45,81872,54871],{"class":79},[45,81874,51537],{"class":55},[45,81876,1873],{"class":79},[45,81878,51592],{"class":51},[45,81880,1442],{"class":55},[45,81882,81883,81885,81887,81889,81891],{"class":47,"line":1763},[45,81884,54885],{"class":79},[45,81886,51537],{"class":55},[45,81888,678],{"class":79},[45,81890,51592],{"class":51},[45,81892,1442],{"class":55},[45,81894,81895,81897,81899,81901,81903],{"class":47,"line":1768},[45,81896,57459],{"class":79},[45,81898,51537],{"class":55},[45,81900,678],{"class":79},[45,81902,51592],{"class":51},[45,81904,1442],{"class":55},[45,81906,81907,81909,81911,81913,81915],{"class":47,"line":1774},[45,81908,65233],{"class":79},[45,81910,51537],{"class":55},[45,81912,775],{"class":79},[45,81914,51592],{"class":51},[45,81916,1442],{"class":55},[45,81918,81919,81921,81923,81925],{"class":47,"line":1779},[45,81920,57386],{"class":79},[45,81922,51537],{"class":55},[45,81924,51692],{"class":79},[45,81926,1442],{"class":55},[45,81928,81929,81931,81933,81935],{"class":47,"line":1793},[45,81930,54984],{"class":79},[45,81932,51537],{"class":55},[45,81934,51745],{"class":79},[45,81936,1442],{"class":55},[45,81938,81939],{"class":47,"line":1798},[45,81940,2337],{"class":55},[45,81942,81943,81945,81947],{"class":47,"line":1804},[45,81944,52517],{"class":55},[45,81946,196],{"class":51400},[45,81948,51407],{"class":55},[45,81950,81951,81953,81955],{"class":47,"line":1825},[45,81952,51885],{"class":55},[45,81954,51434],{"class":51400},[45,81956,51407],{"class":55},[45,81958,81959],{"class":47,"line":1830},[45,81960,2550],{"emptyLinePlaceholder":207},[45,81962,81963,81965,81967],{"class":47,"line":1844},[45,81964,1187],{"class":55},[45,81966,51900],{"class":51400},[45,81968,51407],{"class":55},[45,81970,81971,81973,81975,81977,81979],{"class":47,"line":1849},[45,81972,52244],{"class":55},[45,81974,51711],{"class":51400},[45,81976,55414],{"class":55},[45,81978,51711],{"class":51400},[45,81980,51407],{"class":55},[45,81982,81983,81985,81987],{"class":47,"line":1878},[45,81984,52244],{"class":55},[45,81986,51913],{"class":51400},[45,81988,51407],{"class":55},[45,81990,81991,81993,81996,81998,82001,82004,82006,82009],{"class":47,"line":1883},[45,81992,11370],{"class":51},[45,81994,81995],{"class":79}," spec",[45,81997,13713],{"class":51},[45,81999,82000],{"class":55}," { size: ",[45,82002,82003],{"class":62},"'40cm*40cm'",[45,82005,55564],{"class":55},[45,82007,82008],{"class":62},"'黑色'",[45,82010,55704],{"class":55},[45,82012,82013],{"class":47,"line":1900},[45,82014,82015],{"class":337},"    \u002F\u002F const arr = Object.values(spec)\n",[45,82017,82018],{"class":47,"line":1905},[45,82019,82020],{"class":337},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[45,82022,82023,82025,82027,82029,82032,82034,82036,82039,82042,82045,82047,82049,82052],{"class":47,"line":1910},[45,82024,52507],{"class":55},[45,82026,54499],{"class":69},[45,82028,282],{"class":55},[45,82030,82031],{"class":62},"'div'",[45,82033,74349],{"class":55},[45,82035,59],{"class":51},[45,82037,82038],{"class":55}," Object.",[45,82040,82041],{"class":69},"values",[45,82043,82044],{"class":55},"(spec).",[45,82046,74323],{"class":69},[45,82048,282],{"class":55},[45,82050,82051],{"class":62},"'\u002F'",[45,82053,139],{"class":55},[45,82055,82056,82058,82060],{"class":47,"line":1915},[45,82057,52517],{"class":55},[45,82059,51913],{"class":51400},[45,82061,51407],{"class":55},[45,82063,82064,82066,82068],{"class":47,"line":1929},[45,82065,51885],{"class":55},[45,82067,51900],{"class":51400},[45,82069,51407],{"class":55},[45,82071,82072],{"class":47,"line":1934},[45,82073,2550],{"emptyLinePlaceholder":207},[45,82075,82076,82078,82080],{"class":47,"line":2727},[45,82077,51885],{"class":55},[45,82079,50735],{"class":51400},[45,82081,51407],{"class":55},[20,82083,82084],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23059,82086,82088],{"id":82087},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[20,82090,82091],{},"静态方法，将伪数组转换为真数组",[20,82093,82094],{},[23,82095],{"alt":25,"src":82096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[36,82098,82100],{"className":53167,"code":82099,"language":53169,"meta":25,"style":25},"\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",[42,82101,82102,82110,82118,82130,82142,82154,82162,82170,82175,82180,82185,82190,82198],{"__ignoreMap":25},[45,82103,82104,82106,82108],{"class":47,"line":48},[45,82105,1187],{"class":55},[45,82107,51900],{"class":51400},[45,82109,51407],{"class":55},[45,82111,82112,82114,82116],{"class":47,"line":66},[45,82113,52244],{"class":55},[45,82115,166],{"class":51400},[45,82117,51407],{"class":55},[45,82119,82120,82122,82124,82126,82128],{"class":47,"line":1331},[45,82121,51441],{"class":55},[45,82123,169],{"class":51400},[45,82125,55414],{"class":55},[45,82127,169],{"class":51400},[45,82129,51407],{"class":55},[45,82131,82132,82134,82136,82138,82140],{"class":47,"line":1346},[45,82133,51441],{"class":55},[45,82135,169],{"class":51400},[45,82137,55414],{"class":55},[45,82139,169],{"class":51400},[45,82141,51407],{"class":55},[45,82143,82144,82146,82148,82150,82152],{"class":47,"line":1352},[45,82145,51441],{"class":55},[45,82147,169],{"class":51400},[45,82149,55414],{"class":55},[45,82151,169],{"class":51400},[45,82153,51407],{"class":55},[45,82155,82156,82158,82160],{"class":47,"line":1366},[45,82157,52517],{"class":55},[45,82159,166],{"class":51400},[45,82161,51407],{"class":55},[45,82163,82164,82166,82168],{"class":47,"line":1372},[45,82165,52244],{"class":55},[45,82167,51913],{"class":51400},[45,82169,51407],{"class":55},[45,82171,82172],{"class":47,"line":1463},[45,82173,82174],{"class":55},"    const lis = document.querySelectorAll('li')\n",[45,82176,82177],{"class":47,"line":1469},[45,82178,82179],{"class":55},"    const liss = Array.from(lis)\n",[45,82181,82182],{"class":47,"line":1481},[45,82183,82184],{"class":55},"    liss.pop()\n",[45,82186,82187],{"class":47,"line":1763},[45,82188,82189],{"class":55},"    console.log(liss)\n",[45,82191,82192,82194,82196],{"class":47,"line":1768},[45,82193,52517],{"class":55},[45,82195,51913],{"class":51400},[45,82197,51407],{"class":55},[45,82199,82200,82202,82204],{"class":47,"line":1774},[45,82201,51885],{"class":55},[45,82203,51900],{"class":51400},[45,82205,51407],{"class":55},[20,82207,82208],{},[23,82209],{"alt":25,"src":82210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22147,82212,82214],{"id":82213},"_41053-string","4.10.5.3 String",[20,82216,82217],{},[23,82218],{"alt":25,"src":82219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23059,82221,82223],{"id":82222},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[36,82225,82227],{"className":53167,"code":82226,"language":53169,"meta":25,"style":25},"\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",[42,82228,82229,82237,82245,82250,82255,82260,82264,82269,82274,82279,82287],{"__ignoreMap":25},[45,82230,82231,82233,82235],{"class":47,"line":48},[45,82232,1187],{"class":55},[45,82234,51900],{"class":51400},[45,82236,51407],{"class":55},[45,82238,82239,82241,82243],{"class":47,"line":66},[45,82240,52244],{"class":55},[45,82242,51913],{"class":51400},[45,82244,51407],{"class":55},[45,82246,82247],{"class":47,"line":1331},[45,82248,82249],{"class":55},"    \u002F\u002F 把字符串转化为数组\n",[45,82251,82252],{"class":47,"line":1346},[45,82253,82254],{"class":55},"    const str = 'pink,red'\n",[45,82256,82257],{"class":47,"line":1352},[45,82258,82259],{"class":55},"    const arr = str.split(',')\n",[45,82261,82262],{"class":47,"line":1366},[45,82263,80738],{"class":55},[45,82265,82266],{"class":47,"line":1372},[45,82267,82268],{"class":55},"    const str1 = '2025-8-25'\n",[45,82270,82271],{"class":47,"line":1463},[45,82272,82273],{"class":55},"    const arr1 = str1.split('-')\n",[45,82275,82276],{"class":47,"line":1469},[45,82277,82278],{"class":55},"    console.log(arr1)\n",[45,82280,82281,82283,82285],{"class":47,"line":1481},[45,82282,52517],{"class":55},[45,82284,51913],{"class":51400},[45,82286,51407],{"class":55},[45,82288,82289,82291,82293],{"class":47,"line":1763},[45,82290,51885],{"class":55},[45,82292,51900],{"class":51400},[45,82294,51407],{"class":55},[23059,82296,82298],{"id":82297},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[20,82300,5331],{},[20,82302,82303],{},"substring(indexStart)",[20,82305,82306],{},"substring(indexStart, indexEnd)",[166,82308,82309,82320,82332,82342],{},[169,82310,82311,82312,82315,82316,82319],{},"如果省略了 ",[42,82313,82314],{},"indexEnd","，则 ",[42,82317,82318],{},"substring()"," 提取字符直到字符串的末尾",[169,82321,82322,82323,82326,82327,82315,82329,82331],{},"如果 ",[42,82324,82325],{},"indexStart"," 等于 ",[42,82328,82314],{},[42,82330,82318],{}," 返回一个空字符串",[169,82333,82322,82334,82336,82337,82315,82339,82341],{},[42,82335,82325],{}," 大于 ",[42,82338,82314],{},[42,82340,82318],{}," 的效果就像交换了这两个参数一样",[169,82343,82344],{},"结束的索引号不包含想要截取的部分",[36,82346,82348],{"className":81589,"code":82347,"language":81591,"meta":25,"style":25},"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",[42,82349,82350,82362,82366,82400,82430,82434,82465,82469,82496,82526,82556,82560,82591],{"__ignoreMap":25},[45,82351,82352,82355,82357,82360],{"class":47,"line":48},[45,82353,82354],{"class":55},"const anyString ",[45,82356,59],{"class":51},[45,82358,82359],{"class":62}," \"Mozilla\"",[45,82361,1442],{"class":55},[45,82363,82364],{"class":47,"line":66},[45,82365,2550],{"emptyLinePlaceholder":207},[45,82367,82368,82371,82373,82375,82377,82380,82382,82385,82387,82389,82391,82393,82395,82397],{"class":47,"line":1331},[45,82369,82370],{"class":79},"console",[45,82372,835],{"class":55},[45,82374,58347],{"class":79},[45,82376,282],{"class":55},[45,82378,82379],{"class":79},"anyString",[45,82381,835],{"class":55},[45,82383,82384],{"class":79},"substring",[45,82386,282],{"class":55},[45,82388,469],{"class":79},[45,82390,12584],{"class":55},[45,82392,495],{"class":79},[45,82394,75353],{"class":55},[45,82396,33429],{"class":51},[45,82398,82399],{"class":62}," 'M'\n",[45,82401,82402,82404,82406,82408,82410,82412,82414,82416,82418,82420,82422,82424,82426,82428],{"class":47,"line":1346},[45,82403,82370],{"class":79},[45,82405,835],{"class":55},[45,82407,58347],{"class":79},[45,82409,282],{"class":55},[45,82411,82379],{"class":79},[45,82413,835],{"class":55},[45,82415,82384],{"class":79},[45,82417,282],{"class":55},[45,82419,495],{"class":79},[45,82421,12584],{"class":55},[45,82423,469],{"class":79},[45,82425,75353],{"class":55},[45,82427,33429],{"class":51},[45,82429,82399],{"class":62},[45,82431,82432],{"class":47,"line":1352},[45,82433,2550],{"emptyLinePlaceholder":207},[45,82435,82436,82438,82440,82442,82444,82446,82448,82450,82452,82454,82456,82458,82460,82462],{"class":47,"line":1366},[45,82437,82370],{"class":79},[45,82439,835],{"class":55},[45,82441,58347],{"class":79},[45,82443,282],{"class":55},[45,82445,82379],{"class":79},[45,82447,835],{"class":55},[45,82449,82384],{"class":79},[45,82451,282],{"class":55},[45,82453,469],{"class":79},[45,82455,12584],{"class":55},[45,82457,621],{"class":79},[45,82459,75353],{"class":55},[45,82461,33429],{"class":51},[45,82463,82464],{"class":62}," 'Mozill'\n",[45,82466,82467],{"class":47,"line":1372},[45,82468,2550],{"emptyLinePlaceholder":207},[45,82470,82471,82473,82475,82477,82479,82481,82483,82485,82487,82489,82491,82493],{"class":47,"line":1463},[45,82472,82370],{"class":79},[45,82474,835],{"class":55},[45,82476,58347],{"class":79},[45,82478,282],{"class":55},[45,82480,82379],{"class":79},[45,82482,835],{"class":55},[45,82484,82384],{"class":79},[45,82486,282],{"class":55},[45,82488,570],{"class":79},[45,82490,75353],{"class":55},[45,82492,33429],{"class":51},[45,82494,82495],{"class":62}," 'lla'\n",[45,82497,82498,82500,82502,82504,82506,82508,82510,82512,82514,82516,82518,82520,82522,82524],{"class":47,"line":1469},[45,82499,82370],{"class":79},[45,82501,835],{"class":55},[45,82503,58347],{"class":79},[45,82505,282],{"class":55},[45,82507,82379],{"class":79},[45,82509,835],{"class":55},[45,82511,82384],{"class":79},[45,82513,282],{"class":55},[45,82515,570],{"class":79},[45,82517,12584],{"class":55},[45,82519,646],{"class":79},[45,82521,75409],{"class":55},[45,82523,33429],{"class":51},[45,82525,82495],{"class":62},[45,82527,82528,82530,82532,82534,82536,82538,82540,82542,82544,82546,82548,82550,82552,82554],{"class":47,"line":1481},[45,82529,82370],{"class":79},[45,82531,835],{"class":55},[45,82533,58347],{"class":79},[45,82535,282],{"class":55},[45,82537,82379],{"class":79},[45,82539,835],{"class":55},[45,82541,82384],{"class":79},[45,82543,282],{"class":55},[45,82545,646],{"class":79},[45,82547,12584],{"class":55},[45,82549,570],{"class":79},[45,82551,75353],{"class":55},[45,82553,33429],{"class":51},[45,82555,82495],{"class":62},[45,82557,82558],{"class":47,"line":1763},[45,82559,2550],{"emptyLinePlaceholder":207},[45,82561,82562,82564,82566,82568,82570,82572,82574,82576,82578,82580,82582,82584,82586,82588],{"class":47,"line":1768},[45,82563,82370],{"class":79},[45,82565,835],{"class":55},[45,82567,58347],{"class":79},[45,82569,282],{"class":55},[45,82571,82379],{"class":79},[45,82573,835],{"class":55},[45,82575,82384],{"class":79},[45,82577,282],{"class":55},[45,82579,469],{"class":79},[45,82581,12584],{"class":55},[45,82583,646],{"class":79},[45,82585,75353],{"class":55},[45,82587,33429],{"class":51},[45,82589,82590],{"class":62}," 'Mozilla'\n",[45,82592,82593,82595,82597,82599,82601,82603,82605,82607,82609,82611,82613,82615,82617,82619],{"class":47,"line":1774},[45,82594,82370],{"class":79},[45,82596,835],{"class":55},[45,82598,58347],{"class":79},[45,82600,282],{"class":55},[45,82602,82379],{"class":79},[45,82604,835],{"class":55},[45,82606,82384],{"class":79},[45,82608,282],{"class":55},[45,82610,469],{"class":79},[45,82612,12584],{"class":55},[45,82614,723],{"class":79},[45,82616,75353],{"class":55},[45,82618,33429],{"class":51},[45,82620,82590],{"class":62},[23059,82622,82624],{"id":82623},"_410533-startswith","4.10.5.3.3 startsWith",[20,82626,82627,82630,82631,82636,82637,82639,82640],{},[42,82628,82629],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[427,82632,82633],{},[42,82634,82635],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[42,82638,1514],{}," 或 ",[42,82641,66120],{},[36,82643,82645],{"className":77595,"code":82644,"language":77597,"meta":25,"style":25},"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",[42,82646,82647,82659,82678,82683,82703],{"__ignoreMap":25},[45,82648,82649,82651,82654,82656],{"class":47,"line":48},[45,82650,6942],{"class":51},[45,82652,82653],{"class":55}," str1 ",[45,82655,59],{"class":51},[45,82657,82658],{"class":62}," \"Saturday night plans\"\n",[45,82660,82661,82663,82665,82668,82671,82673,82676],{"class":47,"line":66},[45,82662,77632],{"class":55},[45,82664,58347],{"class":69},[45,82666,82667],{"class":55},"(str1.",[45,82669,82670],{"class":69},"startsWith",[45,82672,282],{"class":55},[45,82674,82675],{"class":62},"\"Sat\"",[45,82677,30597],{"class":55},[45,82679,82680],{"class":47,"line":1331},[45,82681,82682],{"class":337},"\u002F\u002F Expected output: true\n",[45,82684,82685,82687,82689,82691,82693,82695,82697,82699,82701],{"class":47,"line":1346},[45,82686,77632],{"class":55},[45,82688,58347],{"class":69},[45,82690,82667],{"class":55},[45,82692,82670],{"class":69},[45,82694,282],{"class":55},[45,82696,82675],{"class":62},[45,82698,12584],{"class":55},[45,82700,350],{"class":79},[45,82702,30597],{"class":55},[45,82704,82705],{"class":47,"line":1352},[45,82706,82707],{"class":337},"\u002F\u002F Expected output: false\n",[36,82709,82711],{"className":50733,"code":82710,"language":50735,"meta":25,"style":25},"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",[42,82712,82713,82718,82723,82727,82732,82737],{"__ignoreMap":25},[45,82714,82715],{"class":47,"line":48},[45,82716,82717],{"class":55},"startsWith(searchString)\n",[45,82719,82720],{"class":47,"line":66},[45,82721,82722],{"class":55},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[45,82724,82725],{"class":47,"line":1331},[45,82726,2550],{"emptyLinePlaceholder":207},[45,82728,82729],{"class":47,"line":1346},[45,82730,82731],{"class":55},"const str3 = 'pink老师上课中'\n",[45,82733,82734],{"class":47,"line":1352},[45,82735,82736],{"class":55},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[45,82738,82739],{"class":47,"line":1366},[45,82740,82741],{"class":55},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23059,82743,82745],{"id":82744},"_410534-includes","4.10.5.3.4 includes",[20,82747,82748],{},"includes(searchString) includes(searchString, position)",[233,82750,82751],{},[169,82752,82753],{},"searchString:",[20,82755,82756,82757,82759,82760,82765,82766,82771,82772,21649,82775,82778,82779,82782],{},"一个要在 ",[42,82758,1451],{}," 中查找的字符串。",[516,82761,82764],{"href":82762,"rel":82763},"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",[24012],"不能是正则表达式","。所有非正则表达式的值都会被",[516,82767,82770],{"href":82768,"rel":82769},"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",[24012],"强制转换为字符串","，因此如果该参数被省略或传入 ",[42,82773,82774],{},"undefined",[42,82776,82777],{},"includes()"," 方法会在字符串中搜索 ",[42,82780,82781],{},"\"undefined\"","，这通常不是你想要的",[233,82784,82785],{"start":66},[169,82786,82787,1136],{},[42,82788,82789],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[20,82791,82792,82793,82796,82797],{},"在字符串中开始搜索 ",[42,82794,82795],{},"searchString"," 的位置。默认值为 ",[42,82798,469],{},[233,82800,82801],{"start":1331},[169,82802,82803],{},"返回值：",[20,82805,82806,82807,82809,82810,82814,82815],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[42,82808,82795],{}," 为空字符串的情况），则返回 ",[427,82811,82812],{},[42,82813,1514],{}," ，否则返回 ",[427,82816,82817],{},[42,82818,66120],{},[233,82820,82821],{"start":1346},[169,82822,82823],{},"异常：",[20,82825,82322,82826,13944,82828,82832],{},[42,82827,82795],{},[516,82829,82831],{"href":82762,"rel":82830},[24012],"是一个正则表达式","，则会抛出",[20,82834,82835],{},"只要是有就是true，不需要非得以谁开头结尾",[36,82837,82839],{"className":77595,"code":82838,"language":77597,"meta":25,"style":25},"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",[42,82840,82841,82852,82875,82894,82914,82936,82955],{"__ignoreMap":25},[45,82842,82843,82845,82847,82849],{"class":47,"line":48},[45,82844,6942],{"class":51},[45,82846,79875],{"class":55},[45,82848,59],{"class":51},[45,82850,82851],{"class":62}," \"To be, or not to be, that is the question.\"\n",[45,82853,82854,82856,82858,82861,82864,82866,82869,82872],{"class":47,"line":66},[45,82855,77632],{"class":55},[45,82857,58347],{"class":69},[45,82859,82860],{"class":55},"(str.",[45,82862,82863],{"class":69},"includes",[45,82865,282],{"class":55},[45,82867,82868],{"class":62},"\"To be\"",[45,82870,82871],{"class":55},"))",[45,82873,82874],{"class":337},"  \u002F\u002F true\n",[45,82876,82877,82879,82881,82883,82885,82887,82890,82892],{"class":47,"line":1331},[45,82878,77632],{"class":55},[45,82880,58347],{"class":69},[45,82882,82860],{"class":55},[45,82884,82863],{"class":69},[45,82886,282],{"class":55},[45,82888,82889],{"class":62},"\"question\"",[45,82891,82871],{"class":55},[45,82893,82874],{"class":337},[45,82895,82896,82898,82900,82902,82904,82906,82909,82911],{"class":47,"line":1346},[45,82897,77632],{"class":55},[45,82899,58347],{"class":69},[45,82901,82860],{"class":55},[45,82903,82863],{"class":69},[45,82905,282],{"class":55},[45,82907,82908],{"class":62},"\"nonexistent\"",[45,82910,82871],{"class":55},[45,82912,82913],{"class":337},"  \u002F\u002F false\n",[45,82915,82916,82918,82920,82922,82924,82926,82928,82930,82932,82934],{"class":47,"line":1352},[45,82917,77632],{"class":55},[45,82919,58347],{"class":69},[45,82921,82860],{"class":55},[45,82923,82863],{"class":69},[45,82925,282],{"class":55},[45,82927,82868],{"class":62},[45,82929,12584],{"class":55},[45,82931,495],{"class":79},[45,82933,82871],{"class":55},[45,82935,82913],{"class":337},[45,82937,82938,82940,82942,82944,82946,82948,82951,82953],{"class":47,"line":1366},[45,82939,77632],{"class":55},[45,82941,58347],{"class":69},[45,82943,82860],{"class":55},[45,82945,82863],{"class":69},[45,82947,282],{"class":55},[45,82949,82950],{"class":62},"\"TO BE\"",[45,82952,82871],{"class":55},[45,82954,82913],{"class":337},[45,82956,82957,82959,82961,82963,82965,82967,82969,82971],{"class":47,"line":1372},[45,82958,77632],{"class":55},[45,82960,58347],{"class":69},[45,82962,82860],{"class":55},[45,82964,82863],{"class":69},[45,82966,282],{"class":55},[45,82968,7802],{"class":62},[45,82970,82871],{"class":55},[45,82972,82874],{"class":337},[23059,82974,82976],{"id":82975},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[36,82978,82980],{"className":53167,"code":82979,"language":53169,"meta":25,"style":25},"\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",[42,82981,82982,82990,82998,83003,83008,83013,83018,83023,83031],{"__ignoreMap":25},[45,82983,82984,82986,82988],{"class":47,"line":48},[45,82985,1187],{"class":55},[45,82987,51900],{"class":51400},[45,82989,51407],{"class":55},[45,82991,82992,82994,82996],{"class":47,"line":66},[45,82993,52244],{"class":55},[45,82995,51913],{"class":51400},[45,82997,51407],{"class":55},[45,82999,83000],{"class":47,"line":1331},[45,83001,83002],{"class":55},"    const num = 10\n",[45,83004,83005],{"class":47,"line":1346},[45,83006,83007],{"class":55},"    \u002F\u002F 强制转换\n",[45,83009,83010],{"class":47,"line":1352},[45,83011,83012],{"class":55},"    console.log(String(num))\n",[45,83014,83015],{"class":47,"line":1366},[45,83016,83017],{"class":55},"    \u002F\u002F toString()方法转换\n",[45,83019,83020],{"class":47,"line":1372},[45,83021,83022],{"class":55},"    console.log(num.toString())\n",[45,83024,83025,83027,83029],{"class":47,"line":1463},[45,83026,52517],{"class":55},[45,83028,51913],{"class":51400},[45,83030,51407],{"class":55},[45,83032,83033,83035,83037],{"class":47,"line":1469},[45,83034,51885],{"class":55},[45,83036,51900],{"class":51400},[45,83038,51407],{"class":55},[23059,83040,83042],{"id":83041},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[20,83044,83045],{},[23,83046],{"alt":25,"src":83047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[36,83049,83051],{"className":50733,"code":83050,"language":50735,"meta":25,"style":25},"\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",[42,83052,83053,83063,83077,83081,83089,83103,83123,83135,83143,83147,83155,83167,83175,83187,83192,83197,83202,83249,83265,83273,83281,83285],{"__ignoreMap":25},[45,83054,83055,83057,83059,83061],{"class":47,"line":48},[45,83056,51397],{"class":55},[45,83058,51401],{"class":51400},[45,83060,51404],{"class":69},[45,83062,51407],{"class":55},[45,83064,83065,83067,83069,83071,83073,83075],{"class":47,"line":66},[45,83066,1187],{"class":55},[45,83068,50735],{"class":51400},[45,83070,51416],{"class":69},[45,83072,59],{"class":55},[45,83074,51421],{"class":62},[45,83076,51407],{"class":55},[45,83078,83079],{"class":47,"line":1331},[45,83080,2550],{"emptyLinePlaceholder":207},[45,83082,83083,83085,83087],{"class":47,"line":1346},[45,83084,1187],{"class":55},[45,83086,51434],{"class":51400},[45,83088,51407],{"class":55},[45,83090,83091,83093,83095,83097,83099,83101],{"class":47,"line":1352},[45,83092,52244],{"class":55},[45,83094,51444],{"class":51400},[45,83096,51447],{"class":69},[45,83098,59],{"class":55},[45,83100,51452],{"class":62},[45,83102,51407],{"class":55},[45,83104,83105,83107,83109,83111,83113,83115,83117,83119,83121],{"class":47,"line":1366},[45,83106,52244],{"class":55},[45,83108,51444],{"class":51400},[45,83110,15069],{"class":69},[45,83112,59],{"class":55},[45,83114,51491],{"class":62},[45,83116,51471],{"class":69},[45,83118,59],{"class":55},[45,83120,51498],{"class":62},[45,83122,51407],{"class":55},[45,83124,83125,83127,83129,83131,83133],{"class":47,"line":1372},[45,83126,52244],{"class":55},[45,83128,51507],{"class":51400},[45,83130,51510],{"class":55},[45,83132,51507],{"class":51400},[45,83134,51407],{"class":55},[45,83136,83137,83139,83141],{"class":47,"line":1463},[45,83138,51885],{"class":55},[45,83140,51434],{"class":51400},[45,83142,51407],{"class":55},[45,83144,83145],{"class":47,"line":1469},[45,83146,2550],{"emptyLinePlaceholder":207},[45,83148,83149,83151,83153],{"class":47,"line":1481},[45,83150,1187],{"class":55},[45,83152,51900],{"class":51400},[45,83154,51407],{"class":55},[45,83156,83157,83159,83161,83163,83165],{"class":47,"line":1763},[45,83158,52244],{"class":55},[45,83160,51711],{"class":51400},[45,83162,55414],{"class":55},[45,83164,51711],{"class":51400},[45,83166,51407],{"class":55},[45,83168,83169,83171,83173],{"class":47,"line":1768},[45,83170,52244],{"class":55},[45,83172,51913],{"class":51400},[45,83174,51407],{"class":55},[45,83176,83177,83179,83182,83184],{"class":47,"line":1774},[45,83178,11370],{"class":51},[45,83180,83181],{"class":79}," gift",[45,83183,13713],{"class":51},[45,83185,83186],{"class":62}," '50g的茶叶，清洗球'\n",[45,83188,83189],{"class":47,"line":1779},[45,83190,83191],{"class":337},"    \u002F\u002F 1.把字符串拆分为数组\n",[45,83193,83194],{"class":47,"line":1793},[45,83195,83196],{"class":337},"    \u002F\u002F console.log(gift.split(','))\n",[45,83198,83199],{"class":47,"line":1798},[45,83200,83201],{"class":337},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[45,83203,83204,83206,83208,83210,83213,83216,83218,83221,83223,83225,83227,83229,83231,83234,83236,83239,83241,83243,83245,83247],{"class":47,"line":1804},[45,83205,11370],{"class":51},[45,83207,74019],{"class":79},[45,83209,13713],{"class":51},[45,83211,83212],{"class":55}," gift.",[45,83214,83215],{"class":69},"split",[45,83217,282],{"class":55},[45,83219,83220],{"class":62},"'，'",[45,83222,30926],{"class":55},[45,83224,74144],{"class":69},[45,83226,282],{"class":55},[45,83228,79895],{"class":5366},[45,83230,79898],{"class":51},[45,83232,83233],{"class":62}," `\u003Cspan>【赠品】${",[45,83235,79895],{"class":55},[45,83237,83238],{"class":62},"}\u003C\u002Fspan>\u003Cbr>`",[45,83240,30926],{"class":55},[45,83242,74323],{"class":69},[45,83244,282],{"class":55},[45,83246,74328],{"class":62},[45,83248,139],{"class":55},[45,83250,83251,83253,83255,83257,83259,83261,83263],{"class":47,"line":1825},[45,83252,52507],{"class":55},[45,83254,54499],{"class":69},[45,83256,282],{"class":55},[45,83258,82031],{"class":62},[45,83260,74349],{"class":55},[45,83262,59],{"class":51},[45,83264,74085],{"class":55},[45,83266,83267,83269,83271],{"class":47,"line":1830},[45,83268,52517],{"class":55},[45,83270,51913],{"class":51400},[45,83272,51407],{"class":55},[45,83274,83275,83277,83279],{"class":47,"line":1844},[45,83276,51885],{"class":55},[45,83278,51900],{"class":51400},[45,83280,51407],{"class":55},[45,83282,83283],{"class":47,"line":1849},[45,83284,2550],{"emptyLinePlaceholder":207},[45,83286,83287,83289,83291],{"class":47,"line":1878},[45,83288,51885],{"class":55},[45,83290,50735],{"class":51400},[45,83292,51407],{"class":55},[22147,83294,83296],{"id":83295},"_41054-number","4.10.5.4 Number",[20,83298,83299],{},[23,83300],{"alt":25,"src":83301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[20,83303,83304],{},"整数也可以进行toFixed来保留小数",[20,83306,83307],{},"比如：",[20,83309,83310],{},"const price=10",[20,83312,83313],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22147,83315,83317],{"id":83316},"_41055-购物车展示","4.10.5.5 购物车展示",[20,83319,83320],{},[23,83321],{"alt":25,"src":83322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[36,83324,83326],{"className":50733,"code":83325,"language":50735,"meta":25,"style":25},"\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",[42,83327,83328,83338,83352,83356,83364,83378,83398,83410,83418,83424,83434,83444,83454,83458,83462,83468,83480,83494,83498,83502,83508,83520,83536,83546,83562,83566,83570,83576,83586,83596,83600,83604,83612,83624,83636,83648,83652,83656,83664,83676,83680,83684,83695,83705,83717,83729,83739,83743,83747,83755,83764,83776,83786,83796,83800,83804,83812,83821,83828,83838,83850,83854,83858,83867,83877,83888,83900,83912,83916,83920,83929,83939,83950,83954,83958,83964,83976,83988,83998,84008,84026,84038,84042,84046,84055,84067,84077,84087,84099,84103,84111,84119,84123,84131,84145,84153,84167,84195,84203,84211,84221,84225,84233,84241,84250,84258,84267,84277,84281,84285,84293,84301,84310,84318,84326,84339,84343,84347,84355,84363,84372,84380,84388,84403,84407,84411,84419,84427,84436,84444,84452,84466,84474,84478,84482,84487,84513,84518,84555,84560,84583,84588,84642,84647,84683,84687,84693,84698,84707,84721,84730,84749,84758,84768,84773,84778,84791,84796,84850,84876,84884,84892,84896],{"__ignoreMap":25},[45,83329,83330,83332,83334,83336],{"class":47,"line":48},[45,83331,51397],{"class":55},[45,83333,51401],{"class":51400},[45,83335,51404],{"class":69},[45,83337,51407],{"class":55},[45,83339,83340,83342,83344,83346,83348,83350],{"class":47,"line":66},[45,83341,1187],{"class":55},[45,83343,50735],{"class":51400},[45,83345,51416],{"class":69},[45,83347,59],{"class":55},[45,83349,51421],{"class":62},[45,83351,51407],{"class":55},[45,83353,83354],{"class":47,"line":1331},[45,83355,2550],{"emptyLinePlaceholder":207},[45,83357,83358,83360,83362],{"class":47,"line":1346},[45,83359,1187],{"class":55},[45,83361,51434],{"class":51400},[45,83363,51407],{"class":55},[45,83365,83366,83368,83370,83372,83374,83376],{"class":47,"line":1352},[45,83367,52244],{"class":55},[45,83369,51444],{"class":51400},[45,83371,51447],{"class":69},[45,83373,59],{"class":55},[45,83375,51452],{"class":62},[45,83377,51407],{"class":55},[45,83379,83380,83382,83384,83386,83388,83390,83392,83394,83396],{"class":47,"line":1366},[45,83381,52244],{"class":55},[45,83383,51444],{"class":51400},[45,83385,15069],{"class":69},[45,83387,59],{"class":55},[45,83389,51491],{"class":62},[45,83391,51471],{"class":69},[45,83393,59],{"class":55},[45,83395,51498],{"class":62},[45,83397,51407],{"class":55},[45,83399,83400,83402,83404,83406,83408],{"class":47,"line":1372},[45,83401,52244],{"class":55},[45,83403,51507],{"class":51400},[45,83405,51510],{"class":55},[45,83407,51507],{"class":51400},[45,83409,51407],{"class":55},[45,83411,83412,83414,83416],{"class":47,"line":1463},[45,83413,52244],{"class":55},[45,83415,196],{"class":51400},[45,83417,51407],{"class":55},[45,83419,83420,83422],{"class":47,"line":1469},[45,83421,6553],{"class":51400},[45,83423,15721],{"class":55},[45,83425,83426,83428,83430,83432],{"class":47,"line":1481},[45,83427,54795],{"class":79},[45,83429,51537],{"class":55},[45,83431,469],{"class":79},[45,83433,1442],{"class":55},[45,83435,83436,83438,83440,83442],{"class":47,"line":1763},[45,83437,54806],{"class":79},[45,83439,51537],{"class":55},[45,83441,469],{"class":79},[45,83443,1442],{"class":55},[45,83445,83446,83448,83450,83452],{"class":47,"line":1768},[45,83447,72696],{"class":79},[45,83449,51537],{"class":55},[45,83451,60605],{"class":79},[45,83453,1442],{"class":55},[45,83455,83456],{"class":47,"line":1774},[45,83457,2337],{"class":55},[45,83459,83460],{"class":47,"line":1779},[45,83461,2550],{"emptyLinePlaceholder":207},[45,83463,83464,83466],{"class":47,"line":1793},[45,83465,62223],{"class":69},[45,83467,15721],{"class":55},[45,83469,83470,83472,83474,83476,83478],{"class":47,"line":1798},[45,83471,54871],{"class":79},[45,83473,51537],{"class":55},[45,83475,78674],{"class":79},[45,83477,51592],{"class":51},[45,83479,1442],{"class":55},[45,83481,83482,83484,83486,83488,83490,83492],{"class":47,"line":1804},[45,83483,54806],{"class":79},[45,83485,51537],{"class":55},[45,83487,588],{"class":79},[45,83489,51592],{"class":51},[45,83491,51656],{"class":79},[45,83493,1442],{"class":55},[45,83495,83496],{"class":47,"line":1825},[45,83497,2337],{"class":55},[45,83499,83500],{"class":47,"line":1830},[45,83501,2550],{"emptyLinePlaceholder":207},[45,83503,83504,83506],{"class":47,"line":1844},[45,83505,78725],{"class":69},[45,83507,15721],{"class":55},[45,83509,83510,83512,83514,83516,83518],{"class":47,"line":1849},[45,83511,54795],{"class":79},[45,83513,51537],{"class":55},[45,83515,852],{"class":79},[45,83517,51592],{"class":51},[45,83519,1442],{"class":55},[45,83521,83522,83524,83526,83528,83530,83532,83534],{"class":47,"line":1878},[45,83523,61960],{"class":79},[45,83525,51537],{"class":55},[45,83527,28221],{"class":79},[45,83529,78780],{"class":79},[45,83531,78783],{"class":79},[45,83533,972],{"class":51},[45,83535,1442],{"class":55},[45,83537,83538,83540,83542,83544],{"class":47,"line":1883},[45,83539,55109],{"class":79},[45,83541,51537],{"class":55},[45,83543,51577],{"class":79},[45,83545,1442],{"class":55},[45,83547,83548,83550,83552,83554,83556,83558,83560],{"class":47,"line":1900},[45,83549,62077],{"class":79},[45,83551,51537],{"class":55},[45,83553,495],{"class":79},[45,83555,51592],{"class":51},[45,83557,51621],{"class":79},[45,83559,62344],{"class":79},[45,83561,1442],{"class":55},[45,83563,83564],{"class":47,"line":1905},[45,83565,2337],{"class":55},[45,83567,83568],{"class":47,"line":1910},[45,83569,2550],{"emptyLinePlaceholder":207},[45,83571,83572,83574],{"class":47,"line":1915},[45,83573,78843],{"class":69},[45,83575,15721],{"class":55},[45,83577,83578,83580,83582,83584],{"class":47,"line":1929},[45,83579,62125],{"class":79},[45,83581,51537],{"class":55},[45,83583,62130],{"class":79},[45,83585,1442],{"class":55},[45,83587,83588,83590,83592,83594],{"class":47,"line":1934},[45,83589,54984],{"class":79},[45,83591,51537],{"class":55},[45,83593,61918],{"class":79},[45,83595,1442],{"class":55},[45,83597,83598],{"class":47,"line":2727},[45,83599,2337],{"class":55},[45,83601,83602],{"class":47,"line":2741},[45,83603,2550],{"emptyLinePlaceholder":207},[45,83605,83606,83608,83610],{"class":47,"line":2749},[45,83607,78725],{"class":69},[45,83609,55715],{"class":51400},[45,83611,15721],{"class":55},[45,83613,83614,83616,83618,83620,83622],{"class":47,"line":2754},[45,83615,54871],{"class":79},[45,83617,51537],{"class":55},[45,83619,889],{"class":79},[45,83621,51592],{"class":51},[45,83623,1442],{"class":55},[45,83625,83626,83628,83630,83632,83634],{"class":47,"line":2760},[45,83627,54885],{"class":79},[45,83629,51537],{"class":55},[45,83631,889],{"class":79},[45,83633,51592],{"class":51},[45,83635,1442],{"class":55},[45,83637,83638,83640,83642,83644,83646],{"class":47,"line":2766},[45,83639,61850],{"class":79},[45,83641,51537],{"class":55},[45,83643,596],{"class":79},[45,83645,51592],{"class":51},[45,83647,1442],{"class":55},[45,83649,83650],{"class":47,"line":2771},[45,83651,2337],{"class":55},[45,83653,83654],{"class":47,"line":8098},[45,83655,2550],{"emptyLinePlaceholder":207},[45,83657,83658,83660,83662],{"class":47,"line":8122},[45,83659,78725],{"class":69},[45,83661,62404],{"class":69},[45,83663,15721],{"class":55},[45,83665,83666,83668,83670,83672,83674],{"class":47,"line":8127},[45,83667,54871],{"class":79},[45,83669,51537],{"class":55},[45,83671,1873],{"class":79},[45,83673,51592],{"class":51},[45,83675,1442],{"class":55},[45,83677,83678],{"class":47,"line":8133},[45,83679,2337],{"class":55},[45,83681,83682],{"class":47,"line":8160},[45,83683,2550],{"emptyLinePlaceholder":207},[45,83685,83686,83688,83690,83693],{"class":47,"line":8165},[45,83687,78725],{"class":69},[45,83689,62404],{"class":69},[45,83691,83692],{"class":69}," .tag",[45,83694,15721],{"class":55},[45,83696,83697,83699,83701,83703],{"class":47,"line":8171},[45,83698,55109],{"class":79},[45,83700,51537],{"class":55},[45,83702,60969],{"class":79},[45,83704,1442],{"class":55},[45,83706,83707,83709,83711,83713,83715],{"class":47,"line":8183},[45,83708,54795],{"class":79},[45,83710,51537],{"class":55},[45,83712,356],{"class":79},[45,83714,51592],{"class":51},[45,83716,1442],{"class":55},[45,83718,83719,83721,83723,83725,83727],{"class":47,"line":8195},[45,83720,55022],{"class":79},[45,83722,51537],{"class":55},[45,83724,775],{"class":79},[45,83726,51592],{"class":51},[45,83728,1442],{"class":55},[45,83730,83731,83733,83735,83737],{"class":47,"line":8207},[45,83732,57516],{"class":79},[45,83734,51537],{"class":55},[45,83736,62170],{"class":79},[45,83738,1442],{"class":55},[45,83740,83741],{"class":47,"line":9866},[45,83742,2337],{"class":55},[45,83744,83745],{"class":47,"line":9890},[45,83746,2550],{"emptyLinePlaceholder":207},[45,83748,83749,83751,83753],{"class":47,"line":9913},[45,83750,78725],{"class":69},[45,83752,79017],{"class":69},[45,83754,31566],{"class":55},[45,83756,83757,83759,83762],{"class":47,"line":9937},[45,83758,78725],{"class":69},[45,83760,83761],{"class":69}," .sub-total",[45,83763,15721],{"class":55},[45,83765,83766,83768,83770,83772,83774],{"class":47,"line":9942},[45,83767,55022],{"class":79},[45,83769,51537],{"class":55},[45,83771,927],{"class":79},[45,83773,51592],{"class":51},[45,83775,1442],{"class":55},[45,83777,83778,83780,83782,83784],{"class":47,"line":9947},[45,83779,57516],{"class":79},[45,83781,51537],{"class":55},[45,83783,79040],{"class":79},[45,83785,1442],{"class":55},[45,83787,83788,83790,83792,83794],{"class":47,"line":9952},[45,83789,61937],{"class":79},[45,83791,51537],{"class":55},[45,83793,495],{"class":79},[45,83795,1442],{"class":55},[45,83797,83798],{"class":47,"line":9961},[45,83799,2337],{"class":55},[45,83801,83802],{"class":47,"line":9966},[45,83803,2550],{"emptyLinePlaceholder":207},[45,83805,83806,83808,83810],{"class":47,"line":9972},[45,83807,78725],{"class":69},[45,83809,79057],{"class":69},[45,83811,31566],{"class":55},[45,83813,83814,83816,83819],{"class":47,"line":9993},[45,83815,78725],{"class":69},[45,83817,83818],{"class":69}," .sub-total::before",[45,83820,31566],{"class":55},[45,83822,83823,83826],{"class":47,"line":9999},[45,83824,83825],{"class":69},"    .amount::before",[45,83827,15721],{"class":55},[45,83829,83830,83832,83834,83836],{"class":47,"line":10013},[45,83831,79064],{"class":79},[45,83833,51537],{"class":55},[45,83835,79069],{"class":62},[45,83837,1442],{"class":55},[45,83839,83840,83842,83844,83846,83848],{"class":47,"line":10019},[45,83841,55022],{"class":79},[45,83843,51537],{"class":55},[45,83845,775],{"class":79},[45,83847,51592],{"class":51},[45,83849,1442],{"class":55},[45,83851,83852],{"class":47,"line":10046},[45,83853,2337],{"class":55},[45,83855,83856],{"class":47,"line":10055},[45,83857,2550],{"emptyLinePlaceholder":207},[45,83859,83860,83862,83865],{"class":47,"line":10061},[45,83861,78725],{"class":69},[45,83863,83864],{"class":69}," .spec",[45,83866,15721],{"class":55},[45,83868,83869,83871,83873,83875],{"class":47,"line":10069},[45,83870,61937],{"class":79},[45,83872,51537],{"class":55},[45,83874,356],{"class":79},[45,83876,1442],{"class":55},[45,83878,83879,83881,83883,83886],{"class":47,"line":10074},[45,83880,57516],{"class":79},[45,83882,51537],{"class":55},[45,83884,83885],{"class":79},"#888",[45,83887,1442],{"class":55},[45,83889,83890,83892,83894,83896,83898],{"class":47,"line":16753},[45,83891,55022],{"class":79},[45,83893,51537],{"class":55},[45,83895,826],{"class":79},[45,83897,51592],{"class":51},[45,83899,1442],{"class":55},[45,83901,83902,83904,83906,83908,83910],{"class":47,"line":16759},[45,83903,62100],{"class":79},[45,83905,51537],{"class":55},[45,83907,977],{"class":79},[45,83909,51592],{"class":51},[45,83911,1442],{"class":55},[45,83913,83914],{"class":47,"line":16782},[45,83915,2337],{"class":55},[45,83917,83918],{"class":47,"line":16788},[45,83919,2550],{"emptyLinePlaceholder":207},[45,83921,83922,83924,83927],{"class":47,"line":16811},[45,83923,78725],{"class":69},[45,83925,83926],{"class":69}," .count",[45,83928,15721],{"class":55},[45,83930,83931,83933,83935,83937],{"class":47,"line":16825},[45,83932,61937],{"class":79},[45,83934,51537],{"class":55},[45,83936,495],{"class":79},[45,83938,1442],{"class":55},[45,83940,83941,83943,83945,83948],{"class":47,"line":16845},[45,83942,57516],{"class":79},[45,83944,51537],{"class":55},[45,83946,83947],{"class":79},"#aaa",[45,83949,1442],{"class":55},[45,83951,83952],{"class":47,"line":16851},[45,83953,2337],{"class":55},[45,83955,83956],{"class":47,"line":16862},[45,83957,2550],{"emptyLinePlaceholder":207},[45,83959,83960,83962],{"class":47,"line":16885},[45,83961,72575],{"class":69},[45,83963,15721],{"class":55},[45,83965,83966,83968,83970,83972,83974],{"class":47,"line":16907},[45,83967,54871],{"class":79},[45,83969,51537],{"class":55},[45,83971,78674],{"class":79},[45,83973,51592],{"class":51},[45,83975,1442],{"class":55},[45,83977,83978,83980,83982,83984,83986],{"class":47,"line":16912},[45,83979,54806],{"class":79},[45,83981,51537],{"class":55},[45,83983,469],{"class":79},[45,83985,51656],{"class":79},[45,83987,1442],{"class":55},[45,83989,83990,83992,83994,83996],{"class":47,"line":16918},[45,83991,55109],{"class":79},[45,83993,51537],{"class":55},[45,83995,51577],{"class":79},[45,83997,1442],{"class":55},[45,83999,84000,84002,84004,84006],{"class":47,"line":16932},[45,84001,55120],{"class":79},[45,84003,51537],{"class":55},[45,84005,51680],{"class":79},[45,84007,1442],{"class":55},[45,84009,84010,84013,84015,84017,84019,84021,84024],{"class":47,"line":16945},[45,84011,84012],{"class":79},"      border-top",[45,84014,51537],{"class":55},[45,84016,495],{"class":79},[45,84018,51592],{"class":51},[45,84020,51621],{"class":79},[45,84022,84023],{"class":79}," #4e4e4e",[45,84025,1442],{"class":55},[45,84027,84028,84030,84032,84034,84036],{"class":47,"line":16950},[45,84029,54795],{"class":79},[45,84031,51537],{"class":55},[45,84033,977],{"class":79},[45,84035,51592],{"class":51},[45,84037,1442],{"class":55},[45,84039,84040],{"class":47,"line":16964},[45,84041,2337],{"class":55},[45,84043,84044],{"class":47,"line":16969},[45,84045,2550],{"emptyLinePlaceholder":207},[45,84047,84048,84050,84053],{"class":47,"line":16975},[45,84049,72575],{"class":69},[45,84051,84052],{"class":69}," .amount",[45,84054,15721],{"class":55},[45,84056,84057,84059,84061,84063,84065],{"class":47,"line":16980},[45,84058,55022],{"class":79},[45,84060,51537],{"class":55},[45,84062,927],{"class":79},[45,84064,51592],{"class":51},[45,84066,1442],{"class":55},[45,84068,84069,84071,84073,84075],{"class":47,"line":16994},[45,84070,57516],{"class":79},[45,84072,51537],{"class":55},[45,84074,79040],{"class":79},[45,84076,1442],{"class":55},[45,84078,84079,84081,84083,84085],{"class":47,"line":16999},[45,84080,62434],{"class":79},[45,84082,51537],{"class":55},[45,84084,51589],{"class":79},[45,84086,1442],{"class":55},[45,84088,84089,84091,84093,84095,84097],{"class":47,"line":17004},[45,84090,61850],{"class":79},[45,84092,51537],{"class":55},[45,84094,933],{"class":79},[45,84096,51592],{"class":51},[45,84098,1442],{"class":55},[45,84100,84101],{"class":47,"line":17018},[45,84102,2337],{"class":55},[45,84104,84105,84107,84109],{"class":47,"line":17030},[45,84106,52517],{"class":55},[45,84108,196],{"class":51400},[45,84110,51407],{"class":55},[45,84112,84113,84115,84117],{"class":47,"line":17035},[45,84114,51885],{"class":55},[45,84116,51434],{"class":51400},[45,84118,51407],{"class":55},[45,84120,84121],{"class":47,"line":17048},[45,84122,2550],{"emptyLinePlaceholder":207},[45,84124,84125,84127,84129],{"class":47,"line":17053},[45,84126,1187],{"class":55},[45,84128,51900],{"class":51400},[45,84130,51407],{"class":55},[45,84132,84133,84135,84137,84139,84141,84143],{"class":47,"line":17058},[45,84134,52244],{"class":55},[45,84136,51711],{"class":51400},[45,84138,53586],{"class":69},[45,84140,59],{"class":55},[45,84142,62708],{"class":62},[45,84144,51407],{"class":55},[45,84146,84147,84149,84151],{"class":47,"line":17063},[45,84148,52517],{"class":55},[45,84150,51711],{"class":51400},[45,84152,51407],{"class":55},[45,84154,84155,84157,84159,84161,84163,84165],{"class":47,"line":17076},[45,84156,52244],{"class":55},[45,84158,51711],{"class":51400},[45,84160,53586],{"class":69},[45,84162,59],{"class":55},[45,84164,62680],{"class":62},[45,84166,51407],{"class":55},[45,84168,84169,84171,84173,84176,84178,84180,84182,84185,84187,84189,84191,84193],{"class":47,"line":17081},[45,84170,51441],{"class":55},[45,84172,51711],{"class":51400},[45,84174,84175],{"class":55},">合计：\u003C",[45,84177,45],{"class":51400},[45,84179,53586],{"class":69},[45,84181,59],{"class":55},[45,84183,84184],{"class":62},"\"amount\"",[45,84186,55414],{"class":55},[45,84188,45],{"class":51400},[45,84190,55414],{"class":55},[45,84192,51711],{"class":51400},[45,84194,51407],{"class":55},[45,84196,84197,84199,84201],{"class":47,"line":32733},[45,84198,52517],{"class":55},[45,84200,51711],{"class":51400},[45,84202,51407],{"class":55},[45,84204,84205,84207,84209],{"class":47,"line":32739},[45,84206,52244],{"class":55},[45,84208,51913],{"class":51400},[45,84210,51407],{"class":55},[45,84212,84213,84215,84217,84219],{"class":47,"line":32745},[45,84214,11370],{"class":51},[45,84216,79477],{"class":79},[45,84218,13713],{"class":51},[45,84220,55547],{"class":55},[45,84222,84223],{"class":47,"line":32751},[45,84224,79486],{"class":55},[45,84226,84227,84229,84231],{"class":47,"line":32757},[45,84228,79491],{"class":55},[45,84230,79494],{"class":62},[45,84232,31566],{"class":55},[45,84234,84235,84237,84239],{"class":47,"line":32768},[45,84236,79501],{"class":55},[45,84238,79504],{"class":62},[45,84240,31566],{"class":55},[45,84242,84243,84245,84248],{"class":47,"line":32774},[45,84244,79511],{"class":55},[45,84246,84247],{"class":79},"289.9",[45,84249,31566],{"class":55},[45,84251,84252,84254,84256],{"class":47,"line":32794},[45,84253,79521],{"class":55},[45,84255,79524],{"class":62},[45,84257,31566],{"class":55},[45,84259,84260,84263,84265],{"class":47,"line":32800},[45,84261,84262],{"class":55},"        count: ",[45,84264,356],{"class":79},[45,84266,31566],{"class":55},[45,84268,84269,84272,84275],{"class":47,"line":32811},[45,84270,84271],{"class":55},"        spec: { color: ",[45,84273,84274],{"class":62},"'白色'",[45,84276,55704],{"class":55},[45,84278,84279],{"class":47,"line":32817},[45,84280,77992],{"class":55},[45,84282,84283],{"class":47,"line":32823},[45,84284,79486],{"class":55},[45,84286,84287,84289,84291],{"class":47,"line":32829},[45,84288,79491],{"class":55},[45,84290,79585],{"class":62},[45,84292,31566],{"class":55},[45,84294,84295,84297,84299],{"class":47,"line":32835},[45,84296,79501],{"class":55},[45,84298,79594],{"class":62},[45,84300,31566],{"class":55},[45,84302,84303,84305,84308],{"class":47,"line":32841},[45,84304,79511],{"class":55},[45,84306,84307],{"class":79},"109.8",[45,84309,31566],{"class":55},[45,84311,84312,84314,84316],{"class":47,"line":32847},[45,84313,79521],{"class":55},[45,84315,79612],{"class":62},[45,84317,31566],{"class":55},[45,84319,84320,84322,84324],{"class":47,"line":32853},[45,84321,84262],{"class":55},[45,84323,350],{"class":79},[45,84325,31566],{"class":55},[45,84327,84328,84331,84333,84335,84337],{"class":47,"line":32873},[45,84329,84330],{"class":55},"        spec: { size: ",[45,84332,82003],{"class":62},[45,84334,55564],{"class":55},[45,84336,82008],{"class":62},[45,84338,55704],{"class":55},[45,84340,84341],{"class":47,"line":32879},[45,84342,77992],{"class":55},[45,84344,84345],{"class":47,"line":32895},[45,84346,79486],{"class":55},[45,84348,84349,84351,84353],{"class":47,"line":32901},[45,84350,79491],{"class":55},[45,84352,79629],{"class":62},[45,84354,31566],{"class":55},[45,84356,84357,84359,84361],{"class":47,"line":32915},[45,84358,79501],{"class":55},[45,84360,79638],{"class":62},[45,84362,31566],{"class":55},[45,84364,84365,84367,84370],{"class":47,"line":32921},[45,84366,79511],{"class":55},[45,84368,84369],{"class":79},"488",[45,84371,31566],{"class":55},[45,84373,84374,84376,84378],{"class":47,"line":32936},[45,84375,79521],{"class":55},[45,84377,79656],{"class":62},[45,84379,31566],{"class":55},[45,84381,84382,84384,84386],{"class":47,"line":32942},[45,84383,84262],{"class":55},[45,84385,495],{"class":79},[45,84387,31566],{"class":55},[45,84389,84390,84392,84395,84398,84401],{"class":47,"line":32951},[45,84391,84271],{"class":55},[45,84393,84394],{"class":62},"'青色'",[45,84396,84397],{"class":55},", sum: ",[45,84399,84400],{"class":62},"'一大四小'",[45,84402,55704],{"class":55},[45,84404,84405],{"class":47,"line":32957},[45,84406,77992],{"class":55},[45,84408,84409],{"class":47,"line":32966},[45,84410,79486],{"class":55},[45,84412,84413,84415,84417],{"class":47,"line":32972},[45,84414,79491],{"class":55},[45,84416,79673],{"class":62},[45,84418,31566],{"class":55},[45,84420,84421,84423,84425],{"class":47,"line":32978},[45,84422,79501],{"class":55},[45,84424,79682],{"class":62},[45,84426,31566],{"class":55},[45,84428,84429,84431,84434],{"class":47,"line":32987},[45,84430,79511],{"class":55},[45,84432,84433],{"class":79},"139",[45,84435,31566],{"class":55},[45,84437,84438,84440,84442],{"class":47,"line":32993},[45,84439,79521],{"class":55},[45,84441,79700],{"class":62},[45,84443,31566],{"class":55},[45,84445,84446,84448,84450],{"class":47,"line":33004},[45,84447,84262],{"class":55},[45,84449,495],{"class":79},[45,84451,31566],{"class":55},[45,84453,84454,84456,84459,84461,84464],{"class":47,"line":33010},[45,84455,84330],{"class":55},[45,84457,84458],{"class":62},"'小号'",[45,84460,55564],{"class":55},[45,84462,84463],{"class":62},"'紫色'",[45,84465,55570],{"class":55},[45,84467,84468,84471],{"class":47,"line":33029},[45,84469,84470],{"class":55},"        gift: ",[45,84472,84473],{"class":62},"'50g茶叶,清洗球'\n",[45,84475,84476],{"class":47,"line":33035},[45,84477,52498],{"class":55},[45,84479,84480],{"class":47,"line":33046},[45,84481,53209],{"class":55},[45,84483,84484],{"class":47,"line":33052},[45,84485,84486],{"class":337},"    \u002F\u002F  1.根据数据渲染页面\n",[45,84488,84489,84491,84493,84495,84497,84499,84501,84503,84505,84507,84509,84511],{"class":47,"line":33072},[45,84490,52507],{"class":55},[45,84492,54499],{"class":69},[45,84494,282],{"class":55},[45,84496,80001],{"class":62},[45,84498,74349],{"class":55},[45,84500,59],{"class":51},[45,84502,80148],{"class":55},[45,84504,74144],{"class":69},[45,84506,282],{"class":55},[45,84508,79895],{"class":5366},[45,84510,79898],{"class":51},[45,84512,15721],{"class":55},[45,84514,84515],{"class":47,"line":33088},[45,84516,84517],{"class":337},"      \u002F\u002F 对象解构\n",[45,84519,84520,84522,84524,84526,84528,84530,84532,84535,84537,84539,84541,84544,84546,84549,84551,84553],{"class":47,"line":33094},[45,84521,58328],{"class":51},[45,84523,79907],{"class":55},[45,84525,79920],{"class":79},[45,84527,12584],{"class":55},[45,84529,79910],{"class":79},[45,84531,12584],{"class":55},[45,84533,84534],{"class":79},"count",[45,84536,12584],{"class":55},[45,84538,79915],{"class":79},[45,84540,12584],{"class":55},[45,84542,84543],{"class":79},"spec",[45,84545,12584],{"class":55},[45,84547,84548],{"class":79},"gift",[45,84550,79923],{"class":55},[45,84552,59],{"class":51},[45,84554,79928],{"class":55},[45,84556,84557],{"class":47,"line":33108},[45,84558,84559],{"class":337},"      \u002F\u002F 规格文字模块处理\n",[45,84561,84562,84564,84567,84569,84571,84573,84575,84577,84579,84581],{"class":47,"line":33114},[45,84563,58328],{"class":51},[45,84565,84566],{"class":79}," text",[45,84568,13713],{"class":51},[45,84570,82038],{"class":55},[45,84572,82041],{"class":69},[45,84574,82044],{"class":55},[45,84576,74323],{"class":69},[45,84578,282],{"class":55},[45,84580,82051],{"class":62},[45,84582,139],{"class":55},[45,84584,84585],{"class":47,"line":33120},[45,84586,84587],{"class":337},"      \u002F\u002F 处理赠品模块\n",[45,84589,84590,84592,84594,84596,84599,84601,84603,84605,84607,84610,84612,84614,84616,84618,84620,84623,84625,84628,84630,84632,84634,84636,84638,84640],{"class":47,"line":33131},[45,84591,58328],{"class":51},[45,84593,74019],{"class":79},[45,84595,13713],{"class":51},[45,84597,84598],{"class":55}," gift ",[45,84600,1263],{"class":51},[45,84602,83212],{"class":55},[45,84604,83215],{"class":69},[45,84606,282],{"class":55},[45,84608,84609],{"class":62},"','",[45,84611,30926],{"class":55},[45,84613,74144],{"class":69},[45,84615,282],{"class":55},[45,84617,79895],{"class":5366},[45,84619,79898],{"class":51},[45,84621,84622],{"class":62}," `\u003Cspan class=\"tag\">【赠品】${",[45,84624,79895],{"class":55},[45,84626,84627],{"class":62},"}\u003C\u002Fspan>`",[45,84629,30926],{"class":55},[45,84631,74323],{"class":69},[45,84633,282],{"class":55},[45,84635,74328],{"class":62},[45,84637,13863],{"class":55},[45,84639,1136],{"class":51},[45,84641,70204],{"class":62},[45,84643,84644],{"class":47,"line":33137},[45,84645,84646],{"class":337},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[45,84648,84649,84651,84654,84656,84659,84661,84663,84665,84668,84670,84672,84674,84677,84679,84681],{"class":47,"line":33143},[45,84650,58328],{"class":51},[45,84652,84653],{"class":79}," subtotal",[45,84655,13713],{"class":51},[45,84657,84658],{"class":55}," ((price ",[45,84660,732],{"class":51},[45,84662,5904],{"class":79},[45,84664,6668],{"class":51},[45,84666,84667],{"class":55}," count) ",[45,84669,861],{"class":51},[45,84671,5904],{"class":79},[45,84673,30926],{"class":55},[45,84675,84676],{"class":69},"toFixed",[45,84678,282],{"class":55},[45,84680,356],{"class":79},[45,84682,139],{"class":55},[45,84684,84685],{"class":47,"line":33153},[45,84686,2550],{"emptyLinePlaceholder":207},[45,84688,84689,84691],{"class":47,"line":33159},[45,84690,74082],{"class":51},[45,84692,70268],{"class":62},[45,84694,84695],{"class":47,"line":33170},[45,84696,84697],{"class":62},"        \u003Cdiv class=\"item\">\n",[45,84699,84700,84703,84705],{"class":47,"line":33176},[45,84701,84702],{"class":62},"          \u003Cimg src=\"${",[45,84704,79920],{"class":55},[45,84706,79952],{"class":62},[45,84708,84709,84712,84714,84717,84719],{"class":47,"line":33186},[45,84710,84711],{"class":62},"          \u003Cp class=\"name\">${",[45,84713,79910],{"class":55},[45,84715,84716],{"class":62},"}${",[45,84718,1451],{"class":55},[45,84720,79962],{"class":62},[45,84722,84723,84726,84728],{"class":47,"line":33191},[45,84724,84725],{"class":62},"          \u003Cp class=\"spec\">${",[45,84727,5337],{"class":55},[45,84729,79962],{"class":62},[45,84731,84732,84735,84737,84739,84741,84743,84745,84747],{"class":47,"line":33197},[45,84733,84734],{"class":62},"          \u003Cp class=\"price\">${",[45,84736,79915],{"class":55},[45,84738,835],{"class":62},[45,84740,84676],{"class":69},[45,84742,282],{"class":62},[45,84744,356],{"class":79},[45,84746,706],{"class":62},[45,84748,79962],{"class":62},[45,84750,84751,84754,84756],{"class":47,"line":33246},[45,84752,84753],{"class":62},"          \u003Cp class=\"count\">x${",[45,84755,84534],{"class":55},[45,84757,79962],{"class":62},[45,84759,84760,84763,84766],{"class":47,"line":33293},[45,84761,84762],{"class":62},"          \u003Cp class=\"sub-total\">${",[45,84764,84765],{"class":55},"subtotal",[45,84767,79962],{"class":62},[45,84769,84770],{"class":47,"line":33298},[45,84771,84772],{"class":62},"        \u003C\u002Fdiv> \n",[45,84774,84775],{"class":47,"line":33304},[45,84776,84777],{"class":62},"             `\n",[45,84779,84780,84783,84785,84787,84789],{"class":47,"line":33323},[45,84781,84782],{"class":55},"    }).",[45,84784,74323],{"class":69},[45,84786,282],{"class":55},[45,84788,74328],{"class":62},[45,84790,139],{"class":55},[45,84792,84793],{"class":47,"line":33329},[45,84794,84795],{"class":337},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[45,84797,84798,84800,84802,84804,84806,84809,84811,84814,84816,84818,84820,84823,84826,84828,84831,84833,84835,84837,84840,84842,84844,84846,84848],{"class":47,"line":33349},[45,84799,11370],{"class":51},[45,84801,62885],{"class":79},[45,84803,13713],{"class":51},[45,84805,80148],{"class":55},[45,84807,84808],{"class":69},"reduce",[45,84810,2526],{"class":55},[45,84812,84813],{"class":5366},"prev",[45,84815,12584],{"class":55},[45,84817,79895],{"class":5366},[45,84819,13863],{"class":55},[45,84821,84822],{"class":51},"=>",[45,84824,84825],{"class":55}," prev ",[45,84827,758],{"class":51},[45,84829,84830],{"class":55}," (item.price ",[45,84832,732],{"class":51},[45,84834,5904],{"class":79},[45,84836,6668],{"class":51},[45,84838,84839],{"class":55}," item.count) ",[45,84841,861],{"class":51},[45,84843,5904],{"class":79},[45,84845,12584],{"class":55},[45,84847,469],{"class":79},[45,84849,139],{"class":55},[45,84851,84852,84854,84856,84858,84861,84863,84865,84868,84870,84872,84874],{"class":47,"line":33355},[45,84853,52507],{"class":55},[45,84855,54499],{"class":69},[45,84857,282],{"class":55},[45,84859,84860],{"class":62},"'.amount'",[45,84862,74349],{"class":55},[45,84864,59],{"class":51},[45,84866,84867],{"class":55}," total.",[45,84869,84676],{"class":69},[45,84871,282],{"class":55},[45,84873,356],{"class":79},[45,84875,139],{"class":55},[45,84877,84878,84880,84882],{"class":47,"line":33361},[45,84879,52517],{"class":55},[45,84881,51913],{"class":51400},[45,84883,51407],{"class":55},[45,84885,84886,84888,84890],{"class":47,"line":33371},[45,84887,51885],{"class":55},[45,84889,51900],{"class":51400},[45,84891,51407],{"class":55},[45,84893,84894],{"class":47,"line":33376},[45,84895,2550],{"emptyLinePlaceholder":207},[45,84897,84898,84900,84902],{"class":47,"line":33382},[45,84899,51885],{"class":55},[45,84901,50735],{"class":51400},[45,84903,51407],{"class":55},[15,84905,84907],{"id":84906},"_411-编程思想","4.11 编程思想",[249,84909,84911],{"id":84910},"_4111-面向过程介绍","4.11.1 面向过程介绍",[20,84913,84914,84917],{},[427,84915,84916],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[20,84919,84920],{},"调用就可以了",[20,84922,84923],{},[23,84924],{"alt":25,"src":84925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[249,84927,84929],{"id":84928},"_4112-面向对象","4.11.2 面向对象",[20,84931,84932],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[20,84934,84935],{},[23,84936],{"alt":25,"src":84937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[20,84939,84940],{},"面向对象的特性：",[166,84942,84943,84946,84949],{},[169,84944,84945],{},"封装性",[169,84947,84948],{},"继承性",[169,84950,84951],{},"多态性",[249,84953,84955],{"id":84954},"_4113-两者比较","4.11.3 两者比较",[20,84957,84958],{},[23,84959],{"alt":25,"src":84960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[15,84962,84964],{"id":84963},"_412-构造函数回顾","4.12 构造函数回顾",[20,84966,84967],{},[23,84968],{"alt":25,"src":84969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[20,84971,84972],{},[23,84973],{"alt":25,"src":84974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[20,84976,84977],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[20,84979,84980],{},[23,84981],{"alt":25,"src":84982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[15,84984,84986],{"id":84985},"_413-原型","4.13 原型",[249,84988,84990],{"id":84989},"_4131-原型对象的认识","4.13.1 原型对象的认识",[20,84992,84993],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[20,84995,84996],{},[23,84997],{"alt":25,"src":84998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[20,85000,85001],{},[23,85002],{"alt":25,"src":85003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[20,85005,85006],{},"原型是构造函数的属性，它也是一个对象",[20,85008,85009],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[20,85011,85012],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[36,85014,85016],{"className":53167,"code":85015,"language":53169,"meta":25,"style":25},"\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",[42,85017,85018,85026,85031,85039,85044,85049,85054,85059,85064,85068,85072,85076,85081,85086,85090,85095,85100,85105,85110,85115,85119,85127],{"__ignoreMap":25},[45,85019,85020,85022,85024],{"class":47,"line":48},[45,85021,1187],{"class":55},[45,85023,51900],{"class":51400},[45,85025,51407],{"class":55},[45,85027,85028],{"class":47,"line":66},[45,85029,85030],{"class":337},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[45,85032,85033,85035,85037],{"class":47,"line":1331},[45,85034,52244],{"class":55},[45,85036,51913],{"class":51400},[45,85038,51407],{"class":55},[45,85040,85041],{"class":47,"line":1346},[45,85042,85043],{"class":55},"    function Star(uname, age) {\n",[45,85045,85046],{"class":47,"line":1352},[45,85047,85048],{"class":55},"      this.uname = uname,\n",[45,85050,85051],{"class":47,"line":1366},[45,85052,85053],{"class":55},"        this.age = age\n",[45,85055,85056],{"class":47,"line":1372},[45,85057,85058],{"class":55},"      \u002F\u002F this.sing = function () {\n",[45,85060,85061],{"class":47,"line":1463},[45,85062,85063],{"class":55},"      \u002F\u002F   console.log('唱歌')\n",[45,85065,85066],{"class":47,"line":1469},[45,85067,2550],{"emptyLinePlaceholder":207},[45,85069,85070],{"class":47,"line":1481},[45,85071,60137],{"class":55},[45,85073,85074],{"class":47,"line":1763},[45,85075,2337],{"class":55},[45,85077,85078],{"class":47,"line":1768},[45,85079,85080],{"class":55},"    Star.prototype.sing = function () {\n",[45,85082,85083],{"class":47,"line":1774},[45,85084,85085],{"class":55},"      console.log('唱歌')\n",[45,85087,85088],{"class":47,"line":1779},[45,85089,2337],{"class":55},[45,85091,85092],{"class":47,"line":1793},[45,85093,85094],{"class":55},"    \u002F\u002F console.dir(Star.prototype)\n",[45,85096,85097],{"class":47,"line":1798},[45,85098,85099],{"class":55},"    const pink = new Star('pink', 18)\n",[45,85101,85102],{"class":47,"line":1804},[45,85103,85104],{"class":55},"    const red = new Star('red', 20)\n",[45,85106,85107],{"class":47,"line":1825},[45,85108,85109],{"class":55},"    pink.sing()\n",[45,85111,85112],{"class":47,"line":1830},[45,85113,85114],{"class":55},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[45,85116,85117],{"class":47,"line":1844},[45,85118,2550],{"emptyLinePlaceholder":207},[45,85120,85121,85123,85125],{"class":47,"line":1849},[45,85122,52517],{"class":55},[45,85124,51913],{"class":51400},[45,85126,51407],{"class":55},[45,85128,85129,85131,85133],{"class":47,"line":1878},[45,85130,51885],{"class":55},[45,85132,51900],{"class":51400},[45,85134,51407],{"class":55},[20,85136,85137],{},[23,85138],{"alt":25,"src":85139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[36,85141,85143],{"className":53167,"code":85142,"language":53169,"meta":25,"style":25},"\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",[42,85144,85145,85153,85161,85166,85171,85176,85181,85185,85190,85195,85200,85204,85209,85213,85217,85222,85226,85234],{"__ignoreMap":25},[45,85146,85147,85149,85151],{"class":47,"line":48},[45,85148,1187],{"class":55},[45,85150,51900],{"class":51400},[45,85152,51407],{"class":55},[45,85154,85155,85157,85159],{"class":47,"line":66},[45,85156,52244],{"class":55},[45,85158,51913],{"class":51400},[45,85160,51407],{"class":55},[45,85162,85163],{"class":47,"line":1331},[45,85164,85165],{"class":55},"    let that\n",[45,85167,85168],{"class":47,"line":1346},[45,85169,85170],{"class":55},"    function Star(uname) {\n",[45,85172,85173],{"class":47,"line":1352},[45,85174,85175],{"class":55},"      this.uname = uname\n",[45,85177,85178],{"class":47,"line":1366},[45,85179,85180],{"class":55},"      that = this\n",[45,85182,85183],{"class":47,"line":1372},[45,85184,2337],{"class":55},[45,85186,85187],{"class":47,"line":1463},[45,85188,85189],{"class":55},"    \u002F\u002F 实例对象是 ldh\n",[45,85191,85192],{"class":47,"line":1469},[45,85193,85194],{"class":55},"    const ldh = new Star('刘德华')\n",[45,85196,85197],{"class":47,"line":1481},[45,85198,85199],{"class":55},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[45,85201,85202],{"class":47,"line":1763},[45,85203,2550],{"emptyLinePlaceholder":207},[45,85205,85206],{"class":47,"line":1768},[45,85207,85208],{"class":55},"    Star.sing = function () {\n",[45,85210,85211],{"class":47,"line":1774},[45,85212,85085],{"class":55},[45,85214,85215],{"class":47,"line":1779},[45,85216,2337],{"class":55},[45,85218,85219],{"class":47,"line":1793},[45,85220,85221],{"class":55},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[45,85223,85224],{"class":47,"line":1798},[45,85225,2550],{"emptyLinePlaceholder":207},[45,85227,85228,85230,85232],{"class":47,"line":1804},[45,85229,52517],{"class":55},[45,85231,51913],{"class":51400},[45,85233,51407],{"class":55},[45,85235,85236,85238,85240],{"class":47,"line":1825},[45,85237,51885],{"class":55},[45,85239,51900],{"class":51400},[45,85241,51407],{"class":55},[20,85243,85244],{},"构造函数的this指向的是实例对象；",[20,85246,85247],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[249,85249,85251],{"id":85250},"_4132-数组扩展方法","4.13.2 数组扩展方法",[20,85253,85254],{},[23,85255],{"alt":25,"src":85256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[36,85258,85260],{"className":53167,"code":85259,"language":53169,"meta":25,"style":25},"\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",[42,85261,85262,85270,85278,85283,85288,85293,85298,85303,85308,85313,85318,85323,85328,85332,85337,85342,85347,85352,85356,85361,85366,85371,85376,85380,85385,85390,85395,85400,85404,85409,85413,85421],{"__ignoreMap":25},[45,85263,85264,85266,85268],{"class":47,"line":48},[45,85265,1187],{"class":55},[45,85267,51900],{"class":51400},[45,85269,51407],{"class":55},[45,85271,85272,85274,85276],{"class":47,"line":66},[45,85273,52244],{"class":55},[45,85275,51913],{"class":51400},[45,85277,51407],{"class":55},[45,85279,85280],{"class":47,"line":1331},[45,85281,85282],{"class":55},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[45,85284,85285],{"class":47,"line":1346},[45,85286,85287],{"class":55},"    const arr = [1, 2, 3]\n",[45,85289,85290],{"class":47,"line":1352},[45,85291,85292],{"class":55},"    \u002F\u002F 自己定义数组的扩展方法\n",[45,85294,85295],{"class":47,"line":1366},[45,85296,85297],{"class":55},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[45,85299,85300],{"class":47,"line":1372},[45,85301,85302],{"class":55},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[45,85304,85305],{"class":47,"line":1463},[45,85306,85307],{"class":55},"    \u002F\u002F ①.最大值\n",[45,85309,85310],{"class":47,"line":1469},[45,85311,85312],{"class":55},"    Array.prototype.max = function () {\n",[45,85314,85315],{"class":47,"line":1481},[45,85316,85317],{"class":55},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[45,85319,85320],{"class":47,"line":1763},[45,85321,85322],{"class":55},"      return Math.max(...this)\n",[45,85324,85325],{"class":47,"line":1768},[45,85326,85327],{"class":55},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[45,85329,85330],{"class":47,"line":1774},[45,85331,2337],{"class":55},[45,85333,85334],{"class":47,"line":1779},[45,85335,85336],{"class":55},"    console.log(arr.max())\n",[45,85338,85339],{"class":47,"line":1793},[45,85340,85341],{"class":55},"    \u002F\u002F ②最小值\n",[45,85343,85344],{"class":47,"line":1798},[45,85345,85346],{"class":55},"    Array.prototype.min = function () {\n",[45,85348,85349],{"class":47,"line":1804},[45,85350,85351],{"class":55},"      return Math.min(...this)\n",[45,85353,85354],{"class":47,"line":1825},[45,85355,2337],{"class":55},[45,85357,85358],{"class":47,"line":1830},[45,85359,85360],{"class":55},"    console.log(arr.min())\n",[45,85362,85363],{"class":47,"line":1844},[45,85364,85365],{"class":55},"    \u002F\u002F③求和\n",[45,85367,85368],{"class":47,"line":1849},[45,85369,85370],{"class":55},"    Array.prototype.sum = function () {\n",[45,85372,85373],{"class":47,"line":1878},[45,85374,85375],{"class":55},"      return this.reduce((prev, current) => prev + current, 0)\n",[45,85377,85378],{"class":47,"line":1883},[45,85379,2337],{"class":55},[45,85381,85382],{"class":47,"line":1900},[45,85383,85384],{"class":55},"    console.log(arr.sum())\n",[45,85386,85387],{"class":47,"line":1905},[45,85388,85389],{"class":55},"    \u002F\u002F ③排序\n",[45,85391,85392],{"class":47,"line":1910},[45,85393,85394],{"class":55},"    Array.prototype.rever = function () {\n",[45,85396,85397],{"class":47,"line":1915},[45,85398,85399],{"class":55},"      return this.reverse()\n",[45,85401,85402],{"class":47,"line":1929},[45,85403,2337],{"class":55},[45,85405,85406],{"class":47,"line":1934},[45,85407,85408],{"class":55},"    console.log(arr.rever())\n",[45,85410,85411],{"class":47,"line":2727},[45,85412,2550],{"emptyLinePlaceholder":207},[45,85414,85415,85417,85419],{"class":47,"line":2741},[45,85416,52517],{"class":55},[45,85418,51913],{"class":51400},[45,85420,51407],{"class":55},[45,85422,85423,85425,85427],{"class":47,"line":2749},[45,85424,51885],{"class":55},[45,85426,51900],{"class":51400},[45,85428,51407],{"class":55},[20,85430,85431],{},[23,85432],{"alt":25,"src":85433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[249,85435,85437],{"id":85436},"_4133-constructor-属性","4.13.3 constructor 属性",[20,85439,85440],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[20,85442,85443],{},[23,85444],{"alt":25,"src":85445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[36,85447,85449],{"className":53167,"code":85448,"language":53169,"meta":25,"style":25},"\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",[42,85450,85451,85459,85467,85472,85477,85481,85486,85491,85496,85504],{"__ignoreMap":25},[45,85452,85453,85455,85457],{"class":47,"line":48},[45,85454,1187],{"class":55},[45,85456,51900],{"class":51400},[45,85458,51407],{"class":55},[45,85460,85461,85463,85465],{"class":47,"line":66},[45,85462,52244],{"class":55},[45,85464,51913],{"class":51400},[45,85466,51407],{"class":55},[45,85468,85469],{"class":47,"line":1331},[45,85470,85471],{"class":55},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[45,85473,85474],{"class":47,"line":1346},[45,85475,85476],{"class":55},"    function Star() {\n",[45,85478,85479],{"class":47,"line":1352},[45,85480,2337],{"class":55},[45,85482,85483],{"class":47,"line":1366},[45,85484,85485],{"class":55},"    const ldh = new Star()\n",[45,85487,85488],{"class":47,"line":1372},[45,85489,85490],{"class":55},"    console.log(Star.prototype)\n",[45,85492,85493],{"class":47,"line":1463},[45,85494,85495],{"class":55},"    console.log(Star.prototype.constructor === Star)\n",[45,85497,85498,85500,85502],{"class":47,"line":1469},[45,85499,52517],{"class":55},[45,85501,51913],{"class":51400},[45,85503,51407],{"class":55},[45,85505,85506,85508,85510],{"class":47,"line":1481},[45,85507,51885],{"class":55},[45,85509,51900],{"class":51400},[45,85511,51407],{"class":55},[20,85513,85514],{},[23,85515],{"alt":25,"src":85516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[20,85518,85519],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[36,85521,85523],{"className":53167,"code":85522,"language":53169,"meta":25,"style":25},"  \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",[42,85524,85525,85533,85537,85541,85545,85550,85555,85560,85564,85569,85574,85579,85584,85589,85594,85598,85602,85607,85612,85617,85621,85626,85631,85635,85639,85643],{"__ignoreMap":25},[45,85526,85527,85529,85531],{"class":47,"line":48},[45,85528,52244],{"class":55},[45,85530,51913],{"class":51400},[45,85532,51407],{"class":55},[45,85534,85535],{"class":47,"line":66},[45,85536,85471],{"class":55},[45,85538,85539],{"class":47,"line":1331},[45,85540,85476],{"class":55},[45,85542,85543],{"class":47,"line":1346},[45,85544,2337],{"class":55},[45,85546,85547],{"class":47,"line":1352},[45,85548,85549],{"class":55},"    \u002F\u002F const ldh = new Star()\n",[45,85551,85552],{"class":47,"line":1366},[45,85553,85554],{"class":55},"    \u002F\u002F console.log(Star.prototype)\n",[45,85556,85557],{"class":47,"line":1372},[45,85558,85559],{"class":55},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[45,85561,85562],{"class":47,"line":1463},[45,85563,2550],{"emptyLinePlaceholder":207},[45,85565,85566],{"class":47,"line":1469},[45,85567,85568],{"class":55},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[45,85570,85571],{"class":47,"line":1481},[45,85572,85573],{"class":55},"    \u002F\u002F Star.prototype.sing = function () {\n",[45,85575,85576],{"class":47,"line":1763},[45,85577,85578],{"class":55},"    \u002F\u002F   console.log('唱歌')\n",[45,85580,85581],{"class":47,"line":1768},[45,85582,85583],{"class":55},"    \u002F\u002F }\n",[45,85585,85586],{"class":47,"line":1774},[45,85587,85588],{"class":55},"    \u002F\u002F Star.prototype.dance = function () {\n",[45,85590,85591],{"class":47,"line":1779},[45,85592,85593],{"class":55},"    \u002F\u002F   console.log('跳舞')\n",[45,85595,85596],{"class":47,"line":1793},[45,85597,85583],{"class":55},[45,85599,85600],{"class":47,"line":1798},[45,85601,85490],{"class":55},[45,85603,85604],{"class":47,"line":1804},[45,85605,85606],{"class":55},"    Star.prototype = {\n",[45,85608,85609],{"class":47,"line":1825},[45,85610,85611],{"class":55},"      sing: function () {\n",[45,85613,85614],{"class":47,"line":1830},[45,85615,85616],{"class":55},"        console.log('唱歌')\n",[45,85618,85619],{"class":47,"line":1844},[45,85620,77992],{"class":55},[45,85622,85623],{"class":47,"line":1849},[45,85624,85625],{"class":55},"      dance: function () {\n",[45,85627,85628],{"class":47,"line":1878},[45,85629,85630],{"class":55},"        console.log('跳舞')\n",[45,85632,85633],{"class":47,"line":1883},[45,85634,52498],{"class":55},[45,85636,85637],{"class":47,"line":1900},[45,85638,2337],{"class":55},[45,85640,85641],{"class":47,"line":1905},[45,85642,85490],{"class":55},[45,85644,85645,85647,85649],{"class":47,"line":1910},[45,85646,52517],{"class":55},[45,85648,51913],{"class":51400},[45,85650,51407],{"class":55},[20,85652,85653],{},"进行输出结果后会发现：",[20,85655,85656],{},[23,85657],{"alt":25,"src":85658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[20,85660,85661],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[20,85663,85664],{},"所以，要重新指回创造这个原型对象的构造函数",[36,85666,85668],{"className":71313,"code":85667,"language":71315,"meta":25,"style":25},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[42,85669,85670,85684,85689,85694,85705,85718,85723,85734,85748,85752],{"__ignoreMap":25},[45,85671,85672,85675,85677,85680,85682],{"class":47,"line":48},[45,85673,85674],{"class":79},"Star",[45,85676,835],{"class":55},[45,85678,85679],{"class":79},"prototype",[45,85681,13713],{"class":51},[45,85683,15721],{"class":55},[45,85685,85686],{"class":47,"line":66},[45,85687,85688],{"class":337},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[45,85690,85691],{"class":47,"line":1331},[45,85692,85693],{"class":55},"  constructor: Star,\n",[45,85695,85696,85699,85701,85703],{"class":47,"line":1346},[45,85697,85698],{"class":69},"  sing",[45,85700,51537],{"class":55},[45,85702,54549],{"class":51},[45,85704,54552],{"class":55},[45,85706,85707,85709,85711,85713,85716],{"class":47,"line":1352},[45,85708,73853],{"class":55},[45,85710,58347],{"class":69},[45,85712,282],{"class":55},[45,85714,85715],{"class":62},"'唱歌'",[45,85717,139],{"class":55},[45,85719,85720],{"class":47,"line":1366},[45,85721,85722],{"class":55},"   },\n",[45,85724,85725,85728,85730,85732],{"class":47,"line":1372},[45,85726,85727],{"class":69},"   dance",[45,85729,51537],{"class":55},[45,85731,54549],{"class":51},[45,85733,54552],{"class":55},[45,85735,85736,85739,85741,85743,85746],{"class":47,"line":1463},[45,85737,85738],{"class":55},"     console.",[45,85740,58347],{"class":69},[45,85742,282],{"class":55},[45,85744,85745],{"class":62},"'跳舞'",[45,85747,139],{"class":55},[45,85749,85750],{"class":47,"line":1469},[45,85751,4459],{"class":55},[45,85753,85754],{"class":47,"line":1481},[45,85755,1716],{"class":55},[20,85757,85758],{},[23,85759],{"alt":25,"src":85760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[20,85762,85763],{},"总结1：",[20,85765,85766],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[20,85768,85769],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[20,85771,85772],{},"constructor指的是他的来源",[20,85774,85775],{},[23,85776],{"alt":25,"src":85777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[20,85779,85780],{},[23,85781],{"alt":25,"src":85782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[20,85784,85785],{},"总结2：",[20,85787,85788],{},[23,85789],{"alt":25,"src":85790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[20,85792,85793],{},[23,85794],{"alt":25,"src":85795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[20,85797,85798],{},[23,85799],{"alt":25,"src":85800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[249,85802,85804],{"id":85803},"_4134-对象原型","4.13.4 对象原型",[20,85806,85807],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[20,85809,85810],{},"对象原型就是__proto__这个属性",[20,85812,85813],{},[23,85814],{"alt":25,"src":85815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[20,85817,85818],{},[23,85819],{"alt":25,"src":85820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[20,85822,85823],{},[23,85824],{"alt":25,"src":85825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[20,85827,85828],{},[23,85829],{"alt":25,"src":85830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[36,85832,85834],{"className":53167,"code":85833,"language":53169,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[42,85835,85836,85844,85852,85856,85860,85864,85869,85877],{"__ignoreMap":25},[45,85837,85838,85840,85842],{"class":47,"line":48},[45,85839,1187],{"class":55},[45,85841,51900],{"class":51400},[45,85843,51407],{"class":55},[45,85845,85846,85848,85850],{"class":47,"line":66},[45,85847,52244],{"class":55},[45,85849,51913],{"class":51400},[45,85851,51407],{"class":55},[45,85853,85854],{"class":47,"line":1331},[45,85855,85476],{"class":55},[45,85857,85858],{"class":47,"line":1346},[45,85859,2337],{"class":55},[45,85861,85862],{"class":47,"line":1352},[45,85863,85485],{"class":55},[45,85865,85866],{"class":47,"line":1366},[45,85867,85868],{"class":55},"    console.log(ldh)\n",[45,85870,85871,85873,85875],{"class":47,"line":1372},[45,85872,52517],{"class":55},[45,85874,51913],{"class":51400},[45,85876,51407],{"class":55},[45,85878,85879,85881,85883],{"class":47,"line":1463},[45,85880,51885],{"class":55},[45,85882,51900],{"class":51400},[45,85884,51407],{"class":55},[20,85886,85887],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[20,85889,85890],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[20,85892,85893],{},[23,85894],{"alt":25,"src":85895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[20,85897,85898],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[20,85900,85901],{},"对象原型指向原型对象",[20,85903,85904],{},[23,85905],{"alt":25,"src":85906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[20,85908,85909],{},[23,85910],{"alt":25,"src":85911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[20,85913,85914],{},[23,85915],{"alt":25,"src":85916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[249,85918,85920],{"id":85919},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[20,85922,85923],{},[23,85924],{"alt":25,"src":85925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[233,85927,85928,85931,85934,85937],{},[169,85929,85930],{},"构造函数通过new的形式实例化得到实例对象",[169,85932,85933],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[169,85935,85936],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[169,85938,85939],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[20,85941,85942],{},[23,85943],{"alt":25,"src":85944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[20,85946,85947],{},"题目梳理：",[20,85949,85950],{},[23,85951],{"alt":25,"src":85952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[249,85954,85956],{"id":85955},"_4136-原型继承","4.13.6 原型继承",[20,85958,85959],{},[23,85960],{"alt":25,"src":85961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[20,85963,85964],{},[23,85965],{"alt":25,"src":85966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[20,85968,85969],{},[23,85970],{"alt":25,"src":85971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[20,85973,85974],{},[23,85975],{"alt":25,"src":85976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[20,85978,85979],{},[23,85980],{"alt":25,"src":85981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[20,85983,85984],{},[23,85985],{"alt":25,"src":85986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[20,85988,85989],{},[23,85990],{"alt":25,"src":85991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[20,85993,85994],{},[23,85995],{"alt":25,"src":85996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[20,85998,85999],{},"回顾：构造函数每次new得到对象都是不同的",[249,86001,86003],{"id":86002},"_4137-原型链","4.13.7 原型链",[20,86005,86006],{},[23,86007],{"alt":25,"src":86008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[20,86010,86011],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[20,86013,86014],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[20,86016,86017],{},"大哥是Object",[20,86019,86020],{},[23,86021],{"alt":25,"src":86022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[20,86024,86025],{},[23,86026],{"alt":25,"src":86027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[20,86029,86030],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[20,86032,86033],{},"万物皆对象",[249,86035,86037],{"id":86036},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[20,86039,86040],{},"模态框",[20,86042,86043],{},"以后遇见这个效果直接使用这个就行",[20,86045,86046],{},[23,86047],{"alt":25,"src":86048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[20,86050,86051],{},[23,86052],{"alt":25,"src":86053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[20,86055,86056],{},[23,86057],{"alt":25,"src":86058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[20,86060,86061],{},[23,86062],{"alt":25,"src":86063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[20,86065,86066],{},"补充知识点：",[233,86068,86069],{},[169,86070,86071],{},"append()",[20,86073,86074],{},[23,86075],{"alt":25,"src":86076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[36,86078,86080],{"className":50733,"code":86079,"language":50735,"meta":25,"style":25},"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",[42,86081,86082,86087,86092,86097,86101,86105,86109,86114,86119,86124,86128],{"__ignoreMap":25},[45,86083,86084],{"class":47,"line":48},[45,86085,86086],{"class":55},"append(param1)\n",[45,86088,86089],{"class":47,"line":66},[45,86090,86091],{"class":55},"append(param1, param2)\n",[45,86093,86094],{"class":47,"line":1331},[45,86095,86096],{"class":55},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[45,86098,86099],{"class":47,"line":1346},[45,86100,2550],{"emptyLinePlaceholder":207},[45,86102,86103],{"class":47,"line":1352},[45,86104,2550],{"emptyLinePlaceholder":207},[45,86106,86107],{"class":47,"line":1366},[45,86108,2550],{"emptyLinePlaceholder":207},[45,86110,86111],{"class":47,"line":1372},[45,86112,86113],{"class":55},"let div = document.createElement(\"div\");\n",[45,86115,86116],{"class":47,"line":1463},[45,86117,86118],{"class":55},"let p = document.createElement(\"p\");\n",[45,86120,86121],{"class":47,"line":1469},[45,86122,86123],{"class":55},"div.append(p);\n",[45,86125,86126],{"class":47,"line":1481},[45,86127,2550],{"emptyLinePlaceholder":207},[45,86129,86130,86133,86135],{"class":47,"line":1763},[45,86131,86132],{"class":55},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[45,86134,20],{"class":51400},[45,86136,86137],{"class":55},"> ]\n",[233,86139,86140],{"start":66},[169,86141,86142],{},"remove()",[20,86144,86145],{},"自己删自己",[20,86147,86148],{},[23,86149],{"alt":25,"src":86150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[36,86152,86154],{"className":50733,"code":86153,"language":50735,"meta":25,"style":25},"\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",[42,86155,86156,86166,86180,86184,86192,86206,86226,86238,86246,86253,86265,86278,86313,86325,86336,86348,86360,86372,86399,86409,86413,86417,86426,86438,86452,86462,86474,86478,86482,86492,86503,86513,86523,86536,86549,86559,86563,86567,86576,86586,86598,86602,86606,86615,86625,86635,86647,86651,86655,86665,86681,86692,86702,86712,86724,86736,86748,86752,86756,86769,86780,86784,86792,86800,86804,86812,86832,86852,86860,86865,86891,86896,86901,86920,86925,86937,86942,86953,86963,86973,86978,86983,86987,86992,86997,87002,87022,87027,87047,87052,87066,87071,87076,87081,87097,87101,87106,87135,87140,87145,87150,87161,87165,87169,87173,87178,87203,87208,87233,87238,87247,87251,87256,87281,87285,87310,87314,87323,87327,87332,87350,87360,87364,87372,87380,87384],{"__ignoreMap":25},[45,86157,86158,86160,86162,86164],{"class":47,"line":48},[45,86159,51397],{"class":55},[45,86161,51401],{"class":51400},[45,86163,51404],{"class":69},[45,86165,51407],{"class":55},[45,86167,86168,86170,86172,86174,86176,86178],{"class":47,"line":66},[45,86169,1187],{"class":55},[45,86171,50735],{"class":51400},[45,86173,51416],{"class":69},[45,86175,59],{"class":55},[45,86177,51421],{"class":62},[45,86179,51407],{"class":55},[45,86181,86182],{"class":47,"line":1331},[45,86183,2550],{"emptyLinePlaceholder":207},[45,86185,86186,86188,86190],{"class":47,"line":1346},[45,86187,1187],{"class":55},[45,86189,51434],{"class":51400},[45,86191,51407],{"class":55},[45,86193,86194,86196,86198,86200,86202,86204],{"class":47,"line":1352},[45,86195,52244],{"class":55},[45,86197,51444],{"class":51400},[45,86199,51447],{"class":69},[45,86201,59],{"class":55},[45,86203,51452],{"class":62},[45,86205,51407],{"class":55},[45,86207,86208,86210,86212,86214,86216,86218,86220,86222,86224],{"class":47,"line":1366},[45,86209,52244],{"class":55},[45,86211,51444],{"class":51400},[45,86213,15069],{"class":69},[45,86215,59],{"class":55},[45,86217,51491],{"class":62},[45,86219,51471],{"class":69},[45,86221,59],{"class":55},[45,86223,51498],{"class":62},[45,86225,51407],{"class":55},[45,86227,86228,86230,86232,86234,86236],{"class":47,"line":1372},[45,86229,52244],{"class":55},[45,86231,51507],{"class":51400},[45,86233,51510],{"class":55},[45,86235,51507],{"class":51400},[45,86237,51407],{"class":55},[45,86239,86240,86242,86244],{"class":47,"line":1463},[45,86241,52244],{"class":55},[45,86243,196],{"class":51400},[45,86245,51407],{"class":55},[45,86247,86248,86251],{"class":47,"line":1469},[45,86249,86250],{"class":69},"    .modal",[45,86252,15721],{"class":55},[45,86254,86255,86257,86259,86261,86263],{"class":47,"line":1481},[45,86256,54871],{"class":79},[45,86258,51537],{"class":55},[45,86260,4123],{"class":79},[45,86262,51592],{"class":51},[45,86264,1442],{"class":55},[45,86266,86267,86270,86272,86274,86276],{"class":47,"line":1763},[45,86268,86269],{"class":79},"      min-height",[45,86271,51537],{"class":55},[45,86273,588],{"class":79},[45,86275,51592],{"class":51},[45,86277,1442],{"class":55},[45,86279,86280,86282,86284,86286,86288,86290,86292,86294,86296,86298,86300,86302,86304,86306,86308,86311],{"class":47,"line":1768},[45,86281,78850],{"class":79},[45,86283,51537],{"class":55},[45,86285,469],{"class":79},[45,86287,4243],{"class":79},[45,86289,2188],{"class":79},[45,86291,51592],{"class":51},[45,86293,78867],{"class":79},[45,86295,282],{"class":55},[45,86297,469],{"class":79},[45,86299,12584],{"class":55},[45,86301,469],{"class":79},[45,86303,12584],{"class":55},[45,86305,469],{"class":79},[45,86307,12584],{"class":55},[45,86309,86310],{"class":79},"0.1",[45,86312,2869],{"class":55},[45,86314,86315,86317,86319,86321,86323],{"class":47,"line":1774},[45,86316,55234],{"class":79},[45,86318,51537],{"class":55},[45,86320,570],{"class":79},[45,86322,51592],{"class":51},[45,86324,1442],{"class":55},[45,86326,86327,86329,86331,86334],{"class":47,"line":1779},[45,86328,54859],{"class":79},[45,86330,51537],{"class":55},[45,86332,86333],{"class":79},"fixed",[45,86335,1442],{"class":55},[45,86337,86338,86341,86343,86346],{"class":47,"line":1793},[45,86339,86340],{"class":79},"      z-index",[45,86342,51537],{"class":55},[45,86344,86345],{"class":79},"999",[45,86347,1442],{"class":55},[45,86349,86350,86352,86354,86356,86358],{"class":47,"line":1798},[45,86351,54938],{"class":79},[45,86353,51537],{"class":55},[45,86355,933],{"class":79},[45,86357,605],{"class":51},[45,86359,1442],{"class":55},[45,86361,86362,86364,86366,86368,86370],{"class":47,"line":1804},[45,86363,55047],{"class":79},[45,86365,51537],{"class":55},[45,86367,933],{"class":79},[45,86369,605],{"class":51},[45,86371,1442],{"class":55},[45,86373,86374,86376,86378,86380,86382,86385,86387,86389,86391,86393,86395,86397],{"class":47,"line":1825},[45,86375,78891],{"class":79},[45,86377,51537],{"class":55},[45,86379,78896],{"class":79},[45,86381,282],{"class":55},[45,86383,86384],{"class":79},"-50",[45,86386,605],{"class":51},[45,86388,12584],{"class":55},[45,86390,86384],{"class":79},[45,86392,605],{"class":51},[45,86394,12584],{"class":55},[45,86396,469],{"class":79},[45,86398,2869],{"class":55},[45,86400,86401,86403,86405,86407],{"class":47,"line":1830},[45,86402,54984],{"class":79},[45,86404,51537],{"class":55},[45,86406,60942],{"class":79},[45,86408,1442],{"class":55},[45,86410,86411],{"class":47,"line":1844},[45,86412,2337],{"class":55},[45,86414,86415],{"class":47,"line":1849},[45,86416,2550],{"emptyLinePlaceholder":207},[45,86418,86419,86421,86424],{"class":47,"line":1878},[45,86420,86250],{"class":69},[45,86422,86423],{"class":69}," .header",[45,86425,15721],{"class":55},[45,86427,86428,86430,86432,86434,86436],{"class":47,"line":1883},[45,86429,57459],{"class":79},[45,86431,51537],{"class":55},[45,86433,678],{"class":79},[45,86435,51592],{"class":51},[45,86437,1442],{"class":55},[45,86439,86440,86442,86444,86446,86448,86450],{"class":47,"line":1900},[45,86441,54795],{"class":79},[45,86443,51537],{"class":55},[45,86445,469],{"class":79},[45,86447,2188],{"class":79},[45,86449,51592],{"class":51},[45,86451,1442],{"class":55},[45,86453,86454,86456,86458,86460],{"class":47,"line":1905},[45,86455,54859],{"class":79},[45,86457,51537],{"class":55},[45,86459,54864],{"class":79},[45,86461,1442],{"class":55},[45,86463,86464,86466,86468,86470,86472],{"class":47,"line":1910},[45,86465,55022],{"class":79},[45,86467,51537],{"class":55},[45,86469,977],{"class":79},[45,86471,51592],{"class":51},[45,86473,1442],{"class":55},[45,86475,86476],{"class":47,"line":1915},[45,86477,2337],{"class":55},[45,86479,86480],{"class":47,"line":1929},[45,86481,2550],{"emptyLinePlaceholder":207},[45,86483,86484,86486,86488,86490],{"class":47,"line":1934},[45,86485,86250],{"class":69},[45,86487,86423],{"class":69},[45,86489,3182],{"class":51400},[45,86491,15721],{"class":55},[45,86493,86494,86497,86499,86501],{"class":47,"line":2727},[45,86495,86496],{"class":79},"      font-style",[45,86498,51537],{"class":55},[45,86500,63941],{"class":79},[45,86502,1442],{"class":55},[45,86504,86505,86507,86509,86511],{"class":47,"line":2741},[45,86506,57516],{"class":79},[45,86508,51537],{"class":55},[45,86510,62170],{"class":79},[45,86512,1442],{"class":55},[45,86514,86515,86517,86519,86521],{"class":47,"line":2749},[45,86516,54859],{"class":79},[45,86518,51537],{"class":55},[45,86520,54931],{"class":79},[45,86522,1442],{"class":55},[45,86524,86525,86528,86530,86532,86534],{"class":47,"line":2754},[45,86526,86527],{"class":79},"      right",[45,86529,51537],{"class":55},[45,86531,852],{"class":79},[45,86533,51592],{"class":51},[45,86535,1442],{"class":55},[45,86537,86538,86540,86542,86545,86547],{"class":47,"line":2760},[45,86539,55047],{"class":79},[45,86541,51537],{"class":55},[45,86543,86544],{"class":79},"-2",[45,86546,51592],{"class":51},[45,86548,1442],{"class":55},[45,86550,86551,86553,86555,86557],{"class":47,"line":2766},[45,86552,62125],{"class":79},[45,86554,51537],{"class":55},[45,86556,62130],{"class":79},[45,86558,1442],{"class":55},[45,86560,86561],{"class":47,"line":2771},[45,86562,2337],{"class":55},[45,86564,86565],{"class":47,"line":8098},[45,86566,2550],{"emptyLinePlaceholder":207},[45,86568,86569,86571,86574],{"class":47,"line":8122},[45,86570,86250],{"class":69},[45,86572,86573],{"class":69}," .body",[45,86575,15721],{"class":55},[45,86577,86578,86580,86582,86584],{"class":47,"line":8127},[45,86579,57386],{"class":79},[45,86581,51537],{"class":55},[45,86583,51692],{"class":79},[45,86585,1442],{"class":55},[45,86587,86588,86590,86592,86594,86596],{"class":47,"line":8133},[45,86589,54795],{"class":79},[45,86591,51537],{"class":55},[45,86593,723],{"class":79},[45,86595,51592],{"class":51},[45,86597,1442],{"class":55},[45,86599,86600],{"class":47,"line":8160},[45,86601,2337],{"class":55},[45,86603,86604],{"class":47,"line":8165},[45,86605,2550],{"emptyLinePlaceholder":207},[45,86607,86608,86610,86613],{"class":47,"line":8171},[45,86609,86250],{"class":69},[45,86611,86612],{"class":69}," .footer",[45,86614,15721],{"class":55},[45,86616,86617,86619,86621,86623],{"class":47,"line":8183},[45,86618,55109],{"class":79},[45,86620,51537],{"class":55},[45,86622,51577],{"class":79},[45,86624,1442],{"class":55},[45,86626,86627,86629,86631,86633],{"class":47,"line":8195},[45,86628,55120],{"class":79},[45,86630,51537],{"class":55},[45,86632,51680],{"class":79},[45,86634,1442],{"class":55},[45,86636,86637,86639,86641,86643,86645],{"class":47,"line":8207},[45,86638,54795],{"class":79},[45,86640,51537],{"class":55},[45,86642,723],{"class":79},[45,86644,51592],{"class":51},[45,86646,1442],{"class":55},[45,86648,86649],{"class":47,"line":9866},[45,86650,2337],{"class":55},[45,86652,86653],{"class":47,"line":9890},[45,86654,2550],{"emptyLinePlaceholder":207},[45,86656,86657,86659,86661,86663],{"class":47,"line":9913},[45,86658,86250],{"class":69},[45,86660,86612],{"class":69},[45,86662,1550],{"class":51400},[45,86664,15721],{"class":55},[45,86666,86667,86669,86671,86673,86675,86677,86679],{"class":47,"line":9937},[45,86668,54795],{"class":79},[45,86670,51537],{"class":55},[45,86672,350],{"class":79},[45,86674,51592],{"class":51},[45,86676,2233],{"class":79},[45,86678,51592],{"class":51},[45,86680,1442],{"class":55},[45,86682,86683,86685,86687,86690],{"class":47,"line":9942},[45,86684,61821],{"class":79},[45,86686,51537],{"class":55},[45,86688,86689],{"class":79},"#ccc",[45,86691,1442],{"class":55},[45,86693,86694,86696,86698,86700],{"class":47,"line":9947},[45,86695,64070],{"class":79},[45,86697,51537],{"class":55},[45,86699,54837],{"class":79},[45,86701,1442],{"class":55},[45,86703,86704,86706,86708,86710],{"class":47,"line":9952},[45,86705,57516],{"class":79},[45,86707,51537],{"class":55},[45,86709,60942],{"class":79},[45,86711,1442],{"class":55},[45,86713,86714,86716,86718,86720,86722],{"class":47,"line":9961},[45,86715,55234],{"class":79},[45,86717,51537],{"class":55},[45,86719,356],{"class":79},[45,86721,51592],{"class":51},[45,86723,1442],{"class":55},[45,86725,86726,86728,86730,86732,86734],{"class":47,"line":9966},[45,86727,61850],{"class":79},[45,86729,51537],{"class":55},[45,86731,723],{"class":79},[45,86733,51592],{"class":51},[45,86735,1442],{"class":55},[45,86737,86738,86740,86742,86744,86746],{"class":47,"line":9972},[45,86739,55022],{"class":79},[45,86741,51537],{"class":55},[45,86743,826],{"class":79},[45,86745,51592],{"class":51},[45,86747,1442],{"class":55},[45,86749,86750],{"class":47,"line":9993},[45,86751,2337],{"class":55},[45,86753,86754],{"class":47,"line":9999},[45,86755,2550],{"emptyLinePlaceholder":207},[45,86757,86758,86760,86762,86764,86767],{"class":47,"line":10013},[45,86759,86250],{"class":69},[45,86761,86612],{"class":69},[45,86763,1550],{"class":51400},[45,86765,86766],{"class":69},".submit",[45,86768,15721],{"class":55},[45,86770,86771,86773,86775,86778],{"class":47,"line":10019},[45,86772,54984],{"class":79},[45,86774,51537],{"class":55},[45,86776,86777],{"class":79},"#369",[45,86779,1442],{"class":55},[45,86781,86782],{"class":47,"line":10046},[45,86783,2337],{"class":55},[45,86785,86786,86788,86790],{"class":47,"line":10055},[45,86787,52517],{"class":55},[45,86789,196],{"class":51400},[45,86791,51407],{"class":55},[45,86793,86794,86796,86798],{"class":47,"line":10061},[45,86795,51885],{"class":55},[45,86797,51434],{"class":51400},[45,86799,51407],{"class":55},[45,86801,86802],{"class":47,"line":10069},[45,86803,2550],{"emptyLinePlaceholder":207},[45,86805,86806,86808,86810],{"class":47,"line":10074},[45,86807,1187],{"class":55},[45,86809,51900],{"class":51400},[45,86811,51407],{"class":55},[45,86813,86814,86816,86818,86820,86822,86825,86828,86830],{"class":47,"line":16753},[45,86815,52244],{"class":55},[45,86817,53987],{"class":51400},[45,86819,15108],{"class":69},[45,86821,59],{"class":55},[45,86823,86824],{"class":62},"\"delete\"",[45,86826,86827],{"class":55},">删除\u003C\u002F",[45,86829,53987],{"class":51400},[45,86831,51407],{"class":55},[45,86833,86834,86836,86838,86840,86842,86845,86848,86850],{"class":47,"line":16759},[45,86835,52244],{"class":55},[45,86837,53987],{"class":51400},[45,86839,15108],{"class":69},[45,86841,59],{"class":55},[45,86843,86844],{"class":62},"\"login\"",[45,86846,86847],{"class":55},">登录\u003C\u002F",[45,86849,53987],{"class":51400},[45,86851,51407],{"class":55},[45,86853,86854,86856,86858],{"class":47,"line":16782},[45,86855,52244],{"class":55},[45,86857,51913],{"class":51400},[45,86859,51407],{"class":55},[45,86861,86862],{"class":47,"line":16788},[45,86863,86864],{"class":337},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[45,86866,86867,86869,86872,86874,86876,86878,86880,86882,86885,86887,86889],{"class":47,"line":16811},[45,86868,70184],{"class":51},[45,86870,86871],{"class":69}," Modal",[45,86873,282],{"class":55},[45,86875,51507],{"class":5366},[45,86877,13713],{"class":51},[45,86879,70030],{"class":62},[45,86881,12584],{"class":55},[45,86883,86884],{"class":5366},"message",[45,86886,13713],{"class":51},[45,86888,70030],{"class":62},[45,86890,12591],{"class":55},[45,86892,86893],{"class":47,"line":16825},[45,86894,86895],{"class":337},"      \u002F\u002F 创建Model 模态框盒子\n",[45,86897,86898],{"class":47,"line":16845},[45,86899,86900],{"class":337},"      \u002F\u002F 1.1 创建div标签\n",[45,86902,86903,86905,86908,86910,86912,86914,86916,86918],{"class":47,"line":16851},[45,86904,70151],{"class":79},[45,86906,86907],{"class":55},".modalBox ",[45,86909,59],{"class":51},[45,86911,54496],{"class":55},[45,86913,70251],{"class":69},[45,86915,282],{"class":55},[45,86917,82031],{"class":62},[45,86919,139],{"class":55},[45,86921,86922],{"class":47,"line":16862},[45,86923,86924],{"class":337},"      \u002F\u002F 1.2 给div 添加类名为model\n",[45,86926,86927,86929,86932,86934],{"class":47,"line":16885},[45,86928,70151],{"class":79},[45,86930,86931],{"class":55},".modalBox.className ",[45,86933,59],{"class":51},[45,86935,86936],{"class":62}," 'modal'\n",[45,86938,86939],{"class":47,"line":16907},[45,86940,86941],{"class":337},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[45,86943,86944,86946,86949,86951],{"class":47,"line":16912},[45,86945,70151],{"class":79},[45,86947,86948],{"class":55},".modalBox.innerHTML ",[45,86950,59],{"class":51},[45,86952,70268],{"class":62},[45,86954,86955,86958,86960],{"class":47,"line":16918},[45,86956,86957],{"class":62},"        \u003Cdiv class=\"header\">${",[45,86959,51507],{"class":55},[45,86961,86962],{"class":62},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[45,86964,86965,86968,86970],{"class":47,"line":16932},[45,86966,86967],{"class":62},"        \u003Cdiv class=\"body\">${",[45,86969,86884],{"class":55},[45,86971,86972],{"class":62},"}\u003C\u002Fdiv>\n",[45,86974,86975],{"class":47,"line":16945},[45,86976,86977],{"class":62},"      `\n",[45,86979,86980],{"class":47,"line":16950},[45,86981,86982],{"class":337},"      \u002F\u002F console.log(this.modalBox)\n",[45,86984,86985],{"class":47,"line":16964},[45,86986,2337],{"class":55},[45,86988,86989],{"class":47,"line":16969},[45,86990,86991],{"class":337},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[45,86993,86994],{"class":47,"line":16975},[45,86995,86996],{"class":337},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[45,86998,86999],{"class":47,"line":16980},[45,87000,87001],{"class":337},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[45,87003,87004,87007,87009,87011,87013,87016,87018,87020],{"class":47,"line":16994},[45,87005,87006],{"class":79},"    Modal",[45,87008,835],{"class":55},[45,87010,85679],{"class":79},[45,87012,835],{"class":55},[45,87014,87015],{"class":69},"open",[45,87017,13713],{"class":51},[45,87019,59018],{"class":51},[45,87021,54552],{"class":55},[45,87023,87024],{"class":47,"line":16999},[45,87025,87026],{"class":337},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[45,87028,87029,87031,87034,87036,87038,87040,87042,87045],{"class":47,"line":17004},[45,87030,58328],{"class":51},[45,87032,87033],{"class":79}," box",[45,87035,13713],{"class":51},[45,87037,54496],{"class":55},[45,87039,54499],{"class":69},[45,87041,282],{"class":55},[45,87043,87044],{"class":62},"'.modal'",[45,87046,139],{"class":55},[45,87048,87049],{"class":47,"line":17018},[45,87050,87051],{"class":337},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[45,87053,87054,87057,87059,87062,87064],{"class":47,"line":17030},[45,87055,87056],{"class":55},"      box ",[45,87058,1866],{"class":51},[45,87060,87061],{"class":55}," box.",[45,87063,57106],{"class":69},[45,87065,2126],{"class":55},[45,87067,87068],{"class":47,"line":17035},[45,87069,87070],{"class":337},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[45,87072,87073],{"class":47,"line":17048},[45,87074,87075],{"class":337},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[45,87077,87078],{"class":47,"line":17053},[45,87079,87080],{"class":337},"      \u002F\u002F append可以增加对象\n",[45,87082,87083,87086,87089,87091,87094],{"class":47,"line":17058},[45,87084,87085],{"class":55},"      document.body.",[45,87087,87088],{"class":69},"append",[45,87090,282],{"class":55},[45,87092,87093],{"class":79},"this",[45,87095,87096],{"class":55},".modalBox)\n",[45,87098,87099],{"class":47,"line":17063},[45,87100,2550],{"emptyLinePlaceholder":207},[45,87102,87103],{"class":47,"line":17076},[45,87104,87105],{"class":337},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[45,87107,87108,87110,87113,87115,87117,87120,87122,87124,87126,87128,87131,87133],{"class":47,"line":17081},[45,87109,70151],{"class":79},[45,87111,87112],{"class":55},".modalBox.",[45,87114,54499],{"class":69},[45,87116,282],{"class":55},[45,87118,87119],{"class":62},"'i'",[45,87121,30926],{"class":55},[45,87123,57913],{"class":69},[45,87125,282],{"class":55},[45,87127,57918],{"class":62},[45,87129,87130],{"class":55},", () ",[45,87132,84822],{"class":51},[45,87134,15721],{"class":55},[45,87136,87137],{"class":47,"line":32733},[45,87138,87139],{"class":337},"        \u002F\u002F 这个地方需要用到箭头函数\n",[45,87141,87142],{"class":47,"line":32739},[45,87143,87144],{"class":337},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[45,87146,87147],{"class":47,"line":32745},[45,87148,87149],{"class":337},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[45,87151,87152,87154,87156,87159],{"class":47,"line":32751},[45,87153,64826],{"class":79},[45,87155,835],{"class":55},[45,87157,87158],{"class":69},"close",[45,87160,2126],{"class":55},[45,87162,87163],{"class":47,"line":32757},[45,87164,64915],{"class":55},[45,87166,87167],{"class":47,"line":32768},[45,87168,2337],{"class":55},[45,87170,87171],{"class":47,"line":32774},[45,87172,2550],{"emptyLinePlaceholder":207},[45,87174,87175],{"class":47,"line":32794},[45,87176,87177],{"class":337},"    \u002F\u002F 测试一下 点击 删除按钮\n",[45,87179,87180,87182,87184,87186,87189,87191,87193,87195,87197,87199,87201],{"class":47,"line":32800},[45,87181,52507],{"class":55},[45,87183,54499],{"class":69},[45,87185,282],{"class":55},[45,87187,87188],{"class":62},"'#delete'",[45,87190,30926],{"class":55},[45,87192,57913],{"class":69},[45,87194,282],{"class":55},[45,87196,57918],{"class":62},[45,87198,87130],{"class":55},[45,87200,84822],{"class":51},[45,87202,15721],{"class":55},[45,87204,87205],{"class":47,"line":32811},[45,87206,87207],{"class":337},"      \u002F\u002F 先调用Model构造函数\n",[45,87209,87210,87212,87215,87217,87219,87221,87223,87226,87228,87231],{"class":47,"line":32817},[45,87211,58328],{"class":51},[45,87213,87214],{"class":79}," del",[45,87216,13713],{"class":51},[45,87218,11727],{"class":51},[45,87220,86871],{"class":69},[45,87222,282],{"class":55},[45,87224,87225],{"class":62},"'温馨的提示'",[45,87227,12584],{"class":55},[45,87229,87230],{"class":62},"'您没有删除权限操作'",[45,87232,139],{"class":55},[45,87234,87235],{"class":47,"line":32823},[45,87236,87237],{"class":337},"      \u002F\u002F 实例对象调用open方法\n",[45,87239,87240,87243,87245],{"class":47,"line":32829},[45,87241,87242],{"class":55},"      del.",[45,87244,87015],{"class":69},[45,87246,2126],{"class":55},[45,87248,87249],{"class":47,"line":32835},[45,87250,33561],{"class":55},[45,87252,87253],{"class":47,"line":32841},[45,87254,87255],{"class":337},"    \u002F\u002F 测试一下 点击 登录按钮\n",[45,87257,87258,87260,87262,87264,87267,87269,87271,87273,87275,87277,87279],{"class":47,"line":32847},[45,87259,52507],{"class":55},[45,87261,54499],{"class":69},[45,87263,282],{"class":55},[45,87265,87266],{"class":62},"'#login'",[45,87268,30926],{"class":55},[45,87270,57913],{"class":69},[45,87272,282],{"class":55},[45,87274,57918],{"class":62},[45,87276,87130],{"class":55},[45,87278,84822],{"class":51},[45,87280,15721],{"class":55},[45,87282,87283],{"class":47,"line":32853},[45,87284,87207],{"class":337},[45,87286,87287,87289,87292,87294,87296,87298,87300,87303,87305,87308],{"class":47,"line":32873},[45,87288,58328],{"class":51},[45,87290,87291],{"class":79}," log",[45,87293,13713],{"class":51},[45,87295,11727],{"class":51},[45,87297,86871],{"class":69},[45,87299,282],{"class":55},[45,87301,87302],{"class":62},"'友情提示'",[45,87304,12584],{"class":55},[45,87306,87307],{"class":62},"'您还没有登录呢'",[45,87309,139],{"class":55},[45,87311,87312],{"class":47,"line":32879},[45,87313,87237],{"class":337},[45,87315,87316,87319,87321],{"class":47,"line":32895},[45,87317,87318],{"class":55},"      log.",[45,87320,87015],{"class":69},[45,87322,2126],{"class":55},[45,87324,87325],{"class":47,"line":32901},[45,87326,33561],{"class":55},[45,87328,87329],{"class":47,"line":32915},[45,87330,87331],{"class":337},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[45,87333,87334,87336,87338,87340,87342,87344,87346,87348],{"class":47,"line":32921},[45,87335,87006],{"class":79},[45,87337,835],{"class":55},[45,87339,85679],{"class":79},[45,87341,835],{"class":55},[45,87343,87158],{"class":69},[45,87345,13713],{"class":51},[45,87347,59018],{"class":51},[45,87349,54552],{"class":55},[45,87351,87352,87354,87356,87358],{"class":47,"line":32936},[45,87353,70151],{"class":79},[45,87355,87112],{"class":55},[45,87357,57106],{"class":69},[45,87359,2126],{"class":55},[45,87361,87362],{"class":47,"line":32942},[45,87363,2337],{"class":55},[45,87365,87366,87368,87370],{"class":47,"line":32951},[45,87367,52517],{"class":55},[45,87369,51913],{"class":51400},[45,87371,51407],{"class":55},[45,87373,87374,87376,87378],{"class":47,"line":32957},[45,87375,51885],{"class":55},[45,87377,51900],{"class":51400},[45,87379,51407],{"class":55},[45,87381,87382],{"class":47,"line":32966},[45,87383,2550],{"emptyLinePlaceholder":207},[45,87385,87386,87388,87390],{"class":47,"line":32972},[45,87387,51885],{"class":55},[45,87389,50735],{"class":51400},[45,87391,51407],{"class":55},[20,87393,87394],{},[23,87395],{"alt":25,"src":87396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[15,87398,87400],{"id":87399},"_414-深浅拷贝","4.14 深浅拷贝",[249,87402,87404],{"id":87403},"_4141-浅拷贝","4.14.1 浅拷贝",[20,87406,87407],{},[23,87408],{"alt":25,"src":87409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[20,87411,87412],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[20,87414,87415],{},[23,87416],{"alt":25,"src":87417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[20,87419,87420],{},[23,87421],{"alt":25,"src":87422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[20,87424,87425],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[20,87427,87428],{},[23,87429],{"alt":25,"src":87430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[20,87432,11481],{},[20,87434,87435],{},[23,87436],{"alt":25,"src":87437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[249,87439,87441],{"id":87440},"_4142-深拷贝","4.14.2 深拷贝",[20,87443,87444],{},"深拷贝：拷贝的是对象，不是地址",[20,87446,87447],{},"常用的三种方法：",[233,87449,87450,87453,87456],{},[169,87451,87452],{},"通过递归实现深拷贝",[169,87454,87455],{},"lodash\u002FcloneDeep",[169,87457,87458],{},"通过JSON.stringify()实现",[22147,87460,87462],{"id":87461},"_41421-递归函数","4.14.2.1 递归函数",[20,87464,87465],{},[23,87466],{"alt":25,"src":87467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[233,87469,87470],{},[169,87471,87472],{},"死递归占溢出：",[36,87474,87476],{"className":53167,"code":87475,"language":53169,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[42,87477,87478,87486,87494,87498,87503,87507,87512,87520],{"__ignoreMap":25},[45,87479,87480,87482,87484],{"class":47,"line":48},[45,87481,1187],{"class":55},[45,87483,51900],{"class":51400},[45,87485,51407],{"class":55},[45,87487,87488,87490,87492],{"class":47,"line":66},[45,87489,52244],{"class":55},[45,87491,51913],{"class":51400},[45,87493,51407],{"class":55},[45,87495,87496],{"class":47,"line":1331},[45,87497,77243],{"class":55},[45,87499,87500],{"class":47,"line":1346},[45,87501,87502],{"class":55},"      fn()\n",[45,87504,87505],{"class":47,"line":1352},[45,87506,2337],{"class":55},[45,87508,87509],{"class":47,"line":1366},[45,87510,87511],{"class":55},"    fn()\n",[45,87513,87514,87516,87518],{"class":47,"line":1372},[45,87515,52517],{"class":55},[45,87517,51913],{"class":51400},[45,87519,51407],{"class":55},[45,87521,87522,87524,87526],{"class":47,"line":1463},[45,87523,51885],{"class":55},[45,87525,51900],{"class":51400},[45,87527,51407],{"class":55},[233,87529,87530],{"start":66},[169,87531,87532],{},"递归函数要加判断条件：",[20,87534,87535],{},[23,87536],{"alt":25,"src":87537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[233,87539,87540],{"start":1331},[169,87541,87542],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[36,87544,87546],{"className":50733,"code":87545,"language":50735,"meta":25,"style":25},"\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",[42,87547,87548,87558,87572,87576,87584,87598,87618,87630,87638,87642,87650,87662,87670,87678,87703,87715,87719,87726,87734,87742,87746],{"__ignoreMap":25},[45,87549,87550,87552,87554,87556],{"class":47,"line":48},[45,87551,51397],{"class":55},[45,87553,51401],{"class":51400},[45,87555,51404],{"class":69},[45,87557,51407],{"class":55},[45,87559,87560,87562,87564,87566,87568,87570],{"class":47,"line":66},[45,87561,1187],{"class":55},[45,87563,50735],{"class":51400},[45,87565,51416],{"class":69},[45,87567,59],{"class":55},[45,87569,51421],{"class":62},[45,87571,51407],{"class":55},[45,87573,87574],{"class":47,"line":1331},[45,87575,2550],{"emptyLinePlaceholder":207},[45,87577,87578,87580,87582],{"class":47,"line":1346},[45,87579,1187],{"class":55},[45,87581,51434],{"class":51400},[45,87583,51407],{"class":55},[45,87585,87586,87588,87590,87592,87594,87596],{"class":47,"line":1352},[45,87587,52244],{"class":55},[45,87589,51444],{"class":51400},[45,87591,51447],{"class":69},[45,87593,59],{"class":55},[45,87595,51452],{"class":62},[45,87597,51407],{"class":55},[45,87599,87600,87602,87604,87606,87608,87610,87612,87614,87616],{"class":47,"line":1366},[45,87601,52244],{"class":55},[45,87603,51444],{"class":51400},[45,87605,15069],{"class":69},[45,87607,59],{"class":55},[45,87609,51491],{"class":62},[45,87611,51471],{"class":69},[45,87613,59],{"class":55},[45,87615,51498],{"class":62},[45,87617,51407],{"class":55},[45,87619,87620,87622,87624,87626,87628],{"class":47,"line":1372},[45,87621,52244],{"class":55},[45,87623,51507],{"class":51400},[45,87625,51510],{"class":55},[45,87627,51507],{"class":51400},[45,87629,51407],{"class":55},[45,87631,87632,87634,87636],{"class":47,"line":1463},[45,87633,51885],{"class":55},[45,87635,51434],{"class":51400},[45,87637,51407],{"class":55},[45,87639,87640],{"class":47,"line":1469},[45,87641,2550],{"emptyLinePlaceholder":207},[45,87643,87644,87646,87648],{"class":47,"line":1481},[45,87645,1187],{"class":55},[45,87647,51900],{"class":51400},[45,87649,51407],{"class":55},[45,87651,87652,87654,87656,87658,87660],{"class":47,"line":1763},[45,87653,52244],{"class":55},[45,87655,51711],{"class":51400},[45,87657,55414],{"class":55},[45,87659,51711],{"class":51400},[45,87661,51407],{"class":55},[45,87663,87664,87666,87668],{"class":47,"line":1768},[45,87665,52244],{"class":55},[45,87667,51913],{"class":51400},[45,87669,51407],{"class":55},[45,87671,87672,87674,87676],{"class":47,"line":1774},[45,87673,70184],{"class":51},[45,87675,73873],{"class":69},[45,87677,11002],{"class":55},[45,87679,87680,87682,87684,87686,87688,87690,87692,87694,87696,87698,87701],{"class":47,"line":1779},[45,87681,55871],{"class":55},[45,87683,54499],{"class":69},[45,87685,282],{"class":55},[45,87687,82031],{"class":62},[45,87689,74349],{"class":55},[45,87691,59],{"class":51},[45,87693,11727],{"class":51},[45,87695,73889],{"class":69},[45,87697,17410],{"class":55},[45,87699,87700],{"class":69},"toLocaleString",[45,87702,2126],{"class":55},[45,87704,87705,87708,87711,87713],{"class":47,"line":1793},[45,87706,87707],{"class":69},"      setTimeout",[45,87709,87710],{"class":55},"(getTime, ",[45,87712,6560],{"class":79},[45,87714,139],{"class":55},[45,87716,87717],{"class":47,"line":1798},[45,87718,2337],{"class":55},[45,87720,87721,87724],{"class":47,"line":1804},[45,87722,87723],{"class":69},"    getTime",[45,87725,2126],{"class":55},[45,87727,87728,87730,87732],{"class":47,"line":1825},[45,87729,52517],{"class":55},[45,87731,51913],{"class":51400},[45,87733,51407],{"class":55},[45,87735,87736,87738,87740],{"class":47,"line":1830},[45,87737,51885],{"class":55},[45,87739,51900],{"class":51400},[45,87741,51407],{"class":55},[45,87743,87744],{"class":47,"line":1844},[45,87745,2550],{"emptyLinePlaceholder":207},[45,87747,87748,87750,87752],{"class":47,"line":1849},[45,87749,51885],{"class":55},[45,87751,50735],{"class":51400},[45,87753,51407],{"class":55},[20,87755,87756],{},[23,87757],{"alt":25,"src":87758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[233,87760,87761],{"start":1346},[169,87762,87452],{},[20,87764,87765],{},[23,87766],{"alt":25,"src":87767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[20,87769,87770],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[20,87772,39289],{},[20,87774,87775],{},"这个是简易版的递归函数深拷贝",[20,87777,87778],{},"一定要注意先数组再对象，因为万物皆可对象",[36,87780,87782],{"className":50733,"code":87781,"language":50735,"meta":25,"style":25},"\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",[42,87783,87784,87794,87808,87812,87820,87834,87854,87866,87874,87878,87886,87894,87904,87913,87921,87937,87941,87949,87953,87957,87969,87974,87993,88009,88014,88019,88024,88039,88044,88049,88058,88066,88083,88091,88097,88105,88110,88115,88124,88128,88132,88136,88147,88156,88166,88180,88190,88198,88206,88214,88218],{"__ignoreMap":25},[45,87785,87786,87788,87790,87792],{"class":47,"line":48},[45,87787,51397],{"class":55},[45,87789,51401],{"class":51400},[45,87791,51404],{"class":69},[45,87793,51407],{"class":55},[45,87795,87796,87798,87800,87802,87804,87806],{"class":47,"line":66},[45,87797,1187],{"class":55},[45,87799,50735],{"class":51400},[45,87801,51416],{"class":69},[45,87803,59],{"class":55},[45,87805,51421],{"class":62},[45,87807,51407],{"class":55},[45,87809,87810],{"class":47,"line":1331},[45,87811,2550],{"emptyLinePlaceholder":207},[45,87813,87814,87816,87818],{"class":47,"line":1346},[45,87815,1187],{"class":55},[45,87817,51434],{"class":51400},[45,87819,51407],{"class":55},[45,87821,87822,87824,87826,87828,87830,87832],{"class":47,"line":1352},[45,87823,52244],{"class":55},[45,87825,51444],{"class":51400},[45,87827,51447],{"class":69},[45,87829,59],{"class":55},[45,87831,51452],{"class":62},[45,87833,51407],{"class":55},[45,87835,87836,87838,87840,87842,87844,87846,87848,87850,87852],{"class":47,"line":1366},[45,87837,52244],{"class":55},[45,87839,51444],{"class":51400},[45,87841,15069],{"class":69},[45,87843,59],{"class":55},[45,87845,51491],{"class":62},[45,87847,51471],{"class":69},[45,87849,59],{"class":55},[45,87851,51498],{"class":62},[45,87853,51407],{"class":55},[45,87855,87856,87858,87860,87862,87864],{"class":47,"line":1372},[45,87857,52244],{"class":55},[45,87859,51507],{"class":51400},[45,87861,51510],{"class":55},[45,87863,51507],{"class":51400},[45,87865,51407],{"class":55},[45,87867,87868,87870,87872],{"class":47,"line":1463},[45,87869,51885],{"class":55},[45,87871,51434],{"class":51400},[45,87873,51407],{"class":55},[45,87875,87876],{"class":47,"line":1469},[45,87877,2550],{"emptyLinePlaceholder":207},[45,87879,87880,87882,87884],{"class":47,"line":1481},[45,87881,1187],{"class":55},[45,87883,51900],{"class":51400},[45,87885,51407],{"class":55},[45,87887,87888,87890,87892],{"class":47,"line":1763},[45,87889,52244],{"class":55},[45,87891,51913],{"class":51400},[45,87893,51407],{"class":55},[45,87895,87896,87898,87900,87902],{"class":47,"line":1768},[45,87897,11370],{"class":51},[45,87899,70071],{"class":79},[45,87901,13713],{"class":51},[45,87903,15721],{"class":55},[45,87905,87906,87908,87911],{"class":47,"line":1774},[45,87907,71716],{"class":55},[45,87909,87910],{"class":62},"'pink'",[45,87912,31566],{"class":55},[45,87914,87915,87917,87919],{"class":47,"line":1779},[45,87916,71726],{"class":55},[45,87918,927],{"class":79},[45,87920,31566],{"class":55},[45,87922,87923,87926,87929,87931,87934],{"class":47,"line":1793},[45,87924,87925],{"class":55},"      hobby: [",[45,87927,87928],{"class":62},"'乒乓球'",[45,87930,12584],{"class":55},[45,87932,87933],{"class":62},"'足球'",[45,87935,87936],{"class":55},"],\n",[45,87938,87939],{"class":47,"line":1798},[45,87940,77972],{"class":55},[45,87942,87943,87946],{"class":47,"line":1804},[45,87944,87945],{"class":55},"        baby: ",[45,87947,87948],{"class":62},"'小pink'\n",[45,87950,87951],{"class":47,"line":1825},[45,87952,52498],{"class":55},[45,87954,87955],{"class":47,"line":1830},[45,87956,2337],{"class":55},[45,87958,87959,87961,87964,87966],{"class":47,"line":1844},[45,87960,11370],{"class":51},[45,87962,87963],{"class":79}," o",[45,87965,13713],{"class":51},[45,87967,87968],{"class":55}," {}\n",[45,87970,87971],{"class":47,"line":1849},[45,87972,87973],{"class":337},"    \u002F\u002F 拷贝函数\n",[45,87975,87976,87978,87981,87983,87986,87988,87991],{"class":47,"line":1878},[45,87977,70184],{"class":51},[45,87979,87980],{"class":69}," deepCopy",[45,87982,282],{"class":55},[45,87984,87985],{"class":5366},"newObj",[45,87987,12584],{"class":55},[45,87989,87990],{"class":5366},"oldObj",[45,87992,12591],{"class":55},[45,87994,87995,87997,87999,88001,88004,88006],{"class":47,"line":1883},[45,87996,52384],{"class":51},[45,87998,1809],{"class":55},[45,88000,51947],{"class":51},[45,88002,88003],{"class":55}," k ",[45,88005,26143],{"class":51},[45,88007,88008],{"class":55}," oldObj) {\n",[45,88010,88011],{"class":47,"line":1900},[45,88012,88013],{"class":337},"        \u002F\u002F 处理数组的问题\n",[45,88015,88016],{"class":47,"line":1905},[45,88017,88018],{"class":337},"        \u002F\u002F 判断是否属于数组\n",[45,88020,88021],{"class":47,"line":1910},[45,88022,88023],{"class":337},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[45,88025,88026,88028,88031,88034,88037],{"class":47,"line":1915},[45,88027,2647],{"class":51},[45,88029,88030],{"class":55}," (oldObj[k] ",[45,88032,88033],{"class":51},"instanceof",[45,88035,88036],{"class":69}," Array",[45,88038,12591],{"class":55},[45,88040,88041],{"class":47,"line":1929},[45,88042,88043],{"class":337},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[45,88045,88046],{"class":47,"line":1934},[45,88047,88048],{"class":337},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[45,88050,88051,88054,88056],{"class":47,"line":2727},[45,88052,88053],{"class":55},"          newObj[k] ",[45,88055,59],{"class":51},[45,88057,51938],{"class":55},[45,88059,88060,88063],{"class":47,"line":2741},[45,88061,88062],{"class":69},"          deepCopy",[45,88064,88065],{"class":55},"(newObj[k], oldObj[k])\n",[45,88067,88068,88070,88072,88074,88076,88078,88081],{"class":47,"line":2749},[45,88069,80180],{"class":55},[45,88071,1852],{"class":51},[45,88073,1855],{"class":51},[45,88075,88030],{"class":55},[45,88077,88033],{"class":51},[45,88079,88080],{"class":69}," Object",[45,88082,12591],{"class":55},[45,88084,88085,88087,88089],{"class":47,"line":2754},[45,88086,88053],{"class":55},[45,88088,59],{"class":51},[45,88090,87968],{"class":55},[45,88092,88093,88095],{"class":47,"line":2760},[45,88094,88062],{"class":69},[45,88096,88065],{"class":55},[45,88098,88099,88101,88103],{"class":47,"line":2766},[45,88100,80180],{"class":55},[45,88102,1852],{"class":51},[45,88104,15721],{"class":55},[45,88106,88107],{"class":47,"line":2771},[45,88108,88109],{"class":337},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[45,88111,88112],{"class":47,"line":8098},[45,88113,88114],{"class":337},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[45,88116,88117,88119,88121],{"class":47,"line":8122},[45,88118,88053],{"class":55},[45,88120,59],{"class":51},[45,88122,88123],{"class":55}," oldObj[k]\n",[45,88125,88126],{"class":47,"line":8127},[45,88127,2679],{"class":55},[45,88129,88130],{"class":47,"line":8133},[45,88131,52498],{"class":55},[45,88133,88134],{"class":47,"line":8160},[45,88135,2337],{"class":55},[45,88137,88138,88141,88144],{"class":47,"line":8165},[45,88139,88140],{"class":69},"    deepCopy",[45,88142,88143],{"class":55},"(o, obj) ",[45,88145,88146],{"class":337},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[45,88148,88149,88151,88153],{"class":47,"line":8171},[45,88150,73853],{"class":55},[45,88152,58347],{"class":69},[45,88154,88155],{"class":55},"(o)\n",[45,88157,88158,88161,88163],{"class":47,"line":8183},[45,88159,88160],{"class":55},"    o.age ",[45,88162,59],{"class":51},[45,88164,88165],{"class":79}," 20\n",[45,88167,88168,88171,88173,88175,88177],{"class":47,"line":8195},[45,88169,88170],{"class":55},"    o.hobby[",[45,88172,469],{"class":79},[45,88174,4593],{"class":55},[45,88176,59],{"class":51},[45,88178,88179],{"class":62}," '篮球'\n",[45,88181,88182,88185,88187],{"class":47,"line":8207},[45,88183,88184],{"class":55},"    o.family ",[45,88186,59],{"class":51},[45,88188,88189],{"class":62}," '老pink'\n",[45,88191,88192,88194,88196],{"class":47,"line":9866},[45,88193,73853],{"class":55},[45,88195,58347],{"class":69},[45,88197,70136],{"class":55},[45,88199,88200,88202,88204],{"class":47,"line":9890},[45,88201,52517],{"class":55},[45,88203,51913],{"class":51400},[45,88205,51407],{"class":55},[45,88207,88208,88210,88212],{"class":47,"line":9913},[45,88209,51885],{"class":55},[45,88211,51900],{"class":51400},[45,88213,51407],{"class":55},[45,88215,88216],{"class":47,"line":9937},[45,88217,2550],{"emptyLinePlaceholder":207},[45,88219,88220,88222,88224],{"class":47,"line":9942},[45,88221,51885],{"class":55},[45,88223,50735],{"class":51400},[45,88225,51407],{"class":55},[20,88227,88228],{},[23,88229],{"alt":25,"src":88230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22147,88232,88234,88235],{"id":88233},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[427,88236,88237],{},"js库lodash里面cloneDeep内部实现了深拷贝",[20,88239,88240],{},[516,88241,88242],{"href":88242,"rel":88243},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24012],[20,88245,88246],{},"lodash里边的方法都要加上一个下划线_",[20,88248,88249],{},"_.cloneDeep()",[36,88251,88253],{"className":50733,"code":88252,"language":50735,"meta":25,"style":25},"\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",[42,88254,88255,88265,88279,88283,88291,88305,88325,88337,88345,88349,88357,88362,88381,88389,88399,88407,88415,88427,88431,88437,88441,88445,88461,88469,88478,88486,88494,88502,88506],{"__ignoreMap":25},[45,88256,88257,88259,88261,88263],{"class":47,"line":48},[45,88258,51397],{"class":55},[45,88260,51401],{"class":51400},[45,88262,51404],{"class":69},[45,88264,51407],{"class":55},[45,88266,88267,88269,88271,88273,88275,88277],{"class":47,"line":66},[45,88268,1187],{"class":55},[45,88270,50735],{"class":51400},[45,88272,51416],{"class":69},[45,88274,59],{"class":55},[45,88276,51421],{"class":62},[45,88278,51407],{"class":55},[45,88280,88281],{"class":47,"line":1331},[45,88282,2550],{"emptyLinePlaceholder":207},[45,88284,88285,88287,88289],{"class":47,"line":1346},[45,88286,1187],{"class":55},[45,88288,51434],{"class":51400},[45,88290,51407],{"class":55},[45,88292,88293,88295,88297,88299,88301,88303],{"class":47,"line":1352},[45,88294,52244],{"class":55},[45,88296,51444],{"class":51400},[45,88298,51447],{"class":69},[45,88300,59],{"class":55},[45,88302,51452],{"class":62},[45,88304,51407],{"class":55},[45,88306,88307,88309,88311,88313,88315,88317,88319,88321,88323],{"class":47,"line":1366},[45,88308,52244],{"class":55},[45,88310,51444],{"class":51400},[45,88312,15069],{"class":69},[45,88314,59],{"class":55},[45,88316,51491],{"class":62},[45,88318,51471],{"class":69},[45,88320,59],{"class":55},[45,88322,51498],{"class":62},[45,88324,51407],{"class":55},[45,88326,88327,88329,88331,88333,88335],{"class":47,"line":1372},[45,88328,52244],{"class":55},[45,88330,51507],{"class":51400},[45,88332,51510],{"class":55},[45,88334,51507],{"class":51400},[45,88336,51407],{"class":55},[45,88338,88339,88341,88343],{"class":47,"line":1463},[45,88340,51885],{"class":55},[45,88342,51434],{"class":51400},[45,88344,51407],{"class":55},[45,88346,88347],{"class":47,"line":1469},[45,88348,2550],{"emptyLinePlaceholder":207},[45,88350,88351,88353,88355],{"class":47,"line":1481},[45,88352,1187],{"class":55},[45,88354,51900],{"class":51400},[45,88356,51407],{"class":55},[45,88358,88359],{"class":47,"line":1763},[45,88360,88361],{"class":337},"  \u003C!-- 先引用这个库 -->\n",[45,88363,88364,88366,88368,88370,88372,88375,88377,88379],{"class":47,"line":1768},[45,88365,52244],{"class":55},[45,88367,51913],{"class":51400},[45,88369,55339],{"class":69},[45,88371,59],{"class":55},[45,88373,88374],{"class":62},"\"lodash.min.js\"",[45,88376,55414],{"class":55},[45,88378,51913],{"class":51400},[45,88380,51407],{"class":55},[45,88382,88383,88385,88387],{"class":47,"line":1774},[45,88384,52244],{"class":55},[45,88386,51913],{"class":51400},[45,88388,51407],{"class":55},[45,88390,88391,88393,88395,88397],{"class":47,"line":1779},[45,88392,11370],{"class":51},[45,88394,70071],{"class":79},[45,88396,13713],{"class":51},[45,88398,15721],{"class":55},[45,88400,88401,88403,88405],{"class":47,"line":1793},[45,88402,71716],{"class":55},[45,88404,87910],{"class":62},[45,88406,31566],{"class":55},[45,88408,88409,88411,88413],{"class":47,"line":1798},[45,88410,71726],{"class":55},[45,88412,927],{"class":79},[45,88414,31566],{"class":55},[45,88416,88417,88419,88421,88423,88425],{"class":47,"line":1804},[45,88418,87925],{"class":55},[45,88420,87928],{"class":62},[45,88422,12584],{"class":55},[45,88424,87933],{"class":62},[45,88426,87936],{"class":55},[45,88428,88429],{"class":47,"line":1825},[45,88430,77972],{"class":55},[45,88432,88433,88435],{"class":47,"line":1830},[45,88434,87945],{"class":55},[45,88436,87948],{"class":62},[45,88438,88439],{"class":47,"line":1844},[45,88440,52498],{"class":55},[45,88442,88443],{"class":47,"line":1849},[45,88444,2337],{"class":55},[45,88446,88447,88449,88451,88453,88456,88459],{"class":47,"line":1878},[45,88448,11370],{"class":51},[45,88450,87963],{"class":79},[45,88452,13713],{"class":51},[45,88454,88455],{"class":55}," _.",[45,88457,88458],{"class":69},"cloneDeep",[45,88460,70136],{"class":55},[45,88462,88463,88465,88467],{"class":47,"line":1883},[45,88464,73853],{"class":55},[45,88466,58347],{"class":69},[45,88468,88155],{"class":55},[45,88470,88471,88474,88476],{"class":47,"line":1900},[45,88472,88473],{"class":55},"    o.family.baby ",[45,88475,59],{"class":51},[45,88477,88189],{"class":62},[45,88479,88480,88482,88484],{"class":47,"line":1905},[45,88481,73853],{"class":55},[45,88483,58347],{"class":69},[45,88485,70136],{"class":55},[45,88487,88488,88490,88492],{"class":47,"line":1910},[45,88489,52517],{"class":55},[45,88491,51913],{"class":51400},[45,88493,51407],{"class":55},[45,88495,88496,88498,88500],{"class":47,"line":1915},[45,88497,51885],{"class":55},[45,88499,51900],{"class":51400},[45,88501,51407],{"class":55},[45,88503,88504],{"class":47,"line":1929},[45,88505,2550],{"emptyLinePlaceholder":207},[45,88507,88508,88510,88512],{"class":47,"line":1934},[45,88509,51885],{"class":55},[45,88511,50735],{"class":51400},[45,88513,51407],{"class":55},[20,88515,88516],{},[23,88517],{"alt":25,"src":88518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22147,88520,88522],{"id":88521},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[36,88524,88526],{"className":50733,"code":88525,"language":50735,"meta":25,"style":25},"\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",[42,88527,88528,88538,88552,88556,88564,88578,88598,88610,88618,88622,88630,88638,88648,88656,88664,88676,88680,88686,88690,88694,88699,88704,88709,88735,88743,88752,88760,88768,88776,88780],{"__ignoreMap":25},[45,88529,88530,88532,88534,88536],{"class":47,"line":48},[45,88531,51397],{"class":55},[45,88533,51401],{"class":51400},[45,88535,51404],{"class":69},[45,88537,51407],{"class":55},[45,88539,88540,88542,88544,88546,88548,88550],{"class":47,"line":66},[45,88541,1187],{"class":55},[45,88543,50735],{"class":51400},[45,88545,51416],{"class":69},[45,88547,59],{"class":55},[45,88549,51421],{"class":62},[45,88551,51407],{"class":55},[45,88553,88554],{"class":47,"line":1331},[45,88555,2550],{"emptyLinePlaceholder":207},[45,88557,88558,88560,88562],{"class":47,"line":1346},[45,88559,1187],{"class":55},[45,88561,51434],{"class":51400},[45,88563,51407],{"class":55},[45,88565,88566,88568,88570,88572,88574,88576],{"class":47,"line":1352},[45,88567,52244],{"class":55},[45,88569,51444],{"class":51400},[45,88571,51447],{"class":69},[45,88573,59],{"class":55},[45,88575,51452],{"class":62},[45,88577,51407],{"class":55},[45,88579,88580,88582,88584,88586,88588,88590,88592,88594,88596],{"class":47,"line":1366},[45,88581,52244],{"class":55},[45,88583,51444],{"class":51400},[45,88585,15069],{"class":69},[45,88587,59],{"class":55},[45,88589,51491],{"class":62},[45,88591,51471],{"class":69},[45,88593,59],{"class":55},[45,88595,51498],{"class":62},[45,88597,51407],{"class":55},[45,88599,88600,88602,88604,88606,88608],{"class":47,"line":1372},[45,88601,52244],{"class":55},[45,88603,51507],{"class":51400},[45,88605,51510],{"class":55},[45,88607,51507],{"class":51400},[45,88609,51407],{"class":55},[45,88611,88612,88614,88616],{"class":47,"line":1463},[45,88613,51885],{"class":55},[45,88615,51434],{"class":51400},[45,88617,51407],{"class":55},[45,88619,88620],{"class":47,"line":1469},[45,88621,2550],{"emptyLinePlaceholder":207},[45,88623,88624,88626,88628],{"class":47,"line":1481},[45,88625,1187],{"class":55},[45,88627,51900],{"class":51400},[45,88629,51407],{"class":55},[45,88631,88632,88634,88636],{"class":47,"line":1763},[45,88633,52244],{"class":55},[45,88635,51913],{"class":51400},[45,88637,51407],{"class":55},[45,88639,88640,88642,88644,88646],{"class":47,"line":1768},[45,88641,11370],{"class":51},[45,88643,70071],{"class":79},[45,88645,13713],{"class":51},[45,88647,15721],{"class":55},[45,88649,88650,88652,88654],{"class":47,"line":1774},[45,88651,71716],{"class":55},[45,88653,87910],{"class":62},[45,88655,31566],{"class":55},[45,88657,88658,88660,88662],{"class":47,"line":1779},[45,88659,71726],{"class":55},[45,88661,927],{"class":79},[45,88663,31566],{"class":55},[45,88665,88666,88668,88670,88672,88674],{"class":47,"line":1793},[45,88667,87925],{"class":55},[45,88669,87928],{"class":62},[45,88671,12584],{"class":55},[45,88673,87933],{"class":62},[45,88675,87936],{"class":55},[45,88677,88678],{"class":47,"line":1798},[45,88679,77972],{"class":55},[45,88681,88682,88684],{"class":47,"line":1804},[45,88683,87945],{"class":55},[45,88685,87948],{"class":62},[45,88687,88688],{"class":47,"line":1825},[45,88689,52498],{"class":55},[45,88691,88692],{"class":47,"line":1830},[45,88693,2337],{"class":55},[45,88695,88696],{"class":47,"line":1844},[45,88697,88698],{"class":337},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[45,88700,88701],{"class":47,"line":1849},[45,88702,88703],{"class":337},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[45,88705,88706],{"class":47,"line":1878},[45,88707,88708],{"class":337},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[45,88710,88711,88713,88715,88717,88720,88722,88725,88727,88729,88731,88733],{"class":47,"line":1883},[45,88712,11370],{"class":51},[45,88714,87963],{"class":79},[45,88716,13713],{"class":51},[45,88718,88719],{"class":79}," JSON",[45,88721,835],{"class":55},[45,88723,88724],{"class":69},"parse",[45,88726,282],{"class":55},[45,88728,71764],{"class":79},[45,88730,835],{"class":55},[45,88732,71769],{"class":69},[45,88734,71772],{"class":55},[45,88736,88737,88739,88741],{"class":47,"line":1900},[45,88738,73853],{"class":55},[45,88740,58347],{"class":69},[45,88742,88155],{"class":55},[45,88744,88745,88747,88749],{"class":47,"line":1905},[45,88746,88473],{"class":55},[45,88748,59],{"class":51},[45,88750,88751],{"class":62}," '123'\n",[45,88753,88754,88756,88758],{"class":47,"line":1910},[45,88755,73853],{"class":55},[45,88757,58347],{"class":69},[45,88759,70136],{"class":55},[45,88761,88762,88764,88766],{"class":47,"line":1915},[45,88763,52517],{"class":55},[45,88765,51913],{"class":51400},[45,88767,51407],{"class":55},[45,88769,88770,88772,88774],{"class":47,"line":1929},[45,88771,51885],{"class":55},[45,88773,51900],{"class":51400},[45,88775,51407],{"class":55},[45,88777,88778],{"class":47,"line":1934},[45,88779,2550],{"emptyLinePlaceholder":207},[45,88781,88782,88784,88786],{"class":47,"line":2727},[45,88783,51885],{"class":55},[45,88785,50735],{"class":51400},[45,88787,51407],{"class":55},[20,88789,88790],{},[23,88791],{"alt":25,"src":88792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[15,88794,88796],{"id":88795},"_415-异常处理","4.15 异常处理",[233,88798,88799],{},[169,88800,88801],{},"throw抛异常",[20,88803,88804],{},[23,88805],{"alt":25,"src":88806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[233,88808,88809],{"start":66},[169,88810,88811],{},"try\u002Fcatch 捕获错误信息",[20,88813,88814],{},[23,88815],{"alt":25,"src":88816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[36,88818,88820],{"className":50733,"code":88819,"language":50735,"meta":25,"style":25},"\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",[42,88821,88822,88832,88846,88850,88858,88872,88892,88904,88912,88916,88924,88936,88944,88953,88960,88965,88984,88993,89004,89009,89019,89024,89029,89034,89051,89055,89060,89067,89079,89083,89095,89099,89103,89108,89113,89120,89128,89136,89140],{"__ignoreMap":25},[45,88823,88824,88826,88828,88830],{"class":47,"line":48},[45,88825,51397],{"class":55},[45,88827,51401],{"class":51400},[45,88829,51404],{"class":69},[45,88831,51407],{"class":55},[45,88833,88834,88836,88838,88840,88842,88844],{"class":47,"line":66},[45,88835,1187],{"class":55},[45,88837,50735],{"class":51400},[45,88839,51416],{"class":69},[45,88841,59],{"class":55},[45,88843,51421],{"class":62},[45,88845,51407],{"class":55},[45,88847,88848],{"class":47,"line":1331},[45,88849,2550],{"emptyLinePlaceholder":207},[45,88851,88852,88854,88856],{"class":47,"line":1346},[45,88853,1187],{"class":55},[45,88855,51434],{"class":51400},[45,88857,51407],{"class":55},[45,88859,88860,88862,88864,88866,88868,88870],{"class":47,"line":1352},[45,88861,52244],{"class":55},[45,88863,51444],{"class":51400},[45,88865,51447],{"class":69},[45,88867,59],{"class":55},[45,88869,51452],{"class":62},[45,88871,51407],{"class":55},[45,88873,88874,88876,88878,88880,88882,88884,88886,88888,88890],{"class":47,"line":1366},[45,88875,52244],{"class":55},[45,88877,51444],{"class":51400},[45,88879,15069],{"class":69},[45,88881,59],{"class":55},[45,88883,51491],{"class":62},[45,88885,51471],{"class":69},[45,88887,59],{"class":55},[45,88889,51498],{"class":62},[45,88891,51407],{"class":55},[45,88893,88894,88896,88898,88900,88902],{"class":47,"line":1372},[45,88895,52244],{"class":55},[45,88897,51507],{"class":51400},[45,88899,51510],{"class":55},[45,88901,51507],{"class":51400},[45,88903,51407],{"class":55},[45,88905,88906,88908,88910],{"class":47,"line":1463},[45,88907,51885],{"class":55},[45,88909,51434],{"class":51400},[45,88911,51407],{"class":55},[45,88913,88914],{"class":47,"line":1469},[45,88915,2550],{"emptyLinePlaceholder":207},[45,88917,88918,88920,88922],{"class":47,"line":1481},[45,88919,1187],{"class":55},[45,88921,51900],{"class":51400},[45,88923,51407],{"class":55},[45,88925,88926,88928,88930,88932,88934],{"class":47,"line":1763},[45,88927,52244],{"class":55},[45,88929,20],{"class":51400},[45,88931,53594],{"class":55},[45,88933,20],{"class":51400},[45,88935,51407],{"class":55},[45,88937,88938,88940,88942],{"class":47,"line":1768},[45,88939,52244],{"class":55},[45,88941,51913],{"class":51400},[45,88943,51407],{"class":55},[45,88945,88946,88948,88951],{"class":47,"line":1774},[45,88947,70184],{"class":51},[45,88949,88950],{"class":69}," fn",[45,88952,11002],{"class":55},[45,88954,88955,88958],{"class":47,"line":1779},[45,88956,88957],{"class":51},"      try",[45,88959,15721],{"class":55},[45,88961,88962],{"class":47,"line":1793},[45,88963,88964],{"class":337},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[45,88966,88967,88969,88971,88973,88975,88977,88979,88982],{"class":47,"line":1798},[45,88968,61370],{"class":51},[45,88970,6975],{"class":79},[45,88972,13713],{"class":51},[45,88974,54496],{"class":55},[45,88976,54499],{"class":69},[45,88978,282],{"class":55},[45,88980,88981],{"class":62},"'.p'",[45,88983,139],{"class":55},[45,88985,88986,88989,88991],{"class":47,"line":1804},[45,88987,88988],{"class":55},"        p.style.color ",[45,88990,59],{"class":51},[45,88992,67151],{"class":62},[45,88994,88995,88998,89001],{"class":47,"line":1825},[45,88996,88997],{"class":55},"      } ",[45,88999,89000],{"class":51},"catch",[45,89002,89003],{"class":55}," (err) {\n",[45,89005,89006],{"class":47,"line":1830},[45,89007,89008],{"class":337},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[45,89010,89011,89014,89016],{"class":47,"line":1844},[45,89012,89013],{"class":55},"        console.",[45,89015,58347],{"class":69},[45,89017,89018],{"class":55},"(err.message)\n",[45,89020,89021],{"class":47,"line":1849},[45,89022,89023],{"class":337},"        \u002F\u002F 想要中断程序，需要加return\n",[45,89025,89026],{"class":47,"line":1878},[45,89027,89028],{"class":337},"        \u002F\u002F return\n",[45,89030,89031],{"class":47,"line":1883},[45,89032,89033],{"class":337},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[45,89035,89036,89039,89041,89044,89046,89049],{"class":47,"line":1900},[45,89037,89038],{"class":51},"        throw",[45,89040,11727],{"class":51},[45,89042,89043],{"class":69}," Error",[45,89045,282],{"class":55},[45,89047,89048],{"class":62},"'你看看，选择器错误了吧'",[45,89050,139],{"class":55},[45,89052,89053],{"class":47,"line":1905},[45,89054,52498],{"class":55},[45,89056,89057],{"class":47,"line":1910},[45,89058,89059],{"class":337},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[45,89061,89062,89065],{"class":47,"line":1915},[45,89063,89064],{"class":51},"      finally",[45,89066,15721],{"class":55},[45,89068,89069,89072,89074,89077],{"class":47,"line":1929},[45,89070,89071],{"class":69},"        alert",[45,89073,282],{"class":55},[45,89075,89076],{"class":62},"'弹出对话框'",[45,89078,139],{"class":55},[45,89080,89081],{"class":47,"line":1934},[45,89082,52498],{"class":55},[45,89084,89085,89087,89089,89091,89093],{"class":47,"line":2727},[45,89086,58344],{"class":55},[45,89088,58347],{"class":69},[45,89090,282],{"class":55},[45,89092,749],{"class":79},[45,89094,139],{"class":55},[45,89096,89097],{"class":47,"line":2741},[45,89098,2550],{"emptyLinePlaceholder":207},[45,89100,89101],{"class":47,"line":2749},[45,89102,2337],{"class":55},[45,89104,89105],{"class":47,"line":2754},[45,89106,89107],{"class":337},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[45,89109,89110],{"class":47,"line":2760},[45,89111,89112],{"class":337},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[45,89114,89115,89118],{"class":47,"line":2766},[45,89116,89117],{"class":69},"    fn",[45,89119,2126],{"class":55},[45,89121,89122,89124,89126],{"class":47,"line":2771},[45,89123,52517],{"class":55},[45,89125,51913],{"class":51400},[45,89127,51407],{"class":55},[45,89129,89130,89132,89134],{"class":47,"line":8098},[45,89131,51885],{"class":55},[45,89133,51900],{"class":51400},[45,89135,51407],{"class":55},[45,89137,89138],{"class":47,"line":8122},[45,89139,2550],{"emptyLinePlaceholder":207},[45,89141,89142,89144,89146],{"class":47,"line":8127},[45,89143,51885],{"class":55},[45,89145,50735],{"class":51400},[45,89147,51407],{"class":55},[20,89149,89150],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[233,89152,89153],{"start":1331},[169,89154,89155],{},"debugger",[20,89157,89158],{},[23,89159],{"alt":25,"src":89160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[20,89162,89163],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[15,89165,89167],{"id":89166},"_416-处理this","4.16 处理this",[249,89169,89171],{"id":89170},"_4161-this的指向","4.16.1 this的指向",[233,89173,89174],{},[169,89175,89176],{},"普通函数的this",[20,89178,89179],{},[23,89180],{"alt":25,"src":89181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[233,89183,89184],{"start":66},[169,89185,89186],{},"箭头函数的this",[20,89188,89189],{},[23,89190],{"alt":25,"src":89191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[20,89193,89194],{},[23,89195],{"alt":25,"src":89196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[20,89198,89199],{},[23,89200],{"alt":25,"src":89201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[249,89203,89205],{"id":89204},"_4162-this的改变","4.16.2 this的改变",[20,89207,89208],{},"call() apply() bind()",[233,89210,89211],{},[169,89212,89213],{},"call()",[20,89215,89216],{},[23,89217],{"alt":25,"src":89218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[20,89220,89221],{},"两个作用：①调用函数；②改变this指向",[36,89223,89225],{"className":53167,"code":89224,"language":53169,"meta":25,"style":25},"\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",[42,89226,89227,89235,89243,89247,89252,89256,89261,89266,89271,89275,89280,89288],{"__ignoreMap":25},[45,89228,89229,89231,89233],{"class":47,"line":48},[45,89230,1187],{"class":55},[45,89232,51900],{"class":51400},[45,89234,51407],{"class":55},[45,89236,89237,89239,89241],{"class":47,"line":66},[45,89238,52244],{"class":55},[45,89240,51913],{"class":51400},[45,89242,51407],{"class":55},[45,89244,89245],{"class":47,"line":1331},[45,89246,71623],{"class":55},[45,89248,89249],{"class":47,"line":1346},[45,89250,89251],{"class":55},"      uname: 'pink'\n",[45,89253,89254],{"class":47,"line":1352},[45,89255,2337],{"class":55},[45,89257,89258],{"class":47,"line":1366},[45,89259,89260],{"class":55},"    function fn(x, y) {\n",[45,89262,89263],{"class":47,"line":1372},[45,89264,89265],{"class":55},"      console.log(this)  \u002F\u002Fwindow\n",[45,89267,89268],{"class":47,"line":1463},[45,89269,89270],{"class":55},"      console.log(x + y)\n",[45,89272,89273],{"class":47,"line":1469},[45,89274,2337],{"class":55},[45,89276,89277],{"class":47,"line":1481},[45,89278,89279],{"class":55},"    fn.call(obj, 1, 2)\n",[45,89281,89282,89284,89286],{"class":47,"line":1763},[45,89283,52517],{"class":55},[45,89285,51913],{"class":51400},[45,89287,51407],{"class":55},[45,89289,89290,89292,89294],{"class":47,"line":1768},[45,89291,51885],{"class":55},[45,89293,51900],{"class":51400},[45,89295,51407],{"class":55},[20,89297,89298],{},[23,89299],{"alt":25,"src":89300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[233,89302,89303],{"start":66},[169,89304,89305],{},"apply()",[20,89307,89308],{},[23,89309],{"alt":25,"src":89310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[20,89312,89221],{},[20,89314,89315],{},"call传递的是普通参数，而apply必须传递的是数组",[36,89317,89319],{"className":50733,"code":89318,"language":50735,"meta":25,"style":25},"\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",[42,89320,89321,89331,89345,89349,89357,89371,89391,89403,89411,89415,89423,89431,89441,89448,89452,89457,89473,89485,89499,89503,89508,89527,89532,89536,89541,89546,89554,89559,89581,89586,89602,89618,89630,89634,89639,89658,89666,89674,89678],{"__ignoreMap":25},[45,89322,89323,89325,89327,89329],{"class":47,"line":48},[45,89324,51397],{"class":55},[45,89326,51401],{"class":51400},[45,89328,51404],{"class":69},[45,89330,51407],{"class":55},[45,89332,89333,89335,89337,89339,89341,89343],{"class":47,"line":66},[45,89334,1187],{"class":55},[45,89336,50735],{"class":51400},[45,89338,51416],{"class":69},[45,89340,59],{"class":55},[45,89342,51421],{"class":62},[45,89344,51407],{"class":55},[45,89346,89347],{"class":47,"line":1331},[45,89348,2550],{"emptyLinePlaceholder":207},[45,89350,89351,89353,89355],{"class":47,"line":1346},[45,89352,1187],{"class":55},[45,89354,51434],{"class":51400},[45,89356,51407],{"class":55},[45,89358,89359,89361,89363,89365,89367,89369],{"class":47,"line":1352},[45,89360,52244],{"class":55},[45,89362,51444],{"class":51400},[45,89364,51447],{"class":69},[45,89366,59],{"class":55},[45,89368,51452],{"class":62},[45,89370,51407],{"class":55},[45,89372,89373,89375,89377,89379,89381,89383,89385,89387,89389],{"class":47,"line":1366},[45,89374,52244],{"class":55},[45,89376,51444],{"class":51400},[45,89378,15069],{"class":69},[45,89380,59],{"class":55},[45,89382,51491],{"class":62},[45,89384,51471],{"class":69},[45,89386,59],{"class":55},[45,89388,51498],{"class":62},[45,89390,51407],{"class":55},[45,89392,89393,89395,89397,89399,89401],{"class":47,"line":1372},[45,89394,52244],{"class":55},[45,89396,51507],{"class":51400},[45,89398,51510],{"class":55},[45,89400,51507],{"class":51400},[45,89402,51407],{"class":55},[45,89404,89405,89407,89409],{"class":47,"line":1463},[45,89406,51885],{"class":55},[45,89408,51434],{"class":51400},[45,89410,51407],{"class":55},[45,89412,89413],{"class":47,"line":1469},[45,89414,2550],{"emptyLinePlaceholder":207},[45,89416,89417,89419,89421],{"class":47,"line":1481},[45,89418,1187],{"class":55},[45,89420,51900],{"class":51400},[45,89422,51407],{"class":55},[45,89424,89425,89427,89429],{"class":47,"line":1763},[45,89426,52244],{"class":55},[45,89428,51913],{"class":51400},[45,89430,51407],{"class":55},[45,89432,89433,89435,89437,89439],{"class":47,"line":1768},[45,89434,11370],{"class":51},[45,89436,70071],{"class":79},[45,89438,13713],{"class":51},[45,89440,15721],{"class":55},[45,89442,89443,89445],{"class":47,"line":1774},[45,89444,71726],{"class":55},[45,89446,89447],{"class":79},"18\n",[45,89449,89450],{"class":47,"line":1779},[45,89451,2337],{"class":55},[45,89453,89454],{"class":47,"line":1793},[45,89455,89456],{"class":337},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[45,89458,89459,89461,89463,89465,89467,89469,89471],{"class":47,"line":1798},[45,89460,70184],{"class":51},[45,89462,88950],{"class":69},[45,89464,282],{"class":55},[45,89466,1097],{"class":5366},[45,89468,12584],{"class":55},[45,89470,1122],{"class":5366},[45,89472,12591],{"class":55},[45,89474,89475,89477,89479,89481,89483],{"class":47,"line":1804},[45,89476,58344],{"class":55},[45,89478,58347],{"class":69},[45,89480,282],{"class":55},[45,89482,87093],{"class":79},[45,89484,139],{"class":55},[45,89486,89487,89489,89491,89494,89496],{"class":47,"line":1825},[45,89488,58344],{"class":55},[45,89490,58347],{"class":69},[45,89492,89493],{"class":55},"(x ",[45,89495,758],{"class":51},[45,89497,89498],{"class":55}," y)\n",[45,89500,89501],{"class":47,"line":1830},[45,89502,2337],{"class":55},[45,89504,89505],{"class":47,"line":1844},[45,89506,89507],{"class":337},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[45,89509,89510,89513,89516,89519,89521,89523,89525],{"class":47,"line":1849},[45,89511,89512],{"class":55},"    fn.",[45,89514,89515],{"class":69},"apply",[45,89517,89518],{"class":55},"(obj, [",[45,89520,495],{"class":79},[45,89522,12584],{"class":55},[45,89524,356],{"class":79},[45,89526,4807],{"class":55},[45,89528,89529],{"class":47,"line":1878},[45,89530,89531],{"class":337},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[45,89533,89534],{"class":47,"line":1883},[45,89535,2550],{"emptyLinePlaceholder":207},[45,89537,89538],{"class":47,"line":1900},[45,89539,89540],{"class":337},"    \u002F\u002F 使用场景：求数组最大值\n",[45,89542,89543],{"class":47,"line":1905},[45,89544,89545],{"class":337},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[45,89547,89548,89551],{"class":47,"line":1910},[45,89549,89550],{"class":337},"    \u002F\u002F console.log(max)",[45,89552,89553],{"class":337},"   \u002F\u002F3\n",[45,89555,89556],{"class":47,"line":1915},[45,89557,89558],{"class":337},"    \u002F\u002F 指向空或者Math都是可以的\n",[45,89560,89561,89563,89565,89567,89569,89571,89573,89575,89577,89579],{"class":47,"line":1929},[45,89562,11370],{"class":51},[45,89564,57795],{"class":79},[45,89566,13713],{"class":51},[45,89568,52326],{"class":55},[45,89570,588],{"class":79},[45,89572,12584],{"class":55},[45,89574,781],{"class":79},[45,89576,12584],{"class":55},[45,89578,812],{"class":79},[45,89580,33346],{"class":55},[45,89582,89583],{"class":47,"line":1934},[45,89584,89585],{"class":337},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[45,89587,89588,89590,89592,89594,89597,89599],{"class":47,"line":2727},[45,89589,11370],{"class":51},[45,89591,6101],{"class":79},[45,89593,13713],{"class":51},[45,89595,89596],{"class":55}," Math.max.",[45,89598,89515],{"class":69},[45,89600,89601],{"class":55},"(Math, arr)\n",[45,89603,89604,89606,89609,89611,89614,89616],{"class":47,"line":2741},[45,89605,11370],{"class":51},[45,89607,89608],{"class":79}," min",[45,89610,13713],{"class":51},[45,89612,89613],{"class":55}," Math.min.",[45,89615,89515],{"class":69},[45,89617,89601],{"class":55},[45,89619,89620,89622,89624,89627],{"class":47,"line":2749},[45,89621,73853],{"class":55},[45,89623,58347],{"class":69},[45,89625,89626],{"class":55},"(max, min)     ",[45,89628,89629],{"class":337},"\u002F\u002F100,4\n",[45,89631,89632],{"class":47,"line":2754},[45,89633,2550],{"emptyLinePlaceholder":207},[45,89635,89636],{"class":47,"line":2760},[45,89637,89638],{"class":337},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[45,89640,89641,89643,89645,89648,89650,89652,89655],{"class":47,"line":2766},[45,89642,73853],{"class":55},[45,89644,58347],{"class":69},[45,89646,89647],{"class":55},"(Max.",[45,89649,6165],{"class":69},[45,89651,282],{"class":55},[45,89653,89654],{"class":51},"...",[45,89656,89657],{"class":55},"arr))\n",[45,89659,89660,89662,89664],{"class":47,"line":2771},[45,89661,52517],{"class":55},[45,89663,51913],{"class":51400},[45,89665,51407],{"class":55},[45,89667,89668,89670,89672],{"class":47,"line":8098},[45,89669,51885],{"class":55},[45,89671,51900],{"class":51400},[45,89673,51407],{"class":55},[45,89675,89676],{"class":47,"line":8122},[45,89677,2550],{"emptyLinePlaceholder":207},[45,89679,89680,89682,89684],{"class":47,"line":8127},[45,89681,51885],{"class":55},[45,89683,50735],{"class":51400},[45,89685,51407],{"class":55},[20,89687,89688],{},[23,89689],{"alt":25,"src":89690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[233,89692,89693],{"start":1331},[169,89694,89695],{},"bind()",[20,89697,89698],{},[23,89699],{"alt":25,"src":89700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[20,89702,89703],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[20,89705,89706],{},"bind的语法跟call很相似",[36,89708,89710],{"className":53167,"code":89709,"language":53169,"meta":25,"style":25},"\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",[42,89711,89712,89720,89728,89732,89737,89741,89745,89750,89754,89759,89764,89769,89774,89779,89784,89789,89793,89801],{"__ignoreMap":25},[45,89713,89714,89716,89718],{"class":47,"line":48},[45,89715,1187],{"class":55},[45,89717,51900],{"class":51400},[45,89719,51407],{"class":55},[45,89721,89722,89724,89726],{"class":47,"line":66},[45,89723,52244],{"class":55},[45,89725,51913],{"class":51400},[45,89727,51407],{"class":55},[45,89729,89730],{"class":47,"line":1331},[45,89731,71623],{"class":55},[45,89733,89734],{"class":47,"line":1346},[45,89735,89736],{"class":55},"      age: 18\n",[45,89738,89739],{"class":47,"line":1352},[45,89740,2337],{"class":55},[45,89742,89743],{"class":47,"line":1366},[45,89744,77243],{"class":55},[45,89746,89747],{"class":47,"line":1372},[45,89748,89749],{"class":55},"      console.log(this)\n",[45,89751,89752],{"class":47,"line":1463},[45,89753,2337],{"class":55},[45,89755,89756],{"class":47,"line":1469},[45,89757,89758],{"class":55},"    \u002F\u002F 1.bind 不会调用函数\n",[45,89760,89761],{"class":47,"line":1481},[45,89762,89763],{"class":55},"    \u002F\u002F 2.bind能改变this的指向\n",[45,89765,89766],{"class":47,"line":1763},[45,89767,89768],{"class":55},"    fn.bind()\n",[45,89770,89771],{"class":47,"line":1768},[45,89772,89773],{"class":55},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[45,89775,89776],{"class":47,"line":1774},[45,89777,89778],{"class":55},"    const fun = fn.bind(obj)\n",[45,89780,89781],{"class":47,"line":1779},[45,89782,89783],{"class":55},"    \u002F\u002F console.log(fun)\n",[45,89785,89786],{"class":47,"line":1793},[45,89787,89788],{"class":55},"    \u002F\u002F 调用,查看this的指向\n",[45,89790,89791],{"class":47,"line":1798},[45,89792,52751],{"class":55},[45,89794,89795,89797,89799],{"class":47,"line":1804},[45,89796,52517],{"class":55},[45,89798,51913],{"class":51400},[45,89800,51407],{"class":55},[45,89802,89803,89805,89807],{"class":47,"line":1825},[45,89804,51885],{"class":55},[45,89806,51900],{"class":51400},[45,89808,51407],{"class":55},[20,89810,89811],{},[23,89812],{"alt":25,"src":89813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[233,89815,89816],{"start":1346},[169,89817,89818],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[36,89820,89822],{"className":53167,"code":89821,"language":53169,"meta":25,"style":25},"\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",[42,89823,89824,89832,89845,89853,89858,89862,89867,89872,89877,89882,89887,89892,89897,89902,89906,89914],{"__ignoreMap":25},[45,89825,89826,89828,89830],{"class":47,"line":48},[45,89827,1187],{"class":55},[45,89829,51900],{"class":51400},[45,89831,51407],{"class":55},[45,89833,89834,89836,89838,89841,89843],{"class":47,"line":66},[45,89835,52244],{"class":55},[45,89837,53987],{"class":51400},[45,89839,89840],{"class":55},">禁用\u003C\u002F",[45,89842,53987],{"class":51400},[45,89844,51407],{"class":55},[45,89846,89847,89849,89851],{"class":47,"line":1331},[45,89848,52244],{"class":55},[45,89850,51913],{"class":51400},[45,89852,51407],{"class":55},[45,89854,89855],{"class":47,"line":1346},[45,89856,89857],{"class":55},"    const btn = document.querySelector('button')\n",[45,89859,89860],{"class":47,"line":1352},[45,89861,59116],{"class":55},[45,89863,89864],{"class":47,"line":1366},[45,89865,89866],{"class":55},"      this.disabled = true\n",[45,89868,89869],{"class":47,"line":1372},[45,89870,89871],{"class":55},"      \u002F\u002F 定时器是window进行调用的\n",[45,89873,89874],{"class":47,"line":1463},[45,89875,89876],{"class":55},"      setTimeout(function () {\n",[45,89878,89879],{"class":47,"line":1469},[45,89880,89881],{"class":55},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[45,89883,89884],{"class":47,"line":1481},[45,89885,89886],{"class":55},"        this.disabled = false\n",[45,89888,89889],{"class":47,"line":1763},[45,89890,89891],{"class":55},"      }.bind(this), 2000)\n",[45,89893,89894],{"class":47,"line":1768},[45,89895,89896],{"class":55},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[45,89898,89899],{"class":47,"line":1774},[45,89900,89901],{"class":55},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[45,89903,89904],{"class":47,"line":1779},[45,89905,33561],{"class":55},[45,89907,89908,89910,89912],{"class":47,"line":1793},[45,89909,52517],{"class":55},[45,89911,51913],{"class":51400},[45,89913,51407],{"class":55},[45,89915,89916,89918,89920],{"class":47,"line":1798},[45,89917,51885],{"class":55},[45,89919,51900],{"class":51400},[45,89921,51407],{"class":55},[233,89923,89924],{"start":1352},[169,89925,22102],{},[20,89927,89928],{},[23,89929],{"alt":25,"src":89930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[15,89932,89934],{"id":89933},"_417-性能优化","4.17 性能优化",[249,89936,89938],{"id":89937},"_4171-防抖","4.17.1 防抖",[20,89940,89941],{},[23,89942],{"alt":25,"src":89943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[20,89945,89946],{},[427,89947,89948],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[20,89950,89951],{},"防抖实现方式：",[166,89953,89954],{},[169,89955,89956],{},"lodash 提供了防抖处理",[20,89958,89959],{},"_.debounce(func,[wait=0],[options={}])",[20,89961,89962],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[36,89964,89966],{"className":50733,"code":89965,"language":50735,"meta":25,"style":25},"\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",[42,89967,89968,89978,89992,89996,90004,90018,90038,90050,90058,90064,90074,90086,90098,90109,90121,90131,90141,90154,90158,90166,90174,90178,90186,90204,90222,90230,90249,90259,90268,90279,90284,90288,90293,90298,90303,90328,90336,90344,90348],{"__ignoreMap":25},[45,89969,89970,89972,89974,89976],{"class":47,"line":48},[45,89971,51397],{"class":55},[45,89973,51401],{"class":51400},[45,89975,51404],{"class":69},[45,89977,51407],{"class":55},[45,89979,89980,89982,89984,89986,89988,89990],{"class":47,"line":66},[45,89981,1187],{"class":55},[45,89983,50735],{"class":51400},[45,89985,51416],{"class":69},[45,89987,59],{"class":55},[45,89989,51421],{"class":62},[45,89991,51407],{"class":55},[45,89993,89994],{"class":47,"line":1331},[45,89995,2550],{"emptyLinePlaceholder":207},[45,89997,89998,90000,90002],{"class":47,"line":1346},[45,89999,1187],{"class":55},[45,90001,51434],{"class":51400},[45,90003,51407],{"class":55},[45,90005,90006,90008,90010,90012,90014,90016],{"class":47,"line":1352},[45,90007,52244],{"class":55},[45,90009,51444],{"class":51400},[45,90011,51447],{"class":69},[45,90013,59],{"class":55},[45,90015,51452],{"class":62},[45,90017,51407],{"class":55},[45,90019,90020,90022,90024,90026,90028,90030,90032,90034,90036],{"class":47,"line":1366},[45,90021,52244],{"class":55},[45,90023,51444],{"class":51400},[45,90025,15069],{"class":69},[45,90027,59],{"class":55},[45,90029,51491],{"class":62},[45,90031,51471],{"class":69},[45,90033,59],{"class":55},[45,90035,51498],{"class":62},[45,90037,51407],{"class":55},[45,90039,90040,90042,90044,90046,90048],{"class":47,"line":1372},[45,90041,52244],{"class":55},[45,90043,51507],{"class":51400},[45,90045,51510],{"class":55},[45,90047,51507],{"class":51400},[45,90049,51407],{"class":55},[45,90051,90052,90054,90056],{"class":47,"line":1463},[45,90053,52244],{"class":55},[45,90055,196],{"class":51400},[45,90057,51407],{"class":55},[45,90059,90060,90062],{"class":47,"line":1469},[45,90061,54852],{"class":69},[45,90063,15721],{"class":55},[45,90065,90066,90068,90070,90072],{"class":47,"line":1481},[45,90067,72696],{"class":79},[45,90069,51537],{"class":55},[45,90071,60605],{"class":79},[45,90073,1442],{"class":55},[45,90075,90076,90078,90080,90082,90084],{"class":47,"line":1763},[45,90077,54871],{"class":79},[45,90079,51537],{"class":55},[45,90081,1873],{"class":79},[45,90083,51592],{"class":51},[45,90085,1442],{"class":55},[45,90087,90088,90090,90092,90094,90096],{"class":47,"line":1768},[45,90089,54885],{"class":79},[45,90091,51537],{"class":55},[45,90093,1873],{"class":79},[45,90095,51592],{"class":51},[45,90097,1442],{"class":55},[45,90099,90100,90102,90104,90107],{"class":47,"line":1774},[45,90101,54984],{"class":79},[45,90103,51537],{"class":55},[45,90105,90106],{"class":79},"gray",[45,90108,1442],{"class":55},[45,90110,90111,90113,90115,90117,90119],{"class":47,"line":1779},[45,90112,55022],{"class":79},[45,90114,51537],{"class":55},[45,90116,1102],{"class":79},[45,90118,51592],{"class":51},[45,90120,1442],{"class":55},[45,90122,90123,90125,90127,90129],{"class":47,"line":1793},[45,90124,57516],{"class":79},[45,90126,51537],{"class":55},[45,90128,60942],{"class":79},[45,90130,1442],{"class":55},[45,90132,90133,90135,90137,90139],{"class":47,"line":1798},[45,90134,57386],{"class":79},[45,90136,51537],{"class":55},[45,90138,51692],{"class":79},[45,90140,1442],{"class":55},[45,90142,90143,90146,90148,90150,90152],{"class":47,"line":1804},[45,90144,90145],{"class":79},"      padding-top",[45,90147,51537],{"class":55},[45,90149,596],{"class":79},[45,90151,51592],{"class":51},[45,90153,1442],{"class":55},[45,90155,90156],{"class":47,"line":1825},[45,90157,2337],{"class":55},[45,90159,90160,90162,90164],{"class":47,"line":1830},[45,90161,52517],{"class":55},[45,90163,196],{"class":51400},[45,90165,51407],{"class":55},[45,90167,90168,90170,90172],{"class":47,"line":1844},[45,90169,51885],{"class":55},[45,90171,51434],{"class":51400},[45,90173,51407],{"class":55},[45,90175,90176],{"class":47,"line":1849},[45,90177,2550],{"emptyLinePlaceholder":207},[45,90179,90180,90182,90184],{"class":47,"line":1878},[45,90181,1187],{"class":55},[45,90183,51900],{"class":51400},[45,90185,51407],{"class":55},[45,90187,90188,90190,90192,90194,90196,90198,90200,90202],{"class":47,"line":1883},[45,90189,52244],{"class":55},[45,90191,51711],{"class":51400},[45,90193,53586],{"class":69},[45,90195,59],{"class":55},[45,90197,53591],{"class":62},[45,90199,55414],{"class":55},[45,90201,51711],{"class":51400},[45,90203,51407],{"class":55},[45,90205,90206,90208,90210,90212,90214,90216,90218,90220],{"class":47,"line":1900},[45,90207,52244],{"class":55},[45,90209,51913],{"class":51400},[45,90211,55339],{"class":69},[45,90213,59],{"class":55},[45,90215,88374],{"class":62},[45,90217,55414],{"class":55},[45,90219,51913],{"class":51400},[45,90221,51407],{"class":55},[45,90223,90224,90226,90228],{"class":47,"line":1905},[45,90225,52244],{"class":55},[45,90227,51913],{"class":51400},[45,90229,51407],{"class":55},[45,90231,90232,90234,90236,90238,90240,90242,90244,90247],{"class":47,"line":1910},[45,90233,11370],{"class":51},[45,90235,87033],{"class":79},[45,90237,13713],{"class":51},[45,90239,54496],{"class":55},[45,90241,54499],{"class":69},[45,90243,282],{"class":55},[45,90245,90246],{"class":62},"'.box'",[45,90248,139],{"class":55},[45,90250,90251,90253,90255,90257],{"class":47,"line":1915},[45,90252,52319],{"class":51},[45,90254,9588],{"class":55},[45,90256,59],{"class":51},[45,90258,47433],{"class":79},[45,90260,90261,90263,90266],{"class":47,"line":1929},[45,90262,70184],{"class":51},[45,90264,90265],{"class":69}," mouseMove",[45,90267,11002],{"class":55},[45,90269,90270,90273,90275,90277],{"class":47,"line":1934},[45,90271,90272],{"class":55},"      box.innerHTML ",[45,90274,59],{"class":51},[45,90276,3182],{"class":55},[45,90278,2852],{"class":51},[45,90280,90281],{"class":47,"line":2727},[45,90282,90283],{"class":337},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[45,90285,90286],{"class":47,"line":2741},[45,90287,2337],{"class":55},[45,90289,90290],{"class":47,"line":2749},[45,90291,90292],{"class":337},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[45,90294,90295],{"class":47,"line":2754},[45,90296,90297],{"class":337},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[45,90299,90300],{"class":47,"line":2760},[45,90301,90302],{"class":337},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[45,90304,90305,90308,90310,90312,90315,90318,90321,90324,90326],{"class":47,"line":2766},[45,90306,90307],{"class":55},"    box.",[45,90309,57913],{"class":69},[45,90311,282],{"class":55},[45,90313,90314],{"class":62},"'mousemove'",[45,90316,90317],{"class":55},", _.",[45,90319,90320],{"class":69},"debounce",[45,90322,90323],{"class":55},"(mouseMove, ",[45,90325,65174],{"class":79},[45,90327,30597],{"class":55},[45,90329,90330,90332,90334],{"class":47,"line":2771},[45,90331,52517],{"class":55},[45,90333,51913],{"class":51400},[45,90335,51407],{"class":55},[45,90337,90338,90340,90342],{"class":47,"line":8098},[45,90339,51885],{"class":55},[45,90341,51900],{"class":51400},[45,90343,51407],{"class":55},[45,90345,90346],{"class":47,"line":8122},[45,90347,2550],{"emptyLinePlaceholder":207},[45,90349,90350,90352,90354],{"class":47,"line":8127},[45,90351,51885],{"class":55},[45,90353,50735],{"class":51400},[45,90355,51407],{"class":55},[166,90357,90358],{},[169,90359,90360],{},"手写一个防抖函数来处理",[20,90362,90363],{},"防抖的核心就是利用定时器来实现的：",[20,90365,90366],{},"①声明一个定时器变量",[20,90368,90369],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[20,90371,90372],{},"③如果没有定时器则开启定时器，记得存到变量里面",[36,90374,90376],{"className":50733,"code":90375,"language":50735,"meta":25,"style":25},"\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",[42,90377,90378,90388,90402,90406,90414,90428,90448,90460,90468,90474,90484,90496,90508,90518,90530,90540,90550,90562,90566,90574,90582,90586,90594,90612,90630,90638,90656,90666,90674,90684,90688,90692,90696,90701,90706,90711,90716,90721,90726,90744,90751,90756,90764,90769,90782,90798,90808,90813,90817,90821,90841,90845,90850,90855,90860,90865,90873,90881,90885],{"__ignoreMap":25},[45,90379,90380,90382,90384,90386],{"class":47,"line":48},[45,90381,51397],{"class":55},[45,90383,51401],{"class":51400},[45,90385,51404],{"class":69},[45,90387,51407],{"class":55},[45,90389,90390,90392,90394,90396,90398,90400],{"class":47,"line":66},[45,90391,1187],{"class":55},[45,90393,50735],{"class":51400},[45,90395,51416],{"class":69},[45,90397,59],{"class":55},[45,90399,51421],{"class":62},[45,90401,51407],{"class":55},[45,90403,90404],{"class":47,"line":1331},[45,90405,2550],{"emptyLinePlaceholder":207},[45,90407,90408,90410,90412],{"class":47,"line":1346},[45,90409,1187],{"class":55},[45,90411,51434],{"class":51400},[45,90413,51407],{"class":55},[45,90415,90416,90418,90420,90422,90424,90426],{"class":47,"line":1352},[45,90417,52244],{"class":55},[45,90419,51444],{"class":51400},[45,90421,51447],{"class":69},[45,90423,59],{"class":55},[45,90425,51452],{"class":62},[45,90427,51407],{"class":55},[45,90429,90430,90432,90434,90436,90438,90440,90442,90444,90446],{"class":47,"line":1366},[45,90431,52244],{"class":55},[45,90433,51444],{"class":51400},[45,90435,15069],{"class":69},[45,90437,59],{"class":55},[45,90439,51491],{"class":62},[45,90441,51471],{"class":69},[45,90443,59],{"class":55},[45,90445,51498],{"class":62},[45,90447,51407],{"class":55},[45,90449,90450,90452,90454,90456,90458],{"class":47,"line":1372},[45,90451,52244],{"class":55},[45,90453,51507],{"class":51400},[45,90455,51510],{"class":55},[45,90457,51507],{"class":51400},[45,90459,51407],{"class":55},[45,90461,90462,90464,90466],{"class":47,"line":1463},[45,90463,52244],{"class":55},[45,90465,196],{"class":51400},[45,90467,51407],{"class":55},[45,90469,90470,90472],{"class":47,"line":1469},[45,90471,54852],{"class":69},[45,90473,15721],{"class":55},[45,90475,90476,90478,90480,90482],{"class":47,"line":1481},[45,90477,72696],{"class":79},[45,90479,51537],{"class":55},[45,90481,60605],{"class":79},[45,90483,1442],{"class":55},[45,90485,90486,90488,90490,90492,90494],{"class":47,"line":1763},[45,90487,54871],{"class":79},[45,90489,51537],{"class":55},[45,90491,1873],{"class":79},[45,90493,51592],{"class":51},[45,90495,1442],{"class":55},[45,90497,90498,90500,90502,90504,90506],{"class":47,"line":1768},[45,90499,54885],{"class":79},[45,90501,51537],{"class":55},[45,90503,1873],{"class":79},[45,90505,51592],{"class":51},[45,90507,1442],{"class":55},[45,90509,90510,90512,90514,90516],{"class":47,"line":1774},[45,90511,54984],{"class":79},[45,90513,51537],{"class":55},[45,90515,90106],{"class":79},[45,90517,1442],{"class":55},[45,90519,90520,90522,90524,90526,90528],{"class":47,"line":1779},[45,90521,55022],{"class":79},[45,90523,51537],{"class":55},[45,90525,1102],{"class":79},[45,90527,51592],{"class":51},[45,90529,1442],{"class":55},[45,90531,90532,90534,90536,90538],{"class":47,"line":1793},[45,90533,57516],{"class":79},[45,90535,51537],{"class":55},[45,90537,60942],{"class":79},[45,90539,1442],{"class":55},[45,90541,90542,90544,90546,90548],{"class":47,"line":1798},[45,90543,57386],{"class":79},[45,90545,51537],{"class":55},[45,90547,51692],{"class":79},[45,90549,1442],{"class":55},[45,90551,90552,90554,90556,90558,90560],{"class":47,"line":1804},[45,90553,90145],{"class":79},[45,90555,51537],{"class":55},[45,90557,596],{"class":79},[45,90559,51592],{"class":51},[45,90561,1442],{"class":55},[45,90563,90564],{"class":47,"line":1825},[45,90565,2337],{"class":55},[45,90567,90568,90570,90572],{"class":47,"line":1830},[45,90569,52517],{"class":55},[45,90571,196],{"class":51400},[45,90573,51407],{"class":55},[45,90575,90576,90578,90580],{"class":47,"line":1844},[45,90577,51885],{"class":55},[45,90579,51434],{"class":51400},[45,90581,51407],{"class":55},[45,90583,90584],{"class":47,"line":1849},[45,90585,2550],{"emptyLinePlaceholder":207},[45,90587,90588,90590,90592],{"class":47,"line":1878},[45,90589,1187],{"class":55},[45,90591,51900],{"class":51400},[45,90593,51407],{"class":55},[45,90595,90596,90598,90600,90602,90604,90606,90608,90610],{"class":47,"line":1883},[45,90597,52244],{"class":55},[45,90599,51711],{"class":51400},[45,90601,53586],{"class":69},[45,90603,59],{"class":55},[45,90605,53591],{"class":62},[45,90607,55414],{"class":55},[45,90609,51711],{"class":51400},[45,90611,51407],{"class":55},[45,90613,90614,90616,90618,90620,90622,90624,90626,90628],{"class":47,"line":1900},[45,90615,52244],{"class":55},[45,90617,51913],{"class":51400},[45,90619,55339],{"class":69},[45,90621,59],{"class":55},[45,90623,88374],{"class":62},[45,90625,55414],{"class":55},[45,90627,51913],{"class":51400},[45,90629,51407],{"class":55},[45,90631,90632,90634,90636],{"class":47,"line":1905},[45,90633,52244],{"class":55},[45,90635,51913],{"class":51400},[45,90637,51407],{"class":55},[45,90639,90640,90642,90644,90646,90648,90650,90652,90654],{"class":47,"line":1910},[45,90641,11370],{"class":51},[45,90643,87033],{"class":79},[45,90645,13713],{"class":51},[45,90647,54496],{"class":55},[45,90649,54499],{"class":69},[45,90651,282],{"class":55},[45,90653,90246],{"class":62},[45,90655,139],{"class":55},[45,90657,90658,90660,90662,90664],{"class":47,"line":1915},[45,90659,52319],{"class":51},[45,90661,9588],{"class":55},[45,90663,59],{"class":51},[45,90665,47433],{"class":79},[45,90667,90668,90670,90672],{"class":47,"line":1929},[45,90669,70184],{"class":51},[45,90671,90265],{"class":69},[45,90673,11002],{"class":55},[45,90675,90676,90678,90680,90682],{"class":47,"line":1934},[45,90677,90272],{"class":55},[45,90679,59],{"class":51},[45,90681,3182],{"class":55},[45,90683,2852],{"class":51},[45,90685,90686],{"class":47,"line":2727},[45,90687,90283],{"class":337},[45,90689,90690],{"class":47,"line":2741},[45,90691,2337],{"class":55},[45,90693,90694],{"class":47,"line":2749},[45,90695,90292],{"class":337},[45,90697,90698],{"class":47,"line":2754},[45,90699,90700],{"class":337},"    \u002F\u002F 手写防抖函数\n",[45,90702,90703],{"class":47,"line":2760},[45,90704,90705],{"class":337},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[45,90707,90708],{"class":47,"line":2766},[45,90709,90710],{"class":337},"    \u002F\u002F 1.声明定时器变量\n",[45,90712,90713],{"class":47,"line":2771},[45,90714,90715],{"class":337},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[45,90717,90718],{"class":47,"line":8098},[45,90719,90720],{"class":337},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[45,90722,90723],{"class":47,"line":8122},[45,90724,90725],{"class":337},"    \u002F\u002F 4.定时器里面写函数调用\n",[45,90727,90728,90730,90733,90735,90738,90740,90742],{"class":47,"line":8127},[45,90729,70184],{"class":51},[45,90731,90732],{"class":69}," debounce",[45,90734,282],{"class":55},[45,90736,90737],{"class":5366},"fn",[45,90739,12584],{"class":55},[45,90741,997],{"class":5366},[45,90743,12591],{"class":55},[45,90745,90746,90748],{"class":47,"line":8133},[45,90747,79872],{"class":51},[45,90749,90750],{"class":55}," timer\n",[45,90752,90753],{"class":47,"line":8160},[45,90754,90755],{"class":337},"      \u002F\u002F return 返回一个匿名函数\n",[45,90757,90758,90760,90762],{"class":47,"line":8165},[45,90759,74082],{"class":51},[45,90761,59018],{"class":51},[45,90763,54552],{"class":55},[45,90765,90766],{"class":47,"line":8171},[45,90767,90768],{"class":337},"        \u002F\u002F 这里边写第二三四步\n",[45,90770,90771,90773,90776,90779],{"class":47,"line":8183},[45,90772,2647],{"class":51},[45,90774,90775],{"class":55}," (timer) ",[45,90777,90778],{"class":69},"clearTimeout",[45,90780,90781],{"class":55},"(timer)\n",[45,90783,90784,90787,90789,90792,90794,90796],{"class":47,"line":8195},[45,90785,90786],{"class":55},"        timer ",[45,90788,59],{"class":51},[45,90790,90791],{"class":69}," setTimeout",[45,90793,282],{"class":55},[45,90795,54549],{"class":51},[45,90797,54552],{"class":55},[45,90799,90800,90803,90805],{"class":47,"line":8207},[45,90801,90802],{"class":69},"          fn",[45,90804,13199],{"class":55},[45,90806,90807],{"class":337},"\u002F\u002F加小括号调用fn }, t)\n",[45,90809,90810],{"class":47,"line":9866},[45,90811,90812],{"class":55},"        }, t)\n",[45,90814,90815],{"class":47,"line":9890},[45,90816,52498],{"class":55},[45,90818,90819],{"class":47,"line":9913},[45,90820,2337],{"class":55},[45,90822,90823,90825,90827,90829,90831,90833,90835,90837,90839],{"class":47,"line":9937},[45,90824,90307],{"class":55},[45,90826,57913],{"class":69},[45,90828,282],{"class":55},[45,90830,90314],{"class":62},[45,90832,12584],{"class":55},[45,90834,90320],{"class":69},[45,90836,90323],{"class":55},[45,90838,65174],{"class":79},[45,90840,30597],{"class":55},[45,90842,90843],{"class":47,"line":9942},[45,90844,2550],{"emptyLinePlaceholder":207},[45,90846,90847],{"class":47,"line":9947},[45,90848,90849],{"class":337},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[45,90851,90852],{"class":47,"line":9952},[45,90853,90854],{"class":337},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[45,90856,90857],{"class":47,"line":9961},[45,90858,90859],{"class":337},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[45,90861,90862],{"class":47,"line":9966},[45,90863,90864],{"class":337},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[45,90866,90867,90869,90871],{"class":47,"line":9972},[45,90868,52517],{"class":55},[45,90870,51913],{"class":51400},[45,90872,51407],{"class":55},[45,90874,90875,90877,90879],{"class":47,"line":9993},[45,90876,51885],{"class":55},[45,90878,51900],{"class":51400},[45,90880,51407],{"class":55},[45,90882,90883],{"class":47,"line":9999},[45,90884,2550],{"emptyLinePlaceholder":207},[45,90886,90887,90889,90891],{"class":47,"line":10013},[45,90888,51885],{"class":55},[45,90890,50735],{"class":51400},[45,90892,51407],{"class":55},[249,90894,90896],{"id":90895},"_4172-节流","4.17.2 节流",[20,90898,90899],{},[23,90900],{"alt":25,"src":90901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[20,90903,90904],{},[23,90905],{"alt":25,"src":90906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[20,90908,90909],{},[427,90910,90911],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[20,90913,90914],{},"实现方式：",[166,90916,90917],{},[169,90918,90919],{},"lodash 提供的节流函数来处理",[20,90921,90922],{},"_.throttle(func,[wait=0],[options=])",[20,90924,90925],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[36,90927,90929],{"className":50733,"code":90928,"language":50735,"meta":25,"style":25},"\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",[42,90930,90931,90941,90955,90959,90967,90981,91001,91013,91021,91027,91037,91049,91061,91071,91083,91093,91103,91115,91119,91127,91135,91139,91147,91165,91183,91191,91209,91219,91227,91237,91241,91245,91249,91254,91259,91280,91288,91296,91300],{"__ignoreMap":25},[45,90932,90933,90935,90937,90939],{"class":47,"line":48},[45,90934,51397],{"class":55},[45,90936,51401],{"class":51400},[45,90938,51404],{"class":69},[45,90940,51407],{"class":55},[45,90942,90943,90945,90947,90949,90951,90953],{"class":47,"line":66},[45,90944,1187],{"class":55},[45,90946,50735],{"class":51400},[45,90948,51416],{"class":69},[45,90950,59],{"class":55},[45,90952,51421],{"class":62},[45,90954,51407],{"class":55},[45,90956,90957],{"class":47,"line":1331},[45,90958,2550],{"emptyLinePlaceholder":207},[45,90960,90961,90963,90965],{"class":47,"line":1346},[45,90962,1187],{"class":55},[45,90964,51434],{"class":51400},[45,90966,51407],{"class":55},[45,90968,90969,90971,90973,90975,90977,90979],{"class":47,"line":1352},[45,90970,52244],{"class":55},[45,90972,51444],{"class":51400},[45,90974,51447],{"class":69},[45,90976,59],{"class":55},[45,90978,51452],{"class":62},[45,90980,51407],{"class":55},[45,90982,90983,90985,90987,90989,90991,90993,90995,90997,90999],{"class":47,"line":1366},[45,90984,52244],{"class":55},[45,90986,51444],{"class":51400},[45,90988,15069],{"class":69},[45,90990,59],{"class":55},[45,90992,51491],{"class":62},[45,90994,51471],{"class":69},[45,90996,59],{"class":55},[45,90998,51498],{"class":62},[45,91000,51407],{"class":55},[45,91002,91003,91005,91007,91009,91011],{"class":47,"line":1372},[45,91004,52244],{"class":55},[45,91006,51507],{"class":51400},[45,91008,51510],{"class":55},[45,91010,51507],{"class":51400},[45,91012,51407],{"class":55},[45,91014,91015,91017,91019],{"class":47,"line":1463},[45,91016,52244],{"class":55},[45,91018,196],{"class":51400},[45,91020,51407],{"class":55},[45,91022,91023,91025],{"class":47,"line":1469},[45,91024,54852],{"class":69},[45,91026,15721],{"class":55},[45,91028,91029,91031,91033,91035],{"class":47,"line":1481},[45,91030,72696],{"class":79},[45,91032,51537],{"class":55},[45,91034,60605],{"class":79},[45,91036,1442],{"class":55},[45,91038,91039,91041,91043,91045,91047],{"class":47,"line":1763},[45,91040,54871],{"class":79},[45,91042,51537],{"class":55},[45,91044,1873],{"class":79},[45,91046,51592],{"class":51},[45,91048,1442],{"class":55},[45,91050,91051,91053,91055,91057,91059],{"class":47,"line":1768},[45,91052,54885],{"class":79},[45,91054,51537],{"class":55},[45,91056,1873],{"class":79},[45,91058,51592],{"class":51},[45,91060,1442],{"class":55},[45,91062,91063,91065,91067,91069],{"class":47,"line":1774},[45,91064,54984],{"class":79},[45,91066,51537],{"class":55},[45,91068,90106],{"class":79},[45,91070,1442],{"class":55},[45,91072,91073,91075,91077,91079,91081],{"class":47,"line":1779},[45,91074,55022],{"class":79},[45,91076,51537],{"class":55},[45,91078,1102],{"class":79},[45,91080,51592],{"class":51},[45,91082,1442],{"class":55},[45,91084,91085,91087,91089,91091],{"class":47,"line":1793},[45,91086,57516],{"class":79},[45,91088,51537],{"class":55},[45,91090,60942],{"class":79},[45,91092,1442],{"class":55},[45,91094,91095,91097,91099,91101],{"class":47,"line":1798},[45,91096,57386],{"class":79},[45,91098,51537],{"class":55},[45,91100,51692],{"class":79},[45,91102,1442],{"class":55},[45,91104,91105,91107,91109,91111,91113],{"class":47,"line":1804},[45,91106,90145],{"class":79},[45,91108,51537],{"class":55},[45,91110,596],{"class":79},[45,91112,51592],{"class":51},[45,91114,1442],{"class":55},[45,91116,91117],{"class":47,"line":1825},[45,91118,2337],{"class":55},[45,91120,91121,91123,91125],{"class":47,"line":1830},[45,91122,52517],{"class":55},[45,91124,196],{"class":51400},[45,91126,51407],{"class":55},[45,91128,91129,91131,91133],{"class":47,"line":1844},[45,91130,51885],{"class":55},[45,91132,51434],{"class":51400},[45,91134,51407],{"class":55},[45,91136,91137],{"class":47,"line":1849},[45,91138,2550],{"emptyLinePlaceholder":207},[45,91140,91141,91143,91145],{"class":47,"line":1878},[45,91142,1187],{"class":55},[45,91144,51900],{"class":51400},[45,91146,51407],{"class":55},[45,91148,91149,91151,91153,91155,91157,91159,91161,91163],{"class":47,"line":1883},[45,91150,52244],{"class":55},[45,91152,51711],{"class":51400},[45,91154,53586],{"class":69},[45,91156,59],{"class":55},[45,91158,53591],{"class":62},[45,91160,55414],{"class":55},[45,91162,51711],{"class":51400},[45,91164,51407],{"class":55},[45,91166,91167,91169,91171,91173,91175,91177,91179,91181],{"class":47,"line":1900},[45,91168,52244],{"class":55},[45,91170,51913],{"class":51400},[45,91172,55339],{"class":69},[45,91174,59],{"class":55},[45,91176,88374],{"class":62},[45,91178,55414],{"class":55},[45,91180,51913],{"class":51400},[45,91182,51407],{"class":55},[45,91184,91185,91187,91189],{"class":47,"line":1905},[45,91186,52244],{"class":55},[45,91188,51913],{"class":51400},[45,91190,51407],{"class":55},[45,91192,91193,91195,91197,91199,91201,91203,91205,91207],{"class":47,"line":1910},[45,91194,11370],{"class":51},[45,91196,87033],{"class":79},[45,91198,13713],{"class":51},[45,91200,54496],{"class":55},[45,91202,54499],{"class":69},[45,91204,282],{"class":55},[45,91206,90246],{"class":62},[45,91208,139],{"class":55},[45,91210,91211,91213,91215,91217],{"class":47,"line":1915},[45,91212,52319],{"class":51},[45,91214,9588],{"class":55},[45,91216,59],{"class":51},[45,91218,47433],{"class":79},[45,91220,91221,91223,91225],{"class":47,"line":1929},[45,91222,70184],{"class":51},[45,91224,90265],{"class":69},[45,91226,11002],{"class":55},[45,91228,91229,91231,91233,91235],{"class":47,"line":1934},[45,91230,90272],{"class":55},[45,91232,59],{"class":51},[45,91234,3182],{"class":55},[45,91236,2852],{"class":51},[45,91238,91239],{"class":47,"line":2727},[45,91240,90283],{"class":337},[45,91242,91243],{"class":47,"line":2741},[45,91244,2337],{"class":55},[45,91246,91247],{"class":47,"line":2749},[45,91248,90292],{"class":337},[45,91250,91251],{"class":47,"line":2754},[45,91252,91253],{"class":337},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[45,91255,91256],{"class":47,"line":2760},[45,91257,91258],{"class":337},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[45,91260,91261,91263,91265,91267,91269,91271,91274,91276,91278],{"class":47,"line":2766},[45,91262,90307],{"class":55},[45,91264,57913],{"class":69},[45,91266,282],{"class":55},[45,91268,90314],{"class":62},[45,91270,90317],{"class":55},[45,91272,91273],{"class":69},"throttle",[45,91275,90323],{"class":55},[45,91277,65174],{"class":79},[45,91279,30597],{"class":55},[45,91281,91282,91284,91286],{"class":47,"line":2771},[45,91283,52517],{"class":55},[45,91285,51913],{"class":51400},[45,91287,51407],{"class":55},[45,91289,91290,91292,91294],{"class":47,"line":8098},[45,91291,51885],{"class":55},[45,91293,51900],{"class":51400},[45,91295,51407],{"class":55},[45,91297,91298],{"class":47,"line":8122},[45,91299,2550],{"emptyLinePlaceholder":207},[45,91301,91302,91304,91306],{"class":47,"line":8127},[45,91303,51885],{"class":55},[45,91305,50735],{"class":51400},[45,91307,51407],{"class":55},[166,91309,91310],{},[169,91311,91312],{},"手写一个节流函数来处理",[20,91314,71052],{},[20,91316,90366],{},[20,91318,91319],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[20,91321,91322],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[36,91324,91326],{"className":50733,"code":91325,"language":50735,"meta":25,"style":25},"\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",[42,91327,91328,91338,91352,91356,91364,91378,91398,91410,91418,91424,91434,91446,91458,91468,91480,91490,91500,91512,91516,91524,91532,91536,91544,91562,91580,91588,91606,91616,91624,91634,91638,91642,91646,91651,91656,91661,91666,91671,91676,91693,91699,91707,91718,91733,91740,91745,91750,91760,91765,91770,91775,91779,91783,91787,91807,91815,91823,91827],{"__ignoreMap":25},[45,91329,91330,91332,91334,91336],{"class":47,"line":48},[45,91331,51397],{"class":55},[45,91333,51401],{"class":51400},[45,91335,51404],{"class":69},[45,91337,51407],{"class":55},[45,91339,91340,91342,91344,91346,91348,91350],{"class":47,"line":66},[45,91341,1187],{"class":55},[45,91343,50735],{"class":51400},[45,91345,51416],{"class":69},[45,91347,59],{"class":55},[45,91349,51421],{"class":62},[45,91351,51407],{"class":55},[45,91353,91354],{"class":47,"line":1331},[45,91355,2550],{"emptyLinePlaceholder":207},[45,91357,91358,91360,91362],{"class":47,"line":1346},[45,91359,1187],{"class":55},[45,91361,51434],{"class":51400},[45,91363,51407],{"class":55},[45,91365,91366,91368,91370,91372,91374,91376],{"class":47,"line":1352},[45,91367,52244],{"class":55},[45,91369,51444],{"class":51400},[45,91371,51447],{"class":69},[45,91373,59],{"class":55},[45,91375,51452],{"class":62},[45,91377,51407],{"class":55},[45,91379,91380,91382,91384,91386,91388,91390,91392,91394,91396],{"class":47,"line":1366},[45,91381,52244],{"class":55},[45,91383,51444],{"class":51400},[45,91385,15069],{"class":69},[45,91387,59],{"class":55},[45,91389,51491],{"class":62},[45,91391,51471],{"class":69},[45,91393,59],{"class":55},[45,91395,51498],{"class":62},[45,91397,51407],{"class":55},[45,91399,91400,91402,91404,91406,91408],{"class":47,"line":1372},[45,91401,52244],{"class":55},[45,91403,51507],{"class":51400},[45,91405,51510],{"class":55},[45,91407,51507],{"class":51400},[45,91409,51407],{"class":55},[45,91411,91412,91414,91416],{"class":47,"line":1463},[45,91413,52244],{"class":55},[45,91415,196],{"class":51400},[45,91417,51407],{"class":55},[45,91419,91420,91422],{"class":47,"line":1469},[45,91421,54852],{"class":69},[45,91423,15721],{"class":55},[45,91425,91426,91428,91430,91432],{"class":47,"line":1481},[45,91427,72696],{"class":79},[45,91429,51537],{"class":55},[45,91431,60605],{"class":79},[45,91433,1442],{"class":55},[45,91435,91436,91438,91440,91442,91444],{"class":47,"line":1763},[45,91437,54871],{"class":79},[45,91439,51537],{"class":55},[45,91441,1873],{"class":79},[45,91443,51592],{"class":51},[45,91445,1442],{"class":55},[45,91447,91448,91450,91452,91454,91456],{"class":47,"line":1768},[45,91449,54885],{"class":79},[45,91451,51537],{"class":55},[45,91453,1873],{"class":79},[45,91455,51592],{"class":51},[45,91457,1442],{"class":55},[45,91459,91460,91462,91464,91466],{"class":47,"line":1774},[45,91461,54984],{"class":79},[45,91463,51537],{"class":55},[45,91465,90106],{"class":79},[45,91467,1442],{"class":55},[45,91469,91470,91472,91474,91476,91478],{"class":47,"line":1779},[45,91471,55022],{"class":79},[45,91473,51537],{"class":55},[45,91475,1102],{"class":79},[45,91477,51592],{"class":51},[45,91479,1442],{"class":55},[45,91481,91482,91484,91486,91488],{"class":47,"line":1793},[45,91483,57516],{"class":79},[45,91485,51537],{"class":55},[45,91487,60942],{"class":79},[45,91489,1442],{"class":55},[45,91491,91492,91494,91496,91498],{"class":47,"line":1798},[45,91493,57386],{"class":79},[45,91495,51537],{"class":55},[45,91497,51692],{"class":79},[45,91499,1442],{"class":55},[45,91501,91502,91504,91506,91508,91510],{"class":47,"line":1804},[45,91503,90145],{"class":79},[45,91505,51537],{"class":55},[45,91507,596],{"class":79},[45,91509,51592],{"class":51},[45,91511,1442],{"class":55},[45,91513,91514],{"class":47,"line":1825},[45,91515,2337],{"class":55},[45,91517,91518,91520,91522],{"class":47,"line":1830},[45,91519,52517],{"class":55},[45,91521,196],{"class":51400},[45,91523,51407],{"class":55},[45,91525,91526,91528,91530],{"class":47,"line":1844},[45,91527,51885],{"class":55},[45,91529,51434],{"class":51400},[45,91531,51407],{"class":55},[45,91533,91534],{"class":47,"line":1849},[45,91535,2550],{"emptyLinePlaceholder":207},[45,91537,91538,91540,91542],{"class":47,"line":1878},[45,91539,1187],{"class":55},[45,91541,51900],{"class":51400},[45,91543,51407],{"class":55},[45,91545,91546,91548,91550,91552,91554,91556,91558,91560],{"class":47,"line":1883},[45,91547,52244],{"class":55},[45,91549,51711],{"class":51400},[45,91551,53586],{"class":69},[45,91553,59],{"class":55},[45,91555,53591],{"class":62},[45,91557,55414],{"class":55},[45,91559,51711],{"class":51400},[45,91561,51407],{"class":55},[45,91563,91564,91566,91568,91570,91572,91574,91576,91578],{"class":47,"line":1900},[45,91565,52244],{"class":55},[45,91567,51913],{"class":51400},[45,91569,55339],{"class":69},[45,91571,59],{"class":55},[45,91573,88374],{"class":62},[45,91575,55414],{"class":55},[45,91577,51913],{"class":51400},[45,91579,51407],{"class":55},[45,91581,91582,91584,91586],{"class":47,"line":1905},[45,91583,52244],{"class":55},[45,91585,51913],{"class":51400},[45,91587,51407],{"class":55},[45,91589,91590,91592,91594,91596,91598,91600,91602,91604],{"class":47,"line":1910},[45,91591,11370],{"class":51},[45,91593,87033],{"class":79},[45,91595,13713],{"class":51},[45,91597,54496],{"class":55},[45,91599,54499],{"class":69},[45,91601,282],{"class":55},[45,91603,90246],{"class":62},[45,91605,139],{"class":55},[45,91607,91608,91610,91612,91614],{"class":47,"line":1915},[45,91609,52319],{"class":51},[45,91611,9588],{"class":55},[45,91613,59],{"class":51},[45,91615,47433],{"class":79},[45,91617,91618,91620,91622],{"class":47,"line":1929},[45,91619,70184],{"class":51},[45,91621,90265],{"class":69},[45,91623,11002],{"class":55},[45,91625,91626,91628,91630,91632],{"class":47,"line":1934},[45,91627,90272],{"class":55},[45,91629,59],{"class":51},[45,91631,3182],{"class":55},[45,91633,2852],{"class":51},[45,91635,91636],{"class":47,"line":2727},[45,91637,90283],{"class":337},[45,91639,91640],{"class":47,"line":2741},[45,91641,2337],{"class":55},[45,91643,91644],{"class":47,"line":2749},[45,91645,90292],{"class":337},[45,91647,91648],{"class":47,"line":2754},[45,91649,91650],{"class":337},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[45,91652,91653],{"class":47,"line":2760},[45,91654,91655],{"class":337},"    \u002F\u002F 1.声明一个定时器变量\n",[45,91657,91658],{"class":47,"line":2766},[45,91659,91660],{"class":337},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[45,91662,91663],{"class":47,"line":2771},[45,91664,91665],{"class":337},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[45,91667,91668],{"class":47,"line":8098},[45,91669,91670],{"class":337},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[45,91672,91673],{"class":47,"line":8122},[45,91674,91675],{"class":337},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[45,91677,91678,91680,91683,91685,91687,91689,91691],{"class":47,"line":8127},[45,91679,70184],{"class":51},[45,91681,91682],{"class":69}," throttle",[45,91684,282],{"class":55},[45,91686,90737],{"class":5366},[45,91688,12584],{"class":55},[45,91690,997],{"class":5366},[45,91692,12591],{"class":55},[45,91694,91695,91697],{"class":47,"line":8133},[45,91696,79872],{"class":51},[45,91698,90750],{"class":55},[45,91700,91701,91703,91705],{"class":47,"line":8160},[45,91702,74082],{"class":51},[45,91704,59018],{"class":51},[45,91706,54552],{"class":55},[45,91708,91709,91711,91713,91715],{"class":47,"line":8165},[45,91710,2647],{"class":51},[45,91712,1809],{"class":55},[45,91714,504],{"class":51},[45,91716,91717],{"class":55},"timer) {\n",[45,91719,91720,91723,91725,91727,91729,91731],{"class":47,"line":8171},[45,91721,91722],{"class":55},"          timer ",[45,91724,59],{"class":51},[45,91726,90791],{"class":69},[45,91728,282],{"class":55},[45,91730,54549],{"class":51},[45,91732,54552],{"class":55},[45,91734,91735,91738],{"class":47,"line":8183},[45,91736,91737],{"class":69},"            fn",[45,91739,2126],{"class":55},[45,91741,91742],{"class":47,"line":8195},[45,91743,91744],{"class":337},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[45,91746,91747],{"class":47,"line":8207},[45,91748,91749],{"class":337},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[45,91751,91752,91755,91757],{"class":47,"line":9866},[45,91753,91754],{"class":55},"            timer ",[45,91756,59],{"class":51},[45,91758,91759],{"class":79}," null\n",[45,91761,91762],{"class":47,"line":9890},[45,91763,91764],{"class":337},"            \u002F\u002F 不能用clearTimeout(timer)\n",[45,91766,91767],{"class":47,"line":9913},[45,91768,91769],{"class":337},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[45,91771,91772],{"class":47,"line":9937},[45,91773,91774],{"class":55},"          }, t)\n",[45,91776,91777],{"class":47,"line":9942},[45,91778,2679],{"class":55},[45,91780,91781],{"class":47,"line":9947},[45,91782,52498],{"class":55},[45,91784,91785],{"class":47,"line":9952},[45,91786,2337],{"class":55},[45,91788,91789,91791,91793,91795,91797,91799,91801,91803,91805],{"class":47,"line":9961},[45,91790,90307],{"class":55},[45,91792,57913],{"class":69},[45,91794,282],{"class":55},[45,91796,90314],{"class":62},[45,91798,12584],{"class":55},[45,91800,91273],{"class":69},[45,91802,90323],{"class":55},[45,91804,65174],{"class":79},[45,91806,30597],{"class":55},[45,91808,91809,91811,91813],{"class":47,"line":9966},[45,91810,52517],{"class":55},[45,91812,51913],{"class":51400},[45,91814,51407],{"class":55},[45,91816,91817,91819,91821],{"class":47,"line":9972},[45,91818,51885],{"class":55},[45,91820,51900],{"class":51400},[45,91822,51407],{"class":55},[45,91824,91825],{"class":47,"line":9993},[45,91826,2550],{"emptyLinePlaceholder":207},[45,91828,91829,91831,91833],{"class":47,"line":9999},[45,91830,51885],{"class":55},[45,91832,50735],{"class":51400},[45,91834,51407],{"class":55},[249,91836,91838],{"id":91837},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[36,91840,91842],{"className":53167,"code":91841,"language":53169,"meta":25,"style":25},"\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",[42,91843,91844,91852,91860,91865,91870,91875,91880,91884,91892],{"__ignoreMap":25},[45,91845,91846,91848,91850],{"class":47,"line":48},[45,91847,1187],{"class":55},[45,91849,51900],{"class":51400},[45,91851,51407],{"class":55},[45,91853,91854,91856,91858],{"class":47,"line":66},[45,91855,52244],{"class":55},[45,91857,51913],{"class":51400},[45,91859,51407],{"class":55},[45,91861,91862],{"class":47,"line":1331},[45,91863,91864],{"class":55},"    let timer = null\n",[45,91866,91867],{"class":47,"line":1346},[45,91868,91869],{"class":55},"    timer = setTimeout(() => {\n",[45,91871,91872],{"class":47,"line":1352},[45,91873,91874],{"class":55},"      clearTimeout(timer)\n",[45,91876,91877],{"class":47,"line":1366},[45,91878,91879],{"class":55},"      console.log(timer)\n",[45,91881,91882],{"class":47,"line":1372},[45,91883,60325],{"class":55},[45,91885,91886,91888,91890],{"class":47,"line":1463},[45,91887,52517],{"class":55},[45,91889,51913],{"class":51400},[45,91891,51407],{"class":55},[45,91893,91894,91896,91898],{"class":47,"line":1469},[45,91895,51885],{"class":55},[45,91897,51900],{"class":51400},[45,91899,51407],{"class":55},[20,91901,91902],{},"输出为1",[20,91904,91905],{},"在开启的定时器里边写清除定时器",[20,91907,91908],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[249,91910,91912],{"id":91911},"_4174-节流综合案例","4.17.4 节流综合案例",[20,91914,91915],{},"页面打开，可以记录上一次的视频播放位置",[20,91917,91918],{},[23,91919],{"alt":25,"src":91920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[20,91922,91923],{},[23,91924],{"alt":25,"src":91925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[36,91927,91929],{"className":50733,"code":91928,"language":50735,"meta":25,"style":25},"\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",[42,91930,91931,91941,91955,91959,91967,91981,92001,92021,92043,92056,92064,92070,92080,92090,92100,92104,92108,92115,92128,92140,92144,92148,92158,92170,92184,92188,92192,92199,92209,92222,92234,92244,92254,92270,92282,92286,92290,92298,92308,92320,92330,92340,92350,92354,92358,92368,92379,92383,92391,92399,92403,92411,92426,92441,92456,92477,92485,92493,92508,92530,92538,92553,92579,92605,92631,92639,92647,92666,92674,92679,92698,92703,92721,92726,92731,92739,92744,92758,92766,92771,92788,92792,92797,92819,92823,92831,92839,92843],{"__ignoreMap":25},[45,91932,91933,91935,91937,91939],{"class":47,"line":48},[45,91934,51397],{"class":55},[45,91936,51401],{"class":51400},[45,91938,51404],{"class":69},[45,91940,51407],{"class":55},[45,91942,91943,91945,91947,91949,91951,91953],{"class":47,"line":66},[45,91944,1187],{"class":55},[45,91946,50735],{"class":51400},[45,91948,51416],{"class":69},[45,91950,59],{"class":55},[45,91952,51421],{"class":62},[45,91954,51407],{"class":55},[45,91956,91957],{"class":47,"line":1331},[45,91958,2550],{"emptyLinePlaceholder":207},[45,91960,91961,91963,91965],{"class":47,"line":1346},[45,91962,1187],{"class":55},[45,91964,51434],{"class":51400},[45,91966,51407],{"class":55},[45,91968,91969,91971,91973,91975,91977,91979],{"class":47,"line":1352},[45,91970,52244],{"class":55},[45,91972,51444],{"class":51400},[45,91974,51447],{"class":69},[45,91976,59],{"class":55},[45,91978,51452],{"class":62},[45,91980,59227],{"class":55},[45,91982,91983,91985,91987,91989,91991,91993,91995,91997,91999],{"class":47,"line":1366},[45,91984,52244],{"class":55},[45,91986,51444],{"class":51400},[45,91988,51463],{"class":69},[45,91990,59],{"class":55},[45,91992,51468],{"class":62},[45,91994,51471],{"class":69},[45,91996,59],{"class":55},[45,91998,51476],{"class":62},[45,92000,59227],{"class":55},[45,92002,92003,92005,92007,92009,92011,92013,92015,92017,92019],{"class":47,"line":1372},[45,92004,52244],{"class":55},[45,92006,51444],{"class":51400},[45,92008,15069],{"class":69},[45,92010,59],{"class":55},[45,92012,51491],{"class":62},[45,92014,51471],{"class":69},[45,92016,59],{"class":55},[45,92018,51498],{"class":62},[45,92020,59227],{"class":55},[45,92022,92023,92025,92027,92029,92031,92034,92036,92038,92041],{"class":47,"line":1463},[45,92024,52244],{"class":55},[45,92026,51444],{"class":51400},[45,92028,15069],{"class":69},[45,92030,59],{"class":55},[45,92032,92033],{"class":62},"\"referrer\"",[45,92035,51471],{"class":69},[45,92037,59],{"class":55},[45,92039,92040],{"class":62},"\"never\"",[45,92042,59227],{"class":55},[45,92044,92045,92047,92049,92052,92054],{"class":47,"line":1469},[45,92046,52244],{"class":55},[45,92048,51507],{"class":51400},[45,92050,92051],{"class":55},">综合案例\u003C\u002F",[45,92053,51507],{"class":51400},[45,92055,51407],{"class":55},[45,92057,92058,92060,92062],{"class":47,"line":1481},[45,92059,52244],{"class":55},[45,92061,196],{"class":51400},[45,92063,51407],{"class":55},[45,92065,92066,92068],{"class":47,"line":1763},[45,92067,6553],{"class":51400},[45,92069,15721],{"class":55},[45,92071,92072,92074,92076,92078],{"class":47,"line":1768},[45,92073,54795],{"class":79},[45,92075,51537],{"class":55},[45,92077,469],{"class":79},[45,92079,1442],{"class":55},[45,92081,92082,92084,92086,92088],{"class":47,"line":1774},[45,92083,54806],{"class":79},[45,92085,51537],{"class":55},[45,92087,469],{"class":79},[45,92089,1442],{"class":55},[45,92091,92092,92094,92096,92098],{"class":47,"line":1779},[45,92093,72696],{"class":79},[45,92095,51537],{"class":55},[45,92097,60605],{"class":79},[45,92099,1442],{"class":55},[45,92101,92102],{"class":47,"line":1793},[45,92103,2337],{"class":55},[45,92105,92106],{"class":47,"line":1798},[45,92107,2550],{"emptyLinePlaceholder":207},[45,92109,92110,92113],{"class":47,"line":1804},[45,92111,92112],{"class":69},"    .container",[45,92114,15721],{"class":55},[45,92116,92117,92119,92121,92124,92126],{"class":47,"line":1825},[45,92118,54871],{"class":79},[45,92120,51537],{"class":55},[45,92122,92123],{"class":79},"1200",[45,92125,51592],{"class":51},[45,92127,1442],{"class":55},[45,92129,92130,92132,92134,92136,92138],{"class":47,"line":1830},[45,92131,54806],{"class":79},[45,92133,51537],{"class":55},[45,92135,469],{"class":79},[45,92137,51656],{"class":79},[45,92139,1442],{"class":55},[45,92141,92142],{"class":47,"line":1844},[45,92143,2337],{"class":55},[45,92145,92146],{"class":47,"line":1849},[45,92147,2550],{"emptyLinePlaceholder":207},[45,92149,92150,92153,92156],{"class":47,"line":1878},[45,92151,92152],{"class":69},"    .video",[45,92154,92155],{"class":51400}," video",[45,92157,15721],{"class":55},[45,92159,92160,92162,92164,92166,92168],{"class":47,"line":1883},[45,92161,54871],{"class":79},[45,92163,51537],{"class":55},[45,92165,588],{"class":79},[45,92167,605],{"class":51},[45,92169,1442],{"class":55},[45,92171,92172,92174,92176,92178,92180,92182],{"class":47,"line":1900},[45,92173,54795],{"class":79},[45,92175,51537],{"class":55},[45,92177,977],{"class":79},[45,92179,51592],{"class":51},[45,92181,4243],{"class":79},[45,92183,1442],{"class":55},[45,92185,92186],{"class":47,"line":1905},[45,92187,2337],{"class":55},[45,92189,92190],{"class":47,"line":1910},[45,92191,2550],{"emptyLinePlaceholder":207},[45,92193,92194,92197],{"class":47,"line":1915},[45,92195,92196],{"class":69},"    .elevator",[45,92198,15721],{"class":55},[45,92200,92201,92203,92205,92207],{"class":47,"line":1929},[45,92202,54859],{"class":79},[45,92204,51537],{"class":55},[45,92206,86333],{"class":79},[45,92208,1442],{"class":55},[45,92210,92211,92213,92215,92218,92220],{"class":47,"line":1934},[45,92212,55047],{"class":79},[45,92214,51537],{"class":55},[45,92216,92217],{"class":79},"280",[45,92219,51592],{"class":51},[45,92221,1442],{"class":55},[45,92223,92224,92226,92228,92230,92232],{"class":47,"line":2727},[45,92225,86527],{"class":79},[45,92227,51537],{"class":55},[45,92229,977],{"class":79},[45,92231,51592],{"class":51},[45,92233,1442],{"class":55},[45,92235,92236,92238,92240,92242],{"class":47,"line":2741},[45,92237,86340],{"class":79},[45,92239,51537],{"class":55},[45,92241,86345],{"class":79},[45,92243,1442],{"class":55},[45,92245,92246,92248,92250,92252],{"class":47,"line":2749},[45,92247,61821],{"class":79},[45,92249,51537],{"class":55},[45,92251,60942],{"class":79},[45,92253,1442],{"class":55},[45,92255,92256,92258,92260,92262,92264,92266,92268],{"class":47,"line":2754},[45,92257,62077],{"class":79},[45,92259,51537],{"class":55},[45,92261,495],{"class":79},[45,92263,51592],{"class":51},[45,92265,51621],{"class":79},[45,92267,62344],{"class":79},[45,92269,1442],{"class":55},[45,92271,92272,92274,92276,92278,92280],{"class":47,"line":2760},[45,92273,54871],{"class":79},[45,92275,51537],{"class":55},[45,92277,1184],{"class":79},[45,92279,51592],{"class":51},[45,92281,1442],{"class":55},[45,92283,92284],{"class":47,"line":2766},[45,92285,2337],{"class":55},[45,92287,92288],{"class":47,"line":2771},[45,92289,2550],{"emptyLinePlaceholder":207},[45,92291,92292,92294,92296],{"class":47,"line":8098},[45,92293,92196],{"class":69},[45,92295,1550],{"class":51400},[45,92297,15721],{"class":55},[45,92299,92300,92302,92304,92306],{"class":47,"line":8122},[45,92301,55109],{"class":79},[45,92303,51537],{"class":55},[45,92305,60969],{"class":79},[45,92307,1442],{"class":55},[45,92309,92310,92312,92314,92316,92318],{"class":47,"line":8127},[45,92311,54795],{"class":79},[45,92313,51537],{"class":55},[45,92315,723],{"class":79},[45,92317,51592],{"class":51},[45,92319,1442],{"class":55},[45,92321,92322,92324,92326,92328],{"class":47,"line":8133},[45,92323,64070],{"class":79},[45,92325,51537],{"class":55},[45,92327,54837],{"class":79},[45,92329,1442],{"class":55},[45,92331,92332,92334,92336,92338],{"class":47,"line":8160},[45,92333,57386],{"class":79},[45,92335,51537],{"class":55},[45,92337,51692],{"class":79},[45,92339,1442],{"class":55},[45,92341,92342,92344,92346,92348],{"class":47,"line":8165},[45,92343,57516],{"class":79},[45,92345,51537],{"class":55},[45,92347,62170],{"class":79},[45,92349,1442],{"class":55},[45,92351,92352],{"class":47,"line":8171},[45,92353,2337],{"class":55},[45,92355,92356],{"class":47,"line":8183},[45,92357,2550],{"emptyLinePlaceholder":207},[45,92359,92360,92362,92364,92366],{"class":47,"line":8195},[45,92361,92196],{"class":69},[45,92363,1550],{"class":51400},[45,92365,64124],{"class":69},[45,92367,15721],{"class":55},[45,92369,92370,92372,92374,92377],{"class":47,"line":8207},[45,92371,57516],{"class":79},[45,92373,51537],{"class":55},[45,92375,92376],{"class":79},"#1286ff",[45,92378,1442],{"class":55},[45,92380,92381],{"class":47,"line":9866},[45,92382,2337],{"class":55},[45,92384,92385,92387,92389],{"class":47,"line":9890},[45,92386,52517],{"class":55},[45,92388,196],{"class":51400},[45,92390,51407],{"class":55},[45,92392,92393,92395,92397],{"class":47,"line":9913},[45,92394,51885],{"class":55},[45,92396,51434],{"class":51400},[45,92398,51407],{"class":55},[45,92400,92401],{"class":47,"line":9937},[45,92402,2550],{"emptyLinePlaceholder":207},[45,92404,92405,92407,92409],{"class":47,"line":9942},[45,92406,1187],{"class":55},[45,92408,51900],{"class":51400},[45,92410,51407],{"class":55},[45,92412,92413,92415,92417,92419,92421,92424],{"class":47,"line":9947},[45,92414,52244],{"class":55},[45,92416,51711],{"class":51400},[45,92418,53586],{"class":69},[45,92420,59],{"class":55},[45,92422,92423],{"class":62},"\"container\"",[45,92425,51407],{"class":55},[45,92427,92428,92430,92432,92434,92436,92439],{"class":47,"line":9952},[45,92429,51441],{"class":55},[45,92431,51711],{"class":51400},[45,92433,53586],{"class":69},[45,92435,59],{"class":55},[45,92437,92438],{"class":62},"\"header\"",[45,92440,51407],{"class":55},[45,92442,92443,92445,92447,92449,92451,92454],{"class":47,"line":9961},[45,92444,55334],{"class":55},[45,92446,516],{"class":51400},[45,92448,61157],{"class":69},[45,92450,59],{"class":55},[45,92452,92453],{"class":62},"\"http:\u002F\u002Fpip.itcast.cn\"",[45,92455,51407],{"class":55},[45,92457,92458,92460,92462,92464,92466,92469,92471,92473,92475],{"class":47,"line":9966},[45,92459,55402],{"class":55},[45,92461,23],{"class":51400},[45,92463,55339],{"class":69},[45,92465,59],{"class":55},[45,92467,92468],{"class":62},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[45,92470,55347],{"class":69},[45,92472,59],{"class":55},[45,92474,7802],{"class":62},[45,92476,59227],{"class":55},[45,92478,92479,92481,92483],{"class":47,"line":9972},[45,92480,55507],{"class":55},[45,92482,516],{"class":51400},[45,92484,51407],{"class":55},[45,92486,92487,92489,92491],{"class":47,"line":9993},[45,92488,51876],{"class":55},[45,92490,51711],{"class":51400},[45,92492,51407],{"class":55},[45,92494,92495,92497,92499,92501,92503,92506],{"class":47,"line":9999},[45,92496,51441],{"class":55},[45,92498,51711],{"class":51400},[45,92500,53586],{"class":69},[45,92502,59],{"class":55},[45,92504,92505],{"class":62},"\"video\"",[45,92507,51407],{"class":55},[45,92509,92510,92512,92514,92516,92518,92521,92524,92526,92528],{"class":47,"line":10013},[45,92511,55334],{"class":55},[45,92513,28283],{"class":51400},[45,92515,55339],{"class":69},[45,92517,59],{"class":55},[45,92519,92520],{"class":62},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[45,92522,92523],{"class":69}," controls",[45,92525,55414],{"class":55},[45,92527,28283],{"class":51400},[45,92529,51407],{"class":55},[45,92531,92532,92534,92536],{"class":47,"line":10019},[45,92533,51876],{"class":55},[45,92535,51711],{"class":51400},[45,92537,51407],{"class":55},[45,92539,92540,92542,92544,92546,92548,92551],{"class":47,"line":10046},[45,92541,51441],{"class":55},[45,92543,51711],{"class":51400},[45,92545,53586],{"class":69},[45,92547,59],{"class":55},[45,92549,92550],{"class":62},"\"elevator\"",[45,92552,51407],{"class":55},[45,92554,92555,92557,92559,92561,92563,92565,92568,92570,92572,92575,92577],{"class":47,"line":10055},[45,92556,55334],{"class":55},[45,92558,516],{"class":51400},[45,92560,61157],{"class":69},[45,92562,59],{"class":55},[45,92564,64336],{"class":62},[45,92566,92567],{"class":69}," data-ref",[45,92569,59],{"class":55},[45,92571,92505],{"class":62},[45,92573,92574],{"class":55},">视频介绍\u003C\u002F",[45,92576,516],{"class":51400},[45,92578,51407],{"class":55},[45,92580,92581,92583,92585,92587,92589,92591,92593,92595,92598,92601,92603],{"class":47,"line":10061},[45,92582,55334],{"class":55},[45,92584,516],{"class":51400},[45,92586,61157],{"class":69},[45,92588,59],{"class":55},[45,92590,64336],{"class":62},[45,92592,92567],{"class":69},[45,92594,59],{"class":55},[45,92596,92597],{"class":62},"\"intro\"",[45,92599,92600],{"class":55},">课程简介\u003C\u002F",[45,92602,516],{"class":51400},[45,92604,51407],{"class":55},[45,92606,92607,92609,92611,92613,92615,92617,92619,92621,92624,92627,92629],{"class":47,"line":10069},[45,92608,55334],{"class":55},[45,92610,516],{"class":51400},[45,92612,61157],{"class":69},[45,92614,59],{"class":55},[45,92616,64336],{"class":62},[45,92618,92567],{"class":69},[45,92620,59],{"class":55},[45,92622,92623],{"class":62},"\"outline\"",[45,92625,92626],{"class":55},">评论列表\u003C\u002F",[45,92628,516],{"class":51400},[45,92630,51407],{"class":55},[45,92632,92633,92635,92637],{"class":47,"line":10074},[45,92634,51876],{"class":55},[45,92636,51711],{"class":51400},[45,92638,51407],{"class":55},[45,92640,92641,92643,92645],{"class":47,"line":16753},[45,92642,52517],{"class":55},[45,92644,51711],{"class":51400},[45,92646,51407],{"class":55},[45,92648,92649,92651,92653,92655,92657,92660,92662,92664],{"class":47,"line":16759},[45,92650,52244],{"class":55},[45,92652,51913],{"class":51400},[45,92654,55339],{"class":69},[45,92656,59],{"class":55},[45,92658,92659],{"class":62},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[45,92661,55414],{"class":55},[45,92663,51913],{"class":51400},[45,92665,51407],{"class":55},[45,92667,92668,92670,92672],{"class":47,"line":16782},[45,92669,52244],{"class":55},[45,92671,51913],{"class":51400},[45,92673,51407],{"class":55},[45,92675,92676],{"class":47,"line":16788},[45,92677,92678],{"class":337},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[45,92680,92681,92683,92685,92687,92689,92691,92693,92696],{"class":47,"line":16811},[45,92682,11370],{"class":51},[45,92684,92155],{"class":79},[45,92686,13713],{"class":51},[45,92688,54496],{"class":55},[45,92690,54499],{"class":69},[45,92692,282],{"class":55},[45,92694,92695],{"class":62},"'video'",[45,92697,139],{"class":55},[45,92699,92700],{"class":47,"line":16825},[45,92701,92702],{"class":337},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[45,92704,92705,92708,92710,92712,92714,92717,92719],{"class":47,"line":16845},[45,92706,92707],{"class":55},"    video.ontimeupdate ",[45,92709,59],{"class":51},[45,92711,88455],{"class":55},[45,92713,91273],{"class":69},[45,92715,92716],{"class":55},"(() ",[45,92718,84822],{"class":51},[45,92720,15721],{"class":55},[45,92722,92723],{"class":47,"line":16851},[45,92724,92725],{"class":337},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[45,92727,92728],{"class":47,"line":16862},[45,92729,92730],{"class":337},"      \u002F\u002F 控制台输出当前的时间\n",[45,92732,92733,92736],{"class":47,"line":16885},[45,92734,92735],{"class":337},"      \u002F\u002F console.log(video.currentTime)",[45,92737,92738],{"class":337},"  \u002F\u002F获得当前的视频时间\n",[45,92740,92741],{"class":47,"line":16907},[45,92742,92743],{"class":337},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[45,92745,92746,92748,92750,92752,92755],{"class":47,"line":16912},[45,92747,74783],{"class":55},[45,92749,71754],{"class":69},[45,92751,282],{"class":55},[45,92753,92754],{"class":62},"'currentTime'",[45,92756,92757],{"class":55},", video.currentTime)\n",[45,92759,92760,92762,92764],{"class":47,"line":16918},[45,92761,54635],{"class":55},[45,92763,6560],{"class":79},[45,92765,139],{"class":55},[45,92767,92768],{"class":47,"line":16932},[45,92769,92770],{"class":337},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[45,92772,92773,92776,92779,92781,92784,92786],{"class":47,"line":16945},[45,92774,92775],{"class":55},"    video.",[45,92777,92778],{"class":69},"onloadeddata",[45,92780,13713],{"class":51},[45,92782,92783],{"class":55}," () ",[45,92785,84822],{"class":51},[45,92787,15721],{"class":55},[45,92789,92790],{"class":47,"line":16950},[45,92791,60112],{"class":337},[45,92793,92794],{"class":47,"line":16964},[45,92795,92796],{"class":337},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[45,92798,92799,92802,92804,92807,92809,92811,92813,92815,92817],{"class":47,"line":16969},[45,92800,92801],{"class":55},"      video.currentTime ",[45,92803,59],{"class":51},[45,92805,92806],{"class":55}," localStorage.",[45,92808,71785],{"class":69},[45,92810,282],{"class":55},[45,92812,92754],{"class":62},[45,92814,13863],{"class":55},[45,92816,71457],{"class":51},[45,92818,47433],{"class":79},[45,92820,92821],{"class":47,"line":16975},[45,92822,2337],{"class":55},[45,92824,92825,92827,92829],{"class":47,"line":16980},[45,92826,52517],{"class":55},[45,92828,51913],{"class":51400},[45,92830,51407],{"class":55},[45,92832,92833,92835,92837],{"class":47,"line":16994},[45,92834,51885],{"class":55},[45,92836,51900],{"class":51400},[45,92838,51407],{"class":55},[45,92840,92841],{"class":47,"line":16999},[45,92842,2550],{"emptyLinePlaceholder":207},[45,92844,92845,92847,92849],{"class":47,"line":17004},[45,92846,51885],{"class":55},[45,92848,50735],{"class":51400},[45,92850,51407],{"class":55},[196,92852,92853],{},"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":25,"searchDepth":66,"depth":66,"links":92855},[92856,92861,92865,92866,92867,92872,92877,92878,92879,92880,92887,92892,92893,92903,92907,92908,92912],{"id":76791,"depth":66,"text":76792,"children":92857},[92858,92859,92860],{"id":76795,"depth":1331,"text":76796},{"id":76820,"depth":1331,"text":76821},{"id":76832,"depth":1331,"text":76833},{"id":76844,"depth":66,"text":76845,"children":92862},[92863,92864],{"id":76848,"depth":1331,"text":76849},{"id":76863,"depth":1331,"text":76864},{"id":76915,"depth":66,"text":76916},{"id":76959,"depth":66,"text":76960},{"id":76976,"depth":66,"text":76977,"children":92868},[92869,92870,92871],{"id":76980,"depth":1331,"text":76981},{"id":76993,"depth":1331,"text":76994},{"id":77098,"depth":1331,"text":77099},{"id":77387,"depth":66,"text":77388,"children":92873},[92874,92875,92876],{"id":77391,"depth":1331,"text":77392},{"id":77834,"depth":1331,"text":77835},{"id":78245,"depth":1331,"text":78246},{"id":78308,"depth":66,"text":78309},{"id":78387,"depth":66,"text":78388},{"id":78480,"depth":66,"text":78481},{"id":80325,"depth":66,"text":80326,"children":92881},[92882,92883,92884,92885,92886],{"id":80329,"depth":1331,"text":80330},{"id":80341,"depth":1331,"text":80342},{"id":80560,"depth":1331,"text":80561},{"id":80578,"depth":1331,"text":80579},{"id":80638,"depth":1331,"text":80639},{"id":84906,"depth":66,"text":84907,"children":92888},[92889,92890,92891],{"id":84910,"depth":1331,"text":84911},{"id":84928,"depth":1331,"text":84929},{"id":84954,"depth":1331,"text":84955},{"id":84963,"depth":66,"text":84964},{"id":84985,"depth":66,"text":84986,"children":92894},[92895,92896,92897,92898,92899,92900,92901,92902],{"id":84989,"depth":1331,"text":84990},{"id":85250,"depth":1331,"text":85251},{"id":85436,"depth":1331,"text":85437},{"id":85803,"depth":1331,"text":85804},{"id":85919,"depth":1331,"text":85920},{"id":85955,"depth":1331,"text":85956},{"id":86002,"depth":1331,"text":86003},{"id":86036,"depth":1331,"text":86037},{"id":87399,"depth":66,"text":87400,"children":92904},[92905,92906],{"id":87403,"depth":1331,"text":87404},{"id":87440,"depth":1331,"text":87441},{"id":88795,"depth":66,"text":88796},{"id":89166,"depth":66,"text":89167,"children":92909},[92910,92911],{"id":89170,"depth":1331,"text":89171},{"id":89204,"depth":1331,"text":89205},{"id":89933,"depth":66,"text":89934,"children":92913},[92914,92915,92916,92917],{"id":89937,"depth":1331,"text":89938},{"id":90895,"depth":1331,"text":90896},{"id":91837,"depth":1331,"text":91838},{"id":91911,"depth":1331,"text":91912},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76780,"description":204},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92924,"title":92925,"body":92926,"description":92937,"extension":205,"meta":92938,"navigation":207,"path":92940,"seo":92941,"stem":92942,"__hash__":92943},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92927,"toc":92935},[92928],[20,92929,92930,92931],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[516,92932,92933],{"href":92933,"rel":92934},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24012],{"title":25,"searchDepth":66,"depth":66,"links":92936},[],"三件套第三套学习",{"category":92939},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92925,"description":92937},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92945,"title":92946,"body":92947,"description":204,"extension":205,"meta":93052,"navigation":207,"path":93053,"seo":93054,"stem":93055,"__hash__":93056},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92948,"toc":93047},[92949,92956,92959,92962,92965,92969,92978,92981,92984,92988,92997,93000,93004,93007,93027,93030,93044],[20,92950,92951],{},[516,92952,92955],{"href":92953,"rel":92954},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24012],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92957,92946],{"id":92958},"_1安装",[20,92960,92961],{},"numpy是科学计算基础库,底层是C语言",[20,92963,92964],{},"三种方式：",[15,92966,92968],{"id":92967},"_11-通过pip安装","1.1 通过pip安装",[36,92970,92972],{"className":30478,"code":92971,"language":30480,"meta":25,"style":25},"pip install numpy\n",[42,92973,92974],{"__ignoreMap":25},[45,92975,92976],{"class":47,"line":48},[45,92977,92971],{"class":55},[20,92979,92980],{},"首选方式，自动处理依赖项",[20,92982,92983],{},"在提示系统命令符中使用cmd",[15,92985,92987],{"id":92986},"_12-通过anaconda安装","1.2 通过Anaconda安装",[36,92989,92991],{"className":30478,"code":92990,"language":30480,"meta":25,"style":25},"conda install numpy\n",[42,92992,92993],{"__ignoreMap":25},[45,92994,92995],{"class":47,"line":48},[45,92996,92990],{"class":55},[20,92998,92999],{},"自动解决环境依赖",[15,93001,93003],{"id":93002},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[20,93005,93006],{},"对于Debian\u002FUbuntu",[36,93008,93010],{"className":30478,"code":93009,"language":30480,"meta":25,"style":25},"sudo apt-get install python3-numpy\n",[42,93011,93012],{"__ignoreMap":25},[45,93013,93014,93017,93019,93022,93024],{"class":47,"line":48},[45,93015,93016],{"class":55},"sudo apt",[45,93018,809],{"class":51},[45,93020,93021],{"class":55},"get install python3",[45,93023,809],{"class":51},[45,93025,93026],{"class":55},"numpy\n",[20,93028,93029],{},"对于Fedora:",[36,93031,93033],{"className":30478,"code":93032,"language":30480,"meta":25,"style":25},"sudo dnf install python3-numpy\n",[42,93034,93035],{"__ignoreMap":25},[45,93036,93037,93040,93042],{"class":47,"line":48},[45,93038,93039],{"class":55},"sudo dnf install python3",[45,93041,809],{"class":51},[45,93043,93026],{"class":55},[196,93045,93046],{},"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":25,"searchDepth":66,"depth":66,"links":93048},[93049,93050,93051],{"id":92967,"depth":66,"text":92968},{"id":92986,"depth":66,"text":92987},{"id":93002,"depth":66,"text":93003},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92946,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93058,"title":93059,"body":93060,"description":204,"extension":205,"meta":93173,"navigation":207,"path":93174,"seo":93175,"stem":93176,"__hash__":93177},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93061,"toc":93171},[93062,93065,93068,93071,93074,93077,93080,93083,93086,93089,93165,93168],[10,93063,93059],{"id":93064},"_10算数函数",[20,93066,93067],{},"加减乘除运算跟python基础语法没区别",[20,93069,93070],{},"除了python那种方法外还可以使用函数",[20,93072,93073],{},"加：np.add(a,b)",[20,93075,93076],{},"减：np.subtract(a,b)",[20,93078,93079],{},"乘：np.multiply(a,b)",[20,93081,93082],{},"除：np.divide(a,b) == a\u002Fb",[20,93084,93085],{},"取余：np.mod(a,b) == a%b",[20,93087,93088],{},"必须会的用法：",[36,93090,93092],{"className":30478,"code":93091,"language":30480,"meta":25,"style":25},"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",[42,93093,93094,93116,93137,93147,93160],{"__ignoreMap":25},[45,93095,93096,93098,93100,93103,93105,93108,93110,93112,93114],{"class":47,"line":48},[45,93097,516],{"class":55},[45,93099,59],{"class":51},[45,93101,93102],{"class":55},"np.arange(",[45,93104,697],{"class":79},[45,93106,93107],{"class":55},").reshape(",[45,93109,350],{"class":79},[45,93111,655],{"class":55},[45,93113,350],{"class":79},[45,93115,139],{"class":55},[45,93117,93118,93120,93122,93125,93127,93129,93131,93133,93135],{"class":47,"line":66},[45,93119,540],{"class":55},[45,93121,59],{"class":51},[45,93123,93124],{"class":55},"np.array([",[45,93126,723],{"class":79},[45,93128,655],{"class":55},[45,93130,723],{"class":79},[45,93132,655],{"class":55},[45,93134,723],{"class":79},[45,93136,4807],{"class":55},[45,93138,93139,93142,93144],{"class":47,"line":1331},[45,93140,93141],{"class":55},"result",[45,93143,59],{"class":51},[45,93145,93146],{"class":55},"np.empty_like(a)\n",[45,93148,93149,93152,93155,93157],{"class":47,"line":1346},[45,93150,93151],{"class":55},"np.add(a,b,",[45,93153,93154],{"class":5366},"out",[45,93156,59],{"class":51},[45,93158,93159],{"class":55},"result)\n",[45,93161,93162],{"class":47,"line":1352},[45,93163,93164],{"class":55},"result\n",[20,93166,93167],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[196,93169,93170],{},"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":25,"searchDepth":66,"depth":66,"links":93172},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93059,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93179,"title":93180,"body":93181,"description":204,"extension":205,"meta":93943,"navigation":207,"path":93944,"seo":93945,"stem":93946,"__hash__":93947},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93182,"toc":93930},[93183,93186,93189,93192,93196,93235,93239,93283,93343,93347,93350,93389,93392,93437,93441,93477,93481,93550,93554,93618,93622,93625,93628,93631,93634,93670,93674,93714,93718,93790,93793,93797,93860,93864,93927],[10,93184,93180],{"id":93185},"_11统计函数",[20,93187,93188],{},"sum max min mean",[20,93190,93191],{},"这些有axis参数，可以指定方向",[15,93193,93195],{"id":93194},"_111-sum求和函数","11.1 sum()求和函数",[36,93197,93199],{"className":30478,"code":93198,"language":30480,"meta":25,"style":25},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[42,93200,93201,93206,93227],{"__ignoreMap":25},[45,93202,93203],{"class":47,"line":48},[45,93204,93205],{"class":337},"#创建一维数组\n",[45,93207,93208,93210,93212,93215,93217,93219,93221,93223,93225],{"class":47,"line":66},[45,93209,516],{"class":55},[45,93211,59],{"class":51},[45,93213,93214],{"class":55},"np.random.randint(",[45,93216,495],{"class":79},[45,93218,655],{"class":55},[45,93220,588],{"class":79},[45,93222,655],{"class":55},[45,93224,977],{"class":79},[45,93226,139],{"class":55},[45,93228,93229,93232],{"class":47,"line":1331},[45,93230,93231],{"class":55},"np.sum(a)",[45,93233,93234],{"class":337},"#求和\n",[15,93236,93238],{"id":93237},"_112-max求最大值函数","11.2 max()求最大值函数",[36,93240,93242],{"className":30478,"code":93241,"language":30480,"meta":25,"style":25},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[42,93243,93244,93248,93268,93273,93278],{"__ignoreMap":25},[45,93245,93246],{"class":47,"line":48},[45,93247,93205],{"class":337},[45,93249,93250,93252,93254,93256,93258,93260,93262,93264,93266],{"class":47,"line":66},[45,93251,516],{"class":55},[45,93253,59],{"class":51},[45,93255,93214],{"class":55},[45,93257,495],{"class":79},[45,93259,655],{"class":55},[45,93261,588],{"class":79},[45,93263,655],{"class":55},[45,93265,977],{"class":79},[45,93267,139],{"class":55},[45,93269,93270],{"class":47,"line":1331},[45,93271,93272],{"class":55},"np.max(a)\n",[45,93274,93275],{"class":47,"line":1346},[45,93276,93277],{"class":337},"#最大索引(求最大元素的索引)arg\n",[45,93279,93280],{"class":47,"line":1352},[45,93281,93282],{"class":55},"np.argmax(a)\n",[36,93284,93286],{"className":30478,"code":93285,"language":30480,"meta":25,"style":25},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[42,93287,93288,93309,93329,93333],{"__ignoreMap":25},[45,93289,93290,93292,93294,93297,93299,93301,93303,93305,93307],{"class":47,"line":48},[45,93291,11068],{"class":55},[45,93293,59],{"class":51},[45,93295,93296],{"class":55}," np.array([",[45,93298,495],{"class":79},[45,93300,12584],{"class":55},[45,93302,596],{"class":79},[45,93304,12584],{"class":55},[45,93306,350],{"class":79},[45,93308,4807],{"class":55},[45,93310,93311,93313,93315,93317,93319,93321,93323,93325,93327],{"class":47,"line":66},[45,93312,11094],{"class":55},[45,93314,59],{"class":51},[45,93316,93296],{"class":55},[45,93318,350],{"class":79},[45,93320,12584],{"class":55},[45,93322,356],{"class":79},[45,93324,12584],{"class":55},[45,93326,570],{"class":79},[45,93328,4807],{"class":55},[45,93330,93331],{"class":47,"line":1331},[45,93332,2550],{"emptyLinePlaceholder":207},[45,93334,93335,93337,93340],{"class":47,"line":1346},[45,93336,30515],{"class":79},[45,93338,93339],{"class":55},"(np.maximum(a, b))   ",[45,93341,93342],{"class":337},"# [3 5 4]，每个位置上取较大值\n",[15,93344,93346],{"id":93345},"_113-mean求平均值函数","11.3 mean()求平均值函数",[20,93348,93349],{},"①一维数组：",[36,93351,93353],{"className":30478,"code":93352,"language":30480,"meta":25,"style":25},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[42,93354,93355,93359,93379,93384],{"__ignoreMap":25},[45,93356,93357],{"class":47,"line":48},[45,93358,93205],{"class":337},[45,93360,93361,93363,93365,93367,93369,93371,93373,93375,93377],{"class":47,"line":66},[45,93362,516],{"class":55},[45,93364,59],{"class":51},[45,93366,93214],{"class":55},[45,93368,495],{"class":79},[45,93370,655],{"class":55},[45,93372,588],{"class":79},[45,93374,655],{"class":55},[45,93376,977],{"class":79},[45,93378,139],{"class":55},[45,93380,93381],{"class":47,"line":1331},[45,93382,93383],{"class":337},"#求平均值\n",[45,93385,93386],{"class":47,"line":1346},[45,93387,93388],{"class":55},"np.mean(a)\n",[20,93390,93391],{},"②二维数组",[36,93393,93395],{"className":30478,"code":93394,"language":30480,"meta":25,"style":25},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[42,93396,93397,93402,93427,93432],{"__ignoreMap":25},[45,93398,93399],{"class":47,"line":48},[45,93400,93401],{"class":337},"#二维数组\n",[45,93403,93404,93407,93409,93411,93413,93415,93417,93419,93421,93423,93425],{"class":47,"line":66},[45,93405,93406],{"class":55},"aa",[45,93408,59],{"class":51},[45,93410,93102],{"class":55},[45,93412,495],{"class":79},[45,93414,655],{"class":55},[45,93416,800],{"class":79},[45,93418,93107],{"class":55},[45,93420,350],{"class":79},[45,93422,655],{"class":55},[45,93424,570],{"class":79},[45,93426,139],{"class":55},[45,93428,93429],{"class":47,"line":1331},[45,93430,93431],{"class":337},"#对数组中的所有数求平均\n",[45,93433,93434],{"class":47,"line":1346},[45,93435,93436],{"class":55},"np.mean(aa)\n",[15,93438,93440],{"id":93439},"_114-median求中位数函数","11.4 median()求中位数函数",[36,93442,93444],{"className":30478,"code":93443,"language":30480,"meta":25,"style":25},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[42,93445,93446,93451,93467,93472],{"__ignoreMap":25},[45,93447,93448],{"class":47,"line":48},[45,93449,93450],{"class":337},"#求中位数\n",[45,93452,93453,93455,93457,93459,93461,93463,93465],{"class":47,"line":66},[45,93454,540],{"class":55},[45,93456,59],{"class":51},[45,93458,93102],{"class":55},[45,93460,495],{"class":79},[45,93462,655],{"class":55},[45,93464,723],{"class":79},[45,93466,139],{"class":55},[45,93468,93469],{"class":47,"line":1331},[45,93470,93471],{"class":55},"np.median(b)\n",[45,93473,93474],{"class":47,"line":1346},[45,93475,93476],{"class":337},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[15,93478,93480],{"id":93479},"_115-power求幂运算函数","11.5 power()求幂运算函数",[36,93482,93484],{"className":30478,"code":93483,"language":30480,"meta":25,"style":25},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[42,93485,93486,93502,93507,93512,93521,93526,93535],{"__ignoreMap":25},[45,93487,93488,93490,93492,93494,93496,93498,93500],{"class":47,"line":48},[45,93489,540],{"class":55},[45,93491,59],{"class":51},[45,93493,93102],{"class":55},[45,93495,495],{"class":79},[45,93497,655],{"class":55},[45,93499,723],{"class":79},[45,93501,139],{"class":55},[45,93503,93504],{"class":47,"line":66},[45,93505,93506],{"class":337},"#幂运算\n",[45,93508,93509],{"class":47,"line":1331},[45,93510,93511],{"class":337},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[45,93513,93514,93517,93519],{"class":47,"line":1346},[45,93515,93516],{"class":55},"np.power(b,",[45,93518,356],{"class":79},[45,93520,139],{"class":55},[45,93522,93523],{"class":47,"line":1352},[45,93524,93525],{"class":337},"#或者以下代码，将数据存储起来\n",[45,93527,93528,93530,93532],{"class":47,"line":1366},[45,93529,1122],{"class":55},[45,93531,59],{"class":51},[45,93533,93534],{"class":55},"np.empty_like(b)\n",[45,93536,93537,93539,93541,93543,93545,93547],{"class":47,"line":1372},[45,93538,93516],{"class":55},[45,93540,356],{"class":79},[45,93542,655],{"class":55},[45,93544,93154],{"class":5366},[45,93546,59],{"class":51},[45,93548,93549],{"class":55},"y)\n",[15,93551,93553],{"id":93552},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[36,93555,93557],{"className":30478,"code":93556,"language":30480,"meta":25,"style":25},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[42,93558,93559,93575,93580,93585,93589,93607],{"__ignoreMap":25},[45,93560,93561,93563,93565,93567,93569,93571,93573],{"class":47,"line":48},[45,93562,540],{"class":55},[45,93564,59],{"class":51},[45,93566,93102],{"class":55},[45,93568,495],{"class":79},[45,93570,655],{"class":55},[45,93572,723],{"class":79},[45,93574,139],{"class":55},[45,93576,93577],{"class":47,"line":66},[45,93578,93579],{"class":337},"#开方\n",[45,93581,93582],{"class":47,"line":1331},[45,93583,93584],{"class":55},"np.sqrt(b)\n",[45,93586,93587],{"class":47,"line":1346},[45,93588,93525],{"class":337},[45,93590,93591,93593,93595,93598,93601,93603,93605],{"class":47,"line":1352},[45,93592,1122],{"class":55},[45,93594,59],{"class":51},[45,93596,93597],{"class":55},"np.empty_like(b,",[45,93599,93600],{"class":5366},"dtype",[45,93602,59],{"class":51},[45,93604,320],{"class":79},[45,93606,139],{"class":55},[45,93608,93609,93612,93614,93616],{"class":47,"line":1366},[45,93610,93611],{"class":55},"np.sqrt(b,",[45,93613,93154],{"class":5366},[45,93615,59],{"class":51},[45,93617,93549],{"class":55},[15,93619,93621],{"id":93620},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[20,93623,93624],{},"对数组中的元素累计求和，可指定轴",[20,93626,93627],{},"#累计求和的意思是：",[20,93629,93630],{},"a = np.array([1, 2, 3, 4])",[20,93632,93633],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[36,93635,93637],{"className":30478,"code":93636,"language":30480,"meta":25,"style":25},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[42,93638,93639,93655,93660,93665],{"__ignoreMap":25},[45,93640,93641,93643,93645,93647,93649,93651,93653],{"class":47,"line":48},[45,93642,540],{"class":55},[45,93644,59],{"class":51},[45,93646,93102],{"class":55},[45,93648,495],{"class":79},[45,93650,655],{"class":55},[45,93652,723],{"class":79},[45,93654,139],{"class":55},[45,93656,93657],{"class":47,"line":66},[45,93658,93659],{"class":55},"np.cumsum(b)\n",[45,93661,93662],{"class":47,"line":1331},[45,93663,93664],{"class":337},"#结果：\n",[45,93666,93667],{"class":47,"line":1346},[45,93668,93669],{"class":337},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[15,93671,93673],{"id":93672},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[36,93675,93677],{"className":30478,"code":93676,"language":30480,"meta":25,"style":25},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[42,93678,93679,93695,93700,93705,93709],{"__ignoreMap":25},[45,93680,93681,93683,93685,93687,93689,93691,93693],{"class":47,"line":48},[45,93682,540],{"class":55},[45,93684,59],{"class":51},[45,93686,93102],{"class":55},[45,93688,495],{"class":79},[45,93690,655],{"class":55},[45,93692,723],{"class":79},[45,93694,139],{"class":55},[45,93696,93697],{"class":47,"line":66},[45,93698,93699],{"class":337},"#对数组中的元素累计求积，可指定轴\n",[45,93701,93702],{"class":47,"line":1331},[45,93703,93704],{"class":55},"np.cumprod(b)\n",[45,93706,93707],{"class":47,"line":1346},[45,93708,93664],{"class":337},[45,93710,93711],{"class":47,"line":1352},[45,93712,93713],{"class":337},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[15,93715,93717],{"id":93716},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[36,93719,93721],{"className":30478,"code":93720,"language":30480,"meta":25,"style":25},"#删除数组中的重复数据，并对数据进行排序\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",[42,93722,93723,93728,93776,93781,93785],{"__ignoreMap":25},[45,93724,93725],{"class":47,"line":48},[45,93726,93727],{"class":337},"#删除数组中的重复数据，并对数据进行排序\n",[45,93729,93730,93732,93734,93736,93738,93740,93742,93744,93746,93748,93750,93752,93754,93756,93758,93760,93762,93764,93766,93768,93770,93772,93774],{"class":47,"line":66},[45,93731,516],{"class":55},[45,93733,59],{"class":51},[45,93735,93124],{"class":55},[45,93737,495],{"class":79},[45,93739,655],{"class":55},[45,93741,356],{"class":79},[45,93743,655],{"class":55},[45,93745,350],{"class":79},[45,93747,655],{"class":55},[45,93749,775],{"class":79},[45,93751,655],{"class":55},[45,93753,350],{"class":79},[45,93755,655],{"class":55},[45,93757,723],{"class":79},[45,93759,655],{"class":55},[45,93761,475],{"class":79},[45,93763,655],{"class":55},[45,93765,469],{"class":79},[45,93767,655],{"class":55},[45,93769,1052],{"class":79},[45,93771,655],{"class":55},[45,93773,570],{"class":79},[45,93775,4807],{"class":55},[45,93777,93778],{"class":47,"line":1331},[45,93779,93780],{"class":55},"np.unique(a)\n",[45,93782,93783],{"class":47,"line":1346},[45,93784,93664],{"class":337},[45,93786,93787],{"class":47,"line":1352},[45,93788,93789],{"class":337},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[20,93791,93792],{},"升序形式排序",[15,93794,93796],{"id":93795},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[36,93798,93800],{"className":30478,"code":93799,"language":30480,"meta":25,"style":25},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[42,93801,93802,93850,93855],{"__ignoreMap":25},[45,93803,93804,93806,93808,93810,93812,93814,93816,93818,93820,93822,93824,93826,93828,93830,93832,93834,93836,93838,93840,93842,93844,93846,93848],{"class":47,"line":48},[45,93805,516],{"class":55},[45,93807,59],{"class":51},[45,93809,93124],{"class":55},[45,93811,495],{"class":79},[45,93813,655],{"class":55},[45,93815,356],{"class":79},[45,93817,655],{"class":55},[45,93819,350],{"class":79},[45,93821,655],{"class":55},[45,93823,775],{"class":79},[45,93825,655],{"class":55},[45,93827,350],{"class":79},[45,93829,655],{"class":55},[45,93831,723],{"class":79},[45,93833,655],{"class":55},[45,93835,475],{"class":79},[45,93837,655],{"class":55},[45,93839,469],{"class":79},[45,93841,655],{"class":55},[45,93843,1052],{"class":79},[45,93845,655],{"class":55},[45,93847,570],{"class":79},[45,93849,4807],{"class":55},[45,93851,93852],{"class":47,"line":66},[45,93853,93854],{"class":337},"#返回数组中非零元素的索引\n",[45,93856,93857],{"class":47,"line":1331},[45,93858,93859],{"class":55},"np.nonzero(a)\n",[15,93861,93863],{"id":93862},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[36,93865,93867],{"className":30478,"code":93866,"language":30480,"meta":25,"style":25},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[42,93868,93869,93917,93922],{"__ignoreMap":25},[45,93870,93871,93873,93875,93877,93879,93881,93883,93885,93887,93889,93891,93893,93895,93897,93899,93901,93903,93905,93907,93909,93911,93913,93915],{"class":47,"line":48},[45,93872,516],{"class":55},[45,93874,59],{"class":51},[45,93876,93124],{"class":55},[45,93878,495],{"class":79},[45,93880,655],{"class":55},[45,93882,356],{"class":79},[45,93884,655],{"class":55},[45,93886,350],{"class":79},[45,93888,655],{"class":55},[45,93890,775],{"class":79},[45,93892,655],{"class":55},[45,93894,350],{"class":79},[45,93896,655],{"class":55},[45,93898,723],{"class":79},[45,93900,655],{"class":55},[45,93902,475],{"class":79},[45,93904,655],{"class":55},[45,93906,469],{"class":79},[45,93908,655],{"class":55},[45,93910,1052],{"class":79},[45,93912,655],{"class":55},[45,93914,570],{"class":79},[45,93916,4807],{"class":55},[45,93918,93919],{"class":47,"line":66},[45,93920,93921],{"class":337},"#计算一组数中最大值与最小值的差，可指定轴\n",[45,93923,93924],{"class":47,"line":1331},[45,93925,93926],{"class":55},"np.ptp(a)\n",[196,93928,93929],{},"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":25,"searchDepth":66,"depth":66,"links":93931},[93932,93933,93934,93935,93936,93937,93938,93939,93940,93941,93942],{"id":93194,"depth":66,"text":93195},{"id":93237,"depth":66,"text":93238},{"id":93345,"depth":66,"text":93346},{"id":93439,"depth":66,"text":93440},{"id":93479,"depth":66,"text":93480},{"id":93552,"depth":66,"text":93553},{"id":93620,"depth":66,"text":93621},{"id":93672,"depth":66,"text":93673},{"id":93716,"depth":66,"text":93717},{"id":93795,"depth":66,"text":93796},{"id":93862,"depth":66,"text":93863},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93180,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93949,"title":93950,"body":93951,"description":204,"extension":205,"meta":94606,"navigation":207,"path":94607,"seo":94608,"stem":94609,"__hash__":94610},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93952,"toc":94594},[93953,93956,93960,93963,94179,94183,94186,94395,94399,94465,94470,94474,94477,94480,94518,94522,94525,94530,94534,94537,94540,94545,94549,94552,94556,94559,94562,94567,94571,94574,94577,94582,94586,94591],[10,93954,93950],{"id":93955},"_12其他常用函数",[15,93957,93959],{"id":93958},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[20,93961,93962],{},"将数组的数据按照行列复制扩展",[36,93964,93966],{"className":30478,"code":93965,"language":30480,"meta":25,"style":25},"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",[42,93967,93968,93984,93993,93997,94002,94007,94020,94024,94029,94034,94039,94043,94048,94072,94084,94088,94092,94097,94102,94107,94112,94116,94129,94133,94137,94142,94147,94152,94157,94162,94166,94170,94175],{"__ignoreMap":25},[45,93969,93970,93972,93974,93976,93978,93980,93982],{"class":47,"line":48},[45,93971,516],{"class":55},[45,93973,59],{"class":51},[45,93975,93102],{"class":55},[45,93977,495],{"class":79},[45,93979,655],{"class":55},[45,93981,596],{"class":79},[45,93983,139],{"class":55},[45,93985,93986,93989,93991],{"class":47,"line":66},[45,93987,93988],{"class":55},"np.tile(a,",[45,93990,356],{"class":79},[45,93992,139],{"class":55},[45,93994,93995],{"class":47,"line":1331},[45,93996,93664],{"class":337},[45,93998,93999],{"class":47,"line":1346},[45,94000,94001],{"class":337},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[45,94003,94004],{"class":47,"line":1352},[45,94005,94006],{"class":337},"#行复制两次，列复制三次\n",[45,94008,94009,94012,94014,94016,94018],{"class":47,"line":1366},[45,94010,94011],{"class":55},"np.tile(a,(",[45,94013,356],{"class":79},[45,94015,655],{"class":55},[45,94017,350],{"class":79},[45,94019,30597],{"class":55},[45,94021,94022],{"class":47,"line":1372},[45,94023,93664],{"class":337},[45,94025,94026],{"class":47,"line":1463},[45,94027,94028],{"class":62},"'''\n",[45,94030,94031],{"class":47,"line":1469},[45,94032,94033],{"class":62},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[45,94035,94036],{"class":47,"line":1481},[45,94037,94038],{"class":62},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[45,94040,94041],{"class":47,"line":1763},[45,94042,94028],{"class":62},[45,94044,94045],{"class":47,"line":1768},[45,94046,94047],{"class":337},"#创建二维数组\n",[45,94049,94050,94052,94054,94056,94058,94060,94062,94064,94066,94068,94070],{"class":47,"line":1774},[45,94051,93406],{"class":55},[45,94053,59],{"class":51},[45,94055,93102],{"class":55},[45,94057,495],{"class":79},[45,94059,655],{"class":55},[45,94061,800],{"class":79},[45,94063,93107],{"class":55},[45,94065,570],{"class":79},[45,94067,655],{"class":55},[45,94069,350],{"class":79},[45,94071,139],{"class":55},[45,94073,94074,94077,94079,94081],{"class":47,"line":1779},[45,94075,94076],{"class":55},"np.tile(aa,",[45,94078,356],{"class":79},[45,94080,706],{"class":55},[45,94082,94083],{"class":337},"#一个数的时候就是行\n",[45,94085,94086],{"class":47,"line":1793},[45,94087,93664],{"class":337},[45,94089,94090],{"class":47,"line":1798},[45,94091,94028],{"class":62},[45,94093,94094],{"class":47,"line":1804},[45,94095,94096],{"class":62},"array([[ 1,  2,  3,  1,  2,  3],\n",[45,94098,94099],{"class":47,"line":1825},[45,94100,94101],{"class":62},"       [ 4,  5,  6,  4,  5,  6],\n",[45,94103,94104],{"class":47,"line":1830},[45,94105,94106],{"class":62},"       [ 7,  8,  9,  7,  8,  9],\n",[45,94108,94109],{"class":47,"line":1844},[45,94110,94111],{"class":62},"       [10, 11, 12, 10, 11, 12]])\n",[45,94113,94114],{"class":47,"line":1849},[45,94115,94028],{"class":62},[45,94117,94118,94121,94123,94125,94127],{"class":47,"line":1878},[45,94119,94120],{"class":55},"np.tile(aa,(",[45,94122,356],{"class":79},[45,94124,655],{"class":55},[45,94126,350],{"class":79},[45,94128,30597],{"class":55},[45,94130,94131],{"class":47,"line":1883},[45,94132,93664],{"class":337},[45,94134,94135],{"class":47,"line":1900},[45,94136,94028],{"class":62},[45,94138,94139],{"class":47,"line":1905},[45,94140,94141],{"class":62},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[45,94143,94144],{"class":47,"line":1910},[45,94145,94146],{"class":62},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[45,94148,94149],{"class":47,"line":1915},[45,94150,94151],{"class":62},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[45,94153,94154],{"class":47,"line":1929},[45,94155,94156],{"class":62},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[45,94158,94159],{"class":47,"line":1934},[45,94160,94161],{"class":62},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[45,94163,94164],{"class":47,"line":2727},[45,94165,94146],{"class":62},[45,94167,94168],{"class":47,"line":2741},[45,94169,94151],{"class":62},[45,94171,94172],{"class":47,"line":2749},[45,94173,94174],{"class":62},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[45,94176,94177],{"class":47,"line":2754},[45,94178,94028],{"class":62},[15,94180,94182],{"id":94181},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[20,94184,94185],{},"repeat()将数组中的每个元素重复若干次",[36,94187,94189],{"className":30478,"code":94188,"language":30480,"meta":25,"style":25},"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",[42,94190,94191,94207,94216,94220,94225,94249,94254,94263,94267,94272,94276,94281,94297,94301,94305,94310,94315,94320,94324,94329,94333,94338,94343,94347,94363,94367,94371,94376,94381,94386,94391],{"__ignoreMap":25},[45,94192,94193,94195,94197,94199,94201,94203,94205],{"class":47,"line":48},[45,94194,516],{"class":55},[45,94196,59],{"class":51},[45,94198,93102],{"class":55},[45,94200,495],{"class":79},[45,94202,655],{"class":55},[45,94204,596],{"class":79},[45,94206,139],{"class":55},[45,94208,94209,94212,94214],{"class":47,"line":66},[45,94210,94211],{"class":55},"np.repeat(a,",[45,94213,350],{"class":79},[45,94215,139],{"class":55},[45,94217,94218],{"class":47,"line":1331},[45,94219,93664],{"class":337},[45,94221,94222],{"class":47,"line":1346},[45,94223,94224],{"class":337},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[45,94226,94227,94229,94231,94233,94235,94237,94239,94241,94243,94245,94247],{"class":47,"line":1352},[45,94228,93406],{"class":55},[45,94230,59],{"class":51},[45,94232,93102],{"class":55},[45,94234,495],{"class":79},[45,94236,655],{"class":55},[45,94238,800],{"class":79},[45,94240,93107],{"class":55},[45,94242,570],{"class":79},[45,94244,655],{"class":55},[45,94246,350],{"class":79},[45,94248,139],{"class":55},[45,94250,94251],{"class":47,"line":1366},[45,94252,94253],{"class":337},"#这个重复之后二维变成一维\n",[45,94255,94256,94259,94261],{"class":47,"line":1372},[45,94257,94258],{"class":55},"np.repeat(aa,",[45,94260,356],{"class":79},[45,94262,139],{"class":55},[45,94264,94265],{"class":47,"line":1463},[45,94266,94028],{"class":62},[45,94268,94269],{"class":47,"line":1469},[45,94270,94271],{"class":62},"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",[45,94273,94274],{"class":47,"line":1481},[45,94275,94028],{"class":62},[45,94277,94278],{"class":47,"line":1763},[45,94279,94280],{"class":337},"#指定axis\n",[45,94282,94283,94285,94287,94289,94291,94293,94295],{"class":47,"line":1768},[45,94284,94258],{"class":55},[45,94286,356],{"class":79},[45,94288,655],{"class":55},[45,94290,47614],{"class":5366},[45,94292,59],{"class":51},[45,94294,469],{"class":79},[45,94296,139],{"class":55},[45,94298,94299],{"class":47,"line":1774},[45,94300,93664],{"class":337},[45,94302,94303],{"class":47,"line":1779},[45,94304,94028],{"class":62},[45,94306,94307],{"class":47,"line":1793},[45,94308,94309],{"class":62},"array([[ 1,  2,  3],\n",[45,94311,94312],{"class":47,"line":1798},[45,94313,94314],{"class":62},"       [ 1,  2,  3],\n",[45,94316,94317],{"class":47,"line":1804},[45,94318,94319],{"class":62},"       [ 4,  5,  6],\n",[45,94321,94322],{"class":47,"line":1825},[45,94323,94319],{"class":62},[45,94325,94326],{"class":47,"line":1830},[45,94327,94328],{"class":62},"       [ 7,  8,  9],\n",[45,94330,94331],{"class":47,"line":1844},[45,94332,94328],{"class":62},[45,94334,94335],{"class":47,"line":1849},[45,94336,94337],{"class":62},"       [10, 11, 12],\n",[45,94339,94340],{"class":47,"line":1878},[45,94341,94342],{"class":62},"       [10, 11, 12]])\n",[45,94344,94345],{"class":47,"line":1883},[45,94346,94028],{"class":62},[45,94348,94349,94351,94353,94355,94357,94359,94361],{"class":47,"line":1900},[45,94350,94258],{"class":55},[45,94352,356],{"class":79},[45,94354,655],{"class":55},[45,94356,47614],{"class":5366},[45,94358,59],{"class":51},[45,94360,495],{"class":79},[45,94362,139],{"class":55},[45,94364,94365],{"class":47,"line":1905},[45,94366,93664],{"class":337},[45,94368,94369],{"class":47,"line":1910},[45,94370,94028],{"class":62},[45,94372,94373],{"class":47,"line":1915},[45,94374,94375],{"class":62},"array([[ 1,  1,  2,  2,  3,  3],\n",[45,94377,94378],{"class":47,"line":1929},[45,94379,94380],{"class":62},"       [ 4,  4,  5,  5,  6,  6],\n",[45,94382,94383],{"class":47,"line":1934},[45,94384,94385],{"class":62},"       [ 7,  7,  8,  8,  9,  9],\n",[45,94387,94388],{"class":47,"line":2727},[45,94389,94390],{"class":62},"       [10, 10, 11, 11, 12, 12]])\n",[45,94392,94393],{"class":47,"line":2741},[45,94394,94028],{"class":62},[15,94396,94398],{"id":94397},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[36,94400,94402],{"className":30478,"code":94401,"language":30480,"meta":25,"style":25},"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",[42,94403,94404,94420,94425,94437,94441,94446,94456,94460],{"__ignoreMap":25},[45,94405,94406,94408,94410,94412,94414,94416,94418],{"class":47,"line":48},[45,94407,516],{"class":55},[45,94409,59],{"class":51},[45,94411,93102],{"class":55},[45,94413,495],{"class":79},[45,94415,655],{"class":55},[45,94417,596],{"class":79},[45,94419,139],{"class":55},[45,94421,94422],{"class":47,"line":66},[45,94423,94424],{"class":337},"#array([，2，3，4])\n",[45,94426,94427,94430,94432,94434],{"class":47,"line":1331},[45,94428,94429],{"class":55},"np.roll(a,",[45,94431,356],{"class":79},[45,94433,706],{"class":55},[45,94435,94436],{"class":337},"#传正数向后调多少位，传负数向前调多少位\n",[45,94438,94439],{"class":47,"line":1346},[45,94440,93664],{"class":337},[45,94442,94443],{"class":47,"line":1352},[45,94444,94445],{"class":337},"#array([3, 4, 1, 2])\n",[45,94447,94448,94450,94452,94454],{"class":47,"line":1366},[45,94449,94429],{"class":55},[45,94451,809],{"class":51},[45,94453,495],{"class":79},[45,94455,139],{"class":55},[45,94457,94458],{"class":47,"line":1372},[45,94459,93664],{"class":337},[45,94461,94462],{"class":47,"line":1463},[45,94463,94464],{"class":337},"#array([2, 3, 4, 1])\n",[20,94466,94467],{},[23,94468],{"alt":25,"src":94469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[15,94471,94473],{"id":94472},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[20,94475,94476],{},"resize()重新调整数组的大小",[20,94478,94479],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[36,94481,94483],{"className":30478,"code":94482,"language":30480,"meta":25,"style":25},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[42,94484,94485,94490,94503],{"__ignoreMap":25},[45,94486,94487],{"class":47,"line":48},[45,94488,94489],{"class":337},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[45,94491,94492,94495,94497,94499,94501],{"class":47,"line":66},[45,94493,94494],{"class":55},"np.resize(aa,(",[45,94496,356],{"class":79},[45,94498,655],{"class":55},[45,94500,621],{"class":79},[45,94502,30597],{"class":55},[45,94504,94505,94507,94509,94511,94513,94515],{"class":47,"line":1331},[45,94506,94494],{"class":55},[45,94508,356],{"class":79},[45,94510,655],{"class":55},[45,94512,697],{"class":79},[45,94514,82871],{"class":55},[45,94516,94517],{"class":337},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[15,94519,94521],{"id":94520},"_125-placeput函数","12.5 place()\u002Fput()函数",[20,94523,94524],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[20,94526,94527],{},[23,94528],{"alt":25,"src":94529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[15,94531,94533],{"id":94532},"_126-保存加载文件","12.6 保存加载文件",[20,94535,94536],{},"savetxt():将数据保存到txt文件中",[20,94538,94539],{},"loadtxt():从文件加载数据",[20,94541,94542],{},[23,94543],{"alt":25,"src":94544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[15,94546,94548],{"id":94547},"_127-genfromtxt函数","12.7 genfromtxt()函数",[20,94550,94551],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[15,94553,94555],{"id":94554},"_128-anyall函数","12.8 any()\u002Fall()函数",[20,94557,94558],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[20,94560,94561],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[20,94563,94564],{},[23,94565],{"alt":25,"src":94566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[15,94568,94570],{"id":94569},"_129-where语句","12.9 where语句",[20,94572,94573],{},"np.where(条件,x,y)",[20,94575,94576],{},"如果条件为True,对应值为x,否则对应值为y",[20,94578,94579],{},[23,94580],{"alt":25,"src":94581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[15,94583,94585],{"id":94584},"_1210-dot矩阵","12.10 dot()矩阵",[20,94587,94588],{},[23,94589],{"alt":25,"src":94590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[196,94592,94593],{},"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":25,"searchDepth":66,"depth":66,"links":94595},[94596,94597,94598,94599,94600,94601,94602,94603,94604,94605],{"id":93958,"depth":66,"text":93959},{"id":94181,"depth":66,"text":94182},{"id":94397,"depth":66,"text":94398},{"id":94472,"depth":66,"text":94473},{"id":94520,"depth":66,"text":94521},{"id":94532,"depth":66,"text":94533},{"id":94547,"depth":66,"text":94548},{"id":94554,"depth":66,"text":94555},{"id":94569,"depth":66,"text":94570},{"id":94584,"depth":66,"text":94585},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93950,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94612,"title":94613,"body":94614,"description":204,"extension":205,"meta":94967,"navigation":207,"path":94968,"seo":94969,"stem":94970,"__hash__":94971},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94615,"toc":94965},[94616,94619,94622,94625,94628,94631,94696,94698,94962],[10,94617,94613],{"id":94618},"_13数组排序",[20,94620,94621],{},"排序主要用到的方法是np.sort和np.argsort",[20,94623,94624],{},"其中np.sort()对数组直接排序",[20,94626,94627],{},"而np.argsort()是返回排序后的原始索引",[20,94629,94630],{},"①一维数组",[36,94632,94634],{"className":30478,"code":94633,"language":30480,"meta":25,"style":25},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[42,94635,94636,94640,94680,94688],{"__ignoreMap":25},[45,94637,94638],{"class":47,"line":48},[45,94639,93205],{"class":337},[45,94641,94642,94644,94646,94648,94650,94652,94654,94656,94658,94660,94662,94664,94666,94668,94670,94672,94674,94676,94678],{"class":47,"line":66},[45,94643,516],{"class":55},[45,94645,59],{"class":51},[45,94647,93124],{"class":55},[45,94649,350],{"class":79},[45,94651,655],{"class":55},[45,94653,775],{"class":79},[45,94655,655],{"class":55},[45,94657,672],{"class":79},[45,94659,655],{"class":55},[45,94661,1052],{"class":79},[45,94663,655],{"class":55},[45,94665,556],{"class":79},[45,94667,655],{"class":55},[45,94669,1170],{"class":79},[45,94671,655],{"class":55},[45,94673,621],{"class":79},[45,94675,655],{"class":55},[45,94677,723],{"class":79},[45,94679,4807],{"class":55},[45,94681,94682,94685],{"class":47,"line":1331},[45,94683,94684],{"class":55},"np.sort(a)",[45,94686,94687],{"class":337},"#升序排序\n",[45,94689,94690,94693],{"class":47,"line":1346},[45,94691,94692],{"class":55},"np.argsort(a)",[45,94694,94695],{"class":337},"#按照元素大小来索引排序\n",[20,94697,93391],{},[36,94699,94701],{"className":30478,"code":94700,"language":30480,"meta":25,"style":25},"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",[42,94702,94703,94715,94741,94746,94750,94755,94760,94765,94770,94774,94782,94786,94791,94796,94801,94806,94810,94815,94828,94832,94837,94842,94847,94852,94856,94861,94873,94877,94881,94885,94889,94893,94897,94902,94917,94922,94931,94936,94940,94944,94949,94953,94958],{"__ignoreMap":25},[45,94704,94705,94708,94710,94712],{"class":47,"line":48},[45,94706,94707],{"class":55},"np.random.seed(",[45,94709,469],{"class":79},[45,94711,706],{"class":55},[45,94713,94714],{"class":337},"#保证每次值一样\n",[45,94716,94717,94719,94721,94723,94725,94727,94729,94731,94733,94735,94737,94739],{"class":47,"line":66},[45,94718,93406],{"class":55},[45,94720,59],{"class":51},[45,94722,93214],{"class":55},[45,94724,588],{"class":79},[45,94726,655],{"class":55},[45,94728,31596],{"class":5366},[45,94730,59],{"class":51},[45,94732,282],{"class":55},[45,94734,570],{"class":79},[45,94736,655],{"class":55},[45,94738,621],{"class":79},[45,94740,30597],{"class":55},[45,94742,94743],{"class":47,"line":1331},[45,94744,94745],{"class":337},"#原数组：\n",[45,94747,94748],{"class":47,"line":1346},[45,94749,94028],{"class":62},[45,94751,94752],{"class":47,"line":1352},[45,94753,94754],{"class":62},"array([[44, 47, 64, 67, 67,  9],\n",[45,94756,94757],{"class":47,"line":1366},[45,94758,94759],{"class":62},"       [83, 21, 36, 87, 70, 88],\n",[45,94761,94762],{"class":47,"line":1372},[45,94763,94764],{"class":62},"       [88, 12, 58, 65, 39, 87],\n",[45,94766,94767],{"class":47,"line":1463},[45,94768,94769],{"class":62},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[45,94771,94772],{"class":47,"line":1469},[45,94773,94028],{"class":62},[45,94775,94776,94779],{"class":47,"line":1481},[45,94777,94778],{"class":55},"np.sort(aa)",[45,94780,94781],{"class":337},"#每行进行了排序\n",[45,94783,94784],{"class":47,"line":1763},[45,94785,94028],{"class":62},[45,94787,94788],{"class":47,"line":1768},[45,94789,94790],{"class":62},"array([[ 9, 44, 47, 64, 67, 67],\n",[45,94792,94793],{"class":47,"line":1774},[45,94794,94795],{"class":62},"       [21, 36, 70, 83, 87, 88],\n",[45,94797,94798],{"class":47,"line":1779},[45,94799,94800],{"class":62},"       [12, 39, 58, 65, 87, 88],\n",[45,94802,94803],{"class":47,"line":1793},[45,94804,94805],{"class":62},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[45,94807,94808],{"class":47,"line":1798},[45,94809,94028],{"class":62},[45,94811,94812],{"class":47,"line":1804},[45,94813,94814],{"class":337},"#axis=0时\n",[45,94816,94817,94820,94822,94824,94826],{"class":47,"line":1825},[45,94818,94819],{"class":55},"np.sort(aa,",[45,94821,47614],{"class":5366},[45,94823,59],{"class":51},[45,94825,469],{"class":79},[45,94827,139],{"class":55},[45,94829,94830],{"class":47,"line":1830},[45,94831,94028],{"class":62},[45,94833,94834],{"class":47,"line":1844},[45,94835,94836],{"class":62},"array([[44, 12, 36, 37, 25,  9],\n",[45,94838,94839],{"class":47,"line":1849},[45,94840,94841],{"class":62},"       [46, 21, 58, 65, 39, 77],\n",[45,94843,94844],{"class":47,"line":1878},[45,94845,94846],{"class":62},"       [83, 47, 64, 67, 67, 87],\n",[45,94848,94849],{"class":47,"line":1883},[45,94850,94851],{"class":62},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[45,94853,94854],{"class":47,"line":1900},[45,94855,94028],{"class":62},[45,94857,94858],{"class":47,"line":1905},[45,94859,94860],{"class":337},"#axis=1时,为默认值\n",[45,94862,94863,94865,94867,94869,94871],{"class":47,"line":1910},[45,94864,94819],{"class":55},[45,94866,47614],{"class":5366},[45,94868,59],{"class":51},[45,94870,495],{"class":79},[45,94872,139],{"class":55},[45,94874,94875],{"class":47,"line":1915},[45,94876,94028],{"class":62},[45,94878,94879],{"class":47,"line":1929},[45,94880,94790],{"class":62},[45,94882,94883],{"class":47,"line":1934},[45,94884,94795],{"class":62},[45,94886,94887],{"class":47,"line":2727},[45,94888,94800],{"class":62},[45,94890,94891],{"class":47,"line":2741},[45,94892,94805],{"class":62},[45,94894,94895],{"class":47,"line":2749},[45,94896,94028],{"class":62},[45,94898,94899],{"class":47,"line":2754},[45,94900,94901],{"class":337},"#按最后一列排序\n",[45,94903,94904,94906,94908,94911,94913,94915],{"class":47,"line":2760},[45,94905,540],{"class":55},[45,94907,59],{"class":51},[45,94909,94910],{"class":55},"aa[:,",[45,94912,809],{"class":51},[45,94914,495],{"class":79},[45,94916,33346],{"class":55},[45,94918,94919],{"class":47,"line":2766},[45,94920,94921],{"class":337},"#获取最后一列排好序的索引\n",[45,94923,94924,94926,94928],{"class":47,"line":2771},[45,94925,74158],{"class":55},[45,94927,59],{"class":51},[45,94929,94930],{"class":55},"np.argsort(b)\n",[45,94932,94933],{"class":47,"line":8098},[45,94934,94935],{"class":55},"aa[index]\n",[45,94937,94938],{"class":47,"line":8122},[45,94939,94028],{"class":62},[45,94941,94942],{"class":47,"line":8127},[45,94943,94754],{"class":62},[45,94945,94946],{"class":47,"line":8133},[45,94947,94948],{"class":62},"       [46, 88, 81, 37, 25, 77],\n",[45,94950,94951],{"class":47,"line":8160},[45,94952,94764],{"class":62},[45,94954,94955],{"class":47,"line":8165},[45,94956,94957],{"class":62},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[45,94959,94960],{"class":47,"line":8171},[45,94961,94028],{"class":62},[196,94963,94964],{},"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":25,"searchDepth":66,"depth":66,"links":94966},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94613,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94973,"title":94974,"body":94975,"description":204,"extension":205,"meta":95005,"navigation":207,"path":95006,"seo":95007,"stem":95008,"__hash__":95009},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94976,"toc":95003},[94977,94980,94983,94986,94989,94992,94995,94998],[10,94978,94974],{"id":94979},"_14广播机制",[20,94981,94982],{},"广播的规则：",[20,94984,94985],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[20,94987,94988],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[20,94990,94991],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[20,94993,94994],{},"3.如果没有维度形状为1，则会引发异常",[20,94996,94997],{},"也就是只有维度或者个数为1才可以进行广播操作",[20,94999,95000],{},[23,95001],{"alt":25,"src":95002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":25,"searchDepth":66,"depth":66,"links":95004},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94974,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95011,"title":95012,"body":95013,"description":204,"extension":205,"meta":95111,"navigation":207,"path":95112,"seo":95113,"stem":95114,"__hash__":95115},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95014,"toc":95109},[95015,95018,95021,95106],[10,95016,95012],{"id":95017},"_15比较掩码",[20,95019,95020],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[36,95022,95024],{"className":30478,"code":95023,"language":30480,"meta":25,"style":25},"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",[42,95025,95026,95072,95083,95097,95101],{"__ignoreMap":25},[45,95027,95028,95030,95032,95035,95037,95039,95041,95043,95045,95047,95049,95051,95053,95055,95057,95059,95061,95063,95065,95067,95069],{"class":47,"line":48},[45,95029,516],{"class":55},[45,95031,59],{"class":51},[45,95033,95034],{"class":55},"np.array([[",[45,95036,495],{"class":79},[45,95038,655],{"class":55},[45,95040,356],{"class":79},[45,95042,655],{"class":55},[45,95044,350],{"class":79},[45,95046,48130],{"class":55},[45,95048,749],{"class":79},[45,95050,655],{"class":55},[45,95052,775],{"class":79},[45,95054,655],{"class":55},[45,95056,800],{"class":79},[45,95058,48130],{"class":55},[45,95060,1002],{"class":79},[45,95062,655],{"class":55},[45,95064,1027],{"class":79},[45,95066,655],{"class":55},[45,95068,1052],{"class":79},[45,95070,95071],{"class":55},"]])\n",[45,95073,95074,95076,95078,95080],{"class":47,"line":66},[45,95075,516],{"class":55},[45,95077,1187],{"class":51},[45,95079,977],{"class":79},[45,95081,95082],{"class":337},"#结果是一个由True,False组成的数组\n",[45,95084,95085,95088,95090,95092,95094],{"class":47,"line":1331},[45,95086,95087],{"class":55},"a[a",[45,95089,1187],{"class":51},[45,95091,977],{"class":79},[45,95093,1217],{"class":55},[45,95095,95096],{"class":337},"#小于20的元素会存到这个数组中\n",[45,95098,95099],{"class":47,"line":1346},[45,95100,93664],{"class":337},[45,95102,95103],{"class":47,"line":1352},[45,95104,95105],{"class":337},"#array([ 1,  2,  3, 11, 12, 13])\n",[196,95107,95108],{},"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":25,"searchDepth":66,"depth":66,"links":95110},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95012,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95117,"title":95118,"body":95119,"description":204,"extension":205,"meta":95211,"navigation":207,"path":95212,"seo":95213,"stem":95214,"__hash__":95215},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95120,"toc":95209},[95121,95124,95127,95130,95133,95136,95201,95206],[10,95122,95118],{"id":95123},"_16魔法命令time",[20,95125,95126],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[20,95128,95129],{},"%:行模式",[20,95131,95132],{},"%%:单元格模式",[20,95134,95135],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[36,95137,95139],{"className":30478,"code":95138,"language":30480,"meta":25,"style":25},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[42,95140,95141,95146,95153,95158,95167,95180,95184,95192],{"__ignoreMap":25},[45,95142,95143],{"class":47,"line":48},[45,95144,95145],{"class":337},"#程序执行时间\n",[45,95147,95148,95150],{"class":47,"line":66},[45,95149,30492],{"class":51},[45,95151,95152],{"class":55}," time \n",[45,95154,95155],{"class":47,"line":1331},[45,95156,95157],{"class":337},"#获取时间\n",[45,95159,95160,95163,95165],{"class":47,"line":1346},[45,95161,95162],{"class":55},"start",[45,95164,59],{"class":51},[45,95166,32518],{"class":55},[45,95168,95169,95172,95175,95177],{"class":47,"line":1352},[45,95170,95171],{"class":55},"time.sleep(",[45,95173,95174],{"class":79},"0.4",[45,95176,706],{"class":55},[45,95178,95179],{"class":337},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[45,95181,95182],{"class":47,"line":1366},[45,95183,95157],{"class":337},[45,95185,95186,95188,95190],{"class":47,"line":1372},[45,95187,45901],{"class":55},[45,95189,59],{"class":51},[45,95191,32518],{"class":55},[45,95193,95194,95196,95198],{"class":47,"line":1463},[45,95195,45901],{"class":55},[45,95197,809],{"class":51},[45,95199,95200],{"class":55},"start\n",[20,95202,95203],{},[23,95204],{"alt":25,"src":95205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[196,95207,95208],{},"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":25,"searchDepth":66,"depth":66,"links":95210},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95118,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95217,"title":95218,"body":95219,"description":204,"extension":205,"meta":95254,"navigation":207,"path":95255,"seo":95256,"stem":95257,"__hash__":95258},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95220,"toc":95252},[95221,95224,95227,95230,95233,95236,95239,95242,95247],[10,95222,95218],{"id":95223},"_17魔法命令timeit",[20,95225,95226],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[20,95228,95229],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[20,95231,95232],{},"单元格模式：",[20,95234,95235],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[20,95237,95238],{},"初始化语句执行次数由轮数来决定",[20,95240,95241],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[20,95243,95244],{},[23,95245],{"alt":25,"src":95246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[20,95248,95249],{},[23,95250],{"alt":25,"src":95251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":25,"searchDepth":66,"depth":66,"links":95253},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95218,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95260,"title":95261,"body":95262,"description":204,"extension":205,"meta":95280,"navigation":207,"path":95281,"seo":95282,"stem":95283,"__hash__":95284},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95263,"toc":95278},[95264,95267,95270,95273],[10,95265,95261],{"id":95266},"_18魔法命令writefile和run",[20,95268,95269],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[20,95271,95272],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[20,95274,95275],{},[23,95276],{"alt":25,"src":95277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":25,"searchDepth":66,"depth":66,"links":95279},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95261,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95286,"title":95287,"body":95288,"description":204,"extension":205,"meta":95341,"navigation":207,"path":95342,"seo":95343,"stem":95344,"__hash__":95345},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95289,"toc":95339},[95290,95293,95296,95298,95301,95304,95309,95312,95315,95318,95321,95324,95327,95330,95333,95336],[10,95291,95287],{"id":95292},"_19魔法命令memit",[20,95294,95295],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[20,95297,24747],{},[20,95299,95300],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[20,95302,95303],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[20,95305,95306],{},[23,95307],{"alt":25,"src":95308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[20,95310,95311],{},"补充：",[20,95313,95314],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[20,95316,95317],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[20,95319,95320],{},"解决方法：",[20,95322,95323],{},"1.cmd",[20,95325,95326],{},"2.依次输入以下代码：",[20,95328,95329],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[20,95331,95332],{},"pip install --upgrade ipython",[20,95334,95335],{},"#升级 memory_profiler 和 setuptools",[20,95337,95338],{},"pip install --upgrade memory_profiler setuptools",{"title":25,"searchDepth":66,"depth":66,"links":95340},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95287,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95347,"title":95348,"body":95349,"description":204,"extension":205,"meta":96995,"navigation":207,"path":96996,"seo":96997,"stem":96998,"__hash__":96999},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95350,"toc":96965},[95351,95354,95358,95362,95423,95426,95431,95435,95440,95445,95450,95455,95458,95463,95467,95471,95504,95507,95510,95513,95565,95568,95604,95607,95649,95653,95674,95676,95713,95715,95720,95722,95727,95731,95734,95762,95766,95770,95823,95827,95919,95923,95927,95930,95935,95939,95964,95969,95973,95976,95979,95982,95985,95988,95991,95994,96006,96010,96014,96017,96049,96052,96075,96078,96104,96107,96133,96136,96170,96173,96235,96239,96242,96246,96249,96275,96278,96281,96286,96289,96358,96360,96365,96426,96429,96440,96446,96451,96455,96458,96471,96475,96490,96492,96515,96517,96543,96546,96549,96552,96600,96602,96607,96611,96615,96642,96646,96673,96676,96681,96686,96776,96780,96838,96843,96846,96849,96891,96895,96951,96956,96959,96962],[10,95352,95348],{"id":95353},"_2创建数组",[15,95355,95357],{"id":95356},"_21-array函数创建数组","2.1 array()函数创建数组",[249,95359,95361],{"id":95360},"_221-函数语句","2.2.1 函数语句",[36,95363,95365],{"className":30478,"code":95364,"language":30480,"meta":25,"style":25},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[42,95366,95367],{"__ignoreMap":25},[45,95368,95369,95372,95375,95377,95379,95381,95383,95385,95388,95390,95393,95395,95398,95400,95402,95404,95407,95409,95412,95414,95417,95419,95421],{"class":47,"line":48},[45,95370,95371],{"class":55},"numpy.array(",[45,95373,95374],{"class":79},"object",[45,95376,12584],{"class":55},[45,95378,93600],{"class":5366},[45,95380,13713],{"class":51},[45,95382,39033],{"class":79},[45,95384,12584],{"class":55},[45,95386,95387],{"class":5366},"copy",[45,95389,13713],{"class":51},[45,95391,95392],{"class":79}," True",[45,95394,12584],{"class":55},[45,95396,95397],{"class":5366},"order",[45,95399,13713],{"class":51},[45,95401,39033],{"class":79},[45,95403,12584],{"class":55},[45,95405,95406],{"class":5366},"subok",[45,95408,13713],{"class":51},[45,95410,95411],{"class":79}," False",[45,95413,12584],{"class":55},[45,95415,95416],{"class":5366},"ndmin",[45,95418,13713],{"class":51},[45,95420,4243],{"class":79},[45,95422,139],{"class":55},[20,95424,95425],{},"参数：",[20,95427,95428],{},[23,95429],{"alt":25,"src":95430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[249,95432,95434],{"id":95433},"_222-实例","2.2.2 实例",[20,95436,95437],{},[23,95438],{"alt":25,"src":95439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[20,95441,95442],{},[23,95443],{"alt":25,"src":95444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[20,95446,95447],{},[23,95448],{"alt":25,"src":95449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[20,95451,95452],{},[23,95453],{"alt":25,"src":95454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[20,95456,95457],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[20,95459,95460],{},[23,95461],{"alt":25,"src":95462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[15,95464,95466],{"id":95465},"_22-随机数创建数组","2.2 随机数创建数组",[249,95468,95470],{"id":95469},"_221-random语句","2.2.1 random语句",[36,95472,95474],{"className":30478,"code":95473,"language":30480,"meta":25,"style":25},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[42,95475,95476,95481,95486,95494,95499],{"__ignoreMap":25},[45,95477,95478],{"class":47,"line":48},[45,95479,95480],{"class":337},"#random.random()\n",[45,95482,95483],{"class":47,"line":66},[45,95484,95485],{"class":337},"#确定随机种子,就是每次运行结果是相同的\n",[45,95487,95488,95490,95492],{"class":47,"line":1331},[45,95489,94707],{"class":55},[45,95491,469],{"class":79},[45,95493,139],{"class":55},[45,95495,95496],{"class":47,"line":1346},[45,95497,95498],{"class":55},"np.random.random()\n",[45,95500,95501],{"class":47,"line":1352},[45,95502,95503],{"class":337},"#生成一个随机的数目\n",[20,95505,95506],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[20,95508,95509],{},"可以指定数组形状 size",[20,95511,95512],{},"①生成一维数组",[36,95514,95516],{"className":30478,"code":95515,"language":30480,"meta":25,"style":25},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[42,95517,95518,95523,95536,95541,95557],{"__ignoreMap":25},[45,95519,95520],{"class":47,"line":48},[45,95521,95522],{"class":337},"#random.random(size())\n",[45,95524,95525,95528,95530,95532,95534],{"class":47,"line":66},[45,95526,95527],{"class":55},"np.random.random(",[45,95529,31596],{"class":5366},[45,95531,59],{"class":51},[45,95533,596],{"class":79},[45,95535,139],{"class":55},[45,95537,95538],{"class":47,"line":1331},[45,95539,95540],{"class":337},"#生成一位的五个元素\n",[45,95542,95543,95545,95547,95549,95551,95553,95555],{"class":47,"line":1346},[45,95544,516],{"class":55},[45,95546,59],{"class":51},[45,95548,95527],{"class":55},[45,95550,31596],{"class":5366},[45,95552,59],{"class":51},[45,95554,570],{"class":79},[45,95556,139],{"class":55},[45,95558,95559,95562],{"class":47,"line":1352},[45,95560,95561],{"class":55},"a.shape ",[45,95563,95564],{"class":337},"#输出数组形状\n",[20,95566,95567],{},"②生成二维数组",[36,95569,95571],{"className":30478,"code":95570,"language":30480,"meta":25,"style":25},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[42,95572,95573,95577,95599],{"__ignoreMap":25},[45,95574,95575],{"class":47,"line":48},[45,95576,93401],{"class":337},[45,95578,95579,95581,95583,95585,95587,95589,95591,95593,95595,95597],{"class":47,"line":66},[45,95580,93406],{"class":55},[45,95582,59],{"class":51},[45,95584,95527],{"class":55},[45,95586,31596],{"class":5366},[45,95588,59],{"class":51},[45,95590,282],{"class":55},[45,95592,570],{"class":79},[45,95594,655],{"class":55},[45,95596,596],{"class":79},[45,95598,30597],{"class":55},[45,95600,95601],{"class":47,"line":1331},[45,95602,95603],{"class":337},"#生成四行五列的数组\n",[20,95605,95606],{},"③生成三维数组",[36,95608,95610],{"className":30478,"code":95609,"language":30480,"meta":25,"style":25},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[42,95611,95612,95617,95644],{"__ignoreMap":25},[45,95613,95614],{"class":47,"line":48},[45,95615,95616],{"class":337},"#三维数组\n",[45,95618,95619,95622,95624,95626,95628,95630,95632,95634,95636,95638,95640,95642],{"class":47,"line":66},[45,95620,95621],{"class":55},"aaa",[45,95623,59],{"class":51},[45,95625,95527],{"class":55},[45,95627,31596],{"class":5366},[45,95629,59],{"class":51},[45,95631,282],{"class":55},[45,95633,356],{"class":79},[45,95635,655],{"class":55},[45,95637,350],{"class":79},[45,95639,655],{"class":55},[45,95641,570],{"class":79},[45,95643,30597],{"class":55},[45,95645,95646],{"class":47,"line":1331},[45,95647,95648],{"class":55},"aaa.shape\n",[249,95650,95652],{"id":95651},"_222-randint语句","2.2.2 randint语句",[36,95654,95656],{"className":30478,"code":95655,"language":30480,"meta":25,"style":25},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[42,95657,95658,95663],{"__ignoreMap":25},[45,95659,95660],{"class":47,"line":48},[45,95661,95662],{"class":337},"#生成随机的整数 random.randint(low,high,size)\n",[45,95664,95665,95667,95669,95671],{"class":47,"line":66},[45,95666,93214],{"class":55},[45,95668,596],{"class":79},[45,95670,13863],{"class":55},[45,95672,95673],{"class":337},"#0~5中的随机一个数\n",[20,95675,95512],{},[36,95677,95679],{"className":30478,"code":95678,"language":30480,"meta":25,"style":25},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[42,95680,95681,95686,95708],{"__ignoreMap":25},[45,95682,95683],{"class":47,"line":48},[45,95684,95685],{"class":337},"#一维\n",[45,95687,95688,95690,95692,95694,95696,95698,95700,95702,95704,95706],{"class":47,"line":66},[45,95689,93214],{"class":55},[45,95691,495],{"class":79},[45,95693,655],{"class":55},[45,95695,749],{"class":79},[45,95697,655],{"class":55},[45,95699,31596],{"class":5366},[45,95701,59],{"class":51},[45,95703,282],{"class":55},[45,95705,723],{"class":79},[45,95707,30597],{"class":55},[45,95709,95710],{"class":47,"line":1331},[45,95711,95712],{"class":337},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[20,95714,95567],{},[20,95716,95717],{},[23,95718],{"alt":25,"src":95719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[20,95721,95606],{},[20,95723,95724],{},[23,95725],{"alt":25,"src":95726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[249,95728,95730],{"id":95729},"_222-rand语句","2.2.2 rand语句",[20,95732,95733],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[36,95735,95737],{"className":30478,"code":95736,"language":30480,"meta":25,"style":25},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[42,95738,95739,95752,95757],{"__ignoreMap":25},[45,95740,95741,95744,95746,95748,95750],{"class":47,"line":48},[45,95742,95743],{"class":55},"np.random.rand(",[45,95745,588],{"class":79},[45,95747,655],{"class":55},[45,95749,723],{"class":79},[45,95751,139],{"class":55},[45,95753,95754],{"class":47,"line":66},[45,95755,95756],{"class":337},"#第一个参数100：行数，表示有100个样本\n",[45,95758,95759],{"class":47,"line":1331},[45,95760,95761],{"class":337},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[15,95763,95765],{"id":95764},"_23-arange创建数组","2.3 arange()创建数组",[249,95767,95769],{"id":95768},"_231-函数语句","2.3.1 函数语句",[36,95771,95773],{"className":30478,"code":95772,"language":30480,"meta":25,"style":25},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[42,95774,95775,95789,95794,95799,95804,95809,95814,95819],{"__ignoreMap":25},[45,95776,95777,95780,95782,95784,95787],{"class":47,"line":48},[45,95778,95779],{"class":55},"numpy.arange([start,] stop[, step], ",[45,95781,93600],{"class":5366},[45,95783,59],{"class":51},[45,95785,95786],{"class":79},"None",[45,95788,139],{"class":55},[45,95790,95791],{"class":47,"line":66},[45,95792,95793],{"class":337},"#参数\n",[45,95795,95796],{"class":47,"line":1331},[45,95797,95798],{"class":62},"\"\"\"\n",[45,95800,95801],{"class":47,"line":1346},[45,95802,95803],{"class":62},"start:起始值，可选，默认从 0 开始。\n",[45,95805,95806],{"class":47,"line":1352},[45,95807,95808],{"class":62},"stop:结束值（不包含该值）。\n",[45,95810,95811],{"class":47,"line":1366},[45,95812,95813],{"class":62},"step:步长，可选，默认是 1。可以为浮点数。\n",[45,95815,95816],{"class":47,"line":1372},[45,95817,95818],{"class":62},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[45,95820,95821],{"class":47,"line":1463},[45,95822,95798],{"class":62},[249,95824,95826],{"id":95825},"_232-实例","2.3.2 实例",[36,95828,95830],{"className":30478,"code":95829,"language":30480,"meta":25,"style":25},"#创建一维数组\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",[42,95831,95832,95836,95860,95865,95870,95874,95897,95901,95905,95910,95915],{"__ignoreMap":25},[45,95833,95834],{"class":47,"line":48},[45,95835,93205],{"class":337},[45,95837,95838,95840,95842,95844,95846,95848,95850,95852,95854,95856,95858],{"class":47,"line":66},[45,95839,93102],{"class":55},[45,95841,495],{"class":79},[45,95843,655],{"class":55},[45,95845,1002],{"class":79},[45,95847,655],{"class":55},[45,95849,495],{"class":79},[45,95851,655],{"class":55},[45,95853,93600],{"class":5366},[45,95855,59],{"class":51},[45,95857,285],{"class":79},[45,95859,139],{"class":55},[45,95861,95862],{"class":47,"line":1331},[45,95863,95864],{"class":337},"#输出结果：\n",[45,95866,95867],{"class":47,"line":1346},[45,95868,95869],{"class":337},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[45,95871,95872],{"class":47,"line":1352},[45,95873,94047],{"class":337},[45,95875,95876,95879,95881,95883,95885,95888,95890,95892,95894],{"class":47,"line":1366},[45,95877,95878],{"class":55},"np.array([np.arange(",[45,95880,495],{"class":79},[45,95882,655],{"class":55},[45,95884,570],{"class":79},[45,95886,95887],{"class":55},"),np.arange(",[45,95889,570],{"class":79},[45,95891,655],{"class":55},[45,95893,646],{"class":79},[45,95895,95896],{"class":55},")])\n",[45,95898,95899],{"class":47,"line":1372},[45,95900,93664],{"class":337},[45,95902,95903],{"class":47,"line":1463},[45,95904,95798],{"class":62},[45,95906,95907],{"class":47,"line":1469},[45,95908,95909],{"class":62},"array([[1, 2, 3],\n",[45,95911,95912],{"class":47,"line":1481},[45,95913,95914],{"class":62},"       [4, 5, 6]])\n",[45,95916,95917],{"class":47,"line":1763},[45,95918,95798],{"class":62},[15,95920,95922],{"id":95921},"_24-生态分布","2.4 生态分布",[249,95924,95926],{"id":95925},"_241-标准正态分布","2.4.1 标准正态分布",[20,95928,95929],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[20,95931,95932],{},[23,95933],{"alt":25,"src":95934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[249,95936,95938],{"id":95937},"_242-常规正态分布","2.4.2 常规正态分布",[36,95940,95942],{"className":30478,"code":95941,"language":30480,"meta":25,"style":25},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[42,95943,95944,95949,95954,95959],{"__ignoreMap":25},[45,95945,95946],{"class":47,"line":48},[45,95947,95948],{"class":55},"random.normal(loc,scale,size)也可以生成正态分布\n",[45,95950,95951],{"class":47,"line":66},[45,95952,95953],{"class":337},"#loc:期望\n",[45,95955,95956],{"class":47,"line":1331},[45,95957,95958],{"class":337},"#scale:方差\n",[45,95960,95961],{"class":47,"line":1346},[45,95962,95963],{"class":337},"#size:用于确定是几维的数列\n",[20,95965,95966],{},[23,95967],{"alt":25,"src":95968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[15,95970,95972],{"id":95971},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[20,95974,95975],{},"ndim:秩，维度个数",[20,95977,95978],{},"size:数组元素的个数",[20,95980,95981],{},"shape:数组的形状",[20,95983,95984],{},"dtype:数组元素的类型",[20,95986,95987],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[20,95989,95990],{},"他们都是属性，通过数组.属性的形式来确定",[20,95992,95993],{},"如果需要输出多个可以通过以下方式：",[36,95995,95997],{"className":30478,"code":95996,"language":30480,"meta":25,"style":25},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[42,95998,95999],{"__ignoreMap":25},[45,96000,96001,96003],{"class":47,"line":48},[45,96002,30515],{"class":79},[45,96004,96005],{"class":55},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[15,96007,96009],{"id":96008},"_26-其他方式创建数组","2.6 其他方式创建数组",[249,96011,96013],{"id":96012},"_261-zeros创建数组","2.6.1 zeros()创建数组",[20,96015,96016],{},"①创建一维数组",[36,96018,96020],{"className":30478,"code":96019,"language":30480,"meta":25,"style":25},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[42,96021,96022,96031,96035,96040,96045],{"__ignoreMap":25},[45,96023,96024,96027,96029],{"class":47,"line":48},[45,96025,96026],{"class":55},"np.zeros(",[45,96028,723],{"class":79},[45,96030,139],{"class":55},[45,96032,96033],{"class":47,"line":66},[45,96034,95798],{"class":62},[45,96036,96037],{"class":47,"line":1331},[45,96038,96039],{"class":62},"输出结果：\n",[45,96041,96042],{"class":47,"line":1346},[45,96043,96044],{"class":62},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[45,96046,96047],{"class":47,"line":1352},[45,96048,95798],{"class":62},[20,96050,96051],{},"上方代码等价于：",[36,96053,96055],{"className":30478,"code":96054,"language":30480,"meta":25,"style":25},"np.zeros(shape=(10))#创建10个元素的0数组\n",[42,96056,96057],{"__ignoreMap":25},[45,96058,96059,96061,96064,96066,96068,96070,96072],{"class":47,"line":48},[45,96060,96026],{"class":55},[45,96062,96063],{"class":5366},"shape",[45,96065,59],{"class":51},[45,96067,282],{"class":55},[45,96069,723],{"class":79},[45,96071,82871],{"class":55},[45,96073,96074],{"class":337},"#创建10个元素的0数组\n",[20,96076,96077],{},"也可以指定类型",[36,96079,96081],{"className":30478,"code":96080,"language":30480,"meta":25,"style":25},"#指定类型\nnp.zeros(5,dtype=int)\n",[42,96082,96083,96088],{"__ignoreMap":25},[45,96084,96085],{"class":47,"line":48},[45,96086,96087],{"class":337},"#指定类型\n",[45,96089,96090,96092,96094,96096,96098,96100,96102],{"class":47,"line":66},[45,96091,96026],{"class":55},[45,96093,596],{"class":79},[45,96095,655],{"class":55},[45,96097,93600],{"class":5366},[45,96099,59],{"class":51},[45,96101,285],{"class":79},[45,96103,139],{"class":55},[20,96105,96106],{},"②创建二维数组",[36,96108,96110],{"className":30478,"code":96109,"language":30480,"meta":25,"style":25},"np.zeros((3,4),dtype=int)\n",[42,96111,96112],{"__ignoreMap":25},[45,96113,96114,96117,96119,96121,96123,96125,96127,96129,96131],{"class":47,"line":48},[45,96115,96116],{"class":55},"np.zeros((",[45,96118,350],{"class":79},[45,96120,655],{"class":55},[45,96122,570],{"class":79},[45,96124,42356],{"class":55},[45,96126,93600],{"class":5366},[45,96128,59],{"class":51},[45,96130,285],{"class":79},[45,96132,139],{"class":55},[20,96134,96135],{},"③创建三维数组",[36,96137,96139],{"className":30478,"code":96138,"language":30480,"meta":25,"style":25},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[42,96140,96141,96146],{"__ignoreMap":25},[45,96142,96143],{"class":47,"line":48},[45,96144,96145],{"class":337},"#创建三维数组\n",[45,96147,96148,96150,96152,96154,96156,96158,96160,96162,96164,96166,96168],{"class":47,"line":66},[45,96149,96116],{"class":55},[45,96151,350],{"class":79},[45,96153,655],{"class":55},[45,96155,570],{"class":79},[45,96157,655],{"class":55},[45,96159,596],{"class":79},[45,96161,42356],{"class":55},[45,96163,93600],{"class":5366},[45,96165,59],{"class":51},[45,96167,285],{"class":79},[45,96169,139],{"class":55},[20,96171,96172],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[36,96174,96176],{"className":30478,"code":96175,"language":30480,"meta":25,"style":25},"#使用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",[42,96177,96178,96183,96198,96203,96208,96230],{"__ignoreMap":25},[45,96179,96180],{"class":47,"line":48},[45,96181,96182],{"class":337},"#使用zeros_like将创建的一维数组变成全0的数组\n",[45,96184,96185,96187,96189,96191,96193,96195],{"class":47,"line":66},[45,96186,516],{"class":55},[45,96188,59],{"class":51},[45,96190,93102],{"class":55},[45,96192,570],{"class":79},[45,96194,706],{"class":55},[45,96196,96197],{"class":337},"#这个得到的结果：一维数组0，1，2，3\n",[45,96199,96200],{"class":47,"line":1331},[45,96201,96202],{"class":55},"np.zeros_like(a)\n",[45,96204,96205],{"class":47,"line":1346},[45,96206,96207],{"class":337},"#使用zeros_like将创建的二维数组变成全0的数组\n",[45,96209,96210,96212,96214,96216,96218,96220,96222,96224,96226,96228],{"class":47,"line":1352},[45,96211,93406],{"class":55},[45,96213,59],{"class":51},[45,96215,95527],{"class":55},[45,96217,31596],{"class":5366},[45,96219,59],{"class":51},[45,96221,282],{"class":55},[45,96223,570],{"class":79},[45,96225,655],{"class":55},[45,96227,596],{"class":79},[45,96229,30597],{"class":55},[45,96231,96232],{"class":47,"line":1366},[45,96233,96234],{"class":55},"np.zeros_like(aa)\n",[249,96236,96238],{"id":96237},"_262-ones创建数组","2.6.2 ones()创建数组",[20,96240,96241],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[249,96243,96245],{"id":96244},"_263-empty创建数组","2.6.3 empty()创建数组",[20,96247,96248],{},"①empty()用法",[36,96250,96252],{"className":30478,"code":96251,"language":30480,"meta":25,"style":25},"numpy.empty(shape,dtype=float,order='c')\n",[42,96253,96254],{"__ignoreMap":25},[45,96255,96256,96259,96261,96263,96265,96267,96269,96271,96273],{"class":47,"line":48},[45,96257,96258],{"class":55},"numpy.empty(shape,",[45,96260,93600],{"class":5366},[45,96262,59],{"class":51},[45,96264,320],{"class":79},[45,96266,655],{"class":55},[45,96268,95397],{"class":5366},[45,96270,59],{"class":51},[45,96272,76128],{"class":62},[45,96274,139],{"class":55},[20,96276,96277],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[20,96279,96280],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[20,96282,96283],{},[23,96284],{"alt":25,"src":96285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[20,96287,96288],{},"②empty()用法",[36,96290,96292],{"className":30478,"code":96291,"language":30480,"meta":25,"style":25},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[42,96293,96294,96315,96327,96348,96353],{"__ignoreMap":25},[45,96295,96296,96298,96300,96303,96305,96307,96309,96311,96313],{"class":47,"line":48},[45,96297,1122],{"class":55},[45,96299,59],{"class":51},[45,96301,96302],{"class":55},"np.empty(",[45,96304,723],{"class":79},[45,96306,655],{"class":55},[45,96308,93600],{"class":5366},[45,96310,59],{"class":51},[45,96312,285],{"class":79},[45,96314,139],{"class":55},[45,96316,96317,96319,96321,96323,96325],{"class":47,"line":66},[45,96318,1097],{"class":55},[45,96320,59],{"class":51},[45,96322,93102],{"class":55},[45,96324,596],{"class":79},[45,96326,139],{"class":55},[45,96328,96329,96332,96334,96337,96339,96341,96344,96346],{"class":47,"line":1331},[45,96330,96331],{"class":55},"np.add(",[45,96333,356],{"class":79},[45,96335,96336],{"class":55},",x,",[45,96338,93154],{"class":5366},[45,96340,59],{"class":51},[45,96342,96343],{"class":55},"y[:",[45,96345,596],{"class":79},[45,96347,4807],{"class":55},[45,96349,96350],{"class":47,"line":1346},[45,96351,96352],{"class":337},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[45,96354,96355],{"class":47,"line":1352},[45,96356,96357],{"class":55},"y\n",[20,96359,11663],{},[20,96361,96362],{},[23,96363],{"alt":25,"src":96364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[36,96366,96368],{"className":30478,"code":96367,"language":30480,"meta":25,"style":25},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[42,96369,96370,96386,96406,96421],{"__ignoreMap":25},[45,96371,96372,96374,96376,96378,96380,96382,96384],{"class":47,"line":48},[45,96373,1097],{"class":55},[45,96375,59],{"class":51},[45,96377,93102],{"class":55},[45,96379,495],{"class":79},[45,96381,655],{"class":55},[45,96383,621],{"class":79},[45,96385,139],{"class":55},[45,96387,96388,96390,96392,96394,96396,96398,96400,96402,96404],{"class":47,"line":66},[45,96389,1122],{"class":55},[45,96391,59],{"class":51},[45,96393,96302],{"class":55},[45,96395,596],{"class":79},[45,96397,655],{"class":55},[45,96399,93600],{"class":5366},[45,96401,59],{"class":51},[45,96403,285],{"class":79},[45,96405,139],{"class":55},[45,96407,96408,96411,96413,96415,96417,96419],{"class":47,"line":1331},[45,96409,96410],{"class":55},"np.add(x,",[45,96412,356],{"class":79},[45,96414,655],{"class":55},[45,96416,93154],{"class":5366},[45,96418,59],{"class":51},[45,96420,93549],{"class":55},[45,96422,96423],{"class":47,"line":1346},[45,96424,96425],{"class":337},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[20,96427,96428],{},"③empty_like()",[20,96430,96431],{},[427,96432,96433,96434,96439],{},"创建一个",[427,96435,96436],{},[427,96437,96438],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[20,96441,96442,96445],{},[42,96443,96444],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[20,96447,96448],{},[23,96449],{"alt":25,"src":96450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[249,96452,96454],{"id":96453},"_264-用法","2.6.4 ？？用法",[20,96456,96457],{},"当想查看一个函数的参数时，可以通过？？来实现",[36,96459,96461],{"className":30478,"code":96460,"language":30480,"meta":25,"style":25},"np.full??\n",[42,96462,96463],{"__ignoreMap":25},[45,96464,96465,96468],{"class":47,"line":48},[45,96466,96467],{"class":55},"np.full",[45,96469,96470],{"class":77503},"??\n",[249,96472,96474],{"id":96473},"_265-full创建数组","2.6.5 full()创建数组",[36,96476,96478],{"className":30478,"code":96477,"language":30480,"meta":25,"style":25},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[42,96479,96480,96485],{"__ignoreMap":25},[45,96481,96482],{"class":47,"line":48},[45,96483,96484],{"class":55},"full(shape,fill_value)\n",[45,96486,96487],{"class":47,"line":66},[45,96488,96489],{"class":55},"创建全为某个指定值的数组\n",[20,96491,94630],{},[36,96493,96495],{"className":30478,"code":96494,"language":30480,"meta":25,"style":25},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[42,96496,96497,96502],{"__ignoreMap":25},[45,96498,96499],{"class":47,"line":48},[45,96500,96501],{"class":337},"#创建一个一维数组,以20进行填充\n",[45,96503,96504,96507,96509,96511,96513],{"class":47,"line":66},[45,96505,96506],{"class":55},"np.full(",[45,96508,723],{"class":79},[45,96510,655],{"class":55},[45,96512,977],{"class":79},[45,96514,139],{"class":55},[20,96516,93391],{},[36,96518,96520],{"className":30478,"code":96519,"language":30480,"meta":25,"style":25},"#创建二维数组\nnp.full((3,5),11)\n",[42,96521,96522,96526],{"__ignoreMap":25},[45,96523,96524],{"class":47,"line":48},[45,96525,94047],{"class":337},[45,96527,96528,96531,96533,96535,96537,96539,96541],{"class":47,"line":66},[45,96529,96530],{"class":55},"np.full((",[45,96532,350],{"class":79},[45,96534,655],{"class":55},[45,96536,596],{"class":79},[45,96538,42356],{"class":55},[45,96540,749],{"class":79},[45,96542,139],{"class":55},[20,96544,96545],{},"③full_like用法",[20,96547,96548],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[20,96550,96551],{},"这里是指定填充而已",[36,96553,96555],{"className":30478,"code":96554,"language":30480,"meta":25,"style":25},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[42,96556,96557,96562,96586,96591],{"__ignoreMap":25},[45,96558,96559],{"class":47,"line":48},[45,96560,96561],{"class":337},"#创建一个指定形状数组\n",[45,96563,96564,96566,96568,96570,96572,96574,96576,96578,96580,96582,96584],{"class":47,"line":66},[45,96565,516],{"class":55},[45,96567,59],{"class":51},[45,96569,93102],{"class":55},[45,96571,495],{"class":79},[45,96573,655],{"class":55},[45,96575,602],{"class":79},[45,96577,93107],{"class":55},[45,96579,570],{"class":79},[45,96581,655],{"class":55},[45,96583,697],{"class":79},[45,96585,139],{"class":55},[45,96587,96588],{"class":47,"line":1331},[45,96589,96590],{"class":337},"#进行指定填充\n",[45,96592,96593,96596,96598],{"class":47,"line":1346},[45,96594,96595],{"class":55},"np.full_like(a,",[45,96597,723],{"class":79},[45,96599,139],{"class":55},[20,96601,11663],{},[20,96603,96604],{},[23,96605],{"alt":25,"src":96606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[249,96608,96610],{"id":96609},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22147,96612,96614],{"id":96613},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[36,96616,96618],{"className":30478,"code":96617,"language":30480,"meta":25,"style":25},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[42,96619,96620,96637],{"__ignoreMap":25},[45,96621,96622,96625,96627,96629,96631,96633,96635],{"class":47,"line":48},[45,96623,96624],{"class":55},"np.eye(",[45,96626,570],{"class":79},[45,96628,655],{"class":55},[45,96630,93600],{"class":5366},[45,96632,59],{"class":51},[45,96634,285],{"class":79},[45,96636,139],{"class":55},[45,96638,96639],{"class":47,"line":66},[45,96640,96641],{"class":337},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22147,96643,96645],{"id":96644},"_2662-法2identity","2.6.6.2 法2：identity()",[36,96647,96649],{"className":30478,"code":96648,"language":30480,"meta":25,"style":25},"#identity()\nnp.identity(5,dtype=int)\n",[42,96650,96651,96656],{"__ignoreMap":25},[45,96652,96653],{"class":47,"line":48},[45,96654,96655],{"class":337},"#identity()\n",[45,96657,96658,96661,96663,96665,96667,96669,96671],{"class":47,"line":66},[45,96659,96660],{"class":55},"np.identity(",[45,96662,596],{"class":79},[45,96664,655],{"class":55},[45,96666,93600],{"class":5366},[45,96668,59],{"class":51},[45,96670,285],{"class":79},[45,96672,139],{"class":55},[20,96674,96675],{},"两个函数是有区别的",[20,96677,96678],{},[23,96679],{"alt":25,"src":96680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[20,96682,96683],{},[23,96684],{"alt":25,"src":96685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[36,96687,96689],{"className":30478,"code":96688,"language":30480,"meta":25,"style":25},"# 创建一个 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",[42,96690,96691,96696,96708,96713,96718,96723,96728,96732,96737,96757,96761,96766,96771],{"__ignoreMap":25},[45,96692,96693],{"class":47,"line":48},[45,96694,96695],{"class":337},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[45,96697,96698,96700,96702,96704,96706],{"class":47,"line":66},[45,96699,96624],{"class":55},[45,96701,350],{"class":79},[45,96703,12584],{"class":55},[45,96705,570],{"class":79},[45,96707,139],{"class":55},[45,96709,96710],{"class":47,"line":1331},[45,96711,96712],{"class":337},"# 输出:\n",[45,96714,96715],{"class":47,"line":1346},[45,96716,96717],{"class":337},"# [[1. 0. 0. 0.]\n",[45,96719,96720],{"class":47,"line":1352},[45,96721,96722],{"class":337},"#  [0. 1. 0. 0.]\n",[45,96724,96725],{"class":47,"line":1366},[45,96726,96727],{"class":337},"#  [0. 0. 1. 0.]]\n",[45,96729,96730],{"class":47,"line":1372},[45,96731,2550],{"emptyLinePlaceholder":207},[45,96733,96734],{"class":47,"line":1463},[45,96735,96736],{"class":337},"# 对角线向上偏移1\n",[45,96738,96739,96741,96743,96745,96747,96749,96751,96753,96755],{"class":47,"line":1469},[45,96740,96624],{"class":55},[45,96742,350],{"class":79},[45,96744,12584],{"class":55},[45,96746,570],{"class":79},[45,96748,12584],{"class":55},[45,96750,770],{"class":5366},[45,96752,59],{"class":51},[45,96754,495],{"class":79},[45,96756,139],{"class":55},[45,96758,96759],{"class":47,"line":1481},[45,96760,96712],{"class":337},[45,96762,96763],{"class":47,"line":1763},[45,96764,96765],{"class":337},"# [[0. 1. 0. 0.]\n",[45,96767,96768],{"class":47,"line":1768},[45,96769,96770],{"class":337},"#  [0. 0. 1. 0.]\n",[45,96772,96773],{"class":47,"line":1774},[45,96774,96775],{"class":337},"#  [0. 0. 0. 1.]]\n",[249,96777,96779],{"id":96778},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[36,96781,96783],{"className":30478,"code":96782,"language":30480,"meta":25,"style":25},"#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",[42,96784,96785,96790,96794,96799,96804,96809,96814,96819,96824,96829,96834],{"__ignoreMap":25},[45,96786,96787],{"class":47,"line":48},[45,96788,96789],{"class":337},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[45,96791,96792],{"class":47,"line":66},[45,96793,95798],{"class":62},[45,96795,96796],{"class":47,"line":1331},[45,96797,96798],{"class":62},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[45,96800,96801],{"class":47,"line":1346},[45,96802,96803],{"class":62},"参数介绍：\n",[45,96805,96806],{"class":47,"line":1352},[45,96807,96808],{"class":62},"start：序列的起始值\n",[45,96810,96811],{"class":47,"line":1366},[45,96812,96813],{"class":62},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[45,96815,96816],{"class":47,"line":1372},[45,96817,96818],{"class":62},"num：要生长的等步长的样本数量，默认为50\n",[45,96820,96821],{"class":47,"line":1463},[45,96822,96823],{"class":62},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[45,96825,96826],{"class":47,"line":1469},[45,96827,96828],{"class":62},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[45,96830,96831],{"class":47,"line":1481},[45,96832,96833],{"class":62},"dtype：ndarry的数据类型\n",[45,96835,96836],{"class":47,"line":1763},[45,96837,95798],{"class":62},[20,96839,96840],{},[23,96841],{"alt":25,"src":96842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[20,96844,96845],{},"这里num=是可以省略的",[20,96847,96848],{},"也就是下方两行代码结果是一模一样的",[36,96850,96852],{"className":30478,"code":96851,"language":30480,"meta":25,"style":25},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[42,96853,96854,96871],{"__ignoreMap":25},[45,96855,96856,96859,96861,96863,96865,96867,96869],{"class":47,"line":48},[45,96857,96858],{"class":55},"np.linspace(",[45,96860,495],{"class":79},[45,96862,655],{"class":55},[45,96864,596],{"class":79},[45,96866,655],{"class":55},[45,96868,596],{"class":79},[45,96870,139],{"class":55},[45,96872,96873,96875,96877,96879,96881,96883,96885,96887,96889],{"class":47,"line":66},[45,96874,96858],{"class":55},[45,96876,495],{"class":79},[45,96878,655],{"class":55},[45,96880,596],{"class":79},[45,96882,655],{"class":55},[45,96884,1816],{"class":5366},[45,96886,59],{"class":51},[45,96888,596],{"class":79},[45,96890,139],{"class":55},[249,96892,96894],{"id":96893},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[36,96896,96898],{"className":30478,"code":96897,"language":30480,"meta":25,"style":25},"#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",[42,96899,96900,96905,96909,96914,96919,96924,96929,96933,96938,96943,96947],{"__ignoreMap":25},[45,96901,96902],{"class":47,"line":48},[45,96903,96904],{"class":337},"#logspace函数用于创建一个等比数列，格式如下：\n",[45,96906,96907],{"class":47,"line":66},[45,96908,95798],{"class":62},[45,96910,96911],{"class":47,"line":1331},[45,96912,96913],{"class":62},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[45,96915,96916],{"class":47,"line":1346},[45,96917,96918],{"class":62},"参数为：\n",[45,96920,96921],{"class":47,"line":1352},[45,96922,96923],{"class":62},"start:序列的起始位置为：base**start\n",[45,96925,96926],{"class":47,"line":1366},[45,96927,96928],{"class":62},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[45,96930,96931],{"class":47,"line":1372},[45,96932,96818],{"class":62},[45,96934,96935],{"class":47,"line":1463},[45,96936,96937],{"class":62},"endpoint：是否包含 stop 这个值，默认是 True\n",[45,96939,96940],{"class":47,"line":1469},[45,96941,96942],{"class":62},"base：对数的底数，默认是 10（常见对数）\n",[45,96944,96945],{"class":47,"line":1481},[45,96946,96833],{"class":62},[45,96948,96949],{"class":47,"line":1763},[45,96950,95798],{"class":62},[20,96952,96953],{},[23,96954],{"alt":25,"src":96955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[20,96957,96958],{},"logspace()函数中的num参数也是可以不写num=的",[20,96960,96961],{},"endpoint是不可以省略的",[196,96963,96964],{},"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":25,"searchDepth":66,"depth":66,"links":96966},[96967,96971,96976,96980,96984,96985],{"id":95356,"depth":66,"text":95357,"children":96968},[96969,96970],{"id":95360,"depth":1331,"text":95361},{"id":95433,"depth":1331,"text":95434},{"id":95465,"depth":66,"text":95466,"children":96972},[96973,96974,96975],{"id":95469,"depth":1331,"text":95470},{"id":95651,"depth":1331,"text":95652},{"id":95729,"depth":1331,"text":95730},{"id":95764,"depth":66,"text":95765,"children":96977},[96978,96979],{"id":95768,"depth":1331,"text":95769},{"id":95825,"depth":1331,"text":95826},{"id":95921,"depth":66,"text":95922,"children":96981},[96982,96983],{"id":95925,"depth":1331,"text":95926},{"id":95937,"depth":1331,"text":95938},{"id":95971,"depth":66,"text":95972},{"id":96008,"depth":66,"text":96009,"children":96986},[96987,96988,96989,96990,96991,96992,96993,96994],{"id":96012,"depth":1331,"text":96013},{"id":96237,"depth":1331,"text":96238},{"id":96244,"depth":1331,"text":96245},{"id":96453,"depth":1331,"text":96454},{"id":96473,"depth":1331,"text":96474},{"id":96609,"depth":1331,"text":96610},{"id":96778,"depth":1331,"text":96779},{"id":96893,"depth":1331,"text":96894},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95348,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97001,"title":97002,"body":97003,"description":204,"extension":205,"meta":97096,"navigation":207,"path":97097,"seo":97098,"stem":97099,"__hash__":97100},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97004,"toc":97094},[97005,97008,97011,97014,97017,97020,97023,97026,97029,97032,97035,97038,97040,97043,97046,97051,97054,97057,97091],[10,97006,97002],{"id":97007},"_20魔法命令mprun",[20,97009,97010],{},"逐行分析数据内存的使用情况",[20,97012,97013],{},"语法格式：",[20,97015,97016],{},"%mprun -f 模块名.函数名 模块名.函数名()",[20,97018,97019],{},"分析结果列如下：",[20,97021,97022],{},"Line行号",[20,97024,97025],{},"Mem usage内存使用大小",[20,97027,97028],{},"increment内存增量",[20,97030,97031],{},"Line content代码内容",[20,97033,97034],{},"补充说明：",[20,97036,97037],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[20,97039,95303],{},[20,97041,97042],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[20,97044,97045],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[20,97047,97048],{},[23,97049],{"alt":25,"src":97050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[20,97052,97053],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[20,97055,97056],{},"这时候需要重新加载模块",[36,97058,97060],{"className":30478,"code":97059,"language":30480,"meta":25,"style":25},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[42,97061,97062,97067,97074,97079],{"__ignoreMap":25},[45,97063,97064],{"class":47,"line":48},[45,97065,97066],{"class":337},"#重新加载模块\n",[45,97068,97069,97071],{"class":47,"line":66},[45,97070,30492],{"class":51},[45,97072,97073],{"class":55}," importlib\n",[45,97075,97076],{"class":47,"line":1331},[45,97077,97078],{"class":55},"importlib.reload(mprun_test)\n",[45,97080,97081,97083,97086,97088],{"class":47,"line":1346},[45,97082,605],{"class":51},[45,97084,97085],{"class":55},"mprun ",[45,97087,809],{"class":51},[45,97089,97090],{"class":55},"f mprun_test.fun_test mprun_test.fun_test()\n",[196,97092,97093],{},"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":25,"searchDepth":66,"depth":66,"links":97095},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97002,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97102,"title":97103,"body":97104,"description":204,"extension":205,"meta":97121,"navigation":207,"path":97122,"seo":97123,"stem":97124,"__hash__":97125},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97105,"toc":97119},[97106,97109,97114],[10,97107,97103],{"id":97108},"_3一维数组的索引和切片",[20,97110,97111],{},[23,97112],{"alt":25,"src":97113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[20,97115,97116],{},[23,97117],{"alt":25,"src":97118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":25,"searchDepth":66,"depth":66,"links":97120},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97103,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97127,"title":97128,"body":97129,"description":204,"extension":205,"meta":97612,"navigation":207,"path":97613,"seo":97614,"stem":97615,"__hash__":97616},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97130,"toc":97610},[97131,97134,97137,97142,97175,97178,97216,97219,97253,97256,97361,97364,97401,97404,97505,97508,97559,97562,97604,97607],[10,97132,97128],{"id":97133},"_4二维数组的索引与切片",[20,97135,97136],{},"①获取指定单个元素",[20,97138,97139],{},[23,97140],{"alt":25,"src":97141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[36,97143,97145],{"className":30478,"code":97144,"language":30480,"meta":25,"style":25},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[42,97146,97147,97152,97157,97162],{"__ignoreMap":25},[45,97148,97149],{"class":47,"line":48},[45,97150,97151],{"class":337},"#获取元素9\n",[45,97153,97154],{"class":47,"line":66},[45,97155,97156],{"class":337},"#先获取所在行，再获取所在列\n",[45,97158,97159],{"class":47,"line":1331},[45,97160,97161],{"class":337},"#数组[行索引号，列索引号]\n",[45,97163,97164,97167,97169,97171,97173],{"class":47,"line":1346},[45,97165,97166],{"class":55},"a[",[45,97168,495],{"class":79},[45,97170,655],{"class":55},[45,97172,356],{"class":79},[45,97174,33346],{"class":55},[20,97176,97177],{},"②获取整行元素",[36,97179,97181],{"className":30478,"code":97180,"language":30480,"meta":25,"style":25},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[42,97182,97183,97188,97193,97201,97206],{"__ignoreMap":25},[45,97184,97185],{"class":47,"line":48},[45,97186,97187],{"class":337},"#获取整行 数组[行索引号]\n",[45,97189,97190],{"class":47,"line":66},[45,97191,97192],{"class":337},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[45,97194,97195,97197,97199],{"class":47,"line":1331},[45,97196,97166],{"class":55},[45,97198,356],{"class":79},[45,97200,33346],{"class":55},[45,97202,97203],{"class":47,"line":1346},[45,97204,97205],{"class":337},"#也可以负索引获取一行\n",[45,97207,97208,97210,97212,97214],{"class":47,"line":1352},[45,97209,97166],{"class":55},[45,97211,809],{"class":51},[45,97213,495],{"class":79},[45,97215,33346],{"class":55},[20,97217,97218],{},"③获取整列元素",[36,97220,97222],{"className":30478,"code":97221,"language":30480,"meta":25,"style":25},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[42,97223,97224,97229,97238,97243],{"__ignoreMap":25},[45,97225,97226],{"class":47,"line":48},[45,97227,97228],{"class":337},"#获取整列 数组名[:,列索引]\n",[45,97230,97231,97234,97236],{"class":47,"line":66},[45,97232,97233],{"class":55},"a[:,",[45,97235,356],{"class":79},[45,97237,33346],{"class":55},[45,97239,97240],{"class":47,"line":1331},[45,97241,97242],{"class":337},"#也可以负索引获取一列\n",[45,97244,97245,97247,97249,97251],{"class":47,"line":1346},[45,97246,97233],{"class":55},[45,97248,809],{"class":51},[45,97250,495],{"class":79},[45,97252,33346],{"class":55},[20,97254,97255],{},"④部分行部分列的元素",[36,97257,97259],{"className":30478,"code":97258,"language":30480,"meta":25,"style":25},"#部分行部分列 数组名[行切片，列切片]\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",[42,97260,97261,97266,97276,97280,97284,97289,97294,97298,97310,97314,97318,97323,97328,97333,97338,97342,97347],{"__ignoreMap":25},[45,97262,97263],{"class":47,"line":48},[45,97264,97265],{"class":337},"#部分行部分列 数组名[行切片，列切片]\n",[45,97267,97268,97271,97273],{"class":47,"line":66},[45,97269,97270],{"class":55},"a[:",[45,97272,356],{"class":79},[45,97274,97275],{"class":55},",:]\n",[45,97277,97278],{"class":47,"line":1331},[45,97279,93664],{"class":337},[45,97281,97282],{"class":47,"line":1346},[45,97283,94028],{"class":62},[45,97285,97286],{"class":47,"line":1352},[45,97287,97288],{"class":62},"array([[ 1,  2,  3,  4,  5,  6],\n",[45,97290,97291],{"class":47,"line":1366},[45,97292,97293],{"class":62},"       [ 7,  8,  9, 10, 11, 12]])\n",[45,97295,97296],{"class":47,"line":1372},[45,97297,94028],{"class":62},[45,97299,97300,97302,97304,97306,97308],{"class":47,"line":1463},[45,97301,97233],{"class":55},[45,97303,495],{"class":79},[45,97305,1136],{"class":55},[45,97307,570],{"class":79},[45,97309,33346],{"class":55},[45,97311,97312],{"class":47,"line":1469},[45,97313,93664],{"class":337},[45,97315,97316],{"class":47,"line":1481},[45,97317,94028],{"class":62},[45,97319,97320],{"class":47,"line":1763},[45,97321,97322],{"class":62},"array([[ 2,  3,  4],\n",[45,97324,97325],{"class":47,"line":1768},[45,97326,97327],{"class":62},"       [ 8,  9, 10],\n",[45,97329,97330],{"class":47,"line":1774},[45,97331,97332],{"class":62},"       [14, 15, 16],\n",[45,97334,97335],{"class":47,"line":1779},[45,97336,97337],{"class":62},"       [20, 21, 22]])\n",[45,97339,97340],{"class":47,"line":1793},[45,97341,94028],{"class":62},[45,97343,97344],{"class":47,"line":1798},[45,97345,97346],{"class":337},"#对列行同时进行切片，使用了step参数\n",[45,97348,97349,97352,97354,97357,97359],{"class":47,"line":1804},[45,97350,97351],{"class":55},"a[::",[45,97353,356],{"class":79},[45,97355,97356],{"class":55},",::",[45,97358,356],{"class":79},[45,97360,33346],{"class":55},[20,97362,97363],{},"⑤同时获取两个元素",[36,97365,97367],{"className":30478,"code":97366,"language":30480,"meta":25,"style":25},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[42,97368,97369,97374,97379],{"__ignoreMap":25},[45,97370,97371],{"class":47,"line":48},[45,97372,97373],{"class":337},"#同时获取第三行第二列，第四行第一列\n",[45,97375,97376],{"class":47,"line":66},[45,97377,97378],{"class":337},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[45,97380,97381,97384,97386,97388,97390,97392,97394,97396,97398],{"class":47,"line":1331},[45,97382,97383],{"class":55},"a[(",[45,97385,356],{"class":79},[45,97387,655],{"class":55},[45,97389,350],{"class":79},[45,97391,42347],{"class":55},[45,97393,495],{"class":79},[45,97395,655],{"class":55},[45,97397,469],{"class":79},[45,97399,97400],{"class":55},")]\n",[20,97402,97403],{},"⑥切片，对行进行反向获取",[36,97405,97407],{"className":30478,"code":97406,"language":30480,"meta":25,"style":25},"#切片 对所有行进行反向获取\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",[42,97408,97409,97414,97424,97428,97432,97437,97442,97447,97452,97456,97461,97477,97481,97486,97491,97496,97501],{"__ignoreMap":25},[45,97410,97411],{"class":47,"line":48},[45,97412,97413],{"class":337},"#切片 对所有行进行反向获取\n",[45,97415,97416,97418,97420,97422],{"class":47,"line":66},[45,97417,97351],{"class":55},[45,97419,809],{"class":51},[45,97421,495],{"class":79},[45,97423,33346],{"class":55},[45,97425,97426],{"class":47,"line":1331},[45,97427,93664],{"class":337},[45,97429,97430],{"class":47,"line":1346},[45,97431,94028],{"class":62},[45,97433,97434],{"class":47,"line":1352},[45,97435,97436],{"class":62},"array([[19, 20, 21, 22, 23, 24],\n",[45,97438,97439],{"class":47,"line":1366},[45,97440,97441],{"class":62},"       [13, 14, 15, 16, 17, 18],\n",[45,97443,97444],{"class":47,"line":1372},[45,97445,97446],{"class":62},"       [ 7,  8,  9, 10, 11, 12],\n",[45,97448,97449],{"class":47,"line":1463},[45,97450,97451],{"class":62},"       [ 1,  2,  3,  4,  5,  6]])\n",[45,97453,97454],{"class":47,"line":1469},[45,97455,94028],{"class":62},[45,97457,97458],{"class":47,"line":1481},[45,97459,97460],{"class":337},"#对行列都进行反向切片获取\n",[45,97462,97463,97465,97467,97469,97471,97473,97475],{"class":47,"line":1763},[45,97464,97351],{"class":55},[45,97466,809],{"class":51},[45,97468,495],{"class":79},[45,97470,97356],{"class":55},[45,97472,809],{"class":51},[45,97474,495],{"class":79},[45,97476,33346],{"class":55},[45,97478,97479],{"class":47,"line":1768},[45,97480,94028],{"class":62},[45,97482,97483],{"class":47,"line":1774},[45,97484,97485],{"class":62},"array([[24, 23, 22, 21, 20, 19],\n",[45,97487,97488],{"class":47,"line":1779},[45,97489,97490],{"class":62},"       [18, 17, 16, 15, 14, 13],\n",[45,97492,97493],{"class":47,"line":1793},[45,97494,97495],{"class":62},"       [12, 11, 10,  9,  8,  7],\n",[45,97497,97498],{"class":47,"line":1798},[45,97499,97500],{"class":62},"       [ 6,  5,  4,  3,  2,  1]])\n",[45,97502,97503],{"class":47,"line":1804},[45,97504,94028],{"class":62},[20,97506,97507],{},"⑦修改元素",[36,97509,97511],{"className":30478,"code":97510,"language":30480,"meta":25,"style":25},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[42,97512,97513,97518,97536,97541],{"__ignoreMap":25},[45,97514,97515],{"class":47,"line":48},[45,97516,97517],{"class":337},"#获取前两行和前两列\n",[45,97519,97520,97523,97525,97527,97529,97532,97534],{"class":47,"line":66},[45,97521,97522],{"class":55},"sub_a",[45,97524,59],{"class":51},[45,97526,97270],{"class":55},[45,97528,356],{"class":79},[45,97530,97531],{"class":55},",:",[45,97533,356],{"class":79},[45,97535,33346],{"class":55},[45,97537,97538],{"class":47,"line":1331},[45,97539,97540],{"class":337},"#修改sub_a第一个元素的值\n",[45,97542,97543,97546,97548,97550,97552,97554,97556],{"class":47,"line":1346},[45,97544,97545],{"class":55},"sub_a[",[45,97547,469],{"class":79},[45,97549,655],{"class":55},[45,97551,469],{"class":79},[45,97553,1217],{"class":55},[45,97555,59],{"class":51},[45,97557,97558],{"class":79},"100\n",[20,97560,97561],{},"⑧数组复制copy()",[36,97563,97565],{"className":30478,"code":97564,"language":30480,"meta":25,"style":25},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[42,97566,97567,97572,97582,97587],{"__ignoreMap":25},[45,97568,97569],{"class":47,"line":48},[45,97570,97571],{"class":337},"#数组复制\n",[45,97573,97574,97577,97579],{"class":47,"line":66},[45,97575,97576],{"class":55},"copy_a",[45,97578,59],{"class":51},[45,97580,97581],{"class":55},"np.copy(sub_a)\n",[45,97583,97584],{"class":47,"line":1331},[45,97585,97586],{"class":337},"#修改copy_a后不影响原数组\n",[45,97588,97589,97592,97594,97596,97598,97600,97602],{"class":47,"line":1346},[45,97590,97591],{"class":55},"copy_a[",[45,97593,469],{"class":79},[45,97595,655],{"class":55},[45,97597,469],{"class":79},[45,97599,1217],{"class":55},[45,97601,59],{"class":51},[45,97603,97558],{"class":79},[20,97605,97606],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[196,97608,97609],{},"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":25,"searchDepth":66,"depth":66,"links":97611},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97128,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97618,"title":97619,"body":97620,"description":204,"extension":205,"meta":98112,"navigation":207,"path":98113,"seo":98114,"stem":98115,"__hash__":98116},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97621,"toc":98104},[97622,97625,97629,97632,97635,97688,97691,97716,97719,97738,97758,97761,97777,97781,97827,97831,97873,97877,97880,97883,97886,97889,97892,97954,98014,98018,98021,98078,98082,98087,98096,98101],[10,97623,97619],{"id":97624},"_5改变数组的维度",[15,97626,97628],{"id":97627},"_51-使用reshape","5.1 使用reshape()",[20,97630,97631],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[20,97633,97634],{},"①一维数组转换为二维数组",[36,97636,97638],{"className":30478,"code":97637,"language":30480,"meta":25,"style":25},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[42,97639,97640,97656,97661,97666,97671],{"__ignoreMap":25},[45,97641,97642,97644,97646,97648,97650,97652,97654],{"class":47,"line":48},[45,97643,516],{"class":55},[45,97645,59],{"class":51},[45,97647,93102],{"class":55},[45,97649,495],{"class":79},[45,97651,655],{"class":55},[45,97653,800],{"class":79},[45,97655,139],{"class":55},[45,97657,97658],{"class":47,"line":66},[45,97659,97660],{"class":337},"#将一维数组进行转换\n",[45,97662,97663],{"class":47,"line":1331},[45,97664,97665],{"class":337},"#注意点：元素个数不可以变\n",[45,97667,97668],{"class":47,"line":1346},[45,97669,97670],{"class":337},"#转换维度要保持一致，不一致就异常！！！\n",[45,97672,97673,97675,97677,97680,97682,97684,97686],{"class":47,"line":1352},[45,97674,93406],{"class":55},[45,97676,59],{"class":51},[45,97678,97679],{"class":55},"a.reshape(",[45,97681,356],{"class":79},[45,97683,655],{"class":55},[45,97685,621],{"class":79},[45,97687,139],{"class":55},[20,97689,97690],{},"②一维数组转换为三维数组",[36,97692,97694],{"className":30478,"code":97693,"language":30480,"meta":25,"style":25},"aaa=a.reshape(2,3,2)\n",[42,97695,97696],{"__ignoreMap":25},[45,97697,97698,97700,97702,97704,97706,97708,97710,97712,97714],{"class":47,"line":48},[45,97699,95621],{"class":55},[45,97701,59],{"class":51},[45,97703,97679],{"class":55},[45,97705,356],{"class":79},[45,97707,655],{"class":55},[45,97709,350],{"class":79},[45,97711,655],{"class":55},[45,97713,356],{"class":79},[45,97715,139],{"class":55},[20,97717,97718],{},"③二维数组转化为一维数组",[36,97720,97722],{"className":30478,"code":97721,"language":30480,"meta":25,"style":25},"#知道元素个数：\naa.reshape(12)\n",[42,97723,97724,97729],{"__ignoreMap":25},[45,97725,97726],{"class":47,"line":48},[45,97727,97728],{"class":337},"#知道元素个数：\n",[45,97730,97731,97734,97736],{"class":47,"line":66},[45,97732,97733],{"class":55},"aa.reshape(",[45,97735,775],{"class":79},[45,97737,139],{"class":55},[36,97739,97741],{"className":30478,"code":97740,"language":30480,"meta":25,"style":25},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[42,97742,97743,97748],{"__ignoreMap":25},[45,97744,97745],{"class":47,"line":48},[45,97746,97747],{"class":337},"#不知道元素个数，参数传递-1\n",[45,97749,97750,97752,97754,97756],{"class":47,"line":66},[45,97751,97733],{"class":55},[45,97753,809],{"class":51},[45,97755,495],{"class":79},[45,97757,139],{"class":55},[20,97759,97760],{},"④三维数组转换为一维数组",[36,97762,97764],{"className":30478,"code":97763,"language":30480,"meta":25,"style":25},"aaa.reshape(-1)\n",[42,97765,97766],{"__ignoreMap":25},[45,97767,97768,97771,97773,97775],{"class":47,"line":48},[45,97769,97770],{"class":55},"aaa.reshape(",[45,97772,809],{"class":51},[45,97774,495],{"class":79},[45,97776,139],{"class":55},[15,97778,97780],{"id":97779},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[36,97782,97784],{"className":30478,"code":97783,"language":30480,"meta":25,"style":25},"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",[42,97785,97786,97813,97818,97822],{"__ignoreMap":25},[45,97787,97788,97790,97792,97794,97796,97798,97800,97802,97804,97806,97808,97810],{"class":47,"line":48},[45,97789,93406],{"class":55},[45,97791,59],{"class":51},[45,97793,93102],{"class":55},[45,97795,495],{"class":79},[45,97797,655],{"class":55},[45,97799,800],{"class":79},[45,97801,93107],{"class":55},[45,97803,356],{"class":79},[45,97805,655],{"class":55},[45,97807,621],{"class":79},[45,97809,706],{"class":55},[45,97811,97812],{"class":337},"#转换为2行6列的数组\n",[45,97814,97815],{"class":47,"line":66},[45,97816,97817],{"class":55},"aa.revel()\n",[45,97819,97820],{"class":47,"line":1331},[45,97821,93664],{"class":337},[45,97823,97824],{"class":47,"line":1346},[45,97825,97826],{"class":337},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[15,97828,97830],{"id":97829},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[36,97832,97834],{"className":30478,"code":97833,"language":30480,"meta":25,"style":25},"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",[42,97835,97836,97860,97865,97869],{"__ignoreMap":25},[45,97837,97838,97840,97842,97844,97846,97848,97850,97852,97854,97856,97858],{"class":47,"line":48},[45,97839,93406],{"class":55},[45,97841,59],{"class":51},[45,97843,93102],{"class":55},[45,97845,495],{"class":79},[45,97847,655],{"class":55},[45,97849,800],{"class":79},[45,97851,93107],{"class":55},[45,97853,356],{"class":79},[45,97855,655],{"class":55},[45,97857,621],{"class":79},[45,97859,139],{"class":55},[45,97861,97862],{"class":47,"line":66},[45,97863,97864],{"class":55},"aa.flatten()\n",[45,97866,97867],{"class":47,"line":1331},[45,97868,93664],{"class":337},[45,97870,97871],{"class":47,"line":1346},[45,97872,97826],{"class":337},[15,97874,97876],{"id":97875},"_54-使用resize","5.4 使用resize()",[20,97878,97879],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[20,97881,97882],{},"通过resize方法可以改变数组的维度",[20,97884,97885],{},"#resize修改数组维度",[20,97887,97888],{},"#以元组的形式指定形状",[20,97890,97891],{},"#改变的是原数组",[36,97893,97895],{"className":30478,"code":97894,"language":30480,"meta":25,"style":25},"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",[42,97896,97897,97913,97933,97946,97950],{"__ignoreMap":25},[45,97898,97899,97901,97903,97905,97907,97909,97911],{"class":47,"line":48},[45,97900,516],{"class":55},[45,97902,59],{"class":51},[45,97904,93102],{"class":55},[45,97906,495],{"class":79},[45,97908,655],{"class":55},[45,97910,800],{"class":79},[45,97912,139],{"class":55},[45,97914,97915,97918,97920,97922,97924,97926,97928,97930],{"class":47,"line":66},[45,97916,97917],{"class":55},"a.shape",[45,97919,59],{"class":51},[45,97921,282],{"class":55},[45,97923,356],{"class":79},[45,97925,655],{"class":55},[45,97927,621],{"class":79},[45,97929,706],{"class":55},[45,97931,97932],{"class":337},"#改变了原数组\n",[45,97934,97935,97937,97939,97942,97944],{"class":47,"line":1331},[45,97936,516],{"class":55},[45,97938,59],{"class":51},[45,97940,97941],{"class":55},"resize((",[45,97943,775],{"class":79},[45,97945,30597],{"class":55},[45,97947,97948],{"class":47,"line":1346},[45,97949,93664],{"class":337},[45,97951,97952],{"class":47,"line":1352},[45,97953,97826],{"class":337},[36,97955,97957],{"className":30478,"code":97956,"language":30480,"meta":25,"style":25},"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",[42,97958,97959,97972,97976,97980,97985,97990,97995,98000,98005,98010],{"__ignoreMap":25},[45,97960,97961,97964,97966,97968,97970],{"class":47,"line":48},[45,97962,97963],{"class":55},"a.resize((",[45,97965,621],{"class":79},[45,97967,655],{"class":55},[45,97969,356],{"class":79},[45,97971,30597],{"class":55},[45,97973,97974],{"class":47,"line":66},[45,97975,93664],{"class":337},[45,97977,97978],{"class":47,"line":1331},[45,97979,94028],{"class":62},[45,97981,97982],{"class":47,"line":1346},[45,97983,97984],{"class":62},"array([[ 1,  2],\n",[45,97986,97987],{"class":47,"line":1352},[45,97988,97989],{"class":62},"       [ 3,  4],\n",[45,97991,97992],{"class":47,"line":1366},[45,97993,97994],{"class":62},"       [ 5,  6],\n",[45,97996,97997],{"class":47,"line":1372},[45,97998,97999],{"class":62},"       [ 7,  8],\n",[45,98001,98002],{"class":47,"line":1463},[45,98003,98004],{"class":62},"       [ 9, 10],\n",[45,98006,98007],{"class":47,"line":1469},[45,98008,98009],{"class":62},"       [11, 12]])\n",[45,98011,98012],{"class":47,"line":1481},[45,98013,94028],{"class":62},[15,98015,98017],{"id":98016},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[20,98019,98020],{},"改变了原数组",[36,98022,98024],{"className":30478,"code":98023,"language":30480,"meta":25,"style":25},"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",[42,98025,98026,98042,98058,98062,98066,98070,98074],{"__ignoreMap":25},[45,98027,98028,98030,98032,98034,98036,98038,98040],{"class":47,"line":48},[45,98029,516],{"class":55},[45,98031,59],{"class":51},[45,98033,93102],{"class":55},[45,98035,495],{"class":79},[45,98037,655],{"class":55},[45,98039,800],{"class":79},[45,98041,139],{"class":55},[45,98043,98044,98046,98048,98050,98052,98054,98056],{"class":47,"line":66},[45,98045,97917],{"class":55},[45,98047,59],{"class":51},[45,98049,282],{"class":55},[45,98051,356],{"class":79},[45,98053,655],{"class":55},[45,98055,621],{"class":79},[45,98057,139],{"class":55},[45,98059,98060],{"class":47,"line":1331},[45,98061,93664],{"class":337},[45,98063,98064],{"class":47,"line":1346},[45,98065,94028],{"class":62},[45,98067,98068],{"class":47,"line":1352},[45,98069,97288],{"class":62},[45,98071,98072],{"class":47,"line":1366},[45,98073,97293],{"class":62},[45,98075,98076],{"class":47,"line":1372},[45,98077,94028],{"class":62},[15,98079,98081],{"id":98080},"_56-重要比较","5.6 重要比较：",[20,98083,98084],{},[23,98085],{"alt":25,"src":98086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[20,98088,98089,98090,98092,98093,98095],{},"口诀：NumPy 函数要么用 ",[42,98091,96063],{},"，要么用 ",[42,98094,31596],{},"，创建结构用 shape，造数据用 size",[20,98097,98098],{},[23,98099],{"alt":25,"src":98100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[196,98102,98103],{},"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":25,"searchDepth":66,"depth":66,"links":98105},[98106,98107,98108,98109,98110,98111],{"id":97627,"depth":66,"text":97628},{"id":97779,"depth":66,"text":97780},{"id":97829,"depth":66,"text":97830},{"id":97875,"depth":66,"text":97876},{"id":98016,"depth":66,"text":98017},{"id":98080,"depth":66,"text":98081},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97619,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98118,"title":98119,"body":98120,"description":204,"extension":205,"meta":99192,"navigation":207,"path":99193,"seo":99194,"stem":99195,"__hash__":99196},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98121,"toc":99186},[98122,98125,98129,98132,98135,98138,98203,98206,98246,98249,98331,98334,98339,98361,98363,98368,98373,98376,98379,98534,98537,98739,98743,98746,98749,98817,98819,98824,98827,98830,98910,98914,98917,98919,98992,98994,98999,99001,99081,99085,99088,99091,99094,99097,99100,99103,99183],[10,98123,98119],{"id":98124},"_6数组的拼接",[15,98126,98128],{"id":98127},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[20,98130,98131],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[20,98133,98134],{},"函数内部传两个数列构成的数列或者元组",[20,98136,98137],{},"①一维数组的拼接",[36,98139,98141],{"className":30478,"code":98140,"language":30480,"meta":25,"style":25},"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",[42,98142,98143,98163,98183,98188,98193,98198],{"__ignoreMap":25},[45,98144,98145,98147,98149,98151,98153,98155,98157,98159,98161],{"class":47,"line":48},[45,98146,516],{"class":55},[45,98148,59],{"class":51},[45,98150,93124],{"class":55},[45,98152,495],{"class":79},[45,98154,655],{"class":55},[45,98156,356],{"class":79},[45,98158,655],{"class":55},[45,98160,350],{"class":79},[45,98162,4807],{"class":55},[45,98164,98165,98167,98169,98171,98173,98175,98177,98179,98181],{"class":47,"line":66},[45,98166,540],{"class":55},[45,98168,59],{"class":51},[45,98170,93124],{"class":55},[45,98172,570],{"class":79},[45,98174,655],{"class":55},[45,98176,596],{"class":79},[45,98178,655],{"class":55},[45,98180,621],{"class":79},[45,98182,4807],{"class":55},[45,98184,98185],{"class":47,"line":1331},[45,98186,98187],{"class":337},"#调用concatenate进行数组拼接\n",[45,98189,98190],{"class":47,"line":1346},[45,98191,98192],{"class":55},"np.concatenate((a,b))\n",[45,98194,98195],{"class":47,"line":1352},[45,98196,98197],{"class":337},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[45,98199,98200],{"class":47,"line":1366},[45,98201,98202],{"class":337},"#np.concatenate([a,b])\n",[20,98204,98205],{},"②一维多个数组拼接",[36,98207,98209],{"className":30478,"code":98208,"language":30480,"meta":25,"style":25},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[42,98210,98211,98216,98236,98241],{"__ignoreMap":25},[45,98212,98213],{"class":47,"line":48},[45,98214,98215],{"class":337},"#也可以多个数组进行拼接\n",[45,98217,98218,98220,98222,98224,98226,98228,98230,98232,98234],{"class":47,"line":66},[45,98219,565],{"class":55},[45,98221,59],{"class":51},[45,98223,93124],{"class":55},[45,98225,723],{"class":79},[45,98227,655],{"class":55},[45,98229,749],{"class":79},[45,98231,655],{"class":55},[45,98233,800],{"class":79},[45,98235,4807],{"class":55},[45,98237,98238],{"class":47,"line":1331},[45,98239,98240],{"class":55},"c\n",[45,98242,98243],{"class":47,"line":1346},[45,98244,98245],{"class":55},"np.concatenate((a,b,c))\n",[20,98247,98248],{},"③二维数组拼接",[36,98250,98252],{"className":30478,"code":98251,"language":30480,"meta":25,"style":25},"#二维数组使用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",[42,98253,98254,98259,98283,98308,98313,98318],{"__ignoreMap":25},[45,98255,98256],{"class":47,"line":48},[45,98257,98258],{"class":337},"#二维数组使用concatenate进行拼接\n",[45,98260,98261,98263,98265,98267,98269,98271,98273,98275,98277,98279,98281],{"class":47,"line":66},[45,98262,93406],{"class":55},[45,98264,59],{"class":51},[45,98266,93102],{"class":55},[45,98268,495],{"class":79},[45,98270,655],{"class":55},[45,98272,800],{"class":79},[45,98274,93107],{"class":55},[45,98276,350],{"class":79},[45,98278,655],{"class":55},[45,98280,570],{"class":79},[45,98282,139],{"class":55},[45,98284,98285,98288,98290,98292,98294,98296,98298,98300,98302,98304,98306],{"class":47,"line":1331},[45,98286,98287],{"class":55},"bb",[45,98289,59],{"class":51},[45,98291,93102],{"class":55},[45,98293,614],{"class":79},[45,98295,655],{"class":55},[45,98297,919],{"class":79},[45,98299,93107],{"class":55},[45,98301,350],{"class":79},[45,98303,655],{"class":55},[45,98305,570],{"class":79},[45,98307,139],{"class":55},[45,98309,98310],{"class":47,"line":1346},[45,98311,98312],{"class":337},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[45,98314,98315],{"class":47,"line":1352},[45,98316,98317],{"class":337},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[45,98319,98320,98323,98325,98327,98329],{"class":47,"line":1366},[45,98321,98322],{"class":55},"np.concatenate((aa,bb),",[45,98324,47614],{"class":5366},[45,98326,59],{"class":51},[45,98328,469],{"class":79},[45,98330,139],{"class":55},[20,98332,98333],{},"结果：",[20,98335,98336],{},[23,98337],{"alt":25,"src":98338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[36,98340,98342],{"className":30478,"code":98341,"language":30480,"meta":25,"style":25},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[42,98343,98344,98349],{"__ignoreMap":25},[45,98345,98346],{"class":47,"line":48},[45,98347,98348],{"class":337},"#指定axis为1进行拼接\n",[45,98350,98351,98353,98355,98357,98359],{"class":47,"line":66},[45,98352,98322],{"class":55},[45,98354,47614],{"class":5366},[45,98356,59],{"class":51},[45,98358,495],{"class":79},[45,98360,139],{"class":55},[20,98362,98333],{},[20,98364,98365],{},[23,98366],{"alt":25,"src":98367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[20,98369,98370],{},[427,98371,98372],{},"二维数组总结：0竖着方向，1横着方向",[20,98374,98375],{},"④三维数组拼接",[20,98377,98378],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[36,98380,98382],{"className":30478,"code":98381,"language":30480,"meta":25,"style":25},"#两个三行六列\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",[42,98383,98384,98389,98417,98447,98452,98469,98474,98479,98484,98501,98506,98511,98516,98529],{"__ignoreMap":25},[45,98385,98386],{"class":47,"line":48},[45,98387,98388],{"class":337},"#两个三行六列\n",[45,98390,98391,98393,98395,98397,98399,98401,98403,98405,98407,98409,98411,98413,98415],{"class":47,"line":66},[45,98392,95621],{"class":55},[45,98394,59],{"class":51},[45,98396,93102],{"class":55},[45,98398,495],{"class":79},[45,98400,655],{"class":55},[45,98402,602],{"class":79},[45,98404,93107],{"class":55},[45,98406,356],{"class":79},[45,98408,655],{"class":55},[45,98410,350],{"class":79},[45,98412,655],{"class":55},[45,98414,621],{"class":79},[45,98416,139],{"class":55},[45,98418,98419,98422,98424,98426,98428,98430,98433,98435,98437,98439,98441,98443,98445],{"class":47,"line":1331},[45,98420,98421],{"class":55},"bbb",[45,98423,59],{"class":51},[45,98425,93102],{"class":55},[45,98427,614],{"class":79},[45,98429,655],{"class":55},[45,98431,98432],{"class":79},"137",[45,98434,93107],{"class":55},[45,98436,356],{"class":79},[45,98438,655],{"class":55},[45,98440,350],{"class":79},[45,98442,655],{"class":55},[45,98444,621],{"class":79},[45,98446,139],{"class":55},[45,98448,98449],{"class":47,"line":1346},[45,98450,98451],{"class":337},"#axis=0\n",[45,98453,98454,98456,98458,98461,98463,98465,98467],{"class":47,"line":1352},[45,98455,972],{"class":55},[45,98457,59],{"class":51},[45,98459,98460],{"class":55},"np.concatenate((aaa,bbb),",[45,98462,47614],{"class":5366},[45,98464,59],{"class":51},[45,98466,469],{"class":79},[45,98468,139],{"class":55},[45,98470,98471],{"class":47,"line":1366},[45,98472,98473],{"class":55},"s.shape\n",[45,98475,98476],{"class":47,"line":1372},[45,98477,98478],{"class":337},"#输出：(4,3,6)\n",[45,98480,98481],{"class":47,"line":1463},[45,98482,98483],{"class":337},"#axis=1\n",[45,98485,98486,98489,98491,98493,98495,98497,98499],{"class":47,"line":1469},[45,98487,98488],{"class":55},"ss",[45,98490,59],{"class":51},[45,98492,98460],{"class":55},[45,98494,47614],{"class":5366},[45,98496,59],{"class":51},[45,98498,495],{"class":79},[45,98500,139],{"class":55},[45,98502,98503],{"class":47,"line":1481},[45,98504,98505],{"class":55},"ss.shape\n",[45,98507,98508],{"class":47,"line":1763},[45,98509,98510],{"class":337},"#输出：(2,6,6)\n",[45,98512,98513],{"class":47,"line":1768},[45,98514,98515],{"class":337},"#axis=2\n",[45,98517,98518,98520,98522,98524,98526],{"class":47,"line":1774},[45,98519,98460],{"class":55},[45,98521,47614],{"class":5366},[45,98523,59],{"class":51},[45,98525,356],{"class":79},[45,98527,98528],{"class":55},").shape\n",[45,98530,98531],{"class":47,"line":1779},[45,98532,98533],{"class":337},"#输出：（2，3，12）\n",[20,98535,98536],{},"⑤四维数组拼接",[36,98538,98540],{"className":30478,"code":98539,"language":30480,"meta":25,"style":25},"#两个三行六列\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",[42,98541,98542,98546,98574,98602,98627,98653,98657,98670,98675,98679,98691,98696,98700,98712,98717,98722,98734],{"__ignoreMap":25},[45,98543,98544],{"class":47,"line":48},[45,98545,98388],{"class":337},[45,98547,98548,98550,98552,98554,98556,98558,98560,98562,98564,98566,98568,98570,98572],{"class":47,"line":66},[45,98549,95621],{"class":55},[45,98551,59],{"class":51},[45,98553,93102],{"class":55},[45,98555,495],{"class":79},[45,98557,655],{"class":55},[45,98559,602],{"class":79},[45,98561,93107],{"class":55},[45,98563,356],{"class":79},[45,98565,655],{"class":55},[45,98567,350],{"class":79},[45,98569,655],{"class":55},[45,98571,621],{"class":79},[45,98573,139],{"class":55},[45,98575,98576,98578,98580,98582,98584,98586,98588,98590,98592,98594,98596,98598,98600],{"class":47,"line":1331},[45,98577,98421],{"class":55},[45,98579,59],{"class":51},[45,98581,93102],{"class":55},[45,98583,614],{"class":79},[45,98585,655],{"class":55},[45,98587,98432],{"class":79},[45,98589,93107],{"class":55},[45,98591,356],{"class":79},[45,98593,655],{"class":55},[45,98595,350],{"class":79},[45,98597,655],{"class":55},[45,98599,621],{"class":79},[45,98601,139],{"class":55},[45,98603,98604,98607,98609,98611,98613,98615,98617,98619,98621,98623,98625],{"class":47,"line":1346},[45,98605,98606],{"class":55},"aaaa",[45,98608,59],{"class":51},[45,98610,97770],{"class":55},[45,98612,356],{"class":79},[45,98614,655],{"class":55},[45,98616,350],{"class":79},[45,98618,655],{"class":55},[45,98620,350],{"class":79},[45,98622,655],{"class":55},[45,98624,356],{"class":79},[45,98626,139],{"class":55},[45,98628,98629,98632,98634,98637,98639,98641,98643,98645,98647,98649,98651],{"class":47,"line":1352},[45,98630,98631],{"class":55},"bbbb",[45,98633,59],{"class":51},[45,98635,98636],{"class":55},"bbb.reshape(",[45,98638,356],{"class":79},[45,98640,655],{"class":55},[45,98642,350],{"class":79},[45,98644,655],{"class":55},[45,98646,350],{"class":79},[45,98648,655],{"class":55},[45,98650,356],{"class":79},[45,98652,139],{"class":55},[45,98654,98655],{"class":47,"line":1366},[45,98656,98451],{"class":337},[45,98658,98659,98662,98664,98666,98668],{"class":47,"line":1372},[45,98660,98661],{"class":55},"np.concatenate((aaaa,bbbb),",[45,98663,47614],{"class":5366},[45,98665,59],{"class":51},[45,98667,469],{"class":79},[45,98669,98528],{"class":55},[45,98671,98672],{"class":47,"line":1463},[45,98673,98674],{"class":337},"#结果：（4，3，3，2）\n",[45,98676,98677],{"class":47,"line":1469},[45,98678,98483],{"class":337},[45,98680,98681,98683,98685,98687,98689],{"class":47,"line":1481},[45,98682,98661],{"class":55},[45,98684,47614],{"class":5366},[45,98686,59],{"class":51},[45,98688,495],{"class":79},[45,98690,98528],{"class":55},[45,98692,98693],{"class":47,"line":1763},[45,98694,98695],{"class":337},"#结果：（2，6，3，2）\n",[45,98697,98698],{"class":47,"line":1768},[45,98699,98515],{"class":337},[45,98701,98702,98704,98706,98708,98710],{"class":47,"line":1774},[45,98703,98661],{"class":55},[45,98705,47614],{"class":5366},[45,98707,59],{"class":51},[45,98709,356],{"class":79},[45,98711,98528],{"class":55},[45,98713,98714],{"class":47,"line":1779},[45,98715,98716],{"class":337},"#结果：（2，3，6，2）\n",[45,98718,98719],{"class":47,"line":1793},[45,98720,98721],{"class":337},"#axis=3\n",[45,98723,98724,98726,98728,98730,98732],{"class":47,"line":1798},[45,98725,98661],{"class":55},[45,98727,47614],{"class":5366},[45,98729,59],{"class":51},[45,98731,350],{"class":79},[45,98733,98528],{"class":55},[45,98735,98736],{"class":47,"line":1804},[45,98737,98738],{"class":337},"#结果：（2，3，3，4）\n",[15,98740,98742],{"id":98741},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[20,98744,98745],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[20,98747,98748],{},"①二维数组",[36,98750,98752],{"className":30478,"code":98751,"language":30480,"meta":25,"style":25},"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",[42,98753,98754,98778,98802,98807,98812],{"__ignoreMap":25},[45,98755,98756,98758,98760,98762,98764,98766,98768,98770,98772,98774,98776],{"class":47,"line":48},[45,98757,93406],{"class":55},[45,98759,59],{"class":51},[45,98761,93102],{"class":55},[45,98763,495],{"class":79},[45,98765,655],{"class":55},[45,98767,800],{"class":79},[45,98769,93107],{"class":55},[45,98771,350],{"class":79},[45,98773,655],{"class":55},[45,98775,570],{"class":79},[45,98777,139],{"class":55},[45,98779,98780,98782,98784,98786,98788,98790,98792,98794,98796,98798,98800],{"class":47,"line":66},[45,98781,98287],{"class":55},[45,98783,59],{"class":51},[45,98785,93102],{"class":55},[45,98787,614],{"class":79},[45,98789,655],{"class":55},[45,98791,919],{"class":79},[45,98793,93107],{"class":55},[45,98795,350],{"class":79},[45,98797,655],{"class":55},[45,98799,570],{"class":79},[45,98801,139],{"class":55},[45,98803,98804],{"class":47,"line":1331},[45,98805,98806],{"class":55},"np.hstack((aa,bb))\n",[45,98808,98809],{"class":47,"line":1346},[45,98810,98811],{"class":337},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[45,98813,98814],{"class":47,"line":1352},[45,98815,98816],{"class":337},"#np.hstack([aa,bb])\n",[20,98818,98333],{},[20,98820,98821],{},[23,98822],{"alt":25,"src":98823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[20,98825,98826],{},"等效于concatenate()函数中axis=1时的情况",[20,98828,98829],{},"②三维数组",[36,98831,98833],{"className":30478,"code":98832,"language":30480,"meta":25,"style":25},"#两个三行六列\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",[42,98834,98835,98839,98867,98895,98900,98905],{"__ignoreMap":25},[45,98836,98837],{"class":47,"line":48},[45,98838,98388],{"class":337},[45,98840,98841,98843,98845,98847,98849,98851,98853,98855,98857,98859,98861,98863,98865],{"class":47,"line":66},[45,98842,95621],{"class":55},[45,98844,59],{"class":51},[45,98846,93102],{"class":55},[45,98848,495],{"class":79},[45,98850,655],{"class":55},[45,98852,602],{"class":79},[45,98854,93107],{"class":55},[45,98856,356],{"class":79},[45,98858,655],{"class":55},[45,98860,350],{"class":79},[45,98862,655],{"class":55},[45,98864,621],{"class":79},[45,98866,139],{"class":55},[45,98868,98869,98871,98873,98875,98877,98879,98881,98883,98885,98887,98889,98891,98893],{"class":47,"line":1331},[45,98870,98421],{"class":55},[45,98872,59],{"class":51},[45,98874,93102],{"class":55},[45,98876,614],{"class":79},[45,98878,655],{"class":55},[45,98880,98432],{"class":79},[45,98882,93107],{"class":55},[45,98884,356],{"class":79},[45,98886,655],{"class":55},[45,98888,350],{"class":79},[45,98890,655],{"class":55},[45,98892,621],{"class":79},[45,98894,139],{"class":55},[45,98896,98897],{"class":47,"line":1346},[45,98898,98899],{"class":337},"#使用hstack\n",[45,98901,98902],{"class":47,"line":1352},[45,98903,98904],{"class":55},"np.hstack((aaa,bbb)).shape\n",[45,98906,98907],{"class":47,"line":1366},[45,98908,98909],{"class":337},"#输出：（2，6，6）\n",[15,98911,98913],{"id":98912},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[20,98915,98916],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[20,98918,98748],{},[36,98920,98922],{"className":30478,"code":98921,"language":30480,"meta":25,"style":25},"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",[42,98923,98924,98948,98972,98977,98982,98987],{"__ignoreMap":25},[45,98925,98926,98928,98930,98932,98934,98936,98938,98940,98942,98944,98946],{"class":47,"line":48},[45,98927,93406],{"class":55},[45,98929,59],{"class":51},[45,98931,93102],{"class":55},[45,98933,495],{"class":79},[45,98935,655],{"class":55},[45,98937,800],{"class":79},[45,98939,93107],{"class":55},[45,98941,350],{"class":79},[45,98943,655],{"class":55},[45,98945,570],{"class":79},[45,98947,139],{"class":55},[45,98949,98950,98952,98954,98956,98958,98960,98962,98964,98966,98968,98970],{"class":47,"line":66},[45,98951,98287],{"class":55},[45,98953,59],{"class":51},[45,98955,93102],{"class":55},[45,98957,614],{"class":79},[45,98959,655],{"class":55},[45,98961,919],{"class":79},[45,98963,93107],{"class":55},[45,98965,350],{"class":79},[45,98967,655],{"class":55},[45,98969,570],{"class":79},[45,98971,139],{"class":55},[45,98973,98974],{"class":47,"line":1331},[45,98975,98976],{"class":337},"#vstack 垂直方向进行堆叠\n",[45,98978,98979],{"class":47,"line":1346},[45,98980,98981],{"class":55},"np.vstack((aa,bb))\n",[45,98983,98984],{"class":47,"line":1352},[45,98985,98986],{"class":337},"#与hstack传的参数类似，等价于：\n",[45,98988,98989],{"class":47,"line":1366},[45,98990,98991],{"class":55},"np.vstack([aa,bb])\n",[20,98993,98333],{},[20,98995,98996],{},[23,98997],{"alt":25,"src":98998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[20,99000,98829],{},[36,99002,99004],{"className":30478,"code":99003,"language":30480,"meta":25,"style":25},"#两个三行六列\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",[42,99005,99006,99010,99038,99066,99071,99076],{"__ignoreMap":25},[45,99007,99008],{"class":47,"line":48},[45,99009,98388],{"class":337},[45,99011,99012,99014,99016,99018,99020,99022,99024,99026,99028,99030,99032,99034,99036],{"class":47,"line":66},[45,99013,95621],{"class":55},[45,99015,59],{"class":51},[45,99017,93102],{"class":55},[45,99019,495],{"class":79},[45,99021,655],{"class":55},[45,99023,602],{"class":79},[45,99025,93107],{"class":55},[45,99027,356],{"class":79},[45,99029,655],{"class":55},[45,99031,350],{"class":79},[45,99033,655],{"class":55},[45,99035,621],{"class":79},[45,99037,139],{"class":55},[45,99039,99040,99042,99044,99046,99048,99050,99052,99054,99056,99058,99060,99062,99064],{"class":47,"line":1331},[45,99041,98421],{"class":55},[45,99043,59],{"class":51},[45,99045,93102],{"class":55},[45,99047,614],{"class":79},[45,99049,655],{"class":55},[45,99051,98432],{"class":79},[45,99053,93107],{"class":55},[45,99055,356],{"class":79},[45,99057,655],{"class":55},[45,99059,350],{"class":79},[45,99061,655],{"class":55},[45,99063,621],{"class":79},[45,99065,139],{"class":55},[45,99067,99068],{"class":47,"line":1346},[45,99069,99070],{"class":337},"#使用vstack\n",[45,99072,99073],{"class":47,"line":1352},[45,99074,99075],{"class":55},"np.vstack((aaa,bbb)).shape\n",[45,99077,99078],{"class":47,"line":1366},[45,99079,99080],{"class":337},"#输出：（4，3，6）\n",[15,99082,99084],{"id":99083},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[20,99086,99087],{},"该方法是三维数组特有的方法",[20,99089,99090],{},"也就是说",[20,99092,99093],{},"一维数组拼接方法用：concatenate()",[20,99095,99096],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[20,99098,99099],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[20,99101,99102],{},"四维数组及多维数组只能用concatenate进行拼接",[36,99104,99106],{"className":30478,"code":99105,"language":30480,"meta":25,"style":25},"#两个三行六列\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",[42,99107,99108,99112,99140,99168,99173,99178],{"__ignoreMap":25},[45,99109,99110],{"class":47,"line":48},[45,99111,98388],{"class":337},[45,99113,99114,99116,99118,99120,99122,99124,99126,99128,99130,99132,99134,99136,99138],{"class":47,"line":66},[45,99115,95621],{"class":55},[45,99117,59],{"class":51},[45,99119,93102],{"class":55},[45,99121,495],{"class":79},[45,99123,655],{"class":55},[45,99125,602],{"class":79},[45,99127,93107],{"class":55},[45,99129,356],{"class":79},[45,99131,655],{"class":55},[45,99133,350],{"class":79},[45,99135,655],{"class":55},[45,99137,621],{"class":79},[45,99139,139],{"class":55},[45,99141,99142,99144,99146,99148,99150,99152,99154,99156,99158,99160,99162,99164,99166],{"class":47,"line":1331},[45,99143,98421],{"class":55},[45,99145,59],{"class":51},[45,99147,93102],{"class":55},[45,99149,614],{"class":79},[45,99151,655],{"class":55},[45,99153,98432],{"class":79},[45,99155,93107],{"class":55},[45,99157,356],{"class":79},[45,99159,655],{"class":55},[45,99161,350],{"class":79},[45,99163,655],{"class":55},[45,99165,621],{"class":79},[45,99167,139],{"class":55},[45,99169,99170],{"class":47,"line":1346},[45,99171,99172],{"class":337},"#使用dstack\n",[45,99174,99175],{"class":47,"line":1352},[45,99176,99177],{"class":55},"np.dstack((aaa,bbb)).shape\n",[45,99179,99180],{"class":47,"line":1366},[45,99181,99182],{"class":337},"#结果：（2，3，12）\n",[196,99184,99185],{},"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":25,"searchDepth":66,"depth":66,"links":99187},[99188,99189,99190,99191],{"id":98127,"depth":66,"text":98128},{"id":98741,"depth":66,"text":98742},{"id":98912,"depth":66,"text":98913},{"id":99083,"depth":66,"text":99084},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98119,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99198,"title":99199,"body":99200,"description":204,"extension":205,"meta":99475,"navigation":207,"path":99476,"seo":99477,"stem":99478,"__hash__":99479},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99201,"toc":99473},[99202,99205,99208,99302,99305,99308,99311,99314,99317,99320,99323,99326,99470],[10,99203,99199],{"id":99204},"_7数组转置",[20,99206,99207],{},"使用transpose()函数",[36,99209,99211],{"className":30478,"code":99210,"language":30480,"meta":25,"style":25},"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",[42,99212,99213,99223,99247,99252,99257,99262,99267,99275,99279,99283,99288,99293,99298],{"__ignoreMap":25},[45,99214,99215,99217,99219,99221],{"class":47,"line":48},[45,99216,30492],{"class":51},[45,99218,31480],{"class":55},[45,99220,31483],{"class":51},[45,99222,31486],{"class":55},[45,99224,99225,99227,99229,99231,99233,99235,99237,99239,99241,99243,99245],{"class":47,"line":66},[45,99226,516],{"class":55},[45,99228,59],{"class":51},[45,99230,31817],{"class":55},[45,99232,495],{"class":79},[45,99234,655],{"class":55},[45,99236,800],{"class":79},[45,99238,93107],{"class":55},[45,99240,570],{"class":79},[45,99242,655],{"class":55},[45,99244,350],{"class":79},[45,99246,139],{"class":55},[45,99248,99249],{"class":47,"line":1331},[45,99250,99251],{"class":337},"#二维数组转置\n",[45,99253,99254],{"class":47,"line":1346},[45,99255,99256],{"class":337},"#调用transpose()函数\n",[45,99258,99259],{"class":47,"line":1352},[45,99260,99261],{"class":55},"a.transpose()\n",[45,99263,99264],{"class":47,"line":1366},[45,99265,99266],{"class":337},"#对于二维数组也可以采用.T来实现\n",[45,99268,99269,99272],{"class":47,"line":1372},[45,99270,99271],{"class":55},"a.T",[45,99273,99274],{"class":337},"#与上述代码一样\n",[45,99276,99277],{"class":47,"line":1463},[45,99278,93664],{"class":337},[45,99280,99281],{"class":47,"line":1469},[45,99282,94028],{"class":62},[45,99284,99285],{"class":47,"line":1481},[45,99286,99287],{"class":62},"array([[ 1,  4,  7, 10],\n",[45,99289,99290],{"class":47,"line":1763},[45,99291,99292],{"class":62},"       [ 2,  5,  8, 11],\n",[45,99294,99295],{"class":47,"line":1768},[45,99296,99297],{"class":62},"       [ 3,  6,  9, 12]])\n",[45,99299,99300],{"class":47,"line":1774},[45,99301,94028],{"class":62},[20,99303,99304],{},"也可以使用np.transpose()的形式",[20,99306,99307],{},"#多维数组进行转置 np.transpose()",[20,99309,99310],{},"#对二维数组也可以使用np.transpose()进行转置",[20,99312,99313],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[20,99315,99316],{},"第二个参数，维度可以理解为用axis中的数来理解",[20,99318,99319],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[20,99321,99322],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[20,99324,99325],{},"四维及以上的数组也是一样的道理",[36,99327,99329],{"className":30478,"code":99328,"language":30480,"meta":25,"style":25},"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",[42,99330,99331,99359,99364,99369,99374,99392,99397,99429,99434,99439,99444,99465],{"__ignoreMap":25},[45,99332,99333,99335,99337,99339,99341,99343,99345,99347,99349,99351,99353,99355,99357],{"class":47,"line":48},[45,99334,1097],{"class":55},[45,99336,59],{"class":51},[45,99338,93102],{"class":55},[45,99340,495],{"class":79},[45,99342,655],{"class":55},[45,99344,602],{"class":79},[45,99346,93107],{"class":55},[45,99348,350],{"class":79},[45,99350,655],{"class":55},[45,99352,621],{"class":79},[45,99354,655],{"class":55},[45,99356,356],{"class":79},[45,99358,139],{"class":55},[45,99360,99361],{"class":47,"line":66},[45,99362,99363],{"class":55},"x.shape\n",[45,99365,99366],{"class":47,"line":1331},[45,99367,99368],{"class":337},"#结果：（3,6,2）\n",[45,99370,99371],{"class":47,"line":1346},[45,99372,99373],{"class":337},"#使用np.transpose()进行转置 变为(2,6,3)\n",[45,99375,99376,99379,99381,99383,99385,99387,99389],{"class":47,"line":1352},[45,99377,99378],{"class":55},"np.transpose(x,(",[45,99380,356],{"class":79},[45,99382,655],{"class":55},[45,99384,495],{"class":79},[45,99386,655],{"class":55},[45,99388,469],{"class":79},[45,99390,99391],{"class":55},")).shape\n",[45,99393,99394],{"class":47,"line":1366},[45,99395,99396],{"class":337},"#结果：(2,6,3)\n",[45,99398,99399,99401,99403,99405,99407,99409,99411,99413,99415,99417,99419,99421,99423,99425,99427],{"class":47,"line":1372},[45,99400,98606],{"class":55},[45,99402,59],{"class":51},[45,99404,93102],{"class":55},[45,99406,495],{"class":79},[45,99408,655],{"class":55},[45,99410,602],{"class":79},[45,99412,93107],{"class":55},[45,99414,350],{"class":79},[45,99416,655],{"class":55},[45,99418,356],{"class":79},[45,99420,655],{"class":55},[45,99422,495],{"class":79},[45,99424,655],{"class":55},[45,99426,621],{"class":79},[45,99428,139],{"class":55},[45,99430,99431],{"class":47,"line":1463},[45,99432,99433],{"class":55},"aaaa.shape\n",[45,99435,99436],{"class":47,"line":1469},[45,99437,99438],{"class":337},"#结果：（3，2，1，6）\n",[45,99440,99441],{"class":47,"line":1481},[45,99442,99443],{"class":337},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[45,99445,99446,99449,99451,99453,99455,99457,99459,99461,99463],{"class":47,"line":1763},[45,99447,99448],{"class":55},"np.transpose(aaaa,(",[45,99450,495],{"class":79},[45,99452,655],{"class":55},[45,99454,356],{"class":79},[45,99456,655],{"class":55},[45,99458,469],{"class":79},[45,99460,655],{"class":55},[45,99462,350],{"class":79},[45,99464,99391],{"class":55},[45,99466,99467],{"class":47,"line":1768},[45,99468,99469],{"class":337},"#结果：(2,1,3,6)\n",[196,99471,99472],{},"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":25,"searchDepth":66,"depth":66,"links":99474},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99199,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99481,"title":99482,"body":99483,"description":204,"extension":205,"meta":100217,"navigation":207,"path":100218,"seo":100219,"stem":100220,"__hash__":100221},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99484,"toc":100215},[99485,99488,99491,99494,99497,99500,99503,99506,99509,99618,99621,99624,100212],[10,99486,99482],{"id":99487},"_8数组分割",[20,99489,99490],{},"split分割",[20,99492,99493],{},"numpy.split(ary,indics_or_sections,axis)",[20,99495,99496],{},"解释：",[20,99498,99499],{},"ary:被分割的数组",[20,99501,99502],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[20,99504,99505],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[20,99507,99508],{},"①一维数组的分割",[36,99510,99512],{"className":30478,"code":99511,"language":30480,"meta":25,"style":25},"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",[42,99513,99514,99530,99535,99544,99548,99553,99561,99565,99570,99575,99588,99592,99597,99609,99613],{"__ignoreMap":25},[45,99515,99516,99518,99520,99522,99524,99526,99528],{"class":47,"line":48},[45,99517,516],{"class":55},[45,99519,59],{"class":51},[45,99521,93102],{"class":55},[45,99523,495],{"class":79},[45,99525,655],{"class":55},[45,99527,697],{"class":79},[45,99529,139],{"class":55},[45,99531,99532],{"class":47,"line":66},[45,99533,99534],{"class":337},"#如果传入整数，必须能够平分，否则会报错\n",[45,99536,99537,99540,99542],{"class":47,"line":1331},[45,99538,99539],{"class":55},"np.split(a,",[45,99541,356],{"class":79},[45,99543,139],{"class":55},[45,99545,99546],{"class":47,"line":1346},[45,99547,93664],{"class":337},[45,99549,99550],{"class":47,"line":1352},[45,99551,99552],{"class":337},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[45,99554,99555,99557,99559],{"class":47,"line":1366},[45,99556,99539],{"class":55},[45,99558,570],{"class":79},[45,99560,139],{"class":55},[45,99562,99563],{"class":47,"line":1372},[45,99564,93664],{"class":337},[45,99566,99567],{"class":47,"line":1463},[45,99568,99569],{"class":337},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[45,99571,99572],{"class":47,"line":1469},[45,99573,99574],{"class":337},"#传入数组\n",[45,99576,99577,99580,99582,99584,99586],{"class":47,"line":1481},[45,99578,99579],{"class":55},"np.split(a,[",[45,99581,350],{"class":79},[45,99583,655],{"class":55},[45,99585,596],{"class":79},[45,99587,4807],{"class":55},[45,99589,99590],{"class":47,"line":1763},[45,99591,93664],{"class":337},[45,99593,99594],{"class":47,"line":1768},[45,99595,99596],{"class":337},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[45,99598,99599,99601,99603,99605,99607],{"class":47,"line":1774},[45,99600,99579],{"class":55},[45,99602,596],{"class":79},[45,99604,655],{"class":55},[45,99606,646],{"class":79},[45,99608,4807],{"class":55},[45,99610,99611],{"class":47,"line":1779},[45,99612,93664],{"class":337},[45,99614,99615],{"class":47,"line":1793},[45,99616,99617],{"class":337},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[20,99619,99620],{},"②二维数组的分割",[20,99622,99623],{},"使用split()",[36,99625,99627],{"className":30478,"code":99626,"language":30480,"meta":25,"style":25},"#二维数组分割\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",[42,99628,99629,99634,99658,99663,99672,99676,99680,99685,99690,99695,99700,99705,99710,99715,99719,99732,99736,99740,99744,99748,99752,99757,99762,99767,99771,99776,99792,99796,99800,99805,99810,99815,99820,99825,99830,99835,99840,99845,99850,99855,99860,99865,99870,99875,99880,99885,99890,99894,99898,99918,99922,99926,99931,99936,99941,99946,99951,99956,99961,99966,99971,99976,99981,99986,99991,99996,100001,100006,100011,100016,100020,100025,100034,100038,100042,100046,100050,100054,100058,100062,100066,100070,100079,100083,100087,100091,100095,100099,100103,100107,100111,100115,100119,100123,100127,100131,100135,100139,100143,100147,100151,100155,100159,100163,100176,100180,100184,100188,100192,100196,100200,100204,100208],{"__ignoreMap":25},[45,99630,99631],{"class":47,"line":48},[45,99632,99633],{"class":337},"#二维数组分割\n",[45,99635,99636,99638,99640,99642,99644,99646,99648,99650,99652,99654,99656],{"class":47,"line":66},[45,99637,93406],{"class":55},[45,99639,59],{"class":51},[45,99641,93102],{"class":55},[45,99643,495],{"class":79},[45,99645,655],{"class":55},[45,99647,602],{"class":79},[45,99649,93107],{"class":55},[45,99651,621],{"class":79},[45,99653,655],{"class":55},[45,99655,621],{"class":79},[45,99657,139],{"class":55},[45,99659,99660],{"class":47,"line":1331},[45,99661,99662],{"class":337},"#默认axis=0  传入整数平均分,按行来的\n",[45,99664,99665,99668,99670],{"class":47,"line":1346},[45,99666,99667],{"class":55},"np.split(aa,",[45,99669,350],{"class":79},[45,99671,139],{"class":55},[45,99673,99674],{"class":47,"line":1352},[45,99675,95864],{"class":337},[45,99677,99678],{"class":47,"line":1366},[45,99679,94028],{"class":62},[45,99681,99682],{"class":47,"line":1372},[45,99683,99684],{"class":62},"[array([[ 1,  2,  3,  4,  5,  6],\n",[45,99686,99687],{"class":47,"line":1463},[45,99688,99689],{"class":62},"        [ 7,  8,  9, 10, 11, 12]]),\n",[45,99691,99692],{"class":47,"line":1469},[45,99693,99694],{"class":62}," array([[13, 14, 15, 16, 17, 18],\n",[45,99696,99697],{"class":47,"line":1481},[45,99698,99699],{"class":62},"        [19, 20, 21, 22, 23, 24]]),\n",[45,99701,99702],{"class":47,"line":1763},[45,99703,99704],{"class":62}," array([[25, 26, 27, 28, 29, 30],\n",[45,99706,99707],{"class":47,"line":1768},[45,99708,99709],{"class":62},"        [31, 32, 33, 34, 35, 36]])]\n",[45,99711,99712],{"class":47,"line":1774},[45,99713,99714],{"class":62}," '''\n",[45,99716,99717],{"class":47,"line":1779},[45,99718,99574],{"class":337},[45,99720,99721,99724,99726,99728,99730],{"class":47,"line":1793},[45,99722,99723],{"class":55},"np.split(aa,[",[45,99725,356],{"class":79},[45,99727,655],{"class":55},[45,99729,596],{"class":79},[45,99731,4807],{"class":55},[45,99733,99734],{"class":47,"line":1798},[45,99735,95864],{"class":337},[45,99737,99738],{"class":47,"line":1804},[45,99739,94028],{"class":62},[45,99741,99742],{"class":47,"line":1825},[45,99743,99684],{"class":62},[45,99745,99746],{"class":47,"line":1830},[45,99747,99689],{"class":62},[45,99749,99750],{"class":47,"line":1844},[45,99751,99694],{"class":62},[45,99753,99754],{"class":47,"line":1849},[45,99755,99756],{"class":62},"        [19, 20, 21, 22, 23, 24],\n",[45,99758,99759],{"class":47,"line":1878},[45,99760,99761],{"class":62},"        [25, 26, 27, 28, 29, 30]]),\n",[45,99763,99764],{"class":47,"line":1883},[45,99765,99766],{"class":62}," array([[31, 32, 33, 34, 35, 36]])]\n",[45,99768,99769],{"class":47,"line":1900},[45,99770,94028],{"class":62},[45,99772,99773],{"class":47,"line":1905},[45,99774,99775],{"class":337},"#axis=1 按照列来分\n",[45,99777,99778,99780,99782,99784,99786,99788,99790],{"class":47,"line":1910},[45,99779,99667],{"class":55},[45,99781,350],{"class":79},[45,99783,655],{"class":55},[45,99785,47614],{"class":5366},[45,99787,59],{"class":51},[45,99789,495],{"class":79},[45,99791,139],{"class":55},[45,99793,99794],{"class":47,"line":1915},[45,99795,95864],{"class":337},[45,99797,99798],{"class":47,"line":1929},[45,99799,94028],{"class":62},[45,99801,99802],{"class":47,"line":1934},[45,99803,99804],{"class":62},"[array([[ 1,  2],\n",[45,99806,99807],{"class":47,"line":2727},[45,99808,99809],{"class":62},"        [ 7,  8],\n",[45,99811,99812],{"class":47,"line":2741},[45,99813,99814],{"class":62},"        [13, 14],\n",[45,99816,99817],{"class":47,"line":2749},[45,99818,99819],{"class":62},"        [19, 20],\n",[45,99821,99822],{"class":47,"line":2754},[45,99823,99824],{"class":62},"        [25, 26],\n",[45,99826,99827],{"class":47,"line":2760},[45,99828,99829],{"class":62},"        [31, 32]]),\n",[45,99831,99832],{"class":47,"line":2766},[45,99833,99834],{"class":62}," array([[ 3,  4],\n",[45,99836,99837],{"class":47,"line":2771},[45,99838,99839],{"class":62},"        [ 9, 10],\n",[45,99841,99842],{"class":47,"line":8098},[45,99843,99844],{"class":62},"        [15, 16],\n",[45,99846,99847],{"class":47,"line":8122},[45,99848,99849],{"class":62},"        [21, 22],\n",[45,99851,99852],{"class":47,"line":8127},[45,99853,99854],{"class":62},"        [27, 28],\n",[45,99856,99857],{"class":47,"line":8133},[45,99858,99859],{"class":62},"        [33, 34]]),\n",[45,99861,99862],{"class":47,"line":8160},[45,99863,99864],{"class":62}," array([[ 5,  6],\n",[45,99866,99867],{"class":47,"line":8165},[45,99868,99869],{"class":62},"        [11, 12],\n",[45,99871,99872],{"class":47,"line":8171},[45,99873,99874],{"class":62},"        [17, 18],\n",[45,99876,99877],{"class":47,"line":8183},[45,99878,99879],{"class":62},"        [23, 24],\n",[45,99881,99882],{"class":47,"line":8195},[45,99883,99884],{"class":62},"        [29, 30],\n",[45,99886,99887],{"class":47,"line":8207},[45,99888,99889],{"class":62},"        [35, 36]])]\n",[45,99891,99892],{"class":47,"line":9866},[45,99893,99714],{"class":62},[45,99895,99896],{"class":47,"line":9890},[45,99897,99574],{"class":337},[45,99899,99900,99902,99904,99906,99908,99910,99912,99914,99916],{"class":47,"line":9913},[45,99901,99723],{"class":55},[45,99903,495],{"class":79},[45,99905,655],{"class":55},[45,99907,356],{"class":79},[45,99909,41709],{"class":55},[45,99911,47614],{"class":5366},[45,99913,59],{"class":51},[45,99915,495],{"class":79},[45,99917,139],{"class":55},[45,99919,99920],{"class":47,"line":9937},[45,99921,93664],{"class":337},[45,99923,99924],{"class":47,"line":9942},[45,99925,94028],{"class":62},[45,99927,99928],{"class":47,"line":9947},[45,99929,99930],{"class":62},"[array([[ 1],\n",[45,99932,99933],{"class":47,"line":9952},[45,99934,99935],{"class":62},"        [ 7],\n",[45,99937,99938],{"class":47,"line":9961},[45,99939,99940],{"class":62},"        [13],\n",[45,99942,99943],{"class":47,"line":9966},[45,99944,99945],{"class":62},"        [19],\n",[45,99947,99948],{"class":47,"line":9972},[45,99949,99950],{"class":62},"        [25],\n",[45,99952,99953],{"class":47,"line":9993},[45,99954,99955],{"class":62},"        [31]]),\n",[45,99957,99958],{"class":47,"line":9999},[45,99959,99960],{"class":62}," array([[ 2],\n",[45,99962,99963],{"class":47,"line":10013},[45,99964,99965],{"class":62},"        [ 8],\n",[45,99967,99968],{"class":47,"line":10019},[45,99969,99970],{"class":62},"        [14],\n",[45,99972,99973],{"class":47,"line":10046},[45,99974,99975],{"class":62},"        [20],\n",[45,99977,99978],{"class":47,"line":10055},[45,99979,99980],{"class":62},"        [26],\n",[45,99982,99983],{"class":47,"line":10061},[45,99984,99985],{"class":62},"        [32]]),\n",[45,99987,99988],{"class":47,"line":10069},[45,99989,99990],{"class":62}," array([[ 3,  4,  5,  6],\n",[45,99992,99993],{"class":47,"line":10074},[45,99994,99995],{"class":62},"        [ 9, 10, 11, 12],\n",[45,99997,99998],{"class":47,"line":16753},[45,99999,100000],{"class":62},"        [15, 16, 17, 18],\n",[45,100002,100003],{"class":47,"line":16759},[45,100004,100005],{"class":62},"        [21, 22, 23, 24],\n",[45,100007,100008],{"class":47,"line":16782},[45,100009,100010],{"class":62},"        [27, 28, 29, 30],\n",[45,100012,100013],{"class":47,"line":16788},[45,100014,100015],{"class":62},"        [33, 34, 35, 36]])]\n",[45,100017,100018],{"class":47,"line":16811},[45,100019,94028],{"class":62},[45,100021,100022],{"class":47,"line":16825},[45,100023,100024],{"class":337},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[45,100026,100027,100030,100032],{"class":47,"line":16845},[45,100028,100029],{"class":55},"np.vsplit(aa,",[45,100031,350],{"class":79},[45,100033,139],{"class":55},[45,100035,100036],{"class":47,"line":16851},[45,100037,93664],{"class":337},[45,100039,100040],{"class":47,"line":16862},[45,100041,94028],{"class":62},[45,100043,100044],{"class":47,"line":16885},[45,100045,99684],{"class":62},[45,100047,100048],{"class":47,"line":16907},[45,100049,99689],{"class":62},[45,100051,100052],{"class":47,"line":16912},[45,100053,99694],{"class":62},[45,100055,100056],{"class":47,"line":16918},[45,100057,99699],{"class":62},[45,100059,100060],{"class":47,"line":16932},[45,100061,99704],{"class":62},[45,100063,100064],{"class":47,"line":16945},[45,100065,99709],{"class":62},[45,100067,100068],{"class":47,"line":16950},[45,100069,94028],{"class":62},[45,100071,100072,100075,100077],{"class":47,"line":16964},[45,100073,100074],{"class":55},"np.hsplit(aa,",[45,100076,350],{"class":79},[45,100078,139],{"class":55},[45,100080,100081],{"class":47,"line":16969},[45,100082,93664],{"class":337},[45,100084,100085],{"class":47,"line":16975},[45,100086,94028],{"class":62},[45,100088,100089],{"class":47,"line":16980},[45,100090,99804],{"class":62},[45,100092,100093],{"class":47,"line":16994},[45,100094,99809],{"class":62},[45,100096,100097],{"class":47,"line":16999},[45,100098,99814],{"class":62},[45,100100,100101],{"class":47,"line":17004},[45,100102,99819],{"class":62},[45,100104,100105],{"class":47,"line":17018},[45,100106,99824],{"class":62},[45,100108,100109],{"class":47,"line":17030},[45,100110,99829],{"class":62},[45,100112,100113],{"class":47,"line":17035},[45,100114,99834],{"class":62},[45,100116,100117],{"class":47,"line":17048},[45,100118,99839],{"class":62},[45,100120,100121],{"class":47,"line":17053},[45,100122,99844],{"class":62},[45,100124,100125],{"class":47,"line":17058},[45,100126,99849],{"class":62},[45,100128,100129],{"class":47,"line":17063},[45,100130,99854],{"class":62},[45,100132,100133],{"class":47,"line":17076},[45,100134,99859],{"class":62},[45,100136,100137],{"class":47,"line":17081},[45,100138,99864],{"class":62},[45,100140,100141],{"class":47,"line":32733},[45,100142,99869],{"class":62},[45,100144,100145],{"class":47,"line":32739},[45,100146,99874],{"class":62},[45,100148,100149],{"class":47,"line":32745},[45,100150,99879],{"class":62},[45,100152,100153],{"class":47,"line":32751},[45,100154,99884],{"class":62},[45,100156,100157],{"class":47,"line":32757},[45,100158,99889],{"class":62},[45,100160,100161],{"class":47,"line":32768},[45,100162,94028],{"class":62},[45,100164,100165,100168,100170,100172,100174],{"class":47,"line":32774},[45,100166,100167],{"class":55},"np.vsplit(aa,[",[45,100169,356],{"class":79},[45,100171,655],{"class":55},[45,100173,596],{"class":79},[45,100175,4807],{"class":55},[45,100177,100178],{"class":47,"line":32794},[45,100179,93664],{"class":337},[45,100181,100182],{"class":47,"line":32800},[45,100183,94028],{"class":62},[45,100185,100186],{"class":47,"line":32811},[45,100187,99684],{"class":62},[45,100189,100190],{"class":47,"line":32817},[45,100191,99689],{"class":62},[45,100193,100194],{"class":47,"line":32823},[45,100195,99694],{"class":62},[45,100197,100198],{"class":47,"line":32829},[45,100199,99756],{"class":62},[45,100201,100202],{"class":47,"line":32835},[45,100203,99761],{"class":62},[45,100205,100206],{"class":47,"line":32841},[45,100207,99766],{"class":62},[45,100209,100210],{"class":47,"line":32847},[45,100211,99714],{"class":62},[196,100213,100214],{},"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":25,"searchDepth":66,"depth":66,"links":100216},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99482,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100223,"title":100224,"body":100225,"description":204,"extension":205,"meta":100719,"navigation":207,"path":100720,"seo":100721,"stem":100722,"__hash__":100723},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100226,"toc":100710},[100227,100230,100233,100258,100262,100321,100373,100377,100379,100415,100469,100471,100509,100580,100584,100589,100593,100596,100629,100632,100636,100639,100642,100645,100648,100653,100657,100660,100663,100666,100669,100674,100678,100683,100686,100707],[10,100228,100224],{"id":100229},"_9数学函数",[20,100231,100232],{},"补充回顾：python的列表推导式",[36,100234,100236],{"className":30478,"code":100235,"language":30480,"meta":25,"style":25},"[1\u002Fi for i in a]\n",[42,100237,100238],{"__ignoreMap":25},[45,100239,100240,100242,100244,100246,100249,100251,100253,100255],{"class":47,"line":48},[45,100241,1167],{"class":55},[45,100243,495],{"class":79},[45,100245,861],{"class":51},[45,100247,100248],{"class":55},"i ",[45,100250,3175],{"class":51},[45,100252,9588],{"class":55},[45,100254,26143],{"class":51},[45,100256,100257],{"class":55}," a]\n",[15,100259,100261],{"id":100260},"_91-求倒数","9.1 求倒数",[36,100263,100265],{"className":30478,"code":100264,"language":30480,"meta":25,"style":25},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[42,100266,100267,100272,100300,100312],{"__ignoreMap":25},[45,100268,100269],{"class":47,"line":48},[45,100270,100271],{"class":337},"#数组求倒数\n",[45,100273,100274,100276,100278,100280,100282,100284,100286,100288,100290,100292,100294,100296,100298],{"class":47,"line":66},[45,100275,516],{"class":55},[45,100277,59],{"class":51},[45,100279,1167],{"class":55},[45,100281,495],{"class":79},[45,100283,655],{"class":55},[45,100285,356],{"class":79},[45,100287,655],{"class":55},[45,100289,350],{"class":79},[45,100291,655],{"class":55},[45,100293,570],{"class":79},[45,100295,655],{"class":55},[45,100297,596],{"class":79},[45,100299,33346],{"class":55},[45,100301,100302,100304,100306,100309],{"class":47,"line":1331},[45,100303,540],{"class":55},[45,100305,59],{"class":51},[45,100307,100308],{"class":55},"np.array(a)",[45,100310,100311],{"class":337},"#将列表转换为数组\n",[45,100313,100314,100316,100318],{"class":47,"line":1346},[45,100315,495],{"class":79},[45,100317,861],{"class":51},[45,100319,100320],{"class":55},"b\n",[36,100322,100324],{"className":30478,"code":100323,"language":30480,"meta":25,"style":25},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[42,100325,100326,100354,100363,100368],{"__ignoreMap":25},[45,100327,100328,100330,100332,100334,100336,100338,100340,100342,100344,100346,100348,100350,100352],{"class":47,"line":48},[45,100329,516],{"class":55},[45,100331,59],{"class":51},[45,100333,1167],{"class":55},[45,100335,495],{"class":79},[45,100337,655],{"class":55},[45,100339,356],{"class":79},[45,100341,655],{"class":55},[45,100343,350],{"class":79},[45,100345,655],{"class":55},[45,100347,570],{"class":79},[45,100349,655],{"class":55},[45,100351,596],{"class":79},[45,100353,33346],{"class":55},[45,100355,100356,100358,100360],{"class":47,"line":66},[45,100357,540],{"class":55},[45,100359,59],{"class":51},[45,100361,100362],{"class":55},"np.array(a)\n",[45,100364,100365],{"class":47,"line":1331},[45,100366,100367],{"class":337},"#调用numpy中的函数reciprocal()\n",[45,100369,100370],{"class":47,"line":1346},[45,100371,100372],{"class":55},"np.reciprocal(b)\n",[15,100374,100376],{"id":100375},"_92-求平方","9.2 求平方",[20,100378,94630],{},[36,100380,100382],{"className":30478,"code":100381,"language":30480,"meta":25,"style":25},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[42,100383,100384,100389,100394,100410],{"__ignoreMap":25},[45,100385,100386],{"class":47,"line":48},[45,100387,100388],{"class":337},"#square()，求平方\n",[45,100390,100391],{"class":47,"line":66},[45,100392,100393],{"class":337},"#一维数组\n",[45,100395,100396,100398,100400,100402,100404,100406,100408],{"class":47,"line":1331},[45,100397,516],{"class":55},[45,100399,59],{"class":51},[45,100401,93102],{"class":55},[45,100403,495],{"class":79},[45,100405,655],{"class":55},[45,100407,723],{"class":79},[45,100409,139],{"class":55},[45,100411,100412],{"class":47,"line":1346},[45,100413,100414],{"class":55},"np.square(a)\n",[36,100416,100418],{"className":30478,"code":100417,"language":30480,"meta":25,"style":25},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[42,100419,100420,100425,100430,100451],{"__ignoreMap":25},[45,100421,100422],{"class":47,"line":48},[45,100423,100424],{"class":337},"#或者通过循环遍历的形式来计算\n",[45,100426,100427],{"class":47,"line":66},[45,100428,100429],{"class":337},"#这是一个列表\n",[45,100431,100432,100435,100437,100439,100441,100443,100445,100448],{"class":47,"line":1331},[45,100433,100434],{"class":55},"[i",[45,100436,732],{"class":51},[45,100438,100248],{"class":55},[45,100440,3175],{"class":51},[45,100442,9588],{"class":55},[45,100444,26143],{"class":51},[45,100446,100447],{"class":55}," a]",[45,100449,100450],{"class":337},"#这个求完之后在数列当中\n",[45,100452,100453,100456,100458,100460,100462,100464,100466],{"class":47,"line":1346},[45,100454,100455],{"class":55},"np.array([i",[45,100457,732],{"class":51},[45,100459,100248],{"class":55},[45,100461,3175],{"class":51},[45,100463,9588],{"class":55},[45,100465,26143],{"class":51},[45,100467,100468],{"class":55}," a])\n",[20,100470,93391],{},[36,100472,100474],{"className":30478,"code":100473,"language":30480,"meta":25,"style":25},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[42,100475,100476,100480,100504],{"__ignoreMap":25},[45,100477,100478],{"class":47,"line":48},[45,100479,93401],{"class":337},[45,100481,100482,100484,100486,100488,100490,100492,100494,100496,100498,100500,100502],{"class":47,"line":66},[45,100483,93406],{"class":55},[45,100485,59],{"class":51},[45,100487,93102],{"class":55},[45,100489,495],{"class":79},[45,100491,655],{"class":55},[45,100493,800],{"class":79},[45,100495,93107],{"class":55},[45,100497,570],{"class":79},[45,100499,655],{"class":55},[45,100501,350],{"class":79},[45,100503,139],{"class":55},[45,100505,100506],{"class":47,"line":1331},[45,100507,100508],{"class":55},"np.square(aa)\n",[36,100510,100512],{"className":30478,"code":100511,"language":30480,"meta":25,"style":25},"#传统的方式\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",[42,100513,100514,100519,100528,100544,100560,100575],{"__ignoreMap":25},[45,100515,100516],{"class":47,"line":48},[45,100517,100518],{"class":337},"#传统的方式\n",[45,100520,100521,100523,100525],{"class":47,"line":66},[45,100522,98287],{"class":55},[45,100524,59],{"class":51},[45,100526,100527],{"class":55},"np.empty_like(aa)\n",[45,100529,100530,100532,100534,100536,100538,100540,100542],{"class":47,"line":1331},[45,100531,3175],{"class":51},[45,100533,9588],{"class":55},[45,100535,26143],{"class":51},[45,100537,32543],{"class":79},[45,100539,282],{"class":55},[45,100541,570],{"class":79},[45,100543,30886],{"class":55},[45,100545,100546,100548,100550,100552,100554,100556,100558],{"class":47,"line":1346},[45,100547,3351],{"class":51},[45,100549,9650],{"class":55},[45,100551,26143],{"class":51},[45,100553,32543],{"class":79},[45,100555,282],{"class":55},[45,100557,350],{"class":79},[45,100559,30886],{"class":55},[45,100561,100562,100565,100567,100570,100572],{"class":47,"line":1352},[45,100563,100564],{"class":55},"        bb[i,j]",[45,100566,59],{"class":51},[45,100568,100569],{"class":55},"aa[i,j]",[45,100571,732],{"class":51},[45,100573,100574],{"class":55},"aa[i,j]\n",[45,100576,100577],{"class":47,"line":1366},[45,100578,100579],{"class":55},"bb\n",[15,100581,100583],{"id":100582},"_93-求各元素的符号","9.3 求各元素的符号",[20,100585,100586],{},[23,100587],{"alt":25,"src":100588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[15,100590,100592],{"id":100591},"_94-modf函数","9.4 modf函数",[20,100594,100595],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[36,100597,100599],{"className":30478,"code":100598,"language":30480,"meta":25,"style":25},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[42,100600,100601,100624],{"__ignoreMap":25},[45,100602,100603,100605,100607,100609,100611,100613,100615,100617,100619,100622],{"class":47,"line":48},[45,100604,516],{"class":55},[45,100606,59],{"class":51},[45,100608,93102],{"class":55},[45,100610,809],{"class":51},[45,100612,723],{"class":79},[45,100614,655],{"class":55},[45,100616,723],{"class":79},[45,100618,655],{"class":55},[45,100620,100621],{"class":79},"0.3",[45,100623,139],{"class":55},[45,100625,100626],{"class":47,"line":66},[45,100627,100628],{"class":55},"np.modf(a)\n",[20,100630,100631],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[15,100633,100635],{"id":100634},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[20,100637,100638],{},"np.cell()",[20,100640,100641],{},"np.floor()",[20,100643,100644],{},"np.rint()",[20,100646,100647],{},"对各元素分别向上取整、向下取整、四舍五入",[20,100649,100650],{},[23,100651],{"alt":25,"src":100652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[15,100654,100656],{"id":100655},"_96-around函数","9.6 around()函数",[20,100658,100659],{},"around()函数也可以实现对数的小数位数进行操作",[20,100661,100662],{},"其中的参数：",[20,100664,100665],{},"1.要传的数组",[20,100667,100668],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[20,100670,100671],{},[23,100672],{"alt":25,"src":100673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[15,100675,100677],{"id":100676},"_97-三角函数","9.7 三角函数",[20,100679,100680],{},[23,100681],{"alt":25,"src":100682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[20,100684,100685],{},"引入图像模块非常重要",[36,100687,100689],{"className":30478,"code":100688,"language":30480,"meta":25,"style":25},"from matplotlib import pyplot as plt\n",[42,100690,100691],{"__ignoreMap":25},[45,100692,100693,100695,100698,100700,100703,100705],{"class":47,"line":48},[45,100694,30837],{"class":51},[45,100696,100697],{"class":55}," matplotlib ",[45,100699,30492],{"class":51},[45,100701,100702],{"class":55}," pyplot ",[45,100704,31483],{"class":51},[45,100706,31537],{"class":55},[196,100708,100709],{},"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":25,"searchDepth":66,"depth":66,"links":100711},[100712,100713,100714,100715,100716,100717,100718],{"id":100260,"depth":66,"text":100261},{"id":100375,"depth":66,"text":100376},{"id":100582,"depth":66,"text":100583},{"id":100591,"depth":66,"text":100592},{"id":100634,"depth":66,"text":100635},{"id":100655,"depth":66,"text":100656},{"id":100676,"depth":66,"text":100677},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100224,"description":204},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100725,"title":100726,"body":100727,"description":204,"extension":205,"meta":100731,"navigation":207,"path":100732,"seo":100733,"stem":100734,"__hash__":100735},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100728,"toc":100729},[],{"title":25,"searchDepth":66,"depth":66,"links":100730},[],{"category":50520},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100726,"description":204},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100737,"title":100738,"body":100739,"description":25,"extension":205,"meta":102747,"navigation":207,"path":102748,"seo":102749,"stem":102750,"__hash__":102751},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100740,"toc":102723},[100741,100744,100748,100751,100754,100760,100763,100786,100789,100823,100826,100867,100871,100874,100967,100970,101014,101017,101034,101037,101051,101054,101057,101102,101105,101142,101146,101149,101155,101160,101180,101184,101187,101253,101256,101274,101278,101281,101310,101320,101326,101330,101333,101339,101350,101354,101357,101387,101390,101670,101673,101676,101687,101690,101693,101715,101722,101725,101743,101746,101749,101763,101771,101774,101800,101806,101809,101812,101822,101834,101854,101863,101883,101893,101917,101930,101944,101949,101990,102007,102032,102044,102064,102070,102115,102134,102151,102164,102180,102187,102199,102208,102243,102264,102289,102302,102326,102341,102366,102369,102390,102399,102402,102413,102417,102420,102426,102438,102445,102449,102452,102464,102467,102481,102484,102494,102504,102507,102547,102550,102554,102560,102563,102577,102581,102584,102617,102621,102624,102647,102655,102658,102664,102670,102673,102676,102704,102708,102711,102717,102720],[10,100742,100738],{"id":100743},"_1环境安装与第一个-mujoco-程序",[15,100745,100747],{"id":100746},"_1目标说明","1.目标说明",[20,100749,100750],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[20,100752,100753],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[36,100755,100758],{"className":100756,"code":100757,"language":5337,"meta":25},[5335],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[42,100759,100757],{"__ignoreMap":25},[20,100761,100762],{},"需要掌握:",[233,100764,100765,100768,100771,100776,100781],{},[169,100766,100767],{},"Fedora 44 下 MuJoCo 的系统依赖",[169,100769,100770],{},"Python 虚拟环境创建",[169,100772,100773],{},[42,100774,100775],{},"mujoco.MjModel",[169,100777,100778],{},[42,100779,100780],{},"mujoco.MjData",[169,100782,100783],{},[42,100784,100785],{},"mujoco.mj_step(model, data)",[20,100787,100788],{},"MuJoCo 中最重要的两个对象:",[415,100790,100791,100801],{},[418,100792,100793],{},[421,100794,100795,100798],{},[424,100796,100797],{"align":23885},"对象",[424,100799,100800],{"align":23885},"含义",[462,100802,100803,100813],{},[421,100804,100805,100810],{},[467,100806,100807],{"align":23885},[42,100808,100809],{},"MjModel",[467,100811,100812],{"align":23885},"模型结构，来自 XML，基本不随时间变化",[421,100814,100815,100820],{},[467,100816,100817],{"align":23885},[42,100818,100819],{},"MjData",[467,100821,100822],{"align":23885},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[20,100824,100825],{},"可以先用一个类比理解：",[415,100827,100828,100838],{},[418,100829,100830],{},[421,100831,100832,100835],{},[424,100833,100834],{"align":23885},"类比",[424,100836,100837],{"align":23885},"MuJoCo 对象",[462,100839,100840,100849,100858],{},[421,100841,100842,100845],{},[467,100843,100844],{"align":23885},"游戏地图和角色配置",[467,100846,100847],{"align":23885},[42,100848,100809],{},[421,100850,100851,100854],{},[467,100852,100853],{"align":23885},"游戏运行到当前帧的状态",[467,100855,100856],{"align":23885},[42,100857,100819],{},[421,100859,100860,100863],{},[467,100861,100862],{"align":23885},"前进一帧",[467,100864,100865],{"align":23885},[42,100866,100785],{},[15,100868,100870],{"id":100869},"_2环境与依赖安装","2.环境与依赖安装",[20,100872,100873],{},"Fedora 44 系统依赖:",[36,100875,100877],{"className":38,"code":100876,"language":40,"meta":25,"style":25},"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",[42,100878,100879,100891,100904,100917,100927,100937,100956],{"__ignoreMap":25},[45,100880,100881,100883,100885,100887,100889],{"class":47,"line":48},[45,100882,24724],{"class":69},[45,100884,26415],{"class":62},[45,100886,23981],{"class":62},[45,100888,26500],{"class":79},[45,100890,24826],{"class":79},[45,100892,100893,100896,100899,100902],{"class":47,"line":66},[45,100894,100895],{"class":62},"  python3",[45,100897,100898],{"class":62}," python3-pip",[45,100900,100901],{"class":62}," python3-virtualenv",[45,100903,24826],{"class":79},[45,100905,100906,100909,100912,100915],{"class":47,"line":1331},[45,100907,100908],{"class":62},"  mesa-libGL",[45,100910,100911],{"class":62}," mesa-libGLU",[45,100913,100914],{"class":62}," mesa-dri-drivers",[45,100916,24826],{"class":79},[45,100918,100919,100922,100925],{"class":47,"line":1346},[45,100920,100921],{"class":62},"  libglvnd-glx",[45,100923,100924],{"class":62}," libglvnd-opengl",[45,100926,24826],{"class":79},[45,100928,100929,100932,100935],{"class":47,"line":1352},[45,100930,100931],{"class":62},"  glfw",[45,100933,100934],{"class":62}," glfw-devel",[45,100936,24826],{"class":79},[45,100938,100939,100942,100945,100948,100951,100954],{"class":47,"line":1366},[45,100940,100941],{"class":62},"  libX11",[45,100943,100944],{"class":62}," libXcursor",[45,100946,100947],{"class":62}," libXi",[45,100949,100950],{"class":62}," libXinerama",[45,100952,100953],{"class":62}," libXrandr",[45,100955,24826],{"class":79},[45,100957,100958,100961,100964],{"class":47,"line":1372},[45,100959,100960],{"class":62},"  gcc",[45,100962,100963],{"class":62}," gcc-c++",[45,100965,100966],{"class":62}," make\n",[20,100968,100969],{},"创建 Python 环境:",[36,100971,100973],{"className":38,"code":100972,"language":40,"meta":25,"style":25},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[42,100974,100975,100989,100997],{"__ignoreMap":25},[45,100976,100977,100980,100983,100986],{"class":47,"line":48},[45,100978,100979],{"class":69},"python3",[45,100981,100982],{"class":79}," -m",[45,100984,100985],{"class":62}," venv",[45,100987,100988],{"class":62}," .venv\n",[45,100990,100991,100994],{"class":47,"line":66},[45,100992,100993],{"class":79},"source",[45,100995,100996],{"class":62}," .venv\u002Fbin\u002Factivate\n",[45,100998,100999,101001,101003,101006,101008,101011],{"class":47,"line":1331},[45,101000,30480],{"class":69},[45,101002,100982],{"class":79},[45,101004,101005],{"class":62}," pip",[45,101007,23981],{"class":62},[45,101009,101010],{"class":79}," --upgrade",[45,101012,101013],{"class":62}," pip\n",[20,101015,101016],{},"pip 安装:",[36,101018,101020],{"className":38,"code":101019,"language":40,"meta":25,"style":25},"pip install \"mujoco>=2.3\" numpy\n",[42,101021,101022],{"__ignoreMap":25},[45,101023,101024,101026,101028,101031],{"class":47,"line":48},[45,101025,23978],{"class":69},[45,101027,23981],{"class":62},[45,101029,101030],{"class":62}," \"mujoco>=2.3\"",[45,101032,101033],{"class":62}," numpy\n",[20,101035,101036],{},"安装完成后，先做最小检查：",[36,101038,101040],{"className":38,"code":101039,"language":40,"meta":25,"style":25},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[42,101041,101042],{"__ignoreMap":25},[45,101043,101044,101046,101048],{"class":47,"line":48},[45,101045,30480],{"class":69},[45,101047,30458],{"class":79},[45,101049,101050],{"class":62}," \"import mujoco; print(mujoco.__version__)\"\n",[20,101052,101053],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[20,101055,101056],{},"conda 安装:",[36,101058,101060],{"className":38,"code":101059,"language":40,"meta":25,"style":25},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[42,101061,101062,101082,101092],{"__ignoreMap":25},[45,101063,101064,101066,101068,101070,101073,101076,101079],{"class":47,"line":48},[45,101065,30430],{"class":69},[45,101067,29276],{"class":62},[45,101069,133],{"class":79},[45,101071,101072],{"class":62}," mujoco-study",[45,101074,101075],{"class":62}," python=",[45,101077,101078],{"class":79},"3.10",[45,101080,101081],{"class":79}," -y\n",[45,101083,101084,101086,101089],{"class":47,"line":66},[45,101085,30430],{"class":69},[45,101087,101088],{"class":62}," activate",[45,101090,101091],{"class":62}," mujoco-study\n",[45,101093,101094,101096,101098,101100],{"class":47,"line":1331},[45,101095,23978],{"class":69},[45,101097,23981],{"class":62},[45,101099,101030],{"class":62},[45,101101,101033],{"class":62},[20,101103,101104],{},"版本冲突说明:",[233,101106,101107,101113,101123,101132],{},[169,101108,101109,101110,28485],{},"不要安装 ",[42,101111,101112],{},"mujoco-py",[169,101114,101115,101116,101118,101119,101122],{},"如果旧项目里同时安装了 ",[42,101117,101112],{}," 和 ",[42,101120,101121],{},"mujoco","，建议新建干净虚拟环境。",[169,101124,101125,101128,101129,28485],{},[42,101126,101127],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[42,101130,101131],{},"~\u002F.mujoco\u002Fmujoco210",[169,101133,101134,101135,82639,101138,101141],{},"离屏渲染可能涉及 OpenGL 后端，",[42,101136,101137],{},"MUJOCO_GL=egl",[42,101139,101140],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[15,101143,101145],{"id":101144},"_3核心概念解释","3.核心概念解释",[20,101147,101148],{},"MuJoCo 的基本执行流程:",[36,101150,101153],{"className":101151,"code":101152,"language":5337,"meta":25},[5335],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[42,101154,101152],{"__ignoreMap":25},[20,101156,101157,101159],{},[42,101158,100809],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[20,101161,101162,101164,101165,490,101168,490,101171,490,101174,490,101177,28485],{},[42,101163,100819],{}," 存放仿真运行时状态，例如 ",[42,101166,101167],{},"data.time",[42,101169,101170],{},"data.qpos",[42,101172,101173],{},"data.qvel",[42,101175,101176],{},"data.ctrl",[42,101178,101179],{},"data.xpos",[249,101181,101183],{"id":101182},"xml-是什么","XML 是什么",[20,101185,101186],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[36,101188,101190],{"className":53167,"code":101189,"language":53169,"meta":25,"style":25},"\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",[42,101191,101192,101214,101245],{"__ignoreMap":25},[45,101193,101194,101196,101198,101200,101202,101204,101207,101209,101212],{"class":47,"line":48},[45,101195,1187],{"class":55},[45,101197,51900],{"class":51400},[45,101199,15069],{"class":69},[45,101201,59],{"class":55},[45,101203,53591],{"class":62},[45,101205,101206],{"class":69}," pos",[45,101208,59],{"class":55},[45,101210,101211],{"class":62},"\"0 0 1\"",[45,101213,51407],{"class":55},[45,101215,101216,101218,101221,101223,101225,101228,101230,101232,101234,101237,101239,101242],{"class":47,"line":66},[45,101217,52244],{"class":55},[45,101219,101220],{"class":51400},"geom",[45,101222,15069],{"class":69},[45,101224,59],{"class":55},[45,101226,101227],{"class":62},"\"box_geom\"",[45,101229,53924],{"class":69},[45,101231,59],{"class":55},[45,101233,53591],{"class":62},[45,101235,101236],{"class":69}," size",[45,101238,59],{"class":55},[45,101240,101241],{"class":62},"\"0.1 0.1 0.1\"",[45,101243,101244],{"class":55},"\u002F>\n",[45,101246,101247,101249,101251],{"class":47,"line":1331},[45,101248,51885],{"class":55},[45,101250,51900],{"class":51400},[45,101252,51407],{"class":55},[20,101254,101255],{},"这段意思是：",[233,101257,101258,101264,101271],{},[169,101259,101260,101261,101263],{},"创建一个叫 ",[42,101262,53814],{}," 的刚体。",[169,101265,101266,101267,101270],{},"它初始放在 ",[42,101268,101269],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[169,101272,101273],{},"它里面有一个盒子形状的几何体。",[249,101275,101277],{"id":101276},"timestep-是什么","timestep 是什么",[20,101279,101280],{},"XML 里的：",[36,101282,101284],{"className":53167,"code":101283,"language":53169,"meta":25,"style":25},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[42,101285,101286],{"__ignoreMap":25},[45,101287,101288,101290,101292,101295,101297,101300,101303,101305,101308],{"class":47,"line":48},[45,101289,1187],{"class":55},[45,101291,69266],{"class":51400},[45,101293,101294],{"class":69}," timestep",[45,101296,59],{"class":55},[45,101298,101299],{"class":62},"\"0.01\"",[45,101301,101302],{"class":69}," gravity",[45,101304,59],{"class":55},[45,101306,101307],{"class":62},"\"0 0 -9.81\"",[45,101309,101244],{"class":55},[20,101311,101312,101313,101316,101317,101319],{},"表示每调用一次 ",[42,101314,101315],{},"mj_step","，仿真时间前进 ",[42,101318,39086],{}," 秒。循环 100 次，大约就是 1 秒：",[36,101321,101324],{"className":101322,"code":101323,"language":5337,"meta":25},[5335],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[42,101325,101323],{"__ignoreMap":25},[249,101327,101329],{"id":101328},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[20,101331,101332],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[36,101334,101337],{"className":101335,"code":101336,"language":5337,"meta":25},[5335],"x y z qw qx qy qz\n",[42,101338,101336],{"__ignoreMap":25},[20,101340,101341,101342,101345,101346,101349],{},"表示一个自由刚体的位置和姿态。其中 ",[42,101343,101344],{},"x y z"," 是位置，",[42,101347,101348],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[15,101351,101353],{"id":101352},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[20,101355,101356],{},"新建文件:",[36,101358,101360],{"className":38,"code":101359,"language":40,"meta":25,"style":25},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[42,101361,101362,101372,101379],{"__ignoreMap":25},[45,101363,101364,101367,101369],{"class":47,"line":48},[45,101365,101366],{"class":69},"mkdir",[45,101368,29316],{"class":79},[45,101370,101371],{"class":62}," mujoco_tutorial\n",[45,101373,101374,101377],{"class":47,"line":66},[45,101375,101376],{"class":79},"cd",[45,101378,101371],{"class":62},[45,101380,101381,101384],{"class":47,"line":1331},[45,101382,101383],{"class":69},"touch",[45,101385,101386],{"class":62}," ch1_first_sim.py\n",[20,101388,101389],{},"写入:",[36,101391,101393],{"className":30478,"code":101392,"language":30480,"meta":25,"style":25},"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",[42,101394,101395,101402,101406,101410,101420,101425,101430,101434,101439,101444,101448,101453,101458,101463,101468,101473,101478,101482,101486,101490,101503,101517,101527,101531,101543,101555,101567,101579,101591,101595,101612,101617,101621,101632,101643,101647,101651,101665],{"__ignoreMap":25},[45,101396,101397,101399],{"class":47,"line":48},[45,101398,30492],{"class":51},[45,101400,101401],{"class":55}," mujoco\n",[45,101403,101404],{"class":47,"line":66},[45,101405,2550],{"emptyLinePlaceholder":207},[45,101407,101408],{"class":47,"line":1331},[45,101409,2550],{"emptyLinePlaceholder":207},[45,101411,101412,101415,101417],{"class":47,"line":1346},[45,101413,101414],{"class":79},"XML",[45,101416,13713],{"class":51},[45,101418,101419],{"class":62}," \"\"\"\n",[45,101421,101422],{"class":47,"line":1352},[45,101423,101424],{"class":62},"\u003Cmujoco model=\"first_sim\">\n",[45,101426,101427],{"class":47,"line":1366},[45,101428,101429],{"class":62},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[45,101431,101432],{"class":47,"line":1372},[45,101433,2550],{"emptyLinePlaceholder":207},[45,101435,101436],{"class":47,"line":1463},[45,101437,101438],{"class":62},"  \u003Cworldbody>\n",[45,101440,101441],{"class":47,"line":1469},[45,101442,101443],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[45,101445,101446],{"class":47,"line":1481},[45,101447,2550],{"emptyLinePlaceholder":207},[45,101449,101450],{"class":47,"line":1763},[45,101451,101452],{"class":62},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[45,101454,101455],{"class":47,"line":1768},[45,101456,101457],{"class":62},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[45,101459,101460],{"class":47,"line":1774},[45,101461,101462],{"class":62},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[45,101464,101465],{"class":47,"line":1779},[45,101466,101467],{"class":62},"    \u003C\u002Fbody>\n",[45,101469,101470],{"class":47,"line":1793},[45,101471,101472],{"class":62},"  \u003C\u002Fworldbody>\n",[45,101474,101475],{"class":47,"line":1798},[45,101476,101477],{"class":62},"\u003C\u002Fmujoco>\n",[45,101479,101480],{"class":47,"line":1804},[45,101481,95798],{"class":62},[45,101483,101484],{"class":47,"line":1825},[45,101485,2550],{"emptyLinePlaceholder":207},[45,101487,101488],{"class":47,"line":1830},[45,101489,2550],{"emptyLinePlaceholder":207},[45,101491,101492,101494,101496,101499,101501],{"class":47,"line":1844},[45,101493,32047],{"class":51},[45,101495,2123],{"class":69},[45,101497,101498],{"class":55},"() -> ",[45,101500,95786],{"class":79},[45,101502,3889],{"class":55},[45,101504,101505,101508,101510,101513,101515],{"class":47,"line":1849},[45,101506,101507],{"class":55},"    model ",[45,101509,59],{"class":51},[45,101511,101512],{"class":55}," mujoco.MjModel.from_xml_string(",[45,101514,101414],{"class":79},[45,101516,139],{"class":55},[45,101518,101519,101522,101524],{"class":47,"line":1878},[45,101520,101521],{"class":55},"    data ",[45,101523,59],{"class":51},[45,101525,101526],{"class":55}," mujoco.MjData(model)\n",[45,101528,101529],{"class":47,"line":1883},[45,101530,2550],{"emptyLinePlaceholder":207},[45,101532,101533,101535,101537,101540],{"class":47,"line":1900},[45,101534,31399],{"class":79},[45,101536,282],{"class":55},[45,101538,101539],{"class":62},"\"nq:\"",[45,101541,101542],{"class":55},", model.nq)\n",[45,101544,101545,101547,101549,101552],{"class":47,"line":1905},[45,101546,31399],{"class":79},[45,101548,282],{"class":55},[45,101550,101551],{"class":62},"\"nv:\"",[45,101553,101554],{"class":55},", model.nv)\n",[45,101556,101557,101559,101561,101564],{"class":47,"line":1910},[45,101558,31399],{"class":79},[45,101560,282],{"class":55},[45,101562,101563],{"class":62},"\"nu:\"",[45,101565,101566],{"class":55},", model.nu)\n",[45,101568,101569,101571,101573,101576],{"class":47,"line":1915},[45,101570,31399],{"class":79},[45,101572,282],{"class":55},[45,101574,101575],{"class":62},"\"initial time:\"",[45,101577,101578],{"class":55},", data.time)\n",[45,101580,101581,101583,101585,101588],{"class":47,"line":1929},[45,101582,31399],{"class":79},[45,101584,282],{"class":55},[45,101586,101587],{"class":62},"\"initial qpos:\"",[45,101589,101590],{"class":55},", data.qpos.copy())\n",[45,101592,101593],{"class":47,"line":1934},[45,101594,2550],{"emptyLinePlaceholder":207},[45,101596,101597,101599,101602,101604,101606,101608,101610],{"class":47,"line":2727},[45,101598,3351],{"class":51},[45,101600,101601],{"class":55}," _ ",[45,101603,26143],{"class":51},[45,101605,32543],{"class":79},[45,101607,282],{"class":55},[45,101609,588],{"class":79},[45,101611,30886],{"class":55},[45,101613,101614],{"class":47,"line":2741},[45,101615,101616],{"class":55},"        mujoco.mj_step(model, data)\n",[45,101618,101619],{"class":47,"line":2749},[45,101620,2550],{"emptyLinePlaceholder":207},[45,101622,101623,101625,101627,101630],{"class":47,"line":2754},[45,101624,31399],{"class":79},[45,101626,282],{"class":55},[45,101628,101629],{"class":62},"\"final time:\"",[45,101631,101578],{"class":55},[45,101633,101634,101636,101638,101641],{"class":47,"line":2760},[45,101635,31399],{"class":79},[45,101637,282],{"class":55},[45,101639,101640],{"class":62},"\"final qpos:\"",[45,101642,101590],{"class":55},[45,101644,101645],{"class":47,"line":2766},[45,101646,2550],{"emptyLinePlaceholder":207},[45,101648,101649],{"class":47,"line":2771},[45,101650,2550],{"emptyLinePlaceholder":207},[45,101652,101653,101655,101657,101660,101663],{"class":47,"line":8098},[45,101654,1682],{"class":51},[45,101656,31320],{"class":79},[45,101658,101659],{"class":51}," ==",[45,101661,101662],{"class":62}," \"__main__\"",[45,101664,3889],{"class":55},[45,101666,101667],{"class":47,"line":8122},[45,101668,101669],{"class":55},"    main()\n",[249,101671,101672],{"id":101672},"代码逐段解释",[20,101674,101675],{},"导入库：",[36,101677,101679],{"className":30478,"code":101678,"language":30480,"meta":25,"style":25},"import mujoco\n",[42,101680,101681],{"__ignoreMap":25},[45,101682,101683,101685],{"class":47,"line":48},[45,101684,30492],{"class":51},[45,101686,101401],{"class":55},[20,101688,101689],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[20,101691,101692],{},"定义 XML：",[36,101694,101696],{"className":30478,"code":101695,"language":30480,"meta":25,"style":25},"XML = \"\"\"\n...\n\"\"\"\n",[42,101697,101698,101706,101711],{"__ignoreMap":25},[45,101699,101700,101702,101704],{"class":47,"line":48},[45,101701,101414],{"class":79},[45,101703,13713],{"class":51},[45,101705,101419],{"class":62},[45,101707,101708],{"class":47,"line":66},[45,101709,101710],{"class":62},"...\n",[45,101712,101713],{"class":47,"line":1331},[45,101714,95798],{"class":62},[20,101716,101717,101718,101721],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[42,101719,101720],{},"freejoint"," 的方块。",[20,101723,101724],{},"编译模型：",[36,101726,101728],{"className":30478,"code":101727,"language":30480,"meta":25,"style":25},"model = mujoco.MjModel.from_xml_string(XML)\n",[42,101729,101730],{"__ignoreMap":25},[45,101731,101732,101735,101737,101739,101741],{"class":47,"line":48},[45,101733,101734],{"class":55},"model ",[45,101736,59],{"class":51},[45,101738,101512],{"class":55},[45,101740,101414],{"class":79},[45,101742,139],{"class":55},[20,101744,101745],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[20,101747,101748],{},"创建数据：",[36,101750,101752],{"className":30478,"code":101751,"language":30480,"meta":25,"style":25},"data = mujoco.MjData(model)\n",[42,101753,101754],{"__ignoreMap":25},[45,101755,101756,101759,101761],{"class":47,"line":48},[45,101757,101758],{"class":55},"data ",[45,101760,59],{"class":51},[45,101762,101526],{"class":55},[20,101764,101765,101767,101768,101770],{},[42,101766,33501],{}," 会保存仿真当前状态。刚创建时，时间是 ",[42,101769,469],{},"，方块还在初始位置。",[20,101772,101773],{},"推进仿真：",[36,101775,101777],{"className":30478,"code":101776,"language":30480,"meta":25,"style":25},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[42,101778,101779,101795],{"__ignoreMap":25},[45,101780,101781,101783,101785,101787,101789,101791,101793],{"class":47,"line":48},[45,101782,3175],{"class":51},[45,101784,101601],{"class":55},[45,101786,26143],{"class":51},[45,101788,32543],{"class":79},[45,101790,282],{"class":55},[45,101792,588],{"class":79},[45,101794,30886],{"class":55},[45,101796,101797],{"class":47,"line":66},[45,101798,101799],{"class":55},"    mujoco.mj_step(model, data)\n",[20,101801,101802,101803,101805],{},"每次 ",[42,101804,101315],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[249,101807,101808],{"id":101808},"代码逐行细讲",[20,101810,101811],{},"下面把完整代码按新手视角拆开讲。",[36,101813,101814],{"className":30478,"code":101678,"language":30480,"meta":25,"style":25},[42,101815,101816],{"__ignoreMap":25},[45,101817,101818,101820],{"class":47,"line":48},[45,101819,30492],{"class":51},[45,101821,101401],{"class":55},[20,101823,101824,101826,101827,490,101829,490,101831,28485],{},[42,101825,30492],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[42,101828,100775],{},[42,101830,100780],{},[42,101832,101833],{},"mujoco.mj_step",[36,101835,101836],{"className":30478,"code":101695,"language":30480,"meta":25,"style":25},[42,101837,101838,101846,101850],{"__ignoreMap":25},[45,101839,101840,101842,101844],{"class":47,"line":48},[45,101841,101414],{"class":79},[45,101843,13713],{"class":51},[45,101845,101419],{"class":62},[45,101847,101848],{"class":47,"line":66},[45,101849,101710],{"class":62},[45,101851,101852],{"class":47,"line":1331},[45,101853,95798],{"class":62},[20,101855,101856,101858,101859,101862],{},[42,101857,101414],{}," 是一个变量名。右边的三引号 ",[42,101860,101861],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[36,101864,101865],{"className":53167,"code":101424,"language":53169,"meta":25,"style":25},[42,101866,101867],{"__ignoreMap":25},[45,101868,101869,101871,101873,101876,101878,101881],{"class":47,"line":48},[45,101870,1187],{"class":55},[45,101872,101121],{"class":51400},[45,101874,101875],{"class":69}," model",[45,101877,59],{"class":55},[45,101879,101880],{"class":62},"\"first_sim\"",[45,101882,51407],{"class":55},[20,101884,101885,101886,101889,101890,28485],{},"这是 XML 的根标签。",[42,101887,101888],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[42,101891,101892],{},"first_sim",[36,101894,101895],{"className":53167,"code":101283,"language":53169,"meta":25,"style":25},[42,101896,101897],{"__ignoreMap":25},[45,101898,101899,101901,101903,101905,101907,101909,101911,101913,101915],{"class":47,"line":48},[45,101900,1187],{"class":55},[45,101902,69266],{"class":51400},[45,101904,101294],{"class":69},[45,101906,59],{"class":55},[45,101908,101299],{"class":62},[45,101910,101302],{"class":69},[45,101912,59],{"class":55},[45,101914,101307],{"class":62},[45,101916,101244],{"class":55},[20,101918,101919,101921,101922,101925,101926,101929],{},[42,101920,69266],{}," 用来设置仿真参数。",[42,101923,101924],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[42,101927,101928],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[36,101931,101933],{"className":53167,"code":101932,"language":53169,"meta":25,"style":25},"\u003Cworldbody>\n",[42,101934,101935],{"__ignoreMap":25},[45,101936,101937,101939,101942],{"class":47,"line":48},[45,101938,1187],{"class":55},[45,101940,101941],{"class":51400},"worldbody",[45,101943,51407],{"class":55},[20,101945,101946,101948],{},[42,101947,101941],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[36,101950,101952],{"className":53167,"code":101951,"language":53169,"meta":25,"style":25},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[42,101953,101954],{"__ignoreMap":25},[45,101955,101956,101958,101960,101962,101964,101967,101969,101971,101974,101976,101978,101981,101983,101985,101988],{"class":47,"line":48},[45,101957,1187],{"class":55},[45,101959,101220],{"class":51400},[45,101961,15069],{"class":69},[45,101963,59],{"class":55},[45,101965,101966],{"class":62},"\"floor\"",[45,101968,53924],{"class":69},[45,101970,59],{"class":55},[45,101972,101973],{"class":62},"\"plane\"",[45,101975,101236],{"class":69},[45,101977,59],{"class":55},[45,101979,101980],{"class":62},"\"2 2 0.1\"",[45,101982,78867],{"class":69},[45,101984,59],{"class":55},[45,101986,101987],{"class":62},"\"0.8 0.8 0.8 1\"",[45,101989,101244],{"class":55},[20,101991,101992,101993,101995,101996,101999,102000,102003,102004,102006],{},"这行创建地面。",[42,101994,101220],{}," 是几何体。",[42,101997,101998],{},"name=\"floor\""," 是名字。",[42,102001,102002],{},"type=\"plane\""," 表示平面。",[42,102005,55210],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[36,102008,102010],{"className":53167,"code":102009,"language":53169,"meta":25,"style":25},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[42,102011,102012],{"__ignoreMap":25},[45,102013,102014,102016,102018,102020,102022,102024,102026,102028,102030],{"class":47,"line":48},[45,102015,1187],{"class":55},[45,102017,51900],{"class":51400},[45,102019,15069],{"class":69},[45,102021,59],{"class":55},[45,102023,53591],{"class":62},[45,102025,101206],{"class":69},[45,102027,59],{"class":55},[45,102029,101211],{"class":62},[45,102031,51407],{"class":55},[20,102033,102034,102035,28485,102037,102040,102041,102043],{},"这行创建一个刚体，名字叫 ",[42,102036,53814],{},[42,102038,102039],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[42,102042,101269],{},"，也就是离地面 1 米高。",[36,102045,102047],{"className":53167,"code":102046,"language":53169,"meta":25,"style":25},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[42,102048,102049],{"__ignoreMap":25},[45,102050,102051,102053,102055,102057,102059,102062],{"class":47,"line":48},[45,102052,1187],{"class":55},[45,102054,101720],{"class":51400},[45,102056,15069],{"class":69},[45,102058,59],{"class":55},[45,102060,102061],{"class":62},"\"box_free\"",[45,102063,101244],{"class":55},[20,102065,102066,102067,102069],{},"这行很重要。",[42,102068,101720],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[36,102071,102073],{"className":53167,"code":102072,"language":53169,"meta":25,"style":25},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[42,102074,102075],{"__ignoreMap":25},[45,102076,102077,102079,102081,102083,102085,102087,102089,102091,102093,102095,102097,102099,102102,102104,102106,102108,102110,102113],{"class":47,"line":48},[45,102078,1187],{"class":55},[45,102080,101220],{"class":51400},[45,102082,15069],{"class":69},[45,102084,59],{"class":55},[45,102086,101227],{"class":62},[45,102088,53924],{"class":69},[45,102090,59],{"class":55},[45,102092,53591],{"class":62},[45,102094,101236],{"class":69},[45,102096,59],{"class":55},[45,102098,101241],{"class":62},[45,102100,102101],{"class":69}," mass",[45,102103,59],{"class":55},[45,102105,3828],{"class":62},[45,102107,78867],{"class":69},[45,102109,59],{"class":55},[45,102111,102112],{"class":62},"\"1 0 0 1\"",[45,102114,101244],{"class":55},[20,102116,102117,102118,102121,102122,102125,102126,102129,102130,102133],{},"这行给 box body 添加一个盒子形状。",[42,102119,102120],{},"type=\"box\""," 表示形状是盒子。",[42,102123,102124],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[42,102127,102128],{},"mass=\"1\""," 表示质量是 1。",[42,102131,102132],{},"rgba=\"1 0 0 1\""," 表示红色。",[36,102135,102137],{"className":30478,"code":102136,"language":30480,"meta":25,"style":25},"def main() -> None:\n",[42,102138,102139],{"__ignoreMap":25},[45,102140,102141,102143,102145,102147,102149],{"class":47,"line":48},[45,102142,32047],{"class":51},[45,102144,2123],{"class":69},[45,102146,101498],{"class":55},[45,102148,95786],{"class":79},[45,102150,3889],{"class":55},[20,102152,102153,102155,102156,102159,102160,102163],{},[42,102154,32047],{}," 用来定义函数。这里定义了一个叫 ",[42,102157,102158],{},"main"," 的函数。",[42,102161,102162],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[36,102165,102166],{"className":30478,"code":101727,"language":30480,"meta":25,"style":25},[42,102167,102168],{"__ignoreMap":25},[45,102169,102170,102172,102174,102176,102178],{"class":47,"line":48},[45,102171,101734],{"class":55},[45,102173,59],{"class":51},[45,102175,101512],{"class":55},[45,102177,101414],{"class":79},[45,102179,139],{"class":55},[20,102181,102182,102183,102186],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[42,102184,102185],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[36,102188,102189],{"className":30478,"code":101751,"language":30480,"meta":25,"style":25},[42,102190,102191],{"__ignoreMap":25},[45,102192,102193,102195,102197],{"class":47,"line":48},[45,102194,101758],{"class":55},[45,102196,59],{"class":51},[45,102198,101526],{"class":55},[20,102200,102201,102202,102204,102205,102207],{},"这行创建仿真数据。",[42,102203,33501],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[42,102206,33501],{}," 都会变化。",[36,102209,102211],{"className":30478,"code":102210,"language":30480,"meta":25,"style":25},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[42,102212,102213,102223,102233],{"__ignoreMap":25},[45,102214,102215,102217,102219,102221],{"class":47,"line":48},[45,102216,30515],{"class":79},[45,102218,282],{"class":55},[45,102220,101539],{"class":62},[45,102222,101542],{"class":55},[45,102224,102225,102227,102229,102231],{"class":47,"line":66},[45,102226,30515],{"class":79},[45,102228,282],{"class":55},[45,102230,101551],{"class":62},[45,102232,101554],{"class":55},[45,102234,102235,102237,102239,102241],{"class":47,"line":1331},[45,102236,30515],{"class":79},[45,102238,282],{"class":55},[45,102240,101563],{"class":62},[45,102242,101566],{"class":55},[20,102244,102245,102247,102248,102251,102252,102255,102256,102259,102260,102263],{},[42,102246,30515],{}," 用来输出信息。",[42,102249,102250],{},"model.nq"," 是位置变量数量，",[42,102253,102254],{},"model.nv"," 是速度变量数量，",[42,102257,102258],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[42,102261,102262],{},"nu"," 是 0。",[36,102265,102267],{"className":30478,"code":102266,"language":30480,"meta":25,"style":25},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[42,102268,102269,102279],{"__ignoreMap":25},[45,102270,102271,102273,102275,102277],{"class":47,"line":48},[45,102272,30515],{"class":79},[45,102274,282],{"class":55},[45,102276,101575],{"class":62},[45,102278,101578],{"class":55},[45,102280,102281,102283,102285,102287],{"class":47,"line":66},[45,102282,30515],{"class":79},[45,102284,282],{"class":55},[45,102286,101587],{"class":62},[45,102288,101590],{"class":55},[20,102290,102291,102292,102294,102295,102297,102298,102301],{},"这里打印初始时间和初始位置。",[42,102293,101167],{}," 一开始是 0。",[42,102296,101170],{}," 是位置数组。",[42,102299,102300],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[36,102303,102304],{"className":30478,"code":101776,"language":30480,"meta":25,"style":25},[42,102305,102306,102322],{"__ignoreMap":25},[45,102307,102308,102310,102312,102314,102316,102318,102320],{"class":47,"line":48},[45,102309,3175],{"class":51},[45,102311,101601],{"class":55},[45,102313,26143],{"class":51},[45,102315,32543],{"class":79},[45,102317,282],{"class":55},[45,102319,588],{"class":79},[45,102321,30886],{"class":55},[45,102323,102324],{"class":47,"line":66},[45,102325,101799],{"class":55},[20,102327,102328,102330,102331,102334,102335,102337,102338,102340],{},[42,102329,3175],{}," 是循环。",[42,102332,102333],{},"range(100)"," 表示循环 100 次。",[42,102336,1269],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[42,102339,101315],{},"，仿真就前进一步。",[36,102342,102344],{"className":30478,"code":102343,"language":30480,"meta":25,"style":25},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[42,102345,102346,102356],{"__ignoreMap":25},[45,102347,102348,102350,102352,102354],{"class":47,"line":48},[45,102349,30515],{"class":79},[45,102351,282],{"class":55},[45,102353,101629],{"class":62},[45,102355,101578],{"class":55},[45,102357,102358,102360,102362,102364],{"class":47,"line":66},[45,102359,30515],{"class":79},[45,102361,282],{"class":55},[45,102363,101640],{"class":62},[45,102365,101590],{"class":55},[20,102367,102368],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[36,102370,102372],{"className":30478,"code":102371,"language":30480,"meta":25,"style":25},"if __name__ == \"__main__\":\n    main()\n",[42,102373,102374,102386],{"__ignoreMap":25},[45,102375,102376,102378,102380,102382,102384],{"class":47,"line":48},[45,102377,1682],{"class":51},[45,102379,31320],{"class":79},[45,102381,101659],{"class":51},[45,102383,101662],{"class":62},[45,102385,3889],{"class":55},[45,102387,102388],{"class":47,"line":66},[45,102389,101669],{"class":55},[20,102391,102392,102393,102396,102397,28485],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[42,102394,102395],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[42,102398,102395],{},[20,102400,102401],{},"运行:",[36,102403,102405],{"className":38,"code":102404,"language":40,"meta":25,"style":25},"python ch1_first_sim.py\n",[42,102406,102407],{"__ignoreMap":25},[45,102408,102409,102411],{"class":47,"line":48},[45,102410,30480],{"class":69},[45,102412,101386],{"class":62},[15,102414,102416],{"id":102415},"_5运行结果说明","5.运行结果说明",[20,102418,102419],{},"你应该看到类似输出:",[36,102421,102424],{"className":102422,"code":102423,"language":5337,"meta":25},[5335],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[42,102425,102423],{"__ignoreMap":25},[20,102427,102428,102430,102431,102434,102435,28485],{},[42,102429,101720],{}," 有 7 个位置变量: ",[42,102432,102433],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[42,102436,102437],{},"vx vy vz wx wy wz",[20,102439,102440,102441,102444],{},"你还会看到 ",[42,102442,102443],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[15,102446,102448],{"id":102447},"_6验证步骤","6.验证步骤",[20,102450,102451],{},"确认版本:",[36,102453,102454],{"className":38,"code":101039,"language":40,"meta":25,"style":25},[42,102455,102456],{"__ignoreMap":25},[45,102457,102458,102460,102462],{"class":47,"line":48},[45,102459,30480],{"class":69},[45,102461,30458],{"class":79},[45,102463,101050],{"class":62},[20,102465,102466],{},"确认导入的是官方 bindings:",[36,102468,102470],{"className":38,"code":102469,"language":40,"meta":25,"style":25},"python -c \"import mujoco; print(mujoco)\"\n",[42,102471,102472],{"__ignoreMap":25},[45,102473,102474,102476,102478],{"class":47,"line":48},[45,102475,30480],{"class":69},[45,102477,30458],{"class":79},[45,102479,102480],{"class":62}," \"import mujoco; print(mujoco)\"\n",[20,102482,102483],{},"运行程序:",[36,102485,102486],{"className":38,"code":102404,"language":40,"meta":25,"style":25},[42,102487,102488],{"__ignoreMap":25},[45,102489,102490,102492],{"class":47,"line":48},[45,102491,30480],{"class":69},[45,102493,101386],{"class":62},[20,102495,102496,102497,102500,102501,28485],{},"检查 ",[42,102498,102499],{},"final time"," 是否约等于 ",[42,102502,102503],{},"1.0",[20,102505,102506],{},"再做几个小实验：",[233,102508,102509,102519,102527,102540],{},[169,102510,102511,102512,102514,102515,102518],{},"把 ",[42,102513,102039],{}," 改成 ",[42,102516,102517],{},"pos=\"0 0 2\"","，观察初始高度变化。",[169,102520,102511,102521,102514,102523,102526],{},[42,102522,101928],{},[42,102524,102525],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[169,102528,102511,102529,102514,102531,102534,102535,102537,102538,28485],{},[42,102530,101924],{},[42,102532,102533],{},"timestep=\"0.005\"","，观察 100 步后的 ",[42,102536,102499],{}," 是否变成约 ",[42,102539,35429],{},[169,102541,102542,102543,102546],{},"删除 ",[42,102544,102545],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[20,102548,102549],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[15,102551,102553],{"id":102552},"_7常见错误与解决方案","7.常见错误与解决方案",[249,102555,102557],{"id":102556},"modulenotfounderror-no-module-named-mujoco",[42,102558,102559],{},"ModuleNotFoundError: No module named 'mujoco'",[20,102561,102562],{},"解决:",[36,102564,102566],{"className":38,"code":102565,"language":40,"meta":25,"style":25},"pip install \"mujoco>=2.3\"\n",[42,102567,102568],{"__ignoreMap":25},[45,102569,102570,102572,102574],{"class":47,"line":48},[45,102571,23978],{"class":69},[45,102573,23981],{"class":62},[45,102575,102576],{"class":62}," \"mujoco>=2.3\"\n",[249,102578,102580],{"id":102579},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[20,102582,102583],{},"先安装系统依赖:",[36,102585,102587],{"className":38,"code":102586,"language":40,"meta":25,"style":25},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[42,102588,102589],{"__ignoreMap":25},[45,102590,102591,102593,102595,102597,102599,102602,102604,102607,102609,102612,102614],{"class":47,"line":48},[45,102592,24724],{"class":69},[45,102594,26415],{"class":62},[45,102596,23981],{"class":62},[45,102598,26500],{"class":79},[45,102600,102601],{"class":62}," mesa-libGL",[45,102603,100914],{"class":62},[45,102605,102606],{"class":62}," glfw",[45,102608,100934],{"class":62},[45,102610,102611],{"class":62}," libX11",[45,102613,100947],{"class":62},[45,102615,102616],{"class":62}," libXrandr\n",[249,102618,102620],{"id":102619},"xml-解析失败","XML 解析失败",[20,102622,102623],{},"检查:",[233,102625,102626,102629,102632,102638],{},[169,102627,102628],{},"标签是否闭合",[169,102630,102631],{},"属性是否带引号",[169,102633,102634,102635],{},"根节点是否是 ",[42,102636,102637],{},"\u003Cmujoco>",[169,102639,102640,102642,102643,102646],{},[42,102641,51900],{}," 是否放在 ",[42,102644,102645],{},"\u003Cworldbody>"," 内部",[249,102648,102650,102652,102653],{"id":102649},"final-time-不是严格等于-10",[42,102651,102499],{}," 不是严格等于 ",[42,102654,102503],{},[20,102656,102657],{},"这通常不是错误。浮点数计算可能得到：",[36,102659,102662],{"className":102660,"code":102661,"language":5337,"meta":25},[5335],"1.0000000000000007\n",[42,102663,102661],{"__ignoreMap":25},[20,102665,102666,102667,102669],{},"只要接近 ",[42,102668,102503],{}," 就正常。",[249,102671,102672],{"id":102672},"方块没有掉下来",[20,102674,102675],{},"检查：",[233,102677,102678,102684,102690,102695],{},[169,102679,102680,102681],{},"方块 body 里是否有 ",[42,102682,102683],{},"\u003Cfreejoint\u002F>",[169,102685,102686,102687],{},"重力是否是 ",[42,102688,102689],{},"0 0 -9.81",[169,102691,102692,102693],{},"是否真的调用了 ",[42,102694,100785],{},[169,102696,102697,102698,102700,102701],{},"你看的是否是 ",[42,102699,102443],{},"，不是 ",[42,102702,102703],{},"initial qpos",[15,102705,102707],{"id":102706},"_8本章小结","8.本章小结",[20,102709,102710],{},"本章你已经完成了 MuJoCo 的最小闭环：",[36,102712,102715],{"className":102713,"code":102714,"language":5337,"meta":25},[5335],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[42,102716,102714],{"__ignoreMap":25},[20,102718,102719],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[196,102721,102722],{},"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":25,"searchDepth":66,"depth":66,"links":102724},[102725,102726,102727,102732,102736,102737,102738,102746],{"id":100746,"depth":66,"text":100747},{"id":100869,"depth":66,"text":100870},{"id":101144,"depth":66,"text":101145,"children":102728},[102729,102730,102731],{"id":101182,"depth":1331,"text":101183},{"id":101276,"depth":1331,"text":101277},{"id":101328,"depth":1331,"text":101329},{"id":101352,"depth":66,"text":101353,"children":102733},[102734,102735],{"id":101672,"depth":1331,"text":101672},{"id":101808,"depth":1331,"text":101808},{"id":102415,"depth":66,"text":102416},{"id":102447,"depth":66,"text":102448},{"id":102552,"depth":66,"text":102553,"children":102739},[102740,102741,102742,102743,102745],{"id":102556,"depth":1331,"text":102559},{"id":102579,"depth":1331,"text":102580},{"id":102619,"depth":1331,"text":102620},{"id":102649,"depth":1331,"text":102744},"final time 不是严格等于 1.0",{"id":102672,"depth":1331,"text":102672},{"id":102706,"depth":66,"text":102707},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100738,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102753,"title":102754,"body":102755,"description":25,"extension":205,"meta":104411,"navigation":207,"path":104412,"seo":104413,"stem":104414,"__hash__":104415},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102756,"toc":104387},[102757,102760,102762,102765,102768,102785,102880,102883,102889,102891,102893,102917,102920,102934,102937,102978,102980,102993,102995,102998,103046,103058,103061,103064,103070,103083,103150,103153,103172,103175,103178,103184,103186,103195,103198,103202,103211,103293,103302,103306,103312,103326,103336,103338,103668,103671,103683,103685,103696,103698,103701,103719,103722,103725,103743,103754,103757,103772,103782,103784,103805,103822,103842,103848,103888,103904,103920,103926,103929,103953,103969,103974,104004,104021,104046,104049,104064,104073,104088,104097,104112,104119,104121,104131,104144,104151,104154,104193,104200,104202,104254,104256,104262,104265,104272,104279,104282,104284,104302,104305,104308,104342,104354,104356,104359,104381,104384],[10,102758,102754],{"id":102759},"_2xml-与-mjcf-物理建模基础",[15,102761,100747],{"id":100746},[20,102763,102764],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[20,102766,102767],{},"本章结束后，你应该能看懂一个简单模型里：",[233,102769,102770,102773,102776,102779,102782],{},[169,102771,102772],{},"地面在哪里。",[169,102774,102775],{},"物体初始位置在哪里。",[169,102777,102778],{},"几何体是什么形状。",[169,102780,102781],{},"哪些 body 可以自由运动。",[169,102783,102784],{},"如何用名字在 Python 里找到 XML 中的对象。",[415,102786,102787,102797],{},[418,102788,102789],{},[421,102790,102791,102794],{},[424,102792,102793],{"align":23885},"标签",[424,102795,102796],{"align":23885},"作用",[462,102798,102799,102808,102818,102827,102837,102847,102860,102870],{},[421,102800,102801,102805],{},[467,102802,102803],{"align":23885},[42,102804,102637],{},[467,102806,102807],{"align":23885},"根节点",[421,102809,102810,102815],{},[467,102811,102812],{"align":23885},[42,102813,102814],{},"\u003Coption>",[467,102816,102817],{"align":23885},"仿真参数",[421,102819,102820,102824],{},[467,102821,102822],{"align":23885},[42,102823,102645],{},[467,102825,102826],{"align":23885},"世界中的物体",[421,102828,102829,102834],{},[467,102830,102831],{"align":23885},[42,102832,102833],{},"\u003Cbody>",[467,102835,102836],{"align":23885},"刚体",[421,102838,102839,102844],{},[467,102840,102841],{"align":23885},[42,102842,102843],{},"\u003Cgeom>",[467,102845,102846],{"align":23885},"几何体、碰撞体、可视体",[421,102848,102849,102857],{},[467,102850,102851,25126,102854],{"align":23885},[42,102852,102853],{},"\u003Cjoint>",[42,102855,102856],{},"\u003Cfreejoint>",[467,102858,102859],{"align":23885},"关节",[421,102861,102862,102867],{},[467,102863,102864],{"align":23885},[42,102865,102866],{},"\u003Csite>",[467,102868,102869],{"align":23885},"标记点",[421,102871,102872,102877],{},[467,102873,102874],{"align":23885},[42,102875,102876],{},"\u003Cactuator>",[467,102878,102879],{"align":23885},"控制器",[20,102881,102882],{},"初学时可以先记住：",[36,102884,102887],{"className":102885,"code":102886,"language":5337,"meta":25},[5335],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[42,102888,102886],{"__ignoreMap":25},[15,102890,100870],{"id":100869},[20,102892,100873],{},[36,102894,102896],{"className":38,"code":102895,"language":40,"meta":25,"style":25},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[42,102897,102898],{"__ignoreMap":25},[45,102899,102900,102902,102904,102906,102908,102910,102912,102914],{"class":47,"line":48},[45,102901,24724],{"class":69},[45,102903,26415],{"class":62},[45,102905,23981],{"class":62},[45,102907,26500],{"class":79},[45,102909,102601],{"class":62},[45,102911,100914],{"class":62},[45,102913,102606],{"class":62},[45,102915,102916],{"class":62}," glfw-devel\n",[20,102918,102919],{},"pip:",[36,102921,102922],{"className":38,"code":101019,"language":40,"meta":25,"style":25},[42,102923,102924],{"__ignoreMap":25},[45,102925,102926,102928,102930,102932],{"class":47,"line":48},[45,102927,23978],{"class":69},[45,102929,23981],{"class":62},[45,102931,101030],{"class":62},[45,102933,101033],{"class":62},[20,102935,102936],{},"conda:",[36,102938,102940],{"className":38,"code":102939,"language":40,"meta":25,"style":25},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[42,102941,102942,102959,102968],{"__ignoreMap":25},[45,102943,102944,102946,102948,102950,102953,102955,102957],{"class":47,"line":48},[45,102945,30430],{"class":69},[45,102947,29276],{"class":62},[45,102949,133],{"class":79},[45,102951,102952],{"class":62}," mujoco-xml",[45,102954,101075],{"class":62},[45,102956,101078],{"class":79},[45,102958,101081],{"class":79},[45,102960,102961,102963,102965],{"class":47,"line":66},[45,102962,30430],{"class":69},[45,102964,101088],{"class":62},[45,102966,102967],{"class":62}," mujoco-xml\n",[45,102969,102970,102972,102974,102976],{"class":47,"line":1331},[45,102971,23978],{"class":69},[45,102973,23981],{"class":62},[45,102975,101030],{"class":62},[45,102977,101033],{"class":62},[20,102979,101104],{},[233,102981,102982,102985,102990],{},[169,102983,102984],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[169,102986,102987,102988,28485],{},"本章使用基础标签，适用于 ",[42,102989,101127],{},[169,102991,102992],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[15,102994,101145],{"id":101144},[20,102996,102997],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[36,102999,103001],{"className":53167,"code":103000,"language":53169,"meta":25,"style":25},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[42,103002,103003,103017,103025,103030,103038],{"__ignoreMap":25},[45,103004,103005,103007,103009,103011,103013,103015],{"class":47,"line":48},[45,103006,1187],{"class":55},[45,103008,101121],{"class":51400},[45,103010,101875],{"class":69},[45,103012,59],{"class":55},[45,103014,62779],{"class":62},[45,103016,51407],{"class":55},[45,103018,103019,103021,103023],{"class":47,"line":66},[45,103020,52244],{"class":55},[45,103022,101941],{"class":51400},[45,103024,51407],{"class":55},[45,103026,103027],{"class":47,"line":1331},[45,103028,103029],{"class":55},"    ...\n",[45,103031,103032,103034,103036],{"class":47,"line":1346},[45,103033,52517],{"class":55},[45,103035,101941],{"class":51400},[45,103037,51407],{"class":55},[45,103039,103040,103042,103044],{"class":47,"line":1352},[45,103041,51885],{"class":55},[45,103043,101121],{"class":51400},[45,103045,51407],{"class":55},[20,103047,103048,103050,103051,103053,103054,103057],{},[42,103049,51900],{}," 表示刚体。",[42,103052,101220],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[42,103055,103056],{},"joint"," 表示刚体相对父刚体如何运动。",[249,103059,103060],{"id":103060},"层级结构非常重要",[20,103062,103063],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[36,103065,103068],{"className":103066,"code":103067,"language":5337,"meta":25},[5335],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[42,103069,103067],{"__ignoreMap":25},[20,103071,103072,101118,103075,103078,103079,103082],{},[42,103073,103074],{},"red_box_geom",[42,103076,103077],{},"box_center"," 都属于 ",[42,103080,103081],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[36,103084,103086],{"className":53167,"code":103085,"language":53169,"meta":25,"style":25},"\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",[42,103087,103088,103108,103122,103142],{"__ignoreMap":25},[45,103089,103090,103092,103094,103096,103098,103100,103102,103104,103106],{"class":47,"line":48},[45,103091,1187],{"class":55},[45,103093,51900],{"class":51400},[45,103095,15069],{"class":69},[45,103097,59],{"class":55},[45,103099,53591],{"class":62},[45,103101,101206],{"class":69},[45,103103,59],{"class":55},[45,103105,101211],{"class":62},[45,103107,51407],{"class":55},[45,103109,103110,103112,103114,103116,103118,103120],{"class":47,"line":66},[45,103111,52244],{"class":55},[45,103113,101720],{"class":51400},[45,103115,15069],{"class":69},[45,103117,59],{"class":55},[45,103119,102061],{"class":62},[45,103121,101244],{"class":55},[45,103123,103124,103126,103128,103130,103132,103134,103136,103138,103140],{"class":47,"line":1331},[45,103125,52244],{"class":55},[45,103127,101220],{"class":51400},[45,103129,53924],{"class":69},[45,103131,59],{"class":55},[45,103133,53591],{"class":62},[45,103135,101236],{"class":69},[45,103137,59],{"class":55},[45,103139,101241],{"class":62},[45,103141,101244],{"class":55},[45,103143,103144,103146,103148],{"class":47,"line":1346},[45,103145,51885],{"class":55},[45,103147,51900],{"class":51400},[45,103149,51407],{"class":55},[20,103151,103152],{},"含义:",[233,103154,103155,103161,103166,103169],{},[169,103156,103157,103158,103160],{},"创建名为 ",[42,103159,53814],{}," 的刚体",[169,103162,103163,103164],{},"初始位置在世界坐标 ",[42,103165,101269],{},[169,103167,103168],{},"它有一个自由关节",[169,103170,103171],{},"它有一个盒子几何体",[249,103173,103174],{"id":103174},"坐标怎么理解",[20,103176,103177],{},"MuJoCo 默认使用三维坐标：",[36,103179,103182],{"className":103180,"code":103181,"language":5337,"meta":25},[5335],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[42,103183,103181],{"__ignoreMap":25},[20,103185,14782],{},[36,103187,103189],{"className":53167,"code":103188,"language":53169,"meta":25,"style":25},"pos=\"0 0 1\"\n",[42,103190,103191],{"__ignoreMap":25},[45,103192,103193],{"class":47,"line":48},[45,103194,103188],{"class":55},[20,103196,103197],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[249,103199,103201],{"id":103200},"geom-的-size-怎么理解","geom 的 size 怎么理解",[20,103203,103204,103205,82630,103208,103210],{},"不同 ",[42,103206,103207],{},"type",[42,103209,31596],{}," 含义不同：",[415,103212,103213,103228],{},[418,103214,103215],{},[421,103216,103217,103221,103226],{},[424,103218,103219],{"align":23885},[42,103220,103207],{},[424,103222,103223,103225],{"align":23885},[42,103224,31596],{}," 示例",[424,103227,100800],{"align":23885},[462,103229,103230,103244,103259,103278],{},[421,103231,103232,103236,103241],{},[467,103233,103234],{"align":23885},[42,103235,53814],{},[467,103237,103238],{"align":23885},[42,103239,103240],{},"size=\"0.1 0.2 0.3\"",[467,103242,103243],{"align":23885},"x\u002Fy\u002Fz 半边长，不是完整长度",[421,103245,103246,103251,103256],{},[467,103247,103248],{"align":23885},[42,103249,103250],{},"sphere",[467,103252,103253],{"align":23885},[42,103254,103255],{},"size=\"0.1\"",[467,103257,103258],{"align":23885},"球半径",[421,103260,103261,103266,103271],{},[467,103262,103263],{"align":23885},[42,103264,103265],{},"capsule",[467,103267,103268],{"align":23885},[42,103269,103270],{},"size=\"0.03\"",[467,103272,103273,103274,103277],{"align":23885},"胶囊半径，长度常用 ",[42,103275,103276],{},"fromto"," 指定",[421,103279,103280,103285,103290],{},[467,103281,103282],{"align":23885},[42,103283,103284],{},"plane",[467,103286,103287],{"align":23885},[42,103288,103289],{},"size=\"3 3 0.1\"",[467,103291,103292],{"align":23885},"可视平面大小，通常当地面",[20,103294,103295,103296,103298,103299,103301],{},"最容易踩坑的是 box：",[42,103297,102124],{}," 表示边长大约是 ",[42,103300,32137],{},"，因为 MuJoCo 用的是半边长。",[249,103303,103305],{"id":103304},"site-是什么","site 是什么",[20,103307,103308,103311],{},[42,103309,103310],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[233,103313,103314,103317,103320,103323],{},[169,103315,103316],{},"标记机械臂末端。",[169,103318,103319],{},"标记目标位置。",[169,103321,103322],{},"放传感器或相机参考点。",[169,103324,103325],{},"在 Python 中读取某个关键点的世界坐标。",[20,103327,103328,103329,101118,103332,103335],{},"在后面的 Reacher 任务中，",[42,103330,103331],{},"tip",[42,103333,103334],{},"target"," 就会用 site 表示。",[15,103337,101353],{"id":101352},[36,103339,103341],{"className":30478,"code":103340,"language":30480,"meta":25,"style":25},"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",[42,103342,103343,103349,103359,103363,103367,103375,103380,103384,103388,103392,103397,103401,103406,103411,103416,103421,103425,103429,103433,103437,103441,103445,103457,103469,103477,103481,103496,103511,103515,103528,103543,103556,103569,103573,103589,103593,103597,103608,103620,103632,103644,103648,103652,103664],{"__ignoreMap":25},[45,103344,103345,103347],{"class":47,"line":48},[45,103346,30492],{"class":51},[45,103348,101401],{"class":55},[45,103350,103351,103353,103355,103357],{"class":47,"line":66},[45,103352,30492],{"class":51},[45,103354,31480],{"class":55},[45,103356,31483],{"class":51},[45,103358,31486],{"class":55},[45,103360,103361],{"class":47,"line":1331},[45,103362,2550],{"emptyLinePlaceholder":207},[45,103364,103365],{"class":47,"line":1346},[45,103366,2550],{"emptyLinePlaceholder":207},[45,103368,103369,103371,103373],{"class":47,"line":1352},[45,103370,101414],{"class":79},[45,103372,13713],{"class":51},[45,103374,101419],{"class":62},[45,103376,103377],{"class":47,"line":1366},[45,103378,103379],{"class":62},"\u003Cmujoco model=\"xml_basic\">\n",[45,103381,103382],{"class":47,"line":1372},[45,103383,101429],{"class":62},[45,103385,103386],{"class":47,"line":1463},[45,103387,2550],{"emptyLinePlaceholder":207},[45,103389,103390],{"class":47,"line":1469},[45,103391,101438],{"class":62},[45,103393,103394],{"class":47,"line":1481},[45,103395,103396],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[45,103398,103399],{"class":47,"line":1763},[45,103400,2550],{"emptyLinePlaceholder":207},[45,103402,103403],{"class":47,"line":1768},[45,103404,103405],{"class":62},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[45,103407,103408],{"class":47,"line":1774},[45,103409,103410],{"class":62},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[45,103412,103413],{"class":47,"line":1779},[45,103414,103415],{"class":62},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[45,103417,103418],{"class":47,"line":1793},[45,103419,103420],{"class":62},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[45,103422,103423],{"class":47,"line":1798},[45,103424,101467],{"class":62},[45,103426,103427],{"class":47,"line":1804},[45,103428,101472],{"class":62},[45,103430,103431],{"class":47,"line":1825},[45,103432,101477],{"class":62},[45,103434,103435],{"class":47,"line":1830},[45,103436,95798],{"class":62},[45,103438,103439],{"class":47,"line":1844},[45,103440,2550],{"emptyLinePlaceholder":207},[45,103442,103443],{"class":47,"line":1849},[45,103444,2550],{"emptyLinePlaceholder":207},[45,103446,103447,103449,103451,103453,103455],{"class":47,"line":1878},[45,103448,32047],{"class":51},[45,103450,2123],{"class":69},[45,103452,101498],{"class":55},[45,103454,95786],{"class":79},[45,103456,3889],{"class":55},[45,103458,103459,103461,103463,103465,103467],{"class":47,"line":1883},[45,103460,101507],{"class":55},[45,103462,59],{"class":51},[45,103464,101512],{"class":55},[45,103466,101414],{"class":79},[45,103468,139],{"class":55},[45,103470,103471,103473,103475],{"class":47,"line":1900},[45,103472,101521],{"class":55},[45,103474,59],{"class":51},[45,103476,101526],{"class":55},[45,103478,103479],{"class":47,"line":1905},[45,103480,2550],{"emptyLinePlaceholder":207},[45,103482,103483,103486,103488,103491,103494],{"class":47,"line":1910},[45,103484,103485],{"class":55},"    box_body_id ",[45,103487,59],{"class":51},[45,103489,103490],{"class":55}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[45,103492,103493],{"class":62},"\"red_box\"",[45,103495,139],{"class":55},[45,103497,103498,103501,103503,103506,103509],{"class":47,"line":1915},[45,103499,103500],{"class":55},"    site_id ",[45,103502,59],{"class":51},[45,103504,103505],{"class":55}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[45,103507,103508],{"class":62},"\"box_center\"",[45,103510,139],{"class":55},[45,103512,103513],{"class":47,"line":1929},[45,103514,2550],{"emptyLinePlaceholder":207},[45,103516,103517,103519,103522,103524,103526],{"class":47,"line":1934},[45,103518,3251],{"class":51},[45,103520,103521],{"class":55}," box_body_id ",[45,103523,1187],{"class":51},[45,103525,4243],{"class":79},[45,103527,3889],{"class":55},[45,103529,103530,103533,103536,103538,103541],{"class":47,"line":2727},[45,103531,103532],{"class":51},"        raise",[45,103534,103535],{"class":79}," RuntimeError",[45,103537,282],{"class":55},[45,103539,103540],{"class":62},"\"body red_box not found\"",[45,103542,139],{"class":55},[45,103544,103545,103547,103550,103552,103554],{"class":47,"line":2741},[45,103546,3251],{"class":51},[45,103548,103549],{"class":55}," site_id ",[45,103551,1187],{"class":51},[45,103553,4243],{"class":79},[45,103555,3889],{"class":55},[45,103557,103558,103560,103562,103564,103567],{"class":47,"line":2749},[45,103559,103532],{"class":51},[45,103561,103535],{"class":79},[45,103563,282],{"class":55},[45,103565,103566],{"class":62},"\"site box_center not found\"",[45,103568,139],{"class":55},[45,103570,103571],{"class":47,"line":2754},[45,103572,2550],{"emptyLinePlaceholder":207},[45,103574,103575,103577,103579,103581,103583,103585,103587],{"class":47,"line":2760},[45,103576,3351],{"class":51},[45,103578,101601],{"class":55},[45,103580,26143],{"class":51},[45,103582,32543],{"class":79},[45,103584,282],{"class":55},[45,103586,1873],{"class":79},[45,103588,30886],{"class":55},[45,103590,103591],{"class":47,"line":2766},[45,103592,101616],{"class":55},[45,103594,103595],{"class":47,"line":2771},[45,103596,2550],{"emptyLinePlaceholder":207},[45,103598,103599,103601,103603,103606],{"class":47,"line":8098},[45,103600,31399],{"class":79},[45,103602,282],{"class":55},[45,103604,103605],{"class":62},"\"simulation time:\"",[45,103607,101578],{"class":55},[45,103609,103610,103612,103614,103617],{"class":47,"line":8122},[45,103611,31399],{"class":79},[45,103613,282],{"class":55},[45,103615,103616],{"class":62},"\"box body position:\"",[45,103618,103619],{"class":55},", data.xpos[box_body_id].copy())\n",[45,103621,103622,103624,103626,103629],{"class":47,"line":8127},[45,103623,31399],{"class":79},[45,103625,282],{"class":55},[45,103627,103628],{"class":62},"\"site position:\"",[45,103630,103631],{"class":55},", data.site_xpos[site_id].copy())\n",[45,103633,103634,103636,103638,103641],{"class":47,"line":8133},[45,103635,31399],{"class":79},[45,103637,282],{"class":55},[45,103639,103640],{"class":62},"\"box qpos:\"",[45,103642,103643],{"class":55},", np.array(data.qpos))\n",[45,103645,103646],{"class":47,"line":8160},[45,103647,2550],{"emptyLinePlaceholder":207},[45,103649,103650],{"class":47,"line":8165},[45,103651,2550],{"emptyLinePlaceholder":207},[45,103653,103654,103656,103658,103660,103662],{"class":47,"line":8171},[45,103655,1682],{"class":51},[45,103657,31320],{"class":79},[45,103659,101659],{"class":51},[45,103661,101662],{"class":62},[45,103663,3889],{"class":55},[45,103665,103666],{"class":47,"line":8183},[45,103667,101669],{"class":55},[20,103669,103670],{},"保存为：",[36,103672,103674],{"className":38,"code":103673,"language":40,"meta":25,"style":25},"touch ch2_xml_basic.py\n",[42,103675,103676],{"__ignoreMap":25},[45,103677,103678,103680],{"class":47,"line":48},[45,103679,101383],{"class":69},[45,103681,103682],{"class":62}," ch2_xml_basic.py\n",[20,103684,102401],{},[36,103686,103688],{"className":38,"code":103687,"language":40,"meta":25,"style":25},"python ch2_xml_basic.py\n",[42,103689,103690],{"__ignoreMap":25},[45,103691,103692,103694],{"class":47,"line":48},[45,103693,30480],{"class":69},[45,103695,103682],{"class":62},[249,103697,101672],{"id":101672},[20,103699,103700],{},"用名字查找 body：",[36,103702,103704],{"className":30478,"code":103703,"language":30480,"meta":25,"style":25},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[42,103705,103706],{"__ignoreMap":25},[45,103707,103708,103711,103713,103715,103717],{"class":47,"line":48},[45,103709,103710],{"class":55},"box_body_id ",[45,103712,59],{"class":51},[45,103714,103490],{"class":55},[45,103716,103493],{"class":62},[45,103718,139],{"class":55},[20,103720,103721],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[20,103723,103724],{},"用名字查找 site：",[36,103726,103728],{"className":30478,"code":103727,"language":30480,"meta":25,"style":25},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[42,103729,103730],{"__ignoreMap":25},[45,103731,103732,103735,103737,103739,103741],{"class":47,"line":48},[45,103733,103734],{"class":55},"site_id ",[45,103736,59],{"class":51},[45,103738,103505],{"class":55},[45,103740,103508],{"class":62},[45,103742,139],{"class":55},[20,103744,103745,103746,103749,103750,103753],{},"注意第二个参数是对象类型。查 body 就用 ",[42,103747,103748],{},"mjOBJ_BODY","，查 site 就用 ",[42,103751,103752],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[20,103755,103756],{},"读取世界坐标：",[36,103758,103760],{"className":30478,"code":103759,"language":30480,"meta":25,"style":25},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[42,103761,103762,103767],{"__ignoreMap":25},[45,103763,103764],{"class":47,"line":48},[45,103765,103766],{"class":55},"data.xpos[box_body_id]\n",[45,103768,103769],{"class":47,"line":66},[45,103770,103771],{"class":55},"data.site_xpos[site_id]\n",[20,103773,103774,103777,103778,103781],{},[42,103775,103776],{},"xpos"," 是 body 的世界坐标，",[42,103779,103780],{},"site_xpos"," 是 site 的世界坐标。",[249,103783,101808],{"id":101808},[36,103785,103787],{"className":30478,"code":103786,"language":30480,"meta":25,"style":25},"import mujoco\nimport numpy as np\n",[42,103788,103789,103795],{"__ignoreMap":25},[45,103790,103791,103793],{"class":47,"line":48},[45,103792,30492],{"class":51},[45,103794,101401],{"class":55},[45,103796,103797,103799,103801,103803],{"class":47,"line":66},[45,103798,30492],{"class":51},[45,103800,31480],{"class":55},[45,103802,31483],{"class":51},[45,103804,31486],{"class":55},[20,103806,103807,103808,103811,103812,103815,103816,490,103819,28485],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[42,103809,103810],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[42,103813,103814],{},"as np"," 是习惯写法，后面就可以写 ",[42,103817,103818],{},"np.array(...)",[42,103820,103821],{},"np.round(...)",[36,103823,103824],{"className":30478,"code":101695,"language":30480,"meta":25,"style":25},[42,103825,103826,103834,103838],{"__ignoreMap":25},[45,103827,103828,103830,103832],{"class":47,"line":48},[45,103829,101414],{"class":79},[45,103831,13713],{"class":51},[45,103833,101419],{"class":62},[45,103835,103836],{"class":47,"line":66},[45,103837,101710],{"class":62},[45,103839,103840],{"class":47,"line":1331},[45,103841,95798],{"class":62},[20,103843,103844,103845,28485],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[42,103846,103847],{},"mujoco.MjModel.from_xml_string(XML)",[36,103849,103851],{"className":53167,"code":103850,"language":53169,"meta":25,"style":25},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[42,103852,103853],{"__ignoreMap":25},[45,103854,103855,103857,103859,103861,103863,103865,103867,103869,103872,103874,103876,103879,103881,103883,103886],{"class":47,"line":48},[45,103856,1187],{"class":55},[45,103858,103310],{"class":51400},[45,103860,15069],{"class":69},[45,103862,59],{"class":55},[45,103864,103508],{"class":62},[45,103866,101206],{"class":69},[45,103868,59],{"class":55},[45,103870,103871],{"class":62},"\"0 0 0\"",[45,103873,101236],{"class":69},[45,103875,59],{"class":55},[45,103877,103878],{"class":62},"\"0.03\"",[45,103880,78867],{"class":69},[45,103882,59],{"class":55},[45,103884,103885],{"class":62},"\"0 1 0 1\"",[45,103887,101244],{"class":55},[20,103889,103890,103892,103893,103896,103897,103899,103900,103903],{},[42,103891,103310],{}," 是标记点。",[42,103894,103895],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[42,103898,103270],{}," 表示显示出来的小球大小。",[42,103901,103902],{},"rgba=\"0 1 0 1\""," 表示绿色。",[36,103905,103906],{"className":30478,"code":103703,"language":30480,"meta":25,"style":25},[42,103907,103908],{"__ignoreMap":25},[45,103909,103910,103912,103914,103916,103918],{"class":47,"line":48},[45,103911,103710],{"class":55},[45,103913,59],{"class":51},[45,103915,103490],{"class":55},[45,103917,103493],{"class":62},[45,103919,139],{"class":55},[20,103921,103922,103923,103925],{},"这行的作用是：根据名字 ",[42,103924,103493],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[20,103927,103928],{},"拆开看：",[233,103930,103931,103937,103942,103948],{},[169,103932,103933,103936],{},[42,103934,103935],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[169,103938,103939,103941],{},[42,103940,102185],{}," 是被查询的模型。",[169,103943,103944,103947],{},[42,103945,103946],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[169,103949,103950,103952],{},[42,103951,103493],{}," 是 XML 里写的名字。",[36,103954,103955],{"className":30478,"code":103727,"language":30480,"meta":25,"style":25},[42,103956,103957],{"__ignoreMap":25},[45,103958,103959,103961,103963,103965,103967],{"class":47,"line":48},[45,103960,103734],{"class":55},[45,103962,59],{"class":51},[45,103964,103505],{"class":55},[45,103966,103508],{"class":62},[45,103968,139],{"class":55},[20,103970,103971,103972,28485],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[42,103973,103508],{},[36,103975,103977],{"className":30478,"code":103976,"language":30480,"meta":25,"style":25},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[42,103978,103979,103991],{"__ignoreMap":25},[45,103980,103981,103983,103985,103987,103989],{"class":47,"line":48},[45,103982,1682],{"class":51},[45,103984,103521],{"class":55},[45,103986,1187],{"class":51},[45,103988,4243],{"class":79},[45,103990,3889],{"class":55},[45,103992,103993,103996,103998,104000,104002],{"class":47,"line":66},[45,103994,103995],{"class":51},"    raise",[45,103997,103535],{"class":79},[45,103999,282],{"class":55},[45,104001,103540],{"class":62},[45,104003,139],{"class":55},[20,104005,104006,104008,104009,104012,104013,104016,104017,104020],{},[42,104007,1682],{}," 是条件判断。",[42,104010,104011],{},"mj_name2id"," 找不到对象时会返回 ",[42,104014,104015],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[42,104018,104019],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[36,104022,104024],{"className":30478,"code":104023,"language":30480,"meta":25,"style":25},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[42,104025,104026,104042],{"__ignoreMap":25},[45,104027,104028,104030,104032,104034,104036,104038,104040],{"class":47,"line":48},[45,104029,3175],{"class":51},[45,104031,101601],{"class":55},[45,104033,26143],{"class":51},[45,104035,32543],{"class":79},[45,104037,282],{"class":55},[45,104039,1873],{"class":79},[45,104041,30886],{"class":55},[45,104043,104044],{"class":47,"line":66},[45,104045,101799],{"class":55},[20,104047,104048],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[36,104050,104052],{"className":30478,"code":104051,"language":30480,"meta":25,"style":25},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[42,104053,104054],{"__ignoreMap":25},[45,104055,104056,104058,104060,104062],{"class":47,"line":48},[45,104057,30515],{"class":79},[45,104059,282],{"class":55},[45,104061,103616],{"class":62},[45,104063,103619],{"class":55},[20,104065,104066,104068,104069,104072],{},[42,104067,101179],{}," 保存所有 body 的世界坐标。",[42,104070,104071],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[36,104074,104076],{"className":30478,"code":104075,"language":30480,"meta":25,"style":25},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[42,104077,104078],{"__ignoreMap":25},[45,104079,104080,104082,104084,104086],{"class":47,"line":48},[45,104081,30515],{"class":79},[45,104083,282],{"class":55},[45,104085,103628],{"class":62},[45,104087,103631],{"class":55},[20,104089,104090,104093,104094,104096],{},[42,104091,104092],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[42,104095,103077],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[36,104098,104100],{"className":30478,"code":104099,"language":30480,"meta":25,"style":25},"print(\"box qpos:\", np.array(data.qpos))\n",[42,104101,104102],{"__ignoreMap":25},[45,104103,104104,104106,104108,104110],{"class":47,"line":48},[45,104105,30515],{"class":79},[45,104107,282],{"class":55},[45,104109,103640],{"class":62},[45,104111,103643],{"class":55},[20,104113,104114,104115,104118],{},"这里打印广义位置数组。",[42,104116,104117],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[15,104120,102416],{"id":102415},[20,104122,104123,104124,104127,104128,28485],{},"程序会输出 ",[42,104125,104126],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[42,104129,104130],{},"qpos",[20,104132,104133,104135,104136,104139,104140,104143],{},[42,104134,104071],{}," 是 body 的世界坐标位置。",[42,104137,104138],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[42,104141,104142],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[20,104145,82322,104146,82630,104148,104150],{},[42,104147,103077],{},[42,104149,103895],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[20,104152,104153],{},"如果你把 site 改成：",[36,104155,104157],{"className":53167,"code":104156,"language":53169,"meta":25,"style":25},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[42,104158,104159],{"__ignoreMap":25},[45,104160,104161,104163,104165,104167,104169,104172,104174,104176,104179,104181,104183,104185,104187,104189,104191],{"class":47,"line":48},[45,104162,1187],{"class":55},[45,104164,103310],{"class":51400},[45,104166,15069],{"class":69},[45,104168,59],{"class":55},[45,104170,104171],{"class":62},"\"box_top\"",[45,104173,101206],{"class":69},[45,104175,59],{"class":55},[45,104177,104178],{"class":62},"\"0 0 0.15\"",[45,104180,101236],{"class":69},[45,104182,59],{"class":55},[45,104184,103878],{"class":62},[45,104186,78867],{"class":69},[45,104188,59],{"class":55},[45,104190,103885],{"class":62},[45,104192,101244],{"class":55},[20,104194,104195,104196,104199],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[42,104197,104198],{},"site position"," 就会比 body position 的 z 坐标更高。",[15,104201,102448],{"id":102447},[233,104203,104204,104213,104216,104223,104229,104240],{},[169,104205,102511,104206,104208,104209,102514,104211,28485],{},[42,104207,103081],{}," 的初始高度从 ",[42,104210,495],{},[42,104212,356],{},[169,104214,104215],{},"重新运行程序。",[169,104217,104218,104219,104222],{},"观察 ",[42,104220,104221],{},"box qpos"," 和最终位置是否变化。",[169,104224,104225,104226,104228],{},"故意把 ",[42,104227,103310],{}," 名称改错，确认程序能报错。",[169,104230,102511,104231,104233,104234,102514,104236,104239],{},[42,104232,101220],{}," 的颜色 ",[42,104235,102132],{},[42,104237,104238],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[169,104241,102511,104242,82630,104244,102514,104247,104250,104251,104253],{},[42,104243,103077],{},[42,104245,104246],{},"pos",[42,104248,104249],{},"0 0 0.2","，观察 ",[42,104252,104198],{}," 如何变化。",[15,104255,102553],{"id":102552},[249,104257,104259],{"id":104258},"xml-error-schema-violation",[42,104260,104261],{},"XML Error: Schema violation",[20,104263,104264],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[249,104266,104268,81390,104270],{"id":104267},"mj_name2id-返回-1",[42,104269,104011],{},[42,104271,104015],{},[20,104273,104274,104275,104278],{},"说明名字没有找到。检查 XML 中 ",[42,104276,104277],{},"name=\"...\"","，并确认对象类型正确。",[249,104280,104281],{"id":104281},"物体不下落",[20,104283,102623],{},[233,104285,104286,104291,104296],{},[169,104287,104288,104289],{},"body 是否有 ",[42,104290,101720],{},[169,104292,104293,104294],{},"gravity 是否为 ",[42,104295,102689],{},[169,104297,104298,104299,104301],{},"body 是否被固定在 ",[42,104300,101941],{}," 中",[249,104303,104304],{"id":104304},"坐标看起来不符合预期",[20,104306,104307],{},"先区分两种坐标：",[415,104309,104310,104319],{},[418,104311,104312],{},[421,104313,104314,104317],{},[424,104315,104316],{"align":23885},"坐标",[424,104318,100800],{"align":23885},[462,104320,104321,104331],{},[421,104322,104323,104328],{},[467,104324,104325,104326],{"align":23885},"XML 里的 ",[42,104327,104246],{},[467,104329,104330],{"align":23885},"相对父 body 的局部坐标",[421,104332,104333,104339],{},[467,104334,104335,25126,104337],{"align":23885},[42,104336,101179],{},[42,104338,104092],{},[467,104340,104341],{"align":23885},"仿真更新后的世界坐标",[20,104343,104344,104345,104347,104348,82639,104351,104353],{},"如果你修改了 ",[42,104346,101170],{},"，但还没调用 ",[42,104349,104350],{},"mj_forward",[42,104352,101315],{},"，世界坐标可能还没有更新。",[15,104355,102707],{"id":102706},[20,104357,104358],{},"MJCF 建模先掌握四件事：",[233,104360,104361,104366,104371,104376],{},[169,104362,104363,104365],{},[42,104364,51900],{}," 表示刚体层级。",[169,104367,104368,104370],{},[42,104369,101220],{}," 表示形状、碰撞和质量。",[169,104372,104373,104375],{},[42,104374,103056],{}," 决定 body 能不能动、怎么动。",[169,104377,104378,104380],{},[42,104379,103310],{}," 用来标记关键点，方便 Python 读取位置。",[20,104382,104383],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[196,104385,104386],{},"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":25,"searchDepth":66,"depth":66,"links":104388},[104389,104390,104391,104397,104401,104402,104403,104410],{"id":100746,"depth":66,"text":100747},{"id":100869,"depth":66,"text":100870},{"id":101144,"depth":66,"text":101145,"children":104392},[104393,104394,104395,104396],{"id":103060,"depth":1331,"text":103060},{"id":103174,"depth":1331,"text":103174},{"id":103200,"depth":1331,"text":103201},{"id":103304,"depth":1331,"text":103305},{"id":101352,"depth":66,"text":101353,"children":104398},[104399,104400],{"id":101672,"depth":1331,"text":101672},{"id":101808,"depth":1331,"text":101808},{"id":102415,"depth":66,"text":102416},{"id":102447,"depth":66,"text":102448},{"id":102552,"depth":66,"text":102553,"children":104404},[104405,104406,104408,104409],{"id":104258,"depth":1331,"text":104261},{"id":104267,"depth":1331,"text":104407},"mj_name2id 返回 -1",{"id":104281,"depth":1331,"text":104281},{"id":104304,"depth":1331,"text":104304},{"id":102706,"depth":66,"text":102707},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102754,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104417,"title":104418,"body":104419,"description":25,"extension":205,"meta":105914,"navigation":207,"path":105915,"seo":105916,"stem":105917,"__hash__":105918},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104420,"toc":105886},[104421,104424,104426,104429,104432,104470,104473,104479,104482,104484,104486,104513,104515,104529,104531,104572,104574,104598,104600,104603,104612,104621,104624,104633,104641,104650,104653,104663,104666,104718,104725,104731,104739,104787,104790,104809,104812,104820,104824,104833,104866,104868,105216,105218,105230,105232,105243,105245,105248,105269,105275,105278,105303,105313,105316,105324,105327,105330,105351,105362,105364,105384,105387,105408,105417,105436,105442,105467,105470,105484,105491,105515,105518,105526,105535,105551,105563,105571,105580,105582,105585,105609,105614,105617,105639,105641,105680,105682,105689,105691,105699,105702,105705,105717,105758,105765,105776,105783,105786,105835,105838,105841,105847,105849,105854,105880,105883],[10,104422,104418],{"id":104423},"_3python-控制接口读取状态与推进仿真",[15,104425,100747],{"id":100746},[20,104427,104428],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[20,104430,104431],{},"你将学习:",[233,104433,104434,104439,104444,104448,104453,104464],{},[169,104435,104436],{},[42,104437,104438],{},"MjModel.from_xml_string",[169,104440,104441],{},[42,104442,104443],{},"MjData(model)",[169,104445,104446],{},[42,104447,101315],{},[169,104449,104450],{},[42,104451,104452],{},"mj_resetData",[169,104454,104455,104456,490,104458,490,104461],{},"读取 ",[42,104457,104130],{},[42,104459,104460],{},"qvel",[42,104462,104463],{},"ctrl",[169,104465,104466,104467],{},"使用 ",[42,104468,104469],{},"model.opt.timestep",[20,104471,104472],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[36,104474,104477],{"className":104475,"code":104476,"language":5337,"meta":25},[5335],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[42,104478,104476],{"__ignoreMap":25},[20,104480,104481],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[15,104483,100870],{"id":100869},[20,104485,100873],{},[36,104487,104489],{"className":38,"code":104488,"language":40,"meta":25,"style":25},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[42,104490,104491],{"__ignoreMap":25},[45,104492,104493,104495,104497,104499,104501,104504,104506,104508,104510],{"class":47,"line":48},[45,104494,24724],{"class":69},[45,104496,26415],{"class":62},[45,104498,23981],{"class":62},[45,104500,26500],{"class":79},[45,104502,104503],{"class":62}," python3",[45,104505,100898],{"class":62},[45,104507,102601],{"class":62},[45,104509,100914],{"class":62},[45,104511,104512],{"class":62}," glfw\n",[20,104514,102919],{},[36,104516,104517],{"className":38,"code":101019,"language":40,"meta":25,"style":25},[42,104518,104519],{"__ignoreMap":25},[45,104520,104521,104523,104525,104527],{"class":47,"line":48},[45,104522,23978],{"class":69},[45,104524,23981],{"class":62},[45,104526,101030],{"class":62},[45,104528,101033],{"class":62},[20,104530,102936],{},[36,104532,104534],{"className":38,"code":104533,"language":40,"meta":25,"style":25},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[42,104535,104536,104553,104562],{"__ignoreMap":25},[45,104537,104538,104540,104542,104544,104547,104549,104551],{"class":47,"line":48},[45,104539,30430],{"class":69},[45,104541,29276],{"class":62},[45,104543,133],{"class":79},[45,104545,104546],{"class":62}," mujoco-python-api",[45,104548,101075],{"class":62},[45,104550,101078],{"class":79},[45,104552,101081],{"class":79},[45,104554,104555,104557,104559],{"class":47,"line":66},[45,104556,30430],{"class":69},[45,104558,101088],{"class":62},[45,104560,104561],{"class":62}," mujoco-python-api\n",[45,104563,104564,104566,104568,104570],{"class":47,"line":1331},[45,104565,23978],{"class":69},[45,104567,23981],{"class":62},[45,104569,101030],{"class":62},[45,104571,101033],{"class":62},[20,104573,101104],{},[233,104575,104576,104583,104592],{},[169,104577,104578,101118,104580,104582],{},[42,104579,100775],{},[42,104581,100780],{}," 是官方 Python bindings 的类名。",[169,104584,104585,104586,104589,104590,28485],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[42,104587,104588],{},"mjModel"," 在 Python 中是 ",[42,104591,100809],{},[169,104593,104594,104595,28485],{},"不要使用 ",[42,104596,104597],{},"sim = mujoco_py.MjSim(...)",[15,104599,101145],{"id":101144},[20,104601,104602],{},"仿真推进核心代码:",[36,104604,104606],{"className":30478,"code":104605,"language":30480,"meta":25,"style":25},"mujoco.mj_step(model, data)\n",[42,104607,104608],{"__ignoreMap":25},[45,104609,104610],{"class":47,"line":48},[45,104611,104605],{"class":55},[20,104613,104614,104615,490,104617,490,104619,28485],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[42,104616,101170],{},[42,104618,101173],{},[42,104620,101167],{},[20,104622,104623],{},"重置仿真:",[36,104625,104627],{"className":30478,"code":104626,"language":30480,"meta":25,"style":25},"mujoco.mj_resetData(model, data)\n",[42,104628,104629],{"__ignoreMap":25},[45,104630,104631],{"class":47,"line":48},[45,104632,104626],{"class":55},[20,104634,104635,104636,82639,104638,104640],{},"如果手动修改了 ",[42,104637,101170],{},[42,104639,101173],{},"，通常应调用:",[36,104642,104644],{"className":30478,"code":104643,"language":30480,"meta":25,"style":25},"mujoco.mj_forward(model, data)\n",[42,104645,104646],{"__ignoreMap":25},[45,104647,104648],{"class":47,"line":48},[45,104649,104643],{"class":55},[20,104651,104652],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[249,104654,104656,490,104658,490,104660,104662],{"id":104655},"qposqvelctrl-是什么",[42,104657,104130],{},[42,104659,104460],{},[42,104661,104463],{}," 是什么",[20,104664,104665],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[415,104667,104668,104680],{},[418,104669,104670],{},[421,104671,104672,104675,104677],{},[424,104673,104674],{"align":23885},"字段",[424,104676,100800],{"align":23885},[424,104678,104679],{"align":23885},"谁来修改",[462,104681,104682,104694,104706],{},[421,104683,104684,104688,104691],{},[467,104685,104686],{"align":23885},[42,104687,101170],{},[467,104689,104690],{"align":23885},"广义位置，例如小车位置、关节角、自由物体位置姿态",[467,104692,104693],{"align":23885},"MuJoCo 更新，也可以手动设置初始状态",[421,104695,104696,104700,104703],{},[467,104697,104698],{"align":23885},[42,104699,101173],{},[467,104701,104702],{"align":23885},"广义速度，例如小车速度、关节角速度",[467,104704,104705],{"align":23885},"MuJoCo 更新，也可以手动清零",[421,104707,104708,104712,104715],{},[467,104709,104710],{"align":23885},[42,104711,101176],{},[467,104713,104714],{"align":23885},"actuator 的控制输入",[467,104716,104717],{"align":23885},"主要由你的控制代码写入",[20,104719,9175,104720,101118,104722,104724],{},[42,104721,104130],{},[42,104723,104460],{}," 不一定同维。自由刚体就是典型例子：",[36,104726,104729],{"className":104727,"code":104728,"language":5337,"meta":25},[5335],"freejoint: qpos 7 维，qvel 6 维\n",[42,104730,104728],{"__ignoreMap":25},[249,104732,104734,101118,104736,104738],{"id":104733},"mj_step-和-mj_forward-的区别",[42,104735,101315],{},[42,104737,104350],{}," 的区别",[415,104740,104741,104754],{},[418,104742,104743],{},[421,104744,104745,104748,104751],{},[424,104746,104747],{"align":23885},"函数",[424,104749,104750],{"align":23885},"是否推进时间",[424,104752,104753],{"align":23885},"什么时候用",[462,104755,104756,104769],{},[421,104757,104758,104763,104766],{},[467,104759,104760],{"align":23885},[42,104761,104762],{},"mj_step(model, data)",[467,104764,104765],{"align":23885},"是",[467,104767,104768],{"align":23885},"正常仿真循环，每调用一次前进一步",[421,104770,104771,104776,104779],{},[467,104772,104773],{"align":23885},[42,104774,104775],{},"mj_forward(model, data)",[467,104777,104778],{"align":23885},"否",[467,104780,104781,104782,490,104784,104786],{"align":23885},"手动改了 ",[42,104783,104130],{},[42,104785,104460],{}," 后，刷新派生量",[20,104788,104789],{},"例如你写：",[36,104791,104793],{"className":30478,"code":104792,"language":30480,"meta":25,"style":25},"data.qpos[2] = 2.0\n",[42,104794,104795],{"__ignoreMap":25},[45,104796,104797,104800,104802,104804,104806],{"class":47,"line":48},[45,104798,104799],{"class":55},"data.qpos[",[45,104801,356],{"class":79},[45,104803,4593],{"class":55},[45,104805,59],{"class":51},[45,104807,104808],{"class":79}," 2.0\n",[20,104810,104811],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[36,104813,104814],{"className":30478,"code":104643,"language":30480,"meta":25,"style":25},[42,104815,104816],{"__ignoreMap":25},[45,104817,104818],{"class":47,"line":48},[45,104819,104643],{"class":55},[249,104821,104823],{"id":104822},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[20,104825,104826,104829,104830,104832],{},[42,104827,104828],{},"mujoco.mj_resetData(model, data)"," 会把 ",[42,104831,33501],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[36,104834,104836],{"className":30478,"code":104835,"language":30480,"meta":25,"style":25},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[42,104837,104838,104842,104852,104862],{"__ignoreMap":25},[45,104839,104840],{"class":47,"line":48},[45,104841,104626],{"class":55},[45,104843,104844,104847,104849],{"class":47,"line":66},[45,104845,104846],{"class":55},"data.qpos[:] ",[45,104848,59],{"class":51},[45,104850,104851],{"class":55}," random_qpos\n",[45,104853,104854,104857,104859],{"class":47,"line":1331},[45,104855,104856],{"class":55},"data.qvel[:] ",[45,104858,59],{"class":51},[45,104860,104861],{"class":79}," 0.0\n",[45,104863,104864],{"class":47,"line":1346},[45,104865,104643],{"class":55},[15,104867,101353],{"id":101352},[36,104869,104871],{"className":30478,"code":104870,"language":30480,"meta":25,"style":25},"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",[42,104872,104873,104879,104889,104893,104897,104905,104910,104914,104918,104922,104927,104931,104936,104941,104946,104950,104954,104958,104962,104966,104970,104989,104996,105008,105019,105035,105051,105055,105059,105071,105083,105091,105095,105106,105110,105126,105130,105134,105143,105147,105152,105161,105165,105178,105183,105192,105196,105200,105212],{"__ignoreMap":25},[45,104874,104875,104877],{"class":47,"line":48},[45,104876,30492],{"class":51},[45,104878,101401],{"class":55},[45,104880,104881,104883,104885,104887],{"class":47,"line":66},[45,104882,30492],{"class":51},[45,104884,31480],{"class":55},[45,104886,31483],{"class":51},[45,104888,31486],{"class":55},[45,104890,104891],{"class":47,"line":1331},[45,104892,2550],{"emptyLinePlaceholder":207},[45,104894,104895],{"class":47,"line":1346},[45,104896,2550],{"emptyLinePlaceholder":207},[45,104898,104899,104901,104903],{"class":47,"line":1352},[45,104900,101414],{"class":79},[45,104902,13713],{"class":51},[45,104904,101419],{"class":62},[45,104906,104907],{"class":47,"line":1366},[45,104908,104909],{"class":62},"\u003Cmujoco model=\"state_api\">\n",[45,104911,104912],{"class":47,"line":1372},[45,104913,101429],{"class":62},[45,104915,104916],{"class":47,"line":1463},[45,104917,2550],{"emptyLinePlaceholder":207},[45,104919,104920],{"class":47,"line":1469},[45,104921,101438],{"class":62},[45,104923,104924],{"class":47,"line":1481},[45,104925,104926],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[45,104928,104929],{"class":47,"line":1763},[45,104930,2550],{"emptyLinePlaceholder":207},[45,104932,104933],{"class":47,"line":1768},[45,104934,104935],{"class":62},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[45,104937,104938],{"class":47,"line":1774},[45,104939,104940],{"class":62},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[45,104942,104943],{"class":47,"line":1779},[45,104944,104945],{"class":62},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[45,104947,104948],{"class":47,"line":1793},[45,104949,101467],{"class":62},[45,104951,104952],{"class":47,"line":1798},[45,104953,101472],{"class":62},[45,104955,104956],{"class":47,"line":1804},[45,104957,101477],{"class":62},[45,104959,104960],{"class":47,"line":1825},[45,104961,95798],{"class":62},[45,104963,104964],{"class":47,"line":1830},[45,104965,2550],{"emptyLinePlaceholder":207},[45,104967,104968],{"class":47,"line":1844},[45,104969,2550],{"emptyLinePlaceholder":207},[45,104971,104972,104974,104977,104980,104982,104985,104987],{"class":47,"line":1849},[45,104973,32047],{"class":51},[45,104975,104976],{"class":69}," print_state",[45,104978,104979],{"class":55},"(prefix: ",[45,104981,1451],{"class":79},[45,104983,104984],{"class":55},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[45,104986,95786],{"class":79},[45,104988,3889],{"class":55},[45,104990,104991,104993],{"class":47,"line":1878},[45,104992,31399],{"class":79},[45,104994,104995],{"class":55},"(prefix)\n",[45,104997,104998,105000,105002,105005],{"class":47,"line":1883},[45,104999,31399],{"class":79},[45,105001,282],{"class":55},[45,105003,105004],{"class":62},"\"  timestep:\"",[45,105006,105007],{"class":55},", model.opt.timestep)\n",[45,105009,105010,105012,105014,105017],{"class":47,"line":1900},[45,105011,31399],{"class":79},[45,105013,282],{"class":55},[45,105015,105016],{"class":62},"\"  time:\"",[45,105018,101578],{"class":55},[45,105020,105021,105023,105025,105028,105031,105033],{"class":47,"line":1905},[45,105022,31399],{"class":79},[45,105024,282],{"class":55},[45,105026,105027],{"class":62},"\"  qpos:\"",[45,105029,105030],{"class":55},", np.round(data.qpos.copy(), ",[45,105032,570],{"class":79},[45,105034,30597],{"class":55},[45,105036,105037,105039,105041,105044,105047,105049],{"class":47,"line":1910},[45,105038,31399],{"class":79},[45,105040,282],{"class":55},[45,105042,105043],{"class":62},"\"  qvel:\"",[45,105045,105046],{"class":55},", np.round(data.qvel.copy(), ",[45,105048,570],{"class":79},[45,105050,30597],{"class":55},[45,105052,105053],{"class":47,"line":1915},[45,105054,2550],{"emptyLinePlaceholder":207},[45,105056,105057],{"class":47,"line":1929},[45,105058,2550],{"emptyLinePlaceholder":207},[45,105060,105061,105063,105065,105067,105069],{"class":47,"line":1934},[45,105062,32047],{"class":51},[45,105064,2123],{"class":69},[45,105066,101498],{"class":55},[45,105068,95786],{"class":79},[45,105070,3889],{"class":55},[45,105072,105073,105075,105077,105079,105081],{"class":47,"line":2727},[45,105074,101507],{"class":55},[45,105076,59],{"class":51},[45,105078,101512],{"class":55},[45,105080,101414],{"class":79},[45,105082,139],{"class":55},[45,105084,105085,105087,105089],{"class":47,"line":2741},[45,105086,101521],{"class":55},[45,105088,59],{"class":51},[45,105090,101526],{"class":55},[45,105092,105093],{"class":47,"line":2749},[45,105094,2550],{"emptyLinePlaceholder":207},[45,105096,105097,105100,105103],{"class":47,"line":2754},[45,105098,105099],{"class":55},"    print_state(",[45,105101,105102],{"class":62},"\"initial\"",[45,105104,105105],{"class":55},", model, data)\n",[45,105107,105108],{"class":47,"line":2760},[45,105109,2550],{"emptyLinePlaceholder":207},[45,105111,105112,105114,105116,105118,105120,105122,105124],{"class":47,"line":2766},[45,105113,3351],{"class":51},[45,105115,101601],{"class":55},[45,105117,26143],{"class":51},[45,105119,32543],{"class":79},[45,105121,282],{"class":55},[45,105123,933],{"class":79},[45,105125,30886],{"class":55},[45,105127,105128],{"class":47,"line":2771},[45,105129,101616],{"class":55},[45,105131,105132],{"class":47,"line":8098},[45,105133,2550],{"emptyLinePlaceholder":207},[45,105135,105136,105138,105141],{"class":47,"line":8122},[45,105137,105099],{"class":55},[45,105139,105140],{"class":62},"\"after 50 steps\"",[45,105142,105105],{"class":55},[45,105144,105145],{"class":47,"line":8127},[45,105146,2550],{"emptyLinePlaceholder":207},[45,105148,105149],{"class":47,"line":8133},[45,105150,105151],{"class":55},"    mujoco.mj_resetData(model, data)\n",[45,105153,105154,105156,105159],{"class":47,"line":8160},[45,105155,105099],{"class":55},[45,105157,105158],{"class":62},"\"after reset\"",[45,105160,105105],{"class":55},[45,105162,105163],{"class":47,"line":8165},[45,105164,2550],{"emptyLinePlaceholder":207},[45,105166,105167,105170,105172,105174,105176],{"class":47,"line":8171},[45,105168,105169],{"class":55},"    data.qpos[",[45,105171,356],{"class":79},[45,105173,4593],{"class":55},[45,105175,59],{"class":51},[45,105177,104808],{"class":79},[45,105179,105180],{"class":47,"line":8183},[45,105181,105182],{"class":55},"    mujoco.mj_forward(model, data)\n",[45,105184,105185,105187,105190],{"class":47,"line":8195},[45,105186,105099],{"class":55},[45,105188,105189],{"class":62},"\"after manual qpos edit\"",[45,105191,105105],{"class":55},[45,105193,105194],{"class":47,"line":8207},[45,105195,2550],{"emptyLinePlaceholder":207},[45,105197,105198],{"class":47,"line":9866},[45,105199,2550],{"emptyLinePlaceholder":207},[45,105201,105202,105204,105206,105208,105210],{"class":47,"line":9890},[45,105203,1682],{"class":51},[45,105205,31320],{"class":79},[45,105207,101659],{"class":51},[45,105209,101662],{"class":62},[45,105211,3889],{"class":55},[45,105213,105214],{"class":47,"line":9913},[45,105215,101669],{"class":55},[20,105217,103670],{},[36,105219,105221],{"className":38,"code":105220,"language":40,"meta":25,"style":25},"touch ch3_python_state.py\n",[42,105222,105223],{"__ignoreMap":25},[45,105224,105225,105227],{"class":47,"line":48},[45,105226,101383],{"class":69},[45,105228,105229],{"class":62}," ch3_python_state.py\n",[20,105231,102401],{},[36,105233,105235],{"className":38,"code":105234,"language":40,"meta":25,"style":25},"python ch3_python_state.py\n",[42,105236,105237],{"__ignoreMap":25},[45,105238,105239,105241],{"class":47,"line":48},[45,105240,30480],{"class":69},[45,105242,105229],{"class":62},[249,105244,101672],{"id":101672},[20,105246,105247],{},"打印状态的函数：",[36,105249,105251],{"className":30478,"code":105250,"language":30480,"meta":25,"style":25},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[42,105252,105253],{"__ignoreMap":25},[45,105254,105255,105257,105259,105261,105263,105265,105267],{"class":47,"line":48},[45,105256,32047],{"class":51},[45,105258,104976],{"class":69},[45,105260,104979],{"class":55},[45,105262,1451],{"class":79},[45,105264,104984],{"class":55},[45,105266,95786],{"class":79},[45,105268,3889],{"class":55},[20,105270,105271,105272,105274],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[42,105273,33501],{}," 里发生了什么。",[20,105276,105277],{},"推进 50 步：",[36,105279,105281],{"className":30478,"code":105280,"language":30480,"meta":25,"style":25},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[42,105282,105283,105299],{"__ignoreMap":25},[45,105284,105285,105287,105289,105291,105293,105295,105297],{"class":47,"line":48},[45,105286,3175],{"class":51},[45,105288,101601],{"class":55},[45,105290,26143],{"class":51},[45,105292,32543],{"class":79},[45,105294,282],{"class":55},[45,105296,933],{"class":79},[45,105298,30886],{"class":55},[45,105300,105301],{"class":47,"line":66},[45,105302,101799],{"class":55},[20,105304,105305,105306,105309,105310,105312],{},"由于 ",[42,105307,105308],{},"timestep=0.01","，所以 50 步后时间约为 ",[42,105311,35429],{}," 秒。",[20,105314,105315],{},"重置：",[36,105317,105318],{"className":30478,"code":104626,"language":30480,"meta":25,"style":25},[42,105319,105320],{"__ignoreMap":25},[45,105321,105322],{"class":47,"line":48},[45,105323,104626],{"class":55},[20,105325,105326],{},"这会把时间、位置、速度恢复到初始状态。",[20,105328,105329],{},"手动改高度：",[36,105331,105333],{"className":30478,"code":105332,"language":30480,"meta":25,"style":25},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[42,105334,105335,105347],{"__ignoreMap":25},[45,105336,105337,105339,105341,105343,105345],{"class":47,"line":48},[45,105338,104799],{"class":55},[45,105340,356],{"class":79},[45,105342,4593],{"class":55},[45,105344,59],{"class":51},[45,105346,104808],{"class":79},[45,105348,105349],{"class":47,"line":66},[45,105350,104643],{"class":55},[20,105352,105353,105354,105357,105358,105361],{},"这个例子里 ",[42,105355,105356],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[42,105359,105360],{},"2.0"," 表示把小球放到更高的位置。",[249,105363,101808],{"id":101808},[36,105365,105366],{"className":30478,"code":105250,"language":30480,"meta":25,"style":25},[42,105367,105368],{"__ignoreMap":25},[45,105369,105370,105372,105374,105376,105378,105380,105382],{"class":47,"line":48},[45,105371,32047],{"class":51},[45,105373,104976],{"class":69},[45,105375,104979],{"class":55},[45,105377,1451],{"class":79},[45,105379,104984],{"class":55},[45,105381,95786],{"class":79},[45,105383,3889],{"class":55},[20,105385,105386],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[233,105388,105389,105398,105403],{},[169,105390,105391,105394,105395,105397],{},[42,105392,105393],{},"prefix","：一段文字，比如 ",[42,105396,105102],{},"，用来说明现在打印的是哪个阶段。",[169,105399,105400,105402],{},[42,105401,102185],{},"：MuJoCo 模型。",[169,105404,105405,105407],{},[42,105406,33501],{},"：MuJoCo 当前状态。",[20,105409,105410,490,105413,105416],{},[42,105411,105412],{},"prefix: str",[42,105414,105415],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[36,105418,105420],{"className":30478,"code":105419,"language":30480,"meta":25,"style":25},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[42,105421,105422],{"__ignoreMap":25},[45,105423,105424,105426,105428,105430,105432,105434],{"class":47,"line":48},[45,105425,30515],{"class":79},[45,105427,282],{"class":55},[45,105429,105027],{"class":62},[45,105431,105030],{"class":55},[45,105433,570],{"class":79},[45,105435,30597],{"class":55},[20,105437,105438,105441],{},[42,105439,105440],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[36,105443,105445],{"className":30478,"code":105444,"language":30480,"meta":25,"style":25},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[42,105446,105447,105459],{"__ignoreMap":25},[45,105448,105449,105451,105453,105455,105457],{"class":47,"line":48},[45,105450,101734],{"class":55},[45,105452,59],{"class":51},[45,105454,101512],{"class":55},[45,105456,101414],{"class":79},[45,105458,139],{"class":55},[45,105460,105461,105463,105465],{"class":47,"line":66},[45,105462,101758],{"class":55},[45,105464,59],{"class":51},[45,105466,101526],{"class":55},[20,105468,105469],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[36,105471,105473],{"className":30478,"code":105472,"language":30480,"meta":25,"style":25},"print_state(\"initial\", model, data)\n",[42,105474,105475],{"__ignoreMap":25},[45,105476,105477,105480,105482],{"class":47,"line":48},[45,105478,105479],{"class":55},"print_state(",[45,105481,105102],{"class":62},[45,105483,105105],{"class":55},[20,105485,105486,105487,105490],{},"调用刚才定义的 ",[42,105488,105489],{},"print_state"," 函数，打印初始状态。",[36,105492,105493],{"className":30478,"code":105280,"language":30480,"meta":25,"style":25},[42,105494,105495,105511],{"__ignoreMap":25},[45,105496,105497,105499,105501,105503,105505,105507,105509],{"class":47,"line":48},[45,105498,3175],{"class":51},[45,105500,101601],{"class":55},[45,105502,26143],{"class":51},[45,105504,32543],{"class":79},[45,105506,282],{"class":55},[45,105508,933],{"class":79},[45,105510,30886],{"class":55},[45,105512,105513],{"class":47,"line":66},[45,105514,101799],{"class":55},[20,105516,105517],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[36,105519,105520],{"className":30478,"code":104626,"language":30480,"meta":25,"style":25},[42,105521,105522],{"__ignoreMap":25},[45,105523,105524],{"class":47,"line":48},[45,105525,104626],{"class":55},[20,105527,105528,105529,105531,105532,105534],{},"重置 ",[42,105530,33501],{},"。注意它不会重新创建 ",[42,105533,102185],{},"，因为模型结构没有变，只是状态回到初始值。",[36,105536,105537],{"className":30478,"code":104792,"language":30480,"meta":25,"style":25},[42,105538,105539],{"__ignoreMap":25},[45,105540,105541,105543,105545,105547,105549],{"class":47,"line":48},[45,105542,104799],{"class":55},[45,105544,356],{"class":79},[45,105546,4593],{"class":55},[45,105548,59],{"class":51},[45,105550,104808],{"class":79},[20,105552,105553,105554,490,105557,490,105560,105562],{},"这行是“手动改状态”。在 freejoint 中，",[42,105555,105556],{},"qpos[0]",[42,105558,105559],{},"qpos[1]",[42,105561,105356],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[36,105564,105565],{"className":30478,"code":104643,"language":30480,"meta":25,"style":25},[42,105566,105567],{"__ignoreMap":25},[45,105568,105569],{"class":47,"line":48},[45,105570,104643],{"class":55},[20,105572,105573,105574,105576,105577,105579],{},"手动改完 ",[42,105575,104130],{}," 后，调用 ",[42,105578,104350],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[15,105581,102416],{"id":102415},[20,105583,105584],{},"你会看到:",[233,105586,105587,105592,105597,105600],{},[169,105588,105589,105590],{},"初始时间为 ",[42,105591,469],{},[169,105593,105594,105595],{},"50 步后时间约为 ",[42,105596,35429],{},[169,105598,105599],{},"reset 后状态恢复",[169,105601,105602,105603,105606,105607],{},"手动修改 ",[42,105604,105605],{},"data.qpos[2]"," 后，小球高度变为 ",[42,105608,105360],{},[20,105610,105611,105613],{},[42,105612,105356],{}," 在这个例子中表示自由刚体的 z 坐标。",[20,105615,105616],{},"输出里可以重点看三件事：",[233,105618,105619,105627,105632],{},[169,105620,105621,105623,105624,105626],{},[42,105622,2537],{}," 是否随着 ",[42,105625,101315],{}," 增加。",[169,105628,105629,105631],{},[42,105630,104130],{}," 的 z 坐标是否因为下落而变化。",[169,105633,105634,105636,105637,28485],{},[42,105635,104452],{}," 后时间是否回到 ",[42,105638,469],{},[15,105640,102448],{"id":102447},[233,105642,105643,105649,105655,105661,105664,105673],{},[169,105644,105645,105646,28485],{},"修改 timestep 为 ",[42,105647,105648],{},"0.005",[169,105650,105651,105652,28485],{},"重新运行，检查 50 步后时间是否约为 ",[42,105653,105654],{},"0.25",[169,105656,105657,105658,28485],{},"修改重力为 ",[42,105659,105660],{},"0 0 -1.0",[169,105662,105663],{},"观察小球下降速度是否变慢。",[169,105665,102511,105666,102514,105669,105672],{},[42,105667,105668],{},"data.qpos[2] = 2.0",[42,105670,105671],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[169,105674,105675,105676,105679],{},"注释掉 ",[42,105677,105678],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[15,105681,102553],{"id":102552},[249,105683,105685,105686,105688],{"id":105684},"修改-dataqpos-后位置没有更新","修改 ",[42,105687,101170],{}," 后位置没有更新",[20,105690,102562],{},[36,105692,105693],{"className":30478,"code":104643,"language":30480,"meta":25,"style":25},[42,105694,105695],{"__ignoreMap":25},[45,105696,105697],{"class":47,"line":48},[45,105698,104643],{"class":55},[249,105700,105701],{"id":105701},"数组维度看不懂",[20,105703,105704],{},"打印模型维度:",[36,105706,105708],{"className":30478,"code":105707,"language":30480,"meta":25,"style":25},"print(model.nq, model.nv, model.nu)\n",[42,105709,105710],{"__ignoreMap":25},[45,105711,105712,105714],{"class":47,"line":48},[45,105713,30515],{"class":79},[45,105715,105716],{"class":55},"(model.nq, model.nv, model.nu)\n",[415,105718,105719,105727],{},[418,105720,105721],{},[421,105722,105723,105725],{},[424,105724,104674],{"align":23885},[424,105726,100800],{"align":23885},[462,105728,105729,105739,105749],{},[421,105730,105731,105736],{},[467,105732,105733],{"align":23885},[42,105734,105735],{},"nq",[467,105737,105738],{"align":23885},"位置变量数量",[421,105740,105741,105746],{},[467,105742,105743],{"align":23885},[42,105744,105745],{},"nv",[467,105747,105748],{"align":23885},"速度变量数量",[421,105750,105751,105755],{},[467,105752,105753],{"align":23885},[42,105754,102262],{},[467,105756,105757],{"align":23885},"控制输入数量",[249,105759,105761,105762,105764],{"id":105760},"误以为-qpos-一定等于关节数","误以为 ",[42,105763,104130],{}," 一定等于关节数",[20,105766,105767,105768,82630,105770,105772,105773,105775],{},"不是。例如 ",[42,105769,101720],{},[42,105771,104130],{}," 是 7 维，但 ",[42,105774,104460],{}," 是 6 维。",[249,105777,105779,105780,105782],{"id":105778},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[42,105781,104130],{}," 的第几位",[20,105784,105785],{},"初学时可以先打印：",[36,105787,105789],{"className":30478,"code":105788,"language":30480,"meta":25,"style":25},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[42,105790,105791,105801,105811,105823],{"__ignoreMap":25},[45,105792,105793,105795,105797,105799],{"class":47,"line":48},[45,105794,30515],{"class":79},[45,105796,282],{"class":55},[45,105798,101539],{"class":62},[45,105800,101542],{"class":55},[45,105802,105803,105805,105807,105809],{"class":47,"line":66},[45,105804,30515],{"class":79},[45,105806,282],{"class":55},[45,105808,101551],{"class":62},[45,105810,101554],{"class":55},[45,105812,105813,105815,105817,105820],{"class":47,"line":1331},[45,105814,30515],{"class":79},[45,105816,282],{"class":55},[45,105818,105819],{"class":62},"\"qpos:\"",[45,105821,105822],{"class":55},", data.qpos)\n",[45,105824,105825,105827,105829,105832],{"class":47,"line":1346},[45,105826,30515],{"class":79},[45,105828,282],{"class":55},[45,105830,105831],{"class":62},"\"qvel:\"",[45,105833,105834],{"class":55},", data.qvel)\n",[20,105836,105837],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[249,105839,105840],{"id":105840},"仿真结果每次都一样",[20,105842,105843,105844,105846],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[42,105845,104130],{},"、目标点或控制输入。",[15,105848,102707],{"id":102706},[20,105850,105851,105852,24766],{},"Python 控制 MuJoCo 的核心就是读写 ",[42,105853,33501],{},[233,105855,105856,105864,105869,105874],{},[169,105857,105858,105859,101118,105861,105863],{},"用 ",[42,105860,101170],{},[42,105862,101173],{}," 读取状态。",[169,105865,105858,105866,105868],{},[42,105867,101176],{}," 写入控制。",[169,105870,105858,105871,105873],{},[42,105872,101315],{}," 推进时间。",[169,105875,105876,105877,105879],{},"手动改状态后用 ",[42,105878,104350],{}," 刷新派生量。",[20,105881,105882],{},"理解这一章后，就可以进入关节和 actuator 控制。",[196,105884,105885],{},"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":25,"searchDepth":66,"depth":66,"links":105887},[105888,105889,105890,105897,105901,105902,105903,105913],{"id":100746,"depth":66,"text":100747},{"id":100869,"depth":66,"text":100870},{"id":101144,"depth":66,"text":101145,"children":105891},[105892,105894,105896],{"id":104655,"depth":1331,"text":105893},"qpos、qvel、ctrl 是什么",{"id":104733,"depth":1331,"text":105895},"mj_step 和 mj_forward 的区别",{"id":104822,"depth":1331,"text":104823},{"id":101352,"depth":66,"text":101353,"children":105898},[105899,105900],{"id":101672,"depth":1331,"text":101672},{"id":101808,"depth":1331,"text":101808},{"id":102415,"depth":66,"text":102416},{"id":102447,"depth":66,"text":102448},{"id":102552,"depth":66,"text":102553,"children":105904},[105905,105907,105908,105910,105912],{"id":105684,"depth":1331,"text":105906},"修改 data.qpos 后位置没有更新",{"id":105701,"depth":1331,"text":105701},{"id":105760,"depth":1331,"text":105909},"误以为 qpos 一定等于关节数",{"id":105778,"depth":1331,"text":105911},"不知道某个元素在 qpos 的第几位",{"id":105840,"depth":1331,"text":105840},{"id":102706,"depth":66,"text":102707},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104418,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105920,"title":105921,"body":105922,"description":25,"extension":205,"meta":107612,"navigation":207,"path":107613,"seo":107614,"stem":107615,"__hash__":107616},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105923,"toc":107588},[105924,105927,105929,105932,105934,105959,105962,105981,105984,105986,105988,106012,106014,106028,106030,106071,106073,106097,106099,106102,106136,106138,106151,106154,106222,106231,106235,106238,106272,106278,106281,106285,106324,106327,106347,106351,106394,106396,106425,106428,106434,106437,106439,106833,106835,106847,106849,106860,106862,106865,106894,106902,106905,106940,106943,106945,106953,106956,106958,106969,106979,106999,107002,107038,107050,107098,107117,107159,107172,107200,107205,107226,107236,107254,107257,107291,107294,107314,107317,107336,107342,107344,107347,107353,107359,107369,107372,107378,107387,107389,107435,107437,107443,107449,107452,107455,107475,107478,107484,107490,107492,107515,107518,107521,107530,107533,107571,107573,107576,107582,107585],[10,105925,105921],{"id":105926},"_4关节actuator-与力控制",[15,105928,100747],{"id":100746},[20,105930,105931],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[20,105933,104431],{},[233,105935,105936,105942,105947,105951,105956],{},[169,105937,105938,105941],{},[42,105939,105940],{},"hinge"," 关节",[169,105943,105944],{},[42,105945,105946],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[169,105948,105949],{},[42,105950,101176],{},[169,105952,105953],{},[42,105954,105955],{},"ctrlrange",[169,105957,105958],{},"读取关节角和角速度",[20,105960,105961],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[36,105963,105965],{"className":30478,"code":105964,"language":30480,"meta":25,"style":25},"data.ctrl[0] = ...\n",[42,105966,105967],{"__ignoreMap":25},[45,105968,105969,105972,105974,105976,105978],{"class":47,"line":48},[45,105970,105971],{"class":55},"data.ctrl[",[45,105973,469],{"class":79},[45,105975,4593],{"class":55},[45,105977,59],{"class":51},[45,105979,105980],{"class":79}," ...\n",[20,105982,105983],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[15,105985,100870],{"id":100869},[20,105987,100873],{},[36,105989,105990],{"className":38,"code":104488,"language":40,"meta":25,"style":25},[42,105991,105992],{"__ignoreMap":25},[45,105993,105994,105996,105998,106000,106002,106004,106006,106008,106010],{"class":47,"line":48},[45,105995,24724],{"class":69},[45,105997,26415],{"class":62},[45,105999,23981],{"class":62},[45,106001,26500],{"class":79},[45,106003,104503],{"class":62},[45,106005,100898],{"class":62},[45,106007,102601],{"class":62},[45,106009,100914],{"class":62},[45,106011,104512],{"class":62},[20,106013,102919],{},[36,106015,106016],{"className":38,"code":101019,"language":40,"meta":25,"style":25},[42,106017,106018],{"__ignoreMap":25},[45,106019,106020,106022,106024,106026],{"class":47,"line":48},[45,106021,23978],{"class":69},[45,106023,23981],{"class":62},[45,106025,101030],{"class":62},[45,106027,101033],{"class":62},[20,106029,102936],{},[36,106031,106033],{"className":38,"code":106032,"language":40,"meta":25,"style":25},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[42,106034,106035,106052,106061],{"__ignoreMap":25},[45,106036,106037,106039,106041,106043,106046,106048,106050],{"class":47,"line":48},[45,106038,30430],{"class":69},[45,106040,29276],{"class":62},[45,106042,133],{"class":79},[45,106044,106045],{"class":62}," mujoco-control",[45,106047,101075],{"class":62},[45,106049,101078],{"class":79},[45,106051,101081],{"class":79},[45,106053,106054,106056,106058],{"class":47,"line":66},[45,106055,30430],{"class":69},[45,106057,101088],{"class":62},[45,106059,106060],{"class":62}," mujoco-control\n",[45,106062,106063,106065,106067,106069],{"class":47,"line":1331},[45,106064,23978],{"class":69},[45,106066,23981],{"class":62},[45,106068,101030],{"class":62},[45,106070,101033],{"class":62},[20,106072,101104],{},[233,106074,106075,106081,106088,106094],{},[169,106076,106077,106080],{},[42,106078,106079],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[169,106082,106083,106085,106086,28485],{},[42,106084,101176],{}," 长度等于 ",[42,106087,102258],{},[169,106089,82322,106090,106093],{},[42,106091,106092],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[169,106095,106096],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[15,106098,101145],{"id":101144},[20,106100,106101],{},"关节决定 body 如何运动:",[36,106103,106105],{"className":53167,"code":106104,"language":53169,"meta":25,"style":25},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[42,106106,106107],{"__ignoreMap":25},[45,106108,106109,106111,106113,106115,106117,106120,106122,106124,106126,106129,106131,106134],{"class":47,"line":48},[45,106110,1187],{"class":55},[45,106112,103056],{"class":51400},[45,106114,15069],{"class":69},[45,106116,59],{"class":55},[45,106118,106119],{"class":62},"\"hinge\"",[45,106121,53924],{"class":69},[45,106123,59],{"class":55},[45,106125,106119],{"class":62},[45,106127,106128],{"class":69}," axis",[45,106130,59],{"class":55},[45,106132,106133],{"class":62},"\"0 1 0\"",[45,106135,101244],{"class":55},[20,106137,103152],{},[233,106139,106140,106145,106148],{},[169,106141,106142,106143],{},"名字是 ",[42,106144,105940],{},[169,106146,106147],{},"类型是旋转关节",[169,106149,106150],{},"绕 y 轴旋转",[20,106152,106153],{},"actuator 决定如何施加控制:",[36,106155,106157],{"className":53167,"code":106156,"language":53169,"meta":25,"style":25},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[42,106158,106159,106168,106214],{"__ignoreMap":25},[45,106160,106161,106163,106166],{"class":47,"line":48},[45,106162,1187],{"class":55},[45,106164,106165],{"class":51400},"actuator",[45,106167,51407],{"class":55},[45,106169,106170,106172,106175,106177,106179,106182,106185,106187,106189,106192,106194,106196,106199,106201,106204,106207,106209,106212],{"class":47,"line":66},[45,106171,52244],{"class":55},[45,106173,106174],{"class":51400},"motor",[45,106176,15069],{"class":69},[45,106178,59],{"class":55},[45,106180,106181],{"class":62},"\"hinge_motor\"",[45,106183,106184],{"class":69}," joint",[45,106186,59],{"class":55},[45,106188,106119],{"class":62},[45,106190,106191],{"class":69}," gear",[45,106193,59],{"class":55},[45,106195,3828],{"class":62},[45,106197,106198],{"class":69}," ctrlrange",[45,106200,59],{"class":55},[45,106202,106203],{"class":62},"\"-2 2\"",[45,106205,106206],{"class":69}," ctrllimited",[45,106208,59],{"class":55},[45,106210,106211],{"class":62},"\"true\"",[45,106213,101244],{"class":55},[45,106215,106216,106218,106220],{"class":47,"line":1331},[45,106217,51885],{"class":55},[45,106219,106165],{"class":51400},[45,106221,51407],{"class":55},[20,106223,106224,106227,106228,28485],{},[42,106225,106226],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[42,106229,106230],{},"[-2, 2]",[249,106232,106234],{"id":106233},"joint-和-actuator-的关系","joint 和 actuator 的关系",[20,106236,106237],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[415,106239,106240,106250],{},[418,106241,106242],{},[421,106243,106244,106246,106248],{},[424,106245,25853],{"align":23885},[424,106247,102796],{"align":23885},[424,106249,100834],{"align":23885},[462,106251,106252,106262],{},[421,106253,106254,106256,106259],{},[467,106255,103056],{"align":23885},[467,106257,106258],{"align":23885},"定义能怎么动",[467,106260,106261],{"align":23885},"门轴允许门旋转",[421,106263,106264,106266,106269],{},[467,106265,106165],{"align":23885},[467,106267,106268],{"align":23885},"定义怎么施力或控制",[467,106270,106271],{"align":23885},"人推门、马达带动门",[20,106273,106274,106275,106277],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[42,106276,101176],{}," 主动控制它。",[20,106279,106280],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[249,106282,106284],{"id":106283},"hinge-joint","hinge joint",[36,106286,106288],{"className":53167,"code":106287,"language":53169,"meta":25,"style":25},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[42,106289,106290],{"__ignoreMap":25},[45,106291,106292,106294,106296,106298,106300,106302,106304,106306,106308,106310,106312,106314,106317,106319,106322],{"class":47,"line":48},[45,106293,1187],{"class":55},[45,106295,103056],{"class":51400},[45,106297,15069],{"class":69},[45,106299,59],{"class":55},[45,106301,106119],{"class":62},[45,106303,53924],{"class":69},[45,106305,59],{"class":55},[45,106307,106119],{"class":62},[45,106309,106128],{"class":69},[45,106311,59],{"class":55},[45,106313,106133],{"class":62},[45,106315,106316],{"class":69}," damping",[45,106318,59],{"class":55},[45,106320,106321],{"class":62},"\"0.1\"",[45,106323,101244],{"class":55},[20,106325,106326],{},"含义：",[233,106328,106329,106335,106341],{},[169,106330,106331,106334],{},[42,106332,106333],{},"type=\"hinge\"","：只能绕一个轴旋转。",[169,106336,106337,106340],{},[42,106338,106339],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[169,106342,106343,106346],{},[42,106344,106345],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[249,106348,106350],{"id":106349},"motor-actuator","motor actuator",[36,106352,106354],{"className":53167,"code":106353,"language":53169,"meta":25,"style":25},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[42,106355,106356],{"__ignoreMap":25},[45,106357,106358,106360,106362,106364,106366,106368,106370,106372,106374,106376,106378,106380,106382,106384,106386,106388,106390,106392],{"class":47,"line":48},[45,106359,1187],{"class":55},[45,106361,106174],{"class":51400},[45,106363,15069],{"class":69},[45,106365,59],{"class":55},[45,106367,106181],{"class":62},[45,106369,106184],{"class":69},[45,106371,59],{"class":55},[45,106373,106119],{"class":62},[45,106375,106191],{"class":69},[45,106377,59],{"class":55},[45,106379,3828],{"class":62},[45,106381,106198],{"class":69},[45,106383,59],{"class":55},[45,106385,106203],{"class":62},[45,106387,106206],{"class":69},[45,106389,59],{"class":55},[45,106391,106211],{"class":62},[45,106393,101244],{"class":55},[20,106395,106326],{},[233,106397,106398,106407,106413,106419],{},[169,106399,106400,106403,106404,106406],{},[42,106401,106402],{},"joint=\"hinge\"","：这个电机作用在名为 ",[42,106405,105940],{}," 的关节上。",[169,106408,106409,106412],{},[42,106410,106411],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[169,106414,106415,106418],{},[42,106416,106417],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[169,106420,106421,106424],{},[42,106422,106423],{},"ctrllimited=\"true\"","：启用控制范围限制。",[20,106426,106427],{},"简单理解：",[36,106429,106432],{"className":106430,"code":106431,"language":5337,"meta":25},[5335],"实际施加效果 ≈ data.ctrl[0] * gear\n",[42,106433,106431],{"__ignoreMap":25},[20,106435,106436],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[15,106438,101353],{"id":101352},[36,106440,106442],{"className":30478,"code":106441,"language":30480,"meta":25,"style":25},"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",[42,106443,106444,106451,106455,106461,106471,106475,106479,106487,106492,106497,106501,106505,106510,106515,106519,106524,106529,106534,106539,106543,106547,106551,106556,106561,106566,106570,106574,106578,106582,106594,106606,106614,106618,106628,106638,106648,106652,106665,106678,106682,106699,106713,106748,106752,106756,106767,106782,106797,106809,106813,106817,106829],{"__ignoreMap":25},[45,106445,106446,106448],{"class":47,"line":48},[45,106447,30492],{"class":51},[45,106449,106450],{"class":55}," math\n",[45,106452,106453],{"class":47,"line":66},[45,106454,2550],{"emptyLinePlaceholder":207},[45,106456,106457,106459],{"class":47,"line":1331},[45,106458,30492],{"class":51},[45,106460,101401],{"class":55},[45,106462,106463,106465,106467,106469],{"class":47,"line":1346},[45,106464,30492],{"class":51},[45,106466,31480],{"class":55},[45,106468,31483],{"class":51},[45,106470,31486],{"class":55},[45,106472,106473],{"class":47,"line":1352},[45,106474,2550],{"emptyLinePlaceholder":207},[45,106476,106477],{"class":47,"line":1366},[45,106478,2550],{"emptyLinePlaceholder":207},[45,106480,106481,106483,106485],{"class":47,"line":1372},[45,106482,101414],{"class":79},[45,106484,13713],{"class":51},[45,106486,101419],{"class":62},[45,106488,106489],{"class":47,"line":1463},[45,106490,106491],{"class":62},"\u003Cmujoco model=\"one_link_motor\">\n",[45,106493,106494],{"class":47,"line":1469},[45,106495,106496],{"class":62},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[45,106498,106499],{"class":47,"line":1481},[45,106500,2550],{"emptyLinePlaceholder":207},[45,106502,106503],{"class":47,"line":1763},[45,106504,101438],{"class":62},[45,106506,106507],{"class":47,"line":1768},[45,106508,106509],{"class":62},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[45,106511,106512],{"class":47,"line":1774},[45,106513,106514],{"class":62},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[45,106516,106517],{"class":47,"line":1779},[45,106518,2550],{"emptyLinePlaceholder":207},[45,106520,106521],{"class":47,"line":1793},[45,106522,106523],{"class":62},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[45,106525,106526],{"class":47,"line":1798},[45,106527,106528],{"class":62},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[45,106530,106531],{"class":47,"line":1804},[45,106532,106533],{"class":62},"        \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",[45,106535,106536],{"class":47,"line":1825},[45,106537,106538],{"class":62},"      \u003C\u002Fbody>\n",[45,106540,106541],{"class":47,"line":1830},[45,106542,101467],{"class":62},[45,106544,106545],{"class":47,"line":1844},[45,106546,101472],{"class":62},[45,106548,106549],{"class":47,"line":1849},[45,106550,2550],{"emptyLinePlaceholder":207},[45,106552,106553],{"class":47,"line":1878},[45,106554,106555],{"class":62},"  \u003Cactuator>\n",[45,106557,106558],{"class":47,"line":1883},[45,106559,106560],{"class":62},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[45,106562,106563],{"class":47,"line":1900},[45,106564,106565],{"class":62},"  \u003C\u002Factuator>\n",[45,106567,106568],{"class":47,"line":1905},[45,106569,101477],{"class":62},[45,106571,106572],{"class":47,"line":1910},[45,106573,95798],{"class":62},[45,106575,106576],{"class":47,"line":1915},[45,106577,2550],{"emptyLinePlaceholder":207},[45,106579,106580],{"class":47,"line":1929},[45,106581,2550],{"emptyLinePlaceholder":207},[45,106583,106584,106586,106588,106590,106592],{"class":47,"line":1934},[45,106585,32047],{"class":51},[45,106587,2123],{"class":69},[45,106589,101498],{"class":55},[45,106591,95786],{"class":79},[45,106593,3889],{"class":55},[45,106595,106596,106598,106600,106602,106604],{"class":47,"line":2727},[45,106597,101507],{"class":55},[45,106599,59],{"class":51},[45,106601,101512],{"class":55},[45,106603,101414],{"class":79},[45,106605,139],{"class":55},[45,106607,106608,106610,106612],{"class":47,"line":2741},[45,106609,101521],{"class":55},[45,106611,59],{"class":51},[45,106613,101526],{"class":55},[45,106615,106616],{"class":47,"line":2749},[45,106617,2550],{"emptyLinePlaceholder":207},[45,106619,106620,106622,106624,106626],{"class":47,"line":2754},[45,106621,31399],{"class":79},[45,106623,282],{"class":55},[45,106625,101539],{"class":62},[45,106627,101542],{"class":55},[45,106629,106630,106632,106634,106636],{"class":47,"line":2760},[45,106631,31399],{"class":79},[45,106633,282],{"class":55},[45,106635,101551],{"class":62},[45,106637,101554],{"class":55},[45,106639,106640,106642,106644,106646],{"class":47,"line":2766},[45,106641,31399],{"class":79},[45,106643,282],{"class":55},[45,106645,101563],{"class":62},[45,106647,101566],{"class":55},[45,106649,106650],{"class":47,"line":2771},[45,106651,2550],{"emptyLinePlaceholder":207},[45,106653,106654,106656,106659,106661,106663],{"class":47,"line":8098},[45,106655,3251],{"class":51},[45,106657,106658],{"class":55}," model.nu ",[45,106660,21097],{"class":51},[45,106662,136],{"class":79},[45,106664,3889],{"class":55},[45,106666,106667,106669,106671,106673,106676],{"class":47,"line":8122},[45,106668,103532],{"class":51},[45,106670,103535],{"class":79},[45,106672,282],{"class":55},[45,106674,106675],{"class":62},"\"expected exactly one actuator\"",[45,106677,139],{"class":55},[45,106679,106680],{"class":47,"line":8127},[45,106681,2550],{"emptyLinePlaceholder":207},[45,106683,106684,106686,106688,106690,106692,106694,106697],{"class":47,"line":8133},[45,106685,3351],{"class":51},[45,106687,31716],{"class":55},[45,106689,26143],{"class":51},[45,106691,32543],{"class":79},[45,106693,282],{"class":55},[45,106695,106696],{"class":79},"2000",[45,106698,30886],{"class":55},[45,106700,106701,106704,106706,106708,106710],{"class":47,"line":8160},[45,106702,106703],{"class":55},"        t ",[45,106705,59],{"class":51},[45,106707,31716],{"class":55},[45,106709,732],{"class":51},[45,106711,106712],{"class":55}," model.opt.timestep\n",[45,106714,106715,106718,106720,106722,106724,106727,106729,106732,106734,106736,106739,106741,106743,106745],{"class":47,"line":8165},[45,106716,106717],{"class":55},"        data.ctrl[",[45,106719,469],{"class":79},[45,106721,4593],{"class":55},[45,106723,59],{"class":51},[45,106725,106726],{"class":79}," 1.5",[45,106728,6668],{"class":51},[45,106730,106731],{"class":55}," math.sin(",[45,106733,105360],{"class":79},[45,106735,6668],{"class":51},[45,106737,106738],{"class":55}," math.pi ",[45,106740,732],{"class":51},[45,106742,61967],{"class":79},[45,106744,6668],{"class":51},[45,106746,106747],{"class":55}," t)\n",[45,106749,106750],{"class":47,"line":8171},[45,106751,101616],{"class":55},[45,106753,106754],{"class":47,"line":8183},[45,106755,2550],{"emptyLinePlaceholder":207},[45,106757,106758,106760,106762,106765],{"class":47,"line":8195},[45,106759,31399],{"class":79},[45,106761,282],{"class":55},[45,106763,106764],{"class":62},"\"time:\"",[45,106766,101578],{"class":55},[45,106768,106769,106771,106773,106776,106778,106780],{"class":47,"line":8207},[45,106770,31399],{"class":79},[45,106772,282],{"class":55},[45,106774,106775],{"class":62},"\"joint qpos:\"",[45,106777,105030],{"class":55},[45,106779,570],{"class":79},[45,106781,30597],{"class":55},[45,106783,106784,106786,106788,106791,106793,106795],{"class":47,"line":9866},[45,106785,31399],{"class":79},[45,106787,282],{"class":55},[45,106789,106790],{"class":62},"\"joint qvel:\"",[45,106792,105046],{"class":55},[45,106794,570],{"class":79},[45,106796,30597],{"class":55},[45,106798,106799,106801,106803,106806],{"class":47,"line":9890},[45,106800,31399],{"class":79},[45,106802,282],{"class":55},[45,106804,106805],{"class":62},"\"last ctrl:\"",[45,106807,106808],{"class":55},", data.ctrl.copy())\n",[45,106810,106811],{"class":47,"line":9913},[45,106812,2550],{"emptyLinePlaceholder":207},[45,106814,106815],{"class":47,"line":9937},[45,106816,2550],{"emptyLinePlaceholder":207},[45,106818,106819,106821,106823,106825,106827],{"class":47,"line":9942},[45,106820,1682],{"class":51},[45,106822,31320],{"class":79},[45,106824,101659],{"class":51},[45,106826,101662],{"class":62},[45,106828,3889],{"class":55},[45,106830,106831],{"class":47,"line":9947},[45,106832,101669],{"class":55},[20,106834,103670],{},[36,106836,106838],{"className":38,"code":106837,"language":40,"meta":25,"style":25},"touch ch4_joint_motor.py\n",[42,106839,106840],{"__ignoreMap":25},[45,106841,106842,106844],{"class":47,"line":48},[45,106843,101383],{"class":69},[45,106845,106846],{"class":62}," ch4_joint_motor.py\n",[20,106848,102401],{},[36,106850,106852],{"className":38,"code":106851,"language":40,"meta":25,"style":25},"python ch4_joint_motor.py\n",[42,106853,106854],{"__ignoreMap":25},[45,106855,106856,106858],{"class":47,"line":48},[45,106857,30480],{"class":69},[45,106859,106846],{"class":62},[249,106861,101672],{"id":101672},[20,106863,106864],{},"检查 actuator 数量：",[36,106866,106868],{"className":30478,"code":106867,"language":30480,"meta":25,"style":25},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[42,106869,106870,106882],{"__ignoreMap":25},[45,106871,106872,106874,106876,106878,106880],{"class":47,"line":48},[45,106873,1682],{"class":51},[45,106875,106658],{"class":55},[45,106877,21097],{"class":51},[45,106879,136],{"class":79},[45,106881,3889],{"class":55},[45,106883,106884,106886,106888,106890,106892],{"class":47,"line":66},[45,106885,103995],{"class":51},[45,106887,103535],{"class":79},[45,106889,282],{"class":55},[45,106891,106675],{"class":62},[45,106893,139],{"class":55},[20,106895,106896,106898,106899,106901],{},[42,106897,102258],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[42,106900,101176],{}," 长度应该是 1。",[20,106903,106904],{},"产生正弦控制信号：",[36,106906,106908],{"className":30478,"code":106907,"language":30480,"meta":25,"style":25},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[42,106909,106910],{"__ignoreMap":25},[45,106911,106912,106914,106916,106918,106920,106922,106924,106926,106928,106930,106932,106934,106936,106938],{"class":47,"line":48},[45,106913,105971],{"class":55},[45,106915,469],{"class":79},[45,106917,4593],{"class":55},[45,106919,59],{"class":51},[45,106921,106726],{"class":79},[45,106923,6668],{"class":51},[45,106925,106731],{"class":55},[45,106927,105360],{"class":79},[45,106929,6668],{"class":51},[45,106931,106738],{"class":55},[45,106933,732],{"class":51},[45,106935,61967],{"class":79},[45,106937,6668],{"class":51},[45,106939,106747],{"class":55},[20,106941,106942],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[20,106944,101773],{},[36,106946,106947],{"className":30478,"code":104605,"language":30480,"meta":25,"style":25},[42,106948,106949],{"__ignoreMap":25},[45,106950,106951],{"class":47,"line":48},[45,106952,104605],{"class":55},[20,106954,106955],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[249,106957,101808],{"id":101808},[36,106959,106961],{"className":30478,"code":106960,"language":30480,"meta":25,"style":25},"import math\n",[42,106962,106963],{"__ignoreMap":25},[45,106964,106965,106967],{"class":47,"line":48},[45,106966,30492],{"class":51},[45,106968,106450],{"class":55},[20,106970,106971,106972,101118,106975,106978],{},"导入 Python 标准库里的数学模块。后面要用 ",[42,106973,106974],{},"math.sin",[42,106976,106977],{},"math.pi"," 生成周期变化的控制信号。",[36,106980,106981],{"className":30478,"code":103786,"language":30480,"meta":25,"style":25},[42,106982,106983,106989],{"__ignoreMap":25},[45,106984,106985,106987],{"class":47,"line":48},[45,106986,30492],{"class":51},[45,106988,101401],{"class":55},[45,106990,106991,106993,106995,106997],{"class":47,"line":66},[45,106992,30492],{"class":51},[45,106994,31480],{"class":55},[45,106996,31483],{"class":51},[45,106998,31486],{"class":55},[20,107000,107001],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[36,107003,107004],{"className":53167,"code":106287,"language":53169,"meta":25,"style":25},[42,107005,107006],{"__ignoreMap":25},[45,107007,107008,107010,107012,107014,107016,107018,107020,107022,107024,107026,107028,107030,107032,107034,107036],{"class":47,"line":48},[45,107009,1187],{"class":55},[45,107011,103056],{"class":51400},[45,107013,15069],{"class":69},[45,107015,59],{"class":55},[45,107017,106119],{"class":62},[45,107019,53924],{"class":69},[45,107021,59],{"class":55},[45,107023,106119],{"class":62},[45,107025,106128],{"class":69},[45,107027,59],{"class":55},[45,107029,106133],{"class":62},[45,107031,106316],{"class":69},[45,107033,59],{"class":55},[45,107035,106321],{"class":62},[45,107037,101244],{"class":55},[20,107039,107040,107041,107043,107044,107046,107047,107049],{},"这行定义关节。",[42,107042,105940],{}," 表示旋转关节。",[42,107045,106339],{}," 表示绕 y 轴旋转。",[42,107048,106345],{}," 表示有一点阻尼，运动不会完全无损耗。",[36,107051,107053],{"className":53167,"code":107052,"language":53169,"meta":25,"style":25},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[42,107054,107055],{"__ignoreMap":25},[45,107056,107057,107059,107061,107063,107065,107068,107070,107072,107075,107078,107080,107083,107085,107087,107089,107091,107093,107096],{"class":47,"line":48},[45,107058,1187],{"class":55},[45,107060,101220],{"class":51400},[45,107062,15069],{"class":69},[45,107064,59],{"class":55},[45,107066,107067],{"class":62},"\"link_geom\"",[45,107069,53924],{"class":69},[45,107071,59],{"class":55},[45,107073,107074],{"class":62},"\"capsule\"",[45,107076,107077],{"class":69}," fromto",[45,107079,59],{"class":55},[45,107081,107082],{"class":62},"\"0 0 0 0 0 0.5\"",[45,107084,101236],{"class":69},[45,107086,59],{"class":55},[45,107088,103878],{"class":62},[45,107090,102101],{"class":69},[45,107092,59],{"class":55},[45,107094,107095],{"class":62},"\"0.5\"",[45,107097,101244],{"class":55},[20,107099,107100,107101,107103,107104,107106,107107,107110,107111,28485,107114,107116],{},"这行定义摆杆的形状。",[42,107102,103265],{}," 是胶囊体，适合表示杆子。",[42,107105,103276],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[42,107108,107109],{},"(0,0,0)"," 延伸到 ",[42,107112,107113],{},"(0,0,0.5)",[42,107115,103270],{}," 是半径。",[36,107118,107119],{"className":53167,"code":106353,"language":53169,"meta":25,"style":25},[42,107120,107121],{"__ignoreMap":25},[45,107122,107123,107125,107127,107129,107131,107133,107135,107137,107139,107141,107143,107145,107147,107149,107151,107153,107155,107157],{"class":47,"line":48},[45,107124,1187],{"class":55},[45,107126,106174],{"class":51400},[45,107128,15069],{"class":69},[45,107130,59],{"class":55},[45,107132,106181],{"class":62},[45,107134,106184],{"class":69},[45,107136,59],{"class":55},[45,107138,106119],{"class":62},[45,107140,106191],{"class":69},[45,107142,59],{"class":55},[45,107144,3828],{"class":62},[45,107146,106198],{"class":69},[45,107148,59],{"class":55},[45,107150,106203],{"class":62},[45,107152,106206],{"class":69},[45,107154,59],{"class":55},[45,107156,106211],{"class":62},[45,107158,101244],{"class":55},[20,107160,107161,107162,107164,107165,107168,107169,107171],{},"这行定义电机。它作用在 ",[42,107163,105940],{}," 关节上。",[42,107166,107167],{},"gear"," 可以理解成放大倍数。",[42,107170,105955],{}," 限制控制输入范围。",[36,107173,107174],{"className":30478,"code":106867,"language":30480,"meta":25,"style":25},[42,107175,107176,107188],{"__ignoreMap":25},[45,107177,107178,107180,107182,107184,107186],{"class":47,"line":48},[45,107179,1682],{"class":51},[45,107181,106658],{"class":55},[45,107183,21097],{"class":51},[45,107185,136],{"class":79},[45,107187,3889],{"class":55},[45,107189,107190,107192,107194,107196,107198],{"class":47,"line":66},[45,107191,103995],{"class":51},[45,107193,103535],{"class":79},[45,107195,282],{"class":55},[45,107197,106675],{"class":62},[45,107199,139],{"class":55},[20,107201,107202,107204],{},[42,107203,102258],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[36,107206,107208],{"className":30478,"code":107207,"language":30480,"meta":25,"style":25},"for step in range(2000):\n",[42,107209,107210],{"__ignoreMap":25},[45,107211,107212,107214,107216,107218,107220,107222,107224],{"class":47,"line":48},[45,107213,3175],{"class":51},[45,107215,31716],{"class":55},[45,107217,26143],{"class":51},[45,107219,32543],{"class":79},[45,107221,282],{"class":55},[45,107223,106696],{"class":79},[45,107225,30886],{"class":55},[20,107227,107228,107229,107231,107232,107235],{},"循环 2000 步。这里没有用 ",[42,107230,1269],{},"，而是用 ",[42,107233,107234],{},"step","，因为后面要用当前步数计算时间。",[36,107237,107239],{"className":30478,"code":107238,"language":30480,"meta":25,"style":25},"t = step * model.opt.timestep\n",[42,107240,107241],{"__ignoreMap":25},[45,107242,107243,107246,107248,107250,107252],{"class":47,"line":48},[45,107244,107245],{"class":55},"t ",[45,107247,59],{"class":51},[45,107249,31716],{"class":55},[45,107251,732],{"class":51},[45,107253,106712],{"class":55},[20,107255,107256],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[36,107258,107259],{"className":30478,"code":106907,"language":30480,"meta":25,"style":25},[42,107260,107261],{"__ignoreMap":25},[45,107262,107263,107265,107267,107269,107271,107273,107275,107277,107279,107281,107283,107285,107287,107289],{"class":47,"line":48},[45,107264,105971],{"class":55},[45,107266,469],{"class":79},[45,107268,4593],{"class":55},[45,107270,59],{"class":51},[45,107272,106726],{"class":79},[45,107274,6668],{"class":51},[45,107276,106731],{"class":55},[45,107278,105360],{"class":79},[45,107280,6668],{"class":51},[45,107282,106738],{"class":55},[45,107284,732],{"class":51},[45,107286,61967],{"class":79},[45,107288,6668],{"class":51},[45,107290,106747],{"class":55},[20,107292,107293],{},"这行给电机输入一个正弦波。拆开看：",[233,107295,107296,107302,107308],{},[169,107297,107298,107301],{},[42,107299,107300],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[169,107303,107304,107307],{},[42,107305,107306],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[169,107309,107310,107313],{},[42,107311,107312],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[20,107315,107316],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[36,107318,107320],{"className":30478,"code":107319,"language":30480,"meta":25,"style":25},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[42,107321,107322],{"__ignoreMap":25},[45,107323,107324,107326,107328,107330,107332,107334],{"class":47,"line":48},[45,107325,30515],{"class":79},[45,107327,282],{"class":55},[45,107329,106775],{"class":62},[45,107331,105030],{"class":55},[45,107333,570],{"class":79},[45,107335,30597],{"class":55},[20,107337,107338,107339,107341],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[42,107340,101170],{}," 只有一个数。",[15,107343,102416],{"id":102415},[20,107345,107346],{},"输出类似:",[36,107348,107351],{"className":107349,"code":107350,"language":5337,"meta":25},[5335],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[42,107352,107350],{"__ignoreMap":25},[20,107354,107355,107356,107358],{},"这里 ",[42,107357,106226],{}," 是电机输入。",[20,107360,107361,107364,107365,107368],{},[42,107362,107363],{},"joint qpos"," 是关节角度，单位通常是弧度。",[42,107366,107367],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[20,107370,107371],{},"角度单位提示：",[36,107373,107376],{"className":107374,"code":107375,"language":5337,"meta":25},[5335],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[42,107377,107375],{"__ignoreMap":25},[20,107379,107380,107381,107383,107384,107386],{},"如果你看到 ",[42,107382,104130],{}," 是 ",[42,107385,35429],{},"，大约就是 28.6 度。",[15,107388,102448],{"id":102447},[233,107390,107391,107398,107401,107408,107411,107419,107427],{},[169,107392,102511,107393,102514,107395,28485],{},[42,107394,106411],{},[42,107396,107397],{},"gear=\"5\"",[169,107399,107400],{},"重新运行，观察关节运动是否更剧烈。",[169,107402,102511,107403,102514,107405,28485],{},[42,107404,105955],{},[42,107406,107407],{},"-0.2 0.2",[169,107409,107410],{},"重新运行，观察控制能力是否变弱。",[169,107412,107413,107414,107416,107417,28485],{},"去掉 actuator，确认 ",[42,107415,102258],{}," 变成 ",[42,107418,469],{},[169,107420,102511,107421,102514,107423,107426],{},[42,107422,106345],{},[42,107424,107425],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[169,107428,102511,107429,102514,107431,107434],{},[42,107430,106339],{},[42,107432,107433],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[15,107436,102553],{"id":102552},[249,107438,107440],{"id":107439},"indexerror-index-0-is-out-of-bounds",[42,107441,107442],{},"IndexError: index 0 is out of bounds",[20,107444,107445,107446,107448],{},"原因是 ",[42,107447,106092],{},"，没有 actuator。",[249,107450,107451],{"id":107451},"关节几乎不动",[20,107453,107454],{},"可能原因:",[233,107456,107457,107462,107466,107472],{},[169,107458,107459,107461],{},[42,107460,107167],{}," 太小",[169,107463,107464,107461],{},[42,107465,105955],{},[169,107467,107468,107471],{},[42,107469,107470],{},"damping"," 太大",[169,107473,107474],{},"重力方向导致运动不明显",[249,107476,107477],{"id":107477},"模型编译失败",[20,107479,107480,107481,107483],{},"检查 actuator 引用的 ",[42,107482,106402],{}," 是否存在，joint 名称是否拼写一致。",[249,107485,107487,107489],{"id":107486},"datactrl0-写了但没有效果",[42,107488,106226],{}," 写了但没有效果",[20,107491,102675],{},[233,107493,107494,107499,107502,107507,107512],{},[169,107495,107496,107498],{},[42,107497,102258],{}," 是否大于 0。",[169,107500,107501],{},"motor 是否引用了正确 joint。",[169,107503,107504,107506],{},[42,107505,107167],{}," 是否太小。",[169,107508,107509,107511],{},[42,107510,105955],{}," 是否把输入限制得太小。",[169,107513,107514],{},"body 是否真的有可动 joint。",[249,107516,107517],{"id":107517},"控制输入超过范围会怎样",[20,107519,107520],{},"如果设置了：",[36,107522,107524],{"className":53167,"code":107523,"language":53169,"meta":25,"style":25},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[42,107525,107526],{"__ignoreMap":25},[45,107527,107528],{"class":47,"line":48},[45,107529,107523],{"class":55},[20,107531,107532],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[36,107534,107536],{"className":30478,"code":107535,"language":30480,"meta":25,"style":25},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[42,107537,107538,107558],{"__ignoreMap":25},[45,107539,107540,107543,107545,107548,107550,107552,107554,107556],{"class":47,"line":48},[45,107541,107542],{"class":55},"action ",[45,107544,59],{"class":51},[45,107546,107547],{"class":55}," np.clip(action, ",[45,107549,809],{"class":51},[45,107551,105360],{"class":79},[45,107553,12584],{"class":55},[45,107555,105360],{"class":79},[45,107557,139],{"class":55},[45,107559,107560,107562,107564,107566,107568],{"class":47,"line":66},[45,107561,105971],{"class":55},[45,107563,469],{"class":79},[45,107565,4593],{"class":55},[45,107567,59],{"class":51},[45,107569,107570],{"class":55}," action\n",[15,107572,102707],{"id":102706},[20,107574,107575],{},"这一章建立了控制任务的基本形式：",[36,107577,107580],{"className":107578,"code":107579,"language":5337,"meta":25},[5335],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[42,107581,107579],{"__ignoreMap":25},[20,107583,107584],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[196,107586,107587],{},"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":25,"searchDepth":66,"depth":66,"links":107589},[107590,107591,107592,107597,107601,107602,107603,107611],{"id":100746,"depth":66,"text":100747},{"id":100869,"depth":66,"text":100870},{"id":101144,"depth":66,"text":101145,"children":107593},[107594,107595,107596],{"id":106233,"depth":1331,"text":106234},{"id":106283,"depth":1331,"text":106284},{"id":106349,"depth":1331,"text":106350},{"id":101352,"depth":66,"text":101353,"children":107598},[107599,107600],{"id":101672,"depth":1331,"text":101672},{"id":101808,"depth":1331,"text":101808},{"id":102415,"depth":66,"text":102416},{"id":102447,"depth":66,"text":102448},{"id":102552,"depth":66,"text":102553,"children":107604},[107605,107606,107607,107608,107610],{"id":107439,"depth":1331,"text":107442},{"id":107451,"depth":1331,"text":107451},{"id":107477,"depth":1331,"text":107477},{"id":107486,"depth":1331,"text":107609},"data.ctrl[0] 写了但没有效果",{"id":107517,"depth":1331,"text":107517},{"id":102706,"depth":66,"text":102707},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105921,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107618,"title":107619,"body":107620,"description":25,"extension":205,"meta":109529,"navigation":207,"path":109530,"seo":109531,"stem":109532,"__hash__":109533},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107621,"toc":109505},[107622,107625,107627,107630,107638,107641,107658,107661,107686,107689,107735,107737,107739,107794,107796,107815,107817,107860,107863,107880,107883,107899,107909,107916,107918,107921,107924,107958,107961,108009,108013,108016,108030,108039,108043,108046,108071,108074,108078,108091,108094,108100,108103,108118,108120,108123,108383,108385,108397,108400,108712,108714,108726,108728,108731,108746,108751,108754,108776,108779,108782,108816,108819,108823,108834,108837,108854,108857,108871,108878,108898,108905,108919,108922,108934,108949,108969,108972,108994,108997,109001,109016,109027,109042,109045,109075,109091,109120,109128,109152,109155,109173,109183,109195,109202,109211,109217,109226,109229,109231,109240,109243,109258,109260,109263,109274,109277,109288,109291,109309,109311,109328,109331,109359,109361,109365,109368,109398,109404,109407,109411,109419,109422,109424,109445,109448,109451,109467,109470,109486,109488,109491,109502],[10,107623,107619],{"id":107624},"_5viewer-可视化与-renderer-离屏渲染",[15,107626,100747],{"id":100746},[20,107628,107629],{},"本章掌握两类可视化方式:",[233,107631,107632,107635],{},[169,107633,107634],{},"交互式 viewer: 适合人工观察仿真",[169,107636,107637],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[20,107639,107640],{},"使用官方接口:",[36,107642,107644],{"className":30478,"code":107643,"language":30480,"meta":25,"style":25},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[42,107645,107646,107653],{"__ignoreMap":25},[45,107647,107648,107650],{"class":47,"line":48},[45,107649,30492],{"class":51},[45,107651,107652],{"class":55}," mujoco.viewer\n",[45,107654,107655],{"class":47,"line":66},[45,107656,107657],{"class":55},"mujoco.viewer.launch_passive(model, data)\n",[20,107659,107660],{},"以及:",[36,107662,107664],{"className":30478,"code":107663,"language":30480,"meta":25,"style":25},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[42,107665,107666,107676],{"__ignoreMap":25},[45,107667,107668,107671,107673],{"class":47,"line":48},[45,107669,107670],{"class":55},"renderer ",[45,107672,59],{"class":51},[45,107674,107675],{"class":55}," mujoco.Renderer(model)\n",[45,107677,107678,107681,107683],{"class":47,"line":66},[45,107679,107680],{"class":55},"image ",[45,107682,59],{"class":51},[45,107684,107685],{"class":55}," renderer.render()\n",[20,107687,107688],{},"新手建议先理解二者区别：",[415,107690,107691,107707],{},[418,107692,107693],{},[421,107694,107695,107698,107701,107704],{},[424,107696,107697],{"align":23885},"工具",[424,107699,107700],{"align":23885},"用途",[424,107702,107703],{"align":23885},"是否打开窗口",[424,107705,107706],{"align":23885},"常见场景",[462,107708,107709,107722],{},[421,107710,107711,107714,107717,107719],{},[467,107712,107713],{"align":23885},"Viewer",[467,107715,107716],{"align":23885},"人眼实时观察仿真",[467,107718,104765],{"align":23885},[467,107720,107721],{"align":23885},"调试模型、看控制效果",[421,107723,107724,107727,107730,107732],{},[467,107725,107726],{"align":23885},"Renderer",[467,107728,107729],{"align":23885},"生成图像数组",[467,107731,104778],{"align":23885},[467,107733,107734],{"align":23885},"保存图片、训练视觉策略、服务器批量采集",[15,107736,100870],{"id":100869},[20,107738,100873],{},[36,107740,107742],{"className":38,"code":107741,"language":40,"meta":25,"style":25},"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",[42,107743,107744,107756,107766,107774,107782],{"__ignoreMap":25},[45,107745,107746,107748,107750,107752,107754],{"class":47,"line":48},[45,107747,24724],{"class":69},[45,107749,26415],{"class":62},[45,107751,23981],{"class":62},[45,107753,26500],{"class":79},[45,107755,24826],{"class":79},[45,107757,107758,107760,107762,107764],{"class":47,"line":66},[45,107759,100908],{"class":62},[45,107761,100911],{"class":62},[45,107763,100914],{"class":62},[45,107765,24826],{"class":79},[45,107767,107768,107770,107772],{"class":47,"line":1331},[45,107769,100921],{"class":62},[45,107771,100924],{"class":62},[45,107773,24826],{"class":79},[45,107775,107776,107778,107780],{"class":47,"line":1346},[45,107777,100931],{"class":62},[45,107779,100934],{"class":62},[45,107781,24826],{"class":79},[45,107783,107784,107786,107788,107790,107792],{"class":47,"line":1352},[45,107785,100941],{"class":62},[45,107787,100944],{"class":62},[45,107789,100947],{"class":62},[45,107791,100950],{"class":62},[45,107793,102616],{"class":62},[20,107795,102919],{},[36,107797,107799],{"className":38,"code":107798,"language":40,"meta":25,"style":25},"pip install \"mujoco>=2.3\" numpy pillow\n",[42,107800,107801],{"__ignoreMap":25},[45,107802,107803,107805,107807,107809,107812],{"class":47,"line":48},[45,107804,23978],{"class":69},[45,107806,23981],{"class":62},[45,107808,101030],{"class":62},[45,107810,107811],{"class":62}," numpy",[45,107813,107814],{"class":62}," pillow\n",[20,107816,102936],{},[36,107818,107820],{"className":38,"code":107819,"language":40,"meta":25,"style":25},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[42,107821,107822,107839,107848],{"__ignoreMap":25},[45,107823,107824,107826,107828,107830,107833,107835,107837],{"class":47,"line":48},[45,107825,30430],{"class":69},[45,107827,29276],{"class":62},[45,107829,133],{"class":79},[45,107831,107832],{"class":62}," mujoco-render",[45,107834,101075],{"class":62},[45,107836,101078],{"class":79},[45,107838,101081],{"class":79},[45,107840,107841,107843,107845],{"class":47,"line":66},[45,107842,30430],{"class":69},[45,107844,101088],{"class":62},[45,107846,107847],{"class":62}," mujoco-render\n",[45,107849,107850,107852,107854,107856,107858],{"class":47,"line":1331},[45,107851,23978],{"class":69},[45,107853,23981],{"class":62},[45,107855,101030],{"class":62},[45,107857,107811],{"class":62},[45,107859,107814],{"class":62},[20,107861,107862],{},"离屏渲染后端:",[36,107864,107866],{"className":38,"code":107865,"language":40,"meta":25,"style":25},"export MUJOCO_GL=egl\n",[42,107867,107868],{"__ignoreMap":25},[45,107869,107870,107872,107875,107877],{"class":47,"line":48},[45,107871,52],{"class":51},[45,107873,107874],{"class":55}," MUJOCO_GL",[45,107876,59],{"class":51},[45,107878,107879],{"class":55},"egl\n",[20,107881,107882],{},"或:",[36,107884,107886],{"className":38,"code":107885,"language":40,"meta":25,"style":25},"export MUJOCO_GL=osmesa\n",[42,107887,107888],{"__ignoreMap":25},[45,107889,107890,107892,107894,107896],{"class":47,"line":48},[45,107891,52],{"class":51},[45,107893,107874],{"class":55},[45,107895,59],{"class":51},[45,107897,107898],{"class":55},"osmesa\n",[20,107900,107901,107902,107905,107906,28485],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[42,107903,107904],{},"egl"," 失败，再尝试 ",[42,107907,107908],{},"osmesa",[20,107910,107911,107912,107915],{},"如果你在本机桌面环境运行，通常先不要设置 ",[42,107913,107914],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[15,107917,101145],{"id":101144},[20,107919,107920],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[20,107922,107923],{},"典型 viewer 流程:",[36,107925,107927],{"className":30478,"code":107926,"language":30480,"meta":25,"style":25},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[42,107928,107929,107942,107949,107953],{"__ignoreMap":25},[45,107930,107931,107934,107937,107939],{"class":47,"line":48},[45,107932,107933],{"class":51},"with",[45,107935,107936],{"class":55}," mujoco.viewer.launch_passive(model, data) ",[45,107938,31483],{"class":51},[45,107940,107941],{"class":55}," viewer:\n",[45,107943,107944,107946],{"class":47,"line":66},[45,107945,2401],{"class":51},[45,107947,107948],{"class":55}," viewer.is_running():\n",[45,107950,107951],{"class":47,"line":1331},[45,107952,101616],{"class":55},[45,107954,107955],{"class":47,"line":1346},[45,107956,107957],{"class":55},"        viewer.sync()\n",[20,107959,107960],{},"典型 renderer 流程:",[36,107962,107964],{"className":30478,"code":107963,"language":30480,"meta":25,"style":25},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[42,107965,107966,107992,107996,108001],{"__ignoreMap":25},[45,107967,107968,107970,107972,107975,107977,107979,107981,107983,107985,107987,107990],{"class":47,"line":48},[45,107969,107670],{"class":55},[45,107971,59],{"class":51},[45,107973,107974],{"class":55}," mujoco.Renderer(model, ",[45,107976,25129],{"class":5366},[45,107978,59],{"class":51},[45,107980,42442],{"class":79},[45,107982,12584],{"class":55},[45,107984,25125],{"class":5366},[45,107986,59],{"class":51},[45,107988,107989],{"class":79},"640",[45,107991,139],{"class":55},[45,107993,107994],{"class":47,"line":66},[45,107995,104605],{"class":55},[45,107997,107998],{"class":47,"line":1331},[45,107999,108000],{"class":55},"renderer.update_scene(data)\n",[45,108002,108003,108005,108007],{"class":47,"line":1346},[45,108004,107680],{"class":55},[45,108006,59],{"class":51},[45,108008,107685],{"class":55},[249,108010,108012],{"id":108011},"viewer-的同步逻辑","viewer 的同步逻辑",[20,108014,108015],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[36,108017,108019],{"className":30478,"code":108018,"language":30480,"meta":25,"style":25},"mujoco.mj_step(model, data)\nviewer.sync()\n",[42,108020,108021,108025],{"__ignoreMap":25},[45,108022,108023],{"class":47,"line":48},[45,108024,104605],{"class":55},[45,108026,108027],{"class":47,"line":66},[45,108028,108029],{"class":55},"viewer.sync()\n",[20,108031,108032,108034,108035,108038],{},[42,108033,101315],{}," 负责算物理，",[42,108036,108037],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[249,108040,108042],{"id":108041},"为什么要-sleep","为什么要 sleep",[20,108044,108045],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[36,108047,108049],{"className":30478,"code":108048,"language":30480,"meta":25,"style":25},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[42,108050,108051],{"__ignoreMap":25},[45,108052,108053,108056,108058,108061,108063,108066,108068],{"class":47,"line":48},[45,108054,108055],{"class":55},"sleep_time ",[45,108057,59],{"class":51},[45,108059,108060],{"class":55}," model.opt.timestep ",[45,108062,809],{"class":51},[45,108064,108065],{"class":55}," (time.time() ",[45,108067,809],{"class":51},[45,108069,108070],{"class":55}," step_start)\n",[20,108072,108073],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[249,108075,108077],{"id":108076},"renderer-输出是什么","renderer 输出是什么",[36,108079,108081],{"className":30478,"code":108080,"language":30480,"meta":25,"style":25},"image = renderer.render()\n",[42,108082,108083],{"__ignoreMap":25},[45,108084,108085,108087,108089],{"class":47,"line":48},[45,108086,107680],{"class":55},[45,108088,59],{"class":51},[45,108090,107685],{"class":55},[20,108092,108093],{},"得到的是 NumPy 数组，形状通常是：",[36,108095,108098],{"className":108096,"code":108097,"language":5337,"meta":25},[5335],"(height, width, 3)\n",[42,108099,108097],{"__ignoreMap":25},[20,108101,108102],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[36,108104,108106],{"className":30478,"code":108105,"language":30480,"meta":25,"style":25},"Image.fromarray(image).save(\"render_output.png\")\n",[42,108107,108108],{"__ignoreMap":25},[45,108109,108110,108113,108116],{"class":47,"line":48},[45,108111,108112],{"class":55},"Image.fromarray(image).save(",[45,108114,108115],{"class":62},"\"render_output.png\"",[45,108117,139],{"class":55},[15,108119,101353],{"id":101352},[20,108121,108122],{},"交互式 Viewer:",[36,108124,108126],{"className":30478,"code":108125,"language":30480,"meta":25,"style":25},"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",[42,108127,108128,108134,108138,108144,108150,108154,108158,108166,108171,108175,108179,108183,108188,108193,108197,108201,108205,108210,108214,108218,108222,108226,108230,108234,108246,108258,108266,108270,108280,108300,108310,108315,108320,108324,108341,108354,108359,108363,108367,108379],{"__ignoreMap":25},[45,108129,108130,108132],{"class":47,"line":48},[45,108131,30492],{"class":51},[45,108133,31929],{"class":55},[45,108135,108136],{"class":47,"line":66},[45,108137,2550],{"emptyLinePlaceholder":207},[45,108139,108140,108142],{"class":47,"line":1331},[45,108141,30492],{"class":51},[45,108143,101401],{"class":55},[45,108145,108146,108148],{"class":47,"line":1346},[45,108147,30492],{"class":51},[45,108149,107652],{"class":55},[45,108151,108152],{"class":47,"line":1352},[45,108153,2550],{"emptyLinePlaceholder":207},[45,108155,108156],{"class":47,"line":1366},[45,108157,2550],{"emptyLinePlaceholder":207},[45,108159,108160,108162,108164],{"class":47,"line":1372},[45,108161,101414],{"class":79},[45,108163,13713],{"class":51},[45,108165,101419],{"class":62},[45,108167,108168],{"class":47,"line":1463},[45,108169,108170],{"class":62},"\u003Cmujoco model=\"viewer_demo\">\n",[45,108172,108173],{"class":47,"line":1469},[45,108174,101429],{"class":62},[45,108176,108177],{"class":47,"line":1481},[45,108178,2550],{"emptyLinePlaceholder":207},[45,108180,108181],{"class":47,"line":1763},[45,108182,101438],{"class":62},[45,108184,108185],{"class":47,"line":1768},[45,108186,108187],{"class":62},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[45,108189,108190],{"class":47,"line":1774},[45,108191,108192],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[45,108194,108195],{"class":47,"line":1779},[45,108196,2550],{"emptyLinePlaceholder":207},[45,108198,108199],{"class":47,"line":1793},[45,108200,101452],{"class":62},[45,108202,108203],{"class":47,"line":1798},[45,108204,101457],{"class":62},[45,108206,108207],{"class":47,"line":1804},[45,108208,108209],{"class":62},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[45,108211,108212],{"class":47,"line":1825},[45,108213,101467],{"class":62},[45,108215,108216],{"class":47,"line":1830},[45,108217,101472],{"class":62},[45,108219,108220],{"class":47,"line":1844},[45,108221,101477],{"class":62},[45,108223,108224],{"class":47,"line":1849},[45,108225,95798],{"class":62},[45,108227,108228],{"class":47,"line":1878},[45,108229,2550],{"emptyLinePlaceholder":207},[45,108231,108232],{"class":47,"line":1883},[45,108233,2550],{"emptyLinePlaceholder":207},[45,108235,108236,108238,108240,108242,108244],{"class":47,"line":1900},[45,108237,32047],{"class":51},[45,108239,2123],{"class":69},[45,108241,101498],{"class":55},[45,108243,95786],{"class":79},[45,108245,3889],{"class":55},[45,108247,108248,108250,108252,108254,108256],{"class":47,"line":1905},[45,108249,101507],{"class":55},[45,108251,59],{"class":51},[45,108253,101512],{"class":55},[45,108255,101414],{"class":79},[45,108257,139],{"class":55},[45,108259,108260,108262,108264],{"class":47,"line":1910},[45,108261,101521],{"class":55},[45,108263,59],{"class":51},[45,108265,101526],{"class":55},[45,108267,108268],{"class":47,"line":1915},[45,108269,2550],{"emptyLinePlaceholder":207},[45,108271,108272,108274,108276,108278],{"class":47,"line":1929},[45,108273,34278],{"class":51},[45,108275,107936],{"class":55},[45,108277,31483],{"class":51},[45,108279,107941],{"class":55},[45,108281,108282,108285,108288,108290,108293,108295,108298],{"class":47,"line":1934},[45,108283,108284],{"class":51},"        while",[45,108286,108287],{"class":55}," viewer.is_running() ",[45,108289,30562],{"class":51},[45,108291,108292],{"class":55}," data.time ",[45,108294,1187],{"class":51},[45,108296,108297],{"class":79}," 5.0",[45,108299,3889],{"class":55},[45,108301,108302,108305,108307],{"class":47,"line":2727},[45,108303,108304],{"class":55},"            step_start ",[45,108306,59],{"class":51},[45,108308,108309],{"class":55}," time.time()\n",[45,108311,108312],{"class":47,"line":2741},[45,108313,108314],{"class":55},"            mujoco.mj_step(model, data)\n",[45,108316,108317],{"class":47,"line":2749},[45,108318,108319],{"class":55},"            viewer.sync()\n",[45,108321,108322],{"class":47,"line":2754},[45,108323,2550],{"emptyLinePlaceholder":207},[45,108325,108326,108329,108331,108333,108335,108337,108339],{"class":47,"line":2760},[45,108327,108328],{"class":55},"            sleep_time ",[45,108330,59],{"class":51},[45,108332,108060],{"class":55},[45,108334,809],{"class":51},[45,108336,108065],{"class":55},[45,108338,809],{"class":51},[45,108340,108070],{"class":55},[45,108342,108343,108345,108348,108350,108352],{"class":47,"line":2766},[45,108344,4792],{"class":51},[45,108346,108347],{"class":55}," sleep_time ",[45,108349,1237],{"class":51},[45,108351,4243],{"class":79},[45,108353,3889],{"class":55},[45,108355,108356],{"class":47,"line":2771},[45,108357,108358],{"class":55},"                time.sleep(sleep_time)\n",[45,108360,108361],{"class":47,"line":8098},[45,108362,2550],{"emptyLinePlaceholder":207},[45,108364,108365],{"class":47,"line":8122},[45,108366,2550],{"emptyLinePlaceholder":207},[45,108368,108369,108371,108373,108375,108377],{"class":47,"line":8127},[45,108370,1682],{"class":51},[45,108372,31320],{"class":79},[45,108374,101659],{"class":51},[45,108376,101662],{"class":62},[45,108378,3889],{"class":55},[45,108380,108381],{"class":47,"line":8133},[45,108382,101669],{"class":55},[20,108384,103670],{},[36,108386,108388],{"className":38,"code":108387,"language":40,"meta":25,"style":25},"touch ch5_viewer.py\n",[42,108389,108390],{"__ignoreMap":25},[45,108391,108392,108394],{"class":47,"line":48},[45,108393,101383],{"class":69},[45,108395,108396],{"class":62}," ch5_viewer.py\n",[20,108398,108399],{},"离屏 Renderer 保存图片:",[36,108401,108403],{"className":30478,"code":108402,"language":30480,"meta":25,"style":25},"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",[42,108404,108405,108417,108421,108427,108437,108441,108445,108453,108458,108462,108466,108470,108474,108479,108483,108487,108491,108495,108499,108503,108507,108511,108515,108519,108523,108535,108547,108555,108580,108584,108600,108604,108608,108623,108632,108636,108650,108655,108660,108664,108676,108688,108692,108696,108708],{"__ignoreMap":25},[45,108406,108407,108409,108412,108414],{"class":47,"line":48},[45,108408,30837],{"class":51},[45,108410,108411],{"class":55}," pathlib ",[45,108413,30492],{"class":51},[45,108415,108416],{"class":55}," Path\n",[45,108418,108419],{"class":47,"line":66},[45,108420,2550],{"emptyLinePlaceholder":207},[45,108422,108423,108425],{"class":47,"line":1331},[45,108424,30492],{"class":51},[45,108426,101401],{"class":55},[45,108428,108429,108431,108433,108435],{"class":47,"line":1346},[45,108430,30837],{"class":51},[45,108432,47363],{"class":79},[45,108434,47366],{"class":51},[45,108436,47369],{"class":55},[45,108438,108439],{"class":47,"line":1352},[45,108440,2550],{"emptyLinePlaceholder":207},[45,108442,108443],{"class":47,"line":1366},[45,108444,2550],{"emptyLinePlaceholder":207},[45,108446,108447,108449,108451],{"class":47,"line":1372},[45,108448,101414],{"class":79},[45,108450,13713],{"class":51},[45,108452,101419],{"class":62},[45,108454,108455],{"class":47,"line":1463},[45,108456,108457],{"class":62},"\u003Cmujoco model=\"renderer_demo\">\n",[45,108459,108460],{"class":47,"line":1469},[45,108461,101429],{"class":62},[45,108463,108464],{"class":47,"line":1481},[45,108465,2550],{"emptyLinePlaceholder":207},[45,108467,108468],{"class":47,"line":1763},[45,108469,101438],{"class":62},[45,108471,108472],{"class":47,"line":1768},[45,108473,108187],{"class":62},[45,108475,108476],{"class":47,"line":1774},[45,108477,108478],{"class":62},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[45,108480,108481],{"class":47,"line":1779},[45,108482,108192],{"class":62},[45,108484,108485],{"class":47,"line":1793},[45,108486,2550],{"emptyLinePlaceholder":207},[45,108488,108489],{"class":47,"line":1798},[45,108490,101452],{"class":62},[45,108492,108493],{"class":47,"line":1804},[45,108494,101457],{"class":62},[45,108496,108497],{"class":47,"line":1825},[45,108498,108209],{"class":62},[45,108500,108501],{"class":47,"line":1830},[45,108502,101467],{"class":62},[45,108504,108505],{"class":47,"line":1844},[45,108506,101472],{"class":62},[45,108508,108509],{"class":47,"line":1849},[45,108510,101477],{"class":62},[45,108512,108513],{"class":47,"line":1878},[45,108514,95798],{"class":62},[45,108516,108517],{"class":47,"line":1883},[45,108518,2550],{"emptyLinePlaceholder":207},[45,108520,108521],{"class":47,"line":1900},[45,108522,2550],{"emptyLinePlaceholder":207},[45,108524,108525,108527,108529,108531,108533],{"class":47,"line":1905},[45,108526,32047],{"class":51},[45,108528,2123],{"class":69},[45,108530,101498],{"class":55},[45,108532,95786],{"class":79},[45,108534,3889],{"class":55},[45,108536,108537,108539,108541,108543,108545],{"class":47,"line":1910},[45,108538,101507],{"class":55},[45,108540,59],{"class":51},[45,108542,101512],{"class":55},[45,108544,101414],{"class":79},[45,108546,139],{"class":55},[45,108548,108549,108551,108553],{"class":47,"line":1915},[45,108550,101521],{"class":55},[45,108552,59],{"class":51},[45,108554,101526],{"class":55},[45,108556,108557,108560,108562,108564,108566,108568,108570,108572,108574,108576,108578],{"class":47,"line":1929},[45,108558,108559],{"class":55},"    renderer ",[45,108561,59],{"class":51},[45,108563,107974],{"class":55},[45,108565,25129],{"class":5366},[45,108567,59],{"class":51},[45,108569,42442],{"class":79},[45,108571,12584],{"class":55},[45,108573,25125],{"class":5366},[45,108575,59],{"class":51},[45,108577,107989],{"class":79},[45,108579,139],{"class":55},[45,108581,108582],{"class":47,"line":1934},[45,108583,2550],{"emptyLinePlaceholder":207},[45,108585,108586,108588,108590,108592,108594,108596,108598],{"class":47,"line":2727},[45,108587,3351],{"class":51},[45,108589,101601],{"class":55},[45,108591,26143],{"class":51},[45,108593,32543],{"class":79},[45,108595,282],{"class":55},[45,108597,588],{"class":79},[45,108599,30886],{"class":55},[45,108601,108602],{"class":47,"line":2741},[45,108603,101616],{"class":55},[45,108605,108606],{"class":47,"line":2749},[45,108607,2550],{"emptyLinePlaceholder":207},[45,108609,108610,108613,108616,108618,108621],{"class":47,"line":2754},[45,108611,108612],{"class":55},"    renderer.update_scene(data, ",[45,108614,108615],{"class":5366},"camera",[45,108617,59],{"class":51},[45,108619,108620],{"class":62},"\"fixed_camera\"",[45,108622,139],{"class":55},[45,108624,108625,108628,108630],{"class":47,"line":2760},[45,108626,108627],{"class":55},"    image ",[45,108629,59],{"class":51},[45,108631,107685],{"class":55},[45,108633,108634],{"class":47,"line":2766},[45,108635,2550],{"emptyLinePlaceholder":207},[45,108637,108638,108641,108643,108646,108648],{"class":47,"line":2771},[45,108639,108640],{"class":55},"    output_path ",[45,108642,59],{"class":51},[45,108644,108645],{"class":55}," Path(",[45,108647,108115],{"class":62},[45,108649,139],{"class":55},[45,108651,108652],{"class":47,"line":8098},[45,108653,108654],{"class":55},"    Image.fromarray(image).save(output_path)\n",[45,108656,108657],{"class":47,"line":8122},[45,108658,108659],{"class":55},"    renderer.close()\n",[45,108661,108662],{"class":47,"line":8127},[45,108663,2550],{"emptyLinePlaceholder":207},[45,108665,108666,108668,108670,108673],{"class":47,"line":8133},[45,108667,31399],{"class":79},[45,108669,282],{"class":55},[45,108671,108672],{"class":62},"\"saved:\"",[45,108674,108675],{"class":55},", output_path.resolve())\n",[45,108677,108678,108680,108682,108685],{"class":47,"line":8160},[45,108679,31399],{"class":79},[45,108681,282],{"class":55},[45,108683,108684],{"class":62},"\"image shape:\"",[45,108686,108687],{"class":55},", image.shape)\n",[45,108689,108690],{"class":47,"line":8165},[45,108691,2550],{"emptyLinePlaceholder":207},[45,108693,108694],{"class":47,"line":8171},[45,108695,2550],{"emptyLinePlaceholder":207},[45,108697,108698,108700,108702,108704,108706],{"class":47,"line":8183},[45,108699,1682],{"class":51},[45,108701,31320],{"class":79},[45,108703,101659],{"class":51},[45,108705,101662],{"class":62},[45,108707,3889],{"class":55},[45,108709,108710],{"class":47,"line":8195},[45,108711,101669],{"class":55},[20,108713,103670],{},[36,108715,108717],{"className":38,"code":108716,"language":40,"meta":25,"style":25},"touch ch5_renderer.py\n",[42,108718,108719],{"__ignoreMap":25},[45,108720,108721,108723],{"class":47,"line":48},[45,108722,101383],{"class":69},[45,108724,108725],{"class":62}," ch5_renderer.py\n",[249,108727,101672],{"id":101672},[20,108729,108730],{},"viewer 上下文：",[36,108732,108734],{"className":30478,"code":108733,"language":30480,"meta":25,"style":25},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[42,108735,108736],{"__ignoreMap":25},[45,108737,108738,108740,108742,108744],{"class":47,"line":48},[45,108739,107933],{"class":51},[45,108741,107936],{"class":55},[45,108743,31483],{"class":51},[45,108745,107941],{"class":55},[20,108747,108748,108750],{},[42,108749,107933],{}," 语句会创建窗口，并在退出时自动清理资源。",[20,108752,108753],{},"窗口循环：",[36,108755,108757],{"className":30478,"code":108756,"language":30480,"meta":25,"style":25},"while viewer.is_running() and data.time \u003C 5.0:\n",[42,108758,108759],{"__ignoreMap":25},[45,108760,108761,108764,108766,108768,108770,108772,108774],{"class":47,"line":48},[45,108762,108763],{"class":51},"while",[45,108765,108287],{"class":55},[45,108767,30562],{"class":51},[45,108769,108292],{"class":55},[45,108771,1187],{"class":51},[45,108773,108297],{"class":79},[45,108775,3889],{"class":55},[20,108777,108778],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[20,108780,108781],{},"固定相机：",[36,108783,108785],{"className":53167,"code":108784,"language":53169,"meta":25,"style":25},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[42,108786,108787],{"__ignoreMap":25},[45,108788,108789,108791,108793,108795,108797,108799,108801,108803,108806,108809,108811,108814],{"class":47,"line":48},[45,108790,1187],{"class":55},[45,108792,108615],{"class":51400},[45,108794,15069],{"class":69},[45,108796,59],{"class":55},[45,108798,108620],{"class":62},[45,108800,101206],{"class":69},[45,108802,59],{"class":55},[45,108804,108805],{"class":62},"\"1.5 -2.0 1.2\"",[45,108807,108808],{"class":69}," xyaxes",[45,108810,59],{"class":55},[45,108812,108813],{"class":62},"\"1 0.75 0 0 0 1\"",[45,108815,101244],{"class":55},[20,108817,108818],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[249,108820,108822],{"id":108821},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[36,108824,108826],{"className":30478,"code":108825,"language":30480,"meta":25,"style":25},"import time\n",[42,108827,108828],{"__ignoreMap":25},[45,108829,108830,108832],{"class":47,"line":48},[45,108831,30492],{"class":51},[45,108833,31929],{"class":55},[20,108835,108836],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[36,108838,108840],{"className":30478,"code":108839,"language":30480,"meta":25,"style":25},"import mujoco\nimport mujoco.viewer\n",[42,108841,108842,108848],{"__ignoreMap":25},[45,108843,108844,108846],{"class":47,"line":48},[45,108845,30492],{"class":51},[45,108847,101401],{"class":55},[45,108849,108850,108852],{"class":47,"line":66},[45,108851,30492],{"class":51},[45,108853,107652],{"class":55},[20,108855,108856],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[36,108858,108859],{"className":30478,"code":108733,"language":30480,"meta":25,"style":25},[42,108860,108861],{"__ignoreMap":25},[45,108862,108863,108865,108867,108869],{"class":47,"line":48},[45,108864,107933],{"class":51},[45,108866,107936],{"class":55},[45,108868,31483],{"class":51},[45,108870,107941],{"class":55},[20,108872,108873,108874,108877],{},"打开一个 viewer 窗口。",[42,108875,108876],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[36,108879,108880],{"className":30478,"code":108756,"language":30480,"meta":25,"style":25},[42,108881,108882],{"__ignoreMap":25},[45,108883,108884,108886,108888,108890,108892,108894,108896],{"class":47,"line":48},[45,108885,108763],{"class":51},[45,108887,108287],{"class":55},[45,108889,30562],{"class":51},[45,108891,108292],{"class":55},[45,108893,1187],{"class":51},[45,108895,108297],{"class":79},[45,108897,3889],{"class":55},[20,108899,108900,108901,108904],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[42,108902,108903],{},"viewer.is_running()"," 会变成 false，循环结束。",[36,108906,108908],{"className":30478,"code":108907,"language":30480,"meta":25,"style":25},"step_start = time.time()\n",[42,108909,108910],{"__ignoreMap":25},[45,108911,108912,108915,108917],{"class":47,"line":48},[45,108913,108914],{"class":55},"step_start ",[45,108916,59],{"class":51},[45,108918,108309],{"class":55},[20,108920,108921],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[36,108923,108924],{"className":30478,"code":108018,"language":30480,"meta":25,"style":25},[42,108925,108926,108930],{"__ignoreMap":25},[45,108927,108928],{"class":47,"line":48},[45,108929,104605],{"class":55},[45,108931,108932],{"class":47,"line":66},[45,108933,108029],{"class":55},[20,108935,108936,108938,108939,108941,108942,108944,108945,108948],{},[42,108937,101315],{}," 推进物理仿真。",[42,108940,108037],{}," 把最新的 ",[42,108943,33501],{}," 同步到窗口里显示。没有 ",[42,108946,108947],{},"sync()","，窗口可能看不到最新状态。",[36,108950,108951],{"className":30478,"code":108048,"language":30480,"meta":25,"style":25},[42,108952,108953],{"__ignoreMap":25},[45,108954,108955,108957,108959,108961,108963,108965,108967],{"class":47,"line":48},[45,108956,108055],{"class":55},[45,108958,59],{"class":51},[45,108960,108060],{"class":55},[45,108962,809],{"class":51},[45,108964,108065],{"class":55},[45,108966,809],{"class":51},[45,108968,108070],{"class":55},[20,108970,108971],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[36,108973,108975],{"className":30478,"code":108974,"language":30480,"meta":25,"style":25},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[42,108976,108977,108989],{"__ignoreMap":25},[45,108978,108979,108981,108983,108985,108987],{"class":47,"line":48},[45,108980,1682],{"class":51},[45,108982,108347],{"class":55},[45,108984,1237],{"class":51},[45,108986,4243],{"class":79},[45,108988,3889],{"class":55},[45,108990,108991],{"class":47,"line":66},[45,108992,108993],{"class":55},"    time.sleep(sleep_time)\n",[20,108995,108996],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[249,108998,109000],{"id":108999},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[36,109002,109004],{"className":30478,"code":109003,"language":30480,"meta":25,"style":25},"from pathlib import Path\n",[42,109005,109006],{"__ignoreMap":25},[45,109007,109008,109010,109012,109014],{"class":47,"line":48},[45,109009,30837],{"class":51},[45,109011,108411],{"class":55},[45,109013,30492],{"class":51},[45,109015,108416],{"class":55},[20,109017,109018,109019,109022,109023,109026],{},"导入 ",[42,109020,109021],{},"Path","，用来处理文件路径。相比直接写字符串，",[42,109024,109025],{},"Path(\"render_output.png\")"," 更清晰。",[36,109028,109030],{"className":30478,"code":109029,"language":30480,"meta":25,"style":25},"from PIL import Image\n",[42,109031,109032],{"__ignoreMap":25},[45,109033,109034,109036,109038,109040],{"class":47,"line":48},[45,109035,30837],{"class":51},[45,109037,47363],{"class":79},[45,109039,47366],{"class":51},[45,109041,47369],{"class":55},[20,109043,109044],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[36,109046,109047],{"className":53167,"code":108784,"language":53169,"meta":25,"style":25},[42,109048,109049],{"__ignoreMap":25},[45,109050,109051,109053,109055,109057,109059,109061,109063,109065,109067,109069,109071,109073],{"class":47,"line":48},[45,109052,1187],{"class":55},[45,109054,108615],{"class":51400},[45,109056,15069],{"class":69},[45,109058,59],{"class":55},[45,109060,108620],{"class":62},[45,109062,101206],{"class":69},[45,109064,59],{"class":55},[45,109066,108805],{"class":62},[45,109068,108808],{"class":69},[45,109070,59],{"class":55},[45,109072,108813],{"class":62},[45,109074,101244],{"class":55},[20,109076,109077,109078,109080,109081,109083,109084,109087,109088,109090],{},"定义一个相机。",[42,109079,79910],{}," 是相机名字。",[42,109082,104246],{}," 是相机在世界里的位置。",[42,109085,109086],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[42,109089,104246],{}," 来调视角。",[36,109092,109094],{"className":30478,"code":109093,"language":30480,"meta":25,"style":25},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[42,109095,109096],{"__ignoreMap":25},[45,109097,109098,109100,109102,109104,109106,109108,109110,109112,109114,109116,109118],{"class":47,"line":48},[45,109099,107670],{"class":55},[45,109101,59],{"class":51},[45,109103,107974],{"class":55},[45,109105,25129],{"class":5366},[45,109107,59],{"class":51},[45,109109,42442],{"class":79},[45,109111,12584],{"class":55},[45,109113,25125],{"class":5366},[45,109115,59],{"class":51},[45,109117,107989],{"class":79},[45,109119,139],{"class":55},[20,109121,109122,109123,101118,109125,109127],{},"创建离屏渲染器。",[42,109124,25129],{},[42,109126,25125],{}," 决定输出图片大小。",[36,109129,109130],{"className":30478,"code":101776,"language":30480,"meta":25,"style":25},[42,109131,109132,109148],{"__ignoreMap":25},[45,109133,109134,109136,109138,109140,109142,109144,109146],{"class":47,"line":48},[45,109135,3175],{"class":51},[45,109137,101601],{"class":55},[45,109139,26143],{"class":51},[45,109141,32543],{"class":79},[45,109143,282],{"class":55},[45,109145,588],{"class":79},[45,109147,30886],{"class":55},[45,109149,109150],{"class":47,"line":66},[45,109151,101799],{"class":55},[20,109153,109154],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[36,109156,109158],{"className":30478,"code":109157,"language":30480,"meta":25,"style":25},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[42,109159,109160],{"__ignoreMap":25},[45,109161,109162,109165,109167,109169,109171],{"class":47,"line":48},[45,109163,109164],{"class":55},"renderer.update_scene(data, ",[45,109166,108615],{"class":5366},[45,109168,59],{"class":51},[45,109170,108620],{"class":62},[45,109172,139],{"class":55},[20,109174,109175,109176,109178,109179,109182],{},"告诉 renderer：用当前 ",[42,109177,33501],{}," 的状态更新画面，并使用名为 ",[42,109180,109181],{},"fixed_camera"," 的相机视角。",[36,109184,109185],{"className":30478,"code":108080,"language":30480,"meta":25,"style":25},[42,109186,109187],{"__ignoreMap":25},[45,109188,109189,109191,109193],{"class":47,"line":48},[45,109190,107680],{"class":55},[45,109192,59],{"class":51},[45,109194,107685],{"class":55},[20,109196,109197,109198,109201],{},"真正渲染出图像。",[42,109199,109200],{},"image"," 是一个 NumPy 数组，不是文件。",[36,109203,109205],{"className":30478,"code":109204,"language":30480,"meta":25,"style":25},"Image.fromarray(image).save(output_path)\n",[42,109206,109207],{"__ignoreMap":25},[45,109208,109209],{"class":47,"line":48},[45,109210,109204],{"class":55},[20,109212,109213,109214,28485],{},"把数组转换成图片，并保存到 ",[42,109215,109216],{},"render_output.png",[36,109218,109220],{"className":30478,"code":109219,"language":30480,"meta":25,"style":25},"renderer.close()\n",[42,109221,109222],{"__ignoreMap":25},[45,109223,109224],{"class":47,"line":48},[45,109225,109219],{"class":55},[20,109227,109228],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[15,109230,102416],{"id":102415},[20,109232,109233,109234,109236,109237,28485],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[42,109235,109216],{},"，并输出图像数组形状，例如 ",[42,109238,109239],{},"(480, 640, 3)",[20,109241,109242],{},"如果图片里看不到方块，先检查：",[233,109244,109245,109248,109251],{},[169,109246,109247],{},"方块是否掉到相机视野外。",[169,109249,109250],{},"camera 位置是否合理。",[169,109252,109253,109254,109257],{},"是否在 ",[42,109255,109256],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[15,109259,102448],{"id":102447},[20,109261,109262],{},"运行 viewer:",[36,109264,109266],{"className":38,"code":109265,"language":40,"meta":25,"style":25},"python ch5_viewer.py\n",[42,109267,109268],{"__ignoreMap":25},[45,109269,109270,109272],{"class":47,"line":48},[45,109271,30480],{"class":69},[45,109273,108396],{"class":62},[20,109275,109276],{},"运行 renderer:",[36,109278,109280],{"className":38,"code":109279,"language":40,"meta":25,"style":25},"python ch5_renderer.py\n",[42,109281,109282],{"__ignoreMap":25},[45,109283,109284,109286],{"class":47,"line":48},[45,109285,30480],{"class":69},[45,109287,108725],{"class":62},[20,109289,109290],{},"如果在服务器上运行:",[36,109292,109294],{"className":38,"code":109293,"language":40,"meta":25,"style":25},"MUJOCO_GL=egl python ch5_renderer.py\n",[42,109295,109296],{"__ignoreMap":25},[45,109297,109298,109300,109302,109304,109307],{"class":47,"line":48},[45,109299,107914],{"class":55},[45,109301,59],{"class":51},[45,109303,107904],{"class":62},[45,109305,109306],{"class":69}," python",[45,109308,108725],{"class":62},[20,109310,107882],{},[36,109312,109314],{"className":38,"code":109313,"language":40,"meta":25,"style":25},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[42,109315,109316],{"__ignoreMap":25},[45,109317,109318,109320,109322,109324,109326],{"class":47,"line":48},[45,109319,107914],{"class":55},[45,109321,59],{"class":51},[45,109323,107908],{"class":62},[45,109325,109306],{"class":69},[45,109327,108725],{"class":62},[20,109329,109330],{},"再做几个练习：",[233,109332,109333,109340,109343,109349],{},[169,109334,109335,109336,109339],{},"把 renderer 分辨率改成 ",[42,109337,109338],{},"height=240, width=320","，观察输出 shape。",[169,109341,109342],{},"把方块颜色改成蓝色，重新保存图片。",[169,109344,109345,109346,109348],{},"把相机 ",[42,109347,104246],{}," 改远一点，观察画面中物体是否变小。",[169,109350,109351,109352,102514,109355,109358],{},"把 viewer 示例中的 ",[42,109353,109354],{},"data.time \u003C 5.0",[42,109356,109357],{},"data.time \u003C 20.0","，观察更长时间。",[15,109360,102553],{"id":102552},[249,109362,109364],{"id":109363},"viewer-窗口打不开","viewer 窗口打不开",[20,109366,109367],{},"安装:",[36,109369,109371],{"className":38,"code":109370,"language":40,"meta":25,"style":25},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[42,109372,109373],{"__ignoreMap":25},[45,109374,109375,109377,109379,109381,109383,109385,109387,109389,109391,109393,109395],{"class":47,"line":48},[45,109376,24724],{"class":69},[45,109378,26415],{"class":62},[45,109380,23981],{"class":62},[45,109382,26500],{"class":79},[45,109384,102606],{"class":62},[45,109386,100934],{"class":62},[45,109388,102611],{"class":62},[45,109390,100947],{"class":62},[45,109392,100953],{"class":62},[45,109394,100944],{"class":62},[45,109396,109397],{"class":62}," libXinerama\n",[249,109399,109401],{"id":109400},"glfwerror",[42,109402,109403],{},"GLFWError",[20,109405,109406],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[249,109408,109410],{"id":109409},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[20,109412,109413,109414,82639,109416,109418],{},"尝试 ",[42,109415,101137],{},[42,109417,101140],{},"。可能存在版本差异。",[249,109420,109421],{"id":109421},"保存图片是黑的",[20,109423,102675],{},[233,109425,109426,109429,109432,109442],{},[169,109427,109428],{},"XML 里是否有 light。",[169,109430,109431],{},"相机是否对着模型。",[169,109433,109434,109435,109438,109439,28485],{},"是否先 ",[42,109436,109437],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[42,109440,109441],{},"renderer.render()",[169,109443,109444],{},"物体是否已经掉出视野。",[249,109446,109447],{"id":109447},"远程服务器没有显示器",[20,109449,109450],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[36,109452,109453],{"className":38,"code":109293,"language":40,"meta":25,"style":25},[42,109454,109455],{"__ignoreMap":25},[45,109456,109457,109459,109461,109463,109465],{"class":47,"line":48},[45,109458,107914],{"class":55},[45,109460,59],{"class":51},[45,109462,107904],{"class":62},[45,109464,109306],{"class":69},[45,109466,108725],{"class":62},[20,109468,109469],{},"如果 EGL 不可用，再尝试：",[36,109471,109472],{"className":38,"code":109313,"language":40,"meta":25,"style":25},[42,109473,109474],{"__ignoreMap":25},[45,109475,109476,109478,109480,109482,109484],{"class":47,"line":48},[45,109477,107914],{"class":55},[45,109479,59],{"class":51},[45,109481,107908],{"class":62},[45,109483,109306],{"class":69},[45,109485,108725],{"class":62},[15,109487,102707],{"id":102706},[20,109489,109490],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[233,109492,109493,109496,109499],{},[169,109494,109495],{},"先用 viewer 看模型和控制是否正常。",[169,109497,109498],{},"再用 renderer 保存图片或构造视觉观测。",[169,109500,109501],{},"最后把状态、动作、图像、奖励组织成训练数据。",[196,109503,109504],{},"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":25,"searchDepth":66,"depth":66,"links":109506},[109507,109508,109509,109514,109519,109520,109521,109528],{"id":100746,"depth":66,"text":100747},{"id":100869,"depth":66,"text":100870},{"id":101144,"depth":66,"text":101145,"children":109510},[109511,109512,109513],{"id":108011,"depth":1331,"text":108012},{"id":108041,"depth":1331,"text":108042},{"id":108076,"depth":1331,"text":108077},{"id":101352,"depth":66,"text":101353,"children":109515},[109516,109517,109518],{"id":101672,"depth":1331,"text":101672},{"id":108821,"depth":1331,"text":108822},{"id":108999,"depth":1331,"text":109000},{"id":102415,"depth":66,"text":102416},{"id":102447,"depth":66,"text":102448},{"id":102552,"depth":66,"text":102553,"children":109522},[109523,109524,109525,109526,109527],{"id":109363,"depth":1331,"text":109364},{"id":109400,"depth":1331,"text":109403},{"id":109409,"depth":1331,"text":109410},{"id":109421,"depth":1331,"text":109421},{"id":109447,"depth":1331,"text":109447},{"id":102706,"depth":66,"text":102707},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107619,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109535,"title":109536,"body":109537,"description":25,"extension":205,"meta":111448,"navigation":207,"path":111449,"seo":111450,"stem":111451,"__hash__":111452},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109538,"toc":111424},[109539,109542,109544,109547,109549,109568,109571,109577,109580,109582,109584,109608,109610,109624,109626,109667,109669,109680,109682,109685,109691,109694,109728,109731,109763,109766,109798,109802,109805,109845,109848,109854,109857,109863,109867,109870,109876,109879,109883,109886,109926,109928,109941,109944,109946,110528,110530,110542,110545,110556,110558,110561,110580,110592,110595,110616,110619,110622,110665,110668,110671,110691,110698,110700,110718,110733,110736,110742,110745,110751,110768,110775,110806,110817,110851,110862,110879,110888,110896,110901,110915,110918,110939,110945,110959,110964,110994,111004,111029,111037,111060,111063,111079,111082,111090,111096,111118,111131,111152,111161,111200,111211,111213,111216,111222,111225,111228,111234,111237,111257,111260,111262,111301,111303,111306,111314,111317,111320,111347,111350,111360,111366,111369,111375,111377,111383,111387,111390,111392,111395,111419,111422],[10,109540,109536],{"id":109541},"_6控制任务cartpole",[15,109543,100747],{"id":100746},[20,109545,109546],{},"本章搭建一个最小 Cartpole 控制任务。",[20,109548,104431],{},[233,109550,109551,109554,109556,109559,109562,109565],{},[169,109552,109553],{},"slide joint",[169,109555,106284],{},[169,109557,109558],{},"cart force actuator",[169,109560,109561],{},"状态观测",[169,109563,109564],{},"简单控制循环",[169,109566,109567],{},"reward 设计雏形",[20,109569,109570],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[36,109572,109575],{"className":109573,"code":109574,"language":5337,"meta":25},[5335],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[42,109576,109574],{"__ignoreMap":25},[20,109578,109579],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[15,109581,100870],{"id":100869},[20,109583,100873],{},[36,109585,109586],{"className":38,"code":104488,"language":40,"meta":25,"style":25},[42,109587,109588],{"__ignoreMap":25},[45,109589,109590,109592,109594,109596,109598,109600,109602,109604,109606],{"class":47,"line":48},[45,109591,24724],{"class":69},[45,109593,26415],{"class":62},[45,109595,23981],{"class":62},[45,109597,26500],{"class":79},[45,109599,104503],{"class":62},[45,109601,100898],{"class":62},[45,109603,102601],{"class":62},[45,109605,100914],{"class":62},[45,109607,104512],{"class":62},[20,109609,102919],{},[36,109611,109612],{"className":38,"code":101019,"language":40,"meta":25,"style":25},[42,109613,109614],{"__ignoreMap":25},[45,109615,109616,109618,109620,109622],{"class":47,"line":48},[45,109617,23978],{"class":69},[45,109619,23981],{"class":62},[45,109621,101030],{"class":62},[45,109623,101033],{"class":62},[20,109625,102936],{},[36,109627,109629],{"className":38,"code":109628,"language":40,"meta":25,"style":25},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[42,109630,109631,109648,109657],{"__ignoreMap":25},[45,109632,109633,109635,109637,109639,109642,109644,109646],{"class":47,"line":48},[45,109634,30430],{"class":69},[45,109636,29276],{"class":62},[45,109638,133],{"class":79},[45,109640,109641],{"class":62}," mujoco-cartpole",[45,109643,101075],{"class":62},[45,109645,101078],{"class":79},[45,109647,101081],{"class":79},[45,109649,109650,109652,109654],{"class":47,"line":66},[45,109651,30430],{"class":69},[45,109653,101088],{"class":62},[45,109655,109656],{"class":62}," mujoco-cartpole\n",[45,109658,109659,109661,109663,109665],{"class":47,"line":1331},[45,109660,23978],{"class":69},[45,109662,23981],{"class":62},[45,109664,101030],{"class":62},[45,109666,101033],{"class":62},[20,109668,101104],{},[233,109670,109671,109674,109677],{},[169,109672,109673],{},"本章不依赖 Gymnasium。",[169,109675,109676],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[169,109678,109679],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[15,109681,101145],{"id":101144},[20,109683,109684],{},"Cartpole 的模型结构:",[36,109686,109689],{"className":109687,"code":109688,"language":5337,"meta":25},[5335],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[42,109690,109688],{"__ignoreMap":25},[20,109692,109693],{},"小车通过 slide joint 左右移动:",[36,109695,109697],{"className":53167,"code":109696,"language":53169,"meta":25,"style":25},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[42,109698,109699],{"__ignoreMap":25},[45,109700,109701,109703,109705,109707,109709,109712,109714,109716,109719,109721,109723,109726],{"class":47,"line":48},[45,109702,1187],{"class":55},[45,109704,103056],{"class":51400},[45,109706,15069],{"class":69},[45,109708,59],{"class":55},[45,109710,109711],{"class":62},"\"cart_x\"",[45,109713,53924],{"class":69},[45,109715,59],{"class":55},[45,109717,109718],{"class":62},"\"slide\"",[45,109720,106128],{"class":69},[45,109722,59],{"class":55},[45,109724,109725],{"class":62},"\"1 0 0\"",[45,109727,101244],{"class":55},[20,109729,109730],{},"杆子通过 hinge joint 旋转:",[36,109732,109734],{"className":53167,"code":109733,"language":53169,"meta":25,"style":25},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[42,109735,109736],{"__ignoreMap":25},[45,109737,109738,109740,109742,109744,109746,109749,109751,109753,109755,109757,109759,109761],{"class":47,"line":48},[45,109739,1187],{"class":55},[45,109741,103056],{"class":51400},[45,109743,15069],{"class":69},[45,109745,59],{"class":55},[45,109747,109748],{"class":62},"\"pole_hinge\"",[45,109750,53924],{"class":69},[45,109752,59],{"class":55},[45,109754,106119],{"class":62},[45,109756,106128],{"class":69},[45,109758,59],{"class":55},[45,109760,106133],{"class":62},[45,109762,101244],{"class":55},[20,109764,109765],{},"控制力作用在小车 slide joint 上:",[36,109767,109769],{"className":53167,"code":109768,"language":53169,"meta":25,"style":25},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[42,109770,109771],{"__ignoreMap":25},[45,109772,109773,109775,109777,109779,109781,109784,109786,109788,109790,109792,109794,109796],{"class":47,"line":48},[45,109774,1187],{"class":55},[45,109776,106174],{"class":51400},[45,109778,15069],{"class":69},[45,109780,59],{"class":55},[45,109782,109783],{"class":62},"\"cart_motor\"",[45,109785,106184],{"class":69},[45,109787,59],{"class":55},[45,109789,109711],{"class":62},[45,109791,106191],{"class":69},[45,109793,59],{"class":55},[45,109795,54416],{"class":62},[45,109797,101244],{"class":55},[249,109799,109801],{"id":109800},"cartpole-的状态是什么","Cartpole 的状态是什么",[20,109803,109804],{},"这个简化模型有两个关节：",[415,109806,109807,109818],{},[418,109808,109809],{},[421,109810,109811,109813,109815],{},[424,109812,102859],{"align":23885},[424,109814,23886],{"align":23885},[424,109816,109817],{"align":23885},"对应状态",[462,109819,109820,109833],{},[421,109821,109822,109827,109830],{},[467,109823,109824],{"align":23885},[42,109825,109826],{},"cart_x",[467,109828,109829],{"align":23885},"slide",[467,109831,109832],{"align":23885},"小车 x 位置",[421,109834,109835,109840,109842],{},[467,109836,109837],{"align":23885},[42,109838,109839],{},"pole_hinge",[467,109841,105940],{"align":23885},[467,109843,109844],{"align":23885},"杆子角度",[20,109846,109847],{},"所以：",[36,109849,109852],{"className":109850,"code":109851,"language":5337,"meta":25},[5335],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[42,109853,109851],{"__ignoreMap":25},[20,109855,109856],{},"把它们拼起来就是观测：",[36,109858,109861],{"className":109859,"code":109860,"language":5337,"meta":25},[5335],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[42,109862,109860],{"__ignoreMap":25},[249,109864,109866],{"id":109865},"action-是什么","action 是什么",[20,109868,109869],{},"本章只有一个 actuator：",[36,109871,109874],{"className":109872,"code":109873,"language":5337,"meta":25},[5335],"data.ctrl[0] = action\n",[42,109875,109873],{"__ignoreMap":25},[20,109877,109878],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[249,109880,109882],{"id":109881},"reward-是什么","reward 是什么",[20,109884,109885],{},"奖励函数：",[36,109887,109889],{"className":30478,"code":109888,"language":30480,"meta":25,"style":25},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[42,109890,109891],{"__ignoreMap":25},[45,109892,109893,109895,109898,109900,109902,109904,109907,109909,109912,109914,109916,109918,109921,109923],{"class":47,"line":48},[45,109894,17195],{"class":51},[45,109896,109897],{"class":79}," float",[45,109899,282],{"class":55},[45,109901,102503],{"class":79},[45,109903,52371],{"class":51},[45,109905,109906],{"class":79}," 0.1",[45,109908,6668],{"class":51},[45,109910,109911],{"class":55}," cart_x ",[45,109913,732],{"class":51},[45,109915,109911],{"class":55},[45,109917,809],{"class":51},[45,109919,109920],{"class":55}," pole_angle ",[45,109922,732],{"class":51},[45,109924,109925],{"class":55}," pole_angle)\n",[20,109927,106326],{},[233,109929,109930,109935,109938],{},[169,109931,109932,109933,28485],{},"基础奖励是 ",[42,109934,102503],{},[169,109936,109937],{},"小车离中心越远，扣分越多。",[169,109939,109940],{},"杆子角度越大，扣分越多。",[20,109942,109943],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[15,109945,101353],{"id":101352},[36,109947,109949],{"className":30478,"code":109948,"language":30480,"meta":25,"style":25},"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",[42,109950,109951,109957,109967,109971,109975,109983,109988,109992,109996,110000,110005,110009,110014,110019,110024,110028,110033,110038,110043,110047,110051,110055,110059,110063,110068,110072,110076,110080,110084,110088,110098,110105,110109,110113,110127,110141,110154,110184,110188,110192,110204,110216,110224,110228,110241,110245,110249,110258,110262,110278,110288,110301,110314,110318,110341,110359,110363,110375,110379,110383,110393,110403,110407,110423,110464,110468,110488,110504,110508,110512,110524],{"__ignoreMap":25},[45,109952,109953,109955],{"class":47,"line":48},[45,109954,30492],{"class":51},[45,109956,101401],{"class":55},[45,109958,109959,109961,109963,109965],{"class":47,"line":66},[45,109960,30492],{"class":51},[45,109962,31480],{"class":55},[45,109964,31483],{"class":51},[45,109966,31486],{"class":55},[45,109968,109969],{"class":47,"line":1331},[45,109970,2550],{"emptyLinePlaceholder":207},[45,109972,109973],{"class":47,"line":1346},[45,109974,2550],{"emptyLinePlaceholder":207},[45,109976,109977,109979,109981],{"class":47,"line":1352},[45,109978,101414],{"class":79},[45,109980,13713],{"class":51},[45,109982,101419],{"class":62},[45,109984,109985],{"class":47,"line":1366},[45,109986,109987],{"class":62},"\u003Cmujoco model=\"cartpole\">\n",[45,109989,109990],{"class":47,"line":1372},[45,109991,101429],{"class":62},[45,109993,109994],{"class":47,"line":1463},[45,109995,2550],{"emptyLinePlaceholder":207},[45,109997,109998],{"class":47,"line":1469},[45,109999,101438],{"class":62},[45,110001,110002],{"class":47,"line":1481},[45,110003,110004],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[45,110006,110007],{"class":47,"line":1763},[45,110008,2550],{"emptyLinePlaceholder":207},[45,110010,110011],{"class":47,"line":1768},[45,110012,110013],{"class":62},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[45,110015,110016],{"class":47,"line":1774},[45,110017,110018],{"class":62},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[45,110020,110021],{"class":47,"line":1779},[45,110022,110023],{"class":62},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[45,110025,110026],{"class":47,"line":1793},[45,110027,2550],{"emptyLinePlaceholder":207},[45,110029,110030],{"class":47,"line":1798},[45,110031,110032],{"class":62},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[45,110034,110035],{"class":47,"line":1804},[45,110036,110037],{"class":62},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[45,110039,110040],{"class":47,"line":1825},[45,110041,110042],{"class":62},"        \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",[45,110044,110045],{"class":47,"line":1830},[45,110046,106538],{"class":62},[45,110048,110049],{"class":47,"line":1844},[45,110050,101467],{"class":62},[45,110052,110053],{"class":47,"line":1849},[45,110054,101472],{"class":62},[45,110056,110057],{"class":47,"line":1878},[45,110058,2550],{"emptyLinePlaceholder":207},[45,110060,110061],{"class":47,"line":1883},[45,110062,106555],{"class":62},[45,110064,110065],{"class":47,"line":1900},[45,110066,110067],{"class":62},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[45,110069,110070],{"class":47,"line":1905},[45,110071,106565],{"class":62},[45,110073,110074],{"class":47,"line":1910},[45,110075,101477],{"class":62},[45,110077,110078],{"class":47,"line":1915},[45,110079,95798],{"class":62},[45,110081,110082],{"class":47,"line":1929},[45,110083,2550],{"emptyLinePlaceholder":207},[45,110085,110086],{"class":47,"line":1934},[45,110087,2550],{"emptyLinePlaceholder":207},[45,110089,110090,110092,110095],{"class":47,"line":2727},[45,110091,32047],{"class":51},[45,110093,110094],{"class":69}," get_observation",[45,110096,110097],{"class":55},"(data: mujoco.MjData) -> np.ndarray:\n",[45,110099,110100,110102],{"class":47,"line":2741},[45,110101,4240],{"class":51},[45,110103,110104],{"class":55}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[45,110106,110107],{"class":47,"line":2749},[45,110108,2550],{"emptyLinePlaceholder":207},[45,110110,110111],{"class":47,"line":2754},[45,110112,2550],{"emptyLinePlaceholder":207},[45,110114,110115,110117,110120,110123,110125],{"class":47,"line":2760},[45,110116,32047],{"class":51},[45,110118,110119],{"class":69}," compute_reward",[45,110121,110122],{"class":55},"(obs: np.ndarray) -> ",[45,110124,320],{"class":79},[45,110126,3889],{"class":55},[45,110128,110129,110132,110134,110137,110139],{"class":47,"line":2766},[45,110130,110131],{"class":55},"    cart_x ",[45,110133,59],{"class":51},[45,110135,110136],{"class":55}," obs[",[45,110138,469],{"class":79},[45,110140,33346],{"class":55},[45,110142,110143,110146,110148,110150,110152],{"class":47,"line":2771},[45,110144,110145],{"class":55},"    pole_angle ",[45,110147,59],{"class":51},[45,110149,110136],{"class":55},[45,110151,495],{"class":79},[45,110153,33346],{"class":55},[45,110155,110156,110158,110160,110162,110164,110166,110168,110170,110172,110174,110176,110178,110180,110182],{"class":47,"line":8098},[45,110157,4240],{"class":51},[45,110159,109897],{"class":79},[45,110161,282],{"class":55},[45,110163,102503],{"class":79},[45,110165,52371],{"class":51},[45,110167,109906],{"class":79},[45,110169,6668],{"class":51},[45,110171,109911],{"class":55},[45,110173,732],{"class":51},[45,110175,109911],{"class":55},[45,110177,809],{"class":51},[45,110179,109920],{"class":55},[45,110181,732],{"class":51},[45,110183,109925],{"class":55},[45,110185,110186],{"class":47,"line":8122},[45,110187,2550],{"emptyLinePlaceholder":207},[45,110189,110190],{"class":47,"line":8127},[45,110191,2550],{"emptyLinePlaceholder":207},[45,110193,110194,110196,110198,110200,110202],{"class":47,"line":8133},[45,110195,32047],{"class":51},[45,110197,2123],{"class":69},[45,110199,101498],{"class":55},[45,110201,95786],{"class":79},[45,110203,3889],{"class":55},[45,110205,110206,110208,110210,110212,110214],{"class":47,"line":8160},[45,110207,101507],{"class":55},[45,110209,59],{"class":51},[45,110211,101512],{"class":55},[45,110213,101414],{"class":79},[45,110215,139],{"class":55},[45,110217,110218,110220,110222],{"class":47,"line":8165},[45,110219,101521],{"class":55},[45,110221,59],{"class":51},[45,110223,101526],{"class":55},[45,110225,110226],{"class":47,"line":8171},[45,110227,2550],{"emptyLinePlaceholder":207},[45,110229,110230,110232,110234,110236,110238],{"class":47,"line":8183},[45,110231,105169],{"class":55},[45,110233,495],{"class":79},[45,110235,4593],{"class":55},[45,110237,59],{"class":51},[45,110239,110240],{"class":79}," 0.1\n",[45,110242,110243],{"class":47,"line":8195},[45,110244,105182],{"class":55},[45,110246,110247],{"class":47,"line":8207},[45,110248,2550],{"emptyLinePlaceholder":207},[45,110250,110251,110254,110256],{"class":47,"line":9866},[45,110252,110253],{"class":55},"    total_reward ",[45,110255,59],{"class":51},[45,110257,104861],{"class":79},[45,110259,110260],{"class":47,"line":9890},[45,110261,2550],{"emptyLinePlaceholder":207},[45,110263,110264,110266,110268,110270,110272,110274,110276],{"class":47,"line":9913},[45,110265,3351],{"class":51},[45,110267,31716],{"class":55},[45,110269,26143],{"class":51},[45,110271,32543],{"class":79},[45,110273,282],{"class":55},[45,110275,6560],{"class":79},[45,110277,30886],{"class":55},[45,110279,110280,110283,110285],{"class":47,"line":9937},[45,110281,110282],{"class":55},"        obs ",[45,110284,59],{"class":51},[45,110286,110287],{"class":55}," get_observation(data)\n",[45,110289,110290,110293,110295,110297,110299],{"class":47,"line":9942},[45,110291,110292],{"class":55},"        pole_angle ",[45,110294,59],{"class":51},[45,110296,110136],{"class":55},[45,110298,495],{"class":79},[45,110300,33346],{"class":55},[45,110302,110303,110306,110308,110310,110312],{"class":47,"line":9947},[45,110304,110305],{"class":55},"        pole_angular_velocity ",[45,110307,59],{"class":51},[45,110309,110136],{"class":55},[45,110311,350],{"class":79},[45,110313,33346],{"class":55},[45,110315,110316],{"class":47,"line":9952},[45,110317,2550],{"emptyLinePlaceholder":207},[45,110319,110320,110323,110325,110328,110330,110332,110334,110336,110338],{"class":47,"line":9961},[45,110321,110322],{"class":55},"        action ",[45,110324,59],{"class":51},[45,110326,110327],{"class":79}," 2.0",[45,110329,6668],{"class":51},[45,110331,109920],{"class":55},[45,110333,758],{"class":51},[45,110335,61967],{"class":79},[45,110337,6668],{"class":51},[45,110339,110340],{"class":55}," pole_angular_velocity\n",[45,110342,110343,110345,110347,110349,110351,110353,110355,110357],{"class":47,"line":9966},[45,110344,110322],{"class":55},[45,110346,59],{"class":51},[45,110348,107547],{"class":55},[45,110350,809],{"class":51},[45,110352,102503],{"class":79},[45,110354,12584],{"class":55},[45,110356,102503],{"class":79},[45,110358,139],{"class":55},[45,110360,110361],{"class":47,"line":9972},[45,110362,2550],{"emptyLinePlaceholder":207},[45,110364,110365,110367,110369,110371,110373],{"class":47,"line":9993},[45,110366,106717],{"class":55},[45,110368,469],{"class":79},[45,110370,4593],{"class":55},[45,110372,59],{"class":51},[45,110374,107570],{"class":55},[45,110376,110377],{"class":47,"line":9999},[45,110378,101616],{"class":55},[45,110380,110381],{"class":47,"line":10013},[45,110382,2550],{"emptyLinePlaceholder":207},[45,110384,110385,110388,110390],{"class":47,"line":10019},[45,110386,110387],{"class":55},"        reward ",[45,110389,59],{"class":51},[45,110391,110392],{"class":55}," compute_reward(get_observation(data))\n",[45,110394,110395,110398,110400],{"class":47,"line":10046},[45,110396,110397],{"class":55},"        total_reward ",[45,110399,9627],{"class":51},[45,110401,110402],{"class":55}," reward\n",[45,110404,110405],{"class":47,"line":10055},[45,110406,2550],{"emptyLinePlaceholder":207},[45,110408,110409,110411,110413,110415,110417,110419,110421],{"class":47,"line":10061},[45,110410,2647],{"class":51},[45,110412,31716],{"class":55},[45,110414,605],{"class":51},[45,110416,5904],{"class":79},[45,110418,101659],{"class":51},[45,110420,4243],{"class":79},[45,110422,3889],{"class":55},[45,110424,110425,110427,110429,110432,110435,110438,110441,110443,110446,110449,110451,110453,110455,110457,110460,110462],{"class":47,"line":10069},[45,110426,34750],{"class":79},[45,110428,282],{"class":55},[45,110430,110431],{"class":62},"\"step:\"",[45,110433,110434],{"class":55},", step, ",[45,110436,110437],{"class":62},"\"obs:\"",[45,110439,110440],{"class":55},", np.round(obs, ",[45,110442,350],{"class":79},[45,110444,110445],{"class":55},"), ",[45,110447,110448],{"class":62},"\"action:\"",[45,110450,12584],{"class":55},[45,110452,32118],{"class":79},[45,110454,282],{"class":55},[45,110456,320],{"class":79},[45,110458,110459],{"class":55},"(action), ",[45,110461,350],{"class":79},[45,110463,30597],{"class":55},[45,110465,110466],{"class":47,"line":10074},[45,110467,2550],{"emptyLinePlaceholder":207},[45,110469,110470,110472,110474,110477,110479,110481,110484,110486],{"class":47,"line":16753},[45,110471,31399],{"class":79},[45,110473,282],{"class":55},[45,110475,110476],{"class":62},"\"total_reward:\"",[45,110478,12584],{"class":55},[45,110480,32118],{"class":79},[45,110482,110483],{"class":55},"(total_reward, ",[45,110485,350],{"class":79},[45,110487,30597],{"class":55},[45,110489,110490,110492,110494,110497,110500,110502],{"class":47,"line":16759},[45,110491,31399],{"class":79},[45,110493,282],{"class":55},[45,110495,110496],{"class":62},"\"final obs:\"",[45,110498,110499],{"class":55},", np.round(get_observation(data), ",[45,110501,350],{"class":79},[45,110503,30597],{"class":55},[45,110505,110506],{"class":47,"line":16782},[45,110507,2550],{"emptyLinePlaceholder":207},[45,110509,110510],{"class":47,"line":16788},[45,110511,2550],{"emptyLinePlaceholder":207},[45,110513,110514,110516,110518,110520,110522],{"class":47,"line":16811},[45,110515,1682],{"class":51},[45,110517,31320],{"class":79},[45,110519,101659],{"class":51},[45,110521,101662],{"class":62},[45,110523,3889],{"class":55},[45,110525,110526],{"class":47,"line":16825},[45,110527,101669],{"class":55},[20,110529,103670],{},[36,110531,110533],{"className":38,"code":110532,"language":40,"meta":25,"style":25},"touch ch6_cartpole.py\n",[42,110534,110535],{"__ignoreMap":25},[45,110536,110537,110539],{"class":47,"line":48},[45,110538,101383],{"class":69},[45,110540,110541],{"class":62}," ch6_cartpole.py\n",[20,110543,110544],{},"运行：",[36,110546,110548],{"className":38,"code":110547,"language":40,"meta":25,"style":25},"python ch6_cartpole.py\n",[42,110549,110550],{"__ignoreMap":25},[45,110551,110552,110554],{"class":47,"line":48},[45,110553,30480],{"class":69},[45,110555,110541],{"class":62},[249,110557,101672],{"id":101672},[20,110559,110560],{},"构造观测：",[36,110562,110564],{"className":30478,"code":110563,"language":30480,"meta":25,"style":25},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[42,110565,110566,110574],{"__ignoreMap":25},[45,110567,110568,110570,110572],{"class":47,"line":48},[45,110569,32047],{"class":51},[45,110571,110094],{"class":69},[45,110573,110097],{"class":55},[45,110575,110576,110578],{"class":47,"line":66},[45,110577,4240],{"class":51},[45,110579,110104],{"class":55},[20,110581,110582,110585,110586,110588,110589,110591],{},[42,110583,110584],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[42,110587,104130],{}," 2 维，",[42,110590,104460],{}," 2 维，所以 obs 是 4 维。",[20,110593,110594],{},"设置初始角度：",[36,110596,110598],{"className":30478,"code":110597,"language":30480,"meta":25,"style":25},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[42,110599,110600,110612],{"__ignoreMap":25},[45,110601,110602,110604,110606,110608,110610],{"class":47,"line":48},[45,110603,104799],{"class":55},[45,110605,495],{"class":79},[45,110607,4593],{"class":55},[45,110609,59],{"class":51},[45,110611,110240],{"class":79},[45,110613,110614],{"class":47,"line":66},[45,110615,104643],{"class":55},[20,110617,110618],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[20,110620,110621],{},"简单反馈控制：",[36,110623,110625],{"className":30478,"code":110624,"language":30480,"meta":25,"style":25},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[42,110626,110627,110647],{"__ignoreMap":25},[45,110628,110629,110631,110633,110635,110637,110639,110641,110643,110645],{"class":47,"line":48},[45,110630,107542],{"class":55},[45,110632,59],{"class":51},[45,110634,110327],{"class":79},[45,110636,6668],{"class":51},[45,110638,109920],{"class":55},[45,110640,758],{"class":51},[45,110642,61967],{"class":79},[45,110644,6668],{"class":51},[45,110646,110340],{"class":55},[45,110648,110649,110651,110653,110655,110657,110659,110661,110663],{"class":47,"line":66},[45,110650,107542],{"class":55},[45,110652,59],{"class":51},[45,110654,107547],{"class":55},[45,110656,809],{"class":51},[45,110658,102503],{"class":79},[45,110660,12584],{"class":55},[45,110662,102503],{"class":79},[45,110664,139],{"class":55},[20,110666,110667],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[20,110669,110670],{},"限制动作：",[36,110672,110674],{"className":30478,"code":110673,"language":30480,"meta":25,"style":25},"np.clip(action, -1.0, 1.0)\n",[42,110675,110676],{"__ignoreMap":25},[45,110677,110678,110681,110683,110685,110687,110689],{"class":47,"line":48},[45,110679,110680],{"class":55},"np.clip(action, ",[45,110682,809],{"class":51},[45,110684,102503],{"class":79},[45,110686,12584],{"class":55},[45,110688,102503],{"class":79},[45,110690,139],{"class":55},[20,110692,110693,110694,110697],{},"因为 XML 里 ",[42,110695,110696],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[249,110699,101808],{"id":101808},[36,110701,110702],{"className":30478,"code":110563,"language":30480,"meta":25,"style":25},[42,110703,110704,110712],{"__ignoreMap":25},[45,110705,110706,110708,110710],{"class":47,"line":48},[45,110707,32047],{"class":51},[45,110709,110094],{"class":69},[45,110711,110097],{"class":55},[45,110713,110714,110716],{"class":47,"line":66},[45,110715,4240],{"class":51},[45,110717,110104],{"class":55},[20,110719,110720,110721,110724,110725,110728,110729,110732],{},"这段定义了一个函数，用来获取当前观测。",[42,110722,110723],{},"data.qpos.copy()"," 是位置数组副本，",[42,110726,110727],{},"data.qvel.copy()"," 是速度数组副本。",[42,110730,110731],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[20,110734,110735],{},"在本章模型里：",[36,110737,110740],{"className":110738,"code":110739,"language":5337,"meta":25},[5335],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[42,110741,110739],{"__ignoreMap":25},[20,110743,110744],{},"所以返回的 obs 是：",[36,110746,110749],{"className":110747,"code":110748,"language":5337,"meta":25},[5335],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[42,110750,110748],{"__ignoreMap":25},[36,110752,110754],{"className":30478,"code":110753,"language":30480,"meta":25,"style":25},"def compute_reward(obs: np.ndarray) -> float:\n",[42,110755,110756],{"__ignoreMap":25},[45,110757,110758,110760,110762,110764,110766],{"class":47,"line":48},[45,110759,32047],{"class":51},[45,110761,110119],{"class":69},[45,110763,110122],{"class":55},[45,110765,320],{"class":79},[45,110767,3889],{"class":55},[20,110769,110770,110771,110774],{},"这行定义奖励函数。输入是观测 ",[42,110772,110773],{},"obs","，输出是一个浮点数奖励。",[36,110776,110778],{"className":30478,"code":110777,"language":30480,"meta":25,"style":25},"cart_x = obs[0]\npole_angle = obs[1]\n",[42,110779,110780,110793],{"__ignoreMap":25},[45,110781,110782,110785,110787,110789,110791],{"class":47,"line":48},[45,110783,110784],{"class":55},"cart_x ",[45,110786,59],{"class":51},[45,110788,110136],{"class":55},[45,110790,469],{"class":79},[45,110792,33346],{"class":55},[45,110794,110795,110798,110800,110802,110804],{"class":47,"line":66},[45,110796,110797],{"class":55},"pole_angle ",[45,110799,59],{"class":51},[45,110801,110136],{"class":55},[45,110803,495],{"class":79},[45,110805,33346],{"class":55},[20,110807,110808,110809,110812,110813,110816],{},"数组索引从 0 开始。",[42,110810,110811],{},"obs[0]"," 是第一个元素，也就是小车位置。",[42,110814,110815],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[36,110818,110819],{"className":30478,"code":109888,"language":30480,"meta":25,"style":25},[42,110820,110821],{"__ignoreMap":25},[45,110822,110823,110825,110827,110829,110831,110833,110835,110837,110839,110841,110843,110845,110847,110849],{"class":47,"line":48},[45,110824,17195],{"class":51},[45,110826,109897],{"class":79},[45,110828,282],{"class":55},[45,110830,102503],{"class":79},[45,110832,52371],{"class":51},[45,110834,109906],{"class":79},[45,110836,6668],{"class":51},[45,110838,109911],{"class":55},[45,110840,732],{"class":51},[45,110842,109911],{"class":55},[45,110844,809],{"class":51},[45,110846,109920],{"class":55},[45,110848,732],{"class":51},[45,110850,109925],{"class":55},[20,110852,110853,110854,110857,110858,110861],{},"这行计算奖励。",[42,110855,110856],{},"cart_x * cart_x"," 是小车位置的平方，",[42,110859,110860],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[36,110863,110865],{"className":30478,"code":110864,"language":30480,"meta":25,"style":25},"data.qpos[1] = 0.1\n",[42,110866,110867],{"__ignoreMap":25},[45,110868,110869,110871,110873,110875,110877],{"class":47,"line":48},[45,110870,104799],{"class":55},[45,110872,495],{"class":79},[45,110874,4593],{"class":55},[45,110876,59],{"class":51},[45,110878,110240],{"class":79},[20,110880,110881,110882,110884,110885,110887],{},"手动设置杆子的初始角度。因为 ",[42,110883,105556],{}," 是小车位置，",[42,110886,105559],{}," 是杆子角度，所以这里改的是杆子。",[36,110889,110890],{"className":30478,"code":104643,"language":30480,"meta":25,"style":25},[42,110891,110892],{"__ignoreMap":25},[45,110893,110894],{"class":47,"line":48},[45,110895,104643],{"class":55},[20,110897,105602,110898,110900],{},[42,110899,104130],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[36,110902,110904],{"className":30478,"code":110903,"language":30480,"meta":25,"style":25},"total_reward = 0.0\n",[42,110905,110906],{"__ignoreMap":25},[45,110907,110908,110911,110913],{"class":47,"line":48},[45,110909,110910],{"class":55},"total_reward ",[45,110912,59],{"class":51},[45,110914,104861],{"class":79},[20,110916,110917],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[36,110919,110921],{"className":30478,"code":110920,"language":30480,"meta":25,"style":25},"for step in range(1000):\n",[42,110922,110923],{"__ignoreMap":25},[45,110924,110925,110927,110929,110931,110933,110935,110937],{"class":47,"line":48},[45,110926,3175],{"class":51},[45,110928,31716],{"class":55},[45,110930,26143],{"class":51},[45,110932,32543],{"class":79},[45,110934,282],{"class":55},[45,110936,6560],{"class":79},[45,110938,30886],{"class":55},[20,110940,110941,110942,110944],{},"循环 1000 步。",[42,110943,107234],{}," 是当前步数，从 0 到 999。",[36,110946,110948],{"className":30478,"code":110947,"language":30480,"meta":25,"style":25},"obs = get_observation(data)\n",[42,110949,110950],{"__ignoreMap":25},[45,110951,110952,110955,110957],{"class":47,"line":48},[45,110953,110954],{"class":55},"obs ",[45,110956,59],{"class":51},[45,110958,110287],{"class":55},[20,110960,110961,110962,28485],{},"读取当前状态，保存到 ",[42,110963,110773],{},[36,110965,110967],{"className":30478,"code":110966,"language":30480,"meta":25,"style":25},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[42,110968,110969,110981],{"__ignoreMap":25},[45,110970,110971,110973,110975,110977,110979],{"class":47,"line":48},[45,110972,110797],{"class":55},[45,110974,59],{"class":51},[45,110976,110136],{"class":55},[45,110978,495],{"class":79},[45,110980,33346],{"class":55},[45,110982,110983,110986,110988,110990,110992],{"class":47,"line":66},[45,110984,110985],{"class":55},"pole_angular_velocity ",[45,110987,59],{"class":51},[45,110989,110136],{"class":55},[45,110991,350],{"class":79},[45,110993,33346],{"class":55},[20,110995,110996,110997,111000,111001,28485],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[42,110998,110999],{},"obs[3]","？因为 obs 的顺序是 ",[42,111002,111003],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[36,111005,111007],{"className":30478,"code":111006,"language":30480,"meta":25,"style":25},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[42,111008,111009],{"__ignoreMap":25},[45,111010,111011,111013,111015,111017,111019,111021,111023,111025,111027],{"class":47,"line":48},[45,111012,107542],{"class":55},[45,111014,59],{"class":51},[45,111016,110327],{"class":79},[45,111018,6668],{"class":51},[45,111020,109920],{"class":55},[45,111022,758],{"class":51},[45,111024,61967],{"class":79},[45,111026,6668],{"class":51},[45,111028,110340],{"class":55},[20,111030,111031,111032,101118,111034,111036],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[42,111033,105360],{},[42,111035,35429],{}," 是人为设置的系数，不是固定公式。",[36,111038,111040],{"className":30478,"code":111039,"language":30480,"meta":25,"style":25},"action = np.clip(action, -1.0, 1.0)\n",[42,111041,111042],{"__ignoreMap":25},[45,111043,111044,111046,111048,111050,111052,111054,111056,111058],{"class":47,"line":48},[45,111045,107542],{"class":55},[45,111047,59],{"class":51},[45,111049,107547],{"class":55},[45,111051,809],{"class":51},[45,111053,102503],{"class":79},[45,111055,12584],{"class":55},[45,111057,102503],{"class":79},[45,111059,139],{"class":55},[20,111061,111062],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[36,111064,111065],{"className":30478,"code":109873,"language":30480,"meta":25,"style":25},[42,111066,111067],{"__ignoreMap":25},[45,111068,111069,111071,111073,111075,111077],{"class":47,"line":48},[45,111070,105971],{"class":55},[45,111072,469],{"class":79},[45,111074,4593],{"class":55},[45,111076,59],{"class":51},[45,111078,107570],{"class":55},[20,111080,111081],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[36,111083,111084],{"className":30478,"code":104605,"language":30480,"meta":25,"style":25},[42,111085,111086],{"__ignoreMap":25},[45,111087,111088],{"class":47,"line":48},[45,111089,104605],{"class":55},[20,111091,111092,111093,111095],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[42,111094,106226],{}," 计算小车和杆子的下一刻状态。",[36,111097,111099],{"className":30478,"code":111098,"language":30480,"meta":25,"style":25},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[42,111100,111101,111110],{"__ignoreMap":25},[45,111102,111103,111106,111108],{"class":47,"line":48},[45,111104,111105],{"class":55},"reward ",[45,111107,59],{"class":51},[45,111109,110392],{"class":55},[45,111111,111112,111114,111116],{"class":47,"line":66},[45,111113,110910],{"class":55},[45,111115,9627],{"class":51},[45,111117,110402],{"class":55},[20,111119,111120,111121,111123,111124,111127,111128,28485],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[42,111122,9627],{}," 是简写，",[42,111125,111126],{},"total_reward += reward"," 等价于 ",[42,111129,111130],{},"total_reward = total_reward + reward",[36,111132,111134],{"className":30478,"code":111133,"language":30480,"meta":25,"style":25},"if step % 100 == 0:\n",[42,111135,111136],{"__ignoreMap":25},[45,111137,111138,111140,111142,111144,111146,111148,111150],{"class":47,"line":48},[45,111139,1682],{"class":51},[45,111141,31716],{"class":55},[45,111143,605],{"class":51},[45,111145,5904],{"class":79},[45,111147,101659],{"class":51},[45,111149,4243],{"class":79},[45,111151,3889],{"class":55},[20,111153,111154,111156,111157,111160],{},[42,111155,605],{}," 是取余数。",[42,111158,111159],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[36,111162,111164],{"className":30478,"code":111163,"language":30480,"meta":25,"style":25},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[42,111165,111166],{"__ignoreMap":25},[45,111167,111168,111170,111172,111174,111176,111178,111180,111182,111184,111186,111188,111190,111192,111194,111196,111198],{"class":47,"line":48},[45,111169,30515],{"class":79},[45,111171,282],{"class":55},[45,111173,110431],{"class":62},[45,111175,110434],{"class":55},[45,111177,110437],{"class":62},[45,111179,110440],{"class":55},[45,111181,350],{"class":79},[45,111183,110445],{"class":55},[45,111185,110448],{"class":62},[45,111187,12584],{"class":55},[45,111189,32118],{"class":79},[45,111191,282],{"class":55},[45,111193,320],{"class":79},[45,111195,110459],{"class":55},[45,111197,350],{"class":79},[45,111199,30597],{"class":55},[20,111201,111202,111203,111206,111207,111210],{},"打印当前步数、观测和动作。",[42,111204,111205],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[42,111208,111209],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[15,111212,102416],{"id":102415},[20,111214,111215],{},"观测向量:",[36,111217,111220],{"className":111218,"code":111219,"language":5337,"meta":25},[5335],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[42,111221,111219],{"__ignoreMap":25},[20,111223,111224],{},"控制器是教学用的简单线性反馈，不保证最优。",[20,111226,111227],{},"每隔 100 步会打印一次：",[36,111229,111232],{"className":111230,"code":111231,"language":5337,"meta":25},[5335],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[42,111233,111231],{"__ignoreMap":25},[20,111235,111236],{},"重点观察：",[233,111238,111239,111245,111250],{},[169,111240,111241,111244],{},[42,111242,111243],{},"pole_angle"," 是否越来越大。",[169,111246,111247,111249],{},[42,111248,109826],{}," 是否跑得太远。",[169,111251,111252,111253,82639,111255,28485],{},"action 是否经常被 clip 到 ",[42,111254,104015],{},[42,111256,495],{},[20,111258,111259],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[15,111261,102448],{"id":102447},[233,111263,111264,111270,111273,111279,111289,111295,111298],{},[169,111265,111266,111267,28485],{},"把初始角度改为 ",[42,111268,111269],{},"data.qpos[1] = 0.3",[169,111271,111272],{},"重新运行，观察控制是否变差。",[169,111274,111275,111276,111278],{},"把 actuator ",[42,111277,107167],{}," 改小。",[169,111280,111281,111282,111285,111286,28485],{},"打印 ",[42,111283,111284],{},"model.nq, model.nv, model.nu","，应为 ",[42,111287,111288],{},"2 2 1",[169,111290,111291,111292,111294],{},"把 reward 里的 ",[42,111293,110860],{}," 系数改大，观察总奖励变化。",[169,111296,111297],{},"把控制器改成反号，观察杆子是否更容易倒。",[169,111299,111300],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[15,111302,102553],{"id":102552},[249,111304,111305],{"id":111305},"杆子方向和预期不一致",[20,111307,102496,111308,111310,111311,111313],{},[42,111309,106339],{}," 和 capsule 的 ",[42,111312,103276],{},"，必要时用 viewer 可视化确认。",[249,111315,111316],{"id":111316},"控制器越控越倒",[20,111318,111319],{},"说明反馈符号可能反了，尝试:",[36,111321,111323],{"className":30478,"code":111322,"language":30480,"meta":25,"style":25},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[42,111324,111325],{"__ignoreMap":25},[45,111326,111327,111329,111331,111333,111335,111337,111339,111341,111343,111345],{"class":47,"line":48},[45,111328,107542],{"class":55},[45,111330,59],{"class":51},[45,111332,52371],{"class":51},[45,111334,105360],{"class":79},[45,111336,6668],{"class":51},[45,111338,109920],{"class":55},[45,111340,809],{"class":51},[45,111342,61967],{"class":79},[45,111344,6668],{"class":51},[45,111346,110340],{"class":55},[249,111348,111349],{"id":111349},"小车飞走",[20,111351,111352,111353,111355,111356,111359],{},"降低 ",[42,111354,107167],{}," 或缩小 ",[42,111357,111358],{},"action"," 的 clip 范围。",[249,111361,111363,111365],{"id":111362},"obs3-为什么是杆子角速度",[42,111364,110999],{}," 为什么是杆子角速度",[20,111367,111368],{},"因为这个模型里：",[36,111370,111373],{"className":111371,"code":111372,"language":5337,"meta":25},[5335],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[42,111374,111372],{"__ignoreMap":25},[20,111376,109847],{},[36,111378,111381],{"className":111379,"code":111380,"language":5337,"meta":25},[5335],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[42,111382,111380],{"__ignoreMap":25},[249,111384,111386],{"id":111385},"reward-变成负数是否错误","reward 变成负数是否错误",[20,111388,111389],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[15,111391,102707],{"id":102706},[20,111393,111394],{},"一个控制任务通常包含：",[233,111396,111397,111400,111408,111413,111416],{},[169,111398,111399],{},"模型：Cartpole 的 body、joint、actuator。",[169,111401,111402,111403,490,111405,111407],{},"观测：从 ",[42,111404,104130],{},[42,111406,104460],{}," 里取状态。",[169,111409,111410,111411,28485],{},"动作：写入 ",[42,111412,101176],{},[169,111414,111415],{},"奖励：根据任务目标打分。",[169,111417,111418],{},"循环：obs -> action -> step -> reward。",[20,111420,111421],{},"这就是后面 Gymnasium 环境的基本骨架。",[196,111423,104386],{},{"title":25,"searchDepth":66,"depth":66,"links":111425},[111426,111427,111428,111433,111437,111438,111439,111447],{"id":100746,"depth":66,"text":100747},{"id":100869,"depth":66,"text":100870},{"id":101144,"depth":66,"text":101145,"children":111429},[111430,111431,111432],{"id":109800,"depth":1331,"text":109801},{"id":109865,"depth":1331,"text":109866},{"id":109881,"depth":1331,"text":109882},{"id":101352,"depth":66,"text":101353,"children":111434},[111435,111436],{"id":101672,"depth":1331,"text":101672},{"id":101808,"depth":1331,"text":101808},{"id":102415,"depth":66,"text":102416},{"id":102447,"depth":66,"text":102448},{"id":102552,"depth":66,"text":102553,"children":111440},[111441,111442,111443,111444,111446],{"id":111305,"depth":1331,"text":111305},{"id":111316,"depth":1331,"text":111316},{"id":111349,"depth":1331,"text":111349},{"id":111362,"depth":1331,"text":111445},"obs[3] 为什么是杆子角速度",{"id":111385,"depth":1331,"text":111386},{"id":102706,"depth":66,"text":102707},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109536,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111454,"title":111455,"body":111456,"description":25,"extension":205,"meta":113470,"navigation":207,"path":113471,"seo":113472,"stem":113473,"__hash__":113474},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111457,"toc":113446},[111458,111461,111463,111466,111468,111485,111488,111491,111497,111500,111502,111504,111528,111530,111544,111546,111587,111589,111607,111609,111612,111618,111621,111649,111653,111659,111684,111687,111718,111725,111728,111731,111737,111740,111746,111749,111755,111759,111762,111787,111790,111792,112552,112554,112566,112568,112579,112581,112584,112601,112604,112606,112617,112620,112622,112668,112671,112684,112687,112769,112772,112774,112790,112800,112813,112816,112855,112865,112876,112886,112899,112902,112931,112934,112944,112947,112953,112970,112981,112983,112989,113006,113017,113038,113041,113053,113056,113077,113080,113088,113096,113113,113116,113185,113192,113200,113203,113216,113223,113225,113228,113234,113237,113240,113246,113252,113254,113294,113296,113302,113311,113314,113316,113336,113339,113342,113348,113352,113354,113381,113384,113387,113414,113420,113423,113426,113428,113431,113434,113440,113443],[10,111459,111455],{"id":111460},"_7控制任务reacher-机械臂到达目标",[15,111462,100747],{"id":100746},[20,111464,111465],{},"本章搭建一个二维两关节 reacher 任务。",[20,111467,104431],{},[233,111469,111470,111473,111476,111479,111482],{},[169,111471,111472],{},"两个 hinge joint",[169,111474,111475],{},"两个 motor actuator",[169,111477,111478],{},"site 作为末端点和目标点",[169,111480,111481],{},"根据末端和目标距离设计 reward",[169,111483,111484],{},"构造机械臂任务的基本形式",[20,111486,111487],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[20,111489,111490],{},"Reacher 任务可以理解为：",[36,111492,111495],{"className":111493,"code":111494,"language":5337,"meta":25},[5335],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[42,111496,111494],{"__ignoreMap":25},[20,111498,111499],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[15,111501,100870],{"id":100869},[20,111503,100873],{},[36,111505,111506],{"className":38,"code":104488,"language":40,"meta":25,"style":25},[42,111507,111508],{"__ignoreMap":25},[45,111509,111510,111512,111514,111516,111518,111520,111522,111524,111526],{"class":47,"line":48},[45,111511,24724],{"class":69},[45,111513,26415],{"class":62},[45,111515,23981],{"class":62},[45,111517,26500],{"class":79},[45,111519,104503],{"class":62},[45,111521,100898],{"class":62},[45,111523,102601],{"class":62},[45,111525,100914],{"class":62},[45,111527,104512],{"class":62},[20,111529,102919],{},[36,111531,111532],{"className":38,"code":101019,"language":40,"meta":25,"style":25},[42,111533,111534],{"__ignoreMap":25},[45,111535,111536,111538,111540,111542],{"class":47,"line":48},[45,111537,23978],{"class":69},[45,111539,23981],{"class":62},[45,111541,101030],{"class":62},[45,111543,101033],{"class":62},[20,111545,102936],{},[36,111547,111549],{"className":38,"code":111548,"language":40,"meta":25,"style":25},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[42,111550,111551,111568,111577],{"__ignoreMap":25},[45,111552,111553,111555,111557,111559,111562,111564,111566],{"class":47,"line":48},[45,111554,30430],{"class":69},[45,111556,29276],{"class":62},[45,111558,133],{"class":79},[45,111560,111561],{"class":62}," mujoco-reacher",[45,111563,101075],{"class":62},[45,111565,101078],{"class":79},[45,111567,101081],{"class":79},[45,111569,111570,111572,111574],{"class":47,"line":66},[45,111571,30430],{"class":69},[45,111573,101088],{"class":62},[45,111575,111576],{"class":62}," mujoco-reacher\n",[45,111578,111579,111581,111583,111585],{"class":47,"line":1331},[45,111580,23978],{"class":69},[45,111582,23981],{"class":62},[45,111584,101030],{"class":62},[45,111586,101033],{"class":62},[20,111588,101104],{},[233,111590,111591,111594,111597],{},[169,111592,111593],{},"本章使用低维状态，不使用图像输入。",[169,111595,111596],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[169,111598,111599,111600,490,111602,490,111604,111606],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[42,111601,104130],{},[42,111603,104460],{},[42,111605,103780],{}," 的方法一致。",[15,111608,101145],{"id":101144},[20,111610,111611],{},"Reacher 任务核心:",[36,111613,111616],{"className":111614,"code":111615,"language":5337,"meta":25},[5335],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[42,111617,111615],{"__ignoreMap":25},[20,111619,111620],{},"读取 site 世界坐标:",[36,111622,111624],{"className":30478,"code":111623,"language":30480,"meta":25,"style":25},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[42,111625,111626,111639],{"__ignoreMap":25},[45,111627,111628,111630,111632,111634,111637],{"class":47,"line":48},[45,111629,103734],{"class":55},[45,111631,59],{"class":51},[45,111633,103505],{"class":55},[45,111635,111636],{"class":62},"\"tip\"",[45,111638,139],{"class":55},[45,111640,111641,111644,111646],{"class":47,"line":66},[45,111642,111643],{"class":55},"tip_pos ",[45,111645,59],{"class":51},[45,111647,111648],{"class":55}," data.site_xpos[site_id]\n",[249,111650,111652],{"id":111651},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[20,111654,111655,111656,111658],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[42,111657,104130],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[36,111660,111662],{"className":30478,"code":111661,"language":30480,"meta":25,"style":25},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[42,111663,111664,111674],{"__ignoreMap":25},[45,111665,111666,111669,111671],{"class":47,"line":48},[45,111667,111668],{"class":55},"tip ",[45,111670,59],{"class":51},[45,111672,111673],{"class":55}," data.site_xpos[tip_site_id]\n",[45,111675,111676,111679,111681],{"class":47,"line":66},[45,111677,111678],{"class":55},"target ",[45,111680,59],{"class":51},[45,111682,111683],{"class":55}," data.site_xpos[target_site_id]\n",[20,111685,111686],{},"这样 reward 就很容易写：",[36,111688,111690],{"className":30478,"code":111689,"language":30480,"meta":25,"style":25},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[42,111691,111692,111707],{"__ignoreMap":25},[45,111693,111694,111697,111699,111702,111704],{"class":47,"line":48},[45,111695,111696],{"class":55},"dist ",[45,111698,59],{"class":51},[45,111700,111701],{"class":55}," np.linalg.norm(tip ",[45,111703,809],{"class":51},[45,111705,111706],{"class":55}," target)\n",[45,111708,111709,111711,111713,111715],{"class":47,"line":66},[45,111710,111105],{"class":55},[45,111712,59],{"class":51},[45,111714,52371],{"class":51},[45,111716,111717],{"class":55},"dist\n",[20,111719,111720,111721,111724],{},"距离越小，",[42,111722,111723],{},"-dist"," 越接近 0，奖励越高。",[249,111726,111727],{"id":111727},"两关节机械臂的状态",[20,111729,111730],{},"这个模型有两个 hinge joint：",[36,111732,111735],{"className":111733,"code":111734,"language":5337,"meta":25},[5335],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[42,111736,111734],{"__ignoreMap":25},[20,111738,111739],{},"再加上末端和目标位置：",[36,111741,111744],{"className":111742,"code":111743,"language":5337,"meta":25},[5335],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[42,111745,111743],{"__ignoreMap":25},[20,111747,111748],{},"总维度：",[36,111750,111753],{"className":111751,"code":111752,"language":5337,"meta":25},[5335],"2 + 2 + 3 + 3 = 10\n",[42,111754,111752],{"__ignoreMap":25},[249,111756,111758],{"id":111757},"为什么-gravity-是-0","为什么 gravity 是 0",[20,111760,111761],{},"本章把重力设为：",[36,111763,111765],{"className":53167,"code":111764,"language":53169,"meta":25,"style":25},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[42,111766,111767],{"__ignoreMap":25},[45,111768,111769,111771,111773,111775,111777,111779,111781,111783,111785],{"class":47,"line":48},[45,111770,1187],{"class":55},[45,111772,69266],{"class":51400},[45,111774,101294],{"class":69},[45,111776,59],{"class":55},[45,111778,101299],{"class":62},[45,111780,101302],{"class":69},[45,111782,59],{"class":55},[45,111784,103871],{"class":62},[45,111786,101244],{"class":55},[20,111788,111789],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[15,111791,101353],{"id":101352},[36,111793,111795],{"className":30478,"code":111794,"language":30480,"meta":25,"style":25},"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",[42,111796,111797,111803,111813,111817,111821,111829,111834,111839,111843,111847,111852,111857,111861,111866,111871,111876,111880,111885,111890,111895,111900,111904,111908,111912,111916,111920,111925,111930,111934,111938,111942,111946,111950,111965,111974,111986,112009,112016,112020,112024,112034,112048,112062,112069,112073,112077,112091,112103,112115,112128,112143,112160,112164,112168,112180,112192,112200,112208,112212,112228,112233,112246,112259,112274,112278,112313,112345,112349,112353,112362,112366,112382,112392,112403,112419,112435,112451,112467,112471,112489,112509,112528,112532,112536,112548],{"__ignoreMap":25},[45,111798,111799,111801],{"class":47,"line":48},[45,111800,30492],{"class":51},[45,111802,101401],{"class":55},[45,111804,111805,111807,111809,111811],{"class":47,"line":66},[45,111806,30492],{"class":51},[45,111808,31480],{"class":55},[45,111810,31483],{"class":51},[45,111812,31486],{"class":55},[45,111814,111815],{"class":47,"line":1331},[45,111816,2550],{"emptyLinePlaceholder":207},[45,111818,111819],{"class":47,"line":1346},[45,111820,2550],{"emptyLinePlaceholder":207},[45,111822,111823,111825,111827],{"class":47,"line":1352},[45,111824,101414],{"class":79},[45,111826,13713],{"class":51},[45,111828,101419],{"class":62},[45,111830,111831],{"class":47,"line":1366},[45,111832,111833],{"class":62},"\u003Cmujoco model=\"two_link_reacher\">\n",[45,111835,111836],{"class":47,"line":1372},[45,111837,111838],{"class":62},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[45,111840,111841],{"class":47,"line":1463},[45,111842,2550],{"emptyLinePlaceholder":207},[45,111844,111845],{"class":47,"line":1469},[45,111846,101438],{"class":62},[45,111848,111849],{"class":47,"line":1481},[45,111850,111851],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[45,111853,111854],{"class":47,"line":1763},[45,111855,111856],{"class":62},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[45,111858,111859],{"class":47,"line":1768},[45,111860,2550],{"emptyLinePlaceholder":207},[45,111862,111863],{"class":47,"line":1774},[45,111864,111865],{"class":62},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[45,111867,111868],{"class":47,"line":1779},[45,111869,111870],{"class":62},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[45,111872,111873],{"class":47,"line":1793},[45,111874,111875],{"class":62},"      \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",[45,111877,111878],{"class":47,"line":1798},[45,111879,2550],{"emptyLinePlaceholder":207},[45,111881,111882],{"class":47,"line":1804},[45,111883,111884],{"class":62},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[45,111886,111887],{"class":47,"line":1825},[45,111888,111889],{"class":62},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[45,111891,111892],{"class":47,"line":1830},[45,111893,111894],{"class":62},"        \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",[45,111896,111897],{"class":47,"line":1844},[45,111898,111899],{"class":62},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[45,111901,111902],{"class":47,"line":1849},[45,111903,106538],{"class":62},[45,111905,111906],{"class":47,"line":1878},[45,111907,101467],{"class":62},[45,111909,111910],{"class":47,"line":1883},[45,111911,101472],{"class":62},[45,111913,111914],{"class":47,"line":1900},[45,111915,2550],{"emptyLinePlaceholder":207},[45,111917,111918],{"class":47,"line":1905},[45,111919,106555],{"class":62},[45,111921,111922],{"class":47,"line":1910},[45,111923,111924],{"class":62},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[45,111926,111927],{"class":47,"line":1915},[45,111928,111929],{"class":62},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[45,111931,111932],{"class":47,"line":1929},[45,111933,106565],{"class":62},[45,111935,111936],{"class":47,"line":1934},[45,111937,101477],{"class":62},[45,111939,111940],{"class":47,"line":2727},[45,111941,95798],{"class":62},[45,111943,111944],{"class":47,"line":2741},[45,111945,2550],{"emptyLinePlaceholder":207},[45,111947,111948],{"class":47,"line":2749},[45,111949,2550],{"emptyLinePlaceholder":207},[45,111951,111952,111954,111957,111960,111962],{"class":47,"line":2754},[45,111953,32047],{"class":51},[45,111955,111956],{"class":69}," site_position",[45,111958,111959],{"class":55},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[45,111961,1451],{"class":79},[45,111963,111964],{"class":55},") -> np.ndarray:\n",[45,111966,111967,111969,111971],{"class":47,"line":2760},[45,111968,103500],{"class":55},[45,111970,59],{"class":51},[45,111972,111973],{"class":55}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[45,111975,111976,111978,111980,111982,111984],{"class":47,"line":2766},[45,111977,3251],{"class":51},[45,111979,103549],{"class":55},[45,111981,1187],{"class":51},[45,111983,4243],{"class":79},[45,111985,3889],{"class":55},[45,111987,111988,111990,111992,111994,111996,111999,112001,112003,112005,112007],{"class":47,"line":2771},[45,111989,103532],{"class":51},[45,111991,103535],{"class":79},[45,111993,282],{"class":55},[45,111995,331],{"class":51},[45,111997,111998],{"class":62},"\"site not found: ",[45,112000,1173],{"class":79},[45,112002,79910],{"class":55},[45,112004,1223],{"class":79},[45,112006,89],{"class":62},[45,112008,139],{"class":55},[45,112010,112011,112013],{"class":47,"line":8098},[45,112012,4240],{"class":51},[45,112014,112015],{"class":55}," data.site_xpos[site_id].copy()\n",[45,112017,112018],{"class":47,"line":8122},[45,112019,2550],{"emptyLinePlaceholder":207},[45,112021,112022],{"class":47,"line":8127},[45,112023,2550],{"emptyLinePlaceholder":207},[45,112025,112026,112028,112031],{"class":47,"line":8133},[45,112027,32047],{"class":51},[45,112029,112030],{"class":69}," get_obs",[45,112032,112033],{"class":55},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[45,112035,112036,112039,112041,112044,112046],{"class":47,"line":8160},[45,112037,112038],{"class":55},"    tip ",[45,112040,59],{"class":51},[45,112042,112043],{"class":55}," site_position(model, data, ",[45,112045,111636],{"class":62},[45,112047,139],{"class":55},[45,112049,112050,112053,112055,112057,112060],{"class":47,"line":8165},[45,112051,112052],{"class":55},"    target ",[45,112054,59],{"class":51},[45,112056,112043],{"class":55},[45,112058,112059],{"class":62},"\"target\"",[45,112061,139],{"class":55},[45,112063,112064,112066],{"class":47,"line":8171},[45,112065,4240],{"class":51},[45,112067,112068],{"class":55}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[45,112070,112071],{"class":47,"line":8183},[45,112072,2550],{"emptyLinePlaceholder":207},[45,112074,112075],{"class":47,"line":8195},[45,112076,2550],{"emptyLinePlaceholder":207},[45,112078,112079,112081,112084,112087,112089],{"class":47,"line":8207},[45,112080,32047],{"class":51},[45,112082,112083],{"class":69}," reward",[45,112085,112086],{"class":55},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[45,112088,320],{"class":79},[45,112090,3889],{"class":55},[45,112092,112093,112095,112097,112099,112101],{"class":47,"line":9866},[45,112094,112038],{"class":55},[45,112096,59],{"class":51},[45,112098,112043],{"class":55},[45,112100,111636],{"class":62},[45,112102,139],{"class":55},[45,112104,112105,112107,112109,112111,112113],{"class":47,"line":9890},[45,112106,112052],{"class":55},[45,112108,59],{"class":51},[45,112110,112043],{"class":55},[45,112112,112059],{"class":62},[45,112114,139],{"class":55},[45,112116,112117,112120,112122,112124,112126],{"class":47,"line":9913},[45,112118,112119],{"class":55},"    dist ",[45,112121,59],{"class":51},[45,112123,111701],{"class":55},[45,112125,809],{"class":51},[45,112127,111706],{"class":55},[45,112129,112130,112133,112135,112138,112140],{"class":47,"line":9937},[45,112131,112132],{"class":55},"    control_cost ",[45,112134,59],{"class":51},[45,112136,112137],{"class":79}," 0.01",[45,112139,6668],{"class":51},[45,112141,112142],{"class":55}," np.sum(np.square(data.ctrl))\n",[45,112144,112145,112147,112149,112151,112153,112155,112157],{"class":47,"line":9942},[45,112146,4240],{"class":51},[45,112148,109897],{"class":79},[45,112150,282],{"class":55},[45,112152,809],{"class":51},[45,112154,111696],{"class":55},[45,112156,809],{"class":51},[45,112158,112159],{"class":55}," control_cost)\n",[45,112161,112162],{"class":47,"line":9947},[45,112163,2550],{"emptyLinePlaceholder":207},[45,112165,112166],{"class":47,"line":9952},[45,112167,2550],{"emptyLinePlaceholder":207},[45,112169,112170,112172,112174,112176,112178],{"class":47,"line":9961},[45,112171,32047],{"class":51},[45,112173,2123],{"class":69},[45,112175,101498],{"class":55},[45,112177,95786],{"class":79},[45,112179,3889],{"class":55},[45,112181,112182,112184,112186,112188,112190],{"class":47,"line":9966},[45,112183,101507],{"class":55},[45,112185,59],{"class":51},[45,112187,101512],{"class":55},[45,112189,101414],{"class":79},[45,112191,139],{"class":55},[45,112193,112194,112196,112198],{"class":47,"line":9972},[45,112195,101521],{"class":55},[45,112197,59],{"class":51},[45,112199,101526],{"class":55},[45,112201,112202,112204,112206],{"class":47,"line":9993},[45,112203,110253],{"class":55},[45,112205,59],{"class":51},[45,112207,104861],{"class":79},[45,112209,112210],{"class":47,"line":9999},[45,112211,2550],{"emptyLinePlaceholder":207},[45,112213,112214,112216,112218,112220,112222,112224,112226],{"class":47,"line":10013},[45,112215,3351],{"class":51},[45,112217,31716],{"class":55},[45,112219,26143],{"class":51},[45,112221,32543],{"class":79},[45,112223,282],{"class":55},[45,112225,65174],{"class":79},[45,112227,30886],{"class":55},[45,112229,112230],{"class":47,"line":10019},[45,112231,112232],{"class":55},"        mujoco.mj_forward(model, data)\n",[45,112234,112235,112238,112240,112242,112244],{"class":47,"line":10046},[45,112236,112237],{"class":55},"        tip ",[45,112239,59],{"class":51},[45,112241,112043],{"class":55},[45,112243,111636],{"class":62},[45,112245,139],{"class":55},[45,112247,112248,112251,112253,112255,112257],{"class":47,"line":10055},[45,112249,112250],{"class":55},"        target ",[45,112252,59],{"class":51},[45,112254,112043],{"class":55},[45,112256,112059],{"class":62},[45,112258,139],{"class":55},[45,112260,112261,112264,112266,112269,112271],{"class":47,"line":10061},[45,112262,112263],{"class":55},"        error ",[45,112265,59],{"class":51},[45,112267,112268],{"class":55}," target ",[45,112270,809],{"class":51},[45,112272,112273],{"class":55}," tip\n",[45,112275,112276],{"class":47,"line":10069},[45,112277,2550],{"emptyLinePlaceholder":207},[45,112279,112280,112282,112284,112286,112288,112291,112293,112295,112298,112300,112303,112305,112307,112309,112311],{"class":47,"line":10074},[45,112281,106717],{"class":55},[45,112283,469],{"class":79},[45,112285,4593],{"class":55},[45,112287,59],{"class":51},[45,112289,112290],{"class":55}," np.clip(",[45,112292,105360],{"class":79},[45,112294,6668],{"class":51},[45,112296,112297],{"class":55}," error[",[45,112299,356],{"class":79},[45,112301,112302],{"class":55},"], ",[45,112304,809],{"class":51},[45,112306,102503],{"class":79},[45,112308,12584],{"class":55},[45,112310,102503],{"class":79},[45,112312,139],{"class":55},[45,112314,112315,112317,112319,112321,112323,112325,112327,112329,112331,112333,112335,112337,112339,112341,112343],{"class":47,"line":16753},[45,112316,106717],{"class":55},[45,112318,495],{"class":79},[45,112320,4593],{"class":55},[45,112322,59],{"class":51},[45,112324,112290],{"class":55},[45,112326,105360],{"class":79},[45,112328,6668],{"class":51},[45,112330,112297],{"class":55},[45,112332,469],{"class":79},[45,112334,112302],{"class":55},[45,112336,809],{"class":51},[45,112338,102503],{"class":79},[45,112340,12584],{"class":55},[45,112342,102503],{"class":79},[45,112344,139],{"class":55},[45,112346,112347],{"class":47,"line":16759},[45,112348,2550],{"emptyLinePlaceholder":207},[45,112350,112351],{"class":47,"line":16782},[45,112352,101616],{"class":55},[45,112354,112355,112357,112359],{"class":47,"line":16788},[45,112356,110397],{"class":55},[45,112358,9627],{"class":51},[45,112360,112361],{"class":55}," reward(model, data)\n",[45,112363,112364],{"class":47,"line":16811},[45,112365,2550],{"emptyLinePlaceholder":207},[45,112367,112368,112370,112372,112374,112376,112378,112380],{"class":47,"line":16825},[45,112369,2647],{"class":51},[45,112371,31716],{"class":55},[45,112373,605],{"class":51},[45,112375,5904],{"class":79},[45,112377,101659],{"class":51},[45,112379,4243],{"class":79},[45,112381,3889],{"class":55},[45,112383,112384,112387,112389],{"class":47,"line":16845},[45,112385,112386],{"class":55},"            obs ",[45,112388,59],{"class":51},[45,112390,112391],{"class":55}," get_obs(model, data)\n",[45,112393,112394,112396,112398,112400],{"class":47,"line":16851},[45,112395,34750],{"class":79},[45,112397,282],{"class":55},[45,112399,110431],{"class":62},[45,112401,112402],{"class":55},", step)\n",[45,112404,112405,112407,112409,112412,112415,112417],{"class":47,"line":16862},[45,112406,34750],{"class":79},[45,112408,282],{"class":55},[45,112410,112411],{"class":62},"\"  tip:\"",[45,112413,112414],{"class":55},", np.round(tip, ",[45,112416,350],{"class":79},[45,112418,30597],{"class":55},[45,112420,112421,112423,112425,112428,112431,112433],{"class":47,"line":16885},[45,112422,34750],{"class":79},[45,112424,282],{"class":55},[45,112426,112427],{"class":62},"\"  target:\"",[45,112429,112430],{"class":55},", np.round(target, ",[45,112432,350],{"class":79},[45,112434,30597],{"class":55},[45,112436,112437,112439,112441,112444,112447,112449],{"class":47,"line":16907},[45,112438,34750],{"class":79},[45,112440,282],{"class":55},[45,112442,112443],{"class":62},"\"  ctrl:\"",[45,112445,112446],{"class":55},", np.round(data.ctrl.copy(), ",[45,112448,350],{"class":79},[45,112450,30597],{"class":55},[45,112452,112453,112455,112457,112460,112463,112465],{"class":47,"line":16912},[45,112454,34750],{"class":79},[45,112456,282],{"class":55},[45,112458,112459],{"class":62},"\"  obs_dim:\"",[45,112461,112462],{"class":55},", obs.shape[",[45,112464,469],{"class":79},[45,112466,4807],{"class":55},[45,112468,112469],{"class":47,"line":16918},[45,112470,2550],{"emptyLinePlaceholder":207},[45,112472,112473,112475,112477,112479,112481,112483,112485,112487],{"class":47,"line":16932},[45,112474,31399],{"class":79},[45,112476,282],{"class":55},[45,112478,110476],{"class":62},[45,112480,12584],{"class":55},[45,112482,32118],{"class":79},[45,112484,110483],{"class":55},[45,112486,350],{"class":79},[45,112488,30597],{"class":55},[45,112490,112491,112493,112495,112498,112501,112503,112505,112507],{"class":47,"line":16945},[45,112492,31399],{"class":79},[45,112494,282],{"class":55},[45,112496,112497],{"class":62},"\"final tip:\"",[45,112499,112500],{"class":55},", np.round(site_position(model, data, ",[45,112502,111636],{"class":62},[45,112504,110445],{"class":55},[45,112506,350],{"class":79},[45,112508,30597],{"class":55},[45,112510,112511,112513,112515,112518,112520,112522,112524,112526],{"class":47,"line":16950},[45,112512,31399],{"class":79},[45,112514,282],{"class":55},[45,112516,112517],{"class":62},"\"target:\"",[45,112519,112500],{"class":55},[45,112521,112059],{"class":62},[45,112523,110445],{"class":55},[45,112525,350],{"class":79},[45,112527,30597],{"class":55},[45,112529,112530],{"class":47,"line":16964},[45,112531,2550],{"emptyLinePlaceholder":207},[45,112533,112534],{"class":47,"line":16969},[45,112535,2550],{"emptyLinePlaceholder":207},[45,112537,112538,112540,112542,112544,112546],{"class":47,"line":16975},[45,112539,1682],{"class":51},[45,112541,31320],{"class":79},[45,112543,101659],{"class":51},[45,112545,101662],{"class":62},[45,112547,3889],{"class":55},[45,112549,112550],{"class":47,"line":16980},[45,112551,101669],{"class":55},[20,112553,103670],{},[36,112555,112557],{"className":38,"code":112556,"language":40,"meta":25,"style":25},"touch ch7_reacher.py\n",[42,112558,112559],{"__ignoreMap":25},[45,112560,112561,112563],{"class":47,"line":48},[45,112562,101383],{"class":69},[45,112564,112565],{"class":62}," ch7_reacher.py\n",[20,112567,110544],{},[36,112569,112571],{"className":38,"code":112570,"language":40,"meta":25,"style":25},"python ch7_reacher.py\n",[42,112572,112573],{"__ignoreMap":25},[45,112574,112575,112577],{"class":47,"line":48},[45,112576,30480],{"class":69},[45,112578,112565],{"class":62},[249,112580,101672],{"id":101672},[20,112582,112583],{},"读取 site 坐标：",[36,112585,112587],{"className":30478,"code":112586,"language":30480,"meta":25,"style":25},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[42,112588,112589],{"__ignoreMap":25},[45,112590,112591,112593,112595,112597,112599],{"class":47,"line":48},[45,112592,32047],{"class":51},[45,112594,111956],{"class":69},[45,112596,111959],{"class":55},[45,112598,1451],{"class":79},[45,112600,111964],{"class":55},[20,112602,112603],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[20,112605,110560],{},[36,112607,112609],{"className":30478,"code":112608,"language":30480,"meta":25,"style":25},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[42,112610,112611],{"__ignoreMap":25},[45,112612,112613,112615],{"class":47,"line":48},[45,112614,17195],{"class":51},[45,112616,112068],{"class":55},[20,112618,112619],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[20,112621,109885],{},[36,112623,112625],{"className":30478,"code":112624,"language":30480,"meta":25,"style":25},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[42,112626,112627,112639,112652],{"__ignoreMap":25},[45,112628,112629,112631,112633,112635,112637],{"class":47,"line":48},[45,112630,111696],{"class":55},[45,112632,59],{"class":51},[45,112634,111701],{"class":55},[45,112636,809],{"class":51},[45,112638,111706],{"class":55},[45,112640,112641,112644,112646,112648,112650],{"class":47,"line":66},[45,112642,112643],{"class":55},"control_cost ",[45,112645,59],{"class":51},[45,112647,112137],{"class":79},[45,112649,6668],{"class":51},[45,112651,112142],{"class":55},[45,112653,112654,112656,112658,112660,112662,112664,112666],{"class":47,"line":1331},[45,112655,17195],{"class":51},[45,112657,109897],{"class":79},[45,112659,282],{"class":55},[45,112661,809],{"class":51},[45,112663,111696],{"class":55},[45,112665,809],{"class":51},[45,112667,112159],{"class":55},[20,112669,112670],{},"奖励由两部分组成：",[233,112672,112673,112678],{},[169,112674,112675,112677],{},[42,112676,111723],{},"：末端离目标越远，奖励越低。",[169,112679,112680,112683],{},[42,112681,112682],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[20,112685,112686],{},"简单控制器：",[36,112688,112690],{"className":30478,"code":112689,"language":30480,"meta":25,"style":25},"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",[42,112691,112692,112705,112737],{"__ignoreMap":25},[45,112693,112694,112697,112699,112701,112703],{"class":47,"line":48},[45,112695,112696],{"class":55},"error ",[45,112698,59],{"class":51},[45,112700,112268],{"class":55},[45,112702,809],{"class":51},[45,112704,112273],{"class":55},[45,112706,112707,112709,112711,112713,112715,112717,112719,112721,112723,112725,112727,112729,112731,112733,112735],{"class":47,"line":66},[45,112708,105971],{"class":55},[45,112710,469],{"class":79},[45,112712,4593],{"class":55},[45,112714,59],{"class":51},[45,112716,112290],{"class":55},[45,112718,105360],{"class":79},[45,112720,6668],{"class":51},[45,112722,112297],{"class":55},[45,112724,356],{"class":79},[45,112726,112302],{"class":55},[45,112728,809],{"class":51},[45,112730,102503],{"class":79},[45,112732,12584],{"class":55},[45,112734,102503],{"class":79},[45,112736,139],{"class":55},[45,112738,112739,112741,112743,112745,112747,112749,112751,112753,112755,112757,112759,112761,112763,112765,112767],{"class":47,"line":1331},[45,112740,105971],{"class":55},[45,112742,495],{"class":79},[45,112744,4593],{"class":55},[45,112746,59],{"class":51},[45,112748,112290],{"class":55},[45,112750,105360],{"class":79},[45,112752,6668],{"class":51},[45,112754,112297],{"class":55},[45,112756,469],{"class":79},[45,112758,112302],{"class":55},[45,112760,809],{"class":51},[45,112762,102503],{"class":79},[45,112764,12584],{"class":55},[45,112766,102503],{"class":79},[45,112768,139],{"class":55},[20,112770,112771],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[249,112773,101808],{"id":101808},[36,112775,112776],{"className":30478,"code":112586,"language":30480,"meta":25,"style":25},[42,112777,112778],{"__ignoreMap":25},[45,112779,112780,112782,112784,112786,112788],{"class":47,"line":48},[45,112781,32047],{"class":51},[45,112783,111956],{"class":69},[45,112785,111959],{"class":55},[45,112787,1451],{"class":79},[45,112789,111964],{"class":55},[20,112791,112792,112793,112795,112796,82639,112798,28485],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[42,112794,79910],{}," 是 site 的名字，比如 ",[42,112797,111636],{},[42,112799,112059],{},[36,112801,112803],{"className":30478,"code":112802,"language":30480,"meta":25,"style":25},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[42,112804,112805],{"__ignoreMap":25},[45,112806,112807,112809,112811],{"class":47,"line":48},[45,112808,103734],{"class":55},[45,112810,59],{"class":51},[45,112812,111973],{"class":55},[20,112814,112815],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[36,112817,112819],{"className":30478,"code":112818,"language":30480,"meta":25,"style":25},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[42,112820,112821,112833],{"__ignoreMap":25},[45,112822,112823,112825,112827,112829,112831],{"class":47,"line":48},[45,112824,1682],{"class":51},[45,112826,103549],{"class":55},[45,112828,1187],{"class":51},[45,112830,4243],{"class":79},[45,112832,3889],{"class":55},[45,112834,112835,112837,112839,112841,112843,112845,112847,112849,112851,112853],{"class":47,"line":66},[45,112836,103995],{"class":51},[45,112838,103535],{"class":79},[45,112840,282],{"class":55},[45,112842,331],{"class":51},[45,112844,111998],{"class":62},[45,112846,1173],{"class":79},[45,112848,79910],{"class":55},[45,112850,1223],{"class":79},[45,112852,89],{"class":62},[45,112854,139],{"class":55},[20,112856,112857,112858,112861,112862,112864],{},"如果 site 没找到，就主动报错。",[42,112859,112860],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[42,112863,79910],{}," 的值放进字符串里。",[36,112866,112868],{"className":30478,"code":112867,"language":30480,"meta":25,"style":25},"return data.site_xpos[site_id].copy()\n",[42,112869,112870],{"__ignoreMap":25},[45,112871,112872,112874],{"class":47,"line":48},[45,112873,17195],{"class":51},[45,112875,112015],{"class":55},[20,112877,112878,112879,112881,112882,112885],{},"返回这个 site 的世界坐标。",[42,112880,103780],{}," 里的每一行都是一个 site 的 ",[42,112883,112884],{},"(x, y, z)"," 坐标。",[36,112887,112889],{"className":30478,"code":112888,"language":30480,"meta":25,"style":25},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[42,112890,112891],{"__ignoreMap":25},[45,112892,112893,112895,112897],{"class":47,"line":48},[45,112894,32047],{"class":51},[45,112896,112030],{"class":69},[45,112898,112033],{"class":55},[20,112900,112901],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[36,112903,112905],{"className":30478,"code":112904,"language":30480,"meta":25,"style":25},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[42,112906,112907,112919],{"__ignoreMap":25},[45,112908,112909,112911,112913,112915,112917],{"class":47,"line":48},[45,112910,111668],{"class":55},[45,112912,59],{"class":51},[45,112914,112043],{"class":55},[45,112916,111636],{"class":62},[45,112918,139],{"class":55},[45,112920,112921,112923,112925,112927,112929],{"class":47,"line":66},[45,112922,111678],{"class":55},[45,112924,59],{"class":51},[45,112926,112043],{"class":55},[45,112928,112059],{"class":62},[45,112930,139],{"class":55},[20,112932,112933],{},"分别读取末端点和目标点的世界坐标。",[36,112935,112936],{"className":30478,"code":112608,"language":30480,"meta":25,"style":25},[42,112937,112938],{"__ignoreMap":25},[45,112939,112940,112942],{"class":47,"line":48},[45,112941,17195],{"class":51},[45,112943,112068],{"class":55},[20,112945,112946],{},"把四部分拼成一个观测数组：",[36,112948,112951],{"className":112949,"code":112950,"language":5337,"meta":25},[5335],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[42,112952,112950],{"__ignoreMap":25},[36,112954,112956],{"className":30478,"code":112955,"language":30480,"meta":25,"style":25},"dist = np.linalg.norm(tip - target)\n",[42,112957,112958],{"__ignoreMap":25},[45,112959,112960,112962,112964,112966,112968],{"class":47,"line":48},[45,112961,111696],{"class":55},[45,112963,59],{"class":51},[45,112965,111701],{"class":55},[45,112967,809],{"class":51},[45,112969,111706],{"class":55},[20,112971,112972,112973,112976,112977,112980],{},"计算 tip 到 target 的距离。",[42,112974,112975],{},"tip - target"," 得到一个三维向量，",[42,112978,112979],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[20,112982,14782],{},[36,112984,112987],{"className":112985,"code":112986,"language":5337,"meta":25},[5335],"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",[42,112988,112986],{"__ignoreMap":25},[36,112990,112992],{"className":30478,"code":112991,"language":30480,"meta":25,"style":25},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[42,112993,112994],{"__ignoreMap":25},[45,112995,112996,112998,113000,113002,113004],{"class":47,"line":48},[45,112997,112643],{"class":55},[45,112999,59],{"class":51},[45,113001,112137],{"class":79},[45,113003,6668],{"class":51},[45,113005,112142],{"class":55},[20,113007,113008,113009,113012,113013,113016],{},"计算动作惩罚。",[42,113010,113011],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[42,113014,113015],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[36,113018,113020],{"className":30478,"code":113019,"language":30480,"meta":25,"style":25},"return float(-dist - control_cost)\n",[42,113021,113022],{"__ignoreMap":25},[45,113023,113024,113026,113028,113030,113032,113034,113036],{"class":47,"line":48},[45,113025,17195],{"class":51},[45,113027,109897],{"class":79},[45,113029,282],{"class":55},[45,113031,809],{"class":51},[45,113033,111696],{"class":55},[45,113035,809],{"class":51},[45,113037,112159],{"class":55},[20,113039,113040],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[36,113042,113043],{"className":30478,"code":110903,"language":30480,"meta":25,"style":25},[42,113044,113045],{"__ignoreMap":25},[45,113046,113047,113049,113051],{"class":47,"line":48},[45,113048,110910],{"class":55},[45,113050,59],{"class":51},[45,113052,104861],{"class":79},[20,113054,113055],{},"累计奖励变量，记录整个运行过程的总分。",[36,113057,113059],{"className":30478,"code":113058,"language":30480,"meta":25,"style":25},"for step in range(500):\n",[42,113060,113061],{"__ignoreMap":25},[45,113062,113063,113065,113067,113069,113071,113073,113075],{"class":47,"line":48},[45,113064,3175],{"class":51},[45,113066,31716],{"class":55},[45,113068,26143],{"class":51},[45,113070,32543],{"class":79},[45,113072,282],{"class":55},[45,113074,65174],{"class":79},[45,113076,30886],{"class":55},[20,113078,113079],{},"运行 500 个控制步。",[36,113081,113082],{"className":30478,"code":104643,"language":30480,"meta":25,"style":25},[42,113083,113084],{"__ignoreMap":25},[45,113085,113086],{"class":47,"line":48},[45,113087,104643],{"class":55},[20,113089,113090,113091,101118,113093,113095],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[42,113092,103331],{},[42,113094,103334],{}," 是当前状态下的坐标。",[36,113097,113099],{"className":30478,"code":113098,"language":30480,"meta":25,"style":25},"error = target - tip\n",[42,113100,113101],{"__ignoreMap":25},[45,113102,113103,113105,113107,113109,113111],{"class":47,"line":48},[45,113104,112696],{"class":55},[45,113106,59],{"class":51},[45,113108,112268],{"class":55},[45,113110,809],{"class":51},[45,113112,112273],{"class":55},[20,113114,113115],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[36,113117,113119],{"className":30478,"code":113118,"language":30480,"meta":25,"style":25},"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",[42,113120,113121,113153],{"__ignoreMap":25},[45,113122,113123,113125,113127,113129,113131,113133,113135,113137,113139,113141,113143,113145,113147,113149,113151],{"class":47,"line":48},[45,113124,105971],{"class":55},[45,113126,469],{"class":79},[45,113128,4593],{"class":55},[45,113130,59],{"class":51},[45,113132,112290],{"class":55},[45,113134,105360],{"class":79},[45,113136,6668],{"class":51},[45,113138,112297],{"class":55},[45,113140,356],{"class":79},[45,113142,112302],{"class":55},[45,113144,809],{"class":51},[45,113146,102503],{"class":79},[45,113148,12584],{"class":55},[45,113150,102503],{"class":79},[45,113152,139],{"class":55},[45,113154,113155,113157,113159,113161,113163,113165,113167,113169,113171,113173,113175,113177,113179,113181,113183],{"class":47,"line":66},[45,113156,105971],{"class":55},[45,113158,495],{"class":79},[45,113160,4593],{"class":55},[45,113162,59],{"class":51},[45,113164,112290],{"class":55},[45,113166,105360],{"class":79},[45,113168,6668],{"class":51},[45,113170,112297],{"class":55},[45,113172,469],{"class":79},[45,113174,112302],{"class":55},[45,113176,809],{"class":51},[45,113178,102503],{"class":79},[45,113180,12584],{"class":55},[45,113182,102503],{"class":79},[45,113184,139],{"class":55},[20,113186,113187,113188,113191],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[42,113189,113190],{},"error -> ctrl -> step"," 的流程。",[36,113193,113194],{"className":30478,"code":104605,"language":30480,"meta":25,"style":25},[42,113195,113196],{"__ignoreMap":25},[45,113197,113198],{"class":47,"line":48},[45,113199,104605],{"class":55},[20,113201,113202],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[36,113204,113206],{"className":30478,"code":113205,"language":30480,"meta":25,"style":25},"obs = get_obs(model, data)\n",[42,113207,113208],{"__ignoreMap":25},[45,113209,113210,113212,113214],{"class":47,"line":48},[45,113211,110954],{"class":55},[45,113213,59],{"class":51},[45,113215,112391],{"class":55},[20,113217,113218,113219,113222],{},"读取最新观测。后面打印 ",[42,113220,113221],{},"obs.shape[0]","，用来确认观测维度是 10。",[15,113224,102416],{"id":102415},[20,113226,113227],{},"观测维度为:",[36,113229,113232],{"className":113230,"code":113231,"language":5337,"meta":25},[5335],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[42,113233,113231],{"__ignoreMap":25},[20,113235,113236],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[20,113238,113239],{},"程序每 100 步打印：",[36,113241,113244],{"className":113242,"code":113243,"language":5337,"meta":25},[5335],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[42,113245,113243],{"__ignoreMap":25},[20,113247,113248,113249,113251],{},"如果控制有效，你应该看到最终 ",[42,113250,103331],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[15,113253,102448],{"id":102447},[233,113255,113256,113259,113262,113268,113274,113281,113291],{},[169,113257,113258],{},"修改目标点位置。",[169,113260,113261],{},"重新运行，观察最终 tip 是否变化。",[169,113263,113264,113265,113267],{},"把 gravity 改成 ",[42,113266,102689],{},"，观察控制是否变差。",[169,113269,111281,113270,111285,113272,28485],{},[42,113271,102258],{},[42,113273,356],{},[169,113275,102511,113276,102514,113278,113280],{},[42,113277,110696],{},[42,113279,107407],{},"，观察机械臂是否更难移动。",[169,113282,102511,113283,82630,113285,102514,113287,113290],{},[42,113284,103334],{},[42,113286,104246],{},[42,113288,113289],{},"0.2 0 0.6","，观察 reward 和 final tip。",[169,113292,113293],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[15,113295,102553],{"id":102552},[249,113297,113299],{"id":113298},"site-not-found",[42,113300,113301],{},"site not found",[20,113303,113304,113305,101118,113308,28485],{},"检查 XML 中是否有 ",[42,113306,113307],{},"site name=\"tip\"",[42,113309,113310],{},"site name=\"target\"",[249,113312,113313],{"id":113313},"机械臂完全不动",[20,113315,102623],{},[233,113317,113318,113323,113326,113331],{},[169,113319,113320,113322],{},[42,113321,102258],{}," 是否为 2",[169,113324,113325],{},"actuator 是否引用正确 joint",[169,113327,113328,113330],{},[42,113329,101176],{}," 是否被赋值",[169,113332,113333,113334],{},"是否执行了 ",[42,113335,100785],{},[249,113337,113338],{"id":113338},"控制效果不好",[20,113340,113341],{},"正常。本章重点不是控制器最优，而是任务结构:",[36,113343,113346],{"className":113344,"code":113345,"language":5337,"meta":25},[5335],"obs → action → mj_step → reward → next_obs\n",[42,113347,113345],{"__ignoreMap":25},[249,113349,113351],{"id":113350},"tip-坐标不变化","tip 坐标不变化",[20,113353,102675],{},[233,113355,113356,113361,113369,113378],{},[169,113357,113358,113359,28485],{},"是否每步调用了 ",[42,113360,100785],{},[169,113362,113363,113364,101118,113366,28485],{},"是否写入了 ",[42,113365,106226],{},[42,113367,113368],{},"data.ctrl[1]",[169,113370,113371,113372,490,113375,28485],{},"actuator 是否正确引用 ",[42,113373,113374],{},"joint1",[42,113376,113377],{},"joint2",[169,113379,113380],{},"控制输入是否太小。",[249,113382,113383],{"id":113383},"目标点不会动",[20,113385,113386],{},"本章的 target 是固定 site：",[36,113388,113390],{"className":53167,"code":113389,"language":53169,"meta":25,"style":25},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[42,113391,113392],{"__ignoreMap":25},[45,113393,113394,113396,113398,113400,113402,113404,113406,113408,113411],{"class":47,"line":48},[45,113395,1187],{"class":55},[45,113397,103310],{"class":51400},[45,113399,15069],{"class":69},[45,113401,59],{"class":55},[45,113403,112059],{"class":62},[45,113405,101206],{"class":69},[45,113407,59],{"class":55},[45,113409,113410],{"class":62},"\"0.5 0 0.4\"",[45,113412,113413],{"class":55}," ...\u002F>\n",[20,113415,113416,113417,113419],{},"它直接挂在 ",[42,113418,101941],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[249,113421,113422],{"id":113422},"机械臂不像真实机械臂",[20,113424,113425],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[15,113427,102707],{"id":102706},[20,113429,113430],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[20,113432,113433],{},"核心公式：",[36,113435,113438],{"className":113436,"code":113437,"language":5337,"meta":25},[5335],"distance = ||tip - target||\nreward = -distance - action_cost\n",[42,113439,113437],{"__ignoreMap":25},[20,113441,113442],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[196,113444,113445],{},"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":25,"searchDepth":66,"depth":66,"links":113447},[113448,113449,113450,113455,113459,113460,113461,113469],{"id":100746,"depth":66,"text":100747},{"id":100869,"depth":66,"text":100870},{"id":101144,"depth":66,"text":101145,"children":113451},[113452,113453,113454],{"id":111651,"depth":1331,"text":111652},{"id":111727,"depth":1331,"text":111727},{"id":111757,"depth":1331,"text":111758},{"id":101352,"depth":66,"text":101353,"children":113456},[113457,113458],{"id":101672,"depth":1331,"text":101672},{"id":101808,"depth":1331,"text":101808},{"id":102415,"depth":66,"text":102416},{"id":102447,"depth":66,"text":102448},{"id":102552,"depth":66,"text":102553,"children":113462},[113463,113464,113465,113466,113467,113468],{"id":113298,"depth":1331,"text":113301},{"id":113313,"depth":1331,"text":113313},{"id":113338,"depth":1331,"text":113338},{"id":113350,"depth":1331,"text":113351},{"id":113383,"depth":1331,"text":113383},{"id":113422,"depth":1331,"text":113422},{"id":102706,"depth":66,"text":102707},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111455,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113476,"title":113477,"body":113478,"description":25,"extension":205,"meta":116940,"navigation":207,"path":116941,"seo":116942,"stem":116943,"__hash__":116944},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113479,"toc":116911},[113480,113483,113485,113488,113491,113516,113519,113525,113528,113534,113536,113538,113562,113564,113582,113584,113627,113629,113656,113658,113661,113713,113716,113722,113731,113734,113772,113775,113814,113817,113825,113832,113835,113841,113843,113897,113904,113949,113952,113956,113972,113982,113984,115245,115247,115259,115261,115272,115274,115277,115298,115301,115304,115337,115343,115346,115379,115382,115385,115426,115431,115445,115448,115461,115466,115489,115491,115506,115516,115531,115538,115558,115573,115591,115594,115611,115619,115635,115641,115673,115686,115718,115728,115763,115777,115823,115837,115879,115890,115903,115909,115942,115945,115972,115982,116022,116032,116049,116056,116074,116077,116118,116131,116146,116149,116172,116175,116187,116190,116209,116214,116235,116238,116253,116256,116290,116302,116317,116320,116345,116348,116367,116370,116402,116405,116429,116435,116465,116472,116485,116488,116490,116492,116498,116501,116504,116516,116519,116521,116575,116577,116581,116587,116596,116599,116606,116608,116631,116634,116638,116640,116658,116664,116666,116699,116702,116708,116712,116715,116735,116740,116744,116751,116771,116776,116780,116783,116803,116806,116892,116896,116899,116905,116908],[10,113481,113477],{"id":113482},"_8gymnasium-风格强化学习接口基础",[15,113484,100747],{"id":100746},[20,113486,113487],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[20,113489,113490],{},"你将实现:",[36,113492,113494],{"className":30478,"code":113493,"language":30480,"meta":25,"style":25},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[42,113495,113496,113506],{"__ignoreMap":25},[45,113497,113498,113501,113503],{"class":47,"line":48},[45,113499,113500],{"class":55},"obs, info ",[45,113502,59],{"class":51},[45,113504,113505],{"class":55}," env.reset()\n",[45,113507,113508,113511,113513],{"class":47,"line":66},[45,113509,113510],{"class":55},"obs, reward, terminated, truncated, info ",[45,113512,59],{"class":51},[45,113514,113515],{"class":55}," env.step(action)\n",[20,113517,113518],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[20,113520,113521,113522,113524],{},"前面章节的代码都是“脚本式”的：在 ",[42,113523,102395],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[20,113526,113527],{},"可以先记住 Gymnasium 环境的核心交互：",[36,113529,113532],{"className":113530,"code":113531,"language":5337,"meta":25},[5335],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[42,113533,113531],{"__ignoreMap":25},[15,113535,100870],{"id":100869},[20,113537,100873],{},[36,113539,113540],{"className":38,"code":104488,"language":40,"meta":25,"style":25},[42,113541,113542],{"__ignoreMap":25},[45,113543,113544,113546,113548,113550,113552,113554,113556,113558,113560],{"class":47,"line":48},[45,113545,24724],{"class":69},[45,113547,26415],{"class":62},[45,113549,23981],{"class":62},[45,113551,26500],{"class":79},[45,113553,104503],{"class":62},[45,113555,100898],{"class":62},[45,113557,102601],{"class":62},[45,113559,100914],{"class":62},[45,113561,104512],{"class":62},[20,113563,102919],{},[36,113565,113567],{"className":38,"code":113566,"language":40,"meta":25,"style":25},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[42,113568,113569],{"__ignoreMap":25},[45,113570,113571,113573,113575,113577,113579],{"class":47,"line":48},[45,113572,23978],{"class":69},[45,113574,23981],{"class":62},[45,113576,101030],{"class":62},[45,113578,107811],{"class":62},[45,113580,113581],{"class":62}," gymnasium\n",[20,113583,102936],{},[36,113585,113587],{"className":38,"code":113586,"language":40,"meta":25,"style":25},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[42,113588,113589,113606,113615],{"__ignoreMap":25},[45,113590,113591,113593,113595,113597,113600,113602,113604],{"class":47,"line":48},[45,113592,30430],{"class":69},[45,113594,29276],{"class":62},[45,113596,133],{"class":79},[45,113598,113599],{"class":62}," mujoco-gym-api",[45,113601,101075],{"class":62},[45,113603,101078],{"class":79},[45,113605,101081],{"class":79},[45,113607,113608,113610,113612],{"class":47,"line":66},[45,113609,30430],{"class":69},[45,113611,101088],{"class":62},[45,113613,113614],{"class":62}," mujoco-gym-api\n",[45,113616,113617,113619,113621,113623,113625],{"class":47,"line":1331},[45,113618,23978],{"class":69},[45,113620,23981],{"class":62},[45,113622,101030],{"class":62},[45,113624,107811],{"class":62},[45,113626,113581],{"class":62},[20,113628,101104],{},[233,113630,113631,113641,113644,113650],{},[169,113632,113633,113634,113637,113638,28485],{},"本章使用 ",[42,113635,113636],{},"gymnasium","，不是旧版 ",[42,113639,113640],{},"gym",[169,113642,113643],{},"Gymnasium API 与旧 Gym API 有差异。",[169,113645,113646,113647,28485],{},"旧 Gym 常见返回值是 4 个: ",[42,113648,113649],{},"obs, reward, done, info",[169,113651,113652,113653,28485],{},"Gymnasium 返回值是 5 个: ",[42,113654,113655],{},"obs, reward, terminated, truncated, info",[15,113657,101145],{"id":101144},[20,113659,113660],{},"强化学习环境接口包含:",[415,113662,113663,113672],{},[418,113664,113665],{},[421,113666,113667,113670],{},[424,113668,113669],{"align":23885},"方法",[424,113671,102796],{"align":23885},[462,113673,113674,113684,113694,113704],{},[421,113675,113676,113681],{},[467,113677,113678],{"align":23885},[42,113679,113680],{},"reset()",[467,113682,113683],{"align":23885},"重置环境",[421,113685,113686,113691],{},[467,113687,113688],{"align":23885},[42,113689,113690],{},"step(action)",[467,113692,113693],{"align":23885},"执行动作",[421,113695,113696,113701],{},[467,113697,113698],{"align":23885},[42,113699,113700],{},"observation_space",[467,113702,113703],{"align":23885},"观测空间",[421,113705,113706,113711],{},[467,113707,113708],{"align":23885},[42,113709,113710],{},"action_space",[467,113712,23803],{"align":23885},[20,113714,113715],{},"一个最小环境需要完成:",[36,113717,113720],{"className":113718,"code":113719,"language":5337,"meta":25},[5335],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[42,113721,113719],{"__ignoreMap":25},[249,113723,113725,101118,113728,104738],{"id":113724},"terminated-和-truncated-的区别",[42,113726,113727],{},"terminated",[42,113729,113730],{},"truncated",[20,113732,113733],{},"Gymnasium 把“结束”拆成两个概念：",[415,113735,113736,113746],{},[418,113737,113738],{},[421,113739,113740,113742,113744],{},[424,113741,104674],{"align":23885},[424,113743,100800],{"align":23885},[424,113745,21336],{"align":23885},[462,113747,113748,113760],{},[421,113749,113750,113754,113757],{},[467,113751,113752],{"align":23885},[42,113753,113727],{},[467,113755,113756],{"align":23885},"任务自然结束",[467,113758,113759],{"align":23885},"机械臂到达目标、机器人摔倒",[421,113761,113762,113766,113769],{},[467,113763,113764],{"align":23885},[42,113765,113730],{},[467,113767,113768],{"align":23885},"因外部限制截断",[467,113770,113771],{"align":23885},"达到最大步数、时间限制",[20,113773,113774],{},"本章中：",[36,113776,113778],{"className":30478,"code":113777,"language":30480,"meta":25,"style":25},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[42,113779,113780,113795],{"__ignoreMap":25},[45,113781,113782,113785,113787,113790,113792],{"class":47,"line":48},[45,113783,113784],{"class":55},"terminated ",[45,113786,59],{"class":51},[45,113788,113789],{"class":55}," dist ",[45,113791,1187],{"class":51},[45,113793,113794],{"class":79}," 0.05\n",[45,113796,113797,113800,113802,113804,113807,113809,113811],{"class":47,"line":66},[45,113798,113799],{"class":55},"truncated ",[45,113801,59],{"class":51},[45,113803,38973],{"class":79},[45,113805,113806],{"class":55},".steps ",[45,113808,1861],{"class":51},[45,113810,38973],{"class":79},[45,113812,113813],{"class":55},".max_steps\n",[20,113815,113816],{},"也就是：",[233,113818,113819,113822],{},[169,113820,113821],{},"末端距离目标小于 0.05，任务成功结束。",[169,113823,113824],{},"步数超过上限，episode 被截断。",[249,113826,113828,101118,113830],{"id":113827},"observation_space-和-action_space",[42,113829,113700],{},[42,113831,113710],{},[20,113833,113834],{},"这两个对象告诉算法：",[36,113836,113839],{"className":113837,"code":113838,"language":5337,"meta":25},[5335],"观测长什么样\n动作允许多大\n",[42,113840,113838],{"__ignoreMap":25},[20,113842,14782],{},[36,113844,113846],{"className":30478,"code":113845,"language":30480,"meta":25,"style":25},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[42,113847,113848],{"__ignoreMap":25},[45,113849,113850,113852,113855,113857,113860,113863,113866,113868,113870,113873,113875,113877,113879,113881,113883,113885,113887,113890,113892,113894],{"class":47,"line":48},[45,113851,30923],{"class":79},[45,113853,113854],{"class":55},".action_space ",[45,113856,59],{"class":51},[45,113858,113859],{"class":55}," spaces.Box(",[45,113861,113862],{"class":5366},"low",[45,113864,113865],{"class":51},"=-",[45,113867,102503],{"class":79},[45,113869,12584],{"class":55},[45,113871,113872],{"class":5366},"high",[45,113874,59],{"class":51},[45,113876,102503],{"class":79},[45,113878,12584],{"class":55},[45,113880,96063],{"class":5366},[45,113882,59],{"class":51},[45,113884,282],{"class":55},[45,113886,356],{"class":79},[45,113888,113889],{"class":55},",), ",[45,113891,93600],{"class":5366},[45,113893,59],{"class":51},[45,113895,113896],{"class":55},"np.float32)\n",[20,113898,113899,113900,113903],{},"表示动作是 2 维数组，每个值都在 ",[42,113901,113902],{},"[-1, 1]"," 范围内。",[36,113905,113907],{"className":30478,"code":113906,"language":30480,"meta":25,"style":25},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[42,113908,113909],{"__ignoreMap":25},[45,113910,113911,113913,113916,113918,113920,113922,113924,113927,113929,113931,113933,113935,113937,113939,113941,113943,113945,113947],{"class":47,"line":48},[45,113912,30923],{"class":79},[45,113914,113915],{"class":55},".observation_space ",[45,113917,59],{"class":51},[45,113919,113859],{"class":55},[45,113921,113862],{"class":5366},[45,113923,113865],{"class":51},[45,113925,113926],{"class":55},"np.inf, ",[45,113928,113872],{"class":5366},[45,113930,59],{"class":51},[45,113932,113926],{"class":55},[45,113934,96063],{"class":5366},[45,113936,59],{"class":51},[45,113938,282],{"class":55},[45,113940,723],{"class":79},[45,113942,113889],{"class":55},[45,113944,93600],{"class":5366},[45,113946,59],{"class":51},[45,113948,113896],{"class":55},[20,113950,113951],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[249,113953,113955],{"id":113954},"frame_skip-是什么","frame_skip 是什么",[36,113957,113959],{"className":30478,"code":113958,"language":30480,"meta":25,"style":25},"self.frame_skip = 5\n",[42,113960,113961],{"__ignoreMap":25},[45,113962,113963,113965,113968,113970],{"class":47,"line":48},[45,113964,30923],{"class":79},[45,113966,113967],{"class":55},".frame_skip ",[45,113969,59],{"class":51},[45,113971,54527],{"class":79},[20,113973,113974,113975,113978,113979,113981],{},"表示外部调用一次 ",[42,113976,113977],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[42,113980,101315],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[15,113983,101353],{"id":101352},[36,113985,113987],{"className":30478,"code":113986,"language":30480,"meta":25,"style":25},"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",[42,113988,113989,114001,114007,114017,114028,114032,114036,114044,114049,114053,114057,114061,114065,114069,114073,114077,114082,114086,114090,114094,114099,114103,114107,114111,114115,114119,114123,114127,114131,114135,114139,114143,114147,114151,114169,114184,114188,114201,114211,114226,114243,114247,114268,114287,114312,114326,114330,114340,114352,114362,114366,114408,114446,114450,114460,114476,114491,114510,114517,114521,114534,114549,114564,114577,114596,114612,114616,114657,114672,114687,114691,114730,114741,114754,114758,114768,114777,114781,114791,114806,114824,114828,114839,114856,114869,114873,114883,114887,114898,114909,114913,114927,114941,114957,114961,114974,114991,115006,115013,115017,115021,115033,115043,115061,115073,115085,115089,115097,115113,115122,115131,115139,115181,115194,115199,115203,115221,115225,115229,115241],{"__ignoreMap":25},[45,113990,113991,113993,113996,113998],{"class":47,"line":48},[45,113992,30492],{"class":51},[45,113994,113995],{"class":55}," gymnasium ",[45,113997,31483],{"class":51},[45,113999,114000],{"class":55}," gym\n",[45,114002,114003,114005],{"class":47,"line":66},[45,114004,30492],{"class":51},[45,114006,101401],{"class":55},[45,114008,114009,114011,114013,114015],{"class":47,"line":1331},[45,114010,30492],{"class":51},[45,114012,31480],{"class":55},[45,114014,31483],{"class":51},[45,114016,31486],{"class":55},[45,114018,114019,114021,114023,114025],{"class":47,"line":1346},[45,114020,30837],{"class":51},[45,114022,113995],{"class":55},[45,114024,30492],{"class":51},[45,114026,114027],{"class":55}," spaces\n",[45,114029,114030],{"class":47,"line":1352},[45,114031,2550],{"emptyLinePlaceholder":207},[45,114033,114034],{"class":47,"line":1366},[45,114035,2550],{"emptyLinePlaceholder":207},[45,114037,114038,114040,114042],{"class":47,"line":1372},[45,114039,101414],{"class":79},[45,114041,13713],{"class":51},[45,114043,101419],{"class":62},[45,114045,114046],{"class":47,"line":1463},[45,114047,114048],{"class":62},"\u003Cmujoco model=\"gym_reacher\">\n",[45,114050,114051],{"class":47,"line":1469},[45,114052,111838],{"class":62},[45,114054,114055],{"class":47,"line":1481},[45,114056,2550],{"emptyLinePlaceholder":207},[45,114058,114059],{"class":47,"line":1763},[45,114060,101438],{"class":62},[45,114062,114063],{"class":47,"line":1768},[45,114064,111856],{"class":62},[45,114066,114067],{"class":47,"line":1774},[45,114068,2550],{"emptyLinePlaceholder":207},[45,114070,114071],{"class":47,"line":1779},[45,114072,111865],{"class":62},[45,114074,114075],{"class":47,"line":1793},[45,114076,111870],{"class":62},[45,114078,114079],{"class":47,"line":1798},[45,114080,114081],{"class":62},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[45,114083,114084],{"class":47,"line":1804},[45,114085,2550],{"emptyLinePlaceholder":207},[45,114087,114088],{"class":47,"line":1825},[45,114089,111884],{"class":62},[45,114091,114092],{"class":47,"line":1830},[45,114093,111889],{"class":62},[45,114095,114096],{"class":47,"line":1844},[45,114097,114098],{"class":62},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[45,114100,114101],{"class":47,"line":1849},[45,114102,111899],{"class":62},[45,114104,114105],{"class":47,"line":1878},[45,114106,106538],{"class":62},[45,114108,114109],{"class":47,"line":1883},[45,114110,101467],{"class":62},[45,114112,114113],{"class":47,"line":1900},[45,114114,101472],{"class":62},[45,114116,114117],{"class":47,"line":1905},[45,114118,2550],{"emptyLinePlaceholder":207},[45,114120,114121],{"class":47,"line":1910},[45,114122,106555],{"class":62},[45,114124,114125],{"class":47,"line":1915},[45,114126,111924],{"class":62},[45,114128,114129],{"class":47,"line":1929},[45,114130,111929],{"class":62},[45,114132,114133],{"class":47,"line":1934},[45,114134,106565],{"class":62},[45,114136,114137],{"class":47,"line":2727},[45,114138,101477],{"class":62},[45,114140,114141],{"class":47,"line":2741},[45,114142,95798],{"class":62},[45,114144,114145],{"class":47,"line":2749},[45,114146,2550],{"emptyLinePlaceholder":207},[45,114148,114149],{"class":47,"line":2754},[45,114150,2550],{"emptyLinePlaceholder":207},[45,114152,114153,114155,114158,114160,114162,114164,114167],{"class":47,"line":2760},[45,114154,14843],{"class":51},[45,114156,114157],{"class":69}," ReacherEnv",[45,114159,282],{"class":55},[45,114161,113640],{"class":69},[45,114163,835],{"class":55},[45,114165,114166],{"class":69},"Env",[45,114168,30886],{"class":55},[45,114170,114171,114174,114176,114178,114181],{"class":47,"line":2766},[45,114172,114173],{"class":55},"    metadata ",[45,114175,59],{"class":51},[45,114177,4598],{"class":55},[45,114179,114180],{"class":62},"\"render_modes\"",[45,114182,114183],{"class":55},": []}\n",[45,114185,114186],{"class":47,"line":2771},[45,114187,2550],{"emptyLinePlaceholder":207},[45,114189,114190,114192,114194,114197,114199],{"class":47,"line":8098},[45,114191,30901],{"class":51},[45,114193,30904],{"class":79},[45,114195,114196],{"class":55},"(self) -> ",[45,114198,95786],{"class":79},[45,114200,3889],{"class":55},[45,114202,114203,114205,114207,114209],{"class":47,"line":8122},[45,114204,30917],{"class":79},[45,114206,17410],{"class":55},[45,114208,30929],{"class":79},[45,114210,2126],{"class":55},[45,114212,114213,114215,114218,114220,114222,114224],{"class":47,"line":8127},[45,114214,30945],{"class":79},[45,114216,114217],{"class":55},".model ",[45,114219,59],{"class":51},[45,114221,101512],{"class":55},[45,114223,101414],{"class":79},[45,114225,139],{"class":55},[45,114227,114228,114230,114233,114235,114238,114240],{"class":47,"line":8133},[45,114229,30945],{"class":79},[45,114231,114232],{"class":55},".data ",[45,114234,59],{"class":51},[45,114236,114237],{"class":55}," mujoco.MjData(",[45,114239,30923],{"class":79},[45,114241,114242],{"class":55},".model)\n",[45,114244,114245],{"class":47,"line":8160},[45,114246,2550],{"emptyLinePlaceholder":207},[45,114248,114249,114251,114254,114256,114259,114261,114264,114266],{"class":47,"line":8165},[45,114250,30945],{"class":79},[45,114252,114253],{"class":55},".tip_site_id ",[45,114255,59],{"class":51},[45,114257,114258],{"class":55}," mujoco.mj_name2id(",[45,114260,30923],{"class":79},[45,114262,114263],{"class":55},".model, mujoco.mjtObj.mjOBJ_SITE, ",[45,114265,111636],{"class":62},[45,114267,139],{"class":55},[45,114269,114270,114272,114275,114277,114279,114281,114283,114285],{"class":47,"line":8171},[45,114271,30945],{"class":79},[45,114273,114274],{"class":55},".target_site_id ",[45,114276,59],{"class":51},[45,114278,114258],{"class":55},[45,114280,30923],{"class":79},[45,114282,114263],{"class":55},[45,114284,112059],{"class":62},[45,114286,139],{"class":55},[45,114288,114289,114291,114293,114295,114297,114299,114302,114304,114306,114308,114310],{"class":47,"line":8183},[45,114290,2647],{"class":51},[45,114292,38973],{"class":79},[45,114294,114253],{"class":55},[45,114296,1187],{"class":51},[45,114298,4243],{"class":79},[45,114300,114301],{"class":51}," or",[45,114303,38973],{"class":79},[45,114305,114274],{"class":55},[45,114307,1187],{"class":51},[45,114309,4243],{"class":79},[45,114311,3889],{"class":55},[45,114313,114314,114317,114319,114321,114324],{"class":47,"line":8195},[45,114315,114316],{"class":51},"            raise",[45,114318,103535],{"class":79},[45,114320,282],{"class":55},[45,114322,114323],{"class":62},"\"required sites not found\"",[45,114325,139],{"class":55},[45,114327,114328],{"class":47,"line":8207},[45,114329,2550],{"emptyLinePlaceholder":207},[45,114331,114332,114334,114336,114338],{"class":47,"line":9866},[45,114333,30945],{"class":79},[45,114335,113967],{"class":55},[45,114337,59],{"class":51},[45,114339,54527],{"class":79},[45,114341,114342,114344,114347,114349],{"class":47,"line":9890},[45,114343,30945],{"class":79},[45,114345,114346],{"class":55},".max_steps ",[45,114348,59],{"class":51},[45,114350,114351],{"class":79}," 200\n",[45,114353,114354,114356,114358,114360],{"class":47,"line":9913},[45,114355,30945],{"class":79},[45,114357,113806],{"class":55},[45,114359,59],{"class":51},[45,114361,47433],{"class":79},[45,114363,114364],{"class":47,"line":9937},[45,114365,2550],{"emptyLinePlaceholder":207},[45,114367,114368,114370,114372,114374,114376,114378,114380,114382,114384,114386,114388,114390,114392,114394,114396,114398,114400,114402,114404,114406],{"class":47,"line":9942},[45,114369,30945],{"class":79},[45,114371,113854],{"class":55},[45,114373,59],{"class":51},[45,114375,113859],{"class":55},[45,114377,113862],{"class":5366},[45,114379,113865],{"class":51},[45,114381,102503],{"class":79},[45,114383,12584],{"class":55},[45,114385,113872],{"class":5366},[45,114387,59],{"class":51},[45,114389,102503],{"class":79},[45,114391,12584],{"class":55},[45,114393,96063],{"class":5366},[45,114395,59],{"class":51},[45,114397,282],{"class":55},[45,114399,356],{"class":79},[45,114401,113889],{"class":55},[45,114403,93600],{"class":5366},[45,114405,59],{"class":51},[45,114407,113896],{"class":55},[45,114409,114410,114412,114414,114416,114418,114420,114422,114424,114426,114428,114430,114432,114434,114436,114438,114440,114442,114444],{"class":47,"line":9947},[45,114411,30945],{"class":79},[45,114413,113915],{"class":55},[45,114415,59],{"class":51},[45,114417,113859],{"class":55},[45,114419,113862],{"class":5366},[45,114421,113865],{"class":51},[45,114423,113926],{"class":55},[45,114425,113872],{"class":5366},[45,114427,59],{"class":51},[45,114429,113926],{"class":55},[45,114431,96063],{"class":5366},[45,114433,59],{"class":51},[45,114435,282],{"class":55},[45,114437,723],{"class":79},[45,114439,113889],{"class":55},[45,114441,93600],{"class":5366},[45,114443,59],{"class":51},[45,114445,113896],{"class":55},[45,114447,114448],{"class":47,"line":9952},[45,114449,2550],{"emptyLinePlaceholder":207},[45,114451,114452,114454,114457],{"class":47,"line":9961},[45,114453,30901],{"class":51},[45,114455,114456],{"class":69}," _get_obs",[45,114458,114459],{"class":55},"(self) -> np.ndarray:\n",[45,114461,114462,114464,114466,114468,114471,114473],{"class":47,"line":9966},[45,114463,112237],{"class":55},[45,114465,59],{"class":51},[45,114467,38973],{"class":79},[45,114469,114470],{"class":55},".data.site_xpos[",[45,114472,30923],{"class":79},[45,114474,114475],{"class":55},".tip_site_id].copy()\n",[45,114477,114478,114480,114482,114484,114486,114488],{"class":47,"line":9972},[45,114479,112250],{"class":55},[45,114481,59],{"class":51},[45,114483,38973],{"class":79},[45,114485,114470],{"class":55},[45,114487,30923],{"class":79},[45,114489,114490],{"class":55},".target_site_id].copy()\n",[45,114492,114493,114495,114497,114500,114502,114505,114507],{"class":47,"line":9993},[45,114494,110282],{"class":55},[45,114496,59],{"class":51},[45,114498,114499],{"class":55}," np.concatenate([",[45,114501,30923],{"class":79},[45,114503,114504],{"class":55},".data.qpos.copy(), ",[45,114506,30923],{"class":79},[45,114508,114509],{"class":55},".data.qvel.copy(), tip, target])\n",[45,114511,114512,114514],{"class":47,"line":9999},[45,114513,14901],{"class":51},[45,114515,114516],{"class":55}," obs.astype(np.float32)\n",[45,114518,114519],{"class":47,"line":10013},[45,114520,2550],{"emptyLinePlaceholder":207},[45,114522,114523,114525,114528,114530,114532],{"class":47,"line":10019},[45,114524,30901],{"class":51},[45,114526,114527],{"class":69}," _get_reward",[45,114529,114196],{"class":55},[45,114531,320],{"class":79},[45,114533,3889],{"class":55},[45,114535,114536,114538,114540,114542,114544,114546],{"class":47,"line":10046},[45,114537,112237],{"class":55},[45,114539,59],{"class":51},[45,114541,38973],{"class":79},[45,114543,114470],{"class":55},[45,114545,30923],{"class":79},[45,114547,114548],{"class":55},".tip_site_id]\n",[45,114550,114551,114553,114555,114557,114559,114561],{"class":47,"line":10055},[45,114552,112250],{"class":55},[45,114554,59],{"class":51},[45,114556,38973],{"class":79},[45,114558,114470],{"class":55},[45,114560,30923],{"class":79},[45,114562,114563],{"class":55},".target_site_id]\n",[45,114565,114566,114569,114571,114573,114575],{"class":47,"line":10061},[45,114567,114568],{"class":55},"        dist ",[45,114570,59],{"class":51},[45,114572,111701],{"class":55},[45,114574,809],{"class":51},[45,114576,111706],{"class":55},[45,114578,114579,114582,114584,114586,114588,114591,114593],{"class":47,"line":10069},[45,114580,114581],{"class":55},"        control_cost ",[45,114583,59],{"class":51},[45,114585,112137],{"class":79},[45,114587,6668],{"class":51},[45,114589,114590],{"class":55}," np.sum(np.square(",[45,114592,30923],{"class":79},[45,114594,114595],{"class":55},".data.ctrl))\n",[45,114597,114598,114600,114602,114604,114606,114608,114610],{"class":47,"line":10074},[45,114599,14901],{"class":51},[45,114601,109897],{"class":79},[45,114603,282],{"class":55},[45,114605,809],{"class":51},[45,114607,111696],{"class":55},[45,114609,809],{"class":51},[45,114611,112159],{"class":55},[45,114613,114614],{"class":47,"line":16753},[45,114615,2550],{"emptyLinePlaceholder":207},[45,114617,114618,114620,114623,114626,114628,114631,114633,114635,114637,114639,114641,114644,114647,114649,114651,114653,114655],{"class":47,"line":16759},[45,114619,30901],{"class":51},[45,114621,114622],{"class":69}," reset",[45,114624,114625],{"class":55},"(self, ",[45,114627,732],{"class":51},[45,114629,114630],{"class":55},", seed: ",[45,114632,285],{"class":79},[45,114634,127],{"class":51},[45,114636,39033],{"class":79},[45,114638,13713],{"class":51},[45,114640,39033],{"class":79},[45,114642,114643],{"class":55},", options: ",[45,114645,114646],{"class":79},"dict",[45,114648,127],{"class":51},[45,114650,39033],{"class":79},[45,114652,13713],{"class":51},[45,114654,39033],{"class":79},[45,114656,30886],{"class":55},[45,114658,114659,114661,114664,114667,114669],{"class":47,"line":16782},[45,114660,30917],{"class":79},[45,114662,114663],{"class":55},"().reset(",[45,114665,114666],{"class":5366},"seed",[45,114668,59],{"class":51},[45,114670,114671],{"class":55},"seed)\n",[45,114673,114674,114677,114679,114682,114684],{"class":47,"line":16788},[45,114675,114676],{"class":55},"        mujoco.mj_resetData(",[45,114678,30923],{"class":79},[45,114680,114681],{"class":55},".model, ",[45,114683,30923],{"class":79},[45,114685,114686],{"class":55},".data)\n",[45,114688,114689],{"class":47,"line":16811},[45,114690,2550],{"emptyLinePlaceholder":207},[45,114692,114693,114695,114698,114700,114702,114705,114707,114709,114711,114713,114715,114717,114719,114721,114723,114725,114727],{"class":47,"line":16825},[45,114694,30945],{"class":79},[45,114696,114697],{"class":55},".data.qpos[:] ",[45,114699,59],{"class":51},[45,114701,38973],{"class":79},[45,114703,114704],{"class":55},".np_random.uniform(",[45,114706,113862],{"class":5366},[45,114708,113865],{"class":51},[45,114710,86310],{"class":79},[45,114712,12584],{"class":55},[45,114714,113872],{"class":5366},[45,114716,59],{"class":51},[45,114718,86310],{"class":79},[45,114720,12584],{"class":55},[45,114722,31596],{"class":5366},[45,114724,59],{"class":51},[45,114726,30923],{"class":79},[45,114728,114729],{"class":55},".model.nq)\n",[45,114731,114732,114734,114737,114739],{"class":47,"line":16845},[45,114733,30945],{"class":79},[45,114735,114736],{"class":55},".data.qvel[:] ",[45,114738,59],{"class":51},[45,114740,104861],{"class":79},[45,114742,114743,114746,114748,114750,114752],{"class":47,"line":16851},[45,114744,114745],{"class":55},"        mujoco.mj_forward(",[45,114747,30923],{"class":79},[45,114749,114681],{"class":55},[45,114751,30923],{"class":79},[45,114753,114686],{"class":55},[45,114755,114756],{"class":47,"line":16862},[45,114757,2550],{"emptyLinePlaceholder":207},[45,114759,114760,114762,114764,114766],{"class":47,"line":16885},[45,114761,30945],{"class":79},[45,114763,113806],{"class":55},[45,114765,59],{"class":51},[45,114767,47433],{"class":79},[45,114769,114770,114772,114774],{"class":47,"line":16907},[45,114771,14901],{"class":51},[45,114773,38973],{"class":79},[45,114775,114776],{"class":55},"._get_obs(), {}\n",[45,114778,114779],{"class":47,"line":16912},[45,114780,2550],{"emptyLinePlaceholder":207},[45,114782,114783,114785,114788],{"class":47,"line":16918},[45,114784,30901],{"class":51},[45,114786,114787],{"class":69}," step",[45,114789,114790],{"class":55},"(self, action):\n",[45,114792,114793,114795,114797,114800,114802,114804],{"class":47,"line":16932},[45,114794,110322],{"class":55},[45,114796,59],{"class":51},[45,114798,114799],{"class":55}," np.asarray(action, ",[45,114801,93600],{"class":5366},[45,114803,59],{"class":51},[45,114805,113896],{"class":55},[45,114807,114808,114810,114812,114814,114816,114819,114821],{"class":47,"line":16945},[45,114809,110322],{"class":55},[45,114811,59],{"class":51},[45,114813,107547],{"class":55},[45,114815,30923],{"class":79},[45,114817,114818],{"class":55},".action_space.low, ",[45,114820,30923],{"class":79},[45,114822,114823],{"class":55},".action_space.high)\n",[45,114825,114826],{"class":47,"line":16950},[45,114827,2550],{"emptyLinePlaceholder":207},[45,114829,114830,114832,114835,114837],{"class":47,"line":16964},[45,114831,30945],{"class":79},[45,114833,114834],{"class":55},".data.ctrl[:] ",[45,114836,59],{"class":51},[45,114838,107570],{"class":55},[45,114840,114841,114843,114845,114847,114849,114851,114853],{"class":47,"line":16969},[45,114842,3553],{"class":51},[45,114844,101601],{"class":55},[45,114846,26143],{"class":51},[45,114848,32543],{"class":79},[45,114850,282],{"class":55},[45,114852,30923],{"class":79},[45,114854,114855],{"class":55},".frame_skip):\n",[45,114857,114858,114861,114863,114865,114867],{"class":47,"line":16975},[45,114859,114860],{"class":55},"            mujoco.mj_step(",[45,114862,30923],{"class":79},[45,114864,114681],{"class":55},[45,114866,30923],{"class":79},[45,114868,114686],{"class":55},[45,114870,114871],{"class":47,"line":16980},[45,114872,2550],{"emptyLinePlaceholder":207},[45,114874,114875,114877,114879,114881],{"class":47,"line":16994},[45,114876,30945],{"class":79},[45,114878,113806],{"class":55},[45,114880,9627],{"class":51},[45,114882,55799],{"class":79},[45,114884,114885],{"class":47,"line":16999},[45,114886,2550],{"emptyLinePlaceholder":207},[45,114888,114889,114891,114893,114895],{"class":47,"line":17004},[45,114890,110282],{"class":55},[45,114892,59],{"class":51},[45,114894,38973],{"class":79},[45,114896,114897],{"class":55},"._get_obs()\n",[45,114899,114900,114902,114904,114906],{"class":47,"line":17018},[45,114901,110387],{"class":55},[45,114903,59],{"class":51},[45,114905,38973],{"class":79},[45,114907,114908],{"class":55},"._get_reward()\n",[45,114910,114911],{"class":47,"line":17030},[45,114912,2550],{"emptyLinePlaceholder":207},[45,114914,114915,114917,114919,114921,114923,114925],{"class":47,"line":17035},[45,114916,112237],{"class":55},[45,114918,59],{"class":51},[45,114920,38973],{"class":79},[45,114922,114470],{"class":55},[45,114924,30923],{"class":79},[45,114926,114548],{"class":55},[45,114928,114929,114931,114933,114935,114937,114939],{"class":47,"line":17048},[45,114930,112250],{"class":55},[45,114932,59],{"class":51},[45,114934,38973],{"class":79},[45,114936,114470],{"class":55},[45,114938,30923],{"class":79},[45,114940,114563],{"class":55},[45,114942,114943,114945,114947,114949,114952,114954],{"class":47,"line":17053},[45,114944,114568],{"class":55},[45,114946,59],{"class":51},[45,114948,109897],{"class":79},[45,114950,114951],{"class":55},"(np.linalg.norm(tip ",[45,114953,809],{"class":51},[45,114955,114956],{"class":55}," target))\n",[45,114958,114959],{"class":47,"line":17058},[45,114960,2550],{"emptyLinePlaceholder":207},[45,114962,114963,114966,114968,114970,114972],{"class":47,"line":17063},[45,114964,114965],{"class":55},"        terminated ",[45,114967,59],{"class":51},[45,114969,113789],{"class":55},[45,114971,1187],{"class":51},[45,114973,113794],{"class":79},[45,114975,114976,114979,114981,114983,114985,114987,114989],{"class":47,"line":17076},[45,114977,114978],{"class":55},"        truncated ",[45,114980,59],{"class":51},[45,114982,38973],{"class":79},[45,114984,113806],{"class":55},[45,114986,1861],{"class":51},[45,114988,38973],{"class":79},[45,114990,113813],{"class":55},[45,114992,114993,114996,114998,115000,115003],{"class":47,"line":17081},[45,114994,114995],{"class":55},"        info ",[45,114997,59],{"class":51},[45,114999,4598],{"class":55},[45,115001,115002],{"class":62},"\"distance\"",[45,115004,115005],{"class":55},": dist}\n",[45,115007,115008,115010],{"class":47,"line":32733},[45,115009,14901],{"class":51},[45,115011,115012],{"class":55}," obs, reward, terminated, truncated, info\n",[45,115014,115015],{"class":47,"line":32739},[45,115016,2550],{"emptyLinePlaceholder":207},[45,115018,115019],{"class":47,"line":32745},[45,115020,2550],{"emptyLinePlaceholder":207},[45,115022,115023,115025,115027,115029,115031],{"class":47,"line":32751},[45,115024,32047],{"class":51},[45,115026,2123],{"class":69},[45,115028,101498],{"class":55},[45,115030,95786],{"class":79},[45,115032,3889],{"class":55},[45,115034,115035,115038,115040],{"class":47,"line":32757},[45,115036,115037],{"class":55},"    env ",[45,115039,59],{"class":51},[45,115041,115042],{"class":55}," ReacherEnv()\n",[45,115044,115045,115048,115050,115053,115055,115057,115059],{"class":47,"line":32768},[45,115046,115047],{"class":55},"    obs, info ",[45,115049,59],{"class":51},[45,115051,115052],{"class":55}," env.reset(",[45,115054,114666],{"class":5366},[45,115056,59],{"class":51},[45,115058,469],{"class":79},[45,115060,139],{"class":55},[45,115062,115063,115065,115067,115070],{"class":47,"line":32774},[45,115064,31399],{"class":79},[45,115066,282],{"class":55},[45,115068,115069],{"class":62},"\"initial obs shape:\"",[45,115071,115072],{"class":55},", obs.shape)\n",[45,115074,115075,115077,115079,115082],{"class":47,"line":32794},[45,115076,31399],{"class":79},[45,115078,282],{"class":55},[45,115080,115081],{"class":62},"\"initial info:\"",[45,115083,115084],{"class":55},", info)\n",[45,115086,115087],{"class":47,"line":32800},[45,115088,2550],{"emptyLinePlaceholder":207},[45,115090,115091,115093,115095],{"class":47,"line":32811},[45,115092,110253],{"class":55},[45,115094,59],{"class":51},[45,115096,104861],{"class":79},[45,115098,115099,115101,115103,115105,115107,115109,115111],{"class":47,"line":32817},[45,115100,3351],{"class":51},[45,115102,31716],{"class":55},[45,115104,26143],{"class":51},[45,115106,32543],{"class":79},[45,115108,282],{"class":55},[45,115110,977],{"class":79},[45,115112,30886],{"class":55},[45,115114,115115,115117,115119],{"class":47,"line":32823},[45,115116,110322],{"class":55},[45,115118,59],{"class":51},[45,115120,115121],{"class":55}," env.action_space.sample()\n",[45,115123,115124,115127,115129],{"class":47,"line":32829},[45,115125,115126],{"class":55},"        obs, reward, terminated, truncated, info ",[45,115128,59],{"class":51},[45,115130,113515],{"class":55},[45,115132,115133,115135,115137],{"class":47,"line":32835},[45,115134,110397],{"class":55},[45,115136,9627],{"class":51},[45,115138,110402],{"class":55},[45,115140,115141,115143,115145,115147,115149,115152,115154,115156,115159,115161,115163,115166,115168,115170,115173,115175,115177,115179],{"class":47,"line":32841},[45,115142,32551],{"class":79},[45,115144,282],{"class":55},[45,115146,110431],{"class":62},[45,115148,110434],{"class":55},[45,115150,115151],{"class":62},"\"reward:\"",[45,115153,12584],{"class":55},[45,115155,32118],{"class":79},[45,115157,115158],{"class":55},"(reward, ",[45,115160,350],{"class":79},[45,115162,110445],{"class":55},[45,115164,115165],{"class":62},"\"distance:\"",[45,115167,12584],{"class":55},[45,115169,32118],{"class":79},[45,115171,115172],{"class":55},"(info[",[45,115174,115002],{"class":62},[45,115176,112302],{"class":55},[45,115178,350],{"class":79},[45,115180,30597],{"class":55},[45,115182,115183,115185,115188,115191],{"class":47,"line":32847},[45,115184,2647],{"class":51},[45,115186,115187],{"class":55}," terminated ",[45,115189,115190],{"class":51},"or",[45,115192,115193],{"class":55}," truncated:\n",[45,115195,115196],{"class":47,"line":32853},[45,115197,115198],{"class":51},"            break\n",[45,115200,115201],{"class":47,"line":32873},[45,115202,2550],{"emptyLinePlaceholder":207},[45,115204,115205,115207,115209,115211,115213,115215,115217,115219],{"class":47,"line":32879},[45,115206,31399],{"class":79},[45,115208,282],{"class":55},[45,115210,110476],{"class":62},[45,115212,12584],{"class":55},[45,115214,32118],{"class":79},[45,115216,110483],{"class":55},[45,115218,350],{"class":79},[45,115220,30597],{"class":55},[45,115222,115223],{"class":47,"line":32895},[45,115224,2550],{"emptyLinePlaceholder":207},[45,115226,115227],{"class":47,"line":32901},[45,115228,2550],{"emptyLinePlaceholder":207},[45,115230,115231,115233,115235,115237,115239],{"class":47,"line":32915},[45,115232,1682],{"class":51},[45,115234,31320],{"class":79},[45,115236,101659],{"class":51},[45,115238,101662],{"class":62},[45,115240,3889],{"class":55},[45,115242,115243],{"class":47,"line":32921},[45,115244,101669],{"class":55},[20,115246,103670],{},[36,115248,115250],{"className":38,"code":115249,"language":40,"meta":25,"style":25},"touch ch8_gym_env.py\n",[42,115251,115252],{"__ignoreMap":25},[45,115253,115254,115256],{"class":47,"line":48},[45,115255,101383],{"class":69},[45,115257,115258],{"class":62}," ch8_gym_env.py\n",[20,115260,110544],{},[36,115262,115264],{"className":38,"code":115263,"language":40,"meta":25,"style":25},"python ch8_gym_env.py\n",[42,115265,115266],{"__ignoreMap":25},[45,115267,115268,115270],{"class":47,"line":48},[45,115269,30480],{"class":69},[45,115271,115258],{"class":62},[249,115273,101672],{"id":101672},[20,115275,115276],{},"继承 Gymnasium 环境：",[36,115278,115280],{"className":30478,"code":115279,"language":30480,"meta":25,"style":25},"class ReacherEnv(gym.Env):\n",[42,115281,115282],{"__ignoreMap":25},[45,115283,115284,115286,115288,115290,115292,115294,115296],{"class":47,"line":48},[45,115285,14843],{"class":51},[45,115287,114157],{"class":69},[45,115289,282],{"class":55},[45,115291,113640],{"class":69},[45,115293,835],{"class":55},[45,115295,114166],{"class":69},[45,115297,30886],{"class":55},[20,115299,115300],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[20,115302,115303],{},"初始化模型：",[36,115305,115307],{"className":30478,"code":115306,"language":30480,"meta":25,"style":25},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[42,115308,115309,115323],{"__ignoreMap":25},[45,115310,115311,115313,115315,115317,115319,115321],{"class":47,"line":48},[45,115312,30923],{"class":79},[45,115314,114217],{"class":55},[45,115316,59],{"class":51},[45,115318,101512],{"class":55},[45,115320,101414],{"class":79},[45,115322,139],{"class":55},[45,115324,115325,115327,115329,115331,115333,115335],{"class":47,"line":66},[45,115326,30923],{"class":79},[45,115328,114232],{"class":55},[45,115330,59],{"class":51},[45,115332,114237],{"class":55},[45,115334,30923],{"class":79},[45,115336,114242],{"class":55},[20,115338,115339,115340,115342],{},"这和前面章节一样，只是现在放到了类的 ",[42,115341,30929],{}," 里。",[20,115344,115345],{},"缓存 site ID：",[36,115347,115349],{"className":30478,"code":115348,"language":30480,"meta":25,"style":25},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[42,115350,115351,115365],{"__ignoreMap":25},[45,115352,115353,115355,115357,115359,115361,115363],{"class":47,"line":48},[45,115354,30923],{"class":79},[45,115356,114253],{"class":55},[45,115358,59],{"class":51},[45,115360,114258],{"class":55},[45,115362,89654],{"class":79},[45,115364,139],{"class":55},[45,115366,115367,115369,115371,115373,115375,115377],{"class":47,"line":66},[45,115368,30923],{"class":79},[45,115370,114274],{"class":55},[45,115372,59],{"class":51},[45,115374,114258],{"class":55},[45,115376,89654],{"class":79},[45,115378,139],{"class":55},[20,115380,115381],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[20,115383,115384],{},"reset：",[36,115386,115388],{"className":30478,"code":115387,"language":30480,"meta":25,"style":25},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[42,115389,115390],{"__ignoreMap":25},[45,115391,115392,115394,115396,115398,115400,115402,115404,115406,115408,115410,115412,115414,115416,115418,115420,115422,115424],{"class":47,"line":48},[45,115393,32047],{"class":51},[45,115395,114622],{"class":69},[45,115397,114625],{"class":55},[45,115399,732],{"class":51},[45,115401,114630],{"class":55},[45,115403,285],{"class":79},[45,115405,127],{"class":51},[45,115407,39033],{"class":79},[45,115409,13713],{"class":51},[45,115411,39033],{"class":79},[45,115413,114643],{"class":55},[45,115415,114646],{"class":79},[45,115417,127],{"class":51},[45,115419,39033],{"class":79},[45,115421,13713],{"class":51},[45,115423,39033],{"class":79},[45,115425,30886],{"class":55},[20,115427,115428,115430],{},[42,115429,70156],{}," 做四件事：",[233,115432,115433,115436,115439,115442],{},[169,115434,115435],{},"设置随机种子。",[169,115437,115438],{},"重置 MuJoCo data。",[169,115440,115441],{},"随机初始化关节角。",[169,115443,115444],{},"返回初始观测和 info。",[20,115446,115447],{},"step：",[36,115449,115451],{"className":30478,"code":115450,"language":30480,"meta":25,"style":25},"def step(self, action):\n",[42,115452,115453],{"__ignoreMap":25},[45,115454,115455,115457,115459],{"class":47,"line":48},[45,115456,32047],{"class":51},[45,115458,114787],{"class":69},[45,115460,114790],{"class":55},[20,115462,115463,115465],{},[42,115464,107234],{}," 做六件事：",[233,115467,115468,115471,115477,115480,115483,115486],{},[169,115469,115470],{},"检查并裁剪 action。",[169,115472,115473,115474,28485],{},"写入 ",[42,115475,115476],{},"self.data.ctrl",[169,115478,115479],{},"连续推进若干个 MuJoCo 物理步。",[169,115481,115482],{},"计算新观测。",[169,115484,115485],{},"计算奖励和结束条件。",[169,115487,115488],{},"返回 Gymnasium 标准五元组。",[249,115490,101808],{"id":101808},[36,115492,115494],{"className":30478,"code":115493,"language":30480,"meta":25,"style":25},"import gymnasium as gym\n",[42,115495,115496],{"__ignoreMap":25},[45,115497,115498,115500,115502,115504],{"class":47,"line":48},[45,115499,30492],{"class":51},[45,115501,113995],{"class":55},[45,115503,31483],{"class":51},[45,115505,114000],{"class":55},[20,115507,115508,115509,115511,115512,115515],{},"导入 Gymnasium，并起别名 ",[42,115510,113640],{},"。后面写 ",[42,115513,115514],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[36,115517,115519],{"className":30478,"code":115518,"language":30480,"meta":25,"style":25},"from gymnasium import spaces\n",[42,115520,115521],{"__ignoreMap":25},[45,115522,115523,115525,115527,115529],{"class":47,"line":48},[45,115524,30837],{"class":51},[45,115526,113995],{"class":55},[45,115528,30492],{"class":51},[45,115530,114027],{"class":55},[20,115532,115533,115534,115537],{},"导入空间定义工具。",[42,115535,115536],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[36,115539,115540],{"className":30478,"code":115279,"language":30480,"meta":25,"style":25},[42,115541,115542],{"__ignoreMap":25},[45,115543,115544,115546,115548,115550,115552,115554,115556],{"class":47,"line":48},[45,115545,14843],{"class":51},[45,115547,114157],{"class":69},[45,115549,282],{"class":55},[45,115551,113640],{"class":69},[45,115553,835],{"class":55},[45,115555,114166],{"class":69},[45,115557,30886],{"class":55},[20,115559,115560,115561,115564,115565,115567,115568,101118,115570,115572],{},"定义一个类，名字叫 ",[42,115562,115563],{},"ReacherEnv","。括号里的 ",[42,115566,115514],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[42,115569,70156],{},[42,115571,107234],{}," 这两个核心方法。",[36,115574,115576],{"className":30478,"code":115575,"language":30480,"meta":25,"style":25},"metadata = {\"render_modes\": []}\n",[42,115577,115578],{"__ignoreMap":25},[45,115579,115580,115583,115585,115587,115589],{"class":47,"line":48},[45,115581,115582],{"class":55},"metadata ",[45,115584,59],{"class":51},[45,115586,4598],{"class":55},[45,115588,114180],{"class":62},[45,115590,114183],{"class":55},[20,115592,115593],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[36,115595,115597],{"className":30478,"code":115596,"language":30480,"meta":25,"style":25},"def __init__(self) -> None:\n",[42,115598,115599],{"__ignoreMap":25},[45,115600,115601,115603,115605,115607,115609],{"class":47,"line":48},[45,115602,32047],{"class":51},[45,115604,30904],{"class":79},[45,115606,114196],{"class":55},[45,115608,95786],{"class":79},[45,115610,3889],{"class":55},[20,115612,115613,115615,115616,28485],{},[42,115614,30929],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[42,115617,115618],{},"env = ReacherEnv()",[36,115620,115622],{"className":30478,"code":115621,"language":30480,"meta":25,"style":25},"super().__init__()\n",[42,115623,115624],{"__ignoreMap":25},[45,115625,115626,115629,115631,115633],{"class":47,"line":48},[45,115627,115628],{"class":79},"super",[45,115630,17410],{"class":55},[45,115632,30929],{"class":79},[45,115634,2126],{"class":55},[20,115636,115637,115638,115640],{},"调用父类 ",[42,115639,115514],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[36,115642,115643],{"className":30478,"code":115306,"language":30480,"meta":25,"style":25},[42,115644,115645,115659],{"__ignoreMap":25},[45,115646,115647,115649,115651,115653,115655,115657],{"class":47,"line":48},[45,115648,30923],{"class":79},[45,115650,114217],{"class":55},[45,115652,59],{"class":51},[45,115654,101512],{"class":55},[45,115656,101414],{"class":79},[45,115658,139],{"class":55},[45,115660,115661,115663,115665,115667,115669,115671],{"class":47,"line":66},[45,115662,30923],{"class":79},[45,115664,114232],{"class":55},[45,115666,59],{"class":51},[45,115668,114237],{"class":55},[45,115670,30923],{"class":79},[45,115672,114242],{"class":55},[20,115674,115675,115676,115678,115679,101118,115682,115685],{},"把 MuJoCo 模型和状态保存到 ",[42,115677,30923],{}," 上。",[42,115680,115681],{},"self.model",[42,115683,115684],{},"self.data"," 表示这个环境对象自己的模型和状态。",[36,115687,115688],{"className":30478,"code":115348,"language":30480,"meta":25,"style":25},[42,115689,115690,115704],{"__ignoreMap":25},[45,115691,115692,115694,115696,115698,115700,115702],{"class":47,"line":48},[45,115693,30923],{"class":79},[45,115695,114253],{"class":55},[45,115697,59],{"class":51},[45,115699,114258],{"class":55},[45,115701,89654],{"class":79},[45,115703,139],{"class":55},[45,115705,115706,115708,115710,115712,115714,115716],{"class":47,"line":66},[45,115707,30923],{"class":79},[45,115709,114274],{"class":55},[45,115711,59],{"class":51},[45,115713,114258],{"class":55},[45,115715,89654],{"class":79},[45,115717,139],{"class":55},[20,115719,115720,115721,101118,115724,115727],{},"提前查好 tip 和 target 的 site ID。这样 ",[42,115722,115723],{},"_get_obs",[42,115725,115726],{},"_get_reward"," 里就不用每次按名字查找。",[36,115729,115731],{"className":30478,"code":115730,"language":30480,"meta":25,"style":25},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[42,115732,115733,115743,115753],{"__ignoreMap":25},[45,115734,115735,115737,115739,115741],{"class":47,"line":48},[45,115736,30923],{"class":79},[45,115738,113967],{"class":55},[45,115740,59],{"class":51},[45,115742,54527],{"class":79},[45,115744,115745,115747,115749,115751],{"class":47,"line":66},[45,115746,30923],{"class":79},[45,115748,114346],{"class":55},[45,115750,59],{"class":51},[45,115752,114351],{"class":79},[45,115754,115755,115757,115759,115761],{"class":47,"line":1331},[45,115756,30923],{"class":79},[45,115758,113806],{"class":55},[45,115760,59],{"class":51},[45,115762,47433],{"class":79},[20,115764,115765,115768,115769,115772,115773,115776],{},[42,115766,115767],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[42,115770,115771],{},"max_steps"," 是一个 episode 最多运行多少步。",[42,115774,115775],{},"steps"," 记录当前 episode 已经走了多少步。",[36,115778,115779],{"className":30478,"code":113845,"language":30480,"meta":25,"style":25},[42,115780,115781],{"__ignoreMap":25},[45,115782,115783,115785,115787,115789,115791,115793,115795,115797,115799,115801,115803,115805,115807,115809,115811,115813,115815,115817,115819,115821],{"class":47,"line":48},[45,115784,30923],{"class":79},[45,115786,113854],{"class":55},[45,115788,59],{"class":51},[45,115790,113859],{"class":55},[45,115792,113862],{"class":5366},[45,115794,113865],{"class":51},[45,115796,102503],{"class":79},[45,115798,12584],{"class":55},[45,115800,113872],{"class":5366},[45,115802,59],{"class":51},[45,115804,102503],{"class":79},[45,115806,12584],{"class":55},[45,115808,96063],{"class":5366},[45,115810,59],{"class":51},[45,115812,282],{"class":55},[45,115814,356],{"class":79},[45,115816,113889],{"class":55},[45,115818,93600],{"class":5366},[45,115820,59],{"class":51},[45,115822,113896],{"class":55},[20,115824,115825,115826,115829,115830,101118,115833,115836],{},"定义动作空间。",[42,115827,115828],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[42,115831,115832],{},"low=-1.0",[42,115834,115835],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[36,115838,115839],{"className":30478,"code":113906,"language":30480,"meta":25,"style":25},[42,115840,115841],{"__ignoreMap":25},[45,115842,115843,115845,115847,115849,115851,115853,115855,115857,115859,115861,115863,115865,115867,115869,115871,115873,115875,115877],{"class":47,"line":48},[45,115844,30923],{"class":79},[45,115846,113915],{"class":55},[45,115848,59],{"class":51},[45,115850,113859],{"class":55},[45,115852,113862],{"class":5366},[45,115854,113865],{"class":51},[45,115856,113926],{"class":55},[45,115858,113872],{"class":5366},[45,115860,59],{"class":51},[45,115862,113926],{"class":55},[45,115864,96063],{"class":5366},[45,115866,59],{"class":51},[45,115868,282],{"class":55},[45,115870,723],{"class":79},[45,115872,113889],{"class":55},[45,115874,93600],{"class":5366},[45,115876,59],{"class":51},[45,115878,113896],{"class":55},[20,115880,115881,115882,115885,115886,115889],{},"定义观测空间。",[42,115883,115884],{},"shape=(10,)"," 表示观测是 10 个数。",[42,115887,115888],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[36,115891,115893],{"className":30478,"code":115892,"language":30480,"meta":25,"style":25},"def _get_obs(self) -> np.ndarray:\n",[42,115894,115895],{"__ignoreMap":25},[45,115896,115897,115899,115901],{"class":47,"line":48},[45,115898,32047],{"class":51},[45,115900,114456],{"class":69},[45,115902,114459],{"class":55},[20,115904,115905,115906,115908],{},"定义内部函数，用来生成观测。函数名前面的 ",[42,115907,1269],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[36,115910,115912],{"className":30478,"code":115911,"language":30480,"meta":25,"style":25},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[42,115913,115914,115928],{"__ignoreMap":25},[45,115915,115916,115918,115920,115922,115924,115926],{"class":47,"line":48},[45,115917,111668],{"class":55},[45,115919,59],{"class":51},[45,115921,38973],{"class":79},[45,115923,114470],{"class":55},[45,115925,30923],{"class":79},[45,115927,114475],{"class":55},[45,115929,115930,115932,115934,115936,115938,115940],{"class":47,"line":66},[45,115931,111678],{"class":55},[45,115933,59],{"class":51},[45,115935,38973],{"class":79},[45,115937,114470],{"class":55},[45,115939,30923],{"class":79},[45,115941,114490],{"class":55},[20,115943,115944],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[36,115946,115948],{"className":30478,"code":115947,"language":30480,"meta":25,"style":25},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[42,115949,115950,115966],{"__ignoreMap":25},[45,115951,115952,115954,115956,115958,115960,115962,115964],{"class":47,"line":48},[45,115953,110954],{"class":55},[45,115955,59],{"class":51},[45,115957,114499],{"class":55},[45,115959,30923],{"class":79},[45,115961,114504],{"class":55},[45,115963,30923],{"class":79},[45,115965,114509],{"class":55},[45,115967,115968,115970],{"class":47,"line":66},[45,115969,17195],{"class":51},[45,115971,114516],{"class":55},[20,115973,115974,115975,115978,115979,115981],{},"拼接观测，并转换成 ",[42,115976,115977],{},"float32","。很多强化学习库默认使用 ",[42,115980,115977],{},"，所以这里主动转换。",[36,115983,115984],{"className":30478,"code":115387,"language":30480,"meta":25,"style":25},[42,115985,115986],{"__ignoreMap":25},[45,115987,115988,115990,115992,115994,115996,115998,116000,116002,116004,116006,116008,116010,116012,116014,116016,116018,116020],{"class":47,"line":48},[45,115989,32047],{"class":51},[45,115991,114622],{"class":69},[45,115993,114625],{"class":55},[45,115995,732],{"class":51},[45,115997,114630],{"class":55},[45,115999,285],{"class":79},[45,116001,127],{"class":51},[45,116003,39033],{"class":79},[45,116005,13713],{"class":51},[45,116007,39033],{"class":79},[45,116009,114643],{"class":55},[45,116011,114646],{"class":79},[45,116013,127],{"class":51},[45,116015,39033],{"class":79},[45,116017,13713],{"class":51},[45,116019,39033],{"class":79},[45,116021,30886],{"class":55},[20,116023,116024,116025,116027,116028,116031],{},"定义 reset。",[42,116026,114666],{}," 用来控制随机数，保证实验可以复现。",[42,116029,116030],{},"options"," 用来接收额外配置，本章暂时不用。",[36,116033,116035],{"className":30478,"code":116034,"language":30480,"meta":25,"style":25},"super().reset(seed=seed)\n",[42,116036,116037],{"__ignoreMap":25},[45,116038,116039,116041,116043,116045,116047],{"class":47,"line":48},[45,116040,115628],{"class":79},[45,116042,114663],{"class":55},[45,116044,114666],{"class":5366},[45,116046,59],{"class":51},[45,116048,114671],{"class":55},[20,116050,116051,116052,116055],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[42,116053,116054],{},"self.np_random"," 生成可复现的随机数。",[36,116057,116059],{"className":30478,"code":116058,"language":30480,"meta":25,"style":25},"mujoco.mj_resetData(self.model, self.data)\n",[42,116060,116061],{"__ignoreMap":25},[45,116062,116063,116066,116068,116070,116072],{"class":47,"line":48},[45,116064,116065],{"class":55},"mujoco.mj_resetData(",[45,116067,30923],{"class":79},[45,116069,114681],{"class":55},[45,116071,30923],{"class":79},[45,116073,114686],{"class":55},[20,116075,116076],{},"把 MuJoCo 状态重置到默认状态。",[36,116078,116080],{"className":30478,"code":116079,"language":30480,"meta":25,"style":25},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[42,116081,116082],{"__ignoreMap":25},[45,116083,116084,116086,116088,116090,116092,116094,116096,116098,116100,116102,116104,116106,116108,116110,116112,116114,116116],{"class":47,"line":48},[45,116085,30923],{"class":79},[45,116087,114697],{"class":55},[45,116089,59],{"class":51},[45,116091,38973],{"class":79},[45,116093,114704],{"class":55},[45,116095,113862],{"class":5366},[45,116097,113865],{"class":51},[45,116099,86310],{"class":79},[45,116101,12584],{"class":55},[45,116103,113872],{"class":5366},[45,116105,59],{"class":51},[45,116107,86310],{"class":79},[45,116109,12584],{"class":55},[45,116111,31596],{"class":5366},[45,116113,59],{"class":51},[45,116115,30923],{"class":79},[45,116117,114729],{"class":55},[20,116119,115441,116120,116123,116124,116127,116128,116130],{},[42,116121,116122],{},"[:]"," 表示修改整个数组。",[42,116125,116126],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[42,116129,102250],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[36,116132,116134],{"className":30478,"code":116133,"language":30480,"meta":25,"style":25},"self.data.qvel[:] = 0.0\n",[42,116135,116136],{"__ignoreMap":25},[45,116137,116138,116140,116142,116144],{"class":47,"line":48},[45,116139,30923],{"class":79},[45,116141,114736],{"class":55},[45,116143,59],{"class":51},[45,116145,104861],{"class":79},[20,116147,116148],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[36,116150,116152],{"className":30478,"code":116151,"language":30480,"meta":25,"style":25},"self.steps = 0\nreturn self._get_obs(), {}\n",[42,116153,116154,116164],{"__ignoreMap":25},[45,116155,116156,116158,116160,116162],{"class":47,"line":48},[45,116157,30923],{"class":79},[45,116159,113806],{"class":55},[45,116161,59],{"class":51},[45,116163,47433],{"class":79},[45,116165,116166,116168,116170],{"class":47,"line":66},[45,116167,17195],{"class":51},[45,116169,38973],{"class":79},[45,116171,114776],{"class":55},[20,116173,116174],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[36,116176,116177],{"className":30478,"code":115450,"language":30480,"meta":25,"style":25},[42,116178,116179],{"__ignoreMap":25},[45,116180,116181,116183,116185],{"class":47,"line":48},[45,116182,32047],{"class":51},[45,116184,114787],{"class":69},[45,116186,114790],{"class":55},[20,116188,116189],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[36,116191,116193],{"className":30478,"code":116192,"language":30480,"meta":25,"style":25},"action = np.asarray(action, dtype=np.float32)\n",[42,116194,116195],{"__ignoreMap":25},[45,116196,116197,116199,116201,116203,116205,116207],{"class":47,"line":48},[45,116198,107542],{"class":55},[45,116200,59],{"class":51},[45,116202,114799],{"class":55},[45,116204,93600],{"class":5366},[45,116206,59],{"class":51},[45,116208,113896],{"class":55},[20,116210,116211,116212,28485],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[42,116213,115977],{},[36,116215,116217],{"className":30478,"code":116216,"language":30480,"meta":25,"style":25},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[42,116218,116219],{"__ignoreMap":25},[45,116220,116221,116223,116225,116227,116229,116231,116233],{"class":47,"line":48},[45,116222,107542],{"class":55},[45,116224,59],{"class":51},[45,116226,107547],{"class":55},[45,116228,30923],{"class":79},[45,116230,114818],{"class":55},[45,116232,30923],{"class":79},[45,116234,114823],{"class":55},[20,116236,116237],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[36,116239,116241],{"className":30478,"code":116240,"language":30480,"meta":25,"style":25},"self.data.ctrl[:] = action\n",[42,116242,116243],{"__ignoreMap":25},[45,116244,116245,116247,116249,116251],{"class":47,"line":48},[45,116246,30923],{"class":79},[45,116248,114834],{"class":55},[45,116250,59],{"class":51},[45,116252,107570],{"class":55},[20,116254,116255],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[36,116257,116259],{"className":30478,"code":116258,"language":30480,"meta":25,"style":25},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[42,116260,116261,116277],{"__ignoreMap":25},[45,116262,116263,116265,116267,116269,116271,116273,116275],{"class":47,"line":48},[45,116264,3175],{"class":51},[45,116266,101601],{"class":55},[45,116268,26143],{"class":51},[45,116270,32543],{"class":79},[45,116272,282],{"class":55},[45,116274,30923],{"class":79},[45,116276,114855],{"class":55},[45,116278,116279,116282,116284,116286,116288],{"class":47,"line":66},[45,116280,116281],{"class":55},"    mujoco.mj_step(",[45,116283,30923],{"class":79},[45,116285,114681],{"class":55},[45,116287,30923],{"class":79},[45,116289,114686],{"class":55},[20,116291,116292,116293,116296,116297,116299,116300,28485],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[42,116294,116295],{},"frame_skip=5","，所以外部调用一次 ",[42,116298,113977],{},"，内部实际执行 5 次 ",[42,116301,101315],{},[36,116303,116305],{"className":30478,"code":116304,"language":30480,"meta":25,"style":25},"self.steps += 1\n",[42,116306,116307],{"__ignoreMap":25},[45,116308,116309,116311,116313,116315],{"class":47,"line":48},[45,116310,30923],{"class":79},[45,116312,113806],{"class":55},[45,116314,9627],{"class":51},[45,116316,55799],{"class":79},[20,116318,116319],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[36,116321,116323],{"className":30478,"code":116322,"language":30480,"meta":25,"style":25},"obs = self._get_obs()\nreward = self._get_reward()\n",[42,116324,116325,116335],{"__ignoreMap":25},[45,116326,116327,116329,116331,116333],{"class":47,"line":48},[45,116328,110954],{"class":55},[45,116330,59],{"class":51},[45,116332,38973],{"class":79},[45,116334,114897],{"class":55},[45,116336,116337,116339,116341,116343],{"class":47,"line":66},[45,116338,111105],{"class":55},[45,116340,59],{"class":51},[45,116342,38973],{"class":79},[45,116344,114908],{"class":55},[20,116346,116347],{},"计算新的观测和奖励。",[36,116349,116351],{"className":30478,"code":116350,"language":30480,"meta":25,"style":25},"dist = float(np.linalg.norm(tip - target))\n",[42,116352,116353],{"__ignoreMap":25},[45,116354,116355,116357,116359,116361,116363,116365],{"class":47,"line":48},[45,116356,111696],{"class":55},[45,116358,59],{"class":51},[45,116360,109897],{"class":79},[45,116362,114951],{"class":55},[45,116364,809],{"class":51},[45,116366,114956],{"class":55},[20,116368,116369],{},"计算末端到目标的距离，并转换成 Python float。",[36,116371,116372],{"className":30478,"code":113777,"language":30480,"meta":25,"style":25},[42,116373,116374,116386],{"__ignoreMap":25},[45,116375,116376,116378,116380,116382,116384],{"class":47,"line":48},[45,116377,113784],{"class":55},[45,116379,59],{"class":51},[45,116381,113789],{"class":55},[45,116383,1187],{"class":51},[45,116385,113794],{"class":79},[45,116387,116388,116390,116392,116394,116396,116398,116400],{"class":47,"line":66},[45,116389,113799],{"class":55},[45,116391,59],{"class":51},[45,116393,38973],{"class":79},[45,116395,113806],{"class":55},[45,116397,1861],{"class":51},[45,116399,38973],{"class":79},[45,116401,113813],{"class":55},[20,116403,116404],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[36,116406,116408],{"className":30478,"code":116407,"language":30480,"meta":25,"style":25},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[42,116409,116410,116423],{"__ignoreMap":25},[45,116411,116412,116415,116417,116419,116421],{"class":47,"line":48},[45,116413,116414],{"class":55},"info ",[45,116416,59],{"class":51},[45,116418,4598],{"class":55},[45,116420,115002],{"class":62},[45,116422,115005],{"class":55},[45,116424,116425,116427],{"class":47,"line":66},[45,116426,17195],{"class":51},[45,116428,115012],{"class":55},[20,116430,116431,116434],{},[42,116432,116433],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[36,116436,116438],{"className":30478,"code":116437,"language":30480,"meta":25,"style":25},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[42,116439,116440,116449],{"__ignoreMap":25},[45,116441,116442,116445,116447],{"class":47,"line":48},[45,116443,116444],{"class":55},"env ",[45,116446,59],{"class":51},[45,116448,115042],{"class":55},[45,116450,116451,116453,116455,116457,116459,116461,116463],{"class":47,"line":66},[45,116452,113500],{"class":55},[45,116454,59],{"class":51},[45,116456,115052],{"class":55},[45,116458,114666],{"class":5366},[45,116460,59],{"class":51},[45,116462,469],{"class":79},[45,116464,139],{"class":55},[20,116466,116467,116468,116471],{},"创建环境并重置。",[42,116469,116470],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[36,116473,116475],{"className":30478,"code":116474,"language":30480,"meta":25,"style":25},"action = env.action_space.sample()\n",[42,116476,116477],{"__ignoreMap":25},[45,116478,116479,116481,116483],{"class":47,"line":48},[45,116480,107542],{"class":55},[45,116482,59],{"class":51},[45,116484,115121],{"class":55},[20,116486,116487],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[15,116489,102416],{"id":102415},[20,116491,105584],{},[36,116493,116496],{"className":116494,"code":116495,"language":5337,"meta":25},[5335],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[42,116497,116495],{"__ignoreMap":25},[20,116499,116500],{},"这个环境已经具备强化学习环境的基本结构。",[20,116502,116503],{},"主函数里使用随机动作：",[36,116505,116506],{"className":30478,"code":116474,"language":30480,"meta":25,"style":25},[42,116507,116508],{"__ignoreMap":25},[45,116509,116510,116512,116514],{"class":47,"line":48},[45,116511,107542],{"class":55},[45,116513,59],{"class":51},[45,116515,115121],{"class":55},[20,116517,116518],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[15,116520,102448],{"id":102447},[233,116522,116523,116526,116532,116541,116550,116559,116565],{},[169,116524,116525],{},"运行程序。",[169,116527,116528,116529,28485],{},"确认 ",[42,116530,116531],{},"obs.shape == (10,)",[169,116533,111281,116534,116537,116538,28485],{},[42,116535,116536],{},"env.action_space","，应类似 ",[42,116539,116540],{},"Box(-1.0, 1.0, (2,), float32)",[169,116542,105685,116543,116546,116547,28485],{},[42,116544,116545],{},"self.max_steps = 10","，确认环境会更快 ",[42,116548,116549],{},"truncated=True",[169,116551,102511,116552,102514,116555,116558],{},[42,116553,116554],{},"terminated = dist \u003C 0.05",[42,116556,116557],{},"dist \u003C 0.2","，观察是否更容易结束。",[169,116560,102511,116561,116564],{},[42,116562,116563],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[169,116566,116567,116568,116570,116571,116574],{},"在 ",[42,116569,116433],{}," 里加入 ",[42,116572,116573],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[15,116576,102553],{"id":102552},[249,116578,116580],{"id":116579},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[20,116582,116583,116584,116586],{},"Gymnasium 的 ",[42,116585,107234],{}," 返回 5 个值:",[36,116588,116590],{"className":30478,"code":116589,"language":30480,"meta":25,"style":25},"obs, reward, terminated, truncated, info\n",[42,116591,116592],{"__ignoreMap":25},[45,116593,116594],{"class":47,"line":48},[45,116595,116589],{"class":55},[20,116597,116598],{},"不是旧 Gym 的 4 个值。",[249,116600,116602,116605],{"id":116601},"datactrl-action-维度错误",[42,116603,116604],{},"data.ctrl[:] = action"," 维度错误",[20,116607,102623],{},[36,116609,116611],{"className":30478,"code":116610,"language":30480,"meta":25,"style":25},"print(self.model.nu)\nprint(action.shape)\n",[42,116612,116613,116624],{"__ignoreMap":25},[45,116614,116615,116617,116619,116621],{"class":47,"line":48},[45,116616,30515],{"class":79},[45,116618,282],{"class":55},[45,116620,30923],{"class":79},[45,116622,116623],{"class":55},".model.nu)\n",[45,116625,116626,116628],{"class":47,"line":66},[45,116627,30515],{"class":79},[45,116629,116630],{"class":55},"(action.shape)\n",[20,116632,116633],{},"两者必须匹配。",[249,116635,116637],{"id":116636},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[20,116639,102562],{},[36,116641,116643],{"className":30478,"code":116642,"language":30480,"meta":25,"style":25},"mujoco.mj_forward(self.model, self.data)\n",[42,116644,116645],{"__ignoreMap":25},[45,116646,116647,116650,116652,116654,116656],{"class":47,"line":48},[45,116648,116649],{"class":55},"mujoco.mj_forward(",[45,116651,30923],{"class":79},[45,116653,114681],{"class":55},[45,116655,30923],{"class":79},[45,116657,114686],{"class":55},[249,116659,116661,116663],{"id":116660},"observation_space-维度和-obs-不一致",[42,116662,113700],{}," 维度和 obs 不一致",[20,116665,102675],{},[36,116667,116669],{"className":30478,"code":116668,"language":30480,"meta":25,"style":25},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[42,116670,116671,116681,116688],{"__ignoreMap":25},[45,116672,116673,116675,116677,116679],{"class":47,"line":48},[45,116674,110954],{"class":55},[45,116676,59],{"class":51},[45,116678,38973],{"class":79},[45,116680,114897],{"class":55},[45,116682,116683,116685],{"class":47,"line":66},[45,116684,30515],{"class":79},[45,116686,116687],{"class":55},"(obs.shape)\n",[45,116689,116690,116692,116694,116696],{"class":47,"line":1331},[45,116691,30515],{"class":79},[45,116693,282],{"class":55},[45,116695,30923],{"class":79},[45,116697,116698],{"class":55},".observation_space.shape)\n",[20,116700,116701],{},"两者必须一致。本章观测是：",[36,116703,116706],{"className":116704,"code":116705,"language":5337,"meta":25},[5335],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[42,116707,116705],{"__ignoreMap":25},[249,116709,116711],{"id":116710},"action-超过范围","action 超过范围",[20,116713,116714],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[36,116716,116717],{"className":30478,"code":116216,"language":30480,"meta":25,"style":25},[42,116718,116719],{"__ignoreMap":25},[45,116720,116721,116723,116725,116727,116729,116731,116733],{"class":47,"line":48},[45,116722,107542],{"class":55},[45,116724,59],{"class":51},[45,116726,107547],{"class":55},[45,116728,30923],{"class":79},[45,116730,114818],{"class":55},[45,116732,30923],{"class":79},[45,116734,114823],{"class":55},[20,116736,116737,116738,28485],{},"这能避免无效动作直接写入 ",[42,116739,101176],{},[249,116741,116743],{"id":116742},"忘记返回-info","忘记返回 info",[20,116745,116583,116746,101118,116748,116750],{},[42,116747,70156],{},[42,116749,107234],{}," 都会返回 info：",[36,116752,116753],{"className":30478,"code":113493,"language":30480,"meta":25,"style":25},[42,116754,116755,116763],{"__ignoreMap":25},[45,116756,116757,116759,116761],{"class":47,"line":48},[45,116758,113500],{"class":55},[45,116760,59],{"class":51},[45,116762,113505],{"class":55},[45,116764,116765,116767,116769],{"class":47,"line":66},[45,116766,113510],{"class":55},[45,116768,59],{"class":51},[45,116770,113515],{"class":55},[20,116772,116773,116774,28485],{},"即使暂时没有额外信息，也返回 ",[42,116775,32559],{},[15,116777,116779],{"id":116778},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[20,116781,116782],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[233,116784,116785,116788,116791,116794,116797,116800],{},[169,116786,116787],{},"更稳定的 reward。",[169,116789,116790],{},"合理的 episode 长度。",[169,116792,116793],{},"可重复的随机目标采样。",[169,116795,116796],{},"render 接口。",[169,116798,116799],{},"环境注册代码。",[169,116801,116802],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[20,116804,116805],{},"如果只是自己写训练循环，最小形式是：",[36,116807,116809],{"className":30478,"code":116808,"language":30480,"meta":25,"style":25},"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",[42,116810,116811,116819,116835,116839,116855,116864,116873,116883],{"__ignoreMap":25},[45,116812,116813,116815,116817],{"class":47,"line":48},[45,116814,116444],{"class":55},[45,116816,59],{"class":51},[45,116818,115042],{"class":55},[45,116820,116821,116823,116825,116827,116829,116831,116833],{"class":47,"line":66},[45,116822,113500],{"class":55},[45,116824,59],{"class":51},[45,116826,115052],{"class":55},[45,116828,114666],{"class":5366},[45,116830,59],{"class":51},[45,116832,469],{"class":79},[45,116834,139],{"class":55},[45,116836,116837],{"class":47,"line":1331},[45,116838,2550],{"emptyLinePlaceholder":207},[45,116840,116841,116843,116845,116847,116849,116851,116853],{"class":47,"line":1346},[45,116842,3175],{"class":51},[45,116844,101601],{"class":55},[45,116846,26143],{"class":51},[45,116848,32543],{"class":79},[45,116850,282],{"class":55},[45,116852,6560],{"class":79},[45,116854,30886],{"class":55},[45,116856,116857,116860,116862],{"class":47,"line":1352},[45,116858,116859],{"class":55},"    action ",[45,116861,59],{"class":51},[45,116863,115121],{"class":55},[45,116865,116866,116869,116871],{"class":47,"line":1366},[45,116867,116868],{"class":55},"    obs, reward, terminated, truncated, info ",[45,116870,59],{"class":51},[45,116872,113515],{"class":55},[45,116874,116875,116877,116879,116881],{"class":47,"line":1372},[45,116876,3251],{"class":51},[45,116878,115187],{"class":55},[45,116880,115190],{"class":51},[45,116882,115193],{"class":55},[45,116884,116885,116888,116890],{"class":47,"line":1463},[45,116886,116887],{"class":55},"        obs, info ",[45,116889,59],{"class":51},[45,116891,113505],{"class":55},[15,116893,116895],{"id":116894},"_9本章小结","9.本章小结",[20,116897,116898],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[36,116900,116903],{"className":116901,"code":116902,"language":5337,"meta":25},[5335],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[42,116904,116902],{"__ignoreMap":25},[20,116906,116907],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[196,116909,116910],{},"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":25,"searchDepth":66,"depth":66,"links":116912},[116913,116914,116915,116922,116926,116927,116928,116938,116939],{"id":100746,"depth":66,"text":100747},{"id":100869,"depth":66,"text":100870},{"id":101144,"depth":66,"text":101145,"children":116916},[116917,116919,116921],{"id":113724,"depth":1331,"text":116918},"terminated 和 truncated 的区别",{"id":113827,"depth":1331,"text":116920},"observation_space 和 action_space",{"id":113954,"depth":1331,"text":113955},{"id":101352,"depth":66,"text":101353,"children":116923},[116924,116925],{"id":101672,"depth":1331,"text":101672},{"id":101808,"depth":1331,"text":101808},{"id":102415,"depth":66,"text":102416},{"id":102447,"depth":66,"text":102448},{"id":102552,"depth":66,"text":102553,"children":116929},[116930,116931,116933,116934,116936,116937],{"id":116579,"depth":1331,"text":116580},{"id":116601,"depth":1331,"text":116932},"data.ctrl[:] = action 维度错误",{"id":116636,"depth":1331,"text":116637},{"id":116660,"depth":1331,"text":116935},"observation_space 维度和 obs 不一致",{"id":116710,"depth":1331,"text":116711},{"id":116742,"depth":1331,"text":116743},{"id":116778,"depth":66,"text":116779},{"id":116894,"depth":66,"text":116895},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113477,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116946,"title":116947,"body":116948,"description":117371,"extension":205,"meta":117372,"navigation":207,"path":117373,"seo":117374,"stem":117375,"__hash__":117376},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116949,"toc":117361},[116950,116954,116957,116960,116980,116986,116992,117002,117005,117008,117028,117031,117035,117038,117044,117047,117061,117064,117067,117141,117144,117150,117153,117176,117179,117229,117232,117238,117241,117244,117247,117266,117269,117275,117278,117281,117284,117304,117307,117310,117313,117358],[10,116951,116953],{"id":116952},"mujoco-学习","MuJoCo 学习",[20,116955,116956],{},"初版",[20,116958,116959],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[233,116961,116962,116965,116968,116977],{},[169,116963,116964],{},"MuJoCo 模型文件在描述什么。",[169,116966,116967],{},"Python 代码怎样读取和推进仿真。",[169,116969,116970,490,116972,490,116974,116976],{},[42,116971,104130],{},[42,116973,104460],{},[42,116975,104463],{}," 这些数组为什么重要。",[169,116978,116979],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[20,116981,116982,116983,116985],{},"默认环境为 Fedora 44、Python >= 3.10、",[42,116984,101127],{}," 官方 Python bindings。",[20,116987,116988,116989,116991],{},"注意：本文禁止使用 ",[42,116990,101112],{},"。所有示例均使用：",[36,116993,116994],{"className":30478,"code":101678,"language":30480,"meta":25,"style":25},[42,116995,116996],{"__ignoreMap":25},[45,116997,116998,117000],{"class":47,"line":48},[45,116999,30492],{"class":51},[45,117001,101401],{"class":55},[15,117003,117004],{"id":117004},"适合谁阅读",[20,117006,117007],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[233,117009,117010,117013,117016,117019],{},[169,117011,117012],{},"没学过 MuJoCo，只会一点 Python。",[169,117014,117015],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[169,117017,117018],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[169,117020,117021,117022,117024,117025,117027],{},"以前接触过 ",[42,117023,101112],{},"，现在想迁移到官方 ",[42,117026,101121],{}," Python bindings。",[20,117029,117030],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[15,117032,117034],{"id":117033},"mujoco-到底是什么","MuJoCo 到底是什么",[20,117036,117037],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[36,117039,117042],{"className":117040,"code":117041,"language":5337,"meta":25},[5335],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[42,117043,117041],{"__ignoreMap":25},[20,117045,117046],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[233,117048,117049,117052,117055,117058],{},[169,117050,117051],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[169,117053,117054],{},"快速测试控制算法，不必一开始就上真实机器人。",[169,117056,117057],{},"生成强化学习环境。",[169,117059,117060],{},"采集状态、动作、图像、奖励等训练数据。",[15,117062,117063],{"id":117063},"学习前的心智模型",[20,117065,117066],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[415,117068,117069,117081],{},[418,117070,117071],{},[421,117072,117073,117076,117079],{},[424,117074,117075],{"align":23885},"部分",[424,117077,117078],{"align":23885},"负责什么",[424,117080,21336],{"align":23885},[462,117082,117083,117094,117106,117118,117130],{},[421,117084,117085,117088,117091],{},[467,117086,117087],{"align":23885},"MJCF XML",[467,117089,117090],{"align":23885},"定义世界和机器人结构",[467,117092,117093],{"align":23885},"地面、盒子、关节、电机、摄像头",[421,117095,117096,117100,117103],{},[467,117097,117098],{"align":23885},[42,117099,100809],{},[467,117101,117102],{"align":23885},"编译后的静态模型",[467,117104,117105],{"align":23885},"有几个关节、有几个电机、时间步长是多少",[421,117107,117108,117112,117115],{},[467,117109,117110],{"align":23885},[42,117111,100819],{},[467,117113,117114],{"align":23885},"运行中的动态状态",[467,117116,117117],{"align":23885},"当前时间、位置、速度、电机输入",[421,117119,117120,117124,117127],{},[467,117121,117122],{"align":23885},[42,117123,101315],{},[467,117125,117126],{"align":23885},"推进一步物理仿真",[467,117128,117129],{"align":23885},"根据重力、力、碰撞更新状态",[421,117131,117132,117135,117138],{},[467,117133,117134],{"align":23885},"Viewer \u002F Renderer",[467,117136,117137],{"align":23885},"把仿真显示出来",[467,117139,117140],{"align":23885},"打开窗口或保存图片",[20,117142,117143],{},"一句话总结：",[36,117145,117148],{"className":117146,"code":117147,"language":5337,"meta":25},[5335],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[42,117149,117147],{"__ignoreMap":25},[20,117151,117152],{},"参考来源：",[166,117154,117155,117162,117169],{},[169,117156,117157,117158],{},"MuJoCo Python 官方文档：",[516,117159,117160],{"href":117160,"rel":117161},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24012],[169,117163,117164,117165],{},"MuJoCo XML Reference：",[516,117166,117167],{"href":117167,"rel":117168},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24012],[169,117170,117171,117172],{},"MuJoCo Overview：",[516,117173,117174],{"href":117174,"rel":117175},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24012],[15,117177,117178],{"id":117178},"章节目录",[233,117180,117181,117187,117193,117199,117205,117211,117217,117223],{},[169,117182,117183],{},[516,117184,117186],{"href":117185},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[169,117188,117189],{},[516,117190,117192],{"href":117191},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[169,117194,117195],{},[516,117196,117198],{"href":117197},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[169,117200,117201],{},[516,117202,117204],{"href":117203},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[169,117206,117207],{},[516,117208,117210],{"href":117209},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[169,117212,117213],{},[516,117214,117216],{"href":117215},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[169,117218,117219],{},[516,117220,117222],{"href":117221},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[169,117224,117225],{},[516,117226,117228],{"href":117227},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[15,117230,117231],{"id":117231},"推荐学习路线",[36,117233,117236],{"className":117234,"code":117235,"language":5337,"meta":25},[5335],"环境安装\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",[42,117237,117235],{"__ignoreMap":25},[20,117239,117240],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[15,117242,117243],{"id":117243},"建议的目录结构",[20,117245,117246],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[36,117248,117250],{"className":38,"code":117249,"language":40,"meta":25,"style":25},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[42,117251,117252,117260],{"__ignoreMap":25},[45,117253,117254,117256,117258],{"class":47,"line":48},[45,117255,101366],{"class":69},[45,117257,29316],{"class":79},[45,117259,101371],{"class":62},[45,117261,117262,117264],{"class":47,"line":66},[45,117263,101376],{"class":79},[45,117265,101371],{"class":62},[20,117267,117268],{},"每一章的代码都单独保存：",[36,117270,117273],{"className":117271,"code":117272,"language":5337,"meta":25},[5335],"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",[42,117274,117272],{"__ignoreMap":25},[20,117276,117277],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[15,117279,117280],{"id":117280},"学习方法",[20,117282,117283],{},"每章建议按这个顺序操作：",[233,117285,117286,117289,117292,117295,117298,117301],{},[169,117287,117288],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[169,117290,117291],{},"复制最小可运行代码，保存成指定文件。",[169,117293,117294],{},"运行代码，确认没有报错。",[169,117296,117297],{},"对照“运行结果说明”理解输出。",[169,117299,117300],{},"做“验证步骤”，主动改一两个参数。",[169,117302,117303],{},"遇到报错先看“常见错误与解决方案”。",[20,117305,117306],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[15,117308,117309],{"id":117309},"全局排错顺序",[20,117311,117312],{},"遇到问题时，按下面顺序查：",[233,117314,117315,117321,117327,117332,117335,117338,117345,117355],{},[169,117316,117317,117318],{},"Python 环境是否激活：",[42,117319,117320],{},"which python",[169,117322,117323,117324],{},"MuJoCo 是否能导入：",[42,117325,117326],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[169,117328,117329,117330],{},"是否误装了 ",[42,117331,101112],{},[169,117333,117334],{},"XML 标签是否闭合、属性是否拼写正确",[169,117336,117337],{},"actuator 引用的 joint 名字是否存在",[169,117339,117340,117342,117343],{},[42,117341,101176],{}," 的长度是否等于 ",[42,117344,102258],{},[169,117346,105685,117347,82639,117349,117351,117352],{},[42,117348,104130],{},[42,117350,104460],{}," 后是否调用了 ",[42,117353,117354],{},"mujoco.mj_forward",[169,117356,117357],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[196,117359,117360],{},"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":25,"searchDepth":66,"depth":66,"links":117362},[117363,117364,117365,117366,117367,117368,117369,117370],{"id":117004,"depth":66,"text":117004},{"id":117033,"depth":66,"text":117034},{"id":117063,"depth":66,"text":117063},{"id":117178,"depth":66,"text":117178},{"id":117231,"depth":66,"text":117231},{"id":117243,"depth":66,"text":117243},{"id":117280,"depth":66,"text":117280},{"id":117309,"depth":66,"text":117309},"仿真搭建。",{"category":23527},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116947,"description":117371},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117378,"title":117379,"body":117380,"description":204,"extension":205,"meta":117835,"navigation":207,"path":117836,"seo":117837,"stem":117838,"__hash__":117839},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117381,"toc":117833},[117382,117385,117388,117394,117830],[10,117383,117379],{"id":117384},"_1-最常用的基本操作更新",[20,117386,117387],{},"装linux系统教程：",[20,117389,117390],{},[516,117391,117392],{"href":117392,"rel":117393},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24012],[36,117395,117399],{"className":117396,"code":117397,"language":117398,"meta":25,"style":25},"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",[42,117400,117401,117406,117411,117420,117425,117434,117439,117459,117464,117475,117480,117489,117494,117522,117527,117546,117551,117570,117574,117579,117595,117599,117604,117634,117638,117643,117659,117663,117668,117683,117687,117692,117708,117712,117717,117729,117741,117745,117750,117767,117771,117776,117794,117798,117803,117812,117816,117821],{"__ignoreMap":25},[45,117402,117403],{"class":47,"line":48},[45,117404,117405],{"class":337},"#更新相关的知识\n",[45,117407,117408],{"class":47,"line":66},[45,117409,117410],{"class":337},"# 更新软件包列表（从服务器获取最新软件信息）\n",[45,117412,117413,117415,117418],{"class":47,"line":1331},[45,117414,24724],{"class":69},[45,117416,117417],{"class":62}," apt",[45,117419,26342],{"class":62},[45,117421,117422],{"class":47,"line":1346},[45,117423,117424],{"class":337},"# 升级所有可更新的软件包（不删除旧包）\n",[45,117426,117427,117429,117431],{"class":47,"line":1352},[45,117428,24724],{"class":69},[45,117430,117417],{"class":62},[45,117432,117433],{"class":62}," upgrade\n",[45,117435,117436],{"class":47,"line":1366},[45,117437,117438],{"class":337},"#更新和升级软件包\n",[45,117440,117441,117443,117445,117448,117450,117452,117454,117457],{"class":47,"line":1372},[45,117442,24724],{"class":69},[45,117444,117417],{"class":62},[45,117446,117447],{"class":62}," update",[45,117449,26290],{"class":55},[45,117451,24724],{"class":69},[45,117453,117417],{"class":62},[45,117455,117456],{"class":62}," upgrade",[45,117458,101081],{"class":79},[45,117460,117461],{"class":47,"line":1463},[45,117462,117463],{"class":337},"#列出可更新的软件包及版本信息\n",[45,117465,117466,117469,117472],{"class":47,"line":1469},[45,117467,117468],{"class":69},"apt",[45,117470,117471],{"class":62}," list",[45,117473,117474],{"class":79}," --upgradable\n",[45,117476,117477],{"class":47,"line":1481},[45,117478,117479],{"class":337},"#彻底升级（处理依赖关系，可能删除旧包）\n",[45,117481,117482,117484,117486],{"class":47,"line":1763},[45,117483,24724],{"class":69},[45,117485,117417],{"class":62},[45,117487,117488],{"class":62}," full-upgrade\n",[45,117490,117491],{"class":47,"line":1768},[45,117492,117493],{"class":337},"#设置指定版本\n",[45,117495,117496,117498,117500,117502,117504,117507,117509,117511,117513,117515,117518,117520],{"class":47,"line":1774},[45,117497,24724],{"class":69},[45,117499,117417],{"class":62},[45,117501,23981],{"class":62},[45,117503,29002],{"class":51},[45,117505,117506],{"class":62},"package_nam",[45,117508,353],{"class":55},[45,117510,1237],{"class":51},[45,117512,59],{"class":62},[45,117514,1187],{"class":51},[45,117516,117517],{"class":62},"version_numbe",[45,117519,947],{"class":55},[45,117521,51407],{"class":51},[45,117523,117524],{"class":47,"line":1779},[45,117525,117526],{"class":337},"#只安装软件包不升级\n",[45,117528,117529,117531,117533,117535,117537,117539,117541,117543],{"class":47,"line":1793},[45,117530,24724],{"class":69},[45,117532,117417],{"class":62},[45,117534,23981],{"class":62},[45,117536,29002],{"class":51},[45,117538,117506],{"class":62},[45,117540,353],{"class":55},[45,117542,1237],{"class":51},[45,117544,117545],{"class":79}," --no-upgrade\n",[45,117547,117548],{"class":47,"line":1798},[45,117549,117550],{"class":337},"#只升级，不存在就不安装\n",[45,117552,117553,117555,117557,117559,117561,117563,117565,117567],{"class":47,"line":1804},[45,117554,24724],{"class":69},[45,117556,117417],{"class":62},[45,117558,23981],{"class":62},[45,117560,29002],{"class":51},[45,117562,117506],{"class":62},[45,117564,353],{"class":55},[45,117566,1237],{"class":51},[45,117568,117569],{"class":79}," --only-upgrade\n",[45,117571,117572],{"class":47,"line":1825},[45,117573,2550],{"emptyLinePlaceholder":207},[45,117575,117576],{"class":47,"line":1830},[45,117577,117578],{"class":337},"#安装指定的软件命令\n",[45,117580,117581,117583,117585,117587,117589,117591,117593],{"class":47,"line":1844},[45,117582,24724],{"class":69},[45,117584,117417],{"class":62},[45,117586,23981],{"class":62},[45,117588,29002],{"class":51},[45,117590,117506],{"class":62},[45,117592,353],{"class":55},[45,117594,51407],{"class":51},[45,117596,117597],{"class":47,"line":1849},[45,117598,2550],{"emptyLinePlaceholder":207},[45,117600,117601],{"class":47,"line":1878},[45,117602,117603],{"class":337},"#安装多个软件包\n",[45,117605,117606,117608,117610,117612,117614,117617,117620,117622,117624,117627,117629,117631],{"class":47,"line":1883},[45,117607,24724],{"class":69},[45,117609,117417],{"class":62},[45,117611,23981],{"class":62},[45,117613,29002],{"class":51},[45,117615,117616],{"class":62},"package_",[45,117618,117619],{"class":51},"1>",[45,117621,29002],{"class":51},[45,117623,117616],{"class":62},[45,117625,117626],{"class":51},"2>",[45,117628,29002],{"class":51},[45,117630,117616],{"class":62},[45,117632,117633],{"class":51},"3>\n",[45,117635,117636],{"class":47,"line":1900},[45,117637,2550],{"emptyLinePlaceholder":207},[45,117639,117640],{"class":47,"line":1905},[45,117641,117642],{"class":337},"#更新指定的软件命令\n",[45,117644,117645,117647,117649,117651,117653,117655,117657],{"class":47,"line":1910},[45,117646,24724],{"class":69},[45,117648,117417],{"class":62},[45,117650,117447],{"class":62},[45,117652,29002],{"class":51},[45,117654,117506],{"class":62},[45,117656,353],{"class":55},[45,117658,51407],{"class":51},[45,117660,117661],{"class":47,"line":1915},[45,117662,2550],{"emptyLinePlaceholder":207},[45,117664,117665],{"class":47,"line":1929},[45,117666,117667],{"class":337},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[45,117669,117670,117672,117675,117677,117679,117681],{"class":47,"line":1934},[45,117671,117468],{"class":69},[45,117673,117674],{"class":62}," show",[45,117676,29002],{"class":51},[45,117678,117506],{"class":62},[45,117680,353],{"class":55},[45,117682,51407],{"class":51},[45,117684,117685],{"class":47,"line":2727},[45,117686,2550],{"emptyLinePlaceholder":207},[45,117688,117689],{"class":47,"line":2741},[45,117690,117691],{"class":337},"#删除软件包命令\n",[45,117693,117694,117696,117698,117700,117702,117704,117706],{"class":47,"line":2749},[45,117695,24724],{"class":69},[45,117697,117417],{"class":62},[45,117699,26179],{"class":62},[45,117701,29002],{"class":51},[45,117703,117506],{"class":62},[45,117705,353],{"class":55},[45,117707,51407],{"class":51},[45,117709,117710],{"class":47,"line":2754},[45,117711,2550],{"emptyLinePlaceholder":207},[45,117713,117714],{"class":47,"line":2760},[45,117715,117716],{"class":337},"# 清理旧版本和缓存（释放磁盘空间）\n",[45,117718,117719,117721,117723,117726],{"class":47,"line":2766},[45,117720,24724],{"class":69},[45,117722,117417],{"class":62},[45,117724,117725],{"class":62}," autoremove",[45,117727,117728],{"class":337},"  # 删除不再需要的依赖和库文件\n",[45,117730,117731,117733,117735,117738],{"class":47,"line":2771},[45,117732,24724],{"class":69},[45,117734,117417],{"class":62},[45,117736,117737],{"class":62}," clean",[45,117739,117740],{"class":337},"       # 清理下载的缓存包\n",[45,117742,117743],{"class":47,"line":8098},[45,117744,2550],{"emptyLinePlaceholder":207},[45,117746,117747],{"class":47,"line":8122},[45,117748,117749],{"class":337},"#移除软件包及配置文件\n",[45,117751,117752,117754,117756,117759,117761,117763,117765],{"class":47,"line":8127},[45,117753,24724],{"class":69},[45,117755,117417],{"class":62},[45,117757,117758],{"class":62}," purge",[45,117760,29002],{"class":51},[45,117762,117506],{"class":62},[45,117764,353],{"class":55},[45,117766,51407],{"class":51},[45,117768,117769],{"class":47,"line":8133},[45,117770,2550],{"emptyLinePlaceholder":207},[45,117772,117773],{"class":47,"line":8160},[45,117774,117775],{"class":337},"#查找软件包命令\n",[45,117777,117778,117780,117782,117785,117787,117790,117792],{"class":47,"line":8165},[45,117779,24724],{"class":69},[45,117781,117417],{"class":62},[45,117783,117784],{"class":62}," search",[45,117786,29002],{"class":51},[45,117788,117789],{"class":62},"keywor",[45,117791,591],{"class":55},[45,117793,51407],{"class":51},[45,117795,117796],{"class":47,"line":8171},[45,117797,2550],{"emptyLinePlaceholder":207},[45,117799,117800],{"class":47,"line":8183},[45,117801,117802],{"class":337},"#列出所有已安装的包\n",[45,117804,117805,117807,117809],{"class":47,"line":8195},[45,117806,117468],{"class":69},[45,117808,117471],{"class":62},[45,117810,117811],{"class":79}," --installed\n",[45,117813,117814],{"class":47,"line":8207},[45,117815,2550],{"emptyLinePlaceholder":207},[45,117817,117818],{"class":47,"line":9866},[45,117819,117820],{"class":337},"#列出所有已安装的包的版本信息\n",[45,117822,117823,117825,117827],{"class":47,"line":9890},[45,117824,117468],{"class":69},[45,117826,117471],{"class":62},[45,117828,117829],{"class":79}," --all-versions\n",[196,117831,117832],{},"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":25,"searchDepth":66,"depth":66,"links":117834},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117379,"description":204},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117841,"title":117842,"body":117843,"description":204,"extension":205,"meta":118584,"navigation":207,"path":118585,"seo":118586,"stem":118587,"__hash__":118588},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117844,"toc":118571},[117845,117848,117852,117855,117861,117865,117869,117875,117880,117885,117890,117895,117900,117903,117906,117909,117912,117916,117919,117924,117927,117932,117935,117940,117947,117950,117953,117956,117959,117962,117973,117977,117981,117986,117991,117995,118000,118004,118009,118013,118017,118022,118025,118070,118075,118079,118083,118088,118094,118099,118109,118114,118124,118129,118134,118161,118165,118168,118173,118176,118201,118205,118210,118213,118218,118223,118243,118248,118251,118266,118270,118323,118326,118331,118335,118338,118353,118356,118359,118364,118368,118372,118375,118379,118383,118386,118391,118396,118400,118407,118415,118418,118425,118430,118435,118438,118443,118450,118455,118462,118466,118468,118473,118477,118480,118483,118488,118491,118496,118499,118504,118509,118514,118518,118523,118527,118568],[10,117846,117842],{"id":117847},"_2-linux装机教程",[15,117849,117851],{"id":117850},"_21-实体机","2.1 实体机",[20,117853,117854],{},"使用清华源：（Ubuntu24.04）",[20,117856,117857],{},[516,117858,117859],{"href":117859,"rel":117860},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24012],[15,117862,117864],{"id":117863},"_22-普通虚拟机","2.2 普通虚拟机",[249,117866,117868],{"id":117867},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[20,117870,117871],{},[516,117872,117873],{"href":117873,"rel":117874},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24012],[20,117876,117877],{},[23,117878],{"alt":25,"src":117879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[20,117881,117882],{},[23,117883],{"alt":25,"src":117884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[20,117886,117887],{},[23,117888],{"alt":25,"src":117889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[20,117891,117892],{},[23,117893],{"alt":25,"src":117894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[20,117896,117897],{},[23,117898],{"alt":25,"src":117899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[20,117901,117902],{},"内存4G（4096MB）；",[20,117904,117905],{},"CPU给4个核；",[20,117907,117908],{},"硬盘动态分配60G；",[20,117910,117911],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[249,117913,117915],{"id":117914},"_222-安装ubuntu","2.2.2 安装Ubuntu",[20,117917,117918],{},"按照1.1的步骤下载Ubuntu",[20,117920,117921],{},[23,117922],{"alt":25,"src":117923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[20,117925,117926],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[20,117928,117929],{},[23,117930],{"alt":25,"src":117931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[20,117933,117934],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[20,117936,117937],{},[23,117938],{"alt":25,"src":117939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[20,117941,117942,117943,117946],{},"选择“正常安装”(找不到都用Alt+F7)， ",[427,117944,117945],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[20,117948,117949],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[20,117951,117952],{},"将改动写入磁盘吗 继续",[20,117954,117955],{},"选择东八区（shanghai，大致在地图上点一下），继续",[20,117957,117958],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[20,117960,117961],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[20,117963,117964,117965,117968,117969,117972],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[427,117966,117967],{},"除了"," 选不发送系统信息与不升级之外， ",[427,117970,117971],{},"其它"," 都跳过或前进）",[249,117974,117976],{"id":117975},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22147,117978,117980],{"id":117979},"_2231-全屏","2.2.3.1 全屏",[20,117982,117983],{},[23,117984],{"alt":25,"src":117985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[20,117987,117988],{},[23,117989],{"alt":25,"src":117990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22147,117992,117994],{"id":117993},"_2232-文件交换","2.2.3.2 文件交换",[20,117996,117997],{},[23,117998],{"alt":25,"src":117999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22147,118001,118003],{"id":118002},"_2233-新建文本文档","2.2.3.3 新建文本文档",[20,118005,118006],{},[23,118007],{"alt":25,"src":118008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[15,118010,118012],{"id":118011},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[249,118014,118016],{"id":118015},"_231-简介与优缺点","2.3.1 简介与优缺点",[233,118018,118019],{},[169,118020,118021],{},"什么情况下推荐？",[20,118023,118024],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[233,118026,118027],{"start":66},[169,118028,118029,118030],{},"优缺点：",[233,118031,118032,118062],{},[169,118033,118034,118035],{},"优点：",[233,118036,118037,118040,118047,118050,118053,118056,118059],{},[169,118038,118039],{},"WSL2是最好的Linux发行版;(bushi)",[169,118041,118042,118043,118046],{},"性能损耗极低。且比在Windows上跑深度性能 ",[427,118044,118045],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[169,118048,118049],{},"非常方便调用USB设备，可以USB直通;",[169,118051,118052],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[169,118054,118055],{},"非常方便Win与WSL2互相传文件等协同操作;",[169,118057,118058],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[169,118060,118061],{},"非常方便使用Windows的VScode远程开发;",[169,118063,118064,118065],{},"缺点：",[233,118066,118067],{},[169,118068,118069],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[20,118071,118072],{},[23,118073],{"alt":25,"src":118074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[249,118076,118078],{"id":118077},"_232-安装教程","2.3.2 安装教程",[22147,118080,118082],{"id":118081},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[233,118084,118085],{},[169,118086,118087],{},"方法一(图形界面)",[20,118089,118090,118091,24766],{},"用Win+R输入",[42,118092,118093],{},"appwiz.cpl",[20,118095,118096],{},[23,118097],{"alt":25,"src":118098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[20,118100,118101,118102,118105,118106,26573],{},"点击OK进入 ",[427,118103,118104],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[427,118107,118108],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[20,118110,118111],{},[23,118112],{"alt":25,"src":118113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[20,118115,118116,118117,101118,118120,118123],{},"选择 ",[427,118118,118119],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[427,118121,118122],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[20,118125,118126],{},[23,118127],{"alt":25,"src":118128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[233,118130,118131],{"start":66},[169,118132,118133],{},"方法二(命令行)",[36,118135,118139],{"className":118136,"code":118137,"language":118138,"meta":25,"style":25},"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",[42,118140,118141,118146,118151,118156],{"__ignoreMap":25},[45,118142,118143],{"class":47,"line":48},[45,118144,118145],{},"# 开启 Linux 子系统\n",[45,118147,118148],{"class":47,"line":66},[45,118149,118150],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[45,118152,118153],{"class":47,"line":1331},[45,118154,118155],{},"# 开启虚拟机平台\n",[45,118157,118158],{"class":47,"line":1346},[45,118159,118160],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22147,118162,118164],{"id":118163},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[20,118166,118167],{},"用管理员权限打开powershell",[20,118169,118170],{},[23,118171],{"alt":25,"src":118172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[20,118174,118175],{},"升级WSL并设置默认版本为WSL2",[36,118177,118179],{"className":118136,"code":118178,"language":118138,"meta":25,"style":25},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[42,118180,118181,118186,118191,118196],{"__ignoreMap":25},[45,118182,118183],{"class":47,"line":48},[45,118184,118185],{},"# 更新 wsl\n",[45,118187,118188],{"class":47,"line":66},[45,118189,118190],{},"wsl --update\n",[45,118192,118193],{"class":47,"line":1331},[45,118194,118195],{},"# 将 wsl 版本设置为 wsl2\n",[45,118197,118198],{"class":47,"line":1346},[45,118199,118200],{},"wsl --set-default-version 2\n",[22147,118202,118204],{"id":118203},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[233,118206,118207],{},[169,118208,118209],{},"方式一(商店下载)",[20,118211,118212],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[20,118214,118215],{},[23,118216],{"alt":25,"src":118217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[233,118219,118220],{"start":66},[169,118221,118222],{},"方式二(命令行安装)",[36,118224,118226],{"className":118136,"code":118225,"language":118138,"meta":25,"style":25},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[42,118227,118228,118233,118238],{"__ignoreMap":25},[45,118229,118230],{"class":47,"line":48},[45,118231,118232],{},"# 列出可安装的 Linux 版本\n",[45,118234,118235],{"class":47,"line":66},[45,118236,118237],{},"#（需要科学手段）\n",[45,118239,118240],{"class":47,"line":1331},[45,118241,118242],{},"wsl --list --online\n",[20,118244,118245],{},[23,118246],{"alt":25,"src":118247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[20,118249,118250],{},"选择对应发行版并安装",[36,118252,118254],{"className":118136,"code":118253,"language":118138,"meta":25,"style":25},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[42,118255,118256,118261],{"__ignoreMap":25},[45,118257,118258],{"class":47,"line":48},[45,118259,118260],{},"# Ubuntu安装完毕后需要重启系统\n",[45,118262,118263],{"class":47,"line":66},[45,118264,118265],{},"wsl --install -d Ubuntu-24.04\n",[22147,118267,118269],{"id":118268},"_2324-查看系统状态","2.3.2.4 查看系统状态",[36,118271,118273],{"className":118136,"code":118272,"language":118138,"meta":25,"style":25},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[42,118274,118275,118280,118285,118290,118295,118299,118303,118308,118313,118318],{"__ignoreMap":25},[45,118276,118277],{"class":47,"line":48},[45,118278,118279],{},"# 查看 wsl\n",[45,118281,118282],{"class":47,"line":66},[45,118283,118284],{},"wsl -l\n",[45,118286,118287],{"class":47,"line":1331},[45,118288,118289],{},"# 查看 wsl 运行版本或模式\n",[45,118291,118292],{"class":47,"line":1346},[45,118293,118294],{},"wsl -l -v\n",[45,118296,118297],{"class":47,"line":1352},[45,118298,2550],{"emptyLinePlaceholder":207},[45,118300,118301],{"class":47,"line":1366},[45,118302,2550],{"emptyLinePlaceholder":207},[45,118304,118305],{"class":47,"line":1372},[45,118306,118307],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[45,118309,118310],{"class":47,"line":1463},[45,118311,118312],{},"wsl --set-version \u003Cdistro> 2\n",[45,118314,118315],{"class":47,"line":1469},[45,118316,118317],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[45,118319,118320],{"class":47,"line":1481},[45,118321,118322],{},"wsl --unregister \u003Cdistro>\n",[20,118324,118325],{},"输出Version为2即正常",[20,118327,118328],{},[23,118329],{"alt":25,"src":118330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22147,118332,118334],{"id":118333},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[20,118336,118337],{},"直接在Powershell里输入wsl命令进入子系统",[36,118339,118341],{"className":118136,"code":118340,"language":118138,"meta":25,"style":25},"# 进入子系统\nwsl\n",[42,118342,118343,118348],{"__ignoreMap":25},[45,118344,118345],{"class":47,"line":48},[45,118346,118347],{},"# 进入子系统\n",[45,118349,118350],{"class":47,"line":66},[45,118351,118352],{},"wsl\n",[20,118354,118355],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[20,118357,118358],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[20,118360,118361],{},[23,118362],{"alt":25,"src":118363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[249,118365,118367],{"id":118366},"_233-配置各种环境","2.3.3 配置各种环境",[22147,118369,118371],{"id":118370},"_2331-换源","2.3.3.1 换源",[20,118373,118374],{},"(同实体机LINUX，往下找教程)",[22147,118376,118378],{"id":118377},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23059,118380,118382],{"id":118381},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[20,118384,118385],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[20,118387,118388],{},[23,118389],{"alt":25,"src":118390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[20,118392,118393],{},[23,118394],{"alt":25,"src":118395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23059,118397,118399],{"id":118398},"_23322-cuda","2.3.3.2.2 CUDA",[20,118401,118402,118403],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[516,118404,118405],{"href":118405,"rel":118406},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24012],[20,118408,118409,118412],{},[23,118410],{"alt":25,"src":118411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[23,118413],{"alt":25,"src":118414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[20,118416,118417],{},"在下方的网站，选择合适的版本。",[20,118419,118420,118421],{},"WSL2 专属 CUDA 指南：",[516,118422,118423],{"href":118423,"rel":118424},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24012],[20,118426,118427],{},[427,118428,118429],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[20,118431,118432],{},[23,118433],{"alt":25,"src":118434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[20,118436,118437],{},"挨行敲一遍",[20,118439,118440],{},[23,118441],{"alt":25,"src":118442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[20,118444,118445,118446,118449],{},"敲完后，输入",[42,118447,118448],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[20,118451,118452],{},[23,118453],{"alt":25,"src":118454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[20,118456,118457,118458,118461],{},"（请详看下方教程的",[427,118459,118460],{},"安装CUDA的配置环境来看","如何配置环境）",[23059,118463,118465],{"id":118464},"_23323-cudnn","2.3.3.2.3 cuDNN",[20,118467,118374],{},[20,118469,118470],{},[23,118471],{"alt":25,"src":118472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22147,118474,118476],{"id":118475},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[20,118478,118479],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[20,118481,118482],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[20,118484,118485],{},[23,118486],{"alt":25,"src":118487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[20,118489,118490],{},"连接WSL2",[20,118492,118493],{},[23,118494],{"alt":25,"src":118495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[20,118497,118498],{},"远程开发成功。",[20,118500,118501],{},[23,118502],{"alt":25,"src":118503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[20,118505,118506],{},[23,118507],{"alt":25,"src":118508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[20,118510,118511],{},[23,118512],{"alt":25,"src":118513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22147,118515,118517],{"id":118516},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[20,118519,118520],{},[23,118521],{"alt":25,"src":118522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22147,118524,118526],{"id":118525},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[36,118528,118530],{"className":117396,"code":118529,"language":117398,"meta":25,"style":25},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[42,118531,118532,118540,118548,118559,118563],{"__ignoreMap":25},[45,118533,118534,118536,118538],{"class":47,"line":48},[45,118535,24724],{"class":69},[45,118537,117417],{"class":62},[45,118539,26342],{"class":62},[45,118541,118542,118544,118546],{"class":47,"line":66},[45,118543,24724],{"class":69},[45,118545,117417],{"class":62},[45,118547,117433],{"class":62},[45,118549,118550,118552,118554,118556],{"class":47,"line":1331},[45,118551,24724],{"class":69},[45,118553,117417],{"class":62},[45,118555,23981],{"class":62},[45,118557,118558],{"class":62}," mesa-utils\n",[45,118560,118561],{"class":47,"line":1346},[45,118562,2550],{"emptyLinePlaceholder":207},[45,118564,118565],{"class":47,"line":1352},[45,118566,118567],{"class":337},"#然后重启wsl2即可\n",[196,118569,118570],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":25,"searchDepth":66,"depth":66,"links":118572},[118573,118574,118579],{"id":117850,"depth":66,"text":117851},{"id":117863,"depth":66,"text":117864,"children":118575},[118576,118577,118578],{"id":117867,"depth":1331,"text":117868},{"id":117914,"depth":1331,"text":117915},{"id":117975,"depth":1331,"text":117976},{"id":118011,"depth":66,"text":118012,"children":118580},[118581,118582,118583],{"id":118015,"depth":1331,"text":118016},{"id":118077,"depth":1331,"text":118078},{"id":118366,"depth":1331,"text":118367},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117842,"description":204},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118590,"title":118591,"body":118592,"description":204,"extension":205,"meta":121528,"navigation":207,"path":121529,"seo":121530,"stem":121531,"__hash__":121532},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118593,"toc":121500},[118594,118597,118601,118607,118611,118617,118621,118809,118812,118817,118821,118825,118828,118831,118837,118842,118845,118848,118853,118886,118891,118895,118972,118975,118980,118984,118987,119026,119029,119038,119056,119061,119068,119185,119190,119193,119220,119225,119229,119238,119288,119295,119299,119302,119316,119323,119357,119362,119366,119389,119392,119397,119401,119404,119407,119410,119452,119456,119459,119462,119503,119507,119511,119514,119519,119524,119527,119550,119553,119561,119566,119569,119574,119579,119582,119587,119591,119596,119619,119624,119686,119694,119699,119704,119707,119712,119715,119720,119725,119743,119748,119754,119759,119773,119777,119780,119783,119786,119829,119832,119837,119938,119941,119946,119950,119954,119991,119995,119999,120003,120049,120053,120098,120102,120109,120117,120172,120175,120252,120255,120278,120282,120285,120290,120295,120303,120306,120311,120316,120321,120324,120329,120338,120341,120346,120349,120420,120425,120428,120433,120436,120441,120444,120449,120452,120457,120462,120465,120540,120543,120556,120561,120564,120578,120581,120610,120615,120644,120647,120652,120656,120661,120670,120673,120678,120681,120686,120689,120692,120697,120700,120705,120710,120713,120718,120721,120846,120851,120881,120884,120889,120894,120911,120914,120957,120960,120987,120992,121005,121148,121152,121157,121171,121174,121225,121228,121258,121261,121277,121282,121296,121299,121366,121371,121380,121385,121388,121400,121405,121412,121436,121439,121444,121447,121466,121471,121478,121490,121497],[10,118595,118591],{"id":118596},"_3-安装必备配置",[15,118598,118600],{"id":118599},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[36,118602,118605],{"className":118603,"code":118604,"language":5337},[5335],"  打开下方网站（注意，该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",[42,118606,118604],{"__ignoreMap":25},[249,118608,118610],{"id":118609},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[36,118612,118615],{"className":118613,"code":118614,"language":5337},[5335],"  输入以下命令\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",[42,118616,118614],{"__ignoreMap":25},[249,118618,118620],{"id":118619},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[36,118622,118626],{"className":118623,"code":118624,"language":118625,"meta":25,"style":25},"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",[42,118627,118628,118636,118647,118659,118673,118677,118687,118692,118696,118700,118705,118709,118721,118725,118730,118734,118745,118749,118765,118769,118780,118784,118789,118793,118801],{"__ignoreMap":25},[45,118629,118630,118632,118634],{"class":47,"line":48},[45,118631,24724],{"class":69},[45,118633,117417],{"class":62},[45,118635,26342],{"class":62},[45,118637,118638,118640,118642,118644],{"class":47,"line":66},[45,118639,24724],{"class":69},[45,118641,117417],{"class":62},[45,118643,23981],{"class":62},[45,118645,118646],{"class":62}," vim\n",[45,118648,118649,118651,118654,118656],{"class":47,"line":1331},[45,118650,24724],{"class":69},[45,118652,118653],{"class":62}," rm",[45,118655,25425],{"class":79},[45,118657,118658],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list\n",[45,118660,118661,118663,118665,118667,118670],{"class":47,"line":1346},[45,118662,24724],{"class":69},[45,118664,118653],{"class":62},[45,118666,25425],{"class":79},[45,118668,118669],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[45,118671,118672],{"class":79},"**\n",[45,118674,118675],{"class":47,"line":1352},[45,118676,2550],{"emptyLinePlaceholder":207},[45,118678,118679,118681,118684],{"class":47,"line":1366},[45,118680,24724],{"class":69},[45,118682,118683],{"class":62}," vim",[45,118685,118686],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[45,118688,118689],{"class":47,"line":1372},[45,118690,118691],{"class":62},"```\n",[45,118693,118694],{"class":47,"line":1463},[45,118695,2550],{"emptyLinePlaceholder":207},[45,118697,118698],{"class":47,"line":1469},[45,118699,2550],{"emptyLinePlaceholder":207},[45,118701,118702],{"class":47,"line":1481},[45,118703,118704],{"class":69},"选择好Ubuntu版本后，复制下方的内容。\n",[45,118706,118707],{"class":47,"line":1763},[45,118708,2550],{"emptyLinePlaceholder":207},[45,118710,118711,118713,118716,118719],{"class":47,"line":1768},[45,118712,504],{"class":51},[45,118714,118715],{"class":62},"[](",[45,118717,118718],{"class":69},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[45,118720,139],{"class":62},[45,118722,118723],{"class":47,"line":1774},[45,118724,2550],{"emptyLinePlaceholder":207},[45,118726,118727],{"class":47,"line":1779},[45,118728,118729],{"class":69},"粘贴进去\n",[45,118731,118732],{"class":47,"line":1793},[45,118733,2550],{"emptyLinePlaceholder":207},[45,118735,118736,118738,118740,118743],{"class":47,"line":1798},[45,118737,504],{"class":51},[45,118739,118715],{"class":62},[45,118741,118742],{"class":69},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[45,118744,139],{"class":62},[45,118746,118747],{"class":47,"line":1804},[45,118748,2550],{"emptyLinePlaceholder":207},[45,118750,118751,118754,118757,118760,118762],{"class":47,"line":1825},[45,118752,118753],{"class":69},"按一下ESC，然后英文冒号，输入",[45,118755,118756],{"class":62}," `",[45,118758,118759],{"class":69},":wq!",[45,118761,1249],{"class":62},[45,118763,118764],{"class":69},"然后回车\n",[45,118766,118767],{"class":47,"line":1830},[45,118768,2550],{"emptyLinePlaceholder":207},[45,118770,118771,118773,118775,118778],{"class":47,"line":1844},[45,118772,504],{"class":51},[45,118774,118715],{"class":62},[45,118776,118777],{"class":69},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[45,118779,139],{"class":62},[45,118781,118782],{"class":47,"line":1849},[45,118783,2550],{"emptyLinePlaceholder":207},[45,118785,118786],{"class":47,"line":1878},[45,118787,118788],{"class":69},"输入以下命令\n",[45,118790,118791],{"class":47,"line":1883},[45,118792,2550],{"emptyLinePlaceholder":207},[45,118794,118795,118798],{"class":47,"line":1900},[45,118796,118797],{"class":62},"```",[45,118799,118800],{"class":69},"Bash\n",[45,118802,118803,118805,118807],{"class":47,"line":1905},[45,118804,24724],{"class":69},[45,118806,117417],{"class":62},[45,118808,26342],{"class":62},[20,118810,118811],{},"这里被替换成对应学校则成功",[20,118813,118814],{},[23,118815],{"alt":25,"src":118816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[15,118818,118820],{"id":118819},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[249,118822,118824],{"id":118823},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[20,118826,118827],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[20,118829,118830],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[20,118832,118833],{},[516,118834,118835],{"href":118835,"rel":118836},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24012],[20,118838,118839],{},[23,118840],{"alt":25,"src":118841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[20,118843,118844],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[20,118846,118847],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[20,118849,118850],{},[23,118851],{"alt":25,"src":118852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[36,118854,118856],{"className":117396,"code":118855,"language":117398,"meta":25,"style":25},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[42,118857,118858,118863,118870,118875],{"__ignoreMap":25},[45,118859,118860],{"class":47,"line":48},[45,118861,118862],{"class":337},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[45,118864,118865,118867],{"class":47,"line":66},[45,118866,101376],{"class":79},[45,118868,118869],{"class":62}," ~\u002FDownloads\n",[45,118871,118872],{"class":47,"line":1331},[45,118873,118874],{"class":337},"#下方chrome安装包名不一定是这个，根据名字来看\n",[45,118876,118877,118879,118881,118883],{"class":47,"line":1346},[45,118878,24724],{"class":69},[45,118880,117417],{"class":62},[45,118882,23981],{"class":62},[45,118884,118885],{"class":62}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[20,118887,118888],{},[23,118889],{"alt":25,"src":118890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[249,118892,118894],{"id":118893},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[36,118896,118898],{"className":117396,"code":118897,"language":117398,"meta":25,"style":25},"# 老版\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",[42,118899,118900,118905,118913,118924,118929,118933,118938,118948,118956,118967],{"__ignoreMap":25},[45,118901,118902],{"class":47,"line":48},[45,118903,118904],{"class":337},"# 老版\n",[45,118906,118907,118909,118911],{"class":47,"line":66},[45,118908,24724],{"class":69},[45,118910,117417],{"class":62},[45,118912,26342],{"class":62},[45,118914,118915,118917,118919,118921],{"class":47,"line":1331},[45,118916,24724],{"class":69},[45,118918,117417],{"class":62},[45,118920,23981],{"class":62},[45,118922,118923],{"class":62}," neofetch\n",[45,118925,118926],{"class":47,"line":1346},[45,118927,118928],{"class":69},"neofetch\n",[45,118930,118931],{"class":47,"line":1352},[45,118932,2550],{"emptyLinePlaceholder":207},[45,118934,118935],{"class":47,"line":1366},[45,118936,118937],{"class":337},"# 新版\n",[45,118939,118940,118942,118945],{"class":47,"line":1372},[45,118941,24724],{"class":69},[45,118943,118944],{"class":62}," add-apt-repository",[45,118946,118947],{"class":62}," ppa:zhangsongcui3371\u002Ffastfetch\n",[45,118949,118950,118952,118954],{"class":47,"line":1463},[45,118951,24724],{"class":69},[45,118953,117417],{"class":62},[45,118955,26342],{"class":62},[45,118957,118958,118960,118962,118964],{"class":47,"line":1469},[45,118959,24724],{"class":69},[45,118961,117417],{"class":62},[45,118963,23981],{"class":62},[45,118965,118966],{"class":62}," fastfetch\n",[45,118968,118969],{"class":47,"line":1481},[45,118970,118971],{"class":69},"fastfetch\n",[20,118973,118974],{},"这里显示，一共有3162个debian的程序，7个snap程序",[20,118976,118977],{},[23,118978],{"alt":25,"src":118979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[249,118981,118983],{"id":118982},"_323-移除snap应用","3.2.3 移除snap应用",[20,118985,118986],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[36,118988,118990],{"className":117396,"code":118989,"language":117398,"meta":25,"style":25},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[42,118991,118992,119004,119015],{"__ignoreMap":25},[45,118993,118994,118996,118998,119001],{"class":47,"line":48},[45,118995,24724],{"class":69},[45,118997,26613],{"class":62},[45,118999,119000],{"class":62}," disable",[45,119002,119003],{"class":62}," snapd.service\n",[45,119005,119006,119008,119010,119012],{"class":47,"line":66},[45,119007,24724],{"class":69},[45,119009,26613],{"class":62},[45,119011,119000],{"class":62},[45,119013,119014],{"class":62}," snapd.socket\n",[45,119016,119017,119019,119021,119023],{"class":47,"line":1331},[45,119018,24724],{"class":69},[45,119020,26613],{"class":62},[45,119022,119000],{"class":62},[45,119024,119025],{"class":62}," snapd.seeded.service\n",[20,119027,119028],{},"然后查看snap应用列表",[20,119030,119031,119032,119037],{},"根据你安装的选择不同（最小安装或普通安装），有",[516,119033,119036],{"href":119034,"rel":119035},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24012],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[36,119039,119041],{"className":117396,"code":119040,"language":117398,"meta":25,"style":25},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[42,119042,119043,119048],{"__ignoreMap":25},[45,119044,119045],{"class":47,"line":48},[45,119046,119047],{"class":337},"# 查询当前系统上snap安装了哪些app\n",[45,119049,119050,119053],{"class":47,"line":66},[45,119051,119052],{"class":69},"snap",[45,119054,119055],{"class":62}," list\n",[20,119057,119058],{},[23,119059],{"alt":25,"src":119060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[20,119062,119063,119064,119067],{},"卸载掉图中所有应用，按照 ",[427,119065,119066],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[36,119069,119071],{"className":117396,"code":119070,"language":117398,"meta":25,"style":25},"#移除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",[42,119072,119073,119078,119090,119095,119106,119111,119122,119127,119138,119143,119147,119152,119163,119174],{"__ignoreMap":25},[45,119074,119075],{"class":47,"line":48},[45,119076,119077],{"class":337},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[45,119079,119080,119082,119085,119087],{"class":47,"line":66},[45,119081,24724],{"class":69},[45,119083,119084],{"class":62}," snap",[45,119086,26179],{"class":62},[45,119088,119089],{"class":62}," snap-store\n",[45,119091,119092],{"class":47,"line":1331},[45,119093,119094],{"class":337},"#移除firefox浏览器\n",[45,119096,119097,119099,119101,119103],{"class":47,"line":1346},[45,119098,24724],{"class":69},[45,119100,119084],{"class":62},[45,119102,26179],{"class":62},[45,119104,119105],{"class":62}," firefox\n",[45,119107,119108],{"class":47,"line":1352},[45,119109,119110],{"class":337},"#移除gnome-42-2204\n",[45,119112,119113,119115,119117,119119],{"class":47,"line":1366},[45,119114,24724],{"class":69},[45,119116,119084],{"class":62},[45,119118,26179],{"class":62},[45,119120,119121],{"class":62}," gnome-42-2204\n",[45,119123,119124],{"class":47,"line":1372},[45,119125,119126],{"class":337},"#移除gtk-common-themes\n",[45,119128,119129,119131,119133,119135],{"class":47,"line":1463},[45,119130,24724],{"class":69},[45,119132,119084],{"class":62},[45,119134,26179],{"class":62},[45,119136,119137],{"class":62}," gtk-common-themes\n",[45,119139,119140],{"class":47,"line":1469},[45,119141,119142],{"class":337},"#移除其它...\n",[45,119144,119145],{"class":47,"line":1481},[45,119146,2824],{"class":55},[45,119148,119149],{"class":47,"line":1763},[45,119150,119151],{"class":337},"#移除core22,bare以及snapd\n",[45,119153,119154,119156,119158,119160],{"class":47,"line":1768},[45,119155,24724],{"class":69},[45,119157,119084],{"class":62},[45,119159,26179],{"class":62},[45,119161,119162],{"class":62}," core22\n",[45,119164,119165,119167,119169,119171],{"class":47,"line":1774},[45,119166,24724],{"class":69},[45,119168,119084],{"class":62},[45,119170,26179],{"class":62},[45,119172,119173],{"class":62}," bare\n",[45,119175,119176,119178,119180,119182],{"class":47,"line":1779},[45,119177,24724],{"class":69},[45,119179,119084],{"class":62},[45,119181,26179],{"class":62},[45,119183,119184],{"class":62}," snapd\n",[20,119186,119187],{},[23,119188],{"alt":25,"src":119189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[20,119191,119192],{},"输入以下命令查看是否还有snap包",[36,119194,119196],{"className":117396,"code":119195,"language":117398,"meta":25,"style":25},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[42,119197,119198,119204,119208,119212,119216],{"__ignoreMap":25},[45,119199,119200,119202],{"class":47,"line":48},[45,119201,119052],{"class":69},[45,119203,119055],{"class":62},[45,119205,119206],{"class":47,"line":66},[45,119207,118904],{"class":337},[45,119209,119210],{"class":47,"line":1331},[45,119211,118928],{"class":69},[45,119213,119214],{"class":47,"line":1346},[45,119215,118937],{"class":337},[45,119217,119218],{"class":47,"line":1352},[45,119219,118971],{"class":69},[20,119221,119222],{},[23,119223],{"alt":25,"src":119224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[249,119226,119228],{"id":119227},"_324-移除snap","3.2.4 移除snap",[20,119230,119231,119232,119237],{},"在删除掉",[516,119233,119236],{"href":119234,"rel":119235},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24012],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[36,119239,119241],{"className":117396,"code":119240,"language":117398,"meta":25,"style":25}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[42,119242,119243,119248,119261,119266,119277],{"__ignoreMap":25},[45,119244,119245],{"class":47,"line":48},[45,119246,119247],{"class":337}," #使用apt移除掉snap\n",[45,119249,119250,119252,119254,119256,119259],{"class":47,"line":66},[45,119251,24724],{"class":69},[45,119253,117417],{"class":62},[45,119255,117725],{"class":62},[45,119257,119258],{"class":79}," --purge",[45,119260,119184],{"class":62},[45,119262,119263],{"class":47,"line":1331},[45,119264,119265],{"class":337},"#移除snapd的一些目录\n",[45,119267,119268,119270,119272,119274],{"class":47,"line":1346},[45,119269,24724],{"class":69},[45,119271,118653],{"class":62},[45,119273,25425],{"class":79},[45,119275,119276],{"class":62}," \u002Fvar\u002Fcache\u002Fsnapd\n",[45,119278,119279,119281,119283,119285],{"class":47,"line":1352},[45,119280,24724],{"class":69},[45,119282,118653],{"class":62},[45,119284,25425],{"class":79},[45,119286,119287],{"class":62}," ~\u002Fsnap\n",[20,119289,119290,119291,119294],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[42,119292,119293],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[249,119296,119298],{"id":119297},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[20,119300,119301],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[36,119303,119305],{"className":117396,"code":119304,"language":117398,"meta":25,"style":25},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[42,119306,119307],{"__ignoreMap":25},[45,119308,119309,119311,119313],{"class":47,"line":48},[45,119310,24724],{"class":69},[45,119312,118683],{"class":62},[45,119314,119315],{"class":62}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[20,119317,119318,119319,119322],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[42,119320,119321],{},":wq"," 回车",[36,119324,119326],{"className":117396,"code":119325,"language":117398,"meta":25,"style":25},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[42,119327,119328,119335,119349],{"__ignoreMap":25},[45,119329,119330,119333],{"class":47,"line":48},[45,119331,119332],{"class":69},"Package:",[45,119334,119184],{"class":62},[45,119336,119337,119340,119343,119346],{"class":47,"line":66},[45,119338,119339],{"class":69},"Pin:",[45,119341,119342],{"class":62}," release",[45,119344,119345],{"class":62}," a=",[45,119347,119348],{"class":79},"*\n",[45,119350,119351,119354],{"class":47,"line":1331},[45,119352,119353],{"class":69},"Pin-Priority:",[45,119355,119356],{"class":79}," -10\n",[20,119358,119359],{},[23,119360],{"alt":25,"src":119361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[249,119363,119365],{"id":119364},"_326-测试是否成功","3.2.6 测试是否成功",[36,119367,119369],{"className":117396,"code":119368,"language":117398,"meta":25,"style":25},"sudo apt update\nsudo apt install firefox\n",[42,119370,119371,119379],{"__ignoreMap":25},[45,119372,119373,119375,119377],{"class":47,"line":48},[45,119374,24724],{"class":69},[45,119376,117417],{"class":62},[45,119378,26342],{"class":62},[45,119380,119381,119383,119385,119387],{"class":47,"line":66},[45,119382,24724],{"class":69},[45,119384,117417],{"class":62},[45,119386,23981],{"class":62},[45,119388,119105],{"class":62},[20,119390,119391],{},"这里提示snapd无法被安装，就证明成功了",[20,119393,119394],{},[23,119395],{"alt":25,"src":119396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[249,119398,119400],{"id":119399},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[20,119402,119403],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[20,119405,119406],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[20,119408,119409],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[36,119411,119413],{"className":117396,"code":119412,"language":117398,"meta":25,"style":25},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[42,119414,119415,119420,119429,119434,119442],{"__ignoreMap":25},[45,119416,119417],{"class":47,"line":48},[45,119418,119419],{"class":337},"# 添加Mozilla提供的源\n",[45,119421,119422,119424,119426],{"class":47,"line":66},[45,119423,24724],{"class":69},[45,119425,118944],{"class":62},[45,119427,119428],{"class":62}," ppa:mozillateam\u002Fppa\n",[45,119430,119431],{"class":47,"line":1331},[45,119432,119433],{"class":337},"# 安装Firefox\n",[45,119435,119436,119438,119440],{"class":47,"line":1346},[45,119437,24724],{"class":69},[45,119439,117417],{"class":62},[45,119441,26342],{"class":62},[45,119443,119444,119446,119448,119450],{"class":47,"line":1352},[45,119445,24724],{"class":69},[45,119447,117417],{"class":62},[45,119449,23981],{"class":62},[45,119451,119105],{"class":62},[249,119453,119455],{"id":119454},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[20,119457,119458],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[20,119460,119461],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[36,119463,119465],{"className":117396,"code":119464,"language":117398,"meta":25,"style":25},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[42,119466,119467,119472,119482,119490,119494],{"__ignoreMap":25},[45,119468,119469],{"class":47,"line":48},[45,119470,119471],{"class":337},"#删掉禁止安装snap的配置文件\n",[45,119473,119474,119476,119478,119480],{"class":47,"line":66},[45,119475,24724],{"class":69},[45,119477,118653],{"class":62},[45,119479,25425],{"class":79},[45,119481,119315],{"class":62},[45,119483,119484,119486,119488],{"class":47,"line":1331},[45,119485,24724],{"class":69},[45,119487,117417],{"class":62},[45,119489,26342],{"class":62},[45,119491,119492],{"class":47,"line":1346},[45,119493,2550],{"emptyLinePlaceholder":207},[45,119495,119496,119498,119500],{"class":47,"line":1352},[45,119497,24724],{"class":69},[45,119499,117417],{"class":62},[45,119501,119502],{"class":62}," dist-update\n",[15,119504,119506],{"id":119505},"_33-中文输入法","3.3 中文输入法",[249,119508,119510],{"id":119509},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[20,119512,119513],{},"官网下载搜狗输入法",[20,119515,119516],{},[23,119517],{"alt":25,"src":119518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[20,119520,119521],{},[23,119522],{"alt":25,"src":119523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[20,119525,119526],{},"打开终端输入如下",[36,119528,119530],{"className":117396,"code":119529,"language":117398,"meta":25,"style":25},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[42,119531,119532,119539],{"__ignoreMap":25},[45,119533,119534,119536],{"class":47,"line":48},[45,119535,101376],{"class":79},[45,119537,119538],{"class":62}," ~\u002FDownloads\u002F\n",[45,119540,119541,119543,119545,119547],{"class":47,"line":66},[45,119542,24724],{"class":69},[45,119544,117417],{"class":62},[45,119546,23981],{"class":62},[45,119548,119549],{"class":62}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[20,119551,119552],{},"打开Fcitx",[20,119554,119555,119558],{},[23,119556],{"alt":25,"src":119557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[23,119559],{"alt":25,"src":119560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[20,119562,119563],{},[23,119564],{"alt":25,"src":119565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[20,119567,119568],{},"添加搜狗输入法",[20,119570,119571],{},[23,119572],{"alt":25,"src":119573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[20,119575,119576],{},[23,119577],{"alt":25,"src":119578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[20,119580,119581],{},"将搜狗输入法设置为唯一输入法",[20,119583,119584],{},[23,119585],{"alt":25,"src":119586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[249,119588,119590],{"id":119589},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[233,119592,119593],{},[169,119594,119595],{},"卸载旧输入法",[36,119597,119599],{"className":118623,"code":119598,"language":118625,"meta":25,"style":25},"sudo apt purge fcitx* ibus*\n",[42,119600,119601],{"__ignoreMap":25},[45,119602,119603,119605,119607,119609,119612,119614,119617],{"class":47,"line":48},[45,119604,24724],{"class":69},[45,119606,117417],{"class":62},[45,119608,117758],{"class":62},[45,119610,119611],{"class":62}," fcitx",[45,119613,732],{"class":79},[45,119615,119616],{"class":62}," ibus",[45,119618,119348],{"class":79},[233,119620,119621],{"start":66},[169,119622,119623],{},"安装Fcitx5",[36,119625,119627],{"className":117396,"code":119626,"language":117398,"meta":25,"style":25},"# 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",[42,119628,119629,119634,119648,119652,119657,119666,119674],{"__ignoreMap":25},[45,119630,119631],{"class":47,"line":48},[45,119632,119633],{"class":337},"# Ubuntu22.04及以上、Debian12及以上\n",[45,119635,119636,119638,119640,119642,119645],{"class":47,"line":66},[45,119637,24724],{"class":69},[45,119639,117417],{"class":62},[45,119641,23981],{"class":62},[45,119643,119644],{"class":62}," fcitx5",[45,119646,119647],{"class":62}," fcitx5-chinese-addons\n",[45,119649,119650],{"class":47,"line":1331},[45,119651,2550],{"emptyLinePlaceholder":207},[45,119653,119654],{"class":47,"line":1346},[45,119655,119656],{"class":337},"# Ubuntu20.04\n",[45,119658,119659,119661,119663],{"class":47,"line":1352},[45,119660,24724],{"class":69},[45,119662,118944],{"class":62},[45,119664,119665],{"class":62}," ppa:zhsj\u002Ffcitx5\n",[45,119667,119668,119670,119672],{"class":47,"line":1366},[45,119669,24724],{"class":69},[45,119671,117417],{"class":62},[45,119673,26342],{"class":62},[45,119675,119676,119678,119680,119682,119684],{"class":47,"line":1372},[45,119677,24724],{"class":69},[45,119679,117417],{"class":62},[45,119681,23981],{"class":62},[45,119683,119644],{"class":62},[45,119685,119647],{"class":62},[233,119687,119688,119691],{"start":1331},[169,119689,119690],{},"Reboot System",[169,119692,119693],{},"启动Fcitx5",[20,119695,119696],{},[23,119697],{"alt":25,"src":119698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[233,119700,119701],{"start":1352},[169,119702,119703],{},"修改一些设置",[20,119705,119706],{},"将Pinyin和Keyboard - English US加入到左边。",[20,119708,119709],{},[23,119710],{"alt":25,"src":119711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[20,119713,119714],{},"添加快捷键以便于更好切换中英文",[20,119716,119717],{},[23,119718],{"alt":25,"src":119719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[233,119721,119722],{"start":1366},[169,119723,119724],{},"重启",[36,119726,119728],{"className":118623,"code":119727,"language":118625,"meta":25,"style":25},"sudo shutdown -r now\n",[42,119729,119730],{"__ignoreMap":25},[45,119731,119732,119734,119737,119740],{"class":47,"line":48},[45,119733,24724],{"class":69},[45,119735,119736],{"class":62}," shutdown",[45,119738,119739],{"class":79}," -r",[45,119741,119742],{"class":62}," now\n",[233,119744,119745],{"start":1372},[169,119746,119747],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[20,119749,119750],{},[516,119751,119752],{"href":119752,"rel":119753},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24012],[233,119755,119756],{"start":1463},[169,119757,119758],{},"再重启",[36,119760,119761],{"className":118623,"code":119727,"language":118625,"meta":25,"style":25},[42,119762,119763],{"__ignoreMap":25},[45,119764,119765,119767,119769,119771],{"class":47,"line":48},[45,119766,24724],{"class":69},[45,119768,119736],{"class":62},[45,119770,119739],{"class":79},[45,119772,119742],{"class":62},[15,119774,119776],{"id":119775},"_34-pip3源替换","3.4 pip3源替换",[20,119778,119779],{},"非Debian系发行版需要做。",[20,119781,119782],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[20,119784,119785],{},"使用dnf的系统也可能不用做。",[36,119787,119789],{"className":117396,"code":119788,"language":117398,"meta":25,"style":25},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[42,119790,119791,119796,119803,119808,119813],{"__ignoreMap":25},[45,119792,119793],{"class":47,"line":48},[45,119794,119795],{"class":337},"# 检查是否已安装 pip\n",[45,119797,119798,119801],{"class":47,"line":66},[45,119799,119800],{"class":69},"pip3",[45,119802,26393],{"class":79},[45,119804,119805],{"class":47,"line":1331},[45,119806,119807],{"class":337},"# 如果未安装，先安装 pip3（见下方）\n",[45,119809,119810],{"class":47,"line":1346},[45,119811,119812],{"class":337},"# 配置 pip 使用清华源\n",[45,119814,119815,119817,119820,119823,119826],{"class":47,"line":1352},[45,119816,119800],{"class":69},[45,119818,119819],{"class":62}," config",[45,119821,119822],{"class":62}," set",[45,119824,119825],{"class":62}," global.index-url",[45,119827,119828],{"class":62}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[20,119830,119831],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[20,119833,119834],{},[23,119835],{"alt":25,"src":119836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[36,119838,119840],{"className":117396,"code":119839,"language":117398,"meta":25,"style":25},"#安装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",[42,119841,119842,119847,119855,119866,119870,119875,119894,119898,119903,119915,119919,119924],{"__ignoreMap":25},[45,119843,119844],{"class":47,"line":48},[45,119845,119846],{"class":337},"#安装pip3\n",[45,119848,119849,119851,119853],{"class":47,"line":66},[45,119850,24724],{"class":69},[45,119852,117417],{"class":62},[45,119854,26342],{"class":62},[45,119856,119857,119859,119861,119863],{"class":47,"line":1331},[45,119858,24724],{"class":69},[45,119860,26176],{"class":62},[45,119862,23981],{"class":62},[45,119864,119865],{"class":62}," python3-pip\n",[45,119867,119868],{"class":47,"line":1346},[45,119869,2550],{"emptyLinePlaceholder":207},[45,119871,119872],{"class":47,"line":1352},[45,119873,119874],{"class":337},"#更新pip3\n",[45,119876,119877,119879,119881,119883,119885,119887,119890,119892],{"class":47,"line":1366},[45,119878,100979],{"class":69},[45,119880,100982],{"class":79},[45,119882,101005],{"class":62},[45,119884,23981],{"class":62},[45,119886,26530],{"class":79},[45,119888,119889],{"class":62}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[45,119891,101010],{"class":79},[45,119893,101013],{"class":62},[45,119895,119896],{"class":47,"line":1372},[45,119897,2550],{"emptyLinePlaceholder":207},[45,119899,119900],{"class":47,"line":1463},[45,119901,119902],{"class":337},"#设置pip源为清华源\n",[45,119904,119905,119907,119909,119911,119913],{"class":47,"line":1469},[45,119906,119800],{"class":69},[45,119908,119819],{"class":62},[45,119910,119822],{"class":62},[45,119912,119825],{"class":62},[45,119914,119828],{"class":62},[45,119916,119917],{"class":47,"line":1481},[45,119918,2550],{"emptyLinePlaceholder":207},[45,119920,119921],{"class":47,"line":1763},[45,119922,119923],{"class":337},"#测试\n",[45,119925,119926,119928,119930,119932,119934,119936],{"class":47,"line":1768},[45,119927,100979],{"class":69},[45,119929,100982],{"class":79},[45,119931,101005],{"class":62},[45,119933,23981],{"class":62},[45,119935,101010],{"class":79},[45,119937,101013],{"class":62},[20,119939,119940],{},"成功的话，会看到Looking后面是tsinghua字样。",[20,119942,119943],{},[23,119944],{"alt":25,"src":119945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[15,119947,119949],{"id":119948},"_35-显卡驱动安装","3.5 显卡驱动安装",[249,119951,119953],{"id":119952},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[36,119955,119957],{"className":118623,"code":119956,"language":118625,"meta":25,"style":25},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[42,119958,119959,119964,119979,119984],{"__ignoreMap":25},[45,119960,119961],{"class":47,"line":48},[45,119962,119963],{"class":337},"# 如果是使用apt安装的驱动\n",[45,119965,119966,119968,119970,119972,119974,119977],{"class":47,"line":66},[45,119967,24724],{"class":69},[45,119969,26176],{"class":62},[45,119971,26179],{"class":62},[45,119973,119258],{"class":79},[45,119975,119976],{"class":62}," nvidia",[45,119978,119348],{"class":79},[45,119980,119981],{"class":47,"line":1331},[45,119982,119983],{"class":337},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[45,119985,119986,119988],{"class":47,"line":1346},[45,119987,24724],{"class":69},[45,119989,119990],{"class":62}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[249,119992,119994],{"id":119993},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22147,119996,119998],{"id":119997},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23059,120000,120002],{"id":120001},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[36,120004,120006],{"className":118623,"code":120005,"language":118625,"meta":25,"style":25},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[42,120007,120008,120013,120024,120029,120039,120044],{"__ignoreMap":25},[45,120009,120010],{"class":47,"line":48},[45,120011,120012],{"class":337},"# 安装英伟达驱动\n",[45,120014,120015,120017,120019,120021],{"class":47,"line":66},[45,120016,24724],{"class":69},[45,120018,117417],{"class":62},[45,120020,23981],{"class":62},[45,120022,120023],{"class":62}," nvidia-driver-版本号\n",[45,120025,120026],{"class":47,"line":1331},[45,120027,120028],{"class":337},"# 重启 \n",[45,120030,120031,120033,120035,120037],{"class":47,"line":1346},[45,120032,24724],{"class":69},[45,120034,119736],{"class":62},[45,120036,119739],{"class":79},[45,120038,119742],{"class":62},[45,120040,120041],{"class":47,"line":1352},[45,120042,120043],{"class":337},"# 检查驱动是否安装成功\n",[45,120045,120046],{"class":47,"line":1366},[45,120047,120048],{"class":69},"nvidia-smi\n",[23059,120050,120052],{"id":120051},"_35212-debian","3.5.2.1.2 Debian",[36,120054,120056],{"className":118623,"code":120055,"language":118625,"meta":25,"style":25},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[42,120057,120058,120062,120076,120080,120090,120094],{"__ignoreMap":25},[45,120059,120060],{"class":47,"line":48},[45,120061,120012],{"class":337},[45,120063,120064,120066,120068,120070,120073],{"class":47,"line":66},[45,120065,24724],{"class":69},[45,120067,117417],{"class":62},[45,120069,23981],{"class":62},[45,120071,120072],{"class":62}," nvidia-driver",[45,120074,120075],{"class":62}," nvidia-settings\n",[45,120077,120078],{"class":47,"line":1331},[45,120079,120028],{"class":337},[45,120081,120082,120084,120086,120088],{"class":47,"line":1346},[45,120083,24724],{"class":69},[45,120085,119736],{"class":62},[45,120087,119739],{"class":79},[45,120089,119742],{"class":62},[45,120091,120092],{"class":47,"line":1352},[45,120093,120043],{"class":337},[45,120095,120096],{"class":47,"line":1366},[45,120097,120048],{"class":69},[22147,120099,120101],{"id":120100},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[20,120103,120104,120105,120108],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[427,120106,120107],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[20,120110,120111,120112],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23702,120113,120114],{},[427,120115,120116],{},"（也可以不禁用桌面环境，直接进行下一步。）",[36,120118,120120],{"className":118623,"code":120119,"language":118625,"meta":25,"style":25},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[42,120121,120122,120127,120137,120142,120155,120160],{"__ignoreMap":25},[45,120123,120124],{"class":47,"line":48},[45,120125,120126],{"class":337},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[45,120128,120129,120131,120134],{"class":47,"line":66},[45,120130,24724],{"class":69},[45,120132,120133],{"class":62}," telinit",[45,120135,120136],{"class":79}," 3\n",[45,120138,120139],{"class":47,"line":1331},[45,120140,120141],{"class":337},"# ubuntu 使用下方命令\n",[45,120143,120144,120146,120149,120152],{"class":47,"line":1346},[45,120145,24724],{"class":69},[45,120147,120148],{"class":62}," service",[45,120150,120151],{"class":62}," lightdm",[45,120153,120154],{"class":62}," stop\n",[45,120156,120157],{"class":47,"line":1352},[45,120158,120159],{"class":337},"# Fedora 使用下方命令\n",[45,120161,120162,120164,120166,120169],{"class":47,"line":1366},[45,120163,24724],{"class":69},[45,120165,26613],{"class":62},[45,120167,120168],{"class":62}," isolate",[45,120170,120171],{"class":62}," multi-user.target\n",[20,120173,120174],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[36,120176,120178],{"className":118623,"code":120177,"language":118625,"meta":25,"style":25},"# 编译环境+准备工作\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",[42,120179,120180,120185,120196,120201,120208,120213,120225,120230,120237,120242],{"__ignoreMap":25},[45,120181,120182],{"class":47,"line":48},[45,120183,120184],{"class":337},"# 编译环境+准备工作\n",[45,120186,120187,120189,120191,120193],{"class":47,"line":66},[45,120188,24724],{"class":69},[45,120190,117417],{"class":62},[45,120192,23981],{"class":62},[45,120194,120195],{"class":62}," build-essential\n",[45,120197,120198],{"class":47,"line":1331},[45,120199,120200],{"class":337},"# 进入到.run目录中\n",[45,120202,120203,120205],{"class":47,"line":1346},[45,120204,101376],{"class":79},[45,120206,120207],{"class":62}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[45,120209,120210],{"class":47,"line":1352},[45,120211,120212],{"class":337},"# 给驱动文件增加可执行权限：\n",[45,120214,120215,120217,120219,120222],{"class":47,"line":1366},[45,120216,24724],{"class":69},[45,120218,24727],{"class":62},[45,120220,120221],{"class":62}," a+x",[45,120223,120224],{"class":62}," NVIDIA-Linux-x86_64-550.107.02.run\n",[45,120226,120227],{"class":47,"line":1372},[45,120228,120229],{"class":337},"# 然后执行安装：\n",[45,120231,120232,120234],{"class":47,"line":1463},[45,120233,24724],{"class":69},[45,120235,120236],{"class":62}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[45,120238,120239],{"class":47,"line":1469},[45,120240,120241],{"class":337},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[45,120243,120244,120246,120249],{"class":47,"line":1481},[45,120245,24724],{"class":69},[45,120247,120248],{"class":62}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[45,120250,120251],{"class":79},"  --no-opengl-files\n",[20,120253,120254],{},"安装完毕重启即可",[36,120256,120258],{"className":118623,"code":120257,"language":118625,"meta":25,"style":25},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[42,120259,120260,120264,120270,120274],{"__ignoreMap":25},[45,120261,120262],{"class":47,"line":48},[45,120263,120028],{"class":337},[45,120265,120266,120268],{"class":47,"line":66},[45,120267,24724],{"class":69},[45,120269,26747],{"class":62},[45,120271,120272],{"class":47,"line":1331},[45,120273,120043],{"class":337},[45,120275,120276],{"class":47,"line":1346},[45,120277,120048],{"class":69},[249,120279,120281],{"id":120280},"_353-安装cuda","3.5.3 安装CUDA",[20,120283,120284],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[20,120286,120287],{},[23,120288],{"alt":25,"src":120289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[233,120291,120292],{},[169,120293,120294],{},"先查看显卡驱动所支持的最高CUDA版本",[36,120296,120297],{"className":118623,"code":120048,"language":118625,"meta":25,"style":25},[42,120298,120299],{"__ignoreMap":25},[45,120300,120301],{"class":47,"line":48},[45,120302,120048],{"class":69},[20,120304,120305],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[20,120307,120308],{},[23,120309],{"alt":25,"src":120310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[233,120312,120313],{"start":66},[169,120314,120315],{},"下载CUDA并安装CUDA",[20,120317,118402,120318],{},[516,120319,118405],{"href":118405,"rel":120320},[24012],[20,120322,120323],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[20,120325,120326],{},[23,120327],{"alt":25,"src":120328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[20,120330,120331,120332,120337],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[516,120333,120336],{"href":120334,"rel":120335},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24012],"Vinci机器人队单片机教程","）",[20,120339,120340],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[20,120342,120343],{},[23,120344],{"alt":25,"src":120345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[20,120347,120348],{},"将最下方框框里的命令敲入终端",[36,120350,120352],{"className":118623,"code":120351,"language":118625,"meta":25,"style":25},"# 在当前文件夹下创建一个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",[42,120353,120354,120359,120368,120373,120380,120385,120393,120398,120409,120414],{"__ignoreMap":25},[45,120355,120356],{"class":47,"line":48},[45,120357,120358],{"class":337},"# 在当前文件夹下创建一个ttt的子文件夹\n",[45,120360,120361,120363,120365],{"class":47,"line":66},[45,120362,101366],{"class":69},[45,120364,29316],{"class":79},[45,120366,120367],{"class":62}," .\u002Fttt\n",[45,120369,120370],{"class":47,"line":1331},[45,120371,120372],{"class":337},"# 进入ttt文件夹\n",[45,120374,120375,120377],{"class":47,"line":1346},[45,120376,101376],{"class":79},[45,120378,120379],{"class":62}," ttt\n",[45,120381,120382],{"class":47,"line":1352},[45,120383,120384],{"class":337},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[45,120386,120387,120390],{"class":47,"line":1366},[45,120388,120389],{"class":69},"wget",[45,120391,120392],{"class":62}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[45,120394,120395],{"class":47,"line":1372},[45,120396,120397],{"class":337},"# 给予权限\n",[45,120399,120400,120402,120404,120406],{"class":47,"line":1463},[45,120401,24724],{"class":69},[45,120403,24727],{"class":62},[45,120405,120221],{"class":62},[45,120407,120408],{"class":62}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[45,120410,120411],{"class":47,"line":1469},[45,120412,120413],{"class":337},"# 运行脚本\n",[45,120415,120416,120418],{"class":47,"line":1481},[45,120417,24724],{"class":69},[45,120419,120408],{"class":62},[20,120421,120422],{},[23,120423],{"alt":25,"src":120424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[20,120426,120427],{},"正在安装中：",[20,120429,120430],{},[23,120431],{"alt":25,"src":120432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[20,120434,120435],{},"输入accept接受即可",[20,120437,120438],{},[23,120439],{"alt":25,"src":120440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[20,120442,120443],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[20,120445,120446],{},[23,120447],{"alt":25,"src":120448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[20,120450,120451],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[20,120453,120454],{},[23,120455],{"alt":25,"src":120456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[233,120458,120459],{"start":1331},[169,120460,120461],{},"配置环境",[20,120463,120464],{},"根据上方确认一下路径，比如我上面红色框起来的为",[36,120466,120468],{"className":118623,"code":120467,"language":118625,"meta":25,"style":25},"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",[42,120469,120470,120486,120501],{"__ignoreMap":25},[45,120471,120472,120475,120478,120481,120484],{"class":47,"line":48},[45,120473,120474],{"class":69},"Please",[45,120476,120477],{"class":62}," make",[45,120479,120480],{"class":62}," sure",[45,120482,120483],{"class":62}," that",[45,120485,2824],{"class":55},[45,120487,120488,120490,120493,120496,120499],{"class":47,"line":66},[45,120489,52371],{"class":69},[45,120491,120492],{"class":62},"   PATH",[45,120494,120495],{"class":62}," includes",[45,120497,120498],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[45,120500,2824],{"class":55},[45,120502,120503,120505,120508,120510,120513,120516,120518,120521,120524,120527,120530,120532,120535,120537],{"class":47,"line":1331},[45,120504,52371],{"class":69},[45,120506,120507],{"class":62},"   LD_LIBRARY_PATH",[45,120509,120495],{"class":62},[45,120511,120512],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[45,120514,120515],{"class":62}," or,",[45,120517,5359],{"class":62},[45,120519,120520],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[45,120522,120523],{"class":62}," to",[45,120525,120526],{"class":62}," \u002Fetc\u002Fld.so.conf",[45,120528,120529],{"class":62}," and",[45,120531,27330],{"class":62},[45,120533,120534],{"class":62}," ldconfig",[45,120536,64704],{"class":62},[45,120538,120539],{"class":62}," root\n",[20,120541,120542],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[36,120544,120546],{"className":118623,"code":120545,"language":118625,"meta":25,"style":25},"which nvcc\n",[42,120547,120548],{"__ignoreMap":25},[45,120549,120550,120553],{"class":47,"line":48},[45,120551,120552],{"class":79},"which",[45,120554,120555],{"class":62}," nvcc\n",[20,120557,120558],{},[23,120559],{"alt":25,"src":120560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[20,120562,120563],{},"所以我进行以下操作：",[36,120565,120567],{"className":118623,"code":120566,"language":118625,"meta":25,"style":25},"sudo vim ~\u002F.bashrc\n",[42,120568,120569],{"__ignoreMap":25},[45,120570,120571,120573,120575],{"class":47,"line":48},[45,120572,24724],{"class":69},[45,120574,118683],{"class":62},[45,120576,120577],{"class":62}," ~\u002F.bashrc\n",[20,120579,120580],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[36,120582,120584],{"className":118623,"code":120583,"language":118625,"meta":25,"style":25},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[42,120585,120586,120598],{"__ignoreMap":25},[45,120587,120588,120590,120593,120595],{"class":47,"line":48},[45,120589,52],{"class":51},[45,120591,120592],{"class":55}," PATH",[45,120594,59],{"class":51},[45,120596,120597],{"class":55},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[45,120599,120600,120602,120605,120607],{"class":47,"line":66},[45,120601,52],{"class":51},[45,120603,120604],{"class":55}," LD_LIBRARY_PATH",[45,120606,59],{"class":51},[45,120608,120609],{"class":55},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[20,120611,120612],{},[23,120613],{"alt":25,"src":120614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[36,120616,120618],{"className":118623,"code":120617,"language":118625,"meta":25,"style":25},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[42,120619,120620,120625,120631,120636],{"__ignoreMap":25},[45,120621,120622],{"class":47,"line":48},[45,120623,120624],{"class":337},"# 刷新当前终端的环境变量\n",[45,120626,120627,120629],{"class":47,"line":66},[45,120628,100993],{"class":79},[45,120630,120577],{"class":62},[45,120632,120633],{"class":47,"line":1331},[45,120634,120635],{"class":337},"# 验证CUDA是否安装成功\n",[45,120637,120638,120641],{"class":47,"line":1346},[45,120639,120640],{"class":69},"nvcc",[45,120642,120643],{"class":79}," -V\n",[20,120645,120646],{},"出现下图这种则安装成功。",[20,120648,120649],{},[23,120650],{"alt":25,"src":120651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[249,120653,120655],{"id":120654},"_354-安装cudnn","3.5.4 安装cuDNN",[233,120657,120658],{},[169,120659,120660],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[20,120662,120663,120664,120669],{},"前往 NVIDIA cuDNN 下载页面：",[516,120665,120668],{"href":120666,"rel":120667},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24012],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[20,120671,120672],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[20,120674,120675],{},[23,120676],{"alt":25,"src":120677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[20,120679,120680],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[20,120682,120683],{},[23,120684],{"alt":25,"src":120685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[20,120687,120688],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[20,120690,120691],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[20,120693,120694],{},[427,120695,120696],{},"我这里选择所有Linux X86_64最通用的办法：",[20,120698,120699],{},"下载好的：",[20,120701,120702],{},[23,120703],{"alt":25,"src":120704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[233,120706,120707],{"start":66},[169,120708,120709],{},"安装cuDNN",[20,120711,120712],{},"找到该文件所在目录，并打开终端，cd到该目录。",[20,120714,120715],{},[23,120716],{"alt":25,"src":120717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[20,120719,120720],{},"解压文件，并复制到对应位置完成安装",[36,120722,120724],{"className":118623,"code":120723,"language":118625,"meta":25,"style":25},"# 解压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",[42,120725,120726,120731,120742,120747,120754,120759,120775,120789,120794,120805,120814,120818,120834],{"__ignoreMap":25},[45,120727,120728],{"class":47,"line":48},[45,120729,120730],{"class":337},"# 解压cuDNN文件\n",[45,120732,120733,120736,120739],{"class":47,"line":66},[45,120734,120735],{"class":69},"tar",[45,120737,120738],{"class":79}," -xvf",[45,120740,120741],{"class":62}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[45,120743,120744],{"class":47,"line":1331},[45,120745,120746],{"class":337},"# cd进文件夹\n",[45,120748,120749,120751],{"class":47,"line":1346},[45,120750,101376],{"class":79},[45,120752,120753],{"class":62}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[45,120755,120756],{"class":47,"line":1352},[45,120757,120758],{"class":337},"# 复制cuDNN文件到CUDA目录\n",[45,120760,120761,120763,120765,120768,120770,120773],{"class":47,"line":1366},[45,120762,24724],{"class":69},[45,120764,27961],{"class":62},[45,120766,120767],{"class":62}," include\u002Fcudnn",[45,120769,732],{"class":79},[45,120771,120772],{"class":62},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[45,120774,2824],{"class":55},[45,120776,120777,120779,120781,120784,120786],{"class":47,"line":1372},[45,120778,24724],{"class":69},[45,120780,27961],{"class":62},[45,120782,120783],{"class":62}," lib\u002Flibcudnn",[45,120785,732],{"class":79},[45,120787,120788],{"class":62},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[45,120790,120791],{"class":47,"line":1463},[45,120792,120793],{"class":337},"# 对比一下有没有缺文件\n",[45,120795,120796,120798,120801,120803],{"class":47,"line":1469},[45,120797,26861],{"class":69},[45,120799,120800],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[45,120802,732],{"class":79},[45,120804,2824],{"class":55},[45,120806,120807,120809,120812],{"class":47,"line":1481},[45,120808,26861],{"class":69},[45,120810,120811],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[45,120813,119348],{"class":79},[45,120815,120816],{"class":47,"line":1763},[45,120817,120397],{"class":337},[45,120819,120820,120822,120824,120827,120829,120831],{"class":47,"line":1768},[45,120821,24724],{"class":69},[45,120823,24727],{"class":62},[45,120825,120826],{"class":62}," a+r",[45,120828,120800],{"class":62},[45,120830,732],{"class":79},[45,120832,120833],{"class":55},"   \n",[45,120835,120836,120838,120840,120842,120844],{"class":47,"line":1774},[45,120837,24724],{"class":69},[45,120839,24727],{"class":62},[45,120841,120826],{"class":62},[45,120843,120811],{"class":62},[45,120845,119348],{"class":79},[233,120847,120848],{"start":1331},[169,120849,120850],{},"检查是否安装成功",[36,120852,120854],{"className":118623,"code":120853,"language":118625,"meta":25,"style":25},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[42,120855,120856,120861],{"__ignoreMap":25},[45,120857,120858],{"class":47,"line":48},[45,120859,120860],{"class":337},"# 检查cuDNN版本命令\n",[45,120862,120863,120866,120869,120871,120873,120876,120879],{"class":47,"line":66},[45,120864,120865],{"class":69},"cat",[45,120867,120868],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[45,120870,127],{"class":51},[45,120872,30336],{"class":69},[45,120874,120875],{"class":62}," CUDNN_MAJOR",[45,120877,120878],{"class":79}," -A",[45,120880,47823],{"class":79},[20,120882,120883],{},"出现下图这样的就是安装成功了",[20,120885,120886],{},[23,120887],{"alt":25,"src":120888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[233,120890,120891],{"start":1346},[169,120892,120893],{},"软链接(一般不需要)",[36,120895,120897],{"className":118623,"code":120896,"language":118625,"meta":25,"style":25},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[42,120898,120899,120904],{"__ignoreMap":25},[45,120900,120901],{"class":47,"line":48},[45,120902,120903],{"class":337},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[45,120905,120906,120908],{"class":47,"line":66},[45,120907,24724],{"class":69},[45,120909,120910],{"class":62}," ldconfig\n",[20,120912,120913],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[36,120915,120920],{"className":120916,"code":120917,"language":120918,"meta":120919,"style":25},"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",[42,120921,120922,120927,120932,120937,120942,120947,120952],{"__ignoreMap":25},[45,120923,120924],{"class":47,"line":48},[45,120925,120926],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[45,120928,120929],{"class":47,"line":66},[45,120930,120931],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[45,120933,120934],{"class":47,"line":1331},[45,120935,120936],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[45,120938,120939],{"class":47,"line":1346},[45,120940,120941],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[45,120943,120944],{"class":47,"line":1352},[45,120945,120946],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[45,120948,120949],{"class":47,"line":1366},[45,120950,120951],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[45,120953,120954],{"class":47,"line":1372},[45,120955,120956],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[20,120958,120959],{},"运行下方的命令",[36,120961,120963],{"className":118623,"code":120962,"language":118625,"meta":25,"style":25},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[42,120964,120965,120970,120977,120982],{"__ignoreMap":25},[45,120966,120967],{"class":47,"line":48},[45,120968,120969],{"class":337},"# cd进入CUDA路径\n",[45,120971,120972,120974],{"class":47,"line":66},[45,120973,101376],{"class":79},[45,120975,120976],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[45,120978,120979],{"class":47,"line":1331},[45,120980,120981],{"class":337}," # 查看本路径下的需要软链接的文件名\n",[45,120983,120984],{"class":47,"line":1346},[45,120985,120986],{"class":69}," ls\n",[20,120988,120989],{},[23,120990],{"alt":25,"src":120991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[20,120993,120994,120995,18559,120998,18559,121001,121004],{},"如上图，我需要将",[42,120996,120997],{},"libcudnn_xxx_xxxxx.so.8.9.7",[42,120999,121000],{},"libcudnn_xxx_xxxxx.so.8",[42,121002,121003],{},"libcudnn_xxx_xxxxx.so","软链接",[36,121006,121008],{"className":118623,"code":121007,"language":118625,"meta":25,"style":25},"# 创建符号链接。对于每个 .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",[42,121009,121010,121015,121031,121045,121059,121073,121087,121101,121115,121120,121126,121131],{"__ignoreMap":25},[45,121011,121012],{"class":47,"line":48},[45,121013,121014],{"class":337},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[45,121016,121017,121019,121022,121025,121028],{"class":47,"line":66},[45,121018,24724],{"class":69},[45,121020,121021],{"class":62}," ln",[45,121023,121024],{"class":79}," -sf",[45,121026,121027],{"class":62}," libcudnn_cnn_train.so.8.9.7",[45,121029,121030],{"class":62}," libcudnn_cnn_train.so.8\n",[45,121032,121033,121035,121037,121039,121042],{"class":47,"line":1331},[45,121034,24724],{"class":69},[45,121036,121021],{"class":62},[45,121038,121024],{"class":79},[45,121040,121041],{"class":62}," libcudnn_adv_infer.so.8.9.7",[45,121043,121044],{"class":62}," libcudnn_adv_infer.so.8\n",[45,121046,121047,121049,121051,121053,121056],{"class":47,"line":1346},[45,121048,24724],{"class":69},[45,121050,121021],{"class":62},[45,121052,121024],{"class":79},[45,121054,121055],{"class":62}," libcudnn_adv_train.so.8.9.7",[45,121057,121058],{"class":62}," libcudnn_adv_train.so.8\n",[45,121060,121061,121063,121065,121067,121070],{"class":47,"line":1352},[45,121062,24724],{"class":69},[45,121064,121021],{"class":62},[45,121066,121024],{"class":79},[45,121068,121069],{"class":62}," libcudnn_cnn_infer.so.8.9.7",[45,121071,121072],{"class":62}," libcudnn_cnn_infer.so.8\n",[45,121074,121075,121077,121079,121081,121084],{"class":47,"line":1366},[45,121076,24724],{"class":69},[45,121078,121021],{"class":62},[45,121080,121024],{"class":79},[45,121082,121083],{"class":62}," libcudnn.so.8.9.7",[45,121085,121086],{"class":62}," libcudnn.so.8\n",[45,121088,121089,121091,121093,121095,121098],{"class":47,"line":1372},[45,121090,24724],{"class":69},[45,121092,121021],{"class":62},[45,121094,121024],{"class":79},[45,121096,121097],{"class":62}," libcudnn_ops_infer.so.8.9.7",[45,121099,121100],{"class":62}," libcudnn_ops_infer.so.8\n",[45,121102,121103,121105,121107,121109,121112],{"class":47,"line":1463},[45,121104,24724],{"class":69},[45,121106,121021],{"class":62},[45,121108,121024],{"class":79},[45,121110,121111],{"class":62}," libcudnn_ops_train.so.8.9.7",[45,121113,121114],{"class":62}," libcudnn_ops_train.so.8\n",[45,121116,121117],{"class":47,"line":1469},[45,121118,121119],{"class":337},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[45,121121,121122,121124],{"class":47,"line":1481},[45,121123,24724],{"class":69},[45,121125,120910],{"class":62},[45,121127,121128],{"class":47,"line":1763},[45,121129,121130],{"class":337},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[45,121132,121133,121135,121138,121141,121143,121146],{"class":47,"line":1768},[45,121134,26861],{"class":69},[45,121136,121137],{"class":79}," -l",[45,121139,121140],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[45,121142,732],{"class":79},[45,121144,121145],{"class":62},".so",[45,121147,119348],{"class":79},[249,121149,121151],{"id":121150},"_355-常见问题","3.5.5 常见问题",[233,121153,121154],{},[169,121155,121156],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[36,121158,121160],{"className":118623,"code":121159,"language":118625,"meta":25,"style":25},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[42,121161,121162],{"__ignoreMap":25},[45,121163,121164,121166,121168],{"class":47,"line":48},[45,121165,24724],{"class":69},[45,121167,118683],{"class":62},[45,121169,121170],{"class":62}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[20,121172,121173],{},"blacklist-nouveau.conf文件内容如下：",[36,121175,121177],{"className":118623,"code":121176,"language":118625,"meta":25,"style":25},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[42,121178,121179,121187,121194,121206,121216],{"__ignoreMap":25},[45,121180,121181,121184],{"class":47,"line":48},[45,121182,121183],{"class":69},"blacklist",[45,121185,121186],{"class":62}," nouveau\n",[45,121188,121189,121191],{"class":47,"line":66},[45,121190,121183],{"class":69},[45,121192,121193],{"class":62}," lbm-nouveau\n",[45,121195,121196,121198,121201,121204],{"class":47,"line":1331},[45,121197,116030],{"class":69},[45,121199,121200],{"class":62}," nouveau",[45,121202,121203],{"class":62}," modeset=",[45,121205,3235],{"class":79},[45,121207,121208,121211,121213],{"class":47,"line":1346},[45,121209,121210],{"class":79},"alias",[45,121212,121200],{"class":62},[45,121214,121215],{"class":62}," off\n",[45,121217,121218,121220,121223],{"class":47,"line":1352},[45,121219,121210],{"class":79},[45,121221,121222],{"class":62}," lbm-nouveau",[45,121224,121215],{"class":62},[20,121226,121227],{},"接着运行下方命令",[36,121229,121231],{"className":118623,"code":121230,"language":118625,"meta":25,"style":25},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[42,121232,121233,121243,121248],{"__ignoreMap":25},[45,121234,121235,121237,121240],{"class":47,"line":48},[45,121236,24724],{"class":69},[45,121238,121239],{"class":62}," update-initramfs",[45,121241,121242],{"class":79}," -u\n",[45,121244,121245],{"class":47,"line":66},[45,121246,121247],{"class":69},"或者\n",[45,121249,121250,121252,121255],{"class":47,"line":1331},[45,121251,24724],{"class":69},[45,121253,121254],{"class":62}," dracut",[45,121256,121257],{"class":79}," --force\n",[20,121259,121260],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[36,121262,121264],{"className":118623,"code":121263,"language":118625,"meta":25,"style":25},"lsmod | grep nouveau\n",[42,121265,121266],{"__ignoreMap":25},[45,121267,121268,121271,121273,121275],{"class":47,"line":48},[45,121269,121270],{"class":69},"lsmod",[45,121272,127],{"class":51},[45,121274,30336],{"class":69},[45,121276,121186],{"class":62},[233,121278,121279],{"start":66},[169,121280,121281],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[36,121283,121285],{"className":118623,"code":121284,"language":118625,"meta":25,"style":25},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[42,121286,121287],{"__ignoreMap":25},[45,121288,121289,121291,121293],{"class":47,"line":48},[45,121290,24724],{"class":69},[45,121292,118683],{"class":62},[45,121294,121295],{"class":62}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[20,121297,121298],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[36,121300,121302],{"className":118623,"code":121301,"language":118625,"meta":25,"style":25},"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",[42,121303,121304,121312,121320,121328,121335,121343,121353,121361],{"__ignoreMap":25},[45,121305,121306,121309],{"class":47,"line":48},[45,121307,121308],{"class":69},"Section",[45,121310,121311],{"class":62}," \"OutputClass\"\n",[45,121313,121314,121317],{"class":47,"line":66},[45,121315,121316],{"class":69},"   Identifier",[45,121318,121319],{"class":62}," \"nvidia\"\n",[45,121321,121322,121325],{"class":47,"line":1331},[45,121323,121324],{"class":69},"   MatchDriver",[45,121326,121327],{"class":62}," \"nvidia-drm\"\n",[45,121329,121330,121333],{"class":47,"line":1346},[45,121331,121332],{"class":69},"   Driver",[45,121334,121319],{"class":62},[45,121336,121337,121340],{"class":47,"line":1352},[45,121338,121339],{"class":69},"   Option",[45,121341,121342],{"class":62}," \"AllowEmptyInitialConfiguration\"\n",[45,121344,121345,121347,121350],{"class":47,"line":1366},[45,121346,121339],{"class":69},[45,121348,121349],{"class":62}," \"PrimaryGPU\"",[45,121351,121352],{"class":62}," \"yes\"\n",[45,121354,121355,121358],{"class":47,"line":1372},[45,121356,121357],{"class":69},"   ModulePath",[45,121359,121360],{"class":62}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[45,121362,121363],{"class":47,"line":1463},[45,121364,121365],{"class":69},"EndSection\n",[233,121367,121368],{"start":1331},[169,121369,121370],{},"安装N卡驱动提示错误",[36,121372,121374],{"className":120916,"code":121373,"language":120918,"meta":120919,"style":25},"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",[42,121375,121376],{"__ignoreMap":25},[45,121377,121378],{"class":47,"line":48},[45,121379,121373],{},[233,121381,121382],{},[169,121383,121384],{},"检查当前运行的内核版本：",[20,121386,121387],{},"运行以下命令以查看你当前正在使用的内核版本：",[36,121389,121391],{"className":117396,"code":121390,"language":117398,"meta":25,"style":25},"uname -r\n",[42,121392,121393],{"__ignoreMap":25},[45,121394,121395,121397],{"class":47,"line":48},[45,121396,70304],{"class":69},[45,121398,121399],{"class":79}," -r\n",[233,121401,121402],{"start":66},[169,121403,121404],{},"安装内核开发文件：",[20,121406,121407,121408,121411],{},"确保你已经安装了与当前内核版本相匹配的 ",[42,121409,121410],{},"kernel-devel"," 包。运行以下命令来安装：",[36,121413,121415],{"className":117396,"code":121414,"language":117398,"meta":25,"style":25},"sudo dnf install kernel-devel-$(uname -r)\n",[42,121416,121417],{"__ignoreMap":25},[45,121418,121419,121421,121423,121425,121428,121430,121432,121434],{"class":47,"line":48},[45,121420,24724],{"class":69},[45,121422,26415],{"class":62},[45,121424,23981],{"class":62},[45,121426,121427],{"class":62}," kernel-devel-",[45,121429,117],{"class":55},[45,121431,70304],{"class":69},[45,121433,119739],{"class":79},[45,121435,139],{"class":55},[20,121437,121438],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[233,121440,121441],{"start":1331},[169,121442,121443],{},"安装内核源代码（如果需要）：",[20,121445,121446],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[36,121448,121450],{"className":117396,"code":121449,"language":117398,"meta":25,"style":25},"sudo dnf install kernel-headers kernel-source\n",[42,121451,121452],{"__ignoreMap":25},[45,121453,121454,121456,121458,121460,121463],{"class":47,"line":48},[45,121455,24724],{"class":69},[45,121457,26415],{"class":62},[45,121459,23981],{"class":62},[45,121461,121462],{"class":62}," kernel-headers",[45,121464,121465],{"class":62}," kernel-source\n",[233,121467,121468],{"start":1346},[169,121469,121470],{},"检查安装：",[20,121472,121473,121474,121477],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[42,121475,121476],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[36,121479,121481],{"className":117396,"code":121480,"language":117398,"meta":25,"style":25},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[42,121482,121483],{"__ignoreMap":25},[45,121484,121485,121487],{"class":47,"line":48},[45,121486,26861],{"class":69},[45,121488,121489],{"class":62}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[20,121491,121492,121493,121496],{},"如果仍然遇到问题，可以通过 ",[42,121494,121495],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[196,121498,121499],{},"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":25,"searchDepth":66,"depth":66,"links":121501},[121502,121506,121516,121520,121521],{"id":118599,"depth":66,"text":118600,"children":121503},[121504,121505],{"id":118609,"depth":1331,"text":118610},{"id":118619,"depth":1331,"text":118620},{"id":118819,"depth":66,"text":118820,"children":121507},[121508,121509,121510,121511,121512,121513,121514,121515],{"id":118823,"depth":1331,"text":118824},{"id":118893,"depth":1331,"text":118894},{"id":118982,"depth":1331,"text":118983},{"id":119227,"depth":1331,"text":119228},{"id":119297,"depth":1331,"text":119298},{"id":119364,"depth":1331,"text":119365},{"id":119399,"depth":1331,"text":119400},{"id":119454,"depth":1331,"text":119455},{"id":119505,"depth":66,"text":119506,"children":121517},[121518,121519],{"id":119509,"depth":1331,"text":119510},{"id":119589,"depth":1331,"text":119590},{"id":119775,"depth":66,"text":119776},{"id":119948,"depth":66,"text":119949,"children":121522},[121523,121524,121525,121526,121527],{"id":119952,"depth":1331,"text":119953},{"id":119993,"depth":1331,"text":119994},{"id":120280,"depth":1331,"text":120281},{"id":120654,"depth":1331,"text":120655},{"id":121150,"depth":1331,"text":121151},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118591,"description":204},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121534,"title":121535,"body":121536,"description":204,"extension":205,"meta":121876,"navigation":207,"path":121877,"seo":121878,"stem":121879,"__hash__":121880},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121537,"toc":121874},[121538,121541,121546,121549,121795,121800,121803,121839,121842,121871],[10,121539,121535],{"id":121540},"_4-命令教程长期积累",[233,121542,121543],{},[169,121544,121545],{},"大多数命令",[20,121547,121548],{},"常用 Linux 命令速查：",[36,121550,121552],{"className":117396,"code":121551,"language":117398,"meta":25,"style":25},"# 文件与目录\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",[42,121553,121554,121559,121566,121573,121581,121588,121595,121603,121611,121618,121625,121633,121637,121642,121649,121657,121664,121668,121673,121680,121688,121696,121704,121712,121716,121721,121729,121736,121743,121751,121759,121763,121768,121777,121786],{"__ignoreMap":25},[45,121555,121556],{"class":47,"line":48},[45,121557,121558],{"class":337},"# 文件与目录\n",[45,121560,121561,121563],{"class":47,"line":66},[45,121562,26861],{"class":69},[45,121564,121565],{"class":337},"        # 列出目录内容\n",[45,121567,121568,121570],{"class":47,"line":1331},[45,121569,101376],{"class":79},[45,121571,121572],{"class":337},"        # 切换目录\n",[45,121574,121575,121578],{"class":47,"line":1346},[45,121576,121577],{"class":79},"pwd",[45,121579,121580],{"class":337},"       # 显示当前路径\n",[45,121582,121583,121585],{"class":47,"line":1352},[45,121584,101366],{"class":69},[45,121586,121587],{"class":337},"     # 创建目录\n",[45,121589,121590,121592],{"class":47,"line":1366},[45,121591,25422],{"class":69},[45,121593,121594],{"class":337},"        # 删除文件或目录\n",[45,121596,121597,121600],{"class":47,"line":1372},[45,121598,121599],{"class":69},"cp",[45,121601,121602],{"class":337},"        # 复制文件或目录\n",[45,121604,121605,121608],{"class":47,"line":1463},[45,121606,121607],{"class":69},"mv",[45,121609,121610],{"class":337},"        # 移动\u002F重命名文件或目录\n",[45,121612,121613,121615],{"class":47,"line":1469},[45,121614,101383],{"class":69},[45,121616,121617],{"class":337},"     # 创建空文件\n",[45,121619,121620,121622],{"class":47,"line":1481},[45,121621,120865],{"class":69},[45,121623,121624],{"class":337},"       # 查看文件内容\n",[45,121626,121627,121630],{"class":47,"line":1763},[45,121628,121629],{"class":69},"head\u002Ftail",[45,121631,121632],{"class":337}," # 查看文件头部\u002F尾部\n",[45,121634,121635],{"class":47,"line":1768},[45,121636,2550],{"emptyLinePlaceholder":207},[45,121638,121639],{"class":47,"line":1774},[45,121640,121641],{"class":337},"# 权限管理\n",[45,121643,121644,121646],{"class":47,"line":1779},[45,121645,24759],{"class":69},[45,121647,121648],{"class":337},"     # 修改文件权限\n",[45,121650,121651,121654],{"class":47,"line":1793},[45,121652,121653],{"class":69},"chown",[45,121655,121656],{"class":337},"     # 修改文件所有者\n",[45,121658,121659,121661],{"class":47,"line":1798},[45,121660,24724],{"class":69},[45,121662,121663],{"class":337},"      # 以管理员身份执行\n",[45,121665,121666],{"class":47,"line":1804},[45,121667,2550],{"emptyLinePlaceholder":207},[45,121669,121670],{"class":47,"line":1825},[45,121671,121672],{"class":337},"# 系统信息\n",[45,121674,121675,121677],{"class":47,"line":1830},[45,121676,70304],{"class":69},[45,121678,121679],{"class":337},"     # 系统信息\n",[45,121681,121682,121685],{"class":47,"line":1844},[45,121683,121684],{"class":69},"df",[45,121686,121687],{"class":337},"        # 磁盘使用情况\n",[45,121689,121690,121693],{"class":47,"line":1849},[45,121691,121692],{"class":69},"free",[45,121694,121695],{"class":337},"      # 内存使用情况\n",[45,121697,121698,121701],{"class":47,"line":1878},[45,121699,121700],{"class":69},"top\u002Fhtop",[45,121702,121703],{"class":337},"  # 进程监控\n",[45,121705,121706,121709],{"class":47,"line":1883},[45,121707,121708],{"class":69},"ps",[45,121710,121711],{"class":337},"        # 查看进程\n",[45,121713,121714],{"class":47,"line":1900},[45,121715,2550],{"emptyLinePlaceholder":207},[45,121717,121718],{"class":47,"line":1905},[45,121719,121720],{"class":337},"# 网络\n",[45,121722,121723,121726],{"class":47,"line":1910},[45,121724,121725],{"class":69},"ping",[45,121727,121728],{"class":337},"      # 测试网络连通性\n",[45,121730,121731,121733],{"class":47,"line":1915},[45,121732,26949],{"class":69},[45,121734,121735],{"class":337},"      # 发送 HTTP 请求\n",[45,121737,121738,121740],{"class":47,"line":1929},[45,121739,120389],{"class":69},[45,121741,121742],{"class":337},"      # 下载文件\n",[45,121744,121745,121748],{"class":47,"line":1934},[45,121746,121747],{"class":69},"ssh",[45,121749,121750],{"class":337},"       # 远程登录\n",[45,121752,121753,121756],{"class":47,"line":2727},[45,121754,121755],{"class":69},"scp",[45,121757,121758],{"class":337},"       # 远程文件传输\n",[45,121760,121761],{"class":47,"line":2741},[45,121762,2550],{"emptyLinePlaceholder":207},[45,121764,121765],{"class":47,"line":2749},[45,121766,121767],{"class":337},"# 包管理（Debian\u002FUbuntu）\n",[45,121769,121770,121772,121774],{"class":47,"line":2754},[45,121771,117468],{"class":69},[45,121773,117447],{"class":62},[45,121775,121776],{"class":337},"   # 更新软件源\n",[45,121778,121779,121781,121783],{"class":47,"line":2760},[45,121780,117468],{"class":69},[45,121782,23981],{"class":62},[45,121784,121785],{"class":337},"  # 安装软件包\n",[45,121787,121788,121790,121792],{"class":47,"line":2766},[45,121789,117468],{"class":69},[45,121791,26179],{"class":62},[45,121793,121794],{"class":337},"   # 卸载软件包\n",[233,121796,121797],{"start":66},[169,121798,121799],{},"KDE Dolphin 以root打开",[20,121801,121802],{},"kde5",[36,121804,121806],{"className":117396,"code":121805,"language":117398,"meta":25,"style":25},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[42,121807,121808],{"__ignoreMap":25},[45,121809,121810,121813,121816,121819,121821,121823,121826,121829,121831,121834,121836],{"class":47,"line":48},[45,121811,121812],{"class":69},"pkexec",[45,121814,121815],{"class":62}," env",[45,121817,121818],{"class":62}," DISPLAY=",[45,121820,28243],{"class":55},[45,121822,28301],{"class":62},[45,121824,121825],{"class":55},"$XAUTHORITY ",[45,121827,121828],{"class":62},"KDE_SESSION_VERSION=",[45,121830,596],{"class":79},[45,121832,121833],{"class":62}," KDE_FULL_SESSION=",[45,121835,1514],{"class":79},[45,121837,121838],{"class":62}," dolphin\n",[20,121840,121841],{},"kde6",[36,121843,121845],{"className":117396,"code":121844,"language":117398,"meta":25,"style":25},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[42,121846,121847],{"__ignoreMap":25},[45,121848,121849,121851,121853,121855,121857,121859,121861,121863,121865,121867,121869],{"class":47,"line":48},[45,121850,121812],{"class":69},[45,121852,121815],{"class":62},[45,121854,121818],{"class":62},[45,121856,28243],{"class":55},[45,121858,28301],{"class":62},[45,121860,121825],{"class":55},[45,121862,121828],{"class":62},[45,121864,621],{"class":79},[45,121866,121833],{"class":62},[45,121868,1514],{"class":79},[45,121870,121838],{"class":62},[196,121872,121873],{},"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":25,"searchDepth":66,"depth":66,"links":121875},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121535,"description":204},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121882,"title":121883,"body":121884,"description":204,"extension":205,"meta":121898,"navigation":207,"path":121899,"seo":121900,"stem":121901,"__hash__":121902},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121885,"toc":121896},[121886,121889],[10,121887,121883],{"id":121888},"_5-各种环境配置",[20,121890,121891],{},[516,121892,121895],{"href":121893,"rel":121894},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24012],"电控组环境搭建大全",{"title":25,"searchDepth":66,"depth":66,"links":121897},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121883,"description":204},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121904,"title":121905,"body":121906,"description":204,"extension":205,"meta":122254,"navigation":207,"path":122255,"seo":122256,"stem":122257,"__hash__":122258},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121907,"toc":122246},[121908,121911,121915,121919,121923,121928,121935,121939,122232,122236,122243],[10,121909,121905],{"id":121910},"_6-拓展功能",[15,121912,121914],{"id":121913},"_61-wine","6.1 Wine",[15,121916,121918],{"id":121917},"_62-android","6.2 Android",[249,121920,121922],{"id":121921},"_621-i卡a卡","6.2.1 I卡、A卡",[233,121924,121925],{},[169,121926,121927],{},"Wayland-Waydroid(体验超级好)",[20,121929,121930,121931],{},"Waydroid 官网与安装指南：",[516,121932,121933],{"href":121933,"rel":121934},"https:\u002F\u002Fwaydro.id\u002F",[24012],[249,121936,121938],{"id":121937},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[233,121940,121941],{},[169,121942,121943,121944,121946,121947,121951,121953,121956,121961,122158],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53816,121945],{},"BlissOS 官网下载：",[516,121948,121949],{"href":121949,"rel":121950},"https:\u002F\u002Fblissos.org\u002F",[24012],[53816,121952],{},[23,121954],{"alt":25,"src":121955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[233,121957,121958],{"start":1331},[169,121959,121960],{},"比较推荐的配置",[36,121962,121964],{"className":117396,"code":121963,"language":117398,"meta":25,"style":25},"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",[42,121965,121966,121973,121983,121993,122003,122015,122025,122032,122042,122051,122060,122070,122080,122089,122099,122109,122121,122131,122140,122150],{"__ignoreMap":25},[45,121967,121968,121971],{"class":47,"line":48},[45,121969,121970],{"class":69},"qemu-system-x86_64",[45,121972,24826],{"class":79},[45,121974,121975,121978,121981],{"class":47,"line":66},[45,121976,121977],{"class":79},"        -M",[45,121979,121980],{"class":62}," q35,vmport=off",[45,121982,24826],{"class":79},[45,121984,121985,121988,121991],{"class":47,"line":1331},[45,121986,121987],{"class":79},"        -accel",[45,121989,121990],{"class":62}," kvm",[45,121992,24826],{"class":79},[45,121994,121995,121998,122001],{"class":47,"line":1346},[45,121996,121997],{"class":79},"        -cpu",[45,121999,122000],{"class":62}," qemu64,+sse3,+sse4.2",[45,122002,24826],{"class":79},[45,122004,122005,122008,122011,122013],{"class":47,"line":1352},[45,122006,122007],{"class":79},"        -smp",[45,122009,122010],{"class":62}," 8,cores=",[45,122012,570],{"class":79},[45,122014,24826],{"class":79},[45,122016,122017,122020,122023],{"class":47,"line":1366},[45,122018,122019],{"class":79},"        -m",[45,122021,122022],{"class":62}," 6G",[45,122024,24826],{"class":79},[45,122026,122027,122030],{"class":47,"line":1372},[45,122028,122029],{"class":79},"        -usb",[45,122031,24826],{"class":79},[45,122033,122034,122037,122040],{"class":47,"line":1463},[45,122035,122036],{"class":79},"        -device",[45,122038,122039],{"class":62}," virtio-tablet",[45,122041,24826],{"class":79},[45,122043,122044,122046,122049],{"class":47,"line":1469},[45,122045,122036],{"class":79},[45,122047,122048],{"class":62}," virtio-keyboard",[45,122050,24826],{"class":79},[45,122052,122053,122055,122058],{"class":47,"line":1481},[45,122054,122036],{"class":79},[45,122056,122057],{"class":62}," usb-tablet",[45,122059,24826],{"class":79},[45,122061,122062,122065,122068],{"class":47,"line":1763},[45,122063,122064],{"class":79},"        -bios",[45,122066,122067],{"class":62}," OVMF-pure-efi64.fd",[45,122069,24826],{"class":79},[45,122071,122072,122075,122078],{"class":47,"line":1768},[45,122073,122074],{"class":79},"        -net",[45,122076,122077],{"class":62}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[45,122079,24826],{"class":79},[45,122081,122082,122084,122087],{"class":47,"line":1774},[45,122083,122074],{"class":79},[45,122085,122086],{"class":62}," nic,model=virtio",[45,122088,24826],{"class":79},[45,122090,122091,122094,122097],{"class":47,"line":1779},[45,122092,122093],{"class":79},"        -audio",[45,122095,122096],{"class":62}," sdl,model=hda",[45,122098,24826],{"class":79},[45,122100,122101,122104,122107],{"class":47,"line":1793},[45,122102,122103],{"class":79},"        -display",[45,122105,122106],{"class":62}," sdl,gl=on,show-cursor=on",[45,122108,24826],{"class":79},[45,122110,122111,122113,122116,122119],{"class":47,"line":1798},[45,122112,122036],{"class":79},[45,122114,122115],{"class":62}," virtio-vga-gl,xres=1920,yres=",[45,122117,122118],{"class":79},"1080",[45,122120,24826],{"class":79},[45,122122,122123,122126,122129],{"class":47,"line":1804},[45,122124,122125],{"class":79},"        -drive",[45,122127,122128],{"class":62}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[45,122130,24826],{"class":79},[45,122132,122133,122135,122138],{"class":47,"line":1825},[45,122134,122125],{"class":79},[45,122136,122137],{"class":62}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[45,122139,24826],{"class":79},[45,122141,122142,122145,122148],{"class":47,"line":1830},[45,122143,122144],{"class":79},"        -monitor",[45,122146,122147],{"class":62}," stdio",[45,122149,24826],{"class":79},[45,122151,122152,122155],{"class":47,"line":1844},[45,122153,122154],{"class":79},"        -serial",[45,122156,122157],{"class":62}," none\n",[233,122159,122160],{"start":1352},[169,122161,122162,122163],{},"常用操作：",[233,122164,122165,122168,122224],{},[169,122166,122167],{},"全屏：Ctrl+Alt+F",[169,122169,122170,122171,122176],{},"adb调试",[233,122172,122173],{},[169,122174,122175],{},"使Linux与Android用ADB连接。",[36,122177,122179],{"className":117396,"code":122178,"language":117398,"meta":25,"style":25},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[42,122180,122181,122186,122197,122202,122214,122219],{"__ignoreMap":25},[45,122182,122183],{"class":47,"line":48},[45,122184,122185],{"class":337},"# 连接安卓\n",[45,122187,122188,122191,122194],{"class":47,"line":66},[45,122189,122190],{"class":69},"adb",[45,122192,122193],{"class":62}," connect",[45,122195,122196],{"class":79}," 127.0.0.1\n",[45,122198,122199],{"class":47,"line":1331},[45,122200,122201],{"class":337},"# 打开shell\n",[45,122203,122204,122206,122208,122211],{"class":47,"line":1346},[45,122205,122190],{"class":69},[45,122207,26983],{"class":79},[45,122209,122210],{"class":62}," 127.0.0.1:5555",[45,122212,122213],{"class":62}," shell\n",[45,122215,122216],{"class":47,"line":1352},[45,122217,122218],{"class":337},"# 使用root权限\n",[45,122220,122221],{"class":47,"line":1366},[45,122222,122223],{"class":69},"su\n",[169,122225,122226,122227],{},"中文输入法",[233,122228,122229],{},[169,122230,122231],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[15,122233,122235],{"id":122234},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[20,122237,122238,122239],{},"rEFInd 官网与文档：",[516,122240,122241],{"href":122241,"rel":122242},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24012],[196,122244,122245],{},"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":25,"searchDepth":66,"depth":66,"links":122247},[122248,122249,122253],{"id":121913,"depth":66,"text":121914},{"id":121917,"depth":66,"text":121918,"children":122250},[122251,122252],{"id":121921,"depth":1331,"text":121922},{"id":121937,"depth":1331,"text":121938},{"id":122234,"depth":66,"text":122235},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121905,"description":204},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122260,"title":122261,"body":122262,"description":204,"extension":205,"meta":125561,"navigation":207,"path":125562,"seo":125563,"stem":125564,"__hash__":125565},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122263,"toc":125535},[122264,122267,122271,122274,122281,122531,122534,122606,122609,122613,122617,122622,122625,122628,122631,122636,122639,122642,122645,122650,122653,122658,122661,122664,122669,122672,122677,122680,122684,122688,122691,122696,122699,122713,122716,122719,122728,122731,122740,122743,122746,122755,122758,122767,122770,122773,122782,122785,122788,122803,122806,122809,122818,122823,122826,122829,122838,122841,122850,122853,122862,122865,122874,122879,122882,122890,122895,122898,122907,122910,122918,122923,122926,122935,122938,122941,122945,122948,122953,122956,122961,122975,122980,122985,122996,123001,123007,123012,123027,123032,123035,123040,123045,123050,123058,123063,123070,123075,123086,123091,123094,123098,123101,123104,123109,123112,123131,123136,123139,123148,123153,123156,123178,123181,123211,123214,123219,123222,123236,123241,123260,123263,123266,123271,123283,123288,123293,123296,123301,123304,123319,123322,123327,123332,123336,123341,123381,123384,123388,123394,123400,123405,123408,123415,123420,123427,123430,123433,123440,123454,123457,123517,123520,123534,123546,123549,123552,123555,123619,123622,123625,123628,123648,123651,123656,123663,123667,123670,123674,123679,123684,123688,123691,123694,123736,123741,123744,123766,123781,123783,123788,123800,123860,123862,123864,123918,123920,123922,123928,123933,123936,123941,123945,123948,124010,124015,124018,124020,124024,124036,124118,124120,124122,124176,124182,124184,124188,124193,124195,124200,124204,124224,124259,124263,124266,124269,124272,124279,124282,124294,124297,124312,124315,124334,124382,124385,124402,124405,124419,124424,124427,124436,124451,124463,124501,124506,124515,124520,124525,124551,124560,124564,124568,124573,124576,124580,124584,124589,124592,124597,124600,124605,124608,124613,124616,124620,124625,124628,124633,124636,124640,124645,124648,124653,124656,124661,124664,124668,124673,124676,124681,124684,124689,124692,124696,124701,124704,124709,124712,124717,124720,124725,124728,124733,124736,124741,124744,124748,124753,124756,124761,124768,124772,124777,124780,124785,124788,124792,124797,124800,124803,124806,124809,124812,124816,124819,124829,124834,124839,124861,124866,124871,124878,124882,124887,124890,124893,124898,124901,124904,124907,124910,124913,124916,124919,124922,124925,124928,124931,124934,124939,124944,124949,124954,124959,124964,124969,124972,124976,124979,124983,124988,124993,124998,125003,125007,125013,125021,125026,125029,125034,125049,125052,125057,125091,125106,125109,125164,125190,125202,125205,125214,125217,125232,125237,125240,125246,125251,125254,125259,125262,125267,125272,125279,125282,125297,125300,125335,125340,125348,125386,125389,125392,125397,125400,125405,125416,125450,125455,125458,125467,125472,125478,125481,125486,125495,125500,125503,125506,125511,125519,125522,125527,125532],[10,122265,122261],{"id":122266},"_7-其他操作",[15,122268,122270],{"id":122269},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[20,122272,122273],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[20,122275,122276,122277,122280],{},"进入工控机的硬盘目录，进入",[42,122278,122279],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[36,122282,122286],{"className":122283,"code":122284,"language":122285,"meta":25,"style":25},"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",[42,122287,122288,122296,122307,122314,122321,122333,122340,122352,122363,122374,122381,122388,122395,122407,122419,122426,122438,122450,122457,122469,122481,122493,122504,122511,122522],{"__ignoreMap":25},[45,122289,122290,122293],{"class":47,"line":48},[45,122291,122292],{"class":51400},"network",[45,122294,122295],{"class":55},": \n",[45,122297,122298,122301,122303,122305],{"class":47,"line":66},[45,122299,122300],{"class":51400},"  version",[45,122302,51537],{"class":55},[45,122304,356],{"class":79},[45,122306,2824],{"class":55},[45,122308,122309,122312],{"class":47,"line":1331},[45,122310,122311],{"class":51400},"  wifis",[45,122313,122295],{"class":55},[45,122315,122316,122319],{"class":47,"line":1346},[45,122317,122318],{"class":51400},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[45,122320,122295],{"class":55},[45,122322,122323,122326,122328,122331],{"class":47,"line":1352},[45,122324,122325],{"class":51400},"      renderer",[45,122327,51537],{"class":55},[45,122329,122330],{"class":62},"NetworkManager",[45,122332,2824],{"class":55},[45,122334,122335,122338],{"class":47,"line":1366},[45,122336,122337],{"class":51400},"      match",[45,122339,122295],{"class":55},[45,122341,122342,122345,122347,122350],{"class":47,"line":1372},[45,122343,122344],{"class":51400},"        name",[45,122346,51537],{"class":55},[45,122348,122349],{"class":62},"\"wlan0\"",[45,122351,2824],{"class":55},[45,122353,122354,122357,122359,122361],{"class":47,"line":1463},[45,122355,122356],{"class":51400},"      dhcp4",[45,122358,51537],{"class":55},[45,122360,1514],{"class":79},[45,122362,2824],{"class":55},[45,122364,122365,122368,122370,122372],{"class":47,"line":1469},[45,122366,122367],{"class":51400},"      dhcp6",[45,122369,51537],{"class":55},[45,122371,1514],{"class":79},[45,122373,2824],{"class":55},[45,122375,122376,122379],{"class":47,"line":1481},[45,122377,122378],{"class":51400},"      access-points",[45,122380,122295],{"class":55},[45,122382,122383,122386],{"class":47,"line":1763},[45,122384,122385],{"class":62},"        \"EMIS_Vinci_Robocon_5G\"",[45,122387,122295],{"class":55},[45,122389,122390,122393],{"class":47,"line":1768},[45,122391,122392],{"class":51400},"          auth",[45,122394,122295],{"class":55},[45,122396,122397,122400,122402,122405],{"class":47,"line":1774},[45,122398,122399],{"class":51400},"            key-management",[45,122401,51537],{"class":55},[45,122403,122404],{"class":62},"\"psk\"",[45,122406,2824],{"class":55},[45,122408,122409,122412,122414,122417],{"class":47,"line":1779},[45,122410,122411],{"class":51400},"            password",[45,122413,51537],{"class":55},[45,122415,122416],{"class":62},"\"vinci666\"",[45,122418,2824],{"class":55},[45,122420,122421,122424],{"class":47,"line":1793},[45,122422,122423],{"class":51400},"          networkmanager",[45,122425,122295],{"class":55},[45,122427,122428,122431,122433,122436],{"class":47,"line":1798},[45,122429,122430],{"class":51400},"            uuid",[45,122432,51537],{"class":55},[45,122434,122435],{"class":62},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[45,122437,2824],{"class":55},[45,122439,122440,122443,122445,122448],{"class":47,"line":1804},[45,122441,122442],{"class":51400},"            name",[45,122444,51537],{"class":55},[45,122446,122447],{"class":62},"\"EMIS_Vinci_Robocon_5G\"",[45,122449,2824],{"class":55},[45,122451,122452,122455],{"class":47,"line":1825},[45,122453,122454],{"class":51400},"            passthrough",[45,122456,122295],{"class":55},[45,122458,122459,122462,122464,122467],{"class":47,"line":1830},[45,122460,122461],{"class":51400},"              wifi-security.auth-alg",[45,122463,51537],{"class":55},[45,122465,122466],{"class":62},"\"open\"",[45,122468,2824],{"class":55},[45,122470,122471,122474,122476,122479],{"class":47,"line":1844},[45,122472,122473],{"class":51400},"              ipv6.addr-gen-mode",[45,122475,51537],{"class":55},[45,122477,122478],{"class":62},"\"default\"",[45,122480,2824],{"class":55},[45,122482,122483,122486,122488,122491],{"class":47,"line":1849},[45,122484,122485],{"class":51400},"              ipv6.ip6-privacy",[45,122487,51537],{"class":55},[45,122489,122490],{"class":62},"\"-1\"",[45,122492,2824],{"class":55},[45,122494,122495,122498,122500,122502],{"class":47,"line":1878},[45,122496,122497],{"class":51400},"              proxy._",[45,122499,51537],{"class":55},[45,122501,7802],{"class":62},[45,122503,2824],{"class":55},[45,122505,122506,122509],{"class":47,"line":1883},[45,122507,122508],{"class":51400},"      networkmanager",[45,122510,122295],{"class":55},[45,122512,122513,122516,122518,122520],{"class":47,"line":1900},[45,122514,122515],{"class":51400},"        uuid",[45,122517,51537],{"class":55},[45,122519,122435],{"class":62},[45,122521,2824],{"class":55},[45,122523,122524,122526,122528],{"class":47,"line":1905},[45,122525,122344],{"class":51400},[45,122527,51537],{"class":55},[45,122529,122530],{"class":62},"\"EMIS_Vinci_Robocon_5G\"\n",[20,122532,122533],{},"将其改为新wifi的名和密码：",[36,122535,122537],{"className":122283,"code":122536,"language":122285,"meta":25,"style":25},"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",[42,122538,122539,122545,122554,122560,122567,122576,122584,122590,122596],{"__ignoreMap":25},[45,122540,122541,122543],{"class":47,"line":48},[45,122542,122292],{"class":51400},[45,122544,3889],{"class":55},[45,122546,122547,122549,122551],{"class":47,"line":66},[45,122548,122300],{"class":51400},[45,122550,51537],{"class":55},[45,122552,122553],{"class":79},"2\n",[45,122555,122556,122558],{"class":47,"line":1331},[45,122557,122311],{"class":51400},[45,122559,3889],{"class":55},[45,122561,122562,122565],{"class":47,"line":1346},[45,122563,122564],{"class":51400},"    wlan0",[45,122566,3889],{"class":55},[45,122568,122569,122571,122573],{"class":47,"line":1352},[45,122570,122356],{"class":51400},[45,122572,51537],{"class":55},[45,122574,122575],{"class":79},"true\n",[45,122577,122578,122580,122582],{"class":47,"line":1366},[45,122579,122367],{"class":51400},[45,122581,51537],{"class":55},[45,122583,122575],{"class":79},[45,122585,122586,122588],{"class":47,"line":1372},[45,122587,122378],{"class":51400},[45,122589,3889],{"class":55},[45,122591,122592,122594],{"class":47,"line":1463},[45,122593,122385],{"class":62},[45,122595,3889],{"class":55},[45,122597,122598,122601,122603],{"class":47,"line":1469},[45,122599,122600],{"class":51400},"          password",[45,122602,51537],{"class":55},[45,122604,122605],{"class":62},"\"vinci666\"\n",[20,122607,122608],{},"工控机开机即可连上网。",[15,122610,122612],{"id":122611},"_72-ssh远程开发","7.2 SSH远程开发",[249,122614,122616],{"id":122615},"_721-环境准备","7.2.1 环境准备",[20,122618,122619],{},[427,122620,122621],{},"1.硬件准备",[20,122623,122624],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[20,122626,122627],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[20,122629,122630],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[20,122632,122633],{},[427,122634,122635],{},"2.设置固定IP",[20,122637,122638],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[20,122640,122641],{},"1.进入设置界面",[20,122643,122644],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[20,122646,122647],{},[23,122648],{"alt":25,"src":122649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[20,122651,122652],{},"2.配置所连接的网络",[20,122654,122655],{},[23,122656],{"alt":25,"src":122657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[20,122659,122660],{},"3.设置固定IP",[20,122662,122663],{},"查看当前IP地址。",[20,122665,122666],{},[23,122667],{"alt":25,"src":122668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[20,122670,122671],{},"设置固定IP。",[20,122673,122674],{},[23,122675],{"alt":25,"src":122676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[20,122678,122679],{},"至此，IP配置完毕。",[249,122681,122683],{"id":122682},"_722-环境搭建","7.2.2 环境搭建",[20,122685,122686],{},[427,122687,25853],{},[20,122689,122690],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[20,122692,122693],{},[427,122694,122695],{},"实现",[20,122697,122698],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[233,122700,122701,122704,122707,122710],{},[169,122702,122703],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[169,122705,122706],{},"远程主机启动SSH服务；",[169,122708,122709],{},"本地主机登陆远程主机；",[169,122711,122712],{},"实现数据传输。",[20,122714,122715],{},"1.安装SSH客户端与服务端",[20,122717,122718],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[36,122720,122722],{"className":120916,"code":122721,"language":120918,"meta":120919,"style":25}," sudo apt install openssh-server\n",[42,122723,122724],{"__ignoreMap":25},[45,122725,122726],{"class":47,"line":48},[45,122727,122721],{},[20,122729,122730],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[36,122732,122734],{"className":120916,"code":122733,"language":120918,"meta":120919,"style":25},"sudo apt install openssh-client\n",[42,122735,122736],{"__ignoreMap":25},[45,122737,122738],{"class":47,"line":48},[45,122739,122733],{},[20,122741,122742],{},"2.远程主机启动SSH服务",[20,122744,122745],{},"远程主机启动 ssh 服务命令如下：",[36,122747,122749],{"className":120916,"code":122748,"language":120918,"meta":120919,"style":25},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[42,122750,122751],{"__ignoreMap":25},[45,122752,122753],{"class":47,"line":48},[45,122754,122748],{},[20,122756,122757],{},"启动后可使用如下命令查看服务是否正常运行：",[36,122759,122761],{"className":120916,"code":122760,"language":120918,"meta":120919,"style":25},"ps -e | grep ssh\n",[42,122762,122763],{"__ignoreMap":25},[45,122764,122765],{"class":47,"line":48},[45,122766,122760],{},[20,122768,122769],{},"如果启动成功，会包含 sshd 程序。",[20,122771,122772],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[36,122774,122776],{"className":120916,"code":122775,"language":120918,"meta":120919,"style":25},"sudo systemctl enable ssh\n",[42,122777,122778],{"__ignoreMap":25},[45,122779,122780],{"class":47,"line":48},[45,122781,122775],{},[20,122783,122784],{},"3.本地远程登录",[20,122786,122787],{},"登录远程主机可以调用如下命令:",[36,122789,122791],{"className":117396,"code":122790,"language":117398,"meta":25,"style":25},"ssh -X 用户名@ip地址\n",[42,122792,122793],{"__ignoreMap":25},[45,122794,122795,122797,122800],{"class":47,"line":48},[45,122796,121747],{"class":69},[45,122798,122799],{"class":79}," -X",[45,122801,122802],{"class":62}," 用户名@ip地址\n",[20,122804,122805],{},"然后根据提示，录入登陆密码，即可成功登录。",[20,122807,122808],{},"如果退出，可以调用exit命令：",[36,122810,122812],{"className":120916,"code":122811,"language":120918,"meta":120919,"style":25},"exit\n",[42,122813,122814],{"__ignoreMap":25},[45,122815,122816],{"class":47,"line":48},[45,122817,122811],{},[20,122819,122820],{},[427,122821,122822],{},"4.实现数据传输",[20,122824,122825],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[20,122827,122828],{},"上传文件指令格式如下：",[36,122830,122832],{"className":120916,"code":122831,"language":120918,"meta":120919,"style":25},"scp 本地文件路径 账号@ip:路径\n",[42,122833,122834],{"__ignoreMap":25},[45,122835,122836],{"class":47,"line":48},[45,122837,122831],{},[20,122839,122840],{},"上传文件夹指令格式如下：",[36,122842,122844],{"className":120916,"code":122843,"language":120918,"meta":120919,"style":25},"scp -r 本地文件夹路径 账号@ip:路径\n",[42,122845,122846],{"__ignoreMap":25},[45,122847,122848],{"class":47,"line":48},[45,122849,122843],{},[20,122851,122852],{},"下载文件指令格式如下：",[36,122854,122856],{"className":120916,"code":122855,"language":120918,"meta":120919,"style":25},"scp 账号@ip:路径 本地文件夹路径\n",[42,122857,122858],{"__ignoreMap":25},[45,122859,122860],{"class":47,"line":48},[45,122861,122855],{},[20,122863,122864],{},"下载文件夹指令格式如下：",[36,122866,122868],{"className":120916,"code":122867,"language":120918,"meta":120919,"style":25},"scp -r 账号@ip:路径 本地文件夹路径\n",[42,122869,122870],{"__ignoreMap":25},[45,122871,122872],{"class":47,"line":48},[45,122873,122867],{},[20,122875,122876],{},[427,122877,122878],{},"优化",[20,122880,122881],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[233,122883,122884,122887],{},[169,122885,122886],{},"本地生成密钥对；",[169,122888,122889],{},"将公钥上传至远程主机。",[20,122891,122892],{},[427,122893,122894],{},"1.生成密钥对",[20,122896,122897],{},"本地客户端生成公私钥：（一路回车默认即可）",[36,122899,122901],{"className":120916,"code":122900,"language":120918,"meta":120919,"style":25},"ssh-keygen\n",[42,122902,122903],{"__ignoreMap":25},[45,122904,122905],{"class":47,"line":48},[45,122906,122900],{},[20,122908,122909],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[233,122911,122912,122915],{},[169,122913,122914],{},"id_rsa （私钥）；",[169,122916,122917],{},"id_rsa.pub (公钥)。",[20,122919,122920],{},[427,122921,122922],{},"2.公钥上传",[20,122924,122925],{},"上传指令如下：",[36,122927,122929],{"className":120916,"code":122928,"language":120918,"meta":120919,"style":25},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[42,122930,122931],{"__ignoreMap":25},[45,122932,122933],{"class":47,"line":48},[45,122934,122928],{},[20,122936,122937],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[20,122939,122940],{},"以后再远程登录就无需录入密码了。",[249,122942,122944],{"id":122943},"_723-使用vscode优化","7.2.3 使用VScode优化",[20,122946,122947],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[20,122949,122950],{},[427,122951,122952],{},"1.准备工作",[20,122954,122955],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[20,122957,122958],{},[427,122959,122960],{},"2.为VScode安装远程开发插件",[20,122962,122963,122964,122967,122968,122971,122972,28485],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[42,122965,122966],{},"扩展：商店","的搜索栏输入",[42,122969,122970],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[42,122973,122974],{},"安装",[20,122976,122977],{},[23,122978],{"alt":25,"src":122979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[20,122981,122982],{},[427,122983,122984],{},"3.配置远程连接",[20,122986,122987,122988,122991,122992,122995],{},"步骤1：使用快捷键",[42,122989,122990],{},"ctrl + shift + p","打开命令输入窗口，并输入",[42,122993,122994],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[20,122997,122998],{},[23,122999],{"alt":25,"src":123000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[20,123002,123003,123004,28485],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[42,123005,123006],{},"Add New SSH Host",[20,123008,123009],{},[23,123010],{"alt":25,"src":123011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[20,123013,123014,123015,123018,123019,123022,123023,123026],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[42,123016,123017],{},"ssh +X ubuntu@192.168.43.164","，其中，",[42,123020,123021],{},"ubuntu","需要替换为你的登录用户名，",[42,123024,123025],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[20,123028,123029],{},[23,123030],{"alt":25,"src":123031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[20,123033,123034],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[20,123036,123037],{},[23,123038],{"alt":25,"src":123039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[20,123041,123042],{},[23,123043],{"alt":25,"src":123044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[20,123046,123047],{},[427,123048,123049],{},"4.使用",[20,123051,123052,123053,122991,123055,123057],{},"步骤1：继续使用快捷键",[42,123054,122990],{},[42,123056,122994],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[20,123059,123060],{},[23,123061],{"alt":25,"src":123062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[20,123064,123065,123066,123069],{},"或者，也可以点击侧边栏的",[42,123067,123068],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[20,123071,123072],{},[23,123073],{"alt":25,"src":123074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[20,123076,123077,123078,123081,123082,123085],{},"步骤2：选择菜单栏的",[42,123079,123080],{},"文件","下的",[42,123083,123084],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[20,123087,123088],{},[23,123089],{"alt":25,"src":123090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[20,123092,123093],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[15,123095,123097],{"id":123096},"_73-远程桌面","7.3 远程桌面",[20,123099,123100],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[20,123102,123103],{},"我们选择使用VNC来看。",[233,123105,123106],{},[169,123107,123108],{},"安装VNC服务器：",[20,123110,123111],{},"这里以TigerVNC为例进行安装：",[36,123113,123115],{"className":117396,"code":123114,"language":117398,"meta":25,"style":25},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[42,123116,123117],{"__ignoreMap":25},[45,123118,123119,123121,123123,123125,123128],{"class":47,"line":48},[45,123120,24724],{"class":69},[45,123122,117417],{"class":62},[45,123124,23981],{"class":62},[45,123126,123127],{"class":62}," tigervnc-standalone-server",[45,123129,123130],{"class":62}," tigervnc-common\n",[233,123132,123133],{"start":66},[169,123134,123135],{},"设置VNC密码：",[20,123137,123138],{},"为VNC用户设置密码，运行以下命令：",[36,123140,123142],{"className":117396,"code":123141,"language":117398,"meta":25,"style":25},"vncpasswd\n",[42,123143,123144],{"__ignoreMap":25},[45,123145,123146],{"class":47,"line":48},[45,123147,123141],{"class":69},[233,123149,123150],{"start":1331},[169,123151,123152],{},"配置VNC启动脚本:",[20,123154,123155],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[36,123157,123159],{"className":117396,"code":123158,"language":117398,"meta":25,"style":25},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[42,123160,123161,123170],{"__ignoreMap":25},[45,123162,123163,123165,123167],{"class":47,"line":48},[45,123164,101366],{"class":69},[45,123166,29316],{"class":79},[45,123168,123169],{"class":62}," ~\u002F.vnc\n",[45,123171,123172,123175],{"class":47,"line":66},[45,123173,123174],{"class":69},"nano",[45,123176,123177],{"class":62}," ~\u002F.vnc\u002Fxstartup\n",[20,123179,123180],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[36,123182,123184],{"className":117396,"code":123183,"language":117398,"meta":25,"style":25},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[42,123185,123186,123191,123199,123206],{"__ignoreMap":25},[45,123187,123188],{"class":47,"line":48},[45,123189,123190],{"class":337},"#!\u002Fbin\u002Fsh\n",[45,123192,123193,123196],{"class":47,"line":66},[45,123194,123195],{"class":79},"unset",[45,123197,123198],{"class":62}," SESSION_MANAGER\n",[45,123200,123201,123203],{"class":47,"line":1331},[45,123202,123195],{"class":79},[45,123204,123205],{"class":62}," DBUS_SESSION_BUS_ADDRESS\n",[45,123207,123208],{"class":47,"line":1346},[45,123209,123210],{"class":69},"gnome-session\n",[20,123212,123213],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[233,123215,123216],{"start":1346},[169,123217,123218],{},"给予执行权限：",[20,123220,123221],{},"为xstartup文件设置执行权限：",[36,123223,123225],{"className":117396,"code":123224,"language":117398,"meta":25,"style":25},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[42,123226,123227],{"__ignoreMap":25},[45,123228,123229,123231,123234],{"class":47,"line":48},[45,123230,24759],{"class":69},[45,123232,123233],{"class":62}," +x",[45,123235,123177],{"class":62},[233,123237,123238],{"start":1352},[169,123239,123240],{},"启动VNC服务器：",[36,123242,123244],{"className":117396,"code":123243,"language":117398,"meta":25,"style":25},"vncserver -geometry 1920x1080 -localhost=0\n",[42,123245,123246],{"__ignoreMap":25},[45,123247,123248,123251,123254,123257],{"class":47,"line":48},[45,123249,123250],{"class":69},"vncserver",[45,123252,123253],{"class":79}," -geometry",[45,123255,123256],{"class":62}," 1920x1080",[45,123258,123259],{"class":79}," -localhost=0\n",[20,123261,123262],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[20,123264,123265],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[233,123267,123268],{"start":1366},[169,123269,123270],{},"查看已开启的VNC服务器：",[36,123272,123274],{"className":117396,"code":123273,"language":117398,"meta":25,"style":25},"vncserver -list\n",[42,123275,123276],{"__ignoreMap":25},[45,123277,123278,123280],{"class":47,"line":48},[45,123279,123250],{"class":69},[45,123281,123282],{"class":79}," -list\n",[20,123284,123285],{},[23,123286],{"alt":25,"src":123287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[233,123289,123290],{"start":1372},[169,123291,123292],{},"连接到VNC服务器：",[20,123294,123295],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[233,123297,123298],{"start":1463},[169,123299,123300],{},"停止VNC服务器：",[20,123302,123303],{},"如果需要停止VNC服务器，可以使用以下命令：",[36,123305,123307],{"className":117396,"code":123306,"language":117398,"meta":25,"style":25},"vncserver -kill :1\n",[42,123308,123309],{"__ignoreMap":25},[45,123310,123311,123313,123316],{"class":47,"line":48},[45,123312,123250],{"class":69},[45,123314,123315],{"class":79}," -kill",[45,123317,123318],{"class":62}," :1\n",[20,123320,123321],{},"将:1替换为你实际使用的显示编号。",[20,123323,123324],{},[23,123325],{"alt":25,"src":123326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[20,123328,123329],{},[23,123330],{"alt":25,"src":123331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[15,123333,123335],{"id":123334},"_74-usb端口设置","7.4 USB端口设置",[20,123337,123338],{},[427,123339,123340],{},"首先先配置好权限",[36,123342,123344],{"className":117396,"code":123343,"language":117398,"meta":25,"style":25},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[42,123345,123346,123351,123364,123371,123376],{"__ignoreMap":25},[45,123347,123348],{"class":47,"line":48},[45,123349,123350],{"class":337},"# 将用户权限提高\n",[45,123352,123353,123355,123357,123359,123362],{"class":47,"line":66},[45,123354,24724],{"class":69},[45,123356,26674],{"class":62},[45,123358,26677],{"class":79},[45,123360,123361],{"class":62}," dialout",[45,123363,26682],{"class":55},[45,123365,123366,123368],{"class":47,"line":1331},[45,123367,26701],{"class":69},[45,123369,123370],{"class":62}," dialout\n",[45,123372,123373],{"class":47,"line":1346},[45,123374,123375],{"class":337},"# 查看下面命令是否输出dialout（若输出才正常）\n",[45,123377,123378],{"class":47,"line":1352},[45,123379,123380],{"class":69},"groups\n",[20,123382,123383],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[249,123385,123387],{"id":123386},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[20,123389,123390,123393],{},[427,123391,123392],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[20,123395,123396,123399],{},[427,123397,123398],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[20,123401,123402],{},[427,123403,123404],{},"流程如下：",[20,123406,123407],{},"（1）.查找设备idVendor和idProduct",[20,123409,123410,123411,123414],{},"接入两个USB设备，在终端调用指令",[42,123412,123413],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[20,123416,123417],{},[23,123418],{"alt":25,"src":123419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[20,123421,123422,123423,123426],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[42,123424,123425],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[20,123428,123429],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[20,123431,123432],{},"（2）.编写映射规则",[20,123434,123435,123436,123439],{},"在",[42,123437,123438],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[36,123441,123443],{"className":117396,"code":123442,"language":117398,"meta":25,"style":25},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[42,123444,123445],{"__ignoreMap":25},[45,123446,123447,123449,123451],{"class":47,"line":48},[45,123448,24724],{"class":69},[45,123450,118683],{"class":62},[45,123452,123453],{"class":62}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[20,123455,123456],{},"输入如下内容：",[36,123458,123460],{"className":117396,"code":123459,"language":117398,"meta":25,"style":25},"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",[42,123461,123462,123492],{"__ignoreMap":25},[45,123463,123464,123467,123469,123472,123475,123478,123481,123483,123486,123489],{"class":47,"line":48},[45,123465,123466],{"class":55},"KERNEL",[45,123468,59],{"class":51},[45,123470,123471],{"class":62},"=\"ttyUSB*\",",[45,123473,123474],{"class":69}," ATTRS",[45,123476,123477],{"class":62},"{idVendor}==",[45,123479,123480],{"class":69},"\"10c4\"",[45,123482,655],{"class":69},[45,123484,123485],{"class":62}," ATTRS{idProduct}==\"ea60\",",[45,123487,123488],{"class":62}," MODE:=\"0777\",",[45,123490,123491],{"class":62}," SYMLINK+=\"mylidar\"\n",[45,123493,123494,123496,123498,123500,123502,123504,123507,123509,123512,123514],{"class":47,"line":66},[45,123495,123466],{"class":55},[45,123497,59],{"class":51},[45,123499,123471],{"class":62},[45,123501,123474],{"class":69},[45,123503,123477],{"class":62},[45,123505,123506],{"class":69},"\"1a86\"",[45,123508,655],{"class":69},[45,123510,123511],{"class":62}," ATTRS{idProduct}==\"7523\",",[45,123513,123488],{"class":62},[45,123515,123516],{"class":62}," SYMLINK+=\"mycar\"\n",[20,123518,123519],{},"代码解释：",[166,123521,123522,123525,123528,123531],{},[169,123523,123524],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[169,123526,123527],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[169,123529,123530],{},"SYMLINK是符号连接，即绑定的别名；",[169,123532,123533],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[20,123535,123536,123537,123540,123543],{},"***小提示：***",[23702,123538,123539],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[42,123541,123542],{},"\u002Fetc\u002Fudev\u002Frule.d",[23702,123544,123545],{},"目录即可。",[20,123547,123548],{},"表格 还在加载中，请等待加载完成后再尝试复制",[20,123550,123551],{},"（3）.使规则生效",[20,123553,123554],{},"在终端下输入如下指令：",[36,123556,123558],{"className":117396,"code":123557,"language":117398,"meta":25,"style":25},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[42,123559,123560,123565,123577,123588,123592,123597,123610],{"__ignoreMap":25},[45,123561,123562],{"class":47,"line":48},[45,123563,123564],{"class":337},"# Ubuntu用下方命令\n",[45,123566,123567,123569,123571,123574],{"class":47,"line":66},[45,123568,24724],{"class":69},[45,123570,120148],{"class":62},[45,123572,123573],{"class":62}," udev",[45,123575,123576],{"class":62}," reload\n",[45,123578,123579,123581,123583,123585],{"class":47,"line":1331},[45,123580,24724],{"class":69},[45,123582,120148],{"class":62},[45,123584,123573],{"class":62},[45,123586,123587],{"class":62}," restart\n",[45,123589,123590],{"class":47,"line":1346},[45,123591,2550],{"emptyLinePlaceholder":207},[45,123593,123594],{"class":47,"line":1352},[45,123595,123596],{"class":337},"#Fedora用下方命令\n",[45,123598,123599,123601,123604,123607],{"class":47,"line":1366},[45,123600,24724],{"class":69},[45,123602,123603],{"class":62}," udevadm",[45,123605,123606],{"class":62}," control",[45,123608,123609],{"class":79}," --reload\n",[45,123611,123612,123614,123616],{"class":47,"line":1372},[45,123613,24724],{"class":69},[45,123615,123603],{"class":62},[45,123617,123618],{"class":62}," trigger\n",[20,123620,123621],{},"再重新插拔设备即可。",[20,123623,123624],{},"（4）.测试",[20,123626,123627],{},"终端下输入如下指令",[36,123629,123631],{"className":117396,"code":123630,"language":117398,"meta":25,"style":25},"ll \u002Fdev | grep ttyUSB\n",[42,123632,123633],{"__ignoreMap":25},[45,123634,123635,123638,123641,123643,123645],{"class":47,"line":48},[45,123636,123637],{"class":69},"ll",[45,123639,123640],{"class":62}," \u002Fdev",[45,123642,127],{"class":51},[45,123644,30336],{"class":69},[45,123646,123647],{"class":62}," ttyUSB\n",[20,123649,123650],{},"运行结果如下：",[20,123652,123653],{},[23,123654],{"alt":25,"src":123655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[20,123657,123658,123659,123662],{},"也可以多次插拔USB设备，会发现设备端口",[42,123660,123661],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[20,123664,123665],{},[427,123666,118064],{},[20,123668,123669],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[249,123671,123673],{"id":123672},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[20,123675,123676,123678],{},[427,123677,123392],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[20,123680,123681,123683],{},[427,123682,123398],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[20,123685,123686],{},[427,123687,123404],{},[20,123689,123690],{},"（1）.查看所连接的主机USB接口的KERNELS",[20,123692,123693],{},"调用如下指令查看第一台雷达的USB信息：",[36,123695,123697],{"className":117396,"code":123696,"language":117398,"meta":25,"style":25},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[42,123698,123699,123719],{"__ignoreMap":25},[45,123700,123701,123704,123706,123709,123712,123714,123716],{"class":47,"line":48},[45,123702,123703],{"class":69},"udevadm",[45,123705,69921],{"class":62},[45,123707,123708],{"class":79}," --attribute-walk",[45,123710,123711],{"class":79}," --name=\u002Fdev\u002FttyUSB0",[45,123713,127],{"class":51},[45,123715,30336],{"class":69},[45,123717,123718],{"class":62}," KERNELS\n",[45,123720,123721,123723,123725,123727,123730,123732,123734],{"class":47,"line":66},[45,123722,123703],{"class":69},[45,123724,69921],{"class":62},[45,123726,123708],{"class":79},[45,123728,123729],{"class":79}," --name=\u002Fdev\u002FttyACM0",[45,123731,127],{"class":51},[45,123733,30336],{"class":69},[45,123735,123718],{"class":62},[20,123737,123738],{},[23,123739],{"alt":25,"src":123740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[20,123742,123743],{},"调用如下指令查看第二台雷达的USB信息：",[36,123745,123747],{"className":117396,"code":123746,"language":117398,"meta":25,"style":25},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[42,123748,123749],{"__ignoreMap":25},[45,123750,123751,123753,123755,123757,123760,123762,123764],{"class":47,"line":48},[45,123752,123703],{"class":69},[45,123754,69921],{"class":62},[45,123756,123708],{"class":79},[45,123758,123759],{"class":79}," --name=\u002Fdev\u002FttyUSB1",[45,123761,127],{"class":51},[45,123763,30336],{"class":69},[45,123765,123718],{"class":62},[20,123767,123768,123769,123772,123773,123776,123777,123780],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[42,123770,123771],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[42,123774,123775],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[427,123778,123779],{},"唯一性标识","”。",[20,123782,123432],{},[20,123784,123435,123785,123787],{},[42,123786,123438],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[36,123789,123790],{"className":117396,"code":123442,"language":117398,"meta":25,"style":25},[42,123791,123792],{"__ignoreMap":25},[45,123793,123794,123796,123798],{"class":47,"line":48},[45,123795,24724],{"class":69},[45,123797,118683],{"class":62},[45,123799,123453],{"class":62},[36,123801,123803],{"className":117396,"code":123802,"language":117398,"meta":25,"style":25},"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",[42,123804,123805,123834],{"__ignoreMap":25},[45,123806,123807,123809,123811,123813,123816,123818,123821,123824,123826,123829,123831],{"class":47,"line":48},[45,123808,123466],{"class":55},[45,123810,59],{"class":51},[45,123812,123471],{"class":62},[45,123814,123815],{"class":55}," KERNELS",[45,123817,59],{"class":51},[45,123819,123820],{"class":62},"=\"1-1.3:1.0\",",[45,123822,123823],{"class":69}," MODE:",[45,123825,59],{"class":62},[45,123827,123828],{"class":69},"\"0777\"",[45,123830,655],{"class":69},[45,123832,123833],{"class":62}," SYMLINK+=\"rplidar_front\"\n",[45,123835,123836,123838,123840,123842,123844,123846,123849,123851,123853,123855,123857],{"class":47,"line":66},[45,123837,123466],{"class":55},[45,123839,59],{"class":51},[45,123841,123471],{"class":62},[45,123843,123815],{"class":55},[45,123845,59],{"class":51},[45,123847,123848],{"class":62},"=\"1-1.4:1.0\",",[45,123850,123823],{"class":69},[45,123852,59],{"class":62},[45,123854,123828],{"class":69},[45,123856,655],{"class":69},[45,123858,123859],{"class":62}," SYMLINK+=\"rplidar_back\"\n",[20,123861,123551],{},[20,123863,123554],{},[36,123865,123866],{"className":117396,"code":123557,"language":117398,"meta":25,"style":25},[42,123867,123868,123872,123882,123892,123896,123900,123910],{"__ignoreMap":25},[45,123869,123870],{"class":47,"line":48},[45,123871,123564],{"class":337},[45,123873,123874,123876,123878,123880],{"class":47,"line":66},[45,123875,24724],{"class":69},[45,123877,120148],{"class":62},[45,123879,123573],{"class":62},[45,123881,123576],{"class":62},[45,123883,123884,123886,123888,123890],{"class":47,"line":1331},[45,123885,24724],{"class":69},[45,123887,120148],{"class":62},[45,123889,123573],{"class":62},[45,123891,123587],{"class":62},[45,123893,123894],{"class":47,"line":1346},[45,123895,2550],{"emptyLinePlaceholder":207},[45,123897,123898],{"class":47,"line":1352},[45,123899,123596],{"class":337},[45,123901,123902,123904,123906,123908],{"class":47,"line":1366},[45,123903,24724],{"class":69},[45,123905,123603],{"class":62},[45,123907,123606],{"class":62},[45,123909,123609],{"class":79},[45,123911,123912,123914,123916],{"class":47,"line":1372},[45,123913,24724],{"class":69},[45,123915,123603],{"class":62},[45,123917,123618],{"class":62},[20,123919,123621],{},[20,123921,123624],{},[20,123923,123627,123924,123927],{},[42,123925,123926],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[20,123929,123930],{},[23,123931],{"alt":25,"src":123932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[20,123934,123935],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[20,123937,123938,123940],{},[427,123939,118064],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[249,123942,123944],{"id":123943},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[20,123946,123947],{},"（1）.查看所连接的主机USB接口的信息",[36,123949,123951],{"className":117396,"code":123950,"language":117398,"meta":25,"style":25},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[42,123952,123953,123983],{"__ignoreMap":25},[45,123954,123955,123957,123959,123962,123964,123966,123968,123970,123973,123976,123978,123981],{"class":47,"line":48},[45,123956,123703],{"class":69},[45,123958,69921],{"class":62},[45,123960,123961],{"class":79}," -a",[45,123963,29316],{"class":79},[45,123965,28522],{"class":55},[45,123967,123703],{"class":69},[45,123969,69921],{"class":62},[45,123971,123972],{"class":79}," -q",[45,123974,123975],{"class":62}," path",[45,123977,133],{"class":79},[45,123979,123980],{"class":62}," \u002Fdev\u002FttyACM0",[45,123982,139],{"class":55},[45,123984,123985,123987,123989,123991,123993,123995,123997,123999,124001,124003,124005,124008],{"class":47,"line":66},[45,123986,123703],{"class":69},[45,123988,69921],{"class":62},[45,123990,123961],{"class":79},[45,123992,29316],{"class":79},[45,123994,28522],{"class":55},[45,123996,123703],{"class":69},[45,123998,69921],{"class":62},[45,124000,123972],{"class":79},[45,124002,123975],{"class":62},[45,124004,133],{"class":79},[45,124006,124007],{"class":62}," \u002Fdev\u002FttyUSB0",[45,124009,139],{"class":55},[20,124011,124012],{},[23,124013],{"alt":25,"src":124014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[20,124016,124017],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[20,124019,123432],{},[20,124021,123435,124022,123787],{},[42,124023,123438],{},[36,124025,124026],{"className":117396,"code":123442,"language":117398,"meta":25,"style":25},[42,124027,124028],{"__ignoreMap":25},[45,124029,124030,124032,124034],{"class":47,"line":48},[45,124031,24724],{"class":69},[45,124033,118683],{"class":62},[45,124035,123453],{"class":62},[36,124037,124039],{"className":117396,"code":124038,"language":117398,"meta":25,"style":25},"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",[42,124040,124041,124069,124095],{"__ignoreMap":25},[45,124042,124043,124045,124047,124050,124052,124054,124056,124058,124061,124064,124066],{"class":47,"line":48},[45,124044,123466],{"class":55},[45,124046,59],{"class":51},[45,124048,124049],{"class":62},"=\"ttyACM*\",",[45,124051,123474],{"class":69},[45,124053,123477],{"class":62},[45,124055,123506],{"class":69},[45,124057,655],{"class":69},[45,124059,124060],{"class":62}," ATTRS{idProduct}==\"55d4\",",[45,124062,124063],{"class":62}," ATTRS{serial}==\"0001\",",[45,124065,123488],{"class":62},[45,124067,124068],{"class":62}," SYMLINK+=\"ttyACM_MCU\"\n",[45,124070,124071,124073,124075,124077,124079,124081,124083,124085,124087,124090,124092],{"class":47,"line":66},[45,124072,123466],{"class":55},[45,124074,59],{"class":51},[45,124076,124049],{"class":62},[45,124078,123474],{"class":69},[45,124080,123477],{"class":62},[45,124082,123506],{"class":69},[45,124084,655],{"class":69},[45,124086,124060],{"class":62},[45,124088,124089],{"class":62}," ATTRS{serial}==\"0002\",",[45,124091,123488],{"class":62},[45,124093,124094],{"class":62}," SYMLINK+=\"ttyACM_Lidar\"\n",[45,124096,124097,124099,124101,124103,124105,124107,124109,124111,124113,124115],{"class":47,"line":1331},[45,124098,123466],{"class":55},[45,124100,59],{"class":51},[45,124102,123471],{"class":62},[45,124104,123474],{"class":69},[45,124106,123477],{"class":62},[45,124108,123506],{"class":69},[45,124110,655],{"class":69},[45,124112,123511],{"class":62},[45,124114,123488],{"class":62},[45,124116,124117],{"class":62}," SYMLINK+=\"ttyUSB_IMU\"\n",[20,124119,123551],{},[20,124121,123554],{},[36,124123,124124],{"className":117396,"code":123557,"language":117398,"meta":25,"style":25},[42,124125,124126,124130,124140,124150,124154,124158,124168],{"__ignoreMap":25},[45,124127,124128],{"class":47,"line":48},[45,124129,123564],{"class":337},[45,124131,124132,124134,124136,124138],{"class":47,"line":66},[45,124133,24724],{"class":69},[45,124135,120148],{"class":62},[45,124137,123573],{"class":62},[45,124139,123576],{"class":62},[45,124141,124142,124144,124146,124148],{"class":47,"line":1331},[45,124143,24724],{"class":69},[45,124145,120148],{"class":62},[45,124147,123573],{"class":62},[45,124149,123587],{"class":62},[45,124151,124152],{"class":47,"line":1346},[45,124153,2550],{"emptyLinePlaceholder":207},[45,124155,124156],{"class":47,"line":1352},[45,124157,123596],{"class":337},[45,124159,124160,124162,124164,124166],{"class":47,"line":1366},[45,124161,24724],{"class":69},[45,124163,123603],{"class":62},[45,124165,123606],{"class":62},[45,124167,123609],{"class":79},[45,124169,124170,124172,124174],{"class":47,"line":1372},[45,124171,24724],{"class":69},[45,124173,123603],{"class":62},[45,124175,123618],{"class":62},[20,124177,124178,124179],{},"再重新插拔设备即可，或者 ",[427,124180,124181],{},"直接重启系统。",[20,124183,123624],{},[20,124185,123627,124186,123927],{},[42,124187,123926],{},[20,124189,124190],{},[23,124191],{"alt":25,"src":124192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[20,124194,123935],{},[20,124196,124197,124199],{},[427,124198,118064],{}," 一些设备可能没有串口号等。",[249,124201,124203],{"id":124202},"_744-其他注意事项","7.4.4 其他注意事项",[20,124205,124206,124207,124209,124210,124213,124214,18559,124217,124220,124221,124223],{},"并非所有的USB设备端口号都是",[42,124208,123661],{},"的格式，比如Arduino的端口号可能是",[42,124211,124212],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[42,124215,124216],{},"videon",[42,124218,124219],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[42,124222,124216],{},"端口，绑定时需要关联的也是该接口。",[20,124225,124226,124227,124230,124231,124234,124235,124237,124238,124241,124242,124245,124246,124249,124250,124249,124253,124249,124256,28485],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[42,124228,124229],{},"KERNEL==\"ttyUSB*\"","修改为",[42,124232,124233],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[42,124236,124229],{},"修改为类似于",[42,124239,124240],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[42,124243,124244],{},"video[0,2,4,6]","表示可以绑定的端口为",[42,124247,124248],{},"video0","或",[42,124251,124252],{},"video2",[42,124254,124255],{},"video4",[42,124257,124258],{},"video6",[15,124260,124262],{"id":124261},"_75-挂载内网网页","7.5 挂载内网网页",[20,124264,124265],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[20,124267,124268],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[20,124270,124271],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[20,124273,124274,124275],{},"Termux 下载地址（F-Droid）：",[516,124276,124277],{"href":124277,"rel":124278},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24012],[20,124280,124281],{},"首先打开app后，先更新软件缓存：",[36,124283,124285],{"className":117396,"code":124284,"language":117398,"meta":25,"style":25},"pkg update\n",[42,124286,124287],{"__ignoreMap":25},[45,124288,124289,124292],{"class":47,"line":48},[45,124290,124291],{"class":69},"pkg",[45,124293,26342],{"class":62},[20,124295,124296],{},"然后换源",[36,124298,124300],{"className":117396,"code":124299,"language":117398,"meta":25,"style":25},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[42,124301,124302],{"__ignoreMap":25},[45,124303,124304,124306,124309],{"class":47,"line":48},[45,124305,123174],{"class":69},[45,124307,124308],{"class":55}," $PREFIX",[45,124310,124311],{"class":62},"\u002Fetc\u002Fapt\u002Fsources.list\n",[20,124313,124314],{},"将该文件内容替换为下面：",[36,124316,124318],{"className":117396,"code":124317,"language":117398,"meta":25,"style":25},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[42,124319,124320],{"__ignoreMap":25},[45,124321,124322,124325,124328,124331],{"class":47,"line":48},[45,124323,124324],{"class":69},"deb",[45,124326,124327],{"class":62}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[45,124329,124330],{"class":62}," stable",[45,124332,124333],{"class":62}," main\n",[166,124335,124336,124363],{},[169,124337,124338,124339,124341,124342],{},"如果你使用的是",[42,124340,123174],{},"编辑器：",[166,124343,124344,124351,124357],{},[169,124345,124346,124347,124350],{},"按 ",[42,124348,124349],{},"Ctrl+O"," 保存文件。",[169,124352,124346,124353,124356],{},[42,124354,124355],{},"Enter"," 确认文件名。",[169,124358,124346,124359,124362],{},[42,124360,124361],{},"Ctrl+X"," 退出编辑器。",[169,124364,124338,124365,124341,124368],{},[42,124366,124367],{},"vim",[166,124369,124370,124376],{},[169,124371,124346,124372,124375],{},[42,124373,124374],{},"Esc"," 退出编辑模式。",[169,124377,124378,124379,124381],{},"输入 ",[42,124380,119321],{}," 保存并退出。",[20,124383,124384],{},"接下来重新更新软件源：",[36,124386,124388],{"className":117396,"code":124387,"language":117398,"meta":25,"style":25},"pkg update && pkg upgrade\n",[42,124389,124390],{"__ignoreMap":25},[45,124391,124392,124394,124396,124398,124400],{"class":47,"line":48},[45,124393,124291],{"class":69},[45,124395,117447],{"class":62},[45,124397,26290],{"class":55},[45,124399,124291],{"class":69},[45,124401,117433],{"class":62},[20,124403,124404],{},"安装python：",[36,124406,124408],{"className":117396,"code":124407,"language":117398,"meta":25,"style":25},"pkg install python\n",[42,124409,124410],{"__ignoreMap":25},[45,124411,124412,124414,124416],{"class":47,"line":48},[45,124413,124291],{"class":69},[45,124415,23981],{"class":62},[45,124417,124418],{"class":62}," python\n",[20,124420,124421,26573],{},[427,124422,124423],{},"通过Termux访问设备存储",[20,124425,124426],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[36,124428,124430],{"className":117396,"code":124429,"language":117398,"meta":25,"style":25},"termux-setup-storage\n",[42,124431,124432],{"__ignoreMap":25},[45,124433,124434],{"class":47,"line":48},[45,124435,124429],{"class":69},[233,124437,124438],{},[169,124439,124440,26573,124443],{},[427,124441,124442],{},"进入HTML文件所在的目录",[233,124444,124445],{},[169,124446,124447,124448,124450],{},"使用",[42,124449,101376],{},"命令进入HTML文件所在的目录：",[36,124452,124454],{"className":117396,"code":124453,"language":117398,"meta":25,"style":25},"cd ~\u002Fyour_html_folder\n",[42,124455,124456],{"__ignoreMap":25},[45,124457,124458,124460],{"class":47,"line":48},[45,124459,101376],{"class":79},[45,124461,124462],{"class":62}," ~\u002Fyour_html_folder\n",[233,124464,124465],{"start":66},[169,124466,124467,26573,124470,124475,124492],{},[427,124468,124469],{},"启动Python HTTP服务器",[233,124471,124472],{},[169,124473,124474],{},"运行以下命令启动一个简单的HTTP服务器：",[36,124476,124478],{"className":117396,"code":124477,"language":117398,"meta":25,"style":25},"python -m http.server 8000\n",[42,124479,124480],{"__ignoreMap":25},[45,124481,124482,124484,124486,124489],{"class":47,"line":48},[45,124483,30480],{"class":69},[45,124485,100982],{"class":79},[45,124487,124488],{"class":62}," http.server",[45,124490,124491],{"class":79}," 8000\n",[233,124493,124494],{"start":1331},[169,124495,124496,124497,124500],{},"这会在端口",[42,124498,124499],{},"8000","上启动一个Web服务器。",[166,124502,124503],{},[169,124504,124505],{},"启动服务器后，Termux会显示日志信息，例如：",[36,124507,124509],{"className":120916,"code":124508,"language":120918,"meta":120919,"style":25},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[42,124510,124511],{"__ignoreMap":25},[45,124512,124513],{"class":47,"line":48},[45,124514,124508],{},[166,124516,124517],{},[169,124518,124519],{},"这表示服务器已成功启动。",[20,124521,124522],{},[427,124523,124524],{},"在浏览器中访问HTML文件",[233,124526,124527],{},[169,124528,124529,26573,124532,124537],{},[427,124530,124531],{},"在同一设备上访问",[233,124533,124534],{},[169,124535,124536],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[36,124538,124541],{"className":124539,"code":124540,"language":71764,"meta":25,"style":25},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[42,124542,124543],{"__ignoreMap":25},[45,124544,124545,124548],{"class":47,"line":48},[45,124546,124547],{"class":55},"http:",[45,124549,124550],{"class":337},"\u002F\u002Flocalhost:8000\n",[166,124552,124553],{},[169,124554,124555,124556,124559],{},"如果HTML文件中有",[42,124557,124558],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[15,124561,124563],{"id":124562},"_76-linux重点知识","7.6 Linux重点知识",[249,124565,124567],{"id":124566},"_761-关于点的说明","7.6.1 关于点的说明",[20,124569,124570],{},[23,124571],{"alt":25,"src":124572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[20,124574,124575],{},"一点本目录，两点上目录",[249,124577,124579],{"id":124578},"_762-目录","7.6.2 目录",[22147,124581,124583],{"id":124582},"_7621-系统启动必须","7.6.2.1 系统启动必须",[20,124585,124586],{},[427,124587,124588],{},"\u002Fboot:",[20,124590,124591],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[20,124593,124594],{},[427,124595,124596],{},"\u002Fetc:",[20,124598,124599],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[20,124601,124602],{},[427,124603,124604],{},"\u002Flib：",[20,124606,124607],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[20,124609,124610],{},[427,124611,124612],{},"\u002Fsys:",[20,124614,124615],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22147,124617,124619],{"id":124618},"_7622-指令集合","7.6.2.2 指令集合",[20,124621,124622],{},[427,124623,124624],{},"\u002Fbin:",[20,124626,124627],{},"为二进制文件的缩写，存放最经常使用的命令",[20,124629,124630],{},[427,124631,124632],{},"\u002Fsbin:",[20,124634,124635],{},"只有系统管理员才能使用的程序和指令",[22147,124637,124639],{"id":124638},"_7623-外部文件管理","7.6.2.3 外部文件管理",[20,124641,124642],{},[427,124643,124644],{},"\u002Fdev:",[20,124646,124647],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[20,124649,124650],{},[427,124651,124652],{},"\u002Fmedia:",[20,124654,124655],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[20,124657,124658],{},[427,124659,124660],{},"\u002Fmnt:",[20,124662,124663],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22147,124665,124667],{"id":124666},"_7624-临时文件","7.6.2.4 临时文件",[20,124669,124670],{},[427,124671,124672],{},"\u002Frun:",[20,124674,124675],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[20,124677,124678],{},[427,124679,124680],{},"\u002Flost+found:",[20,124682,124683],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[20,124685,124686],{},[427,124687,124688],{},"\u002Ftmp:",[20,124690,124691],{},"这个目录是用来存放一些临时文件的",[22147,124693,124695],{"id":124694},"_7625-账户","7.6.2.5 账户",[20,124697,124698],{},[427,124699,124700],{},"\u002Froot：",[20,124702,124703],{},"系统管理员的用户主目录",[20,124705,124706,26573],{},[427,124707,124708],{},"\u002Fhome",[20,124710,124711],{},"用户的主目录，以用户的账号命名的",[20,124713,124714,26573],{},[427,124715,124716],{},"\u002Fusr",[20,124718,124719],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[20,124721,124722],{},[427,124723,124724],{},"\u002Fusr\u002Fbin：",[20,124726,124727],{},"系统用户使用的应用程序与指令",[20,124729,124730],{},[427,124731,124732],{},"\u002Fusr\u002Fsbin：",[20,124734,124735],{},"超级用户使用的比较高级的管理程序和系统守护程序",[20,124737,124738],{},[427,124739,124740],{},"\u002Fusr\u002Fsrc：",[20,124742,124743],{},"内核源代码默认的放置目录",[22147,124745,124747],{"id":124746},"_7626-运行过程要用","7.6.2.6 运行过程要用",[20,124749,124750],{},[427,124751,124752],{},"\u002Fvar：",[20,124754,124755],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[20,124757,124758],{},[427,124759,124760],{},"\u002Fproc:",[20,124762,124763,124764,124767],{},"管理 ",[427,124765,124766],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22147,124769,124771],{"id":124770},"_7627-扩展用的","7.6.2.7 扩展用的",[20,124773,124774],{},[427,124775,124776],{},"\u002Fopt:",[20,124778,124779],{},"默认是空的，我们安装额外软件可以放在这个里面",[20,124781,124782],{},[427,124783,124784],{},"\u002Fsrv:",[20,124786,124787],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[249,124789,124791],{"id":124790},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[20,124793,124794],{},[23,124795],{"alt":25,"src":124796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[20,124798,124799],{},"windows-->linux:",[20,124801,124802],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[20,124804,124805],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[20,124807,124808],{},"linux传输文件到windows",[20,124810,124811],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[249,124813,124815],{"id":124814},"_764-易忘知识","7.6.4 易忘知识",[20,124817,124818],{},"操作系统内核查看",[36,124820,124821],{"className":117396,"code":121390,"language":117398,"meta":25,"style":25},[42,124822,124823],{"__ignoreMap":25},[45,124824,124825,124827],{"class":47,"line":48},[45,124826,70304],{"class":69},[45,124828,121399],{"class":79},[20,124830,124831],{},[23,124832],{"alt":25,"src":124833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[20,124835,124836],{},[23,124837],{"alt":25,"src":124838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[36,124840,124842],{"className":117396,"code":124841,"language":117398,"meta":25,"style":25},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[42,124843,124844,124856],{"__ignoreMap":25},[45,124845,124846,124848,124851,124854],{"class":47,"line":48},[45,124847,121607],{"class":69},[45,124849,124850],{"class":62}," mvtest",[45,124852,124853],{"class":62}," mvtest2",[45,124855,2824],{"class":55},[45,124857,124858],{"class":47,"line":66},[45,124859,124860],{"class":69},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[20,124862,124863],{},[23,124864],{"alt":25,"src":124865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[20,124867,124868],{},[23,124869],{"alt":25,"src":124870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[20,124872,124873,124874,124877],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[42,124875,124876],{},"du -a"," 可以快速查看磁盘使用细节。",[249,124879,124881],{"id":124880},"_765-vim","7.6.5 Vim",[20,124883,124884],{},[23,124885],{"alt":25,"src":124886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[20,124888,124889],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[20,124891,124892],{},"一开始进去为命令模式，此时点击输入的字母为命令",[20,124894,124895],{},[427,124896,124897],{},"1.命令模式：",[20,124899,124900],{},"i 切换到输入模式，在光标当前位置开始输入文本",[20,124902,124903],{},"x 删除当前光标所在处的字符",[20,124905,124906],{},"：切换到底线命令模式，以在最底一行输入命令",[20,124908,124909],{},"a 进行插入模式，在光标下一个位置输入文本",[20,124911,124912],{},"o 在当前的下方插入一个新行，并进入插入模式",[20,124914,124915],{},"0 在当前行的上方插入一个新行，并进入插入模式",[20,124917,124918],{},"dd 剪切当前行",[20,124920,124921],{},"yy 复制当前行",[20,124923,124924],{},"p 粘贴剪贴板内容到光标下方",[20,124926,124927],{},"P 粘贴剪贴板内容到光标上方",[20,124929,124930],{},"u 撤销上一次操作",[20,124932,124933],{},"ctrl+r 重做上一次操作",[20,124935,124936,124938],{},[1072,124937],{}," 保存文件",[20,124940,124941,124943],{},[922,124942],{}," 退出Vim编辑器",[20,124945,124946,124948],{},[922,124947],{},"! 强制退出Vim编辑器，不保存修改",[20,124950,124951],{},[427,124952,124953],{},"2.输入模式：",[20,124955,124956],{},[23,124957],{"alt":25,"src":124958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[20,124960,124961],{},[427,124962,124963],{},"3.底线命令模式：",[20,124965,124966],{},[23,124967],{"alt":25,"src":124968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[20,124970,124971],{},"按下esc可以退出底线命令模式",[249,124973,124975],{"id":124974},"_766-apt","7.6.6 apt",[20,124977,124978],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[249,124980,124982],{"id":124981},"_767-home与root的区别","7.6.7 home与root的区别",[20,124984,124985],{},[23,124986],{"alt":25,"src":124987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[20,124989,124990],{},[23,124991],{"alt":25,"src":124992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[20,124994,124995],{},[23,124996],{"alt":25,"src":124997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[20,124999,125000],{},[23,125001],{"alt":25,"src":125002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[249,125004,125006],{"id":125005},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[20,125008,125009],{},[516,125010,125011],{"href":125011,"rel":125012},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24012],[233,125014,125015,125018],{},[169,125016,125017],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[169,125019,125020],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[20,125022,125023],{},[23,125024],{"alt":25,"src":125025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[20,125027,125028],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[20,125030,125031],{},[23,125032],{"alt":25,"src":125033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[36,125035,125037],{"className":120916,"code":125036,"language":120918,"meta":120919,"style":25},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[42,125038,125039,125044],{"__ignoreMap":25},[45,125040,125041],{"class":47,"line":48},[45,125042,125043],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[45,125045,125046],{"class":47,"line":66},[45,125047,125048],{},".\u002Fpycharm.sh\n",[20,125050,125051],{},"3️⃣创建.desktop文件",[20,125053,125054],{},[427,125055,125056],{},"原理：",[166,125058,125059,125069],{},[169,125060,125061,125062,125068],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[427,125063,125064,125067],{},[42,125065,125066],{},".desktop"," 文件"," 来识别应用。",[169,125070,125071,125073,125074],{},[42,125072,125066],{}," 文件相当于一个“应用注册表”，告诉系统：",[166,125075,125076,125079,125082,125085,125088],{},[169,125077,125078],{},"应用名字（Name）",[169,125080,125081],{},"图标（Icon）",[169,125083,125084],{},"执行命令（Exec）",[169,125086,125087],{},"分类（Categories）",[169,125089,125090],{},"是否需要终端（Terminal）",[36,125092,125094],{"className":120916,"code":125093,"language":120918,"meta":120919,"style":25},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[42,125095,125096,125101],{"__ignoreMap":25},[45,125097,125098],{"class":47,"line":48},[45,125099,125100],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[45,125102,125103],{"class":47,"line":66},[45,125104,125105],{},"nano pycharm.desktop\n",[20,125107,125108],{},"nano是一个命令行下的编辑器，也可以使用vim",[36,125110,125112],{"className":120916,"code":125111,"language":120918,"meta":120919,"style":25},"[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",[42,125113,125114,125119,125124,125129,125134,125139,125144,125149,125154,125159],{"__ignoreMap":25},[45,125115,125116],{"class":47,"line":48},[45,125117,125118],{},"[Desktop Entry]\n",[45,125120,125121],{"class":47,"line":66},[45,125122,125123],{},"Version=1.0\n",[45,125125,125126],{"class":47,"line":1331},[45,125127,125128],{},"Type=Application\n",[45,125130,125131],{"class":47,"line":1346},[45,125132,125133],{},"Name=PyCharm\n",[45,125135,125136],{"class":47,"line":1352},[45,125137,125138],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[45,125140,125141],{"class":47,"line":1366},[45,125142,125143],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[45,125145,125146],{"class":47,"line":1372},[45,125147,125148],{},"Comment=JetBrains PyCharm IDE\n",[45,125150,125151],{"class":47,"line":1463},[45,125152,125153],{},"Categories=Development;IDE;\n",[45,125155,125156],{"class":47,"line":1469},[45,125157,125158],{},"Terminal=false\n",[45,125160,125161],{"class":47,"line":1481},[45,125162,125163],{},"StartupWMClass=jetbrains-pycharm\n",[166,125165,125166,125172,125178,125184],{},[169,125167,125168,125171],{},[42,125169,125170],{},"Exec"," → 点击图标时执行的命令",[169,125173,125174,125177],{},[42,125175,125176],{},"Icon"," → 显示在菜单和桌面上的图标",[169,125179,125180,125183],{},[42,125181,125182],{},"Terminal=false"," → 不打开终端",[169,125185,125186,125189],{},[42,125187,125188],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125191,125192,125193],"blockquote",{},[20,125194,125195,125196,125198,125199],{},"可以理解成 ",[42,125197,125066],{}," 文件是 Linux 的 ",[427,125200,125201],{},"快捷方式配置文件",[20,125203,125204],{},"4️⃣设置可执行权限",[36,125206,125208],{"className":120916,"code":125207,"language":120918,"meta":120919,"style":25},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[42,125209,125210],{"__ignoreMap":25},[45,125211,125212],{"class":47,"line":48},[45,125213,125207],{},[20,125215,125216],{},"5️⃣桌面图标启动的话如下：",[36,125218,125220],{"className":120916,"code":125219,"language":120918,"meta":120919,"style":25},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[42,125221,125222,125227],{"__ignoreMap":25},[45,125223,125224],{"class":47,"line":48},[45,125225,125226],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[45,125228,125229],{"class":47,"line":66},[45,125230,125231],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[233,125233,125234],{"start":1331},[169,125235,125236],{},"下载Appimage文件实现软件的安装",[20,125238,125239],{},"1️⃣先下载appimage",[20,125241,125242],{},[516,125243,125244],{"href":125244,"rel":125245},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24012],[20,125247,125248],{},[23,125249],{"alt":25,"src":125250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[20,125252,125253],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[20,125255,125256],{},[23,125257],{"alt":25,"src":125258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[20,125260,125261],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[20,125263,125264],{},[23,125265],{"alt":25,"src":125266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[20,125268,125269],{},[23,125270],{"alt":25,"src":125271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[20,125273,125274,125275,125278],{},"3️⃣给他们放在",[42,125276,125277],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[20,125280,125281],{},"4️⃣给软件执行权限",[36,125283,125285],{"className":120916,"code":125284,"language":120918,"meta":120919,"style":25},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[42,125286,125287,125292],{"__ignoreMap":25},[45,125288,125289],{"class":47,"line":48},[45,125290,125291],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[45,125293,125294],{"class":47,"line":66},[45,125295,125296],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[20,125298,125299],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[36,125301,125303],{"className":117396,"code":125302,"language":117398,"meta":25,"style":25},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[42,125304,125305,125312,125319,125325],{"__ignoreMap":25},[45,125306,125307,125309],{"class":47,"line":48},[45,125308,101376],{"class":79},[45,125310,125311],{"class":62}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[45,125313,125314,125316],{"class":47,"line":66},[45,125315,101383],{"class":69},[45,125317,125318],{"class":62}," .\u002Fqqmusic.desktop\n",[45,125320,125321,125323],{"class":47,"line":1331},[45,125322,124367],{"class":69},[45,125324,125318],{"class":62},[45,125326,125327,125329,125331,125333],{"class":47,"line":1346},[45,125328,24724],{"class":69},[45,125330,24727],{"class":62},[45,125332,123233],{"class":62},[45,125334,125318],{"class":62},[20,125336,125337,125339],{},[42,125338,101383],{},"：一个 Linux 命令，主要功能是：",[166,125341,125342,125345],{},[169,125343,125344],{},"如果文件不存在，就创建一个新的空文件",[169,125346,125347],{},"如果文件已存在，就更新该文件的最后修改时间",[36,125349,125351],{"className":120916,"code":125350,"language":120918,"meta":120919,"style":25},"[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",[42,125352,125353,125357,125362,125367,125372,125376,125381],{"__ignoreMap":25},[45,125354,125355],{"class":47,"line":48},[45,125356,125118],{},[45,125358,125359],{"class":47,"line":66},[45,125360,125361],{},"Name=QQ音乐\n",[45,125363,125364],{"class":47,"line":1331},[45,125365,125366],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[45,125368,125369],{"class":47,"line":1346},[45,125370,125371],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[45,125373,125374],{"class":47,"line":1352},[45,125375,125128],{},[45,125377,125378],{"class":47,"line":1366},[45,125379,125380],{},"Categories=Audio;Music;Player;\n",[45,125382,125383],{"class":47,"line":1372},[45,125384,125385],{},"Comment=QQ Music Client for Linux\n",[20,125387,125388],{},"将文件复制进去",[20,125390,125391],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[20,125393,125394],{},[23,125395],{"alt":25,"src":125396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[20,125398,125399],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[20,125401,125402],{},[23,125403],{"alt":25,"src":125404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[20,125406,125407,125408,125411,125412,125415],{},"如果你用的不是KDE，那么也可以直接修改",[42,125409,125410],{},"qqmuic.desktop","：在exec的末尾加上",[42,125413,125414],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[36,125417,125419],{"className":120916,"code":125418,"language":120918,"meta":120919,"style":25},"[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",[42,125420,125421,125425,125429,125434,125438,125442,125446],{"__ignoreMap":25},[45,125422,125423],{"class":47,"line":48},[45,125424,125118],{},[45,125426,125427],{"class":47,"line":66},[45,125428,125361],{},[45,125430,125431],{"class":47,"line":1331},[45,125432,125433],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[45,125435,125436],{"class":47,"line":1346},[45,125437,125371],{},[45,125439,125440],{"class":47,"line":1352},[45,125441,125128],{},[45,125443,125444],{"class":47,"line":1366},[45,125445,125380],{},[45,125447,125448],{"class":47,"line":1372},[45,125449,125385],{},[20,125451,125452],{},[23,125453],{"alt":25,"src":125454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[20,125456,125457],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[36,125459,125461],{"className":120916,"code":125460,"language":120918,"meta":120919,"style":25},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[42,125462,125463],{"__ignoreMap":25},[45,125464,125465],{"class":47,"line":48},[45,125466,125460],{},[233,125468,125469],{"start":1346},[169,125470,125471],{},"去Flathub上安装软件",[20,125473,125474],{},[516,125475,125476],{"href":125476,"rel":125477},"https:\u002F\u002Fflathub.org\u002F",[24012],[20,125479,125480],{},"1️⃣去上面的官网搜索软件+下载软件",[20,125482,125483],{},[23,125484],{"alt":25,"src":125485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[36,125487,125489],{"className":120916,"code":125488,"language":120918,"meta":120919,"style":25},"flatpak install flathub com.obsproject.Studio\n",[42,125490,125491],{"__ignoreMap":25},[45,125492,125493],{"class":47,"line":48},[45,125494,125488],{},[20,125496,125497],{},[23,125498],{"alt":25,"src":125499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[20,125501,125502],{},"2️⃣运行软件",[20,125504,125505],{},"a.官方方式：",[20,125507,125508],{},[23,125509],{"alt":25,"src":125510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[36,125512,125513],{"className":120916,"code":125488,"language":120918,"meta":120919,"style":25},[42,125514,125515],{"__ignoreMap":25},[45,125516,125517],{"class":47,"line":48},[45,125518,125488],{},[20,125520,125521],{},"b.当普通软件运行：",[20,125523,125524],{},[23,125525],{"alt":25,"src":125526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[20,125528,125529],{},[23,125530],{"alt":25,"src":125531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[196,125533,125534],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":25,"searchDepth":66,"depth":66,"links":125536},[125537,125538,125543,125544,125550,125551],{"id":122269,"depth":66,"text":122270},{"id":122611,"depth":66,"text":122612,"children":125539},[125540,125541,125542],{"id":122615,"depth":1331,"text":122616},{"id":122682,"depth":1331,"text":122683},{"id":122943,"depth":1331,"text":122944},{"id":123096,"depth":66,"text":123097},{"id":123334,"depth":66,"text":123335,"children":125545},[125546,125547,125548,125549],{"id":123386,"depth":1331,"text":123387},{"id":123672,"depth":1331,"text":123673},{"id":123943,"depth":1331,"text":123944},{"id":124202,"depth":1331,"text":124203},{"id":124261,"depth":66,"text":124262},{"id":124562,"depth":66,"text":124563,"children":125552},[125553,125554,125555,125556,125557,125558,125559,125560],{"id":124566,"depth":1331,"text":124567},{"id":124578,"depth":1331,"text":124579},{"id":124790,"depth":1331,"text":124791},{"id":124814,"depth":1331,"text":124815},{"id":124880,"depth":1331,"text":124881},{"id":124974,"depth":1331,"text":124975},{"id":124981,"depth":1331,"text":124982},{"id":125005,"depth":1331,"text":125006},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122261,"description":204},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125567,"title":125568,"body":125569,"description":204,"extension":205,"meta":125573,"navigation":207,"path":125574,"seo":125575,"stem":125576,"__hash__":125577},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125570,"toc":125571},[],{"title":25,"searchDepth":66,"depth":66,"links":125572},[],{"category":30363},"\u002Fwiki\u002F2025-01-27-linux",{"title":125568,"description":204},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125579,"title":125580,"body":125581,"description":125585,"extension":205,"meta":125976,"navigation":207,"path":125977,"seo":125978,"stem":125979,"__hash__":125980},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125582,"toc":125974},[125583,125586,125590,125607,125610,125663,125667,125669,125709,125718,125722,125725,125966,125971],[20,125584,125585],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125587,125589],{"id":125588},"_1ubuntu环境配置","1.Ubuntu环境配置",[233,125591,125592,125595,125598,125601,125604],{},[169,125593,125594],{},"ubuntu环境换源",[169,125596,125597],{},"安装cuda",[169,125599,125600],{},"安装miniconda",[169,125602,125603],{},"安装pytorch",[169,125605,125606],{},"安装genesis",[20,125608,125609],{},"参考链接：",[36,125611,125613],{"className":38,"code":125612,"language":40,"meta":25,"style":25},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[42,125614,125615],{"__ignoreMap":25},[45,125616,125617,125620,125623,125626,125628,125631,125634,125636,125639,125642,125644,125647,125650,125652,125655,125658,125660],{"class":47,"line":48},[45,125618,125619],{"class":69},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[45,125621,125622],{"class":62},"=blogdetail",[45,125624,125625],{"class":55},"&sharetype",[45,125627,59],{"class":51},[45,125629,125630],{"class":62},"blogdetail",[45,125632,125633],{"class":55},"&sharerId",[45,125635,59],{"class":51},[45,125637,125638],{"class":62},"144728092",[45,125640,125641],{"class":55},"&sharerefer",[45,125643,59],{"class":51},[45,125645,125646],{"class":62},"PC",[45,125648,125649],{"class":55},"&sharesource",[45,125651,59],{"class":51},[45,125653,125654],{"class":62},"qq_69379513",[45,125656,125657],{"class":55},"&sharefrom",[45,125659,59],{"class":51},[45,125661,125662],{"class":62},"from_link\n",[10,125664,125666],{"id":125665},"_2genesis-报错issue","2.Genesis 报错issue",[20,125668,125609],{},[36,125670,125671],{"className":38,"code":125612,"language":40,"meta":25,"style":25},[42,125672,125673],{"__ignoreMap":25},[45,125674,125675,125677,125679,125681,125683,125685,125687,125689,125691,125693,125695,125697,125699,125701,125703,125705,125707],{"class":47,"line":48},[45,125676,125619],{"class":69},[45,125678,125622],{"class":62},[45,125680,125625],{"class":55},[45,125682,59],{"class":51},[45,125684,125630],{"class":62},[45,125686,125633],{"class":55},[45,125688,59],{"class":51},[45,125690,125638],{"class":62},[45,125692,125641],{"class":55},[45,125694,59],{"class":51},[45,125696,125646],{"class":62},[45,125698,125649],{"class":55},[45,125700,59],{"class":51},[45,125702,125654],{"class":62},[45,125704,125657],{"class":55},[45,125706,59],{"class":51},[45,125708,125662],{"class":62},[36,125710,125712],{"className":38,"code":125711,"language":40,"meta":25,"style":25},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[42,125713,125714],{"__ignoreMap":25},[45,125715,125716],{"class":47,"line":48},[45,125717,125711],{"class":69},[10,125719,125721],{"id":125720},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[20,125723,125724],{},"hello_robot.py",[36,125726,125728],{"className":30478,"code":125727,"language":30480,"meta":25,"style":25},"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",[42,125729,125730,125736,125751,125755,125767,125779,125783,125796,125800,125819,125829,125839,125853,125857,125861,125866,125870,125880,125887,125901,125908,125918,125923,125927,125945,125950,125954,125961],{"__ignoreMap":25},[45,125731,125732,125734],{"class":47,"line":48},[45,125733,30492],{"class":51},[45,125735,45405],{"class":55},[45,125737,125738,125741,125744,125746,125748],{"class":47,"line":66},[45,125739,125740],{"class":55},"os.environ[",[45,125742,125743],{"class":62},"'PYOPENGL_PLATFORM'",[45,125745,4593],{"class":55},[45,125747,59],{"class":51},[45,125749,125750],{"class":62}," 'glx'\n",[45,125752,125753],{"class":47,"line":1331},[45,125754,2550],{"emptyLinePlaceholder":207},[45,125756,125757,125759,125762,125764],{"class":47,"line":1346},[45,125758,30492],{"class":51},[45,125760,125761],{"class":55}," genesis ",[45,125763,31483],{"class":51},[45,125765,125766],{"class":55}," gs\n",[45,125768,125769,125771,125774,125776],{"class":47,"line":1352},[45,125770,30837],{"class":51},[45,125772,125773],{"class":55}," pynput ",[45,125775,30492],{"class":51},[45,125777,125778],{"class":55}," keyboard\n",[45,125780,125781],{"class":47,"line":1366},[45,125782,2550],{"emptyLinePlaceholder":207},[45,125784,125785,125788,125791,125793],{"class":47,"line":1372},[45,125786,125787],{"class":55},"gs.init(",[45,125789,125790],{"class":5366},"backend",[45,125792,59],{"class":51},[45,125794,125795],{"class":55},"gs.gpu)\n",[45,125797,125798],{"class":47,"line":1463},[45,125799,2550],{"emptyLinePlaceholder":207},[45,125801,125802,125805,125807,125810,125813,125815,125817],{"class":47,"line":1469},[45,125803,125804],{"class":55},"scene ",[45,125806,59],{"class":51},[45,125808,125809],{"class":55}," gs.Scene(",[45,125811,125812],{"class":5366},"show_viewer",[45,125814,59],{"class":51},[45,125816,31576],{"class":79},[45,125818,139],{"class":55},[45,125820,125821,125824,125826],{"class":47,"line":1481},[45,125822,125823],{"class":55},"plane ",[45,125825,59],{"class":51},[45,125827,125828],{"class":55}," scene.add_entity(gs.morphs.Plane())\n",[45,125830,125831,125834,125836],{"class":47,"line":1763},[45,125832,125833],{"class":55},"franka ",[45,125835,59],{"class":51},[45,125837,125838],{"class":55}," scene.add_entity(\n",[45,125840,125841,125844,125846,125848,125851],{"class":47,"line":1768},[45,125842,125843],{"class":55},"    gs.morphs.MJCF(",[45,125845,45454],{"class":5366},[45,125847,59],{"class":51},[45,125849,125850],{"class":62},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[45,125852,38147],{"class":55},[45,125854,125855],{"class":47,"line":1774},[45,125856,139],{"class":55},[45,125858,125859],{"class":47,"line":1779},[45,125860,2550],{"emptyLinePlaceholder":207},[45,125862,125863],{"class":47,"line":1793},[45,125864,125865],{"class":55},"scene.build()\n",[45,125867,125868],{"class":47,"line":1798},[45,125869,2550],{"emptyLinePlaceholder":207},[45,125871,125872,125874,125877],{"class":47,"line":1804},[45,125873,32047],{"class":51},[45,125875,125876],{"class":69}," on_press",[45,125878,125879],{"class":55},"(key):\n",[45,125881,125882,125885],{"class":47,"line":1825},[45,125883,125884],{"class":51},"    try",[45,125886,3889],{"class":55},[45,125888,125889,125891,125894,125896,125899],{"class":47,"line":1830},[45,125890,2647],{"class":51},[45,125892,125893],{"class":55}," key.char ",[45,125895,3099],{"class":51},[45,125897,125898],{"class":62}," 'q'",[45,125900,3889],{"class":55},[45,125902,125903,125905],{"class":47,"line":1844},[45,125904,15881],{"class":51},[45,125906,125907],{"class":79}," False\n",[45,125909,125910,125913,125916],{"class":47,"line":1849},[45,125911,125912],{"class":51},"    except",[45,125914,125915],{"class":79}," AttributeError",[45,125917,3889],{"class":55},[45,125919,125920],{"class":47,"line":1878},[45,125921,125922],{"class":51},"        pass\n",[45,125924,125925],{"class":47,"line":1883},[45,125926,2550],{"emptyLinePlaceholder":207},[45,125928,125929,125932,125934,125937,125940,125942],{"class":47,"line":1900},[45,125930,125931],{"class":55},"listener ",[45,125933,59],{"class":51},[45,125935,125936],{"class":55}," keyboard.Listener(",[45,125938,125939],{"class":5366},"on_press",[45,125941,59],{"class":51},[45,125943,125944],{"class":55},"on_press)\n",[45,125946,125947],{"class":47,"line":1905},[45,125948,125949],{"class":55},"listener.start()\n",[45,125951,125952],{"class":47,"line":1910},[45,125953,2550],{"emptyLinePlaceholder":207},[45,125955,125956,125958],{"class":47,"line":1915},[45,125957,108763],{"class":51},[45,125959,125960],{"class":55}," listener.running:\n",[45,125962,125963],{"class":47,"line":1929},[45,125964,125965],{"class":55},"    scene.step()\n",[20,125967,125968],{},[23,125969],{"alt":25,"src":125970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[196,125972,125973],{},"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":25,"searchDepth":66,"depth":66,"links":125975},[],{"category":23527},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125580,"description":125585},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125982,"title":125983,"body":125984,"description":204,"extension":205,"meta":125999,"navigation":207,"path":126000,"seo":126001,"stem":126002,"__hash__":126003},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125985,"toc":125996},[125986,125989,125993],[10,125987,125983],{"id":125988},"_1-基础知识",[15,125990,125992],{"id":125991},"_11-js的组成","1.1 js的组成",[20,125994,125995],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":25,"searchDepth":66,"depth":66,"links":125997},[125998],{"id":125991,"depth":66,"text":125992},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125983,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126005,"title":126006,"body":126007,"description":204,"extension":205,"meta":126146,"navigation":207,"path":126147,"seo":126148,"stem":126149,"__hash__":126150},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126008,"toc":126134},[126009,126012,126016,126019,126023,126033,126037,126040,126043,126046,126050,126057,126063,126067,126073,126084,126088,126091,126095,126098,126102,126105,126109,126112,126116,126119,126122,126125,126128,126131],[10,126010,126006],{"id":126011},"_2-vscode必备内容",[15,126013,126015],{"id":126014},"_21-标签分类","2.1 标签分类",[20,126017,126018],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[15,126020,126022],{"id":126021},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[20,126024,126025,126026,126028,126029,126032],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[42,126027,504],{}," 然后按 ",[42,126030,126031],{},"Tab","，快速自动生成基本结构。",[15,126034,126036],{"id":126035},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[20,126038,126039],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[20,126041,126042],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[20,126044,126045],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[15,126047,126049],{"id":126048},"_24-视图缩放","2.4 视图缩放",[20,126051,126052,126053,126056],{},"缩放视图 ",[42,126054,126055],{},"ctrl+"," 可实现代码增大。",[20,126058,126059,126062],{},[42,126060,126061],{},"ctrl-"," 可实现代码减小。",[15,126064,126066],{"id":126065},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[20,126068,126069,126070,28485],{},"VSCode 新建文件快捷键为 ",[42,126071,126072],{},"ctrl+N",[20,126074,126075,126076,126079,126080,126083],{},"保存快捷键为 ",[42,126077,126078],{},"ctrl+S","，将文本保存为 ",[42,126081,126082],{},".html"," 文件。",[15,126085,126087],{"id":126086},"_26-auto-rename-tag","2.6 Auto Rename Tag",[20,126089,126090],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[15,126092,126094],{"id":126093},"_27-vscode-icons","2.7 vscode-icons",[20,126096,126097],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[15,126099,126101],{"id":126100},"_28-easy-less","2.8 Easy LESS",[20,126103,126104],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[15,126106,126108],{"id":126107},"_29-会了吧插件","2.9 会了吧插件",[20,126110,126111],{},"会了吧插件可以展示代码中英语单词的意思。",[15,126113,126115],{"id":126114},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[20,126117,126118],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[20,126120,126121],{},"②选定多个相同的单词:ctrl+D",[20,126123,126124],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[20,126126,126127],{},"④全局替换某些单词:ctrl+h",[20,126129,126130],{},"⑤快速定位到某一行:ctrl+g",[20,126132,126133],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":25,"searchDepth":66,"depth":66,"links":126135},[126136,126137,126138,126139,126140,126141,126142,126143,126144,126145],{"id":126014,"depth":66,"text":126015},{"id":126021,"depth":66,"text":126022},{"id":126035,"depth":66,"text":126036},{"id":126048,"depth":66,"text":126049},{"id":126065,"depth":66,"text":126066},{"id":126086,"depth":66,"text":126087},{"id":126093,"depth":66,"text":126094},{"id":126100,"depth":66,"text":126101},{"id":126107,"depth":66,"text":126108},{"id":126114,"depth":66,"text":126115},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126006,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126152,"title":126153,"body":126154,"description":204,"extension":205,"meta":126313,"navigation":207,"path":126314,"seo":126315,"stem":126316,"__hash__":126317},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126155,"toc":126305},[126156,126159,126163,126173,126179,126185,126189,126198,126202,126207,126210,126213,126217,126220,126230,126239,126248,126257,126267,126274,126279,126284,126297],[10,126157,126153],{"id":126158},"_3-html文本与容器标签",[15,126160,126162],{"id":126161},"_31-标题标签","3.1 标题标签",[20,126164,126165,126168,126169,126172],{},[42,126166,126167],{},"\u003Ch1>","我是一级标签",[42,126170,126171],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[20,126174,126175,126168,126177],{},[42,126176,126167],{},[42,126178,126171],{},[20,126180,123435,126181,126184],{},[42,126182,126183],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[15,126186,126188],{"id":126187},"_32-段落标签","3.2 段落标签",[20,126190,126191,126194,126195],{},[42,126192,126193],{},"\u003Cp>","....",[42,126196,126197],{},"\u003C\u002Fp>",[15,126199,126201],{"id":126200},"_33-换行标签","3.3 换行标签",[20,126203,126204],{},[42,126205,126206],{},"\u003Cbr \u002F>",[20,126208,126209],{},"具有强制换行的作用",[20,126211,126212],{},"单标签",[15,126214,126216],{"id":126215},"_34-文本格式化标签","3.4 文本格式化标签",[20,126218,126219],{},"提供粗体、斜体和下划线等效果",[20,126221,126222,126223,82639,126226,126229],{},"加粗：",[42,126224,126225],{},"\u003Cstrong>...\u003C\u002Fstrong>",[42,126227,126228],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[20,126231,126232,126233,82639,126236,126229],{},"斜体：",[42,126234,126235],{},"\u003Cem>...\u003C\u002Fem>",[42,126237,126238],{},"\u003Ci>...\u003C\u002Fi>",[20,126240,126241,126242,82639,126245,126229],{},"删除线：",[42,126243,126244],{},"\u003Cdel>...\u003C\u002Fdel>",[42,126246,126247],{},"\u003Cs>...\u003C\u002Fs>",[20,126249,126250,126251,82639,126254,126229],{},"下划线：",[42,126252,126253],{},"\u003Cins>...\u003C\u002Fins>",[42,126255,126256],{},"\u003Cu>...\u003C\u002Fu>",[15,126258,126260,126261,18559,126264,102793],{"id":126259},"_35-div和span标签","3.5 ",[42,126262,126263],{},"\u003Cdiv>",[42,126265,126266],{},"\u003Cspan>",[20,126268,126269,101118,126271,126273],{},[42,126270,126263],{},[42,126272,126266],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[20,126275,126276],{},[42,126277,126278],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[20,126280,126281],{},[42,126282,126283],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[20,126285,126286,126287,126289,126290,126292,126293,126296],{},"两者特点：①",[42,126288,126263],{}," 标签用来布局，但一行通常只放一个 ",[42,126291,126263],{},"。可以理解为一个大盒子，独占一行，在 ",[42,126294,126295],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[20,126298,77349,126299,126301,126302,126304],{},[42,126300,126266],{}," 标签也可用于布局，一行可以放多个 ",[42,126303,126266],{},"，可理解为小盒子。",{"title":25,"searchDepth":66,"depth":66,"links":126306},[126307,126308,126309,126310,126311],{"id":126161,"depth":66,"text":126162},{"id":126187,"depth":66,"text":126188},{"id":126200,"depth":66,"text":126201},{"id":126215,"depth":66,"text":126216},{"id":126259,"depth":66,"text":126312},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126153,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126319,"title":126320,"body":126321,"description":204,"extension":205,"meta":126518,"navigation":207,"path":126519,"seo":126520,"stem":126521,"__hash__":126522},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126322,"toc":126510},[126323,126326,126330,126333,126339,126346,126352,126358,126361,126364,126367,126370,126373,126376,126379,126383,126386,126389,126392,126398,126404,126410,126417,126421,126427,126433,126436,126439,126445,126451,126457,126460,126463,126467,126470,126480,126486,126490,126499,126503,126506],[10,126324,126320],{"id":126325},"_4-html图像与链接",[15,126327,126329],{"id":126328},"_41-图像标签","4.1 图像标签",[20,126331,126332],{},"（1）标签",[20,126334,126335,126338],{},[42,126336,126337],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[20,126340,126341,126342,126345],{},"src是",[42,126343,126344],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[20,126347,126348,126349],{},"alt:文本，替换文本。图像不能显示的文字 ",[42,126350,126351],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[20,126353,126354,126355],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[42,126356,126357],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[20,126359,126360],{},"width:像素，设置图像的宽度",[20,126362,126363],{},"height:像素，设置图像的高度",[20,126365,126366],{},"border：像素，设置图像的边框粗细",[20,126368,126369],{},"（2）图像标签属性的注意点：",[20,126371,126372],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[20,126374,126375],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[20,126377,126378],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[15,126380,126382],{"id":126381},"_42-路径注意要点","4.2 路径注意要点：",[20,126384,126385],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[20,126387,126388],{},"（2）根目录：就是打开文件夹的第一层根目录",[20,126390,126391],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[20,126393,126394,126395],{},"①同一级路径：图像文件位于HTML文件同一级，如",[42,126396,126397],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[20,126399,126400,126401],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[42,126402,126403],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[20,126405,126406,126407],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[42,126408,126409],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[20,126411,126412,126413,89],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[516,126414,126415],{"href":126415,"rel":126416},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24012],[15,126418,126420],{"id":126419},"_43-超链接标签","4.3 超链接标签",[20,126422,126423,126426],{},[42,126424,126425],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[20,126428,126429,126430],{},"①语法格式：",[42,126431,126432],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[20,126434,126435],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[20,126437,126438],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[20,126440,126441,126442],{},"③链接分类：外部链接：",[42,126443,126444],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[20,126446,126447,126448],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[42,126449,126450],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[20,126452,126453,126454],{},"空链接：如果当时没有确定链接目标时，",[42,126455,126456],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[20,126458,126459],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[20,126461,126462],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[15,126464,126466],{"id":126465},"_44-锚点链接","4.4 锚点链接",[20,126468,126469],{},"点我们点击链接，可以快速定位到页面中的某个位置",[20,126471,126472,126473,126476,126477],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[42,126474,126475],{},"\u003Ca href=\"#two\">","第二级",[42,126478,126479],{},"\u003C\u002Fa>",[20,126481,126482,126483],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[42,126484,126485],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[15,126487,126489],{"id":126488},"_45-注释标签","4.5 注释标签",[20,126491,126492,126495,126496],{},[42,126493,126494],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[42,126497,126498],{},"ctrl+\u002F",[15,126500,126502],{"id":126501},"_46-特殊字符","4.6 特殊字符",[20,126504,126505],{},"可以实现添加多个空格",[23,126507],{"style":126508,"src":126509},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":25,"searchDepth":66,"depth":66,"links":126511},[126512,126513,126514,126515,126516,126517],{"id":126328,"depth":66,"text":126329},{"id":126381,"depth":66,"text":126382},{"id":126419,"depth":66,"text":126420},{"id":126465,"depth":66,"text":126466},{"id":126488,"depth":66,"text":126489},{"id":126501,"depth":66,"text":126502},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126320,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126524,"title":126525,"body":126526,"description":204,"extension":205,"meta":126819,"navigation":207,"path":126820,"seo":126821,"stem":126822,"__hash__":126823},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126527,"toc":126810},[126528,126531,126535,126538,126541,126544,126547,126550,126553,126556,126559,126562,126582,126588,126592,126595,126598,126601,126604,126607,126610,126614,126617,126620,126623,126626,126639,126644,126647,126650,126665,126668,126671,126674,126677,126680,126684,126687,126694,126697,126700,126703,126706,126709,126715,126718,126721,126727,126730,126733,126736,126742,126745,126748,126762,126769,126772,126775,126782,126791,126794,126797,126800,126804,126807],[10,126529,126525],{"id":126530},"_5-html表格列表与表单",[15,126532,126534],{"id":126533},"_51-表格标签","5.1 表格标签",[20,126536,126537],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[20,126539,126540],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[20,126542,126543],{},"②表格基本语法：",[23,126545],{"style":126508,"src":126546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[20,126548,126549],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[23,126551],{"style":126508,"src":126552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[20,126554,126555],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[23,126557],{"style":126508,"src":126558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[20,126560,126561],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[20,126563,126564,126567,126568,126570,126571,126574,126575,126577,126578,126581],{},[42,126565,126566],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[42,126569,126566],{},"内部必须拥有",[42,126572,126573],{},"\u003Ctr>","标签，一般位于第一行，",[42,126576,126566],{},"比",[42,126579,126580],{},"\u003Cth>","范围广",[20,126583,126584,126587],{},[42,126585,126586],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[15,126589,126591],{"id":126590},"_52-合并单元格","5.2 合并单元格",[20,126593,126594],{},"（1）合并单元格方式：",[20,126596,126597],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[20,126599,126600],{},"②跨列合并：colspan=\"合并单元格的个数\"",[20,126602,126603],{},"（2）目标单元格：",[20,126605,126606],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[20,126608,126609],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[15,126611,126613],{"id":126612},"_53-列表标签","5.3 列表标签",[20,126615,126616],{},"（1）分类：无序列表、有序列表、自定义列表",[20,126618,126619],{},"①无序列表：",[23,126621],{"style":126508,"src":126622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[20,126624,126625],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[20,126627,126628,126631,126632,126635,126636,126638],{},[42,126629,126630],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[42,126633,126634],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[42,126637,126630],{},"中输入其他标签或文字是不对的",[20,126640,126641,126643],{},[42,126642,126634],{},"之间相当于一个容器，可以容纳所有元素",[20,126645,126646],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[20,126648,126649],{},"在css中去除前边的小圆点采用如下代码:",[36,126651,126655],{"className":126652,"code":126653,"language":126654,"meta":25,"style":25},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[42,126656,126657],{"__ignoreMap":25},[45,126658,126659,126662],{"class":47,"line":48},[45,126660,126661],{"class":51400},"list-style",[45,126663,126664],{"class":55},": none;\n",[20,126666,126667],{},"②有序列表：",[23,126669],{"style":126508,"src":126670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[20,126672,126673],{},"③自定义列表：",[23,126675],{"style":126508,"src":126676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[23,126678],{"style":126508,"src":126679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[15,126681,126683],{"id":126682},"_54-表单标签","5.4 表单标签",[20,126685,126686],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[20,126688,126689,126690,126693],{},"（1）表单域：包含单元素的区域，",[42,126691,126692],{},"\u003Cform>","标签可以实现信息的收集和传递。",[23,126695],{"style":126508,"src":126696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[20,126698,126699],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[20,126701,126702],{},"表单元素提交必须有name属性",[20,126704,126705],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[20,126707,126708],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[20,126710,77326,126711,126714],{},[42,126712,126713],{},"\u003Cinput>","输入表单元素",[23,126716],{"style":126508,"src":126717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[23,126719],{"style":126508,"src":126720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[20,126722,126723,126724],{},"单选按钮：",[42,126725,126726],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[23,126728],{"style":126508,"src":126729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[20,126731,126732],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[23,126734],{"style":126508,"src":126735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[20,126737,126738,126741],{},[427,126739,126740],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[20,126743,126744],{},"②select下拉表单元素：可以节约页面控件",[23,126746],{"style":126508,"src":126747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[20,126749,126750,13944,126752,126755,126756,126758,126759,126761],{},[427,126751,310],{},[42,126753,126754],{},"\u003Cselect>","中至少包含一对",[42,126757,102814],{},"；在",[42,126760,102814],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[20,126763,126764,126765,126768],{},"③",[42,126766,126767],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[23,126770],{"style":126508,"src":126771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[20,126773,126774],{},"3行20列",[15,126776,126778,126779,102793],{"id":126777},"_55-lable标签","5.5 ",[42,126780,126781],{},"\u003Clable>",[20,126783,126784,126785,126787,126788,126790],{},"它不是表单标签，但常常与表单标签搭配使用，",[42,126786,126781],{},"标签用于绑定一个表单标签，当点击",[42,126789,126781],{},"标签内的文本",[20,126792,126793],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[23,126795],{"style":126508,"src":126796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[23,126798],{"style":126508,"src":126799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[15,126801,126803],{"id":126802},"_56-实例","5.6 实例",[23,126805],{"style":126508,"src":126806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[196,126808,126809],{},"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":25,"searchDepth":66,"depth":66,"links":126811},[126812,126813,126814,126815,126816,126818],{"id":126533,"depth":66,"text":126534},{"id":126590,"depth":66,"text":126591},{"id":126612,"depth":66,"text":126613},{"id":126682,"depth":66,"text":126683},{"id":126777,"depth":66,"text":126817},"5.5 \u003Clable>标签",{"id":126802,"depth":66,"text":126803},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126525,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126825,"title":126826,"body":126827,"description":204,"extension":205,"meta":127376,"navigation":207,"path":127377,"seo":127378,"stem":127379,"__hash__":127380},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126828,"toc":127351},[126829,126832,126836,126839,126842,126846,126849,126852,126855,126858,126861,126864,126867,126871,126874,126878,126881,126884,126887,126891,126894,126897,126900,126906,126909,126912,126915,126918,126921,126924,126927,126960,126964,126967,126970,126973,126977,126980,126983,126986,126989,126992,126996,126999,127002,127005,127009,127012,127016,127019,127023,127026,127031,127035,127038,127042,127045,127048,127051,127054,127081,127084,127088,127091,127094,127099,127102,127105,127109,127112,127117,127120,127123,127126,127130,127133,127136,127139,127143,127146,127149,127152,127156,127160,127163,127203,127206,127210,127217,127220,127224,127227,127273,127277,127280,127283,127286,127314,127318,127321,127348],[10,126830,126826],{"id":126831},"_6-css语法与文本样式",[15,126833,126835],{"id":126834},"_61-css语法规范","6.1 css语法规范",[20,126837,126838],{},"由两部分组成，选择器及一条或多条声明",[23,126840],{"style":126508,"src":126841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[20,126843,126844],{},[427,126845,310],{},[20,126847,126848],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[20,126850,126851],{},"②属性与属性值以“键值对”的形式出现",[20,126853,126854],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[20,126856,126857],{},"④属性和属性值之间用英文“;”分开",[23,126859],{"style":126508,"src":126860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[23,126862],{"style":126508,"src":126863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[23,126865],{"style":126508,"src":126866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[15,126868,126870],{"id":126869},"_62-css选择器","6.2 css选择器",[20,126872,126873],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[249,126875,126877],{"id":126876},"_621-标签选择器","6.2.1 标签选择器",[20,126879,126880],{},"①优点：能快速为页面中同类型的标签统一设置样式",[20,126882,126883],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[23,126885],{"style":126508,"src":126886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[249,126888,126890],{"id":126889},"_622-类选择器","6.2.2 类选择器",[20,126892,126893],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[20,126895,126896],{},"②样例",[23,126898],{"style":126508,"src":126899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[20,126901,126902,126903,126905],{},"③ ",[427,126904,126740],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[20,126907,126908],{},"可以理解为给这个标签起了个名字，来表示；",[20,126910,126911],{},"长名称或词组可以使用横线来为选择器命名；",[20,126913,126914],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[20,126916,126917],{},"命名要有意义；",[23,126919],{"style":126508,"src":126920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[20,126922,126923],{},"类选择器也可以指定特殊的元素p.center{}",[20,126925,126926],{},"p.center和.center都对",[36,126928,126930],{"className":126652,"code":126929,"language":126654,"meta":25,"style":25},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[42,126931,126932,126937,126946,126956],{"__ignoreMap":25},[45,126933,126934],{"class":47,"line":48},[45,126935,126936],{"class":337},"\u002F* 类选择器指定特殊元素 *\u002F\n",[45,126938,126939,126941,126944],{"class":47,"line":66},[45,126940,20],{"class":51400},[45,126942,126943],{"class":69},".center",[45,126945,15721],{"class":55},[45,126947,126948,126950,126952,126954],{"class":47,"line":1331},[45,126949,70626],{"class":79},[45,126951,51537],{"class":55},[45,126953,51692],{"class":79},[45,126955,1442],{"class":55},[45,126957,126958],{"class":47,"line":1346},[45,126959,1716],{"class":55},[249,126961,126963],{"id":126962},"_623-多类名使用","6.2.3 多类名使用",[20,126965,126966],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[23,126968],{"style":126508,"src":126969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[20,126971,126972],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[249,126974,126976],{"id":126975},"_624-id选择器","6.2.4 id选择器",[20,126978,126979],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[20,126981,126982],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[23,126984],{"style":126508,"src":126985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[20,126987,126988],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[20,126990,126991],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[249,126993,126995],{"id":126994},"_625-通配符选择器","6.2.5 通配符选择器",[20,126997,126998],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[20,127000,127001],{},"* {",[20,127003,127004],{},"color=\"red\"}",[249,127006,127008],{"id":127007},"_626-总结","6.2.6 总结",[23,127010],{"style":126508,"src":127011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[15,127013,127015],{"id":127014},"_63-css字体属性","6.3 css字体属性",[20,127017,127018],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[249,127020,127022],{"id":127021},"_631-字体系列","6.3.1 字体系列",[20,127024,127025],{},"font-family: '宋体';",[20,127027,127028,127030],{},[427,127029,310],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[249,127032,127034],{"id":127033},"_632-字体大小","6.3.2 字体大小",[20,127036,127037],{},"font-size: 20px",[20,127039,127040,26573],{},[427,127041,126740],{},[20,127043,127044],{},"①px（像素）大小是网页的最常用单位",[20,127046,127047],{},"②谷歌浏览器默认为16px",[20,127049,127050],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[20,127052,127053],{},"④可以给body指定整个页面的大小：会自动引用",[36,127055,127057],{"className":126652,"code":127056,"language":126654,"meta":25,"style":25},"body {\n  font-size: 16px;\n}\n",[42,127058,127059,127065,127077],{"__ignoreMap":25},[45,127060,127061,127063],{"class":47,"line":48},[45,127062,51900],{"class":51400},[45,127064,15721],{"class":55},[45,127066,127067,127069,127071,127073,127075],{"class":47,"line":66},[45,127068,70726],{"class":79},[45,127070,51537],{"class":55},[45,127072,878],{"class":79},[45,127074,51592],{"class":51},[45,127076,1442],{"class":55},[45,127078,127079],{"class":47,"line":1331},[45,127080,1716],{"class":55},[20,127082,127083],{},"⑤标题标签比较特殊，需要单独指定大小",[249,127085,127087],{"id":127086},"_633-字体粗细","6.3.3 字体粗细",[20,127089,127090],{},"font-weight: bold;",[20,127092,127093],{},"font-weight: 100；",[20,127095,127096,127098],{},[427,127097,310],{}," ①粗体文字变细：尽量别用normal，多用数字",[20,127100,127101],{},"font-weight= 400;",[20,127103,127104],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[249,127106,127108],{"id":127107},"_634-文字样式","6.3.4 文字样式",[20,127110,127111],{},"font-style: normal；",[20,127113,127114,26573],{},[427,127115,127116],{},"属性值",[20,127118,127119],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[20,127121,127122],{},"②italic：浏览器会显示斜体的字体样式",[23,127124],{"style":126508,"src":127125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[249,127127,127129],{"id":127128},"_635-字体符合属性","6.3.5 字体符合属性",[23,127131],{"style":126508,"src":127132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[23,127134],{"style":126508,"src":127135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[20,127137,127138],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[20,127140,127141,26573],{},[427,127142,126740],{},[20,127144,127145],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[20,127147,127148],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[20,127150,127151],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[15,127153,127155],{"id":127154},"_64-css-test文本属性","6.4 css test文本属性",[249,127157,127159],{"id":127158},"_641-文本颜色","6.4.1 文本颜色",[20,127161,127162],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[36,127164,127166],{"className":126652,"code":127165,"language":126654,"meta":25,"style":25},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[42,127167,127168,127173,127179,127189,127194,127199],{"__ignoreMap":25},[45,127169,127170],{"class":47,"line":48},[45,127171,127172],{"class":337},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[45,127174,127175,127177],{"class":47,"line":66},[45,127176,20],{"class":51400},[45,127178,15721],{"class":55},[45,127180,127181,127183,127185,127187],{"class":47,"line":1331},[45,127182,71005],{"class":79},[45,127184,51537],{"class":55},[45,127186,57521],{"class":79},[45,127188,1442],{"class":55},[45,127190,127191],{"class":47,"line":1346},[45,127192,127193],{"class":337},"  \u002F* color: #ff0000; *\u002F\n",[45,127195,127196],{"class":47,"line":1352},[45,127197,127198],{"class":337},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[45,127200,127201],{"class":47,"line":1366},[45,127202,1716],{"class":55},[23,127204],{"style":126508,"src":127205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[249,127207,127209],{"id":127208},"_642-对齐文本","6.4.2 对齐文本",[20,127211,127212,127213,127216],{},"text-align属于用于设置元素内文本内容的 ",[427,127214,127215],{},"水平对齐"," 方式",[20,127218,127219],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[249,127221,127223],{"id":127222},"_643-装饰文本","6.4.3 装饰文本",[20,127225,127226],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[36,127228,127230],{"className":126652,"code":127229,"language":126654,"meta":25,"style":25},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[42,127231,127232,127238,127248,127252,127258,127269],{"__ignoreMap":25},[45,127233,127234,127236],{"class":47,"line":48},[45,127235,516],{"class":51400},[45,127237,15721],{"class":55},[45,127239,127240,127242,127244,127246],{"class":47,"line":66},[45,127241,70602],{"class":79},[45,127243,51537],{"class":55},[45,127245,54837],{"class":79},[45,127247,1442],{"class":55},[45,127249,127250],{"class":47,"line":1331},[45,127251,1716],{"class":55},[45,127253,127254,127256],{"class":47,"line":1346},[45,127255,20],{"class":51400},[45,127257,15721],{"class":55},[45,127259,127260,127262,127264,127267],{"class":47,"line":1352},[45,127261,70602],{"class":79},[45,127263,51537],{"class":55},[45,127265,127266],{"class":79},"underline",[45,127268,1442],{"class":55},[45,127270,127271],{"class":47,"line":1366},[45,127272,1716],{"class":55},[249,127274,127276],{"id":127275},"_644-文本缩进","6.4.4 文本缩进",[20,127278,127279],{},"实现文本的第一行首行缩进自己指定的距离",[20,127281,127282],{},"20px往右边走；-20px往左边走",[20,127284,127285],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[36,127287,127289],{"className":126652,"code":127288,"language":126654,"meta":25,"style":25},"p {\n  text-indent: 2em;\n}\n",[42,127290,127291,127297,127310],{"__ignoreMap":25},[45,127292,127293,127295],{"class":47,"line":48},[45,127294,20],{"class":51400},[45,127296,15721],{"class":55},[45,127298,127299,127302,127304,127306,127308],{"class":47,"line":66},[45,127300,127301],{"class":79},"  text-indent",[45,127303,51537],{"class":55},[45,127305,356],{"class":79},[45,127307,23702],{"class":51},[45,127309,1442],{"class":55},[45,127311,127312],{"class":47,"line":1331},[45,127313,1716],{"class":55},[249,127315,127317],{"id":127316},"_645-行间距","6.4.5 行间距",[20,127319,127320],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[36,127322,127324],{"className":126652,"code":127323,"language":126654,"meta":25,"style":25},"p {\n  line-height: 1.6;\n}\n",[42,127325,127326,127332,127344],{"__ignoreMap":25},[45,127327,127328,127330],{"class":47,"line":48},[45,127329,20],{"class":51400},[45,127331,15721],{"class":55},[45,127333,127334,127337,127339,127342],{"class":47,"line":66},[45,127335,127336],{"class":79},"  line-height",[45,127338,51537],{"class":55},[45,127340,127341],{"class":79},"1.6",[45,127343,1442],{"class":55},[45,127345,127346],{"class":47,"line":1331},[45,127347,1716],{"class":55},[196,127349,127350],{},"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":25,"searchDepth":66,"depth":66,"links":127352},[127353,127354,127362,127369],{"id":126834,"depth":66,"text":126835},{"id":126869,"depth":66,"text":126870,"children":127355},[127356,127357,127358,127359,127360,127361],{"id":126876,"depth":1331,"text":126877},{"id":126889,"depth":1331,"text":126890},{"id":126962,"depth":1331,"text":126963},{"id":126975,"depth":1331,"text":126976},{"id":126994,"depth":1331,"text":126995},{"id":127007,"depth":1331,"text":127008},{"id":127014,"depth":66,"text":127015,"children":127363},[127364,127365,127366,127367,127368],{"id":127021,"depth":1331,"text":127022},{"id":127033,"depth":1331,"text":127034},{"id":127086,"depth":1331,"text":127087},{"id":127107,"depth":1331,"text":127108},{"id":127128,"depth":1331,"text":127129},{"id":127154,"depth":66,"text":127155,"children":127370},[127371,127372,127373,127374,127375],{"id":127158,"depth":1331,"text":127159},{"id":127208,"depth":1331,"text":127209},{"id":127222,"depth":1331,"text":127223},{"id":127275,"depth":1331,"text":127276},{"id":127316,"depth":1331,"text":127317},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126826,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127382,"title":127383,"body":127384,"description":204,"extension":205,"meta":128033,"navigation":207,"path":128034,"seo":128035,"stem":128036,"__hash__":128037},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127385,"toc":128014},[127386,127389,127393,127397,127457,127461,127471,127474,127477,127481,127506,127510,127513,127516,127519,127522,127525,127529,127532,127535,127577,127580,127606,127612,127615,127619,127623,127629,127632,127635,127638,127641,127644,127647,127692,127696,127699,127702,127706,127710,127739,127742,127747,127750,127753,127756,127759,127763,127767,127770,127772,127775,127779,127782,127786,127789,127792,127795,127799,127803,127809,127819,127822,127825,127828,127831,127834,127957,127965,127973,128011],[10,127387,127383],{"id":127388},"_7-css引入方式与选择器进阶",[15,127390,127392],{"id":127391},"_71-css引入方式","7.1 css引入方式",[249,127394,127396],{"id":127395},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[36,127398,127402],{"className":127399,"code":127400,"language":127401,"meta":25,"style":25},"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",[42,127403,127404,127412,127419,127431,127444,127449],{"__ignoreMap":25},[45,127405,127406,127408,127410],{"class":47,"line":48},[45,127407,1187],{"class":55},[45,127409,196],{"class":51400},[45,127411,51407],{"class":55},[45,127413,127414,127417],{"class":47,"line":66},[45,127415,127416],{"class":51400},"  h1",[45,127418,15721],{"class":55},[45,127420,127421,127424,127426,127429],{"class":47,"line":1331},[45,127422,127423],{"class":79},"    color",[45,127425,51537],{"class":55},[45,127427,127428],{"class":79},"blue",[45,127430,1442],{"class":55},[45,127432,127433,127436,127438,127440,127442],{"class":47,"line":1346},[45,127434,127435],{"class":79},"    font-size",[45,127437,51537],{"class":55},[45,127439,1077],{"class":79},[45,127441,51592],{"class":51},[45,127443,1442],{"class":55},[45,127445,127446],{"class":47,"line":1352},[45,127447,127448],{"class":55},"  }\n",[45,127450,127451,127453,127455],{"class":47,"line":1366},[45,127452,51885],{"class":55},[45,127454,196],{"class":51400},[45,127456,51407],{"class":55},[20,127458,127459,26573],{},[427,127460,126740],{},[20,127462,77326,127463,127466,127467,127470],{},[42,127464,127465],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[42,127468,127469],{},"\u003Chead>","标签中",[20,127472,127473],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[20,127475,127476],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[249,127478,127480],{"id":127479},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[36,127482,127484],{"className":127399,"code":127483,"language":127401,"meta":25,"style":25},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[42,127485,127486],{"__ignoreMap":25},[45,127487,127488,127490,127492,127494,127496,127499,127502,127504],{"class":47,"line":48},[45,127489,1187],{"class":55},[45,127491,20],{"class":51400},[45,127493,62726],{"class":69},[45,127495,59],{"class":55},[45,127497,127498],{"class":62},"\"color: red; font-size: 16px;\"",[45,127500,127501],{"class":55},">这是一个段落\u003C\u002F",[45,127503,20],{"class":51400},[45,127505,51407],{"class":55},[20,127507,127508,26573],{},[427,127509,126740],{},[20,127511,127512],{},"①style其实就是标签的属性",[20,127514,127515],{},"②在双引号中间，写法要符合css规范",[20,127517,127518],{},"③可以控制当前的标签设置样式",[20,127520,127521],{},"④书写繁琐，简单时才用",[20,127523,127524],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[249,127526,127528],{"id":127527},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[20,127530,127531],{},"使用最多，单独建一个css文件，然后html引用",[20,127533,127534],{},"①css文件部分： style.css",[36,127536,127538],{"className":126652,"code":127537,"language":126654,"meta":25,"style":25},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[42,127539,127540,127545,127551,127561,127573],{"__ignoreMap":25},[45,127541,127542],{"class":47,"line":48},[45,127543,127544],{"class":337},"\u002F* style.css *\u002F\n",[45,127546,127547,127549],{"class":47,"line":66},[45,127548,10],{"class":51400},[45,127550,15721],{"class":55},[45,127552,127553,127555,127557,127559],{"class":47,"line":1331},[45,127554,71005],{"class":79},[45,127556,51537],{"class":55},[45,127558,127428],{"class":79},[45,127560,1442],{"class":55},[45,127562,127563,127565,127567,127569,127571],{"class":47,"line":1346},[45,127564,70726],{"class":79},[45,127566,51537],{"class":55},[45,127568,1077],{"class":79},[45,127570,51592],{"class":51},[45,127572,1442],{"class":55},[45,127574,127575],{"class":47,"line":1352},[45,127576,1716],{"class":55},[20,127578,127579],{},"②html部分",[36,127581,127583],{"className":127399,"code":127582,"language":127401,"meta":25,"style":25},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[42,127584,127585],{"__ignoreMap":25},[45,127586,127587,127589,127591,127593,127595,127597,127599,127601,127604],{"class":47,"line":48},[45,127588,1187],{"class":55},[45,127590,69105],{"class":51400},[45,127592,69108],{"class":69},[45,127594,59],{"class":55},[45,127596,69113],{"class":62},[45,127598,61157],{"class":69},[45,127600,59],{"class":55},[45,127602,127603],{"class":62},"\"style.css\"",[45,127605,51407],{"class":55},[20,127607,127608,127611],{},[42,127609,127610],{},"\u003Chr>","水平线标签（但是不常用！）",[20,127613,127614],{},"ctrl+0回到页面原来大小",[15,127616,127618],{"id":127617},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[249,127620,127622],{"id":127621},"_721-快速生成html","7.2.1 快速生成html",[20,127624,127625,127626],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[42,127627,127628],{},"\u003Cdiv>``\u003C\u002Fdiv>",[20,127630,127631],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[20,127633,127634],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[20,127636,127637],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[20,127639,127640],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[20,127642,127643],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[20,127645,127646],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[36,127648,127650],{"className":127399,"code":127649,"language":127401,"meta":25,"style":25},"\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",[42,127651,127652,127657,127662,127667,127672,127677,127682,127687],{"__ignoreMap":25},[45,127653,127654],{"class":47,"line":48},[45,127655,127656],{"class":337},"\u003C!-- Emmet 语法示例 -->\n",[45,127658,127659],{"class":47,"line":66},[45,127660,127661],{"class":337},"\u003C!-- div*3        → 生成3个div -->\n",[45,127663,127664],{"class":47,"line":1331},[45,127665,127666],{"class":337},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[45,127668,127669],{"class":47,"line":1346},[45,127670,127671],{"class":337},"\u003C!-- div+p        → 兄弟div和p -->\n",[45,127673,127674],{"class":47,"line":1352},[45,127675,127676],{"class":337},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[45,127678,127679],{"class":47,"line":1366},[45,127680,127681],{"class":337},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[45,127683,127684],{"class":47,"line":1372},[45,127685,127686],{"class":337},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[45,127688,127689],{"class":47,"line":1463},[45,127690,127691],{"class":337},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[249,127693,127695],{"id":127694},"_722-快速生成css","7.2.2 快速生成css",[20,127697,127698],{},"简写开头",[20,127700,127701],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[15,127703,127705],{"id":127704},"_73-css复合选择器","7.3 css复合选择器",[249,127707,127709],{"id":127708},"_731-后代选择器","7.3.1 后代选择器",[36,127711,127713],{"className":126652,"code":127712,"language":126654,"meta":25,"style":25},".parent .child {\n  color: blue;\n}\n",[42,127714,127715,127725,127735],{"__ignoreMap":25},[45,127716,127717,127720,127723],{"class":47,"line":48},[45,127718,127719],{"class":69},".parent",[45,127721,127722],{"class":69}," .child",[45,127724,15721],{"class":55},[45,127726,127727,127729,127731,127733],{"class":47,"line":66},[45,127728,71005],{"class":79},[45,127730,51537],{"class":55},[45,127732,127428],{"class":79},[45,127734,1442],{"class":55},[45,127736,127737],{"class":47,"line":1331},[45,127738,1716],{"class":55},[20,127740,127741],{},"元素1 元素2 {样式声明}",[20,127743,127744],{},[427,127745,127746],{},"注意点:",[20,127748,127749],{},"①元素1和元素2中间用空格隔开",[20,127751,127752],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[20,127754,127755],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[20,127757,127758],{},"④元素1和元素2可以是任意基础选择器",[249,127760,127762],{"id":127761},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[20,127764,127765],{},[427,127766,127746],{},[20,127768,127769],{},"①元素1和元素2中间用大于号隔开",[20,127771,127752],{},[20,127773,127774],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[249,127776,127778],{"id":127777},"_733-并集选择器","7.3.3 并集选择器",[20,127780,127781],{},"元素1，元素2 {样式声明}",[20,127783,127784],{},[427,127785,127746],{},[20,127787,127788],{},"①元素1和元素2中间用逗号隔开",[20,127790,127791],{},"②逗号可以理解为和的意思",[20,127793,127794],{},"③并集选择器通常用于集体声明",[249,127796,127798],{"id":127797},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[20,127800,127801],{},[427,127802,127746],{},[20,127804,127805,127806,127808],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69105,127807],{},"－:visited－:hover－:active。",[20,127810,127811,127812,127815,127816,25840],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127813,127814],"hover",{}," 、 ",[127817,127818],"first-child",{},[20,127820,127821],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[20,127823,127824],{},"link对没访问的进行设置",[20,127826,127827],{},"vistied对已访问的进行改变",[20,127829,127830],{},"hover鼠标经过就会变",[20,127832,127833],{},"active常按(点)就会变",[36,127835,127837],{"className":126652,"code":127836,"language":126654,"meta":25,"style":25},"\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",[42,127838,127839,127844,127853,127863,127873,127877,127886,127897,127901,127909,127919,127929,127933,127942,127953],{"__ignoreMap":25},[45,127840,127841],{"class":47,"line":48},[45,127842,127843],{"class":337},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[45,127845,127846,127848,127851],{"class":47,"line":66},[45,127847,516],{"class":51400},[45,127849,127850],{"class":69},":link",[45,127852,15721],{"class":55},[45,127854,127855,127857,127859,127861],{"class":47,"line":1331},[45,127856,71005],{"class":79},[45,127858,51537],{"class":55},[45,127860,62469],{"class":79},[45,127862,1442],{"class":55},[45,127864,127865,127867,127869,127871],{"class":47,"line":1346},[45,127866,70602],{"class":79},[45,127868,51537],{"class":55},[45,127870,54837],{"class":79},[45,127872,1442],{"class":55},[45,127874,127875],{"class":47,"line":1352},[45,127876,1716],{"class":55},[45,127878,127879,127881,127884],{"class":47,"line":1366},[45,127880,516],{"class":51400},[45,127882,127883],{"class":69},":visited",[45,127885,15721],{"class":55},[45,127887,127888,127890,127892,127895],{"class":47,"line":1372},[45,127889,71005],{"class":79},[45,127891,51537],{"class":55},[45,127893,127894],{"class":79},"purple",[45,127896,1442],{"class":55},[45,127898,127899],{"class":47,"line":1463},[45,127900,1716],{"class":55},[45,127902,127903,127905,127907],{"class":47,"line":1469},[45,127904,516],{"class":51400},[45,127906,61040],{"class":69},[45,127908,15721],{"class":55},[45,127910,127911,127913,127915,127917],{"class":47,"line":1481},[45,127912,71005],{"class":79},[45,127914,51537],{"class":55},[45,127916,54989],{"class":79},[45,127918,1442],{"class":55},[45,127920,127921,127923,127925,127927],{"class":47,"line":1763},[45,127922,70602],{"class":79},[45,127924,51537],{"class":55},[45,127926,127266],{"class":79},[45,127928,1442],{"class":55},[45,127930,127931],{"class":47,"line":1768},[45,127932,1716],{"class":55},[45,127934,127935,127937,127940],{"class":47,"line":1774},[45,127936,516],{"class":51400},[45,127938,127939],{"class":69},":active",[45,127941,15721],{"class":55},[45,127943,127944,127946,127948,127951],{"class":47,"line":1779},[45,127945,71005],{"class":79},[45,127947,51537],{"class":55},[45,127949,127950],{"class":79},"green",[45,127952,1442],{"class":55},[45,127954,127955],{"class":47,"line":1793},[45,127956,1716],{"class":55},[249,127958,127960,127961,127964],{"id":127959},"_735-伪类选择器","7.3.5 ",[127962,127963],"focus",{},"伪类选择器",[20,127966,127967,127969,127970,127972],{},[127962,127968],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[42,127971,126713],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[36,127974,127976],{"className":126652,"code":127975,"language":126654,"meta":25,"style":25},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[42,127977,127978,127986,127997,128007],{"__ignoreMap":25},[45,127979,127980,127982,127984],{"class":47,"line":48},[45,127981,53921],{"class":51400},[45,127983,62000],{"class":69},[45,127985,15721],{"class":55},[45,127987,127988,127991,127993,127995],{"class":47,"line":66},[45,127989,127990],{"class":79},"  border-color",[45,127992,51537],{"class":55},[45,127994,54989],{"class":79},[45,127996,1442],{"class":55},[45,127998,127999,128001,128003,128005],{"class":47,"line":1331},[45,128000,70898],{"class":79},[45,128002,51537],{"class":55},[45,128004,54837],{"class":79},[45,128006,1442],{"class":55},[45,128008,128009],{"class":47,"line":1346},[45,128010,1716],{"class":55},[196,128012,128013],{},"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":25,"searchDepth":66,"depth":66,"links":128015},[128016,128021,128025],{"id":127391,"depth":66,"text":127392,"children":128017},[128018,128019,128020],{"id":127395,"depth":1331,"text":127396},{"id":127479,"depth":1331,"text":127480},{"id":127527,"depth":1331,"text":127528},{"id":127617,"depth":66,"text":127618,"children":128022},[128023,128024],{"id":127621,"depth":1331,"text":127622},{"id":127694,"depth":1331,"text":127695},{"id":127704,"depth":66,"text":127705,"children":128026},[128027,128028,128029,128030,128031],{"id":127708,"depth":1331,"text":127709},{"id":127761,"depth":1331,"text":127762},{"id":127777,"depth":1331,"text":127778},{"id":127797,"depth":1331,"text":127798},{"id":127959,"depth":1331,"text":128032},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127383,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128039,"title":128040,"body":128041,"description":204,"extension":205,"meta":129964,"navigation":207,"path":129965,"seo":129966,"stem":129967,"__hash__":129968},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128042,"toc":129938},[128043,128046,128050,128059,128063,128089,128094,128097,128100,128103,128106,128110,128113,128123,128131,128135,128170,128175,128178,128181,128184,128187,128191,128194,128203,128207,128220,128225,128228,128231,128234,128238,128241,128245,128248,128303,128306,128337,128340,128394,128398,128401,128567,128690,128693,128696,128699,128702,128706,128709,128713,128716,128719,128723,128726,128757,128784,128812,128815,128819,128845,128888,128892,128986,128989,129016,129019,129022,129025,129028,129031,129034,129037,129040,129043,129047,129104,129131,129135,129183,129187,129228,129230,129233,129236,129239,129242,129246,129338,129341,129344,129347,129351,129474,129675,129679,129683,129686,129689,129692,129696,129699,129702,129727,129730,129733,129736,129739,129742,129746,129754,129816,129819,129877,129880,129883,129886,129889,129892,129895,129898,129935],[10,128044,128040],{"id":128045},"_8-css显示模式与背景特性",[15,128047,128049],{"id":128048},"_81-css元素显示模式","8.1 css元素显示模式",[20,128051,128052,128053,128055,128056,128058],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[42,128054,126263],{},"自己占一行，比如一行可以放多个",[42,128057,126266],{},"，HTML 元素一般分为块元素和行内元素两种类型",[249,128060,128062],{"id":128061},"_811-块元素","8.1.1 块元素",[20,128064,128065,128066,128068,128069,490,128072,490,128074,490,128076,490,128079,490,128082,128085,128086,128088],{},"常见的块元素有",[42,128067,126167],{},"~",[42,128070,128071],{},"\u003Ch6>",[42,128073,126193],{},[42,128075,126263],{},[42,128077,128078],{},"\u003Cul>",[42,128080,128081],{},"\u003Col>",[42,128083,128084],{},"\u003Cli>","等，其中 ",[42,128087,126263],{}," 标签是最典型的块元素",[20,128090,128091],{},[427,128092,128093],{},"块级元素的特点：",[20,128095,128096],{},"① 比较霸道，自己独占一行。",[20,128098,128099],{},"② 高度，宽度、外边距以及内边距都可以控制。",[20,128101,128102],{},"③ 宽度默认是容器（父级宽度）的100%。",[20,128104,128105],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[20,128107,128108],{},[427,128109,310],{},[20,128111,128112],{},"①文字类的元素内不能使用块级元素",[20,128114,77349,128115,128117,128118,128120,128121],{},[42,128116,126193],{}," 标签主要用于存放文字，因此 ",[42,128119,126193],{}," 里面不能放块级元素，特别是不能放",[42,128122,126263],{},[20,128124,128125,128126,128068,128128,128130],{},"⑥同理， ",[42,128127,126167],{},[42,128129,128071],{},"等都是文字类块级标签，里面也不能放其他块级元素",[249,128132,128134],{"id":128133},"_812-行内元素","8.1.2 行内元素",[20,128136,128137,128138,490,128140,490,128143,490,128146,490,128149,490,128152,490,128155,490,128158,490,128161,490,128164,128166,128167,128169],{},"常见的行内元素有 ",[42,128139,126425],{},[42,128141,128142],{},"\u003Cstrong>",[42,128144,128145],{},"\u003Cb>",[42,128147,128148],{},"\u003Cem>",[42,128150,128151],{},"\u003Ci>",[42,128153,128154],{},"\u003Cdel>",[42,128156,128157],{},"\u003Cs>",[42,128159,128160],{},"\u003Cins>",[42,128162,128163],{},"\u003Cu>",[42,128165,126266],{}," 等，其中 ",[42,128168,126266],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[20,128171,128172],{},[427,128173,128174],{},"特点：",[20,128176,128177],{},"① 相邻行内元素在一行上，一行可以显示多个。",[20,128179,128180],{},"② 高、宽直接设置是无效的。",[20,128182,128183],{},"③ 默认宽度就是它本身内容的宽度。",[20,128185,128186],{},"④ 行内元素只能容纳文本或其他行内元素。",[20,128188,128189],{},[427,128190,310],{},[20,128192,128193],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[20,128195,128196,128197,128199,128200,128202],{},"②特殊情况链接 ",[42,128198,126425],{}," 里面可以放块级元素，但是给 ",[42,128201,126425],{}," 转换一下块级模式最安全",[249,128204,128206],{"id":128205},"_813-行内块元素","8.1.3 行内块元素",[20,128208,128209,128210,490,128213,490,128216,128219],{},"在行内元素中有几个特殊的标签 —— ",[42,128211,128212],{},"\u003Cimg \u002F>",[42,128214,128215],{},"\u003Cinput \u002F>",[42,128217,128218],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[20,128221,128222],{},[427,128223,128224],{},"行内块元素的特点：",[20,128226,128227],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[20,128229,128230],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[20,128232,128233],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[249,128235,128237],{"id":128236},"_814-总结","8.1.4 总结",[23,128239],{"style":126508,"src":128240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[249,128242,128244],{"id":128243},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[20,128246,128247],{},"①转换为块元素：display:block;",[36,128249,128251],{"className":126652,"code":128250,"language":126654,"meta":25,"style":25},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[42,128252,128253,128258,128264,128275,128287,128299],{"__ignoreMap":25},[45,128254,128255],{"class":47,"line":48},[45,128256,128257],{"class":337},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[45,128259,128260,128262],{"class":47,"line":66},[45,128261,516],{"class":51400},[45,128263,15721],{"class":55},[45,128265,128266,128269,128271,128273],{"class":47,"line":1331},[45,128267,128268],{"class":79},"  display",[45,128270,51537],{"class":55},[45,128272,60969],{"class":79},[45,128274,1442],{"class":55},[45,128276,128277,128279,128281,128283,128285],{"class":47,"line":1346},[45,128278,70668],{"class":79},[45,128280,51537],{"class":55},[45,128282,588],{"class":79},[45,128284,51592],{"class":51},[45,128286,1442],{"class":55},[45,128288,128289,128291,128293,128295,128297],{"class":47,"line":1352},[45,128290,70888],{"class":79},[45,128292,51537],{"class":55},[45,128294,678],{"class":79},[45,128296,51592],{"class":51},[45,128298,1442],{"class":55},[45,128300,128301],{"class":47,"line":1366},[45,128302,1716],{"class":55},[20,128304,128305],{},"②转换为行内元素：display:inline;",[36,128307,128309],{"className":126652,"code":128308,"language":126654,"meta":25,"style":25},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[42,128310,128311,128316,128322,128333],{"__ignoreMap":25},[45,128312,128313],{"class":47,"line":48},[45,128314,128315],{"class":337},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[45,128317,128318,128320],{"class":47,"line":66},[45,128319,51711],{"class":51400},[45,128321,15721],{"class":55},[45,128323,128324,128326,128328,128331],{"class":47,"line":1331},[45,128325,128268],{"class":79},[45,128327,51537],{"class":55},[45,128329,128330],{"class":79},"inline",[45,128332,1442],{"class":55},[45,128334,128335],{"class":47,"line":1346},[45,128336,1716],{"class":55},[20,128338,128339],{},"③转换为行内块：display:inline-block;",[36,128341,128343],{"className":126652,"code":128342,"language":126654,"meta":25,"style":25},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[42,128344,128345,128350,128356,128366,128378,128390],{"__ignoreMap":25},[45,128346,128347],{"class":47,"line":48},[45,128348,128349],{"class":337},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[45,128351,128352,128354],{"class":47,"line":66},[45,128353,45],{"class":51400},[45,128355,15721],{"class":55},[45,128357,128358,128360,128362,128364],{"class":47,"line":1331},[45,128359,128268],{"class":79},[45,128361,51537],{"class":55},[45,128363,72483],{"class":79},[45,128365,1442],{"class":55},[45,128367,128368,128370,128372,128374,128376],{"class":47,"line":1346},[45,128369,70668],{"class":79},[45,128371,51537],{"class":55},[45,128373,889],{"class":79},[45,128375,51592],{"class":51},[45,128377,1442],{"class":55},[45,128379,128380,128382,128384,128386,128388],{"class":47,"line":1352},[45,128381,70888],{"class":79},[45,128383,51537],{"class":55},[45,128385,1228],{"class":79},[45,128387,51592],{"class":51},[45,128389,1442],{"class":55},[45,128391,128392],{"class":47,"line":1366},[45,128393,1716],{"class":55},[249,128395,128397],{"id":128396},"_816-小米侧边栏","8.1.6 小米侧边栏",[23,128399],{"style":126508,"src":128400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[36,128402,128404],{"className":127399,"code":128403,"language":127401,"meta":25,"style":25},"\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",[42,128405,128406,128411,128426,128445,128464,128483,128502,128521,128540,128559],{"__ignoreMap":25},[45,128407,128408],{"class":47,"line":48},[45,128409,128410],{"class":337},"\u003C!-- 小米侧边栏案例 -->\n",[45,128412,128413,128415,128417,128419,128421,128424],{"class":47,"line":66},[45,128414,1187],{"class":55},[45,128416,51711],{"class":51400},[45,128418,53586],{"class":69},[45,128420,59],{"class":55},[45,128422,128423],{"class":62},"\"sidebar\"",[45,128425,51407],{"class":55},[45,128427,128428,128430,128432,128434,128436,128438,128441,128443],{"class":47,"line":1331},[45,128429,52244],{"class":55},[45,128431,516],{"class":51400},[45,128433,61157],{"class":69},[45,128435,59],{"class":55},[45,128437,61162],{"class":62},[45,128439,128440],{"class":55},">手机 电话卡\u003C\u002F",[45,128442,516],{"class":51400},[45,128444,51407],{"class":55},[45,128446,128447,128449,128451,128453,128455,128457,128460,128462],{"class":47,"line":1346},[45,128448,52244],{"class":55},[45,128450,516],{"class":51400},[45,128452,61157],{"class":69},[45,128454,59],{"class":55},[45,128456,61162],{"class":62},[45,128458,128459],{"class":55},">电视 盒子\u003C\u002F",[45,128461,516],{"class":51400},[45,128463,51407],{"class":55},[45,128465,128466,128468,128470,128472,128474,128476,128479,128481],{"class":47,"line":1352},[45,128467,52244],{"class":55},[45,128469,516],{"class":51400},[45,128471,61157],{"class":69},[45,128473,59],{"class":55},[45,128475,61162],{"class":62},[45,128477,128478],{"class":55},">笔记本 平板\u003C\u002F",[45,128480,516],{"class":51400},[45,128482,51407],{"class":55},[45,128484,128485,128487,128489,128491,128493,128495,128498,128500],{"class":47,"line":1366},[45,128486,52244],{"class":55},[45,128488,516],{"class":51400},[45,128490,61157],{"class":69},[45,128492,59],{"class":55},[45,128494,61162],{"class":62},[45,128496,128497],{"class":55},">出行 穿戴\u003C\u002F",[45,128499,516],{"class":51400},[45,128501,51407],{"class":55},[45,128503,128504,128506,128508,128510,128512,128514,128517,128519],{"class":47,"line":1372},[45,128505,52244],{"class":55},[45,128507,516],{"class":51400},[45,128509,61157],{"class":69},[45,128511,59],{"class":55},[45,128513,61162],{"class":62},[45,128515,128516],{"class":55},">智能 路由器\u003C\u002F",[45,128518,516],{"class":51400},[45,128520,51407],{"class":55},[45,128522,128523,128525,128527,128529,128531,128533,128536,128538],{"class":47,"line":1463},[45,128524,52244],{"class":55},[45,128526,516],{"class":51400},[45,128528,61157],{"class":69},[45,128530,59],{"class":55},[45,128532,61162],{"class":62},[45,128534,128535],{"class":55},">健康 儿童\u003C\u002F",[45,128537,516],{"class":51400},[45,128539,51407],{"class":55},[45,128541,128542,128544,128546,128548,128550,128552,128555,128557],{"class":47,"line":1469},[45,128543,52244],{"class":55},[45,128545,516],{"class":51400},[45,128547,61157],{"class":69},[45,128549,59],{"class":55},[45,128551,61162],{"class":62},[45,128553,128554],{"class":55},">耳机 音响\u003C\u002F",[45,128556,516],{"class":51400},[45,128558,51407],{"class":55},[45,128560,128561,128563,128565],{"class":47,"line":1481},[45,128562,51885],{"class":55},[45,128564,51711],{"class":51400},[45,128566,51407],{"class":55},[36,128568,128570],{"className":126652,"code":128569,"language":126654,"meta":25,"style":25},".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",[42,128571,128572,128581,128591,128604,128616,128628,128640,128650,128661,128665,128675,128686],{"__ignoreMap":25},[45,128573,128574,128577,128579],{"class":47,"line":48},[45,128575,128576],{"class":69},".sidebar",[45,128578,1550],{"class":51400},[45,128580,15721],{"class":55},[45,128582,128583,128585,128587,128589],{"class":47,"line":66},[45,128584,128268],{"class":79},[45,128586,51537],{"class":55},[45,128588,60969],{"class":79},[45,128590,1442],{"class":55},[45,128592,128593,128595,128597,128600,128602],{"class":47,"line":1331},[45,128594,70668],{"class":79},[45,128596,51537],{"class":55},[45,128598,128599],{"class":79},"234",[45,128601,51592],{"class":51},[45,128603,1442],{"class":55},[45,128605,128606,128608,128610,128612,128614],{"class":47,"line":1346},[45,128607,70888],{"class":79},[45,128609,51537],{"class":55},[45,128611,729],{"class":79},[45,128613,51592],{"class":51},[45,128615,1442],{"class":55},[45,128617,128618,128620,128622,128624,128626],{"class":47,"line":1352},[45,128619,127336],{"class":79},[45,128621,51537],{"class":55},[45,128623,729],{"class":79},[45,128625,51592],{"class":51},[45,128627,1442],{"class":55},[45,128629,128630,128632,128634,128636,128638],{"class":47,"line":1366},[45,128631,70923],{"class":79},[45,128633,51537],{"class":55},[45,128635,1228],{"class":79},[45,128637,51592],{"class":51},[45,128639,1442],{"class":55},[45,128641,128642,128644,128646,128648],{"class":47,"line":1372},[45,128643,71005],{"class":79},[45,128645,51537],{"class":55},[45,128647,60942],{"class":79},[45,128649,1442],{"class":55},[45,128651,128652,128654,128656,128659],{"class":47,"line":1463},[45,128653,70978],{"class":79},[45,128655,51537],{"class":55},[45,128657,128658],{"class":79},"#55585a",[45,128660,1442],{"class":55},[45,128662,128663],{"class":47,"line":1469},[45,128664,1716],{"class":55},[45,128666,128667,128669,128671,128673],{"class":47,"line":1481},[45,128668,128576],{"class":69},[45,128670,1550],{"class":51400},[45,128672,61040],{"class":69},[45,128674,15721],{"class":55},[45,128676,128677,128679,128681,128684],{"class":47,"line":1763},[45,128678,70978],{"class":79},[45,128680,51537],{"class":55},[45,128682,128683],{"class":79},"#ff6700",[45,128685,1442],{"class":55},[45,128687,128688],{"class":47,"line":1768},[45,128689,1716],{"class":55},[23,128691],{"style":126508,"src":128692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[20,128694,128695],{},"行高=盒子高度：实现文字的垂直居中",[20,128697,128698],{},"原理讲解：",[23,128700],{"style":126508,"src":128701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[15,128703,128705],{"id":128704},"_82-css背景","8.2 css背景",[20,128707,128708],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[249,128710,128712],{"id":128711},"_821-背景颜色","8.2.1 背景颜色",[20,128714,128715],{},"background-color:颜色值;",[20,128717,128718],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[249,128720,128722],{"id":128721},"_822-背景图片","8.2.2 背景图片",[20,128724,128725],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[36,128727,128729],{"className":126652,"code":128728,"language":126654,"meta":25,"style":25},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[42,128730,128731,128737,128753],{"__ignoreMap":25},[45,128732,128733,128735],{"class":47,"line":48},[45,128734,51711],{"class":51400},[45,128736,15721],{"class":55},[45,128738,128739,128742,128744,128746,128748,128751],{"class":47,"line":66},[45,128740,128741],{"class":79},"  background-image",[45,128743,51537],{"class":55},[45,128745,61826],{"class":79},[45,128747,282],{"class":55},[45,128749,128750],{"class":5366},"images\u002Fbg.png",[45,128752,2869],{"class":55},[45,128754,128755],{"class":47,"line":1331},[45,128756,1716],{"class":55},[415,128758,128759,128768],{},[418,128760,128761],{},[421,128762,128763,128766],{},[424,128764,128765],{"align":23885},"参数值",[424,128767,102796],{"align":23885},[462,128769,128770,128777],{},[421,128771,128772,128774],{},[467,128773,54837],{"align":23885},[467,128775,128776],{"align":23885},"无背景图（默认的）",[421,128778,128779,128781],{},[467,128780,61826],{"align":23885},[467,128782,128783],{"align":23885},"使用绝对或相对地址指定背景图像",[36,128785,128786],{"className":126652,"code":128728,"language":126654,"meta":25,"style":25},[42,128787,128788,128794,128808],{"__ignoreMap":25},[45,128789,128790,128792],{"class":47,"line":48},[45,128791,51711],{"class":51400},[45,128793,15721],{"class":55},[45,128795,128796,128798,128800,128802,128804,128806],{"class":47,"line":66},[45,128797,128741],{"class":79},[45,128799,51537],{"class":55},[45,128801,61826],{"class":79},[45,128803,282],{"class":55},[45,128805,128750],{"class":5366},[45,128807,2869],{"class":55},[45,128809,128810],{"class":47,"line":1331},[45,128811,1716],{"class":55},[20,128813,128814],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[249,128816,128818],{"id":128817},"_823-背景平铺","8.2.3 背景平铺",[36,128820,128822],{"className":126652,"code":128821,"language":126654,"meta":25,"style":25},"div {\n  background-repeat: no-repeat;\n}\n",[42,128823,128824,128830,128841],{"__ignoreMap":25},[45,128825,128826,128828],{"class":47,"line":48},[45,128827,51711],{"class":51400},[45,128829,15721],{"class":55},[45,128831,128832,128835,128837,128839],{"class":47,"line":66},[45,128833,128834],{"class":79},"  background-repeat",[45,128836,51537],{"class":55},[45,128838,61836],{"class":79},[45,128840,1442],{"class":55},[45,128842,128843],{"class":47,"line":1331},[45,128844,1716],{"class":55},[415,128846,128847,128855],{},[418,128848,128849],{},[421,128850,128851,128853],{},[424,128852,128765],{"align":23885},[424,128854,102796],{"align":23885},[462,128856,128857,128865,128872,128880],{},[421,128858,128859,128862],{},[467,128860,128861],{"align":23885},"repeat",[467,128863,128864],{"align":23885},"背景图像在纵向和横向上平铺（默认的）",[421,128866,128867,128869],{},[467,128868,61836],{"align":23885},[467,128870,128871],{"align":23885},"背景图像不平铺",[421,128873,128874,128877],{},[467,128875,128876],{"align":23885},"repeat-x",[467,128878,128879],{"align":23885},"背景图像在横向上平铺",[421,128881,128882,128885],{},[467,128883,128884],{"align":23885},"repeat-y",[467,128886,128887],{"align":23885},"背景图像在纵向平铺",[249,128889,128891],{"id":128890},"_824-背景图片位置","8.2.4 背景图片位置",[36,128893,128895],{"className":126652,"code":128894,"language":126654,"meta":25,"style":25},"\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",[42,128896,128897,128902,128908,128922,128926,128931,128937,128953,128957,128962,128968,128982],{"__ignoreMap":25},[45,128898,128899],{"class":47,"line":48},[45,128900,128901],{"class":337},"\u002F* 方位名词 *\u002F\n",[45,128903,128904,128906],{"class":47,"line":66},[45,128905,51711],{"class":51400},[45,128907,15721],{"class":55},[45,128909,128910,128913,128915,128917,128920],{"class":47,"line":1331},[45,128911,128912],{"class":79},"  background-position",[45,128914,51537],{"class":55},[45,128916,51692],{"class":79},[45,128918,128919],{"class":79}," top",[45,128921,1442],{"class":55},[45,128923,128924],{"class":47,"line":1346},[45,128925,1716],{"class":55},[45,128927,128928],{"class":47,"line":1352},[45,128929,128930],{"class":337},"\u002F* 精确单位 *\u002F\n",[45,128932,128933,128935],{"class":47,"line":1366},[45,128934,51711],{"class":51400},[45,128936,15721],{"class":55},[45,128938,128939,128941,128943,128945,128947,128949,128951],{"class":47,"line":1372},[45,128940,128912],{"class":79},[45,128942,51537],{"class":55},[45,128944,977],{"class":79},[45,128946,51592],{"class":51},[45,128948,57604],{"class":79},[45,128950,51592],{"class":51},[45,128952,1442],{"class":55},[45,128954,128955],{"class":47,"line":1463},[45,128956,1716],{"class":55},[45,128958,128959],{"class":47,"line":1469},[45,128960,128961],{"class":337},"\u002F* 混合单位 *\u002F\n",[45,128963,128964,128966],{"class":47,"line":1481},[45,128965,51711],{"class":51400},[45,128967,15721],{"class":55},[45,128969,128970,128972,128974,128976,128978,128980],{"class":47,"line":1763},[45,128971,128912],{"class":79},[45,128973,51537],{"class":55},[45,128975,977],{"class":79},[45,128977,51592],{"class":51},[45,128979,17293],{"class":79},[45,128981,1442],{"class":55},[45,128983,128984],{"class":47,"line":1768},[45,128985,1716],{"class":55},[20,128987,128988],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[415,128990,128991,128999],{},[418,128992,128993],{},[421,128994,128995,128997],{},[424,128996,128765],{"align":23885},[424,128998,25969],{"align":23885},[462,129000,129001,129008],{},[421,129002,129003,129005],{},[467,129004,52068],{"align":23885},[467,129006,129007],{"align":23885},"百分数|由浮点数和单位标识符组成的长度值",[421,129009,129010,129013],{},[467,129011,129012],{"align":23885},"position",[467,129014,129015],{"align":23885},"top|center|bottom|left|center|right 方位名词",[20,129017,129018],{},"其他说明：",[20,129020,129021],{},"①参数是方位名词",[20,129023,129024],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[20,129026,129027],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[20,129029,129030],{},"②参数是精确单位",[20,129032,129033],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[20,129035,129036],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[20,129038,129039],{},"③参数是混合单位",[20,129041,129042],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[249,129044,129046],{"id":129045},"_825-背景图片固定","8.2.5 背景图片固定",[36,129048,129050],{"className":126652,"code":129049,"language":126654,"meta":25,"style":25},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[42,129051,129052,129057,129063,129075,129079,129084,129090,129100],{"__ignoreMap":25},[45,129053,129054],{"class":47,"line":48},[45,129055,129056],{"class":337},"\u002F* 背景滚动（默认） *\u002F\n",[45,129058,129059,129061],{"class":47,"line":66},[45,129060,51711],{"class":51400},[45,129062,15721],{"class":55},[45,129064,129065,129068,129070,129073],{"class":47,"line":1331},[45,129066,129067],{"class":79},"  background-attachment",[45,129069,51537],{"class":55},[45,129071,129072],{"class":79},"scroll",[45,129074,1442],{"class":55},[45,129076,129077],{"class":47,"line":1346},[45,129078,1716],{"class":55},[45,129080,129081],{"class":47,"line":1352},[45,129082,129083],{"class":337},"\u002F* 背景固定 *\u002F\n",[45,129085,129086,129088],{"class":47,"line":1366},[45,129087,51711],{"class":51400},[45,129089,15721],{"class":55},[45,129091,129092,129094,129096,129098],{"class":47,"line":1372},[45,129093,129067],{"class":79},[45,129095,51537],{"class":55},[45,129097,86333],{"class":79},[45,129099,1442],{"class":55},[45,129101,129102],{"class":47,"line":1463},[45,129103,1716],{"class":55},[415,129105,129106,129115],{},[418,129107,129108],{},[421,129109,129110,129113],{},[424,129111,129112],{"align":23885},"参数",[424,129114,102796],{"align":23885},[462,129116,129117,129124],{},[421,129118,129119,129121],{},[467,129120,129072],{"align":23885},[467,129122,129123],{"align":23885},"背景图像是随对象内容滚动",[421,129125,129126,129128],{},[467,129127,86333],{"align":23885},[467,129129,129130],{"align":23885},"背景图像固定",[249,129132,129134],{"id":129133},"_826-背景样式合写","8.2.6 背景样式合写",[36,129136,129138],{"className":126652,"code":129137,"language":126654,"meta":25,"style":25},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[42,129139,129140,129145,129151,129179],{"__ignoreMap":25},[45,129141,129142],{"class":47,"line":48},[45,129143,129144],{"class":337},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[45,129146,129147,129149],{"class":47,"line":66},[45,129148,51711],{"class":51400},[45,129150,15721],{"class":55},[45,129152,129153,129155,129157,129159,129162,129164,129166,129168,129170,129173,129175,129177],{"class":47,"line":1331},[45,129154,70711],{"class":79},[45,129156,51537],{"class":55},[45,129158,60942],{"class":79},[45,129160,129161],{"class":79}," url",[45,129163,282],{"class":55},[45,129165,128750],{"class":5366},[45,129167,13863],{"class":55},[45,129169,61836],{"class":79},[45,129171,129172],{"class":79}," fixed",[45,129174,17293],{"class":79},[45,129176,128919],{"class":79},[45,129178,1442],{"class":55},[45,129180,129181],{"class":47,"line":1346},[45,129182,1716],{"class":55},[249,129184,129186],{"id":129185},"_827-背景色半透明","8.2.7 背景色半透明",[36,129188,129190],{"className":126652,"code":129189,"language":126654,"meta":25,"style":25},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[42,129191,129192,129198,129224],{"__ignoreMap":25},[45,129193,129194,129196],{"class":47,"line":48},[45,129195,51711],{"class":51400},[45,129197,15721],{"class":55},[45,129199,129200,129202,129204,129206,129208,129210,129212,129214,129216,129218,129220,129222],{"class":47,"line":66},[45,129201,70711],{"class":79},[45,129203,51537],{"class":55},[45,129205,55210],{"class":79},[45,129207,282],{"class":55},[45,129209,469],{"class":79},[45,129211,12584],{"class":55},[45,129213,469],{"class":79},[45,129215,12584],{"class":55},[45,129217,469],{"class":79},[45,129219,12584],{"class":55},[45,129221,100621],{"class":79},[45,129223,2869],{"class":55},[45,129225,129226],{"class":47,"line":1331},[45,129227,1716],{"class":55},[20,129229,99496],{},[20,129231,129232],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[20,129234,129235],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[20,129237,129238],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[20,129240,129241],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[249,129243,129245],{"id":129244},"_828-总结","8.2.8 总结",[415,129247,129248,129259],{},[418,129249,129250],{},[421,129251,129252,129255,129257],{},[424,129253,129254],{"align":23885},"属性",[424,129256,102796],{"align":23885},[424,129258,430],{"align":23885},[462,129260,129261,129272,129283,129294,129305,129316,129327],{},[421,129262,129263,129266,129269],{},[467,129264,129265],{"align":23885},"background-color",[467,129267,129268],{"align":23885},"背景颜色",[467,129270,129271],{"align":23885},"预定义的颜色值\u002F十六进制\u002FRGB代码",[421,129273,129274,129277,129280],{},[467,129275,129276],{"align":23885},"background-image",[467,129278,129279],{"align":23885},"背景图片",[467,129281,129282],{"align":23885},"url(图片路径)",[421,129284,129285,129288,129291],{},[467,129286,129287],{"align":23885},"background-repeat",[467,129289,129290],{"align":23885},"是否平铺",[467,129292,129293],{"align":23885},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[421,129295,129296,129299,129302],{},[467,129297,129298],{"align":23885},"background-position",[467,129300,129301],{"align":23885},"背景位置",[467,129303,129304],{"align":23885},"length\u002Fposition 分别是x和y坐标",[421,129306,129307,129310,129313],{},[467,129308,129309],{"align":23885},"background-attachment",[467,129311,129312],{"align":23885},"背景附着",[467,129314,129315],{"align":23885},"scroll(背景滚动) \u002Ffixed (背景固定)",[421,129317,129318,129321,129324],{},[467,129319,129320],{"align":23885},"背景简写",[467,129322,129323],{"align":23885},"书写更简单",[467,129325,129326],{"align":23885},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[421,129328,129329,129332,129335],{},[467,129330,129331],{"align":23885},"背景半透明",[467,129333,129334],{"align":23885},"背景颜色半透明",[467,129336,129337],{"align":23885},"background: rgba(0,0,0.3); 后面必须是4个值",[20,129339,129340],{},"颜色渐变：",[23,129342],{"style":126508,"src":129343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[23,129345],{"style":126508,"src":129346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[249,129348,129350],{"id":129349},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[36,129352,129354],{"className":127399,"code":129353,"language":127401,"meta":25,"style":25},"\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",[42,129355,129356,129371,129390,129409,129428,129447,129466],{"__ignoreMap":25},[45,129357,129358,129360,129362,129364,129366,129369],{"class":47,"line":48},[45,129359,1187],{"class":55},[45,129361,51711],{"class":51400},[45,129363,53586],{"class":69},[45,129365,59],{"class":55},[45,129367,129368],{"class":62},"\"nav\"",[45,129370,51407],{"class":55},[45,129372,129373,129375,129377,129379,129381,129383,129386,129388],{"class":47,"line":66},[45,129374,52244],{"class":55},[45,129376,516],{"class":51400},[45,129378,61157],{"class":69},[45,129380,59],{"class":55},[45,129382,61162],{"class":62},[45,129384,129385],{"class":55},">五彩导航1\u003C\u002F",[45,129387,516],{"class":51400},[45,129389,51407],{"class":55},[45,129391,129392,129394,129396,129398,129400,129402,129405,129407],{"class":47,"line":1331},[45,129393,52244],{"class":55},[45,129395,516],{"class":51400},[45,129397,61157],{"class":69},[45,129399,59],{"class":55},[45,129401,61162],{"class":62},[45,129403,129404],{"class":55},">五彩导航2\u003C\u002F",[45,129406,516],{"class":51400},[45,129408,51407],{"class":55},[45,129410,129411,129413,129415,129417,129419,129421,129424,129426],{"class":47,"line":1346},[45,129412,52244],{"class":55},[45,129414,516],{"class":51400},[45,129416,61157],{"class":69},[45,129418,59],{"class":55},[45,129420,61162],{"class":62},[45,129422,129423],{"class":55},">五彩导航3\u003C\u002F",[45,129425,516],{"class":51400},[45,129427,51407],{"class":55},[45,129429,129430,129432,129434,129436,129438,129440,129443,129445],{"class":47,"line":1352},[45,129431,52244],{"class":55},[45,129433,516],{"class":51400},[45,129435,61157],{"class":69},[45,129437,59],{"class":55},[45,129439,61162],{"class":62},[45,129441,129442],{"class":55},">五彩导航4\u003C\u002F",[45,129444,516],{"class":51400},[45,129446,51407],{"class":55},[45,129448,129449,129451,129453,129455,129457,129459,129462,129464],{"class":47,"line":1366},[45,129450,52244],{"class":55},[45,129452,516],{"class":51400},[45,129454,61157],{"class":69},[45,129456,59],{"class":55},[45,129458,61162],{"class":62},[45,129460,129461],{"class":55},">五彩导航5\u003C\u002F",[45,129463,516],{"class":51400},[45,129465,51407],{"class":55},[45,129467,129468,129470,129472],{"class":47,"line":1372},[45,129469,51885],{"class":55},[45,129471,51711],{"class":51400},[45,129473,51407],{"class":55},[36,129475,129477],{"className":126652,"code":129476,"language":126654,"meta":25,"style":25},".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",[42,129478,129479,129488,129498,129510,129522,129532,129544,129554,129558,129583,129606,129629,129652],{"__ignoreMap":25},[45,129480,129481,129484,129486],{"class":47,"line":48},[45,129482,129483],{"class":69},".nav",[45,129485,1550],{"class":51400},[45,129487,15721],{"class":55},[45,129489,129490,129492,129494,129496],{"class":47,"line":66},[45,129491,128268],{"class":79},[45,129493,51537],{"class":55},[45,129495,72483],{"class":79},[45,129497,1442],{"class":55},[45,129499,129500,129502,129504,129506,129508],{"class":47,"line":1331},[45,129501,70668],{"class":79},[45,129503,51537],{"class":55},[45,129505,1094],{"class":79},[45,129507,51592],{"class":51},[45,129509,1442],{"class":55},[45,129511,129512,129514,129516,129518,129520],{"class":47,"line":1346},[45,129513,70888],{"class":79},[45,129515,51537],{"class":55},[45,129517,1133],{"class":79},[45,129519,51592],{"class":51},[45,129521,1442],{"class":55},[45,129523,129524,129526,129528,129530],{"class":47,"line":1352},[45,129525,70626],{"class":79},[45,129527,51537],{"class":55},[45,129529,51692],{"class":79},[45,129531,1442],{"class":55},[45,129533,129534,129536,129538,129540,129542],{"class":47,"line":1366},[45,129535,127336],{"class":79},[45,129537,51537],{"class":55},[45,129539,1133],{"class":79},[45,129541,51592],{"class":51},[45,129543,1442],{"class":55},[45,129545,129546,129548,129550,129552],{"class":47,"line":1372},[45,129547,71005],{"class":79},[45,129549,51537],{"class":55},[45,129551,60942],{"class":79},[45,129553,1442],{"class":55},[45,129555,129556],{"class":47,"line":1463},[45,129557,1716],{"class":55},[45,129559,129560,129562,129564,129567,129569,129571,129574,129576,129578,129580],{"class":47,"line":1469},[45,129561,129483],{"class":69},[45,129563,1550],{"class":51400},[45,129565,129566],{"class":69},":nth-child",[45,129568,282],{"class":55},[45,129570,495],{"class":79},[45,129572,129573],{"class":55},") { ",[45,129575,129265],{"class":79},[45,129577,51537],{"class":55},[45,129579,128683],{"class":79},[45,129581,129582],{"class":55},"; }\n",[45,129584,129585,129587,129589,129591,129593,129595,129597,129599,129601,129604],{"class":47,"line":1481},[45,129586,129483],{"class":69},[45,129588,1550],{"class":51400},[45,129590,129566],{"class":69},[45,129592,282],{"class":55},[45,129594,356],{"class":79},[45,129596,129573],{"class":55},[45,129598,129265],{"class":79},[45,129600,51537],{"class":55},[45,129602,129603],{"class":79},"#ff0000",[45,129605,129582],{"class":55},[45,129607,129608,129610,129612,129614,129616,129618,129620,129622,129624,129627],{"class":47,"line":1763},[45,129609,129483],{"class":69},[45,129611,1550],{"class":51400},[45,129613,129566],{"class":69},[45,129615,282],{"class":55},[45,129617,350],{"class":79},[45,129619,129573],{"class":55},[45,129621,129265],{"class":79},[45,129623,51537],{"class":55},[45,129625,129626],{"class":79},"#00a4ff",[45,129628,129582],{"class":55},[45,129630,129631,129633,129635,129637,129639,129641,129643,129645,129647,129650],{"class":47,"line":1768},[45,129632,129483],{"class":69},[45,129634,1550],{"class":51400},[45,129636,129566],{"class":69},[45,129638,282],{"class":55},[45,129640,570],{"class":79},[45,129642,129573],{"class":55},[45,129644,129265],{"class":79},[45,129646,51537],{"class":55},[45,129648,129649],{"class":79},"#ff00ff",[45,129651,129582],{"class":55},[45,129653,129654,129656,129658,129660,129662,129664,129666,129668,129670,129673],{"class":47,"line":1774},[45,129655,129483],{"class":69},[45,129657,1550],{"class":51400},[45,129659,129566],{"class":69},[45,129661,282],{"class":55},[45,129663,596],{"class":79},[45,129665,129573],{"class":55},[45,129667,129265],{"class":79},[45,129669,51537],{"class":55},[45,129671,129672],{"class":79},"#00ff00",[45,129674,129582],{"class":55},[15,129676,129678],{"id":129677},"_83-css三大特性","8.3 css三大特性",[249,129680,129682],{"id":129681},"_831-层叠性","8.3.1 层叠性",[20,129684,129685],{},"为了解决样式冲突问题",[20,129687,129688],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[20,129690,129691],{},"   ②样式不冲突，不会层叠",[249,129693,129695],{"id":129694},"_832-继承性","8.3.2 继承性",[20,129697,129698],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[20,129700,129701],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[36,129703,129705],{"className":126652,"code":129704,"language":126654,"meta":25,"style":25},"p {\n  color: #333;\n}\n",[42,129706,129707,129713,129723],{"__ignoreMap":25},[45,129708,129709,129711],{"class":47,"line":48},[45,129710,20],{"class":51400},[45,129712,15721],{"class":55},[45,129714,129715,129717,129719,129721],{"class":47,"line":66},[45,129716,71005],{"class":79},[45,129718,51537],{"class":55},[45,129720,62469],{"class":79},[45,129722,1442],{"class":55},[45,129724,129725],{"class":47,"line":1331},[45,129726,1716],{"class":55},[23,129728],{"style":126508,"src":129729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[20,129731,129732],{},"解释：①行高可以跟单位也可以不跟单位",[20,129734,129735],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[20,129737,129738],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[20,129740,129741],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[249,129743,129745],{"id":129744},"_833-优先级","8.3.3 优先级",[233,129747,129748,129751],{},[169,129749,129750],{},"选择器相同，则执行层叠性",[169,129752,129753],{},"选择器不同，则根据选择器权重执行",[415,129755,129756,129766],{},[418,129757,129758],{},[421,129759,129760,129763],{},[424,129761,129762],{"align":23885},"选择器",[424,129764,129765],{"align":23885},"选择器权重",[462,129767,129768,129776,129784,129792,129800,129808],{},[421,129769,129770,129773],{},[467,129771,129772],{"align":23885},"继承 或者*",[467,129774,129775],{"align":23885},"0，0，0，0",[421,129777,129778,129781],{},[467,129779,129780],{"align":23885},"标签选择器",[467,129782,129783],{"align":23885},"0，0，0，1",[421,129785,129786,129789],{},[467,129787,129788],{"align":23885},"类选择器，伪类选择器",[467,129790,129791],{"align":23885},"0，0，1，0",[421,129793,129794,129797],{},[467,129795,129796],{"align":23885},"ID选择器",[467,129798,129799],{"align":23885},"0，1，0，0",[421,129801,129802,129805],{},[467,129803,129804],{"align":23885},"行内样式",[467,129806,129807],{"align":23885},"1，0，0，0",[421,129809,129810,129813],{},[467,129811,129812],{"align":23885},"！important",[467,129814,129815],{"align":23885},"无穷大",[20,129817,129818],{},"! important用法：",[36,129820,129822],{"className":126652,"code":129821,"language":126654,"meta":25,"style":25},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[42,129823,129824,129829,129835,129848,129852,129857,129863,129873],{"__ignoreMap":25},[45,129825,129826],{"class":47,"line":48},[45,129827,129828],{"class":337},"\u002F* !important 拥有最高优先级 *\u002F\n",[45,129830,129831,129833],{"class":47,"line":66},[45,129832,51711],{"class":51400},[45,129834,15721],{"class":55},[45,129836,129837,129839,129841,129843,129846],{"class":47,"line":1331},[45,129838,71005],{"class":79},[45,129840,51537],{"class":55},[45,129842,51745],{"class":79},[45,129844,129845],{"class":51}," !important",[45,129847,1442],{"class":55},[45,129849,129850],{"class":47,"line":1346},[45,129851,1716],{"class":55},[45,129853,129854],{"class":47,"line":1352},[45,129855,129856],{"class":337},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[45,129858,129859,129861],{"class":47,"line":1366},[45,129860,51711],{"class":51400},[45,129862,15721],{"class":55},[45,129864,129865,129867,129869,129871],{"class":47,"line":1372},[45,129866,71005],{"class":79},[45,129868,51537],{"class":55},[45,129870,57521],{"class":79},[45,129872,1442],{"class":55},[45,129874,129875],{"class":47,"line":1463},[45,129876,1716],{"class":55},[20,129878,129879],{},"优先级注意点：",[20,129881,129882],{},"①权重是有4组数字组成,但是不会有进位",[20,129884,129885],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[20,129887,129888],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[20,129890,129891],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[20,129893,129894],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[20,129896,129897],{},"⑥复合选择器",[415,129899,129900,129910],{},[418,129901,129902],{},[421,129903,129904,129907],{},[424,129905,129906],{"align":23885},"div ul li",[424,129908,129909],{"align":23885},"0,0,0,3",[462,129911,129912,129920,129928],{},[421,129913,129914,129917],{},[467,129915,129916],{"align":23885},".nav ul li",[467,129918,129919],{"align":23885},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[421,129921,129922,129925],{},[467,129923,129924],{"align":23885},"a:hover",[467,129926,129927],{"align":23885},"0,0,1,1",[421,129929,129930,129933],{},[467,129931,129932],{"align":23885},".nav a",[467,129934,129927],{"align":23885},[196,129936,129937],{},"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":25,"searchDepth":66,"depth":66,"links":129939},[129940,129948,129959],{"id":128048,"depth":66,"text":128049,"children":129941},[129942,129943,129944,129945,129946,129947],{"id":128061,"depth":1331,"text":128062},{"id":128133,"depth":1331,"text":128134},{"id":128205,"depth":1331,"text":128206},{"id":128236,"depth":1331,"text":128237},{"id":128243,"depth":1331,"text":128244},{"id":128396,"depth":1331,"text":128397},{"id":128704,"depth":66,"text":128705,"children":129949},[129950,129951,129952,129953,129954,129955,129956,129957,129958],{"id":128711,"depth":1331,"text":128712},{"id":128721,"depth":1331,"text":128722},{"id":128817,"depth":1331,"text":128818},{"id":128890,"depth":1331,"text":128891},{"id":129045,"depth":1331,"text":129046},{"id":129133,"depth":1331,"text":129134},{"id":129185,"depth":1331,"text":129186},{"id":129244,"depth":1331,"text":129245},{"id":129349,"depth":1331,"text":129350},{"id":129677,"depth":66,"text":129678,"children":129960},[129961,129962,129963],{"id":129681,"depth":1331,"text":129682},{"id":129694,"depth":1331,"text":129695},{"id":129744,"depth":1331,"text":129745},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128040,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129970,"title":129971,"body":129972,"description":204,"extension":205,"meta":131562,"navigation":207,"path":131563,"seo":131564,"stem":131565,"__hash__":131566},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129973,"toc":131541},[129974,129977,129981,129984,129987,129990,129993,129996,129999,130002,130006,130014,130051,130087,130090,130104,130109,130143,130146,130239,130244,130247,130277,130280,130285,130293,130297,130304,130350,130394,130399,130402,130405,130408,130411,130414,130417,130419,130422,130426,130431,130475,130480,130483,130486,130523,130528,130531,130534,130537,130540,130572,130575,130578,130581,130613,130616,130619,130622,130626,130629,130661,130664,130668,130688,130691,130699,130702,130706,130711,130714,130746,130751,130754,130792,130796,130801,130804,130807,130838,130841,130858,130863,130915,130975,130980,131034,131072,131076,131080,131083,131087,131095,131098,131100,131111,131116,131164,131198,131201,131204,131207,131210,131254,131257,131260,131263,131266,131269,131272,131316,131319,131322,131325,131328,131331,131334,131340,131343,131387,131390,131393,131396,131399,131402,131446,131449,131451,131454,131458,131462,131500,131504,131507,131510,131514,131522,131526,131529,131532,131535,131538],[10,129975,129971],{"id":129976},"_9-css盒模型浮动与切图",[15,129978,129980],{"id":129979},"_91-盒子模型","9.1 盒子模型",[20,129982,129983],{},"利用盒子来设计网页",[20,129985,129986],{},"盒子包含：边框、外边距、内边距、实际内容",[20,129988,129989],{},"网页布局设置：",[20,129991,129992],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[20,129994,129995],{},"②利用css设置好盒子样式，然后摆放到相应位置",[20,129997,129998],{},"③往盒子里装内容",[23,130000],{"style":126508,"src":130001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[249,130003,130005],{"id":130004},"_911-边框border","9.1.1 边框（border）",[233,130007,130008,130011],{},[169,130009,130010],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[169,130012,130013],{},"语法",[36,130015,130017],{"className":126652,"code":130016,"language":126654,"meta":25,"style":25},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[42,130018,130019,130024,130030,130047],{"__ignoreMap":25},[45,130020,130021],{"class":47,"line":48},[45,130022,130023],{"class":337},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[45,130025,130026,130028],{"class":47,"line":66},[45,130027,51711],{"class":51400},[45,130029,15721],{"class":55},[45,130031,130032,130034,130036,130038,130040,130042,130045],{"class":47,"line":1331},[45,130033,70996],{"class":79},[45,130035,51537],{"class":55},[45,130037,495],{"class":79},[45,130039,51592],{"class":51},[45,130041,51621],{"class":79},[45,130043,130044],{"class":79}," #ccc",[45,130046,1442],{"class":55},[45,130048,130049],{"class":47,"line":1346},[45,130050,1716],{"class":55},[415,130052,130053,130061],{},[418,130054,130055],{},[421,130056,130057,130059],{},[424,130058,129254],{"align":23885},[424,130060,102796],{"align":23885},[462,130062,130063,130071,130079],{},[421,130064,130065,130068],{},[467,130066,130067],{"align":23885},"border-width",[467,130069,130070],{"align":23885},"定义边框粗细，单位是px",[421,130072,130073,130076],{},[467,130074,130075],{"align":23885},"border-style",[467,130077,130078],{"align":23885},"边框的样式",[421,130080,130081,130084],{},[467,130082,130083],{"align":23885},"border-color",[467,130085,130086],{"align":23885},"边框的颜色",[20,130088,130089],{},"边框样式 border-style 可以设置如下值：",[166,130091,130092,130095,130098,130101],{},[169,130093,130094],{},"none：没有边框即忽略所有边框的宽度（默认值）",[169,130096,130097],{},"solid：边框为单实线(最为常用的)",[169,130099,130100],{},"dashed：边框为虚线",[169,130102,130103],{},"dotted：边框为点线",[233,130105,130106],{"start":1331},[169,130107,130108],{},"边框的合写分写",[36,130110,130111],{"className":126652,"code":130016,"language":126654,"meta":25,"style":25},[42,130112,130113,130117,130123,130139],{"__ignoreMap":25},[45,130114,130115],{"class":47,"line":48},[45,130116,130023],{"class":337},[45,130118,130119,130121],{"class":47,"line":66},[45,130120,51711],{"class":51400},[45,130122,15721],{"class":55},[45,130124,130125,130127,130129,130131,130133,130135,130137],{"class":47,"line":1331},[45,130126,70996],{"class":79},[45,130128,51537],{"class":55},[45,130130,495],{"class":79},[45,130132,51592],{"class":51},[45,130134,51621],{"class":79},[45,130136,130044],{"class":79},[45,130138,1442],{"class":55},[45,130140,130141],{"class":47,"line":1346},[45,130142,1716],{"class":55},[20,130144,130145],{},"边框分开写法：",[36,130147,130149],{"className":126652,"code":130148,"language":126654,"meta":25,"style":25},"\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",[42,130150,130151,130156,130162,130180,130198,130217,130235],{"__ignoreMap":25},[45,130152,130153],{"class":47,"line":48},[45,130154,130155],{"class":337},"\u002F* 边框分开写法 *\u002F\n",[45,130157,130158,130160],{"class":47,"line":66},[45,130159,51711],{"class":51400},[45,130161,15721],{"class":55},[45,130163,130164,130167,130169,130171,130173,130175,130178],{"class":47,"line":1331},[45,130165,130166],{"class":79},"  border-top",[45,130168,51537],{"class":55},[45,130170,495],{"class":79},[45,130172,51592],{"class":51},[45,130174,51621],{"class":79},[45,130176,130177],{"class":79}," #000",[45,130179,1442],{"class":55},[45,130181,130182,130185,130187,130189,130191,130193,130196],{"class":47,"line":1346},[45,130183,130184],{"class":79},"  border-right",[45,130186,51537],{"class":55},[45,130188,356],{"class":79},[45,130190,51592],{"class":51},[45,130192,62341],{"class":79},[45,130194,130195],{"class":79}," #333",[45,130197,1442],{"class":55},[45,130199,130200,130203,130205,130207,130209,130212,130215],{"class":47,"line":1352},[45,130201,130202],{"class":79},"  border-bottom",[45,130204,51537],{"class":55},[45,130206,350],{"class":79},[45,130208,51592],{"class":51},[45,130210,130211],{"class":79}," dotted",[45,130213,130214],{"class":79}," #666",[45,130216,1442],{"class":55},[45,130218,130219,130222,130224,130226,130228,130230,130233],{"class":47,"line":1366},[45,130220,130221],{"class":79},"  border-left",[45,130223,51537],{"class":55},[45,130225,495],{"class":79},[45,130227,51592],{"class":51},[45,130229,51621],{"class":79},[45,130231,130232],{"class":79}," #999",[45,130234,1442],{"class":55},[45,130236,130237],{"class":47,"line":1372},[45,130238,1716],{"class":55},[233,130240,130241],{"start":1346},[169,130242,130243],{},"表格的细线边框",[20,130245,130246],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[36,130248,130250],{"className":126652,"code":130249,"language":126654,"meta":25,"style":25},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[42,130251,130252,130257,130263,130273],{"__ignoreMap":25},[45,130253,130254],{"class":47,"line":48},[45,130255,130256],{"class":337},"\u002F* 表格细线边框合并 *\u002F\n",[45,130258,130259,130261],{"class":47,"line":66},[45,130260,415],{"class":51400},[45,130262,15721],{"class":55},[45,130264,130265,130267,130269,130271],{"class":47,"line":1331},[45,130266,70678],{"class":79},[45,130268,51537],{"class":55},[45,130270,65135],{"class":79},[45,130272,1442],{"class":55},[45,130274,130275],{"class":47,"line":1346},[45,130276,1716],{"class":55},[20,130278,130279],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[233,130281,130282],{"start":1352},[169,130283,130284],{},"解决边框额外增加盒子的实际大小的方法：",[166,130286,130287,130290],{},[169,130288,130289],{},"测量盒子大小的时候,不量边框",[169,130291,130292],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[249,130294,130296],{"id":130295},"_912-内边距","9.1.2 内边距",[233,130298,130299,130302],{},[169,130300,130301],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[169,130303,130013],{},[415,130305,130306,130316],{},[418,130307,130308],{},[421,130309,130310,130313],{},[424,130311,130312],{"align":23885},"值的个数",[424,130314,130315],{"align":23885},"表达意思",[462,130317,130318,130326,130334,130342],{},[421,130319,130320,130323],{},[467,130321,130322],{"align":23885},"padding: 5px;",[467,130324,130325],{"align":23885},"1个值，代表上下左右都有5个元素",[421,130327,130328,130331],{},[467,130329,130330],{"align":23885},"padding: 5px 10px;",[467,130332,130333],{"align":23885},"2个值，代表上下内边距为5像素，左右内边距为10像素",[421,130335,130336,130339],{},[467,130337,130338],{"align":23885},"padding: 5px 10px 20px;",[467,130340,130341],{"align":23885},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[421,130343,130344,130347],{},[467,130345,130346],{"align":23885},"padding: 5px 10px 20px 30px;",[467,130348,130349],{"align":23885},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[415,130351,130352,130360],{},[418,130353,130354],{},[421,130355,130356,130358],{},[424,130357,129254],{"align":23885},[424,130359,102796],{"align":23885},[462,130361,130362,130370,130378,130386],{},[421,130363,130364,130367],{},[467,130365,130366],{"align":23885},"padding-left",[467,130368,130369],{"align":23885},"左内边距",[421,130371,130372,130375],{},[467,130373,130374],{"align":23885},"padding-right",[467,130376,130377],{"align":23885},"右内边距",[421,130379,130380,130383],{},[467,130381,130382],{"align":23885},"padding-top",[467,130384,130385],{"align":23885},"上内边距",[421,130387,130388,130391],{},[467,130389,130390],{"align":23885},"padding-bottom",[467,130392,130393],{"align":23885},"下内边距",[233,130395,130396],{"start":1331},[169,130397,130398],{},"内边距会影响盒子的实际大小",[20,130400,130401],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[20,130403,130404],{},"①内容和边框有了距离，添加了内边距",[20,130406,130407],{},"②padding影响了盒子实际大小",[20,130409,130410],{},"内边距对盒子大小的影响：",[20,130412,130413],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[20,130415,130416],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[20,130418,95320],{},[20,130420,130421],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[249,130423,130425],{"id":130424},"_913-外边距","9.1.3 外边距",[233,130427,130428],{},[169,130429,130430],{},"控制盒子与盒子之间的距离",[415,130432,130433,130441],{},[418,130434,130435],{},[421,130436,130437,130439],{},[424,130438,129254],{"align":23885},[424,130440,102796],{"align":23885},[462,130442,130443,130451,130459,130467],{},[421,130444,130445,130448],{},[467,130446,130447],{"align":23885},"margin-left",[467,130449,130450],{"align":23885},"左外边距",[421,130452,130453,130456],{},[467,130454,130455],{"align":23885},"margin-right",[467,130457,130458],{"align":23885},"右外边距",[421,130460,130461,130464],{},[467,130462,130463],{"align":23885},"margin-top",[467,130465,130466],{"align":23885},"上外边距",[421,130468,130469,130472],{},[467,130470,130471],{"align":23885},"margin-bottom",[467,130473,130474],{"align":23885},"下外边距",[233,130476,130477],{"start":66},[169,130478,130479],{},"外边距可以让块级盒子水平居中的两个条件：",[20,130481,130482],{},"①盒子必须指定了宽度（width）",[20,130484,130485],{},"②盒子左右的外边距都设置为 auto",[36,130487,130489],{"className":126652,"code":130488,"language":126654,"meta":25,"style":25},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[42,130490,130491,130496,130503,130519],{"__ignoreMap":25},[45,130492,130493],{"class":47,"line":48},[45,130494,130495],{"class":337},"\u002F* margin 复合写法（同上） *\u002F\n",[45,130497,130498,130501],{"class":47,"line":66},[45,130499,130500],{"class":69},".box",[45,130502,15721],{"class":55},[45,130504,130505,130507,130509,130511,130513,130516],{"class":47,"line":1331},[45,130506,70570],{"class":79},[45,130508,51537],{"class":55},[45,130510,469],{"class":79},[45,130512,51656],{"class":79},[45,130514,130515],{"class":55},";  ",[45,130517,130518],{"class":337},"\u002F* 块级盒子水平居中 *\u002F\n",[45,130520,130521],{"class":47,"line":1346},[45,130522,1716],{"class":55},[233,130524,130525],{"start":1331},[169,130526,130527],{},"外边距塌陷问题",[20,130529,130530],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[23,130532],{"style":126508,"src":130533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[20,130535,130536],{},"解决方案：",[20,130538,130539],{},"①可以为父亲元素定义上边距",[36,130541,130542],{"className":126652,"code":130488,"language":126654,"meta":25,"style":25},[42,130543,130544,130548,130554,130568],{"__ignoreMap":25},[45,130545,130546],{"class":47,"line":48},[45,130547,130495],{"class":337},[45,130549,130550,130552],{"class":47,"line":66},[45,130551,130500],{"class":69},[45,130553,15721],{"class":55},[45,130555,130556,130558,130560,130562,130564,130566],{"class":47,"line":1331},[45,130557,70570],{"class":79},[45,130559,51537],{"class":55},[45,130561,469],{"class":79},[45,130563,51656],{"class":79},[45,130565,130515],{"class":55},[45,130567,130518],{"class":337},[45,130569,130570],{"class":47,"line":1346},[45,130571,1716],{"class":55},[20,130573,130574],{},"②可以为父亲元素定义上内边距",[20,130576,130577],{},"③可以为父亲元素添加overflow:hidden",[23,130579],{"style":126508,"src":130580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[36,130582,130583],{"className":126652,"code":130488,"language":126654,"meta":25,"style":25},[42,130584,130585,130589,130595,130609],{"__ignoreMap":25},[45,130586,130587],{"class":47,"line":48},[45,130588,130495],{"class":337},[45,130590,130591,130593],{"class":47,"line":66},[45,130592,130500],{"class":69},[45,130594,15721],{"class":55},[45,130596,130597,130599,130601,130603,130605,130607],{"class":47,"line":1331},[45,130598,70570],{"class":79},[45,130600,51537],{"class":55},[45,130602,469],{"class":79},[45,130604,51656],{"class":79},[45,130606,130515],{"class":55},[45,130608,130518],{"class":337},[45,130610,130611],{"class":47,"line":1346},[45,130612,1716],{"class":55},[23,130614],{"style":126508,"src":130615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[20,130617,130618],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[20,130620,130621],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[249,130623,130625],{"id":130624},"_914-清除内外边距","9.1.4 清除内外边距",[20,130627,130628],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[36,130630,130631],{"className":126652,"code":130488,"language":126654,"meta":25,"style":25},[42,130632,130633,130637,130643,130657],{"__ignoreMap":25},[45,130634,130635],{"class":47,"line":48},[45,130636,130495],{"class":337},[45,130638,130639,130641],{"class":47,"line":66},[45,130640,130500],{"class":69},[45,130642,15721],{"class":55},[45,130644,130645,130647,130649,130651,130653,130655],{"class":47,"line":1331},[45,130646,70570],{"class":79},[45,130648,51537],{"class":55},[45,130650,469],{"class":79},[45,130652,51656],{"class":79},[45,130654,130515],{"class":55},[45,130656,130518],{"class":337},[45,130658,130659],{"class":47,"line":1346},[45,130660,1716],{"class":55},[20,130662,130663],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[249,130665,130667],{"id":130666},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[166,130669,130670,130673,130676,130679,130682,130685],{},[169,130671,130672],{},"文件→打开 ：可以打开我们要测量的图片",[169,130674,130675],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[169,130677,130678],{},"右击标尺，把里面的单位改为像素",[169,130680,130681],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[169,130683,130684],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[169,130686,130687],{},"用选区拖动 可以测量大小",[23,130689],{"style":126508,"src":130690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[166,130692,130693,130696],{},[169,130694,130695],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[169,130697,130698],{},"吸管取色工具",[23,130700],{"style":126508,"src":130701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[249,130703,130705],{"id":130704},"_916-案例","9.1.6 案例",[233,130707,130708],{},[169,130709,130710],{},"小米商品",[23,130712],{"style":126508,"src":130713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[36,130715,130716],{"className":126652,"code":130488,"language":126654,"meta":25,"style":25},[42,130717,130718,130722,130728,130742],{"__ignoreMap":25},[45,130719,130720],{"class":47,"line":48},[45,130721,130495],{"class":337},[45,130723,130724,130726],{"class":47,"line":66},[45,130725,130500],{"class":69},[45,130727,15721],{"class":55},[45,130729,130730,130732,130734,130736,130738,130740],{"class":47,"line":1331},[45,130731,70570],{"class":79},[45,130733,51537],{"class":55},[45,130735,469],{"class":79},[45,130737,51656],{"class":79},[45,130739,130515],{"class":55},[45,130741,130518],{"class":337},[45,130743,130744],{"class":47,"line":1346},[45,130745,1716],{"class":55},[233,130747,130748],{"start":66},[169,130749,130750],{},"快报模块",[23,130752],{"style":126508,"src":130753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[36,130755,130757],{"className":127399,"code":130756,"language":127401,"meta":25,"style":25},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[42,130758,130759,130764,130779,130784],{"__ignoreMap":25},[45,130760,130761],{"class":47,"line":48},[45,130762,130763],{"class":337},"\u003C!-- HTML 代码示例 -->\n",[45,130765,130766,130768,130770,130772,130774,130777],{"class":47,"line":66},[45,130767,1187],{"class":55},[45,130769,51711],{"class":51400},[45,130771,53586],{"class":69},[45,130773,59],{"class":55},[45,130775,130776],{"class":62},"\"example\"",[45,130778,51407],{"class":55},[45,130780,130781],{"class":47,"line":1331},[45,130782,130783],{"class":55},"  示例内容\n",[45,130785,130786,130788,130790],{"class":47,"line":1346},[45,130787,51885],{"class":55},[45,130789,51711],{"class":51400},[45,130791,51407],{"class":55},[249,130793,130795],{"id":130794},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[233,130797,130798],{},[169,130799,130800],{},"圆角边框",[20,130802,130803],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[23,130805],{"style":126508,"src":130806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[36,130808,130810],{"className":126652,"code":130809,"language":126654,"meta":25,"style":25},"div {\n  border: 1px solid #ccc;\n}\n",[42,130811,130812,130818,130834],{"__ignoreMap":25},[45,130813,130814,130816],{"class":47,"line":48},[45,130815,51711],{"class":51400},[45,130817,15721],{"class":55},[45,130819,130820,130822,130824,130826,130828,130830,130832],{"class":47,"line":66},[45,130821,70996],{"class":79},[45,130823,51537],{"class":55},[45,130825,495],{"class":79},[45,130827,51592],{"class":51},[45,130829,51621],{"class":79},[45,130831,130044],{"class":79},[45,130833,1442],{"class":55},[45,130835,130836],{"class":47,"line":1331},[45,130837,1716],{"class":55},[20,130839,130840],{},"解释:",[166,130842,130843,130846,130849,130852,130855],{},[169,130844,130845],{},"参数值可以为数值或百分比的形式",[169,130847,130848],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[169,130850,130851],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[169,130853,130854],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[169,130856,130857],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[233,130859,130860],{"start":66},[169,130861,130862],{},"盒子阴影",[36,130864,130866],{"className":126652,"code":130865,"language":126654,"meta":25,"style":25},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[42,130867,130868,130874,130911],{"__ignoreMap":25},[45,130869,130870,130872],{"class":47,"line":48},[45,130871,51711],{"class":51400},[45,130873,15721],{"class":55},[45,130875,130876,130879,130881,130883,130885,130887,130889,130891,130893,130895,130897,130899,130901,130903,130905,130907,130909],{"class":47,"line":66},[45,130877,130878],{"class":79},"  box-shadow",[45,130880,51537],{"class":55},[45,130882,469],{"class":79},[45,130884,14904],{"class":79},[45,130886,51592],{"class":51},[45,130888,2188],{"class":79},[45,130890,51592],{"class":51},[45,130892,78867],{"class":79},[45,130894,282],{"class":55},[45,130896,469],{"class":79},[45,130898,12584],{"class":55},[45,130900,469],{"class":79},[45,130902,12584],{"class":55},[45,130904,469],{"class":79},[45,130906,12584],{"class":55},[45,130908,86310],{"class":79},[45,130910,2869],{"class":55},[45,130912,130913],{"class":47,"line":1331},[45,130914,1716],{"class":55},[415,130916,130917,130925],{},[418,130918,130919],{},[421,130920,130921,130923],{},[424,130922,430],{"align":23885},[424,130924,27589],{"align":23885},[462,130926,130927,130935,130943,130951,130959,130967],{},[421,130928,130929,130932],{},[467,130930,130931],{"align":23885},"h-shadow",[467,130933,130934],{"align":23885},"必需,水平阴影的位置,允许负值",[421,130936,130937,130940],{},[467,130938,130939],{"align":23885},"v-shadow",[467,130941,130942],{"align":23885},"必需,垂直阴影的位置,允许负值",[421,130944,130945,130948],{},[467,130946,130947],{"align":23885},"blur",[467,130949,130950],{"align":23885},"可选,模糊距离,就是影子的虚实",[421,130952,130953,130956],{},[467,130954,130955],{"align":23885},"spread",[467,130957,130958],{"align":23885},"可选,阴影尺寸",[421,130960,130961,130964],{},[467,130962,130963],{"align":23885},"color",[467,130965,130966],{"align":23885},"可选,阴影的颜色",[421,130968,130969,130972],{},[467,130970,130971],{"align":23885},"inset",[467,130973,130974],{"align":23885},"可选,将外部阴影(outset)改为内部阴影",[233,130976,130977],{"start":1331},[169,130978,130979],{},"文字阴影",[36,130981,130983],{"className":126652,"code":130982,"language":126654,"meta":25,"style":25},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[42,130984,130985,130991,131030],{"__ignoreMap":25},[45,130986,130987,130989],{"class":47,"line":48},[45,130988,20],{"class":51400},[45,130990,15721],{"class":55},[45,130992,130993,130996,130998,131000,131002,131004,131006,131008,131010,131012,131014,131016,131018,131020,131022,131024,131026,131028],{"class":47,"line":66},[45,130994,130995],{"class":79},"  text-shadow",[45,130997,51537],{"class":55},[45,130999,495],{"class":79},[45,131001,51592],{"class":51},[45,131003,136],{"class":79},[45,131005,51592],{"class":51},[45,131007,14904],{"class":79},[45,131009,51592],{"class":51},[45,131011,78867],{"class":79},[45,131013,282],{"class":55},[45,131015,469],{"class":79},[45,131017,12584],{"class":55},[45,131019,469],{"class":79},[45,131021,12584],{"class":55},[45,131023,469],{"class":79},[45,131025,12584],{"class":55},[45,131027,100621],{"class":79},[45,131029,2869],{"class":55},[45,131031,131032],{"class":47,"line":1331},[45,131033,1716],{"class":55},[415,131035,131036,131044],{},[418,131037,131038],{},[421,131039,131040,131042],{},[424,131041,430],{"align":23885},[424,131043,27589],{"align":23885},[462,131045,131046,131052,131059,131066],{},[421,131047,131048,131050],{},[467,131049,130931],{"align":23885},[467,131051,130934],{"align":23885},[421,131053,131054,131056],{},[467,131055,130939],{"align":23885},[467,131057,131058],{"align":23885},"必需,垂直阴影位置,允许负值",[421,131060,131061,131063],{},[467,131062,130947],{"align":23885},[467,131064,131065],{"align":23885},"可选,模糊的距离",[421,131067,131068,131070],{},[467,131069,130963],{"align":23885},[467,131071,130966],{"align":23885},[15,131073,131075],{"id":131074},"_92-浮动","9.2 浮动",[249,131077,131079],{"id":131078},"_921-浮动介绍","9.2.1 浮动介绍",[20,131081,131082],{},"在16.2中详细介绍",[249,131084,131086],{"id":131085},"_922-清除浮动","9.2.2 清除浮动",[233,131088,131089,131092],{},[169,131090,131091],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[169,131093,131094],{},"清除浮动的本质",[20,131096,131097],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[20,131099,9175],{},[166,131101,131102,131105,131108],{},[169,131103,131104],{},"如果父盒子本身有高度，则不需要清除浮动",[169,131106,131107],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[169,131109,131110],{},"父级有了高度，就不会影响下面的标准流了",[233,131112,131113],{"start":1331},[169,131114,131115],{},"清除浮动样式",[36,131117,131119],{"className":126652,"code":131118,"language":126654,"meta":25,"style":25},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[42,131120,131121,131128,131139,131143,131150,131160],{"__ignoreMap":25},[45,131122,131123,131126],{"class":47,"line":48},[45,131124,131125],{"class":69},".left",[45,131127,15721],{"class":55},[45,131129,131130,131133,131135,131137],{"class":47,"line":66},[45,131131,131132],{"class":79},"  float",[45,131134,51537],{"class":55},[45,131136,23885],{"class":79},[45,131138,1442],{"class":55},[45,131140,131141],{"class":47,"line":1331},[45,131142,1716],{"class":55},[45,131144,131145,131148],{"class":47,"line":1346},[45,131146,131147],{"class":69},".right",[45,131149,15721],{"class":55},[45,131151,131152,131154,131156,131158],{"class":47,"line":1352},[45,131153,131132],{"class":79},[45,131155,51537],{"class":55},[45,131157,72622],{"class":79},[45,131159,1442],{"class":55},[45,131161,131162],{"class":47,"line":1366},[45,131163,1716],{"class":55},[415,131165,131166,131174],{},[418,131167,131168],{},[421,131169,131170,131172],{},[424,131171,127116],{"align":23885},[424,131173,27589],{"align":23885},[462,131175,131176,131183,131190],{},[421,131177,131178,131180],{},[467,131179,23885],{"align":23885},[467,131181,131182],{"align":23885},"不允许左侧有浮动元素（清除左侧浮动的影响）",[421,131184,131185,131187],{},[467,131186,72622],{"align":23885},[467,131188,131189],{"align":23885},"不允许右侧有浮动元素（清除右侧浮动的影响）",[421,131191,131192,131195],{},[467,131193,131194],{"align":23885},"both",[467,131196,131197],{"align":23885},"同时清除左右侧浮动的影响",[20,131199,131200],{},"法一",[20,131202,131203],{},"额外标签法也称为隔墙法",[20,131205,131206],{},"使用方式：",[20,131208,131209],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[36,131211,131212],{"className":126652,"code":131118,"language":126654,"meta":25,"style":25},[42,131213,131214,131220,131230,131234,131240,131250],{"__ignoreMap":25},[45,131215,131216,131218],{"class":47,"line":48},[45,131217,131125],{"class":69},[45,131219,15721],{"class":55},[45,131221,131222,131224,131226,131228],{"class":47,"line":66},[45,131223,131132],{"class":79},[45,131225,51537],{"class":55},[45,131227,23885],{"class":79},[45,131229,1442],{"class":55},[45,131231,131232],{"class":47,"line":1331},[45,131233,1716],{"class":55},[45,131235,131236,131238],{"class":47,"line":1346},[45,131237,131147],{"class":69},[45,131239,15721],{"class":55},[45,131241,131242,131244,131246,131248],{"class":47,"line":1352},[45,131243,131132],{"class":79},[45,131245,51537],{"class":55},[45,131247,72622],{"class":79},[45,131249,1442],{"class":55},[45,131251,131252],{"class":47,"line":1366},[45,131253,1716],{"class":55},[20,131255,131256],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[20,131258,131259],{},"优点： 通俗易懂，书写方便",[20,131261,131262],{},"缺点： 添加许多无意义的标签，结构化较差",[20,131264,131265],{},"注意： 要求这个新的空标签必须是块级元素。",[20,131267,131268],{},"法二",[20,131270,131271],{},"父级添加overflow属性",[36,131273,131274],{"className":126652,"code":131118,"language":126654,"meta":25,"style":25},[42,131275,131276,131282,131292,131296,131302,131312],{"__ignoreMap":25},[45,131277,131278,131280],{"class":47,"line":48},[45,131279,131125],{"class":69},[45,131281,15721],{"class":55},[45,131283,131284,131286,131288,131290],{"class":47,"line":66},[45,131285,131132],{"class":79},[45,131287,51537],{"class":55},[45,131289,23885],{"class":79},[45,131291,1442],{"class":55},[45,131293,131294],{"class":47,"line":1331},[45,131295,1716],{"class":55},[45,131297,131298,131300],{"class":47,"line":1346},[45,131299,131147],{"class":69},[45,131301,15721],{"class":55},[45,131303,131304,131306,131308,131310],{"class":47,"line":1352},[45,131305,131132],{"class":79},[45,131307,51537],{"class":55},[45,131309,72622],{"class":79},[45,131311,1442],{"class":55},[45,131313,131314],{"class":47,"line":1366},[45,131315,1716],{"class":55},[20,131317,131318],{},"overflow: hidden;",[20,131320,131321],{},"优点：代码简洁",[20,131323,131324],{},"缺点：无法显示溢出的部分",[20,131326,131327],{},"注意：是给父元素添加代码",[20,131329,131330],{},"法三",[20,131332,131333],{},"父级添加after伪元素",[20,131335,131336,131339],{},[131337,131338],"after",{}," 方式是额外标签法的升级版",[20,131341,131342],{},"使用的时候复制就可以",[36,131344,131345],{"className":126652,"code":131118,"language":126654,"meta":25,"style":25},[42,131346,131347,131353,131363,131367,131373,131383],{"__ignoreMap":25},[45,131348,131349,131351],{"class":47,"line":48},[45,131350,131125],{"class":69},[45,131352,15721],{"class":55},[45,131354,131355,131357,131359,131361],{"class":47,"line":66},[45,131356,131132],{"class":79},[45,131358,51537],{"class":55},[45,131360,23885],{"class":79},[45,131362,1442],{"class":55},[45,131364,131365],{"class":47,"line":1331},[45,131366,1716],{"class":55},[45,131368,131369,131371],{"class":47,"line":1346},[45,131370,131147],{"class":69},[45,131372,15721],{"class":55},[45,131374,131375,131377,131379,131381],{"class":47,"line":1352},[45,131376,131132],{"class":79},[45,131378,51537],{"class":55},[45,131380,72622],{"class":79},[45,131382,1442],{"class":55},[45,131384,131385],{"class":47,"line":1366},[45,131386,1716],{"class":55},[20,131388,131389],{},"优点：没有增加标签，结构更简单",[20,131391,131392],{},"缺点：照顾低版本浏览器",[20,131394,131395],{},"代表网站： 百度、淘宝网、网易等",[20,131397,131398],{},"法四",[20,131400,131401],{},"父级添加双伪元素",[36,131403,131404],{"className":126652,"code":131118,"language":126654,"meta":25,"style":25},[42,131405,131406,131412,131422,131426,131432,131442],{"__ignoreMap":25},[45,131407,131408,131410],{"class":47,"line":48},[45,131409,131125],{"class":69},[45,131411,15721],{"class":55},[45,131413,131414,131416,131418,131420],{"class":47,"line":66},[45,131415,131132],{"class":79},[45,131417,51537],{"class":55},[45,131419,23885],{"class":79},[45,131421,1442],{"class":55},[45,131423,131424],{"class":47,"line":1331},[45,131425,1716],{"class":55},[45,131427,131428,131430],{"class":47,"line":1346},[45,131429,131147],{"class":69},[45,131431,15721],{"class":55},[45,131433,131434,131436,131438,131440],{"class":47,"line":1352},[45,131435,131132],{"class":79},[45,131437,51537],{"class":55},[45,131439,72622],{"class":79},[45,131441,1442],{"class":55},[45,131443,131444],{"class":47,"line":1366},[45,131445,1716],{"class":55},[20,131447,131448],{},"优点：代码更简洁",[20,131450,131392],{},[20,131452,131453],{},"代表网站：小米、腾讯等",[15,131455,131457],{"id":131456},"_93-ps切图","9.3 PS切图",[249,131459,131461],{"id":131460},"_931-常见图片格式","9.3.1 常见图片格式",[415,131463,131464,131474],{},[418,131465,131466],{},[421,131467,131468,131471],{},[424,131469,131470],{"align":23885},"jpg图像格式",[424,131472,131473],{"align":23885},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[462,131475,131476,131484,131492],{},[421,131477,131478,131481],{},[467,131479,131480],{"align":23885},"gif图像格式",[467,131482,131483],{"align":23885},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[421,131485,131486,131489],{},[467,131487,131488],{"align":23885},"png图像格式",[467,131490,131491],{"align":23885},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[421,131493,131494,131497],{},[467,131495,131496],{"align":23885},"PSD图像格式",[467,131498,131499],{"align":23885},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[249,131501,131503],{"id":131502},"_932-图层切图","9.3.2 图层切图",[20,131505,131506],{},"最简单的切图方式：右击图层 → 导出 → 切片",[20,131508,131509],{},"按住shift选中两个图层->图层菜单->合并图层",[249,131511,131513],{"id":131512},"_933-切片切图","9.3.3 切片切图",[166,131515,131516,131519],{},[169,131517,131518],{},"利用切片工具手动划出",[169,131520,131521],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[249,131523,131525],{"id":131524},"_934-切图步骤","9.3.4 切图步骤",[20,131527,131528],{},"用切片工具选中：",[23,131530],{"style":126508,"src":131531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[20,131533,131534],{},"文件 -> 导出",[23,131536],{"style":126508,"src":131537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[196,131539,131540],{},"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":25,"searchDepth":66,"depth":66,"links":131542},[131543,131552,131556],{"id":129979,"depth":66,"text":129980,"children":131544},[131545,131546,131547,131548,131549,131550,131551],{"id":130004,"depth":1331,"text":130005},{"id":130295,"depth":1331,"text":130296},{"id":130424,"depth":1331,"text":130425},{"id":130624,"depth":1331,"text":130625},{"id":130666,"depth":1331,"text":130667},{"id":130704,"depth":1331,"text":130705},{"id":130794,"depth":1331,"text":130795},{"id":131074,"depth":66,"text":131075,"children":131553},[131554,131555],{"id":131078,"depth":1331,"text":131079},{"id":131085,"depth":1331,"text":131086},{"id":131456,"depth":66,"text":131457,"children":131557},[131558,131559,131560,131561],{"id":131460,"depth":1331,"text":131461},{"id":131502,"depth":1331,"text":131503},{"id":131512,"depth":1331,"text":131513},{"id":131524,"depth":1331,"text":131525},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129971,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131568,"title":131569,"body":131570,"description":204,"extension":205,"meta":132211,"navigation":207,"path":132212,"seo":132213,"stem":132214,"__hash__":132215},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131571,"toc":132199},[131572,131575,131579,131605,131639,131643,131647,131650,131692,131699,131709,131717,131719,131722,131725,131728,131735,131749,131753,131756,131785,131789,131792,131806,131810,131813,131841,131845,131848,131874,131878,131883,131916,131921,131949,131953,131970,132016,132021,132065,132082,132189,132197],[10,131573,131569],{"id":131574},"_10-css规范与学成在线案例",[15,131576,131578],{"id":131577},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[233,131580,131581,131587,131593,131599],{},[169,131582,131583,131586],{},[427,131584,131585],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[169,131588,131589,131592],{},[427,131590,131591],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[169,131594,131595,131598],{},[427,131596,131597],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[169,131600,131601,131604],{},[427,131602,131603],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[36,131606,131607],{"className":126652,"code":130016,"language":126654,"meta":25,"style":25},[42,131608,131609,131613,131619,131635],{"__ignoreMap":25},[45,131610,131611],{"class":47,"line":48},[45,131612,130023],{"class":337},[45,131614,131615,131617],{"class":47,"line":66},[45,131616,51711],{"class":51400},[45,131618,15721],{"class":55},[45,131620,131621,131623,131625,131627,131629,131631,131633],{"class":47,"line":1331},[45,131622,70996],{"class":79},[45,131624,51537],{"class":55},[45,131626,495],{"class":79},[45,131628,51592],{"class":51},[45,131630,51621],{"class":79},[45,131632,130044],{"class":79},[45,131634,1442],{"class":55},[45,131636,131637],{"class":47,"line":1346},[45,131638,1716],{"class":55},[15,131640,131642],{"id":131641},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[249,131644,131646],{"id":131645},"_1021-header头部制作","10.2.1 header头部制作",[23,131648],{"style":126508,"src":131649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[166,131651,131652,131659,131666,131672,131679,131686],{},[169,131653,131654,131655,131658],{},"1号是版心盒子 ",[427,131656,131657],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[169,131660,131661,131662,131665],{},"版心盒子 里面包含 2号盒子 ",[427,131663,131664],{},"logo"," 图标",[169,131667,131668,131669,131671],{},"版心盒子 里面包含 3号盒子 ",[427,131670,53813],{}," 导航栏",[169,131673,131674,131675,131678],{},"版心盒子 里面包含 4号盒子 ",[427,131676,131677],{},"search"," 搜索框",[169,131680,131681,131682,131685],{},"版心盒子 里面包含 5号盒子 ",[427,131683,131684],{},"user"," 个人信息",[169,131687,131688,131689],{},"注意，要求里面的 ",[427,131690,131691],{},"4个子盒子 必须都浮动",[233,131693,131694],{},[169,131695,131696],{},[427,131697,131698],{},"导航栏注意点:",[20,131700,131701,131702,131705,131706],{},"实际开发中， ",[427,131703,131704],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[427,131707,131708],{},"用 li 包含链接(li+a)的做法",[166,131710,131711,131714],{},[169,131712,131713],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[169,131715,131716],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[20,131718,9175],{},[20,131720,131721],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[20,131723,131724],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[20,131726,131727],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[233,131729,131730],{"start":66},[169,131731,131732],{},[427,131733,131734],{},"4号盒子search的细节：",[166,131736,131737,131740,131743],{},[169,131738,131739],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[169,131741,131742],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[169,131744,131745,131748],{},[42,131746,131747],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[249,131750,131752],{"id":131751},"_1022-banner制作","10.2.2 banner制作",[23,131754],{"style":126508,"src":131755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[166,131757,131758,131765,131771,131778],{},[169,131759,131760,131761,131764],{},"1号盒子是通栏的大盒子 ",[427,131762,131763],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[169,131766,131767,131768,131770],{},"2号盒子是版心 ",[427,131769,1072],{}," ， 要水平居中对齐",[169,131772,131773,131774,131777],{},"3号盒子版心内，左对齐 ",[427,131775,131776],{},"subnav"," 侧导航栏",[169,131779,131780,131781,131784],{},"4号盒子版心内，右对齐 ",[427,131782,131783],{},"course"," 课程",[249,131786,131788],{"id":131787},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[23,131790],{"style":126508,"src":131791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[166,131793,131794,131797,131800,131803],{},[169,131795,131796],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[169,131798,131799],{},"1号盒子是标题 H3 左侧浮动",[169,131801,131802],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[169,131804,131805],{},"3号盒子 右浮动 mod 修改",[249,131807,131809],{"id":131808},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[23,131811],{"style":126508,"src":131812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[166,131814,131815,131821,131828,131835,131838],{},[169,131816,131817,131818,131820],{},"1号盒子为最大的盒子 ",[427,131819,53814],{}," 版心水平居中对齐",[169,131822,131823,131824,131827],{},"2号盒子为上面部分 ",[427,131825,131826],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[169,131829,131830,131831,131834],{},"3号盒子为底下部分 ",[427,131832,131833],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[169,131836,131837],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[169,131839,131840],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[249,131842,131844],{"id":131843},"_1025-底部模块制作","10.2.5 底部模块制作",[23,131846],{"style":126508,"src":131847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[166,131849,131850,131857,131860,131867],{},[169,131851,131852,131853,131856],{},"1号盒子通栏大盒子 底部 ",[427,131854,131855],{},"footer"," 给高度 底色是白色",[169,131858,131859],{},"2号盒子版心水平居中",[169,131861,131862,131863,131866],{},"3号盒子版权 ",[427,131864,131865],{},"copyright"," 左对齐",[169,131868,131869,131870,131873],{},"4号盒子 链接组 ",[427,131871,131872],{},"links"," 右对齐",[249,131875,131877],{"id":131876},"_1026-代码模块","10.2.6 代码模块",[233,131879,131880],{},[169,131881,131882],{},"html部分",[36,131884,131886],{"className":127399,"code":131885,"language":127401,"meta":25,"style":25},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[42,131887,131888],{"__ignoreMap":25},[45,131889,131890,131892,131894,131896,131898,131901,131904,131906,131909,131912,131914],{"class":47,"line":48},[45,131891,1187],{"class":55},[45,131893,516],{"class":51400},[45,131895,61157],{"class":69},[45,131897,59],{"class":55},[45,131899,131900],{"class":62},"\"https:\u002F\u002Fexample.com\"",[45,131902,131903],{"class":69}," target",[45,131905,59],{"class":55},[45,131907,131908],{"class":62},"\"_blank\"",[45,131910,131911],{"class":55},">链接文字\u003C\u002F",[45,131913,516],{"class":51400},[45,131915,51407],{"class":55},[233,131917,131918],{"start":66},[169,131919,131920],{},"css部分",[36,131922,131923],{"className":127399,"code":131885,"language":127401,"meta":25,"style":25},[42,131924,131925],{"__ignoreMap":25},[45,131926,131927,131929,131931,131933,131935,131937,131939,131941,131943,131945,131947],{"class":47,"line":48},[45,131928,1187],{"class":55},[45,131930,516],{"class":51400},[45,131932,61157],{"class":69},[45,131934,59],{"class":55},[45,131936,131900],{"class":62},[45,131938,131903],{"class":69},[45,131940,59],{"class":55},[45,131942,131908],{"class":62},[45,131944,131911],{"class":55},[45,131946,516],{"class":51400},[45,131948,51407],{"class":55},[249,131950,131952],{"id":131951},"_1027-收获","10.2.7 收获",[233,131954,131955,131958,131961,131964,131967],{},[169,131956,131957],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[169,131959,131960],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[169,131962,131963],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[169,131965,131966],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[169,131968,131969],{},"遗忘代码",[36,131971,131973],{"className":126652,"code":131972,"language":126654,"meta":25,"style":25},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[42,131974,131975,131997,132002,132012],{"__ignoreMap":25},[45,131976,131977,131979,131981,131983,131985,131987,131989,131991,131993,131995],{"class":47,"line":48},[45,131978,51711],{"class":51400},[45,131980,12584],{"class":55},[45,131982,20],{"class":51400},[45,131984,12584],{"class":55},[45,131986,10],{"class":51400},[45,131988,12584],{"class":55},[45,131990,166],{"class":51400},[45,131992,12584],{"class":55},[45,131994,169],{"class":51400},[45,131996,15721],{"class":55},[45,131998,131999],{"class":47,"line":66},[45,132000,132001],{"class":337},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[45,132003,132004,132006,132008,132010],{"class":47,"line":1331},[45,132005,128268],{"class":79},[45,132007,51537],{"class":55},[45,132009,60969],{"class":79},[45,132011,1442],{"class":55},[45,132013,132014],{"class":47,"line":1346},[45,132015,1716],{"class":55},[233,132017,132018],{"start":1366},[169,132019,132020],{},"html引css的程序",[36,132022,132023],{"className":126652,"code":131972,"language":126654,"meta":25,"style":25},[42,132024,132025,132047,132051,132061],{"__ignoreMap":25},[45,132026,132027,132029,132031,132033,132035,132037,132039,132041,132043,132045],{"class":47,"line":48},[45,132028,51711],{"class":51400},[45,132030,12584],{"class":55},[45,132032,20],{"class":51400},[45,132034,12584],{"class":55},[45,132036,10],{"class":51400},[45,132038,12584],{"class":55},[45,132040,166],{"class":51400},[45,132042,12584],{"class":55},[45,132044,169],{"class":51400},[45,132046,15721],{"class":55},[45,132048,132049],{"class":47,"line":66},[45,132050,132001],{"class":337},[45,132052,132053,132055,132057,132059],{"class":47,"line":1331},[45,132054,128268],{"class":79},[45,132056,51537],{"class":55},[45,132058,60969],{"class":79},[45,132060,1442],{"class":55},[45,132062,132063],{"class":47,"line":1346},[45,132064,1716],{"class":55},[233,132066,132067,132070,132073,132076,132079],{"start":1372},[169,132068,132069],{},"浮动的盒子不会有外边距合并问题",[169,132071,132072],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[169,132074,132075],{},"ctrl+g快速定位行；shift+alt多个光标",[169,132077,132078],{},"学习上方各个模块的选择器起名方法，以后就这样用",[169,132080,132081],{},"在写选择器时尽量写全一些，例如",[36,132083,132085],{"className":126652,"code":132084,"language":126654,"meta":25,"style":25},"\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",[42,132086,132087,132092,132108,132113,132128,132133,132148,132153,132168,132173],{"__ignoreMap":25},[45,132088,132089],{"class":47,"line":48},[45,132090,132091],{"class":337},"\u002F* 静态定位（默认） *\u002F\n",[45,132093,132094,132097,132099,132101,132103,132106],{"class":47,"line":66},[45,132095,132096],{"class":69},".static",[45,132098,79907],{"class":55},[45,132100,129012],{"class":79},[45,132102,51537],{"class":55},[45,132104,132105],{"class":79},"static",[45,132107,129582],{"class":55},[45,132109,132110],{"class":47,"line":1331},[45,132111,132112],{"class":337},"\u002F* 相对定位 *\u002F\n",[45,132114,132115,132118,132120,132122,132124,132126],{"class":47,"line":1346},[45,132116,132117],{"class":69},".relative",[45,132119,79907],{"class":55},[45,132121,129012],{"class":79},[45,132123,51537],{"class":55},[45,132125,54864],{"class":79},[45,132127,129582],{"class":55},[45,132129,132130],{"class":47,"line":1352},[45,132131,132132],{"class":337},"\u002F* 绝对定位 *\u002F\n",[45,132134,132135,132138,132140,132142,132144,132146],{"class":47,"line":1366},[45,132136,132137],{"class":69},".absolute",[45,132139,79907],{"class":55},[45,132141,129012],{"class":79},[45,132143,51537],{"class":55},[45,132145,54931],{"class":79},[45,132147,129582],{"class":55},[45,132149,132150],{"class":47,"line":1372},[45,132151,132152],{"class":337},"\u002F* 固定定位 *\u002F\n",[45,132154,132155,132158,132160,132162,132164,132166],{"class":47,"line":1463},[45,132156,132157],{"class":69},".fixed",[45,132159,79907],{"class":55},[45,132161,129012],{"class":79},[45,132163,51537],{"class":55},[45,132165,86333],{"class":79},[45,132167,129582],{"class":55},[45,132169,132170],{"class":47,"line":1469},[45,132171,132172],{"class":337},"\u002F* 粘性定位 *\u002F\n",[45,132174,132175,132178,132180,132182,132184,132187],{"class":47,"line":1481},[45,132176,132177],{"class":69},".sticky",[45,132179,79907],{"class":55},[45,132181,129012],{"class":79},[45,132183,51537],{"class":55},[45,132185,132186],{"class":79},"sticky",[45,132188,129582],{"class":55},[233,132190,132191,132194],{"start":1768},[169,132192,132193],{},"一定要用好注释",[169,132195,132196],{},"浮动的盒子不会有外边距合并的问题",[196,132198,131540],{},{"title":25,"searchDepth":66,"depth":66,"links":132200},[132201,132202],{"id":131577,"depth":66,"text":131578},{"id":131641,"depth":66,"text":131642,"children":132203},[132204,132205,132206,132207,132208,132209,132210],{"id":131645,"depth":1331,"text":131646},{"id":131751,"depth":1331,"text":131752},{"id":131787,"depth":1331,"text":131788},{"id":131808,"depth":1331,"text":131809},{"id":131843,"depth":1331,"text":131844},{"id":131876,"depth":1331,"text":131877},{"id":131951,"depth":1331,"text":131952},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131569,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132217,"title":132218,"body":132219,"description":204,"extension":205,"meta":133705,"navigation":207,"path":133706,"seo":133707,"stem":133708,"__hash__":133709},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132220,"toc":133697},[132221,132224,132228,132232,132243,132247,132264,132308,132341,132344,132361,132364,132367,132411,132415,132419,132422,132425,132429,132432,132443,132506,132547,132550,132565,132619,132627,132630,132641,132695,132721,132724,132737,132791,132823,132877,132900,132954,132957,132960,132967,133021,133042,133096,133099,133102,133187,133195,133252,133275,133279,133282,133300,133304,133323,133377,133415,133419,133422,133425,133447,133451,133459,133462,133467,133478,133481,133485,133499,133543,133546,133550,133553,133558,133584,133589,133666,133669,133673,133676,133679,133682,133685,133688,133691,133694],[10,132222,132218],{"id":132223},"_11-传统布局与定位体系",[15,132225,132227],{"id":132226},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[249,132229,132231],{"id":132230},"_1111-普通流标准流","11.1.1 普通流（标准流）",[166,132233,132234,132237,132240],{},[169,132235,132236],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[169,132238,132239],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[169,132241,132242],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[249,132244,132246],{"id":132245},"_1112-浮动","11.1.2 浮动",[166,132248,132249,132252,132255,132258,132261],{},[169,132250,132251],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[169,132253,132254],{},"浮动可以改变元素标签默认的排列方式",[169,132256,132257],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[169,132259,132260],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[169,132262,132263],{},"在使用行内块转换时盒子之间是有空隙的",[36,132265,132266],{"className":126652,"code":131118,"language":126654,"meta":25,"style":25},[42,132267,132268,132274,132284,132288,132294,132304],{"__ignoreMap":25},[45,132269,132270,132272],{"class":47,"line":48},[45,132271,131125],{"class":69},[45,132273,15721],{"class":55},[45,132275,132276,132278,132280,132282],{"class":47,"line":66},[45,132277,131132],{"class":79},[45,132279,51537],{"class":55},[45,132281,23885],{"class":79},[45,132283,1442],{"class":55},[45,132285,132286],{"class":47,"line":1331},[45,132287,1716],{"class":55},[45,132289,132290,132292],{"class":47,"line":1346},[45,132291,131147],{"class":69},[45,132293,15721],{"class":55},[45,132295,132296,132298,132300,132302],{"class":47,"line":1352},[45,132297,131132],{"class":79},[45,132299,51537],{"class":55},[45,132301,72622],{"class":79},[45,132303,1442],{"class":55},[45,132305,132306],{"class":47,"line":1366},[45,132307,1716],{"class":55},[415,132309,132310,132318],{},[418,132311,132312],{},[421,132313,132314,132316],{},[424,132315,127116],{"align":23885},[424,132317,27589],{"align":23885},[462,132319,132320,132327,132334],{},[421,132321,132322,132324],{},[467,132323,54837],{"align":23885},[467,132325,132326],{"align":23885},"元素不浮动（默认值）",[421,132328,132329,132331],{},[467,132330,23885],{"align":23885},[467,132332,132333],{"align":23885},"元素向左浮动",[421,132335,132336,132338],{},[467,132337,72622],{"align":23885},[467,132339,132340],{"align":23885},"元素向右浮动",[20,132342,132343],{},"浮动重点：",[166,132345,132346,132349,132352,132355,132358],{},[169,132347,132348],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[169,132350,132351],{},"浮动的元素会一行内显示并且元素顶部对齐",[169,132353,132354],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[169,132356,132357],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[169,132359,132360],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[20,132362,132363],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[20,132365,132366],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[36,132368,132369],{"className":126652,"code":131118,"language":126654,"meta":25,"style":25},[42,132370,132371,132377,132387,132391,132397,132407],{"__ignoreMap":25},[45,132372,132373,132375],{"class":47,"line":48},[45,132374,131125],{"class":69},[45,132376,15721],{"class":55},[45,132378,132379,132381,132383,132385],{"class":47,"line":66},[45,132380,131132],{"class":79},[45,132382,51537],{"class":55},[45,132384,23885],{"class":79},[45,132386,1442],{"class":55},[45,132388,132389],{"class":47,"line":1331},[45,132390,1716],{"class":55},[45,132392,132393,132395],{"class":47,"line":1346},[45,132394,131147],{"class":69},[45,132396,15721],{"class":55},[45,132398,132399,132401,132403,132405],{"class":47,"line":1352},[45,132400,131132],{"class":79},[45,132402,51537],{"class":55},[45,132404,72622],{"class":79},[45,132406,1442],{"class":55},[45,132408,132409],{"class":47,"line":1366},[45,132410,1716],{"class":55},[249,132412,132414],{"id":132413},"_1113-定位","11.1.3 定位",[22147,132416,132418],{"id":132417},"_11131-使用场景","11.1.3.1 使用场景",[20,132420,132421],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[20,132423,132424],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22147,132426,132428],{"id":132427},"_11132-定位组成","11.1.3.2 定位组成",[20,132430,132431],{},"定位 = 定位模式 + 边偏移",[233,132433,132434],{},[169,132435,132436,132439,132440],{},[427,132437,132438],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[427,132441,132442],{},"定位模式",[36,132444,132446],{"className":126652,"code":132445,"language":126654,"meta":25,"style":25},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[42,132447,132448,132454,132468,132485,132502],{"__ignoreMap":25},[45,132449,132450,132452],{"class":47,"line":48},[45,132451,130500],{"class":69},[45,132453,15721],{"class":55},[45,132455,132456,132459,132461,132463,132465],{"class":47,"line":66},[45,132457,132458],{"class":79},"  position",[45,132460,51537],{"class":55},[45,132462,54864],{"class":79},[45,132464,130515],{"class":55},[45,132466,132467],{"class":337},"\u002F* 定位模式 *\u002F\n",[45,132469,132470,132473,132475,132477,132479,132482],{"class":47,"line":1331},[45,132471,132472],{"class":79},"  top",[45,132474,51537],{"class":55},[45,132476,723],{"class":79},[45,132478,51592],{"class":51},[45,132480,132481],{"class":55},";           ",[45,132483,132484],{"class":337},"\u002F* 边偏移：上 *\u002F\n",[45,132486,132487,132490,132492,132494,132496,132499],{"class":47,"line":1346},[45,132488,132489],{"class":79},"  left",[45,132491,51537],{"class":55},[45,132493,977],{"class":79},[45,132495,51592],{"class":51},[45,132497,132498],{"class":55},";          ",[45,132500,132501],{"class":337},"\u002F* 边偏移：左 *\u002F\n",[45,132503,132504],{"class":47,"line":1352},[45,132505,1716],{"class":55},[415,132507,132508,132517],{},[418,132509,132510],{},[421,132511,132512,132514],{},[424,132513,430],{"align":23885},[424,132515,132516],{"align":23885},"语义",[462,132518,132519,132526,132533,132540],{},[421,132520,132521,132523],{},[467,132522,132105],{"align":23885},[467,132524,132525],{"align":23885},"静态定位",[421,132527,132528,132530],{},[467,132529,54864],{"align":23885},[467,132531,132532],{"align":23885},"相对定位",[421,132534,132535,132537],{},[467,132536,54931],{"align":23885},[467,132538,132539],{"align":23885},"绝对定位",[421,132541,132542,132544],{},[467,132543,86333],{"align":23885},[467,132545,132546],{"align":23885},"固定定位",[20,132548,132549],{},"（1）静态定位：",[166,132551,132552,132563],{},[169,132553,132554,132555,132558,132559,132562],{},"静态定位是元素的 ",[427,132556,132557],{},"默认定位方式"," ， ",[427,132560,132561],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[169,132564,5331],{},[36,132566,132567],{"className":126652,"code":132445,"language":126654,"meta":25,"style":25},[42,132568,132569,132575,132587,132601,132615],{"__ignoreMap":25},[45,132570,132571,132573],{"class":47,"line":48},[45,132572,130500],{"class":69},[45,132574,15721],{"class":55},[45,132576,132577,132579,132581,132583,132585],{"class":47,"line":66},[45,132578,132458],{"class":79},[45,132580,51537],{"class":55},[45,132582,54864],{"class":79},[45,132584,130515],{"class":55},[45,132586,132467],{"class":337},[45,132588,132589,132591,132593,132595,132597,132599],{"class":47,"line":1331},[45,132590,132472],{"class":79},[45,132592,51537],{"class":55},[45,132594,723],{"class":79},[45,132596,51592],{"class":51},[45,132598,132481],{"class":55},[45,132600,132484],{"class":337},[45,132602,132603,132605,132607,132609,132611,132613],{"class":47,"line":1346},[45,132604,132489],{"class":79},[45,132606,51537],{"class":55},[45,132608,977],{"class":79},[45,132610,51592],{"class":51},[45,132612,132498],{"class":55},[45,132614,132501],{"class":337},[45,132616,132617],{"class":47,"line":1352},[45,132618,1716],{"class":55},[166,132620,132621,132624],{},[169,132622,132623],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[169,132625,132626],{},"静态定位在布局时我们几乎不用的",[20,132628,132629],{},"（2）相对定位",[166,132631,132632,132639],{},[169,132633,132634,132635,132638],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[427,132636,132637],{},"原来的位置"," 来说的（自恋型）",[169,132640,5331],{},[36,132642,132643],{"className":126652,"code":132445,"language":126654,"meta":25,"style":25},[42,132644,132645,132651,132663,132677,132691],{"__ignoreMap":25},[45,132646,132647,132649],{"class":47,"line":48},[45,132648,130500],{"class":69},[45,132650,15721],{"class":55},[45,132652,132653,132655,132657,132659,132661],{"class":47,"line":66},[45,132654,132458],{"class":79},[45,132656,51537],{"class":55},[45,132658,54864],{"class":79},[45,132660,130515],{"class":55},[45,132662,132467],{"class":337},[45,132664,132665,132667,132669,132671,132673,132675],{"class":47,"line":1331},[45,132666,132472],{"class":79},[45,132668,51537],{"class":55},[45,132670,723],{"class":79},[45,132672,51592],{"class":51},[45,132674,132481],{"class":55},[45,132676,132484],{"class":337},[45,132678,132679,132681,132683,132685,132687,132689],{"class":47,"line":1346},[45,132680,132489],{"class":79},[45,132682,51537],{"class":55},[45,132684,977],{"class":79},[45,132686,51592],{"class":51},[45,132688,132498],{"class":55},[45,132690,132501],{"class":337},[45,132692,132693],{"class":47,"line":1352},[45,132694,1716],{"class":55},[166,132696,132697],{},[169,132698,132699,132700,132702,132703,132705,132706,132709,132710,132713,132714,132716,132717,132720],{},"相对定位的特点：",[53816,132701],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53816,132704],{},"  ② ",[427,132707,132708],{},"原来"," 在标准流的 ",[427,132711,132712],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53816,132715],{},"  ③因此， ",[427,132718,132719],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[20,132722,132723],{},"（3）绝对定位",[166,132725,132726,132735],{},[169,132727,132728,132730,132731,132734],{},[427,132729,132539],{}," 是元素在移动位置的时候，是相对于它 ",[427,132732,132733],{},"祖先元素"," 来说的（拼爹型）",[169,132736,5331],{},[36,132738,132739],{"className":126652,"code":132445,"language":126654,"meta":25,"style":25},[42,132740,132741,132747,132759,132773,132787],{"__ignoreMap":25},[45,132742,132743,132745],{"class":47,"line":48},[45,132744,130500],{"class":69},[45,132746,15721],{"class":55},[45,132748,132749,132751,132753,132755,132757],{"class":47,"line":66},[45,132750,132458],{"class":79},[45,132752,51537],{"class":55},[45,132754,54864],{"class":79},[45,132756,130515],{"class":55},[45,132758,132467],{"class":337},[45,132760,132761,132763,132765,132767,132769,132771],{"class":47,"line":1331},[45,132762,132472],{"class":79},[45,132764,51537],{"class":55},[45,132766,723],{"class":79},[45,132768,51592],{"class":51},[45,132770,132481],{"class":55},[45,132772,132484],{"class":337},[45,132774,132775,132777,132779,132781,132783,132785],{"class":47,"line":1346},[45,132776,132489],{"class":79},[45,132778,51537],{"class":55},[45,132780,977],{"class":79},[45,132782,51592],{"class":51},[45,132784,132498],{"class":55},[45,132786,132501],{"class":337},[45,132788,132789],{"class":47,"line":1352},[45,132790,1716],{"class":55},[166,132792,132793,132808,132817,132820],{},[169,132794,132795,132796,132798,132799,132801,132802,132804,132805,132807],{},"绝对定位的特点：",[53816,132797],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53816,132800],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53816,132803],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53816,132806],{},"  (4)固定定位",[169,132809,132810,132812,132813,132816],{},[427,132811,132546],{}," 是元素 ",[427,132814,132815],{},"固定于浏览器可视区的位置"," 。（认死理型）",[169,132818,132819],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[169,132821,132822],{},"语法:",[36,132824,132825],{"className":126652,"code":132445,"language":126654,"meta":25,"style":25},[42,132826,132827,132833,132845,132859,132873],{"__ignoreMap":25},[45,132828,132829,132831],{"class":47,"line":48},[45,132830,130500],{"class":69},[45,132832,15721],{"class":55},[45,132834,132835,132837,132839,132841,132843],{"class":47,"line":66},[45,132836,132458],{"class":79},[45,132838,51537],{"class":55},[45,132840,54864],{"class":79},[45,132842,130515],{"class":55},[45,132844,132467],{"class":337},[45,132846,132847,132849,132851,132853,132855,132857],{"class":47,"line":1331},[45,132848,132472],{"class":79},[45,132850,51537],{"class":55},[45,132852,723],{"class":79},[45,132854,51592],{"class":51},[45,132856,132481],{"class":55},[45,132858,132484],{"class":337},[45,132860,132861,132863,132865,132867,132869,132871],{"class":47,"line":1346},[45,132862,132489],{"class":79},[45,132864,51537],{"class":55},[45,132866,977],{"class":79},[45,132868,51592],{"class":51},[45,132870,132498],{"class":55},[45,132872,132501],{"class":337},[45,132874,132875],{"class":47,"line":1352},[45,132876,1716],{"class":55},[166,132878,132879,132888],{},[169,132880,132881,132882,132884,132885,132887],{},"特点:",[53816,132883],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53816,132886],{},"  ②固定定位不再占有原先的位置,完全脱标",[169,132889,132890,132891,132893,132894,132896,132897,132899],{},"固定在版心位置的方法:",[53816,132892],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53816,132895],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53816,132898],{},"  实例：",[36,132901,132902],{"className":126652,"code":132445,"language":126654,"meta":25,"style":25},[42,132903,132904,132910,132922,132936,132950],{"__ignoreMap":25},[45,132905,132906,132908],{"class":47,"line":48},[45,132907,130500],{"class":69},[45,132909,15721],{"class":55},[45,132911,132912,132914,132916,132918,132920],{"class":47,"line":66},[45,132913,132458],{"class":79},[45,132915,51537],{"class":55},[45,132917,54864],{"class":79},[45,132919,130515],{"class":55},[45,132921,132467],{"class":337},[45,132923,132924,132926,132928,132930,132932,132934],{"class":47,"line":1331},[45,132925,132472],{"class":79},[45,132927,51537],{"class":55},[45,132929,723],{"class":79},[45,132931,51592],{"class":51},[45,132933,132481],{"class":55},[45,132935,132484],{"class":337},[45,132937,132938,132940,132942,132944,132946,132948],{"class":47,"line":1346},[45,132939,132489],{"class":79},[45,132941,51537],{"class":55},[45,132943,977],{"class":79},[45,132945,51592],{"class":51},[45,132947,132498],{"class":55},[45,132949,132501],{"class":337},[45,132951,132952],{"class":47,"line":1352},[45,132953,1716],{"class":55},[23,132955],{"style":126508,"src":132956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[20,132958,132959],{},"(5)粘性定位",[166,132961,132962,132965],{},[169,132963,132964],{},"粘性定位可以被认为是相对定位和固定定位的混合",[169,132966,5331],{},[36,132968,132969],{"className":126652,"code":132445,"language":126654,"meta":25,"style":25},[42,132970,132971,132977,132989,133003,133017],{"__ignoreMap":25},[45,132972,132973,132975],{"class":47,"line":48},[45,132974,130500],{"class":69},[45,132976,15721],{"class":55},[45,132978,132979,132981,132983,132985,132987],{"class":47,"line":66},[45,132980,132458],{"class":79},[45,132982,51537],{"class":55},[45,132984,54864],{"class":79},[45,132986,130515],{"class":55},[45,132988,132467],{"class":337},[45,132990,132991,132993,132995,132997,132999,133001],{"class":47,"line":1331},[45,132992,132472],{"class":79},[45,132994,51537],{"class":55},[45,132996,723],{"class":79},[45,132998,51592],{"class":51},[45,133000,132481],{"class":55},[45,133002,132484],{"class":337},[45,133004,133005,133007,133009,133011,133013,133015],{"class":47,"line":1346},[45,133006,132489],{"class":79},[45,133008,51537],{"class":55},[45,133010,977],{"class":79},[45,133012,51592],{"class":51},[45,133014,132498],{"class":55},[45,133016,132501],{"class":337},[45,133018,133019],{"class":47,"line":1352},[45,133020,1716],{"class":55},[166,133022,133023],{},[169,133024,133025,133026,133028,133029,133031,133032,133034,133035,133038,133039,133041],{},"粘性定位的特点：",[53816,133027],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53816,133030],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53816,133033],{},"  ③必须添加 top 、left、right、bottom ",[427,133036,133037],{},"其中一个"," 才有效",[53816,133040],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[36,133043,133044],{"className":126652,"code":132445,"language":126654,"meta":25,"style":25},[42,133045,133046,133052,133064,133078,133092],{"__ignoreMap":25},[45,133047,133048,133050],{"class":47,"line":48},[45,133049,130500],{"class":69},[45,133051,15721],{"class":55},[45,133053,133054,133056,133058,133060,133062],{"class":47,"line":66},[45,133055,132458],{"class":79},[45,133057,51537],{"class":55},[45,133059,54864],{"class":79},[45,133061,130515],{"class":55},[45,133063,132467],{"class":337},[45,133065,133066,133068,133070,133072,133074,133076],{"class":47,"line":1331},[45,133067,132472],{"class":79},[45,133069,51537],{"class":55},[45,133071,723],{"class":79},[45,133073,51592],{"class":51},[45,133075,132481],{"class":55},[45,133077,132484],{"class":337},[45,133079,133080,133082,133084,133086,133088,133090],{"class":47,"line":1346},[45,133081,132489],{"class":79},[45,133083,51537],{"class":55},[45,133085,977],{"class":79},[45,133087,51592],{"class":51},[45,133089,132498],{"class":55},[45,133091,132501],{"class":337},[45,133093,133094],{"class":47,"line":1352},[45,133095,1716],{"class":55},[23,133097],{"style":126508,"src":133098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[20,133100,133101],{},"(6)总结",[415,133103,133104,133119],{},[418,133105,133106],{},[421,133107,133108,133110,133113,133116],{},[424,133109,132442],{"align":23885},[424,133111,133112],{"align":23885},"是否脱标",[424,133114,133115],{"align":23885},"移动位置",[424,133117,133118],{"align":23885},"是否常用",[462,133120,133121,133134,133148,133162,133175],{},[421,133122,133123,133126,133128,133131],{},[467,133124,133125],{"align":23885},"Static 静态定位",[467,133127,104778],{"align":23885},[467,133129,133130],{"align":23885},"不能使用边偏移",[467,133132,133133],{"align":23885},"很少",[421,133135,133136,133139,133142,133145],{},[467,133137,133138],{"align":23885},"Relative 相对定位",[467,133140,133141],{"align":23885},"否(占有位置)",[467,133143,133144],{"align":23885},"相对于自身位置移动",[467,133146,133147],{"align":23885},"基本单独使用",[421,133149,133150,133153,133156,133159],{},[467,133151,133152],{"align":23885},"Absolute 绝对定位",[467,133154,133155],{"align":23885},"是(不占有位置)",[467,133157,133158],{"align":23885},"带有定位的父级",[467,133160,133161],{"align":23885},"要和定位父级元素搭配使用",[421,133163,133164,133167,133169,133172],{},[467,133165,133166],{"align":23885},"Fixed 固定定位",[467,133168,133155],{"align":23885},[467,133170,133171],{"align":23885},"浏览器可视区",[467,133173,133174],{"align":23885},"单独使用,不需要父级",[421,133176,133177,133180,133182,133184],{},[467,133178,133179],{"align":23885},"Sticky 粘性定位",[467,133181,133141],{"align":23885},[467,133183,133171],{"align":23885},[467,133185,133186],{"align":23885},"当前阶段少",[233,133188,133189],{"start":66},[169,133190,133191,133194],{},[427,133192,133193],{},"边偏移"," 则决定了该元素的最终位置",[415,133196,133197,133208],{},[418,133198,133199],{},[421,133200,133201,133204,133206],{},[424,133202,133203],{"align":23885},"边偏移属性",[424,133205,27592],{"align":23885},[424,133207,27589],{"align":23885},[462,133209,133210,133221,133232,133242],{},[421,133211,133212,133215,133218],{},[467,133213,133214],{"align":23885},"top",[467,133216,133217],{"align":23885},"top: 80px;",[467,133219,133220],{"align":23885},"顶端偏移量，定义元素相对于父元素上边线的距离",[421,133222,133223,133226,133229],{},[467,133224,133225],{"align":23885},"bottom",[467,133227,133228],{"align":23885},"bottom: 80px ;",[467,133230,133231],{"align":23885},"底部偏移量，定义元素相对于其父元素下边线的距离",[421,133233,133234,133236,133239],{},[467,133235,23885],{"align":23885},[467,133237,133238],{"align":23885},"left: 80px ;",[467,133240,133241],{"align":23885},"左侧偏移量，定义元素相对于其父元素左边线的距离",[421,133243,133244,133246,133249],{},[467,133245,72622],{"align":23885},[467,133247,133248],{"align":23885},"right: 80px ;",[467,133250,133251],{"align":23885},"右侧偏移量，定义元素相对于其父元素右边线的距离",[166,133253,133254],{},[169,133255,9175,133256,133258,133259,133261,133262,133264,133265,133268,133269,133271,133272,133274],{},[53816,133257],{},"  ① ",[427,133260,133193],{}," 需要和 ",[427,133263,132442],{}," 联合使用， ",[427,133266,133267],{},"单独使用无效"," ；",[53816,133270],{},"  ②top和bottom不要同时使用",[53816,133273],{},"  ③left和right不要同时使用",[22147,133276,133278],{"id":133277},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[20,133280,133281],{},"子级是绝对定位的话，父级要用相对定位",[166,133283,133284,133287,133290,133293],{},[169,133285,133286],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[169,133288,133289],{},"父盒子需要加定位限制子盒子在父盒子内显示",[169,133291,133292],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[169,133294,133295,133296,133299],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[427,133297,133298],{},"子绝父绝"," 也会遇到",[22147,133301,133303],{"id":133302},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[166,133305,133306,133321],{},[169,133307,133308,133309,133312,133313,133316,133317,133320],{},"在使用 ",[427,133310,133311],{},"定位"," 布局时，可能会 ",[427,133314,133315],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[427,133318,133319],{},"z-index"," 来控制盒子的前后次序 (z轴)",[169,133322,5331],{},[36,133324,133325],{"className":126652,"code":132445,"language":126654,"meta":25,"style":25},[42,133326,133327,133333,133345,133359,133373],{"__ignoreMap":25},[45,133328,133329,133331],{"class":47,"line":48},[45,133330,130500],{"class":69},[45,133332,15721],{"class":55},[45,133334,133335,133337,133339,133341,133343],{"class":47,"line":66},[45,133336,132458],{"class":79},[45,133338,51537],{"class":55},[45,133340,54864],{"class":79},[45,133342,130515],{"class":55},[45,133344,132467],{"class":337},[45,133346,133347,133349,133351,133353,133355,133357],{"class":47,"line":1331},[45,133348,132472],{"class":79},[45,133350,51537],{"class":55},[45,133352,723],{"class":79},[45,133354,51592],{"class":51},[45,133356,132481],{"class":55},[45,133358,132484],{"class":337},[45,133360,133361,133363,133365,133367,133369,133371],{"class":47,"line":1346},[45,133362,132489],{"class":79},[45,133364,51537],{"class":55},[45,133366,977],{"class":79},[45,133368,51592],{"class":51},[45,133370,132498],{"class":55},[45,133372,132501],{"class":337},[45,133374,133375],{"class":47,"line":1352},[45,133376,1716],{"class":55},[166,133378,133379],{},[169,133380,133381,133382,133258,133384,133386,133387,127815,133390,82639,133393,133395,133396,133398,133399,133402,133403,133268,133406,133408,133409,133412,133414],{},"z-index的特性",[53816,133383],{},[427,133385,127116],{}," ： ",[427,133388,133389],{},"正整数",[427,133391,133392],{},"负整数",[427,133394,469],{}," ，默认值是 0，数值越大，盒子越靠上；",[53816,133397],{},"  ②如果 ",[427,133400,133401],{},"属性值相同"," ，则按照书写顺序， ",[427,133404,133405],{},"后来居上",[53816,133407],{},"  ③数字后面 ",[427,133410,133411],{},"不能加单位",[53816,133413],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22147,133416,133418],{"id":133417},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[20,133420,133421],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[20,133423,133424],{},"方法:",[166,133426,133427,133437],{},[169,133428,133429,133430,133433,133434],{},"left: 50%; 让 ",[427,133431,133432],{},"盒子的左侧"," 移动到 ",[427,133435,133436],{},"父级元素的水平中心位置",[169,133438,133439,133440,133443,133444],{},"margin-left: -100px; 让盒子 ",[427,133441,133442],{},"向左"," 移动 ",[427,133445,133446],{},"自身宽度的一半",[22147,133448,133450],{"id":133449},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[233,133452,133453,133456],{},[169,133454,133455],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[169,133457,133458],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[20,133460,133461],{},"也就是说绝对定位和固定定位和浮动类似",[233,133463,133464],{"start":1331},[169,133465,133466],{},"display 是显示模式， 可以改变显示模式有以下方式:",[166,133468,133469,133472,133475],{},[169,133470,133471],{},"可以用inline-block 转换为行内块",[169,133473,133474],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[169,133476,133477],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[20,133479,133480],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22147,133482,133484],{"id":133483},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[233,133486,133487,133490,133493,133496],{},[169,133488,133489],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[169,133491,133492],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[169,133494,133495],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[169,133497,133498],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[36,133500,133501],{"className":126652,"code":131118,"language":126654,"meta":25,"style":25},[42,133502,133503,133509,133519,133523,133529,133539],{"__ignoreMap":25},[45,133504,133505,133507],{"class":47,"line":48},[45,133506,131125],{"class":69},[45,133508,15721],{"class":55},[45,133510,133511,133513,133515,133517],{"class":47,"line":66},[45,133512,131132],{"class":79},[45,133514,51537],{"class":55},[45,133516,23885],{"class":79},[45,133518,1442],{"class":55},[45,133520,133521],{"class":47,"line":1331},[45,133522,1716],{"class":55},[45,133524,133525,133527],{"class":47,"line":1346},[45,133526,131147],{"class":69},[45,133528,15721],{"class":55},[45,133530,133531,133533,133535,133537],{"class":47,"line":1352},[45,133532,131132],{"class":79},[45,133534,51537],{"class":55},[45,133536,72622],{"class":79},[45,133538,1442],{"class":55},[45,133540,133541],{"class":47,"line":1366},[45,133542,1716],{"class":55},[23,133544],{"style":126508,"src":133545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22147,133547,133549],{"id":133548},"_11138-轮播图","11.1.3.8 轮播图",[23,133551],{"style":126508,"src":133552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[233,133554,133555],{},[169,133556,133557],{},"制作顺序:",[166,133559,133560,133563,133566,133575],{},[169,133561,133562],{},"大盒子我们类名为： tb-promo 淘宝广告",[169,133564,133565],{},"里面先放一张图片",[169,133567,133568,133569,133571,133572,133574],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53816,133570],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53816,133573],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[169,133576,133577,133578,133580,133581,133583],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53816,133579],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53816,133582],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[233,133585,133586],{"start":66},[169,133587,133588],{},"代码模块",[36,133590,133592],{"className":126652,"code":133591,"language":126654,"meta":25,"style":25},"\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",[42,133593,133594,133599,133606,133616,133626,133636,133640,133645,133652,133662],{"__ignoreMap":25},[45,133595,133596],{"class":47,"line":48},[45,133597,133598],{"class":337},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[45,133600,133601,133604],{"class":47,"line":66},[45,133602,133603],{"class":69},".son",[45,133605,15721],{"class":55},[45,133607,133608,133610,133612,133614],{"class":47,"line":1331},[45,133609,132458],{"class":79},[45,133611,51537],{"class":55},[45,133613,54931],{"class":79},[45,133615,1442],{"class":55},[45,133617,133618,133620,133622,133624],{"class":47,"line":1346},[45,133619,132472],{"class":79},[45,133621,51537],{"class":55},[45,133623,469],{"class":79},[45,133625,1442],{"class":55},[45,133627,133628,133630,133632,133634],{"class":47,"line":1352},[45,133629,132489],{"class":79},[45,133631,51537],{"class":55},[45,133633,469],{"class":79},[45,133635,1442],{"class":55},[45,133637,133638],{"class":47,"line":1366},[45,133639,1716],{"class":55},[45,133641,133642],{"class":47,"line":1372},[45,133643,133644],{"class":337},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[45,133646,133647,133650],{"class":47,"line":1463},[45,133648,133649],{"class":69},".father",[45,133651,15721],{"class":55},[45,133653,133654,133656,133658,133660],{"class":47,"line":1469},[45,133655,132458],{"class":79},[45,133657,51537],{"class":55},[45,133659,54864],{"class":79},[45,133661,1442],{"class":55},[45,133663,133664],{"class":47,"line":1481},[45,133665,1716],{"class":55},[20,133667,133668],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[249,133670,133672],{"id":133671},"_1114-定位数值的移动","11.1.4 定位数值的移动",[23,133674],{"style":126508,"src":133675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[20,133677,133678],{},"✨ 黄金口诀：",[20,133680,133681],{},"\"TOP正下负上，LEFT正右负左\"",[20,133683,133684],{},"\"RIGHT正左负右，BOTTOM正上负下",[20,133686,133687],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[20,133689,133690],{},"✨ 简单记：",[20,133692,133693],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[196,133695,133696],{},"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":25,"searchDepth":66,"depth":66,"links":133698},[133699],{"id":132226,"depth":66,"text":132227,"children":133700},[133701,133702,133703,133704],{"id":132230,"depth":1331,"text":132231},{"id":132245,"depth":1331,"text":132246},{"id":132413,"depth":1331,"text":132414},{"id":133671,"depth":1331,"text":133672},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132218,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133711,"title":133712,"body":133713,"description":204,"extension":205,"meta":135136,"navigation":207,"path":135137,"seo":135138,"stem":135139,"__hash__":135140},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133714,"toc":135115},[133715,133718,133722,133730,133734,133739,133747,133759,133763,133768,133776,133787,133791,133796,133837,133845,133849,133852,133855,133858,133952,133955,134049,134052,134146,134149,134152,134187,134190,134193,134223,134226,134229,134232,134235,134238,134241,134244,134314,134317,134321,134325,134366,134370,134376,134379,134382,134386,134389,134392,134395,134476,134479,134482,134486,134490,134493,134496,134499,134502,134505,134511,134520,134524,134543,134547,134557,134560,134563,134566,134569,134572,134575,134578,134581,134590,134594,134603,134606,134611,134664,134669,134835,134838,134841,134846,134849,134852,134855,134858,134863,135011,135014,135017,135022,135025,135030,135064,135067,135070,135074,135077,135084,135087,135090,135093,135096,135099,135102,135105,135109,135112],[10,133716,133712],{"id":133717},"_12-显示隐藏与图形资源",[15,133719,133721],{"id":133720},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[166,133723,133724,133727],{},[169,133725,133726],{},"目的:让一个元素在页面中消失或者显示出来",[169,133728,133729],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[249,133731,133733],{"id":133732},"_1211-display-显示","12.1.1 display 显示",[233,133735,133736],{},[169,133737,133738],{},"display 设置或检索对象是否及如何显示",[166,133740,133741,133744],{},[169,133742,133743],{},"display: none;隐藏对象",[169,133745,133746],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[233,133748,133749,133756],{"start":66},[169,133750,133751,133752,133755],{},"特点： display 隐藏元素后， ",[427,133753,133754],{},"不再占"," 有原来的位置",[169,133757,133758],{},"在js中使用非常的广泛",[249,133760,133762],{"id":133761},"_1212-visibility可见性","12.1.2 visibility可见性",[233,133764,133765],{},[169,133766,133767],{},"visibility 属性用于指定一个元素应可见还是隐藏",[166,133769,133770,133773],{},[169,133771,133772],{},"visibility： visible；元素可见",[169,133774,133775],{},"visibility：hidden；元素隐藏",[233,133777,133778,133781,133784],{"start":66},[169,133779,133780],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[169,133782,133783],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[169,133785,133786],{},"隐藏后继续占有原有位置",[249,133788,133790],{"id":133789},"_1213-overflow溢出","12.1.3 overflow溢出",[166,133792,133793],{},[169,133794,133795],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[415,133797,133798,133806],{},[418,133799,133800],{},[421,133801,133802,133804],{},[424,133803,127116],{"align":23885},[424,133805,27589],{"align":23885},[462,133807,133808,133816,133823,133830],{},[421,133809,133810,133813],{},[467,133811,133812],{"align":23885},"visible",[467,133814,133815],{"align":23885},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[421,133817,133818,133820],{},[467,133819,61814],{"align":23885},[467,133821,133822],{"align":23885},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[421,133824,133825,133827],{},[467,133826,129072],{"align":23885},[467,133828,133829],{"align":23885},"不管超出内容否，总是显示滚动条",[421,133831,133832,133834],{},[467,133833,72763],{"align":23885},[467,133835,133836],{"align":23885},"超出自动显示滚动条，不超出不显示滚动条",[166,133838,133839,133842],{},[169,133840,133841],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[169,133843,133844],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[249,133846,133848],{"id":133847},"_1214-案例收获","12.1.4 案例收获",[23,133850],{"style":126508,"src":133851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[20,133853,133854],{},"问题：没做出来动态效果，使用hover没实现",[20,133856,133857],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[36,133859,133860],{"className":126652,"code":132084,"language":126654,"meta":25,"style":25},[42,133861,133862,133866,133880,133884,133898,133902,133916,133920,133934,133938],{"__ignoreMap":25},[45,133863,133864],{"class":47,"line":48},[45,133865,132091],{"class":337},[45,133867,133868,133870,133872,133874,133876,133878],{"class":47,"line":66},[45,133869,132096],{"class":69},[45,133871,79907],{"class":55},[45,133873,129012],{"class":79},[45,133875,51537],{"class":55},[45,133877,132105],{"class":79},[45,133879,129582],{"class":55},[45,133881,133882],{"class":47,"line":1331},[45,133883,132112],{"class":337},[45,133885,133886,133888,133890,133892,133894,133896],{"class":47,"line":1346},[45,133887,132117],{"class":69},[45,133889,79907],{"class":55},[45,133891,129012],{"class":79},[45,133893,51537],{"class":55},[45,133895,54864],{"class":79},[45,133897,129582],{"class":55},[45,133899,133900],{"class":47,"line":1352},[45,133901,132132],{"class":337},[45,133903,133904,133906,133908,133910,133912,133914],{"class":47,"line":1366},[45,133905,132137],{"class":69},[45,133907,79907],{"class":55},[45,133909,129012],{"class":79},[45,133911,51537],{"class":55},[45,133913,54931],{"class":79},[45,133915,129582],{"class":55},[45,133917,133918],{"class":47,"line":1372},[45,133919,132152],{"class":337},[45,133921,133922,133924,133926,133928,133930,133932],{"class":47,"line":1463},[45,133923,132157],{"class":69},[45,133925,79907],{"class":55},[45,133927,129012],{"class":79},[45,133929,51537],{"class":55},[45,133931,86333],{"class":79},[45,133933,129582],{"class":55},[45,133935,133936],{"class":47,"line":1469},[45,133937,132172],{"class":337},[45,133939,133940,133942,133944,133946,133948,133950],{"class":47,"line":1481},[45,133941,132177],{"class":69},[45,133943,79907],{"class":55},[45,133945,129012],{"class":79},[45,133947,51537],{"class":55},[45,133949,132186],{"class":79},[45,133951,129582],{"class":55},[20,133953,133954],{},"完整代码：",[36,133956,133957],{"className":126652,"code":132084,"language":126654,"meta":25,"style":25},[42,133958,133959,133963,133977,133981,133995,133999,134013,134017,134031,134035],{"__ignoreMap":25},[45,133960,133961],{"class":47,"line":48},[45,133962,132091],{"class":337},[45,133964,133965,133967,133969,133971,133973,133975],{"class":47,"line":66},[45,133966,132096],{"class":69},[45,133968,79907],{"class":55},[45,133970,129012],{"class":79},[45,133972,51537],{"class":55},[45,133974,132105],{"class":79},[45,133976,129582],{"class":55},[45,133978,133979],{"class":47,"line":1331},[45,133980,132112],{"class":337},[45,133982,133983,133985,133987,133989,133991,133993],{"class":47,"line":1346},[45,133984,132117],{"class":69},[45,133986,79907],{"class":55},[45,133988,129012],{"class":79},[45,133990,51537],{"class":55},[45,133992,54864],{"class":79},[45,133994,129582],{"class":55},[45,133996,133997],{"class":47,"line":1352},[45,133998,132132],{"class":337},[45,134000,134001,134003,134005,134007,134009,134011],{"class":47,"line":1366},[45,134002,132137],{"class":69},[45,134004,79907],{"class":55},[45,134006,129012],{"class":79},[45,134008,51537],{"class":55},[45,134010,54931],{"class":79},[45,134012,129582],{"class":55},[45,134014,134015],{"class":47,"line":1372},[45,134016,132152],{"class":337},[45,134018,134019,134021,134023,134025,134027,134029],{"class":47,"line":1463},[45,134020,132157],{"class":69},[45,134022,79907],{"class":55},[45,134024,129012],{"class":79},[45,134026,51537],{"class":55},[45,134028,86333],{"class":79},[45,134030,129582],{"class":55},[45,134032,134033],{"class":47,"line":1469},[45,134034,132172],{"class":337},[45,134036,134037,134039,134041,134043,134045,134047],{"class":47,"line":1481},[45,134038,132177],{"class":69},[45,134040,79907],{"class":55},[45,134042,129012],{"class":79},[45,134044,51537],{"class":55},[45,134046,132186],{"class":79},[45,134048,129582],{"class":55},[20,134050,134051],{},"分布思路重点详解：",[36,134053,134054],{"className":126652,"code":132084,"language":126654,"meta":25,"style":25},[42,134055,134056,134060,134074,134078,134092,134096,134110,134114,134128,134132],{"__ignoreMap":25},[45,134057,134058],{"class":47,"line":48},[45,134059,132091],{"class":337},[45,134061,134062,134064,134066,134068,134070,134072],{"class":47,"line":66},[45,134063,132096],{"class":69},[45,134065,79907],{"class":55},[45,134067,129012],{"class":79},[45,134069,51537],{"class":55},[45,134071,132105],{"class":79},[45,134073,129582],{"class":55},[45,134075,134076],{"class":47,"line":1331},[45,134077,132112],{"class":337},[45,134079,134080,134082,134084,134086,134088,134090],{"class":47,"line":1346},[45,134081,132117],{"class":69},[45,134083,79907],{"class":55},[45,134085,129012],{"class":79},[45,134087,51537],{"class":55},[45,134089,54864],{"class":79},[45,134091,129582],{"class":55},[45,134093,134094],{"class":47,"line":1352},[45,134095,132132],{"class":337},[45,134097,134098,134100,134102,134104,134106,134108],{"class":47,"line":1366},[45,134099,132137],{"class":69},[45,134101,79907],{"class":55},[45,134103,129012],{"class":79},[45,134105,51537],{"class":55},[45,134107,54931],{"class":79},[45,134109,129582],{"class":55},[45,134111,134112],{"class":47,"line":1372},[45,134113,132152],{"class":337},[45,134115,134116,134118,134120,134122,134124,134126],{"class":47,"line":1463},[45,134117,132157],{"class":69},[45,134119,79907],{"class":55},[45,134121,129012],{"class":79},[45,134123,51537],{"class":55},[45,134125,86333],{"class":79},[45,134127,129582],{"class":55},[45,134129,134130],{"class":47,"line":1469},[45,134131,132172],{"class":337},[45,134133,134134,134136,134138,134140,134142,134144],{"class":47,"line":1481},[45,134135,132177],{"class":69},[45,134137,79907],{"class":55},[45,134139,129012],{"class":79},[45,134141,51537],{"class":55},[45,134143,132186],{"class":79},[45,134145,129582],{"class":55},[23,134147],{"style":126508,"src":134148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[20,134150,134151],{},"图片太大，盒子太小，此时需要修改图片的大小",[36,134153,134155],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[42,134156,134157],{"__ignoreMap":25},[45,134158,134159,134161,134163,134165,134167,134170,134172,134174,134177,134180,134182,134185],{"class":47,"line":48},[45,134160,1187],{"class":55},[45,134162,23],{"class":51400},[45,134164,55339],{"class":69},[45,134166,59],{"class":55},[45,134168,134169],{"class":62},"\"images\u002Fpic.jpg\"",[45,134171,55347],{"class":69},[45,134173,59],{"class":55},[45,134175,134176],{"class":62},"\"描述文字\"",[45,134178,134179],{"class":69}," title",[45,134181,59],{"class":55},[45,134183,134184],{"class":62},"\"悬停提示\"",[45,134186,51407],{"class":55},[23,134188],{"style":126508,"src":134189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[20,134191,134192],{},"制造遮罩层",[36,134194,134195],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,134196,134197],{"__ignoreMap":25},[45,134198,134199,134201,134203,134205,134207,134209,134211,134213,134215,134217,134219,134221],{"class":47,"line":48},[45,134200,1187],{"class":55},[45,134202,23],{"class":51400},[45,134204,55339],{"class":69},[45,134206,59],{"class":55},[45,134208,134169],{"class":62},[45,134210,55347],{"class":69},[45,134212,59],{"class":55},[45,134214,134176],{"class":62},[45,134216,134179],{"class":69},[45,134218,59],{"class":55},[45,134220,134184],{"class":62},[45,134222,51407],{"class":55},[20,134224,134225],{},"此时是这样的为标准流",[23,134227],{"style":126508,"src":134228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[20,134230,134231],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[20,134233,134234],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[20,134236,134237],{},"让他在中间，用center(background-position)",[20,134239,134240],{},"将需要变的尽可能放到一个盒子中",[20,134242,134243],{},"放大盒子上内部盒子发生变化",[36,134245,134247],{"className":126652,"code":134246,"language":126654,"meta":25,"style":25},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[42,134248,134249,134255,134265,134269,134276,134286,134298,134310],{"__ignoreMap":25},[45,134250,134251,134253],{"class":47,"line":48},[45,134252,127719],{"class":69},[45,134254,15721],{"class":55},[45,134256,134257,134259,134261,134263],{"class":47,"line":66},[45,134258,132458],{"class":79},[45,134260,51537],{"class":55},[45,134262,54864],{"class":79},[45,134264,1442],{"class":55},[45,134266,134267],{"class":47,"line":1331},[45,134268,1716],{"class":55},[45,134270,134271,134274],{"class":47,"line":1346},[45,134272,134273],{"class":69},".child",[45,134275,15721],{"class":55},[45,134277,134278,134280,134282,134284],{"class":47,"line":1352},[45,134279,132458],{"class":79},[45,134281,51537],{"class":55},[45,134283,54931],{"class":79},[45,134285,1442],{"class":55},[45,134287,134288,134290,134292,134294,134296],{"class":47,"line":1366},[45,134289,132472],{"class":79},[45,134291,51537],{"class":55},[45,134293,933],{"class":79},[45,134295,605],{"class":51},[45,134297,1442],{"class":55},[45,134299,134300,134302,134304,134306,134308],{"class":47,"line":1372},[45,134301,132489],{"class":79},[45,134303,51537],{"class":55},[45,134305,933],{"class":79},[45,134307,605],{"class":51},[45,134309,1442],{"class":55},[45,134311,134312],{"class":47,"line":1463},[45,134313,1716],{"class":55},[20,134315,134316],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[15,134318,134320],{"id":134319},"_122-精灵图","12.2 精灵图",[249,134322,134324],{"id":134323},"_1221-理解","12.2.1 理解",[233,134326,134327,134345],{},[169,134328,134329,134330,132558,134333,134336,134337,134340,134341,134344],{},"目的： ",[427,134331,134332],{},"为了有效地减少服务器接收和发送请求的次数",[427,134334,134335],{},"提高"," 页面的 ",[427,134338,134339],{},"加载速度"," ，出现了 ",[427,134342,134343],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[169,134346,134347,134348,134350,134351,134353,134354,134356,134357,134359,134360,134362,134363,134365],{},"使用精灵图核心：",[53816,134349],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53816,134352],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53816,134355],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53816,134358],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53816,134361],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53816,134364],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[249,134367,134369],{"id":134368},"_1222-扒图","12.2.2 扒图",[36,134371,134374],{"className":134372,"code":134373,"language":5337},[5335],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[42,134375,134373],{"__ignoreMap":25},[23,134377],{"style":126508,"src":134378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[23,134380],{"style":126508,"src":134381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[249,134383,134385],{"id":134384},"_1223-精灵图的实现","12.2.3 精灵图的实现",[23,134387],{"style":126508,"src":134388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[20,134390,134391],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[23,134393],{"style":126508,"src":134394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[36,134396,134398],{"className":126652,"code":134397,"language":126654,"meta":25,"style":25},"\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",[42,134399,134400,134405,134412,134424,134436,134455,134472],{"__ignoreMap":25},[45,134401,134402],{"class":47,"line":48},[45,134403,134404],{"class":337},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[45,134406,134407,134410],{"class":47,"line":66},[45,134408,134409],{"class":69},".icon",[45,134411,15721],{"class":55},[45,134413,134414,134416,134418,134420,134422],{"class":47,"line":1331},[45,134415,70668],{"class":79},[45,134417,51537],{"class":55},[45,134419,977],{"class":79},[45,134421,51592],{"class":51},[45,134423,1442],{"class":55},[45,134425,134426,134428,134430,134432,134434],{"class":47,"line":1346},[45,134427,70888],{"class":79},[45,134429,51537],{"class":55},[45,134431,977],{"class":79},[45,134433,51592],{"class":51},[45,134435,1442],{"class":55},[45,134437,134438,134440,134442,134444,134446,134449,134451,134453],{"class":47,"line":1352},[45,134439,70711],{"class":79},[45,134441,51537],{"class":55},[45,134443,61826],{"class":79},[45,134445,282],{"class":55},[45,134447,134448],{"class":5366},"sprites.png",[45,134450,13863],{"class":55},[45,134452,61836],{"class":79},[45,134454,1442],{"class":55},[45,134456,134457,134459,134461,134463,134465,134468,134470],{"class":47,"line":1366},[45,134458,128912],{"class":79},[45,134460,51537],{"class":55},[45,134462,51863],{"class":79},[45,134464,51592],{"class":51},[45,134466,134467],{"class":79}," -20",[45,134469,51592],{"class":51},[45,134471,1442],{"class":55},[45,134473,134474],{"class":47,"line":1372},[45,134475,1716],{"class":55},[23,134477],{"style":126508,"src":134478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[20,134480,134481],{},"在前端中坐标轴的正方向是右和下",[15,134483,134485],{"id":134484},"_123-字体图标","12.3 字体图标",[249,134487,134489],{"id":134488},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[20,134491,134492],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[20,134494,134495],{},"精灵图是有诸多优点的，但是缺点很明显。",[20,134497,134498],{},"1.图片文件还是比较大的。",[20,134500,134501],{},"2.图片本身放大和缩小会失真。",[20,134503,134504],{},"3.一旦图片制作完毕想要更换非常复杂。",[20,134506,134507,134508,25840],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[427,134509,134510],{},"字体图标 iconfont",[20,134512,134513,134516,134517,28485],{},[427,134514,134515],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[427,134518,134519],{},"展示的是图标，本质属于字体",[249,134521,134523],{"id":134522},"_1232-字体图标的优点","12.3.2 字体图标的优点",[166,134525,134526,134531,134534,134537,134540],{},[169,134527,134528,134530],{},[427,134529,25976],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[169,134532,134533],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[169,134535,134536],{},"兼容性：几乎支持所有的浏览器，请放心使用",[169,134538,134539],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[169,134541,134542],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[249,134544,134546],{"id":134545},"_1233-字体库下载网站","12.3.3 字体库下载网站",[166,134548,134549],{},[169,134550,134551,134552],{},"icomoon字体库：",[516,134553,134556],{"href":134554,"rel":134555},"http:\u002F\u002Ficomoon.io\u002F",[24012],"http:\u002F\u002Ficomoon.io",[20,134558,134559],{},"进去之后点icomoon app",[23,134561],{"style":126508,"src":134562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[20,134564,134565],{},"可以对其编辑：",[23,134567],{"style":126508,"src":134568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[20,134570,134571],{},"生成字体：",[23,134573],{"style":126508,"src":134574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[20,134576,134577],{},"下载：",[23,134579],{"style":126508,"src":134580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[166,134582,134583],{},[169,134584,134585,134586],{},"阿里iconfont字体库： ",[516,134587,134588],{"href":134588,"rel":134589},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24012],[249,134591,134593],{"id":134592},"_1234-字体图标的引入","12.3.4 字体图标的引入",[233,134595,134596],{},[169,134597,134598,134599,134602],{},"把下载包里面的 ",[427,134600,134601],{},"fonts"," 文件夹放入页面根目录下",[23,134604],{"style":126508,"src":134605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[233,134607,134608],{"start":66},[169,134609,134610],{},"字体文件格式",[415,134612,134613,134622],{},[418,134614,134615],{},[421,134616,134617,134620],{},[424,134618,134619],{"align":23885},"格式",[424,134621,23889],{"align":23885},[462,134623,134624,134634,134644,134654],{},[421,134625,134626,134631],{},[467,134627,134628],{"align":23885},[427,134629,134630],{},".ttf",[467,134632,134633],{"align":23885},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[421,134635,134636,134641],{},[467,134637,134638],{"align":23885},[427,134639,134640],{},".woff",[467,134642,134643],{"align":23885},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[421,134645,134646,134651],{},[467,134647,134648],{"align":23885},[427,134649,134650],{},".eot",[467,134652,134653],{"align":23885},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[421,134655,134656,134661],{},[467,134657,134658],{"align":23885},[427,134659,134660],{},"svg",[467,134662,134663],{"align":23885},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[233,134665,134666],{"start":1331},[169,134667,134668],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[36,134670,134672],{"className":126652,"code":134671,"language":126654,"meta":25,"style":25},"\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",[42,134673,134674,134679,134686,134698,134714,134739,134760,134780,134800,134804,134810,134820,134831],{"__ignoreMap":25},[45,134675,134676],{"class":47,"line":48},[45,134677,134678],{"class":337},"\u002F* 引入字体图标 *\u002F\n",[45,134680,134681,134684],{"class":47,"line":66},[45,134682,134683],{"class":51},"@font-face",[45,134685,15721],{"class":55},[45,134687,134688,134691,134693,134696],{"class":47,"line":1331},[45,134689,134690],{"class":79},"  font-family",[45,134692,51537],{"class":55},[45,134694,134695],{"class":62},"'icomoon'",[45,134697,1442],{"class":55},[45,134699,134700,134703,134705,134707,134709,134712],{"class":47,"line":1346},[45,134701,134702],{"class":79},"  src",[45,134704,51537],{"class":55},[45,134706,61826],{"class":79},[45,134708,282],{"class":55},[45,134710,134711],{"class":62},"'fonts\u002Ficomoon.eot'",[45,134713,2869],{"class":55},[45,134715,134716,134718,134720,134722,134724,134727,134729,134732,134734,134737],{"class":47,"line":1352},[45,134717,134702],{"class":79},[45,134719,51537],{"class":55},[45,134721,61826],{"class":79},[45,134723,282],{"class":55},[45,134725,134726],{"class":62},"'fonts\u002Ficomoon.eot?#iefix'",[45,134728,13863],{"class":55},[45,134730,134731],{"class":79},"format",[45,134733,282],{"class":55},[45,134735,134736],{"class":62},"'embedded-opentype'",[45,134738,38147],{"class":55},[45,134740,134741,134744,134746,134749,134751,134753,134755,134758],{"class":47,"line":1366},[45,134742,134743],{"class":79},"       url",[45,134745,282],{"class":55},[45,134747,134748],{"class":62},"'fonts\u002Ficomoon.woff'",[45,134750,13863],{"class":55},[45,134752,134731],{"class":79},[45,134754,282],{"class":55},[45,134756,134757],{"class":62},"'woff'",[45,134759,38147],{"class":55},[45,134761,134762,134764,134766,134769,134771,134773,134775,134778],{"class":47,"line":1372},[45,134763,134743],{"class":79},[45,134765,282],{"class":55},[45,134767,134768],{"class":62},"'fonts\u002Ficomoon.ttf'",[45,134770,13863],{"class":55},[45,134772,134731],{"class":79},[45,134774,282],{"class":55},[45,134776,134777],{"class":62},"'truetype'",[45,134779,38147],{"class":55},[45,134781,134782,134784,134786,134789,134791,134793,134795,134798],{"class":47,"line":1463},[45,134783,134743],{"class":79},[45,134785,282],{"class":55},[45,134787,134788],{"class":62},"'fonts\u002Ficomoon.svg#icomoon'",[45,134790,13863],{"class":55},[45,134792,134731],{"class":79},[45,134794,282],{"class":55},[45,134796,134797],{"class":62},"'svg'",[45,134799,2869],{"class":55},[45,134801,134802],{"class":47,"line":1469},[45,134803,1716],{"class":55},[45,134805,134806,134808],{"class":47,"line":1481},[45,134807,134409],{"class":69},[45,134809,15721],{"class":55},[45,134811,134812,134814,134816,134818],{"class":47,"line":1763},[45,134813,134690],{"class":79},[45,134815,51537],{"class":55},[45,134817,134695],{"class":62},[45,134819,1442],{"class":55},[45,134821,134822,134825,134827,134829],{"class":47,"line":1768},[45,134823,134824],{"class":79},"  font-style",[45,134826,51537],{"class":55},[45,134828,63941],{"class":79},[45,134830,1442],{"class":55},[45,134832,134833],{"class":47,"line":1774},[45,134834,1716],{"class":55},[20,134836,134837],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[23,134839],{"style":126508,"src":134840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[233,134842,134843],{"start":1346},[169,134844,134845],{},"添加字体",[23,134847],{"style":126508,"src":134848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[20,134850,134851],{},"复制：",[23,134853],{"style":126508,"src":134854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[20,134856,134857],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[233,134859,134860],{"start":1352},[169,134861,134862],{},"代码展示：",[36,134864,134865],{"className":126652,"code":134671,"language":126654,"meta":25,"style":25},[42,134866,134867,134871,134877,134887,134901,134923,134941,134959,134977,134981,134987,134997,135007],{"__ignoreMap":25},[45,134868,134869],{"class":47,"line":48},[45,134870,134678],{"class":337},[45,134872,134873,134875],{"class":47,"line":66},[45,134874,134683],{"class":51},[45,134876,15721],{"class":55},[45,134878,134879,134881,134883,134885],{"class":47,"line":1331},[45,134880,134690],{"class":79},[45,134882,51537],{"class":55},[45,134884,134695],{"class":62},[45,134886,1442],{"class":55},[45,134888,134889,134891,134893,134895,134897,134899],{"class":47,"line":1346},[45,134890,134702],{"class":79},[45,134892,51537],{"class":55},[45,134894,61826],{"class":79},[45,134896,282],{"class":55},[45,134898,134711],{"class":62},[45,134900,2869],{"class":55},[45,134902,134903,134905,134907,134909,134911,134913,134915,134917,134919,134921],{"class":47,"line":1352},[45,134904,134702],{"class":79},[45,134906,51537],{"class":55},[45,134908,61826],{"class":79},[45,134910,282],{"class":55},[45,134912,134726],{"class":62},[45,134914,13863],{"class":55},[45,134916,134731],{"class":79},[45,134918,282],{"class":55},[45,134920,134736],{"class":62},[45,134922,38147],{"class":55},[45,134924,134925,134927,134929,134931,134933,134935,134937,134939],{"class":47,"line":1366},[45,134926,134743],{"class":79},[45,134928,282],{"class":55},[45,134930,134748],{"class":62},[45,134932,13863],{"class":55},[45,134934,134731],{"class":79},[45,134936,282],{"class":55},[45,134938,134757],{"class":62},[45,134940,38147],{"class":55},[45,134942,134943,134945,134947,134949,134951,134953,134955,134957],{"class":47,"line":1372},[45,134944,134743],{"class":79},[45,134946,282],{"class":55},[45,134948,134768],{"class":62},[45,134950,13863],{"class":55},[45,134952,134731],{"class":79},[45,134954,282],{"class":55},[45,134956,134777],{"class":62},[45,134958,38147],{"class":55},[45,134960,134961,134963,134965,134967,134969,134971,134973,134975],{"class":47,"line":1463},[45,134962,134743],{"class":79},[45,134964,282],{"class":55},[45,134966,134788],{"class":62},[45,134968,13863],{"class":55},[45,134970,134731],{"class":79},[45,134972,282],{"class":55},[45,134974,134797],{"class":62},[45,134976,2869],{"class":55},[45,134978,134979],{"class":47,"line":1469},[45,134980,1716],{"class":55},[45,134982,134983,134985],{"class":47,"line":1481},[45,134984,134409],{"class":69},[45,134986,15721],{"class":55},[45,134988,134989,134991,134993,134995],{"class":47,"line":1763},[45,134990,134690],{"class":79},[45,134992,51537],{"class":55},[45,134994,134695],{"class":62},[45,134996,1442],{"class":55},[45,134998,134999,135001,135003,135005],{"class":47,"line":1768},[45,135000,134824],{"class":79},[45,135002,51537],{"class":55},[45,135004,63941],{"class":79},[45,135006,1442],{"class":55},[45,135008,135009],{"class":47,"line":1774},[45,135010,1716],{"class":55},[23,135012],{"style":126508,"src":135013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[20,135015,135016],{},"更加细节展示：",[233,135018,135019],{},[169,135020,135021],{},"html 标签内添加小图标",[23,135023],{"style":126508,"src":135024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[233,135026,135027],{"start":66},[169,135028,135029],{},"给标签定义字体",[36,135031,135032],{"className":127399,"code":130756,"language":127401,"meta":25,"style":25},[42,135033,135034,135038,135052,135056],{"__ignoreMap":25},[45,135035,135036],{"class":47,"line":48},[45,135037,130763],{"class":337},[45,135039,135040,135042,135044,135046,135048,135050],{"class":47,"line":66},[45,135041,1187],{"class":55},[45,135043,51711],{"class":51400},[45,135045,53586],{"class":69},[45,135047,59],{"class":55},[45,135049,130776],{"class":62},[45,135051,51407],{"class":55},[45,135053,135054],{"class":47,"line":1331},[45,135055,130783],{"class":55},[45,135057,135058,135060,135062],{"class":47,"line":1346},[45,135059,51885],{"class":55},[45,135061,51711],{"class":51400},[45,135063,51407],{"class":55},[20,135065,135066],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[23,135068],{"style":126508,"src":135069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[249,135071,135073],{"id":135072},"_1235-字体图标的追加","12.3.5 字体图标的追加",[20,135075,135076],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[20,135078,135079,135080,135083],{},"把压缩包里面的 ",[427,135081,135082],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[20,135085,135086],{},"打开网站，点下方：",[23,135088],{"style":126508,"src":135089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[23,135091],{"style":126508,"src":135092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[23,135094],{"style":126508,"src":135095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[20,135097,135098],{},"点yes重新加载",[20,135100,135101],{},"然后重复之前的操作就可以实现了",[20,135103,135104],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[249,135106,135108],{"id":135107},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[23,135110],{"style":126508,"src":135111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[196,135113,135114],{},"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":25,"searchDepth":66,"depth":66,"links":135116},[135117,135123,135128],{"id":133720,"depth":66,"text":133721,"children":135118},[135119,135120,135121,135122],{"id":133732,"depth":1331,"text":133733},{"id":133761,"depth":1331,"text":133762},{"id":133789,"depth":1331,"text":133790},{"id":133847,"depth":1331,"text":133848},{"id":134319,"depth":66,"text":134320,"children":135124},[135125,135126,135127],{"id":134323,"depth":1331,"text":134324},{"id":134368,"depth":1331,"text":134369},{"id":134384,"depth":1331,"text":134385},{"id":134484,"depth":66,"text":134485,"children":135129},[135130,135131,135132,135133,135134,135135],{"id":134488,"depth":1331,"text":134489},{"id":134522,"depth":1331,"text":134523},{"id":134545,"depth":1331,"text":134546},{"id":134592,"depth":1331,"text":134593},{"id":135072,"depth":1331,"text":135073},{"id":135107,"depth":1331,"text":135108},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133712,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135142,"title":135143,"body":135144,"description":204,"extension":205,"meta":136371,"navigation":207,"path":136372,"seo":136373,"stem":136374,"__hash__":136375},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135145,"toc":136352},[135146,135149,135153,135156,135170,135238,135268,135271,135275,135279,135381,135428,135432,135435,135438,135472,135475,135478,135481,135484,135487,135490,135493,135495,135498,135501,135504,135507,135510,135513,135516,135544,135547,135551,135554,135561,135564,135567,135593,135596,135600,135603,135606,135613,135617,135620,135622,135654,135657,135660,135672,135678,135681,135684,135687,135689,135693,135696,135699,135702,135747,135751,135753,135756,135763,135805,135808,135812,135817,135831,135835,135838,135841,135844,135847,135850,135884,135887,135890,135944,135947,135950,135953,135956,136008,136011,136014,136063,136067,136069,136072,136075,136078,136081,136084,136142,136145,136151,136154,136157,136189,136192,136196,136200,136203,136235,136239,136242,136286,136290,136293,136296,136299,136302,136305,136308,136311,136313,136316,136318,136321,136324,136327,136330,136335,136338,136340,136343,136346,136349],[10,135147,135143],{"id":135148},"_13-界面样式与布局技巧",[15,135150,135152],{"id":135151},"_131-css三角","13.1 css三角",[20,135154,135155],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[166,135157,135158,135161,135164,135167],{},[169,135159,135160],{},"用css 边框可以模拟三角效果",[169,135162,135163],{},"宽度高度为0",[169,135165,135166],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[169,135168,135169],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[36,135171,135173],{"className":126652,"code":135172,"language":126654,"meta":25,"style":25},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[42,135174,135175,135180,135187,135197,135207,135223,135234],{"__ignoreMap":25},[45,135176,135177],{"class":47,"line":48},[45,135178,135179],{"class":337},"\u002F* CSS 实现三角形 *\u002F\n",[45,135181,135182,135185],{"class":47,"line":66},[45,135183,135184],{"class":69},".triangle",[45,135186,15721],{"class":55},[45,135188,135189,135191,135193,135195],{"class":47,"line":1331},[45,135190,70668],{"class":79},[45,135192,51537],{"class":55},[45,135194,469],{"class":79},[45,135196,1442],{"class":55},[45,135198,135199,135201,135203,135205],{"class":47,"line":1346},[45,135200,70888],{"class":79},[45,135202,51537],{"class":55},[45,135204,469],{"class":79},[45,135206,1442],{"class":55},[45,135208,135209,135211,135213,135215,135217,135219,135221],{"class":47,"line":1352},[45,135210,70996],{"class":79},[45,135212,51537],{"class":55},[45,135214,723],{"class":79},[45,135216,51592],{"class":51},[45,135218,51621],{"class":79},[45,135220,64091],{"class":79},[45,135222,1442],{"class":55},[45,135224,135225,135228,135230,135232],{"class":47,"line":1366},[45,135226,135227],{"class":79},"  border-bottom-color",[45,135229,51537],{"class":55},[45,135231,62469],{"class":79},[45,135233,1442],{"class":55},[45,135235,135236],{"class":47,"line":1372},[45,135237,1716],{"class":55},[36,135239,135240],{"className":126652,"code":130809,"language":126654,"meta":25,"style":25},[42,135241,135242,135248,135264],{"__ignoreMap":25},[45,135243,135244,135246],{"class":47,"line":48},[45,135245,51711],{"class":51400},[45,135247,15721],{"class":55},[45,135249,135250,135252,135254,135256,135258,135260,135262],{"class":47,"line":66},[45,135251,70996],{"class":79},[45,135253,51537],{"class":55},[45,135255,495],{"class":79},[45,135257,51592],{"class":51},[45,135259,51621],{"class":79},[45,135261,130044],{"class":79},[45,135263,1442],{"class":55},[45,135265,135266],{"class":47,"line":1331},[45,135267,1716],{"class":55},[23,135269],{"style":126508,"src":135270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[15,135272,135274],{"id":135273},"_132-css用户界面样式","13.2 css用户界面样式",[249,135276,135278],{"id":135277},"_1321-鼠标样式","13.2.1 鼠标样式",[36,135280,135282],{"className":126652,"code":135281,"language":126654,"meta":25,"style":25},"\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",[42,135283,135284,135289,135308,135326,135345,135362],{"__ignoreMap":25},[45,135285,135286],{"class":47,"line":48},[45,135287,135288],{"class":337},"\u002F* 鼠标样式 *\u002F\n",[45,135290,135291,135293,135295,135298,135300,135302,135305],{"class":47,"line":66},[45,135292,51711],{"class":51400},[45,135294,79907],{"class":55},[45,135296,135297],{"class":79},"cursor",[45,135299,51537],{"class":55},[45,135301,62130],{"class":79},[45,135303,135304],{"class":55},"; }   ",[45,135306,135307],{"class":337},"\u002F* 手型 *\u002F\n",[45,135309,135310,135312,135314,135316,135318,135321,135323],{"class":47,"line":1331},[45,135311,51711],{"class":51400},[45,135313,79907],{"class":55},[45,135315,135297],{"class":79},[45,135317,51537],{"class":55},[45,135319,135320],{"class":79},"default",[45,135322,135304],{"class":55},[45,135324,135325],{"class":337},"\u002F* 默认 *\u002F\n",[45,135327,135328,135330,135332,135334,135336,135339,135342],{"class":47,"line":1346},[45,135329,51711],{"class":51400},[45,135331,79907],{"class":55},[45,135333,135297],{"class":79},[45,135335,51537],{"class":55},[45,135337,135338],{"class":79},"move",[45,135340,135341],{"class":55},"; }      ",[45,135343,135344],{"class":337},"\u002F* 移动 *\u002F\n",[45,135346,135347,135349,135351,135353,135355,135357,135359],{"class":47,"line":1352},[45,135348,51711],{"class":51400},[45,135350,79907],{"class":55},[45,135352,135297],{"class":79},[45,135354,51537],{"class":55},[45,135356,5337],{"class":79},[45,135358,135341],{"class":55},[45,135360,135361],{"class":337},"\u002F* 文本 *\u002F\n",[45,135363,135364,135366,135368,135370,135372,135375,135378],{"class":47,"line":1366},[45,135365,51711],{"class":51400},[45,135367,79907],{"class":55},[45,135369,135297],{"class":79},[45,135371,51537],{"class":55},[45,135373,135374],{"class":79},"not-allowed",[45,135376,135377],{"class":55},"; } ",[45,135379,135380],{"class":337},"\u002F* 禁止 *\u002F\n",[415,135382,135383,135391],{},[418,135384,135385],{},[421,135386,135387,135389],{},[424,135388,127116],{"align":23885},[424,135390,27589],{"align":23885},[462,135392,135393,135400,135407,135414,135421],{},[421,135394,135395,135397],{},[467,135396,135320],{"align":23885},[467,135398,135399],{"align":23885},"小白 默认",[421,135401,135402,135404],{},[467,135403,62130],{"align":23885},[467,135405,135406],{"align":23885},"小手",[421,135408,135409,135411],{},[467,135410,135338],{"align":23885},[467,135412,135413],{"align":23885},"移动",[421,135415,135416,135418],{},[467,135417,5337],{"align":23885},[467,135419,135420],{"align":23885},"文本",[421,135422,135423,135425],{},[467,135424,135374],{"align":23885},[467,135426,135427],{"align":23885},"禁止",[249,135429,135431],{"id":135430},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[20,135433,135434],{},"去除表单轮廓线",[20,135436,135437],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[36,135439,135440],{"className":126652,"code":130016,"language":126654,"meta":25,"style":25},[42,135441,135442,135446,135452,135468],{"__ignoreMap":25},[45,135443,135444],{"class":47,"line":48},[45,135445,130023],{"class":337},[45,135447,135448,135450],{"class":47,"line":66},[45,135449,51711],{"class":51400},[45,135451,15721],{"class":55},[45,135453,135454,135456,135458,135460,135462,135464,135466],{"class":47,"line":1331},[45,135455,70996],{"class":79},[45,135457,51537],{"class":55},[45,135459,495],{"class":79},[45,135461,51592],{"class":51},[45,135463,51621],{"class":79},[45,135465,130044],{"class":79},[45,135467,1442],{"class":55},[45,135469,135470],{"class":47,"line":1346},[45,135471,1716],{"class":55},[20,135473,135474],{},"文本域：",[23,135476],{"style":126508,"src":135477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[20,135479,135480],{},"此时会有一个空白区域",[23,135482],{"style":126508,"src":135483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[20,135485,135486],{},"写在同一行就不会出现这个问题",[23,135488],{"style":126508,"src":135489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[20,135491,135492],{},"文本域是行内块元素，一定记住！！！",[20,135494,98333],{},[23,135496],{"style":126508,"src":135497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[20,135499,135500],{},"文本域尽量放在一行",[20,135502,135503],{},"知识回顾：cols是列，rols是行",[23,135505],{"style":126508,"src":135506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[20,135508,135509],{},"它可以进行拖动，显然这是我们不愿意看到的",[23,135511],{"style":126508,"src":135512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[20,135514,135515],{},"使用resize进行解决",[36,135517,135519],{"className":126652,"code":135518,"language":126654,"meta":25,"style":25},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[42,135520,135521,135527,135540],{"__ignoreMap":25},[45,135522,135523,135525],{"class":47,"line":48},[45,135524,53921],{"class":51400},[45,135526,15721],{"class":55},[45,135528,135529,135531,135533,135535,135537],{"class":47,"line":66},[45,135530,70898],{"class":79},[45,135532,51537],{"class":55},[45,135534,54837],{"class":79},[45,135536,130515],{"class":55},[45,135538,135539],{"class":337},"\u002F* 取消表单轮廓线 *\u002F\n",[45,135541,135542],{"class":47,"line":1331},[45,135543,1716],{"class":55},[20,135545,135546],{},"此时就无法通过右下方实现拖动了",[249,135548,135550],{"id":135549},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[20,135552,135553],{},"实现一个盒子中的文字和图片对齐",[20,135555,135556,135557,135560],{},"用于设置一个元素的 ",[427,135558,135559],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[20,135562,135563],{},"图片和文字默认是基线对齐",[23,135565],{"style":126508,"src":135566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[36,135568,135569],{"className":126652,"code":135518,"language":126654,"meta":25,"style":25},[42,135570,135571,135577,135589],{"__ignoreMap":25},[45,135572,135573,135575],{"class":47,"line":48},[45,135574,53921],{"class":51400},[45,135576,15721],{"class":55},[45,135578,135579,135581,135583,135585,135587],{"class":47,"line":66},[45,135580,70898],{"class":79},[45,135582,51537],{"class":55},[45,135584,54837],{"class":79},[45,135586,130515],{"class":55},[45,135588,135539],{"class":337},[45,135590,135591],{"class":47,"line":1331},[45,135592,1716],{"class":55},[23,135594],{"style":126508,"src":135595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22147,135597,135599],{"id":135598},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[20,135601,135602],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[23,135604],{"style":126508,"src":135605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[20,135607,135608,135609,135612],{},"此时可以给图片、表单这些行内块元素的 ",[427,135610,135611],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22147,135614,135616],{"id":135615},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[20,135618,135619],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[20,135621,14782],{},[36,135623,135625],{"className":126652,"code":135624,"language":126654,"meta":25,"style":25},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[42,135626,135627,135632,135638,135650],{"__ignoreMap":25},[45,135628,135629],{"class":47,"line":48},[45,135630,135631],{"class":337},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[45,135633,135634,135636],{"class":47,"line":66},[45,135635,23],{"class":51400},[45,135637,15721],{"class":55},[45,135639,135640,135643,135645,135648],{"class":47,"line":1331},[45,135641,135642],{"class":79},"  vertical-align",[45,135644,51537],{"class":55},[45,135646,135647],{"class":79},"middle",[45,135649,1442],{"class":55},[45,135651,135652],{"class":47,"line":1346},[45,135653,1716],{"class":55},[23,135655],{"style":126508,"src":135656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[20,135658,135659],{},"主要解决方法有两种：",[233,135661,135662],{},[169,135663,135664,135667,135668,135671],{},[427,135665,135666],{},"给图片"," 添加 ",[427,135669,135670],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[20,135673,135674,135675],{},"2.把图片转换为块级元素 ",[427,135676,135677],{},"display: block",[20,135679,135680],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[20,135682,135683],{},"img {",[20,135685,135686],{},"vertical-align:middle;",[20,135688,1223],{},[249,135690,135692],{"id":135691},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[20,135694,135695],{},"效果：",[23,135697],{"style":126508,"src":135698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[20,135700,135701],{},"单行文本溢出显示省略号--必须满足三个条件：",[36,135703,135705],{"className":126652,"code":135704,"language":126654,"meta":25,"style":25},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[42,135706,135707,135712,135718,135728,135733,135743],{"__ignoreMap":25},[45,135708,135709],{"class":47,"line":48},[45,135710,135711],{"class":337},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[45,135713,135714,135716],{"class":47,"line":66},[45,135715,23],{"class":51400},[45,135717,15721],{"class":55},[45,135719,135720,135722,135724,135726],{"class":47,"line":1331},[45,135721,135642],{"class":79},[45,135723,51537],{"class":55},[45,135725,135647],{"class":79},[45,135727,1442],{"class":55},[45,135729,135730],{"class":47,"line":1346},[45,135731,135732],{"class":337},"  \u002F* 或 *\u002F\n",[45,135734,135735,135737,135739,135741],{"class":47,"line":1352},[45,135736,128268],{"class":79},[45,135738,51537],{"class":55},[45,135740,60969],{"class":79},[45,135742,1442],{"class":55},[45,135744,135745],{"class":47,"line":1366},[45,135746,1716],{"class":55},[249,135748,135750],{"id":135749},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[20,135752,135695],{},[23,135754],{"style":126508,"src":135755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[20,135757,135758,135759,135762],{},"多行文本溢出显示省略号， ",[427,135760,135761],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[36,135764,135765],{"className":126652,"code":135704,"language":126654,"meta":25,"style":25},[42,135766,135767,135771,135777,135787,135791,135801],{"__ignoreMap":25},[45,135768,135769],{"class":47,"line":48},[45,135770,135711],{"class":337},[45,135772,135773,135775],{"class":47,"line":66},[45,135774,23],{"class":51400},[45,135776,15721],{"class":55},[45,135778,135779,135781,135783,135785],{"class":47,"line":1331},[45,135780,135642],{"class":79},[45,135782,51537],{"class":55},[45,135784,135647],{"class":79},[45,135786,1442],{"class":55},[45,135788,135789],{"class":47,"line":1346},[45,135790,135732],{"class":337},[45,135792,135793,135795,135797,135799],{"class":47,"line":1352},[45,135794,128268],{"class":79},[45,135796,51537],{"class":55},[45,135798,60969],{"class":79},[45,135800,1442],{"class":55},[45,135802,135803],{"class":47,"line":1366},[45,135804,1716],{"class":55},[20,135806,135807],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[15,135809,135811],{"id":135810},"_133-常见布局技巧","13.3 常见布局技巧",[20,135813,135814],{},[427,135815,135816],{},"巧妙利用一个技术更快更好的布局：",[233,135818,135819,135822,135825,135828],{},[169,135820,135821],{},"margin负值的运用",[169,135823,135824],{},"文字围绕浮动元素",[169,135826,135827],{},"行内块的巧妙运用",[169,135829,135830],{},"CSS三角强化",[249,135832,135834],{"id":135833},"_1331-margin负值的运用","13.3.1 margin负值的运用",[20,135836,135837],{},"应用场景：",[23,135839],{"style":126508,"src":135840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[23,135842],{"style":126508,"src":135843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[20,135845,135846],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[20,135848,135849],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[36,135851,135852],{"className":126652,"code":130016,"language":126654,"meta":25,"style":25},[42,135853,135854,135858,135864,135880],{"__ignoreMap":25},[45,135855,135856],{"class":47,"line":48},[45,135857,130023],{"class":337},[45,135859,135860,135862],{"class":47,"line":66},[45,135861,51711],{"class":51400},[45,135863,15721],{"class":55},[45,135865,135866,135868,135870,135872,135874,135876,135878],{"class":47,"line":1331},[45,135867,70996],{"class":79},[45,135869,51537],{"class":55},[45,135871,495],{"class":79},[45,135873,51592],{"class":51},[45,135875,51621],{"class":79},[45,135877,130044],{"class":79},[45,135879,1442],{"class":55},[45,135881,135882],{"class":47,"line":1346},[45,135883,1716],{"class":55},[23,135885],{"style":126508,"src":135886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[20,135888,135889],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[36,135891,135893],{"className":126652,"code":135892,"language":126654,"meta":25,"style":25},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[42,135894,135895,135900,135906,135916,135928,135940],{"__ignoreMap":25},[45,135896,135897],{"class":47,"line":48},[45,135898,135899],{"class":337},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[45,135901,135902,135904],{"class":47,"line":66},[45,135903,130500],{"class":69},[45,135905,15721],{"class":55},[45,135907,135908,135910,135912,135914],{"class":47,"line":1331},[45,135909,132458],{"class":79},[45,135911,51537],{"class":55},[45,135913,54864],{"class":79},[45,135915,1442],{"class":55},[45,135917,135918,135920,135922,135924,135926],{"class":47,"line":1346},[45,135919,132472],{"class":79},[45,135921,51537],{"class":55},[45,135923,723],{"class":79},[45,135925,51592],{"class":51},[45,135927,1442],{"class":55},[45,135929,135930,135932,135934,135936,135938],{"class":47,"line":1352},[45,135931,132489],{"class":79},[45,135933,51537],{"class":55},[45,135935,977],{"class":79},[45,135937,51592],{"class":51},[45,135939,1442],{"class":55},[45,135941,135942],{"class":47,"line":1366},[45,135943,1716],{"class":55},[20,135945,135946],{},"加上上述代码会发现：",[23,135948],{"style":126508,"src":135949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[20,135951,135952],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[20,135954,135955],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[36,135957,135958],{"className":126652,"code":135892,"language":126654,"meta":25,"style":25},[42,135959,135960,135964,135970,135980,135992,136004],{"__ignoreMap":25},[45,135961,135962],{"class":47,"line":48},[45,135963,135899],{"class":337},[45,135965,135966,135968],{"class":47,"line":66},[45,135967,130500],{"class":69},[45,135969,15721],{"class":55},[45,135971,135972,135974,135976,135978],{"class":47,"line":1331},[45,135973,132458],{"class":79},[45,135975,51537],{"class":55},[45,135977,54864],{"class":79},[45,135979,1442],{"class":55},[45,135981,135982,135984,135986,135988,135990],{"class":47,"line":1346},[45,135983,132472],{"class":79},[45,135985,51537],{"class":55},[45,135987,723],{"class":79},[45,135989,51592],{"class":51},[45,135991,1442],{"class":55},[45,135993,135994,135996,135998,136000,136002],{"class":47,"line":1352},[45,135995,132489],{"class":79},[45,135997,51537],{"class":55},[45,135999,977],{"class":79},[45,136001,51592],{"class":51},[45,136003,1442],{"class":55},[45,136005,136006],{"class":47,"line":1366},[45,136007,1716],{"class":55},[20,136009,136010],{},"解决方式2：",[20,136012,136013],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[36,136015,136017],{"className":126652,"code":136016,"language":126654,"meta":25,"style":25},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[42,136018,136019,136025,136035,136047,136059],{"__ignoreMap":25},[45,136020,136021,136023],{"class":47,"line":48},[45,136022,51711],{"class":51400},[45,136024,15721],{"class":55},[45,136026,136027,136029,136031,136033],{"class":47,"line":66},[45,136028,132458],{"class":79},[45,136030,51537],{"class":55},[45,136032,54864],{"class":79},[45,136034,1442],{"class":55},[45,136036,136037,136039,136041,136043,136045],{"class":47,"line":1331},[45,136038,132472],{"class":79},[45,136040,51537],{"class":55},[45,136042,723],{"class":79},[45,136044,51592],{"class":51},[45,136046,1442],{"class":55},[45,136048,136049,136051,136053,136055,136057],{"class":47,"line":1346},[45,136050,132489],{"class":79},[45,136052,51537],{"class":55},[45,136054,977],{"class":79},[45,136056,51592],{"class":51},[45,136058,1442],{"class":55},[45,136060,136061],{"class":47,"line":1352},[45,136062,1716],{"class":55},[249,136064,136066],{"id":136065},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[20,136068,135837],{},[23,136070],{"style":126508,"src":136071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[20,136073,136074],{},"实现结构图：",[23,136076],{"style":126508,"src":136077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[20,136079,136080],{},"巧妙运用浮动元素不会压住文字的特性",[20,136082,136083],{},"代码显示：",[36,136085,136087],{"className":126652,"code":136086,"language":126654,"meta":25,"style":25},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[42,136088,136089,136095,136105,136109,136114,136118,136124,136138],{"__ignoreMap":25},[45,136090,136091,136093],{"class":47,"line":48},[45,136092,130500],{"class":69},[45,136094,15721],{"class":55},[45,136096,136097,136099,136101,136103],{"class":47,"line":66},[45,136098,131132],{"class":79},[45,136100,51537],{"class":55},[45,136102,23885],{"class":79},[45,136104,1442],{"class":55},[45,136106,136107],{"class":47,"line":1331},[45,136108,1716],{"class":55},[45,136110,136111],{"class":47,"line":1346},[45,136112,136113],{"class":55},"```Css\n",[45,136115,136116],{"class":47,"line":1352},[45,136117,130495],{"class":337},[45,136119,136120,136122],{"class":47,"line":1366},[45,136121,130500],{"class":69},[45,136123,15721],{"class":55},[45,136125,136126,136128,136130,136132,136134,136136],{"class":47,"line":1372},[45,136127,70570],{"class":79},[45,136129,51537],{"class":55},[45,136131,469],{"class":79},[45,136133,51656],{"class":79},[45,136135,130515],{"class":55},[45,136137,130518],{"class":337},[45,136139,136140],{"class":47,"line":1463},[45,136141,1716],{"class":55},[20,136143,136144],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[36,136146,136149],{"className":136147,"code":136148,"language":5337},[5335],"\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",[42,136150,136148],{"__ignoreMap":25},[23,136152],{"style":126508,"src":136153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[20,136155,136156],{},"最终展示结果：",[36,136158,136159],{"className":126652,"code":130488,"language":126654,"meta":25,"style":25},[42,136160,136161,136165,136171,136185],{"__ignoreMap":25},[45,136162,136163],{"class":47,"line":48},[45,136164,130495],{"class":337},[45,136166,136167,136169],{"class":47,"line":66},[45,136168,130500],{"class":69},[45,136170,15721],{"class":55},[45,136172,136173,136175,136177,136179,136181,136183],{"class":47,"line":1331},[45,136174,70570],{"class":79},[45,136176,51537],{"class":55},[45,136178,469],{"class":79},[45,136180,51656],{"class":79},[45,136182,130515],{"class":55},[45,136184,130518],{"class":337},[45,136186,136187],{"class":47,"line":1346},[45,136188,1716],{"class":55},[23,136190],{"style":126508,"src":136191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[15,136193,136195],{"id":136194},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[249,136197,136199],{"id":136198},"_1341-原理","13.4.1 原理",[23,136201],{"style":126508,"src":136202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[36,136204,136205],{"className":126652,"code":130488,"language":126654,"meta":25,"style":25},[42,136206,136207,136211,136217,136231],{"__ignoreMap":25},[45,136208,136209],{"class":47,"line":48},[45,136210,130495],{"class":337},[45,136212,136213,136215],{"class":47,"line":66},[45,136214,130500],{"class":69},[45,136216,15721],{"class":55},[45,136218,136219,136221,136223,136225,136227,136229],{"class":47,"line":1331},[45,136220,70570],{"class":79},[45,136222,51537],{"class":55},[45,136224,469],{"class":79},[45,136226,51656],{"class":79},[45,136228,130515],{"class":55},[45,136230,130518],{"class":337},[45,136232,136233],{"class":47,"line":1346},[45,136234,1716],{"class":55},[249,136236,136238],{"id":136237},"_1342-实例","13.4.2 实例",[23,136240],{"style":126508,"src":136241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[36,136243,136244],{"className":126652,"code":131118,"language":126654,"meta":25,"style":25},[42,136245,136246,136252,136262,136266,136272,136282],{"__ignoreMap":25},[45,136247,136248,136250],{"class":47,"line":48},[45,136249,131125],{"class":69},[45,136251,15721],{"class":55},[45,136253,136254,136256,136258,136260],{"class":47,"line":66},[45,136255,131132],{"class":79},[45,136257,51537],{"class":55},[45,136259,23885],{"class":79},[45,136261,1442],{"class":55},[45,136263,136264],{"class":47,"line":1331},[45,136265,1716],{"class":55},[45,136267,136268,136270],{"class":47,"line":1346},[45,136269,131147],{"class":69},[45,136271,15721],{"class":55},[45,136273,136274,136276,136278,136280],{"class":47,"line":1352},[45,136275,131132],{"class":79},[45,136277,51537],{"class":55},[45,136279,72622],{"class":79},[45,136281,1442],{"class":55},[45,136283,136284],{"class":47,"line":1366},[45,136285,1716],{"class":55},[15,136287,136289],{"id":136288},"_135-css的初始化","13.5 css的初始化",[20,136291,136292],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[20,136294,136295],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[20,136297,136298],{},"每个网页都必须首先进行 CSS初始化。",[20,136300,136301],{},"这里我们以 京东CSS初始化代码为例。",[20,136303,136304],{},"在网页右键查看网页源代码",[20,136306,136307],{},"找到css的link引入语句",[20,136309,136310],{},"然后ctrl+f 输入body",[20,136312,77326],{},[23,136314],{"style":126508,"src":136315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[20,136317,77349],{},[23,136319],{"style":126508,"src":136320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[20,136322,136323],{},"③打开了网页上传压缩的代码",[23,136325],{"style":126508,"src":136326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[20,136328,136329],{},"④从body前可以查看这个网页的初始化代码",[20,136331,136332],{},[427,136333,136334],{},"Unicode编码字体：",[20,136336,136337],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[20,136339,83307],{},[20,136341,136342],{},"黑体 \\9ED1\\4F53",[20,136344,136345],{},"宋体 \\5B8B\\4F53",[20,136347,136348],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[196,136350,136351],{},"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":25,"searchDepth":66,"depth":66,"links":136353},[136354,136355,136362,136366,136370],{"id":135151,"depth":66,"text":135152},{"id":135273,"depth":66,"text":135274,"children":136356},[136357,136358,136359,136360,136361],{"id":135277,"depth":1331,"text":135278},{"id":135430,"depth":1331,"text":135431},{"id":135549,"depth":1331,"text":135550},{"id":135691,"depth":1331,"text":135692},{"id":135749,"depth":1331,"text":135750},{"id":135810,"depth":66,"text":135811,"children":136363},[136364,136365],{"id":135833,"depth":1331,"text":135834},{"id":136065,"depth":1331,"text":136066},{"id":136194,"depth":66,"text":136195,"children":136367},[136368,136369],{"id":136198,"depth":1331,"text":136199},{"id":136237,"depth":1331,"text":136238},{"id":136288,"depth":66,"text":136289},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135143,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136377,"title":136378,"body":136379,"description":204,"extension":205,"meta":138065,"navigation":207,"path":138066,"seo":138067,"stem":138068,"__hash__":138069},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136380,"toc":138054},[136381,136384,136388,136392,136395,136402,136405,136408,136446,136449,136451,136465,136469,136478,136482,136487,136490,136493,136496,136531,136536,136539,136569,136572,136577,136580,136583,136613,136616,136670,136673,136677,136682,136694,136697,136701,136731,136734,136739,136742,136772,136775,136779,136796,136800,136804,136807,136840,136843,136847,136850,136853,136856,136859,136862,136973,136976,136979,136982,137084,137087,137091,137095,137099,137102,137142,137145,137147,137163,137167,137170,137175,137256,137259,137262,137388,137393,137396,137404,137407,137412,137497,137500,137504,137507,137510,137514,137534,137539,137623,137626,137631,137634,137637,137715,137718,137721,137724,137727,137730,137735,137738,137741,137813,137816,137821,137824,137921,137924,137930,137933,137936,137939,137942,137945,137948,137951,137954,137958,137963,137966,137999,138004,138007,138048,138051],[10,136382,136378],{"id":136383},"_14-html5与css3新特性",[15,136385,136387],{"id":136386},"_141-html5的新特性","14.1 HTML5的新特性",[249,136389,136391],{"id":136390},"_1411-基本标签","14.1.1 基本标签",[20,136393,136394],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[20,136396,136397,136398,136401],{},"这些新特性都有兼容性问题，基本是 ",[427,136399,136400],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[20,136403,136404],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[20,136406,136407],{},"现在使用的是新特性：",[166,136409,136410,136416,136422,136428,136434,136440],{},[169,136411,136412,136415],{},[42,136413,136414],{},"\u003Cheader>"," 头部标签",[169,136417,136418,136421],{},[42,136419,136420],{},"\u003Cnav>"," 导航标签",[169,136423,136424,136427],{},[42,136425,136426],{},"\u003Carticle>"," 内容标签",[169,136429,136430,136433],{},[42,136431,136432],{},"\u003Csection>"," 定义文档某个区域",[169,136435,136436,136439],{},[42,136437,136438],{},"\u003Caside>"," 侧边栏标签",[169,136441,136442,136445],{},[42,136443,136444],{},"\u003Cfooter>"," 尾部标签",[23,136447],{"style":126508,"src":136448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[20,136450,310],{},[166,136452,136453,136456,136459,136462],{},[169,136454,136455],{},"这种语义化标准主要是针对搜索引擎的",[169,136457,136458],{},"这些标签页面中可以经常使用",[169,136460,136461],{},"在IE9中，需要把这些元素转换为块级元素",[169,136463,136464],{},"移动端更喜欢使用这些标签",[249,136466,136468],{"id":136467},"_1412-多媒体标签","14.1.2 多媒体标签",[20,136470,136471,136472,136474,136475,136477],{},"音频 ",[427,136473,28274],{}," 和视频 ",[427,136476,28283],{}," 两个标签",[22147,136479,136481],{"id":136480},"_14121-视频标签-video","14.1.2.1 视频标签- video",[233,136483,136484],{},[169,136485,136486],{},"支持格式：",[23,136488],{"style":126508,"src":136489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[20,136491,136492],{},"尽量使用MP4，兼容性好",[20,136494,136495],{},"用MP4就可以",[36,136497,136499],{"className":127399,"code":136498,"language":127401,"meta":25,"style":25},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[42,136500,136501],{"__ignoreMap":25},[45,136502,136503,136505,136507,136509,136511,136514,136516,136519,136522,136525,136527,136529],{"class":47,"line":48},[45,136504,1187],{"class":55},[45,136506,28283],{"class":51400},[45,136508,55339],{"class":69},[45,136510,59],{"class":55},[45,136512,136513],{"class":62},"\"movie.mp4\"",[45,136515,92523],{"class":69},[45,136517,136518],{"class":69}," autoplay",[45,136520,136521],{"class":69}," muted",[45,136523,136524],{"class":69}," loop",[45,136526,55414],{"class":55},[45,136528,28283],{"class":51400},[45,136530,51407],{"class":55},[233,136532,136533],{"start":66},[169,136534,136535],{},"兼容写法",[20,136537,136538],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[36,136540,136541],{"className":127399,"code":136498,"language":127401,"meta":25,"style":25},[42,136542,136543],{"__ignoreMap":25},[45,136544,136545,136547,136549,136551,136553,136555,136557,136559,136561,136563,136565,136567],{"class":47,"line":48},[45,136546,1187],{"class":55},[45,136548,28283],{"class":51400},[45,136550,55339],{"class":69},[45,136552,59],{"class":55},[45,136554,136513],{"class":62},[45,136556,92523],{"class":69},[45,136558,136518],{"class":69},[45,136560,136521],{"class":69},[45,136562,136524],{"class":69},[45,136564,55414],{"class":55},[45,136566,28283],{"class":51400},[45,136568,51407],{"class":55},[20,136570,136571],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[233,136573,136574],{"start":1331},[169,136575,136576],{},"video常用属性",[23,136578],{"style":126508,"src":136579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[20,136581,136582],{},"poster属性后面是跟的等待加载图片的地址",[36,136584,136585],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,136586,136587],{"__ignoreMap":25},[45,136588,136589,136591,136593,136595,136597,136599,136601,136603,136605,136607,136609,136611],{"class":47,"line":48},[45,136590,1187],{"class":55},[45,136592,23],{"class":51400},[45,136594,55339],{"class":69},[45,136596,59],{"class":55},[45,136598,134169],{"class":62},[45,136600,55347],{"class":69},[45,136602,59],{"class":55},[45,136604,134176],{"class":62},[45,136606,134179],{"class":69},[45,136608,59],{"class":55},[45,136610,134184],{"class":62},[45,136612,51407],{"class":55},[20,136614,136615],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[36,136617,136619],{"className":126652,"code":136618,"language":126654,"meta":25,"style":25},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[42,136620,136621,136626,136632,136656,136661,136666],{"__ignoreMap":25},[45,136622,136623],{"class":47,"line":48},[45,136624,136625],{"class":337},"\u002F* 2D 位移 *\u002F\n",[45,136627,136628,136630],{"class":47,"line":66},[45,136629,51711],{"class":51400},[45,136631,15721],{"class":55},[45,136633,136634,136637,136639,136642,136644,136646,136648,136650,136652,136654],{"class":47,"line":1331},[45,136635,136636],{"class":79},"  transform",[45,136638,51537],{"class":55},[45,136640,136641],{"class":79},"translate",[45,136643,282],{"class":55},[45,136645,588],{"class":79},[45,136647,51592],{"class":51},[45,136649,12584],{"class":55},[45,136651,933],{"class":79},[45,136653,51592],{"class":51},[45,136655,2869],{"class":55},[45,136657,136658],{"class":47,"line":1346},[45,136659,136660],{"class":337},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[45,136662,136663],{"class":47,"line":1352},[45,136664,136665],{"class":337},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[45,136667,136668],{"class":47,"line":1366},[45,136669,1716],{"class":55},[20,136671,136672],{},"muted:自动静音属性",[22147,136674,136676],{"id":136675},"_14122-音频标签audio","14.1.2.2 音频标签audio",[233,136678,136679],{},[169,136680,136681],{},"基本使用",[20,136683,136684,136685,136690,136691],{},"当前 ",[427,136686,136687],{},[42,136688,136689],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[427,136692,136693],{},"mp3格式",[23,136695],{"style":126508,"src":136696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[233,136698,136699],{"start":66},[169,136700,136535],{},[36,136702,136703],{"className":127399,"code":136498,"language":127401,"meta":25,"style":25},[42,136704,136705],{"__ignoreMap":25},[45,136706,136707,136709,136711,136713,136715,136717,136719,136721,136723,136725,136727,136729],{"class":47,"line":48},[45,136708,1187],{"class":55},[45,136710,28283],{"class":51400},[45,136712,55339],{"class":69},[45,136714,59],{"class":55},[45,136716,136513],{"class":62},[45,136718,92523],{"class":69},[45,136720,136518],{"class":69},[45,136722,136521],{"class":69},[45,136724,136524],{"class":69},[45,136726,55414],{"class":55},[45,136728,28283],{"class":51400},[45,136730,51407],{"class":55},[20,136732,136733],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[233,136735,136736],{"start":1331},[169,136737,136738],{},"常用属性",[23,136740],{"style":126508,"src":136741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[36,136743,136744],{"className":127399,"code":136498,"language":127401,"meta":25,"style":25},[42,136745,136746],{"__ignoreMap":25},[45,136747,136748,136750,136752,136754,136756,136758,136760,136762,136764,136766,136768,136770],{"class":47,"line":48},[45,136749,1187],{"class":55},[45,136751,28283],{"class":51400},[45,136753,55339],{"class":69},[45,136755,59],{"class":55},[45,136757,136513],{"class":62},[45,136759,92523],{"class":69},[45,136761,136518],{"class":69},[45,136763,136521],{"class":69},[45,136765,136524],{"class":69},[45,136767,55414],{"class":55},[45,136769,28283],{"class":51400},[45,136771,51407],{"class":55},[20,136773,136774],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22147,136776,136778],{"id":136777},"_14123-总结","14.1.2.3 总结",[166,136780,136781,136784,136787,136790,136793],{},[169,136782,136783],{},"音频标签和视频标签使用方式基本一致",[169,136785,136786],{},"浏览器支持情况不同",[169,136788,136789],{},"谷歌浏览器把音频和视频自动播放禁止了",[169,136791,136792],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[169,136794,136795],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[249,136797,136799],{"id":136798},"_1413-表单元素","14.1.3 表单元素",[22147,136801,136803],{"id":136802},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[23,136805],{"style":126508,"src":136806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[36,136808,136810],{"className":127399,"code":136809,"language":127401,"meta":25,"style":25},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[42,136811,136812],{"__ignoreMap":25},[45,136813,136814,136816,136818,136820,136822,136824,136826,136828,136831,136833,136835,136838],{"class":47,"line":48},[45,136815,1187],{"class":55},[45,136817,53921],{"class":51400},[45,136819,53924],{"class":69},[45,136821,59],{"class":55},[45,136823,62799],{"class":62},[45,136825,15069],{"class":69},[45,136827,59],{"class":55},[45,136829,136830],{"class":62},"\"username\"",[45,136832,61120],{"class":69},[45,136834,59],{"class":55},[45,136836,136837],{"class":62},"\"请输入用户名\"",[45,136839,51407],{"class":55},[23,136841],{"style":126508,"src":136842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22147,136844,136846],{"id":136845},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[23,136848],{"style":126508,"src":136849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[20,136851,136852],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[20,136854,136855],{},"快捷操作：",[23,136857],{"style":126508,"src":136858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[20,136860,136861],{},"例子1：",[36,136863,136865],{"className":127399,"code":136864,"language":127401,"meta":25,"style":25},"\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",[42,136866,136867,136890,136917,136946,136965],{"__ignoreMap":25},[45,136868,136869,136871,136873,136875,136877,136880,136883,136885,136888],{"class":47,"line":48},[45,136870,1187],{"class":55},[45,136872,66725],{"class":51400},[45,136874,66728],{"class":69},[45,136876,59],{"class":55},[45,136878,136879],{"class":62},"\"\u002Fsubmit\"",[45,136881,136882],{"class":69}," method",[45,136884,59],{"class":55},[45,136886,136887],{"class":62},"\"post\"",[45,136889,51407],{"class":55},[45,136891,136892,136894,136896,136898,136900,136902,136904,136906,136908,136910,136912,136915],{"class":47,"line":66},[45,136893,52244],{"class":55},[45,136895,53921],{"class":51400},[45,136897,53924],{"class":69},[45,136899,59],{"class":55},[45,136901,62799],{"class":62},[45,136903,15069],{"class":69},[45,136905,59],{"class":55},[45,136907,136830],{"class":62},[45,136909,61120],{"class":69},[45,136911,59],{"class":55},[45,136913,136914],{"class":62},"\"用户名\"",[45,136916,51407],{"class":55},[45,136918,136919,136921,136923,136925,136927,136930,136932,136934,136937,136939,136941,136944],{"class":47,"line":1331},[45,136920,52244],{"class":55},[45,136922,53921],{"class":51400},[45,136924,53924],{"class":69},[45,136926,59],{"class":55},[45,136928,136929],{"class":62},"\"password\"",[45,136931,15069],{"class":69},[45,136933,59],{"class":55},[45,136935,136936],{"class":62},"\"pwd\"",[45,136938,61120],{"class":69},[45,136940,59],{"class":55},[45,136942,136943],{"class":62},"\"密码\"",[45,136945,51407],{"class":55},[45,136947,136948,136950,136952,136954,136956,136958,136961,136963],{"class":47,"line":1346},[45,136949,52244],{"class":55},[45,136951,53987],{"class":51400},[45,136953,53924],{"class":69},[45,136955,59],{"class":55},[45,136957,66748],{"class":62},[45,136959,136960],{"class":55},">提交\u003C\u002F",[45,136962,53987],{"class":51400},[45,136964,51407],{"class":55},[45,136966,136967,136969,136971],{"class":47,"line":1352},[45,136968,51885],{"class":55},[45,136970,66725],{"class":51400},[45,136972,51407],{"class":55},[23,136974],{"style":126508,"src":136975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[20,136977,136978],{},"value是表单域的内容",[20,136980,136981],{},"例子2：",[36,136983,136984],{"className":127399,"code":136864,"language":127401,"meta":25,"style":25},[42,136985,136986,137006,137032,137058,137076],{"__ignoreMap":25},[45,136987,136988,136990,136992,136994,136996,136998,137000,137002,137004],{"class":47,"line":48},[45,136989,1187],{"class":55},[45,136991,66725],{"class":51400},[45,136993,66728],{"class":69},[45,136995,59],{"class":55},[45,136997,136879],{"class":62},[45,136999,136882],{"class":69},[45,137001,59],{"class":55},[45,137003,136887],{"class":62},[45,137005,51407],{"class":55},[45,137007,137008,137010,137012,137014,137016,137018,137020,137022,137024,137026,137028,137030],{"class":47,"line":66},[45,137009,52244],{"class":55},[45,137011,53921],{"class":51400},[45,137013,53924],{"class":69},[45,137015,59],{"class":55},[45,137017,62799],{"class":62},[45,137019,15069],{"class":69},[45,137021,59],{"class":55},[45,137023,136830],{"class":62},[45,137025,61120],{"class":69},[45,137027,59],{"class":55},[45,137029,136914],{"class":62},[45,137031,51407],{"class":55},[45,137033,137034,137036,137038,137040,137042,137044,137046,137048,137050,137052,137054,137056],{"class":47,"line":1331},[45,137035,52244],{"class":55},[45,137037,53921],{"class":51400},[45,137039,53924],{"class":69},[45,137041,59],{"class":55},[45,137043,136929],{"class":62},[45,137045,15069],{"class":69},[45,137047,59],{"class":55},[45,137049,136936],{"class":62},[45,137051,61120],{"class":69},[45,137053,59],{"class":55},[45,137055,136943],{"class":62},[45,137057,51407],{"class":55},[45,137059,137060,137062,137064,137066,137068,137070,137072,137074],{"class":47,"line":1346},[45,137061,52244],{"class":55},[45,137063,53987],{"class":51400},[45,137065,53924],{"class":69},[45,137067,59],{"class":55},[45,137069,66748],{"class":62},[45,137071,136960],{"class":55},[45,137073,53987],{"class":51400},[45,137075,51407],{"class":55},[45,137077,137078,137080,137082],{"class":47,"line":1352},[45,137079,51885],{"class":55},[45,137081,66725],{"class":51400},[45,137083,51407],{"class":55},[23,137085],{"style":126508,"src":137086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[15,137088,137090],{"id":137089},"_142-css新特性","14.2 CSS新特性",[249,137092,137094],{"id":137093},"_1421-新增选择器","14.2.1 新增选择器",[22147,137096,137098],{"id":137097},"_14211-属性选择器","14.2.1.1 属性选择器",[23,137100],{"style":126508,"src":137101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[36,137103,137105],{"className":126652,"code":137104,"language":126654,"meta":25,"style":25},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[42,137106,137107,137122,137138],{"__ignoreMap":25},[45,137108,137109,137111,137113,137115,137117,137119],{"class":47,"line":48},[45,137110,53921],{"class":51400},[45,137112,1167],{"class":55},[45,137114,103207],{"class":69},[45,137116,59],{"class":51},[45,137118,62799],{"class":62},[45,137120,137121],{"class":55},"] {\n",[45,137123,137124,137126,137128,137130,137132,137134,137136],{"class":47,"line":66},[45,137125,70996],{"class":79},[45,137127,51537],{"class":55},[45,137129,495],{"class":79},[45,137131,51592],{"class":51},[45,137133,51621],{"class":79},[45,137135,130232],{"class":79},[45,137137,1442],{"class":55},[45,137139,137140],{"class":47,"line":1331},[45,137141,1716],{"class":55},[23,137143],{"style":126508,"src":137144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[20,137146,310],{},[166,137148,137149,137152,137155,137158],{},[169,137150,137151],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[169,137153,137154],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[169,137156,137157],{},"属性选择器也可以选择出来自定义的属性",[169,137159,137160,137162],{},[427,137161,9175],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22147,137164,137166],{"id":137165},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[23,137168],{"style":126508,"src":137169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[233,137171,137172],{},[169,137173,137174],{},"fist-child",[36,137176,137178],{"className":126652,"code":137177,"language":126654,"meta":25,"style":25},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[42,137179,137180,137185,137200,137220,137238],{"__ignoreMap":25},[45,137181,137182],{"class":47,"line":48},[45,137183,137184],{"class":337},"\u002F* 属性选择器 *\u002F\n",[45,137186,137187,137189,137191,137193,137195,137197],{"class":47,"line":66},[45,137188,53921],{"class":51400},[45,137190,1167],{"class":55},[45,137192,103207],{"class":69},[45,137194,59],{"class":51},[45,137196,62799],{"class":62},[45,137198,137199],{"class":55},"] { }\n",[45,137201,137202,137204,137206,137208,137211,137214,137217],{"class":47,"line":1331},[45,137203,53921],{"class":51400},[45,137205,1167],{"class":55},[45,137207,14843],{"class":69},[45,137209,137210],{"class":51},"^=",[45,137212,137213],{"class":62},"\"icon\"",[45,137215,137216],{"class":55},"] { }  ",[45,137218,137219],{"class":337},"\u002F* 以 icon 开头 *\u002F\n",[45,137221,137222,137224,137226,137228,137231,137233,137235],{"class":47,"line":1346},[45,137223,53921],{"class":51400},[45,137225,1167],{"class":55},[45,137227,14843],{"class":69},[45,137229,137230],{"class":51},"$=",[45,137232,137213],{"class":62},[45,137234,137216],{"class":55},[45,137236,137237],{"class":337},"\u002F* 以 icon 结尾 *\u002F\n",[45,137239,137240,137242,137244,137246,137249,137251,137253],{"class":47,"line":1352},[45,137241,53921],{"class":51400},[45,137243,1167],{"class":55},[45,137245,14843],{"class":69},[45,137247,137248],{"class":51},"*=",[45,137250,137213],{"class":62},[45,137252,137216],{"class":55},[45,137254,137255],{"class":337},"\u002F* 包含 icon *\u002F\n",[20,137257,137258],{},"ul的第一个儿子文本为红色",[20,137260,137261],{},"一定要在冒号前加空格，不然就是选中所有的了",[36,137263,137265],{"className":126652,"code":137264,"language":126654,"meta":25,"style":25},".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",[42,137266,137267,137273,137283,137287,137291,137296,137309,137322,137338,137355,137372],{"__ignoreMap":25},[45,137268,137269,137271],{"class":47,"line":48},[45,137270,126943],{"class":69},[45,137272,15721],{"class":55},[45,137274,137275,137277,137279,137281],{"class":47,"line":66},[45,137276,71005],{"class":79},[45,137278,51537],{"class":55},[45,137280,57521],{"class":79},[45,137282,1442],{"class":55},[45,137284,137285],{"class":47,"line":1331},[45,137286,1716],{"class":55},[45,137288,137289],{"class":47,"line":1346},[45,137290,136113],{"class":55},[45,137292,137293],{"class":47,"line":1352},[45,137294,137295],{"class":337},"\u002F* 结构伪类选择器 *\u002F\n",[45,137297,137298,137300,137303,137306],{"class":47,"line":1366},[45,137299,169],{"class":51400},[45,137301,137302],{"class":69},":first-child",[45,137304,137305],{"class":55}," { }           ",[45,137307,137308],{"class":337},"\u002F* 第一个 *\u002F\n",[45,137310,137311,137313,137316,137319],{"class":47,"line":1372},[45,137312,169],{"class":51400},[45,137314,137315],{"class":69},":last-child",[45,137317,137318],{"class":55}," { }            ",[45,137320,137321],{"class":337},"\u002F* 最后一个 *\u002F\n",[45,137323,137324,137326,137328,137330,137332,137335],{"class":47,"line":1463},[45,137325,169],{"class":51400},[45,137327,129566],{"class":69},[45,137329,282],{"class":55},[45,137331,356],{"class":79},[45,137333,137334],{"class":55},") { }          ",[45,137336,137337],{"class":337},"\u002F* 第2个 *\u002F\n",[45,137339,137340,137342,137344,137346,137349,137352],{"class":47,"line":1469},[45,137341,169],{"class":51400},[45,137343,129566],{"class":69},[45,137345,282],{"class":55},[45,137347,137348],{"class":79},"2n",[45,137350,137351],{"class":55},") { }         ",[45,137353,137354],{"class":337},"\u002F* 偶数 *\u002F\n",[45,137356,137357,137359,137361,137363,137366,137369],{"class":47,"line":1481},[45,137358,169],{"class":51400},[45,137360,129566],{"class":69},[45,137362,282],{"class":55},[45,137364,137365],{"class":79},"2n+1",[45,137367,137368],{"class":55},") { }       ",[45,137370,137371],{"class":337},"\u002F* 奇数 *\u002F\n",[45,137373,137374,137376,137378,137380,137383,137385],{"class":47,"line":1763},[45,137375,169],{"class":51400},[45,137377,129566],{"class":69},[45,137379,282],{"class":55},[45,137381,137382],{"class":79},"-n+3",[45,137384,137368],{"class":55},[45,137386,137387],{"class":337},"\u002F* 前3个 *\u002F\n",[51711,137389,137392],{"className":137390},[137391],"example","\n  示例内容\n",[20,137394,137395],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[166,137397,137398],{},[169,137399,137400,137403],{},[42,137401,137402],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[20,137405,137406],{},"也就是说它选择的是熊大",[233,137408,137409],{"start":1366},[169,137410,137411],{},"权重",[36,137413,137415],{"className":126652,"code":137414,"language":126654,"meta":25,"style":25},"\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",[42,137416,137417,137421,137431,137441,137455,137469,137483],{"__ignoreMap":25},[45,137418,137419],{"class":47,"line":48},[45,137420,137295],{"class":337},[45,137422,137423,137425,137427,137429],{"class":47,"line":66},[45,137424,169],{"class":51400},[45,137426,137302],{"class":69},[45,137428,137305],{"class":55},[45,137430,137308],{"class":337},[45,137432,137433,137435,137437,137439],{"class":47,"line":1331},[45,137434,169],{"class":51400},[45,137436,137315],{"class":69},[45,137438,137318],{"class":55},[45,137440,137321],{"class":337},[45,137442,137443,137445,137447,137449,137451,137453],{"class":47,"line":1346},[45,137444,169],{"class":51400},[45,137446,129566],{"class":69},[45,137448,282],{"class":55},[45,137450,356],{"class":79},[45,137452,137334],{"class":55},[45,137454,137337],{"class":337},[45,137456,137457,137459,137461,137463,137465,137467],{"class":47,"line":1352},[45,137458,169],{"class":51400},[45,137460,129566],{"class":69},[45,137462,282],{"class":55},[45,137464,137348],{"class":79},[45,137466,137351],{"class":55},[45,137468,137354],{"class":337},[45,137470,137471,137473,137475,137477,137479,137481],{"class":47,"line":1366},[45,137472,169],{"class":51400},[45,137474,129566],{"class":69},[45,137476,282],{"class":55},[45,137478,137365],{"class":79},[45,137480,137368],{"class":55},[45,137482,137371],{"class":337},[45,137484,137485,137487,137489,137491,137493,137495],{"class":47,"line":1372},[45,137486,169],{"class":51400},[45,137488,129566],{"class":69},[45,137490,282],{"class":55},[45,137492,137382],{"class":79},[45,137494,137368],{"class":55},[45,137496,137387],{"class":337},[20,137498,137499],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22147,137501,137503],{"id":137502},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[20,137505,137506],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[23,137508],{"style":126508,"src":137509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[233,137511,137512],{},[169,137513,310],{},[166,137515,137516,137519,137522,137525,137528,137531],{},[169,137517,137518],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[169,137520,137521],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[169,137523,137524],{},"语法： element::before {}",[169,137526,137527],{},"before 和 after 必须有 content 属性",[169,137529,137530],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[169,137532,137533],{},"伪元素选择器和标签选择器一样，权重为 1",[233,137535,137536],{"start":66},[169,137537,137538],{},"实例",[36,137540,137541],{"className":126652,"code":137414,"language":126654,"meta":25,"style":25},[42,137542,137543,137547,137557,137567,137581,137595,137609],{"__ignoreMap":25},[45,137544,137545],{"class":47,"line":48},[45,137546,137295],{"class":337},[45,137548,137549,137551,137553,137555],{"class":47,"line":66},[45,137550,169],{"class":51400},[45,137552,137302],{"class":69},[45,137554,137305],{"class":55},[45,137556,137308],{"class":337},[45,137558,137559,137561,137563,137565],{"class":47,"line":1331},[45,137560,169],{"class":51400},[45,137562,137315],{"class":69},[45,137564,137318],{"class":55},[45,137566,137321],{"class":337},[45,137568,137569,137571,137573,137575,137577,137579],{"class":47,"line":1346},[45,137570,169],{"class":51400},[45,137572,129566],{"class":69},[45,137574,282],{"class":55},[45,137576,356],{"class":79},[45,137578,137334],{"class":55},[45,137580,137337],{"class":337},[45,137582,137583,137585,137587,137589,137591,137593],{"class":47,"line":1352},[45,137584,169],{"class":51400},[45,137586,129566],{"class":69},[45,137588,282],{"class":55},[45,137590,137348],{"class":79},[45,137592,137351],{"class":55},[45,137594,137354],{"class":337},[45,137596,137597,137599,137601,137603,137605,137607],{"class":47,"line":1366},[45,137598,169],{"class":51400},[45,137600,129566],{"class":69},[45,137602,282],{"class":55},[45,137604,137365],{"class":79},[45,137606,137368],{"class":55},[45,137608,137371],{"class":337},[45,137610,137611,137613,137615,137617,137619,137621],{"class":47,"line":1372},[45,137612,169],{"class":51400},[45,137614,129566],{"class":69},[45,137616,282],{"class":55},[45,137618,137382],{"class":79},[45,137620,137368],{"class":55},[45,137622,137387],{"class":337},[23,137624],{"style":126508,"src":137625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[233,137627,137628],{"start":1331},[169,137629,137630],{},"使用场景1",[23,137632],{"style":126508,"src":137633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[20,137635,137636],{},"不需要再加盒子来整红色那部分了",[36,137638,137640],{"className":126652,"code":137639,"language":126654,"meta":25,"style":25},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[42,137641,137642,137647,137656,137667,137677,137681,137690,137701,137711],{"__ignoreMap":25},[45,137643,137644],{"class":47,"line":48},[45,137645,137646],{"class":337},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[45,137648,137649,137651,137654],{"class":47,"line":66},[45,137650,51711],{"class":51400},[45,137652,137653],{"class":69},"::before",[45,137655,15721],{"class":55},[45,137657,137658,137661,137663,137665],{"class":47,"line":1331},[45,137659,137660],{"class":79},"  content",[45,137662,51537],{"class":55},[45,137664,7802],{"class":62},[45,137666,1442],{"class":55},[45,137668,137669,137671,137673,137675],{"class":47,"line":1346},[45,137670,128268],{"class":79},[45,137672,51537],{"class":55},[45,137674,60969],{"class":79},[45,137676,1442],{"class":55},[45,137678,137679],{"class":47,"line":1352},[45,137680,1716],{"class":55},[45,137682,137683,137685,137688],{"class":47,"line":1366},[45,137684,51711],{"class":51400},[45,137686,137687],{"class":69},"::after",[45,137689,15721],{"class":55},[45,137691,137692,137694,137696,137699],{"class":47,"line":1372},[45,137693,137660],{"class":79},[45,137695,51537],{"class":55},[45,137697,137698],{"class":62},"\"→\"",[45,137700,1442],{"class":55},[45,137702,137703,137705,137707,137709],{"class":47,"line":1463},[45,137704,71005],{"class":79},[45,137706,51537],{"class":55},[45,137708,62170],{"class":79},[45,137710,1442],{"class":55},[45,137712,137713],{"class":47,"line":1469},[45,137714,1716],{"class":55},[23,137716],{"style":126508,"src":137717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[20,137719,137720],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[23,137722],{"style":126508,"src":137723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[20,137725,137726],{},"但是在引用时需要先转义一下",[20,137728,137729],{},"content='\\e930'",[233,137731,137732],{"start":1346},[169,137733,137734],{},"使用场景2",[20,137736,137737],{},"仿土豆效果",[20,137739,137740],{},"通过使用伪元素选择器可以减少body中盒子的数量",[36,137742,137743],{"className":126652,"code":137639,"language":126654,"meta":25,"style":25},[42,137744,137745,137749,137757,137767,137777,137781,137789,137799,137809],{"__ignoreMap":25},[45,137746,137747],{"class":47,"line":48},[45,137748,137646],{"class":337},[45,137750,137751,137753,137755],{"class":47,"line":66},[45,137752,51711],{"class":51400},[45,137754,137653],{"class":69},[45,137756,15721],{"class":55},[45,137758,137759,137761,137763,137765],{"class":47,"line":1331},[45,137760,137660],{"class":79},[45,137762,51537],{"class":55},[45,137764,7802],{"class":62},[45,137766,1442],{"class":55},[45,137768,137769,137771,137773,137775],{"class":47,"line":1346},[45,137770,128268],{"class":79},[45,137772,51537],{"class":55},[45,137774,60969],{"class":79},[45,137776,1442],{"class":55},[45,137778,137779],{"class":47,"line":1352},[45,137780,1716],{"class":55},[45,137782,137783,137785,137787],{"class":47,"line":1366},[45,137784,51711],{"class":51400},[45,137786,137687],{"class":69},[45,137788,15721],{"class":55},[45,137790,137791,137793,137795,137797],{"class":47,"line":1372},[45,137792,137660],{"class":79},[45,137794,51537],{"class":55},[45,137796,137698],{"class":62},[45,137798,1442],{"class":55},[45,137800,137801,137803,137805,137807],{"class":47,"line":1463},[45,137802,71005],{"class":79},[45,137804,51537],{"class":55},[45,137806,62170],{"class":79},[45,137808,1442],{"class":55},[45,137810,137811],{"class":47,"line":1469},[45,137812,1716],{"class":55},[23,137814],{"style":126508,"src":137815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[233,137817,137818],{"start":1352},[169,137819,137820],{},"使用场景3",[20,137822,137823],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[36,137825,137827],{"className":126652,"code":137826,"language":126654,"meta":25,"style":25},".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",[42,137828,137829,137835,137845,137849,137853,137857,137865,137875,137885,137889,137897,137907,137917],{"__ignoreMap":25},[45,137830,137831,137833],{"class":47,"line":48},[45,137832,130500],{"class":69},[45,137834,15721],{"class":55},[45,137836,137837,137839,137841,137843],{"class":47,"line":66},[45,137838,131132],{"class":79},[45,137840,51537],{"class":55},[45,137842,23885],{"class":79},[45,137844,1442],{"class":55},[45,137846,137847],{"class":47,"line":1331},[45,137848,1716],{"class":55},[45,137850,137851],{"class":47,"line":1346},[45,137852,136113],{"class":55},[45,137854,137855],{"class":47,"line":1352},[45,137856,137646],{"class":337},[45,137858,137859,137861,137863],{"class":47,"line":1366},[45,137860,51711],{"class":51400},[45,137862,137653],{"class":69},[45,137864,15721],{"class":55},[45,137866,137867,137869,137871,137873],{"class":47,"line":1372},[45,137868,137660],{"class":79},[45,137870,51537],{"class":55},[45,137872,7802],{"class":62},[45,137874,1442],{"class":55},[45,137876,137877,137879,137881,137883],{"class":47,"line":1463},[45,137878,128268],{"class":79},[45,137880,51537],{"class":55},[45,137882,60969],{"class":79},[45,137884,1442],{"class":55},[45,137886,137887],{"class":47,"line":1469},[45,137888,1716],{"class":55},[45,137890,137891,137893,137895],{"class":47,"line":1481},[45,137892,51711],{"class":51400},[45,137894,137687],{"class":69},[45,137896,15721],{"class":55},[45,137898,137899,137901,137903,137905],{"class":47,"line":1763},[45,137900,137660],{"class":79},[45,137902,51537],{"class":55},[45,137904,137698],{"class":62},[45,137906,1442],{"class":55},[45,137908,137909,137911,137913,137915],{"class":47,"line":1768},[45,137910,71005],{"class":79},[45,137912,51537],{"class":55},[45,137914,62170],{"class":79},[45,137916,1442],{"class":55},[45,137918,137919],{"class":47,"line":1774},[45,137920,1716],{"class":55},[20,137922,137923],{},"div {\nmargin: 0 auto;\n}",[36,137925,137928],{"className":137926,"code":137927,"language":5337},[5335],"\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",[42,137929,137927],{"__ignoreMap":25},[20,137931,137932],{},"如果想让多个元素都发生变化",[20,137934,137935],{},"不能如下操作：",[20,137937,137938],{},"transition: width 2s ease 0.5s;",[20,137940,137941],{},"transition: height 2s ease 0.5s;不对！！！",[20,137943,137944],{},"上方会样式冲突，导致不显示任何过渡效果",[20,137946,137947],{},"使用如下：加逗号隔开",[20,137949,137950],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[20,137952,137953],{},"transition all 2s ease;",[249,137955,137957],{"id":137956},"_1426-过渡练习","14.2.6 过渡练习",[233,137959,137960],{},[169,137961,137962],{},"进度条",[23,137964],{"style":126508,"src":137965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[36,137967,137969],{"className":126652,"code":137968,"language":126654,"meta":25,"style":25},"div {\n  transition: all 0.3s ease;\n}\n",[42,137970,137971,137977,137995],{"__ignoreMap":25},[45,137972,137973,137975],{"class":47,"line":48},[45,137974,51711],{"class":51400},[45,137976,15721],{"class":55},[45,137978,137979,137982,137984,137986,137989,137991,137993],{"class":47,"line":66},[45,137980,137981],{"class":79},"  transition",[45,137983,51537],{"class":55},[45,137985,28221],{"class":79},[45,137987,137988],{"class":79}," 0.3",[45,137990,972],{"class":51},[45,137992,78780],{"class":79},[45,137994,1442],{"class":55},[45,137996,137997],{"class":47,"line":1331},[45,137998,1716],{"class":55},[233,138000,138001],{"start":66},[169,138002,138003],{},"小米logo",[20,138005,138006],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[36,138008,138010],{"className":126652,"code":138009,"language":126654,"meta":25,"style":25},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[42,138011,138012,138017,138023,138039,138044],{"__ignoreMap":25},[45,138013,138014],{"class":47,"line":48},[45,138015,138016],{"class":337},"\u002F* CSS3 过渡 *\u002F\n",[45,138018,138019,138021],{"class":47,"line":66},[45,138020,51711],{"class":51400},[45,138022,15721],{"class":55},[45,138024,138025,138027,138029,138031,138033,138035,138037],{"class":47,"line":1331},[45,138026,137981],{"class":79},[45,138028,51537],{"class":55},[45,138030,28221],{"class":79},[45,138032,137988],{"class":79},[45,138034,972],{"class":51},[45,138036,78780],{"class":79},[45,138038,1442],{"class":55},[45,138040,138041],{"class":47,"line":1346},[45,138042,138043],{"class":337},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[45,138045,138046],{"class":47,"line":1352},[45,138047,1716],{"class":55},[20,138049,138050],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[196,138052,138053],{},"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":25,"searchDepth":66,"depth":66,"links":138055},[138056,138061],{"id":136386,"depth":66,"text":136387,"children":138057},[138058,138059,138060],{"id":136390,"depth":1331,"text":136391},{"id":136467,"depth":1331,"text":136468},{"id":136798,"depth":1331,"text":136799},{"id":137089,"depth":66,"text":137090,"children":138062},[138063,138064],{"id":137093,"depth":1331,"text":137094},{"id":137956,"depth":1331,"text":137957},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136378,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138071,"title":138072,"body":138073,"description":204,"extension":205,"meta":139817,"navigation":207,"path":139818,"seo":139819,"stem":139820,"__hash__":139821},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138074,"toc":139798},[138075,138078,138082,138085,138091,138097,138101,138103,138106,138109,138112,138115,138118,138121,138124,138128,138132,138135,138138,138141,138145,138148,138151,138156,138159,138162,138165,138169,138172,138181,138184,138187,138191,138194,138197,138202,138209,138223,138231,138238,138243,138246,138249,138252,138259,138263,138269,138275,138278,138281,138286,138292,138294,138302,138307,138310,138316,138318,138323,138328,138331,138333,138338,138341,138346,138351,138385,138389,138393,138396,138400,138403,138489,138492,138529,138532,138568,138572,138577,138590,138644,138646,138674,138676,138704,138710,138724,138726,138770,138772,138816,138819,138826,138837,138839,138866,138868,138894,138901,138917,138919,139013,139015,139109,139116,139119,139124,139130,139204,139207,139209,139245,139247,139283,139286,139293,139312,139315,139318,139320,139345,139347,139371,139374,139377,139407,139411,139414,139477,139479,139545,139547,139611,139614,139646,139648,139674,139676,139702,139705,139736,139738,139764,139766,139792,139795],[10,138076,138072],{"id":138077},"_15-品优购项目上篇-搭建与公共模块",[15,138079,138081],{"id":138080},"_151-项目规划","15.1 项目规划",[23,138083],{"style":126508,"src":138084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[20,138086,138087,138090],{},[427,138088,138089],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[20,138092,138093,138096],{},[427,138094,138095],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[15,138098,138100],{"id":138099},"_152-项目介绍","15.2 项目介绍",[20,138102,138089],{},[23,138104],{"style":126508,"src":138105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[20,138107,138108],{},"主页：",[23,138110],{"style":126508,"src":138111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[20,138113,138114],{},"列表页：",[23,138116],{"style":126508,"src":138117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[20,138119,138120],{},"注册页：",[23,138122],{"style":126508,"src":138123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[15,138125,138127],{"id":138126},"_153-项目搭建工作","15.3 项目搭建工作",[249,138129,138131],{"id":138130},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[23,138133],{"style":126508,"src":138134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[20,138136,138137],{},"经常更换的图片要放到upload文件夹中",[20,138139,138140],{},"不经常换的放到images文件夹中",[249,138142,138144],{"id":138143},"_1532-创建文件如下","15.3.2 创建文件如下",[23,138146],{"style":126508,"src":138147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[23,138149],{"style":126508,"src":138150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[20,138152,138153],{},[427,138154,138155],{},"初始化样式：",[20,138157,138158],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[20,138160,138161],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[20,138163,138164],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[249,138166,138168],{"id":138167},"_1533-项目模块化开发","15.3.3 项目模块化开发",[20,138170,138171],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[20,138173,138174,138175,138180],{},"这里最典型的应用就是 ",[427,138176,138177],{},[42,138178,138179],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[23,138182],{"style":126508,"src":138183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[20,138185,138186],{},"通过link方法来引入",[249,138188,138190],{"id":138189},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[23,138192],{"style":126508,"src":138193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[20,138195,138196],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[233,138198,138199],{},[169,138200,138201],{},"制作favicon图标",[20,138203,138204,138205,138208],{},"①把品优购图标切成 ",[42,138206,138207],{},"png"," 图片",[20,138210,138211,138212,138214,138215,138218,138219],{},"②把 ",[42,138213,138207],{}," 图片转换为 ",[42,138216,138217],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[516,138220,138221],{"href":138221,"rel":138222},"http:\u002F\u002Fwww.bitbug.net\u002F",[24012],[233,138224,138225,138228],{"start":66},[169,138226,138227],{},"favicon图标放到网站根目录下",[169,138229,138230],{},"HTML页面引入favicon",[20,138232,138233,138234,138237],{},"在html 页面里面的 ",[42,138235,138236],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[20,138239,138240],{},[42,138241,138242],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[20,138244,138245],{},"复制这行代码或者在生成这个的网站进行复制",[23,138247],{"style":126508,"src":138248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[20,138250,138251],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[20,138253,138254,138255],{},"例如:",[516,138256,138257],{"href":138257,"rel":138258},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24012],[249,138260,138262],{"id":138261},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[20,138264,138265,138268],{},[427,138266,138267],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[20,138270,138271,138274],{},[427,138272,138273],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[20,138276,138277],{},"页面必须有三个标签用来符合 SEO 优化",[23,138279],{"style":126508,"src":138280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[233,138282,138283],{},[169,138284,138285],{},"title网站标题",[20,138287,138288,138291],{},[427,138289,138290],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[20,138293,68890],{},[166,138295,138296,138299],{},[169,138297,138298],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[169,138300,138301],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[233,138303,138304],{"start":66},[169,138305,138306],{},"description网站描述",[20,138308,138309],{},"简要说明我们网站主要是做什么的",[20,138311,138312,138315],{},[427,138313,138314],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[20,138317,68890],{},[20,138319,138320],{},[42,138321,138322],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[233,138324,138325],{"start":1331},[169,138326,138327],{},"keywords关键词",[20,138329,138330],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[20,138332,68890],{},[20,138334,138335],{},[42,138336,138337],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[20,138339,138340],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[20,138342,138343],{},[427,138344,138345],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[233,138347,138348],{"start":1346},[169,138349,138350],{},"代码总结",[36,138352,138353],{"className":127399,"code":130756,"language":127401,"meta":25,"style":25},[42,138354,138355,138359,138373,138377],{"__ignoreMap":25},[45,138356,138357],{"class":47,"line":48},[45,138358,130763],{"class":337},[45,138360,138361,138363,138365,138367,138369,138371],{"class":47,"line":66},[45,138362,1187],{"class":55},[45,138364,51711],{"class":51400},[45,138366,53586],{"class":69},[45,138368,59],{"class":55},[45,138370,130776],{"class":62},[45,138372,51407],{"class":55},[45,138374,138375],{"class":47,"line":1331},[45,138376,130783],{"class":55},[45,138378,138379,138381,138383],{"class":47,"line":1346},[45,138380,51885],{"class":55},[45,138382,51711],{"class":51400},[45,138384,51407],{"class":55},[15,138386,138388],{"id":138387},"_154-项目公共部分制作","15.4 项目公共部分制作",[249,138390,138392],{"id":138391},"_1541-常用模块类命名","15.4.1 常用模块类命名",[23,138394],{"style":126508,"src":138395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[249,138397,138399],{"id":138398},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[20,138401,138402],{},"布局思路：",[166,138404,138405,138408,138411,138433,138466],{},[169,138406,138407],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[169,138409,138410],{},"里面包含版心的盒子",[169,138412,138413,138414],{},"版心盒子里面包含 1 号左侧盒子左浮动",[166,138415,138416,138424,138430],{},[169,138417,138418,138419,21649,138421,138423],{},"1 号盒子 里面包含一个",[42,138420,166],{},[42,138422,166],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[169,138425,138426,138427,138429],{},"里面的内容是水平排列，所以需要给",[42,138428,169],{},"设置浮动",[169,138431,138432],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[169,138434,138435,138436],{},"版心盒子里面包含 2 号右侧盒子右浮动",[166,138437,138438,138452,138457],{},[169,138439,138440,138441,21649,138443,138445,138446,138448,138449,138451],{},"2 号盒子 里面包含一个",[42,138442,166],{},[42,138444,166],{},"包裹",[42,138447,169],{},"，中间的",[42,138450,1198],{},"可以用样式去设置，也可以用字符 |",[169,138453,138454,138455,138429],{},"里面内容水平排列，给",[42,138456,169],{},[169,138458,138459,138460,138462,138463,138465],{},"找到里面所有偶数的 ",[42,138461,169],{}," 设置样式（偶数的 ",[42,138464,169],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[169,138467,138468,138469],{},"需要用到字体图标",[166,138470,138471,138477,138480,138483,138486],{},[169,138472,138473,138474],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[42,138475,138476],{},"arrow-icon",[169,138478,138479],{},"先要引入字体图片的资源",[169,138481,138482],{},"在样式里面利用 font-face 来进行声明",[169,138484,138485],{},"在伪元素的 content属性设置 图标的编码",[169,138487,138488],{},"给伪元素设置font-family属性",[20,138490,138491],{},"结构实例代码：",[36,138493,138495],{"className":126652,"code":138494,"language":126654,"meta":25,"style":25},"div::before {\n  content: \"\";\n  display: block;\n}\n",[42,138496,138497,138505,138515,138525],{"__ignoreMap":25},[45,138498,138499,138501,138503],{"class":47,"line":48},[45,138500,51711],{"class":51400},[45,138502,137653],{"class":69},[45,138504,15721],{"class":55},[45,138506,138507,138509,138511,138513],{"class":47,"line":66},[45,138508,137660],{"class":79},[45,138510,51537],{"class":55},[45,138512,7802],{"class":62},[45,138514,1442],{"class":55},[45,138516,138517,138519,138521,138523],{"class":47,"line":1331},[45,138518,128268],{"class":79},[45,138520,51537],{"class":55},[45,138522,60969],{"class":79},[45,138524,1442],{"class":55},[45,138526,138527],{"class":47,"line":1346},[45,138528,1716],{"class":55},[20,138530,138531],{},"样式实例代码：",[36,138533,138534],{"className":126652,"code":138494,"language":126654,"meta":25,"style":25},[42,138535,138536,138544,138554,138564],{"__ignoreMap":25},[45,138537,138538,138540,138542],{"class":47,"line":48},[45,138539,51711],{"class":51400},[45,138541,137653],{"class":69},[45,138543,15721],{"class":55},[45,138545,138546,138548,138550,138552],{"class":47,"line":66},[45,138547,137660],{"class":79},[45,138549,51537],{"class":55},[45,138551,7802],{"class":62},[45,138553,1442],{"class":55},[45,138555,138556,138558,138560,138562],{"class":47,"line":1331},[45,138557,128268],{"class":79},[45,138559,51537],{"class":55},[45,138561,60969],{"class":79},[45,138563,1442],{"class":55},[45,138565,138566],{"class":47,"line":1346},[45,138567,1716],{"class":55},[249,138569,138571],{"id":138570},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[166,138573,138574],{},[169,138575,138576],{},"header 盒子必须要有高度",[20,138578,138579,138580,138582,138583],{},"1 号盒子是 ",[42,138581,131664],{}," 标志定位，在正常开发过程中， ",[427,138584,138585,138586,138589],{},"logo的布局其实是有讲究的，需要进行 ",[42,138587,138588],{},"logoSEO","的优化 （★★★）",[166,138591,138592,138600,138608,138635],{},[169,138593,138594,138596,138597,138599],{},[42,138595,131664],{}," 里面首先放一个 ",[42,138598,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[169,138601,138602,138604,138605,138607],{},[42,138603,10],{}," 里面再放一个链接，可以返回首页的，把 ",[42,138606,131664],{}," 的背景图片给链接即可",[169,138609,138610,138611],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[166,138612,138613,138628],{},[169,138614,138615,138616,138619,138620,138623,138624,138627],{},"方法1：",[42,138617,138618],{},"text-indent"," 移到盒子外面（",[42,138621,138622],{},"text-indent: -9999px",") ，然后 ",[42,138625,138626],{},"overflow:hidden"," ，淘宝的做法",[169,138629,138630,138631,138634],{},"方法2：直接给 ",[42,138632,138633],{},"font-size: 0;"," 就看不到文字了，京东的做法",[169,138636,138637,138638,138640,138641,138643],{},"最后给链接一个 ",[42,138639,51507],{}," 属性，这样鼠标放到 ",[42,138642,131664],{}," 上就可以看到提示文字了",[20,138645,138491],{},[36,138647,138648],{"className":127399,"code":131885,"language":127401,"meta":25,"style":25},[42,138649,138650],{"__ignoreMap":25},[45,138651,138652,138654,138656,138658,138660,138662,138664,138666,138668,138670,138672],{"class":47,"line":48},[45,138653,1187],{"class":55},[45,138655,516],{"class":51400},[45,138657,61157],{"class":69},[45,138659,59],{"class":55},[45,138661,131900],{"class":62},[45,138663,131903],{"class":69},[45,138665,59],{"class":55},[45,138667,131908],{"class":62},[45,138669,131911],{"class":55},[45,138671,516],{"class":51400},[45,138673,51407],{"class":55},[20,138675,138531],{},[36,138677,138678],{"className":127399,"code":131885,"language":127401,"meta":25,"style":25},[42,138679,138680],{"__ignoreMap":25},[45,138681,138682,138684,138686,138688,138690,138692,138694,138696,138698,138700,138702],{"class":47,"line":48},[45,138683,1187],{"class":55},[45,138685,516],{"class":51400},[45,138687,61157],{"class":69},[45,138689,59],{"class":55},[45,138691,131900],{"class":62},[45,138693,131903],{"class":69},[45,138695,59],{"class":55},[45,138697,131908],{"class":62},[45,138699,131911],{"class":55},[45,138701,516],{"class":51400},[45,138703,51407],{"class":55},[20,138705,138706,138707,138709],{},"2 号盒子是 ",[42,138708,131677],{}," 搜索模块定位",[166,138711,138712,138715,138718,138721],{},[169,138713,138714],{},"search盒子利用定位的方式放在对应的位置",[169,138716,138717],{},"search盒子设置绝对定位，header盒子设置相对定位",[169,138719,138720],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[169,138722,138723],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[20,138725,138491],{},[36,138727,138728],{"className":126652,"code":131972,"language":126654,"meta":25,"style":25},[42,138729,138730,138752,138756,138766],{"__ignoreMap":25},[45,138731,138732,138734,138736,138738,138740,138742,138744,138746,138748,138750],{"class":47,"line":48},[45,138733,51711],{"class":51400},[45,138735,12584],{"class":55},[45,138737,20],{"class":51400},[45,138739,12584],{"class":55},[45,138741,10],{"class":51400},[45,138743,12584],{"class":55},[45,138745,166],{"class":51400},[45,138747,12584],{"class":55},[45,138749,169],{"class":51400},[45,138751,15721],{"class":55},[45,138753,138754],{"class":47,"line":66},[45,138755,132001],{"class":337},[45,138757,138758,138760,138762,138764],{"class":47,"line":1331},[45,138759,128268],{"class":79},[45,138761,51537],{"class":55},[45,138763,60969],{"class":79},[45,138765,1442],{"class":55},[45,138767,138768],{"class":47,"line":1346},[45,138769,1716],{"class":55},[20,138771,138531],{},[36,138773,138774],{"className":126652,"code":131972,"language":126654,"meta":25,"style":25},[42,138775,138776,138798,138802,138812],{"__ignoreMap":25},[45,138777,138778,138780,138782,138784,138786,138788,138790,138792,138794,138796],{"class":47,"line":48},[45,138779,51711],{"class":51400},[45,138781,12584],{"class":55},[45,138783,20],{"class":51400},[45,138785,12584],{"class":55},[45,138787,10],{"class":51400},[45,138789,12584],{"class":55},[45,138791,166],{"class":51400},[45,138793,12584],{"class":55},[45,138795,169],{"class":51400},[45,138797,15721],{"class":55},[45,138799,138800],{"class":47,"line":66},[45,138801,132001],{"class":337},[45,138803,138804,138806,138808,138810],{"class":47,"line":1331},[45,138805,128268],{"class":79},[45,138807,51537],{"class":55},[45,138809,60969],{"class":79},[45,138811,1442],{"class":55},[45,138813,138814],{"class":47,"line":1346},[45,138815,1716],{"class":55},[20,138817,138818],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[20,138820,138821,138822,138825],{},"3 号盒子是 ",[42,138823,138824],{},"hotwords"," 热词模块定位",[166,138827,138828,138831,138834],{},[169,138829,138830],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[169,138832,138833],{},"给里面所有的a标签设置 左右10px的外边距",[169,138835,138836],{},"给第一个a标签设置文字变红色（#c81623）",[20,138838,138491],{},[36,138840,138842],{"className":126652,"code":138841,"language":126654,"meta":25,"style":25},"div {\n  margin: 0 auto;\n}\n",[42,138843,138844,138850,138862],{"__ignoreMap":25},[45,138845,138846,138848],{"class":47,"line":48},[45,138847,51711],{"class":51400},[45,138849,15721],{"class":55},[45,138851,138852,138854,138856,138858,138860],{"class":47,"line":66},[45,138853,70570],{"class":79},[45,138855,51537],{"class":55},[45,138857,469],{"class":79},[45,138859,51656],{"class":79},[45,138861,1442],{"class":55},[45,138863,138864],{"class":47,"line":1331},[45,138865,1716],{"class":55},[20,138867,138531],{},[36,138869,138870],{"className":126652,"code":138841,"language":126654,"meta":25,"style":25},[42,138871,138872,138878,138890],{"__ignoreMap":25},[45,138873,138874,138876],{"class":47,"line":48},[45,138875,51711],{"class":51400},[45,138877,15721],{"class":55},[45,138879,138880,138882,138884,138886,138888],{"class":47,"line":66},[45,138881,70570],{"class":79},[45,138883,51537],{"class":55},[45,138885,469],{"class":79},[45,138887,51656],{"class":79},[45,138889,1442],{"class":55},[45,138891,138892],{"class":47,"line":1331},[45,138893,1716],{"class":55},[20,138895,138896,138897,138900],{},"4 号盒子是 ",[42,138898,138899],{},"shopcar"," 购物车模块",[166,138902,138903,138908,138911,138914],{},[169,138904,123435,138905,138907],{},[42,138906,138899],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[169,138909,138910],{},"count 统计部分用绝对定位做",[169,138912,138913],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[169,138915,138916],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[20,138918,138491],{},[36,138920,138921],{"className":126652,"code":132084,"language":126654,"meta":25,"style":25},[42,138922,138923,138927,138941,138945,138959,138963,138977,138981,138995,138999],{"__ignoreMap":25},[45,138924,138925],{"class":47,"line":48},[45,138926,132091],{"class":337},[45,138928,138929,138931,138933,138935,138937,138939],{"class":47,"line":66},[45,138930,132096],{"class":69},[45,138932,79907],{"class":55},[45,138934,129012],{"class":79},[45,138936,51537],{"class":55},[45,138938,132105],{"class":79},[45,138940,129582],{"class":55},[45,138942,138943],{"class":47,"line":1331},[45,138944,132112],{"class":337},[45,138946,138947,138949,138951,138953,138955,138957],{"class":47,"line":1346},[45,138948,132117],{"class":69},[45,138950,79907],{"class":55},[45,138952,129012],{"class":79},[45,138954,51537],{"class":55},[45,138956,54864],{"class":79},[45,138958,129582],{"class":55},[45,138960,138961],{"class":47,"line":1352},[45,138962,132132],{"class":337},[45,138964,138965,138967,138969,138971,138973,138975],{"class":47,"line":1366},[45,138966,132137],{"class":69},[45,138968,79907],{"class":55},[45,138970,129012],{"class":79},[45,138972,51537],{"class":55},[45,138974,54931],{"class":79},[45,138976,129582],{"class":55},[45,138978,138979],{"class":47,"line":1372},[45,138980,132152],{"class":337},[45,138982,138983,138985,138987,138989,138991,138993],{"class":47,"line":1463},[45,138984,132157],{"class":69},[45,138986,79907],{"class":55},[45,138988,129012],{"class":79},[45,138990,51537],{"class":55},[45,138992,86333],{"class":79},[45,138994,129582],{"class":55},[45,138996,138997],{"class":47,"line":1469},[45,138998,132172],{"class":337},[45,139000,139001,139003,139005,139007,139009,139011],{"class":47,"line":1481},[45,139002,132177],{"class":69},[45,139004,79907],{"class":55},[45,139006,129012],{"class":79},[45,139008,51537],{"class":55},[45,139010,132186],{"class":79},[45,139012,129582],{"class":55},[20,139014,138531],{},[36,139016,139017],{"className":126652,"code":132084,"language":126654,"meta":25,"style":25},[42,139018,139019,139023,139037,139041,139055,139059,139073,139077,139091,139095],{"__ignoreMap":25},[45,139020,139021],{"class":47,"line":48},[45,139022,132091],{"class":337},[45,139024,139025,139027,139029,139031,139033,139035],{"class":47,"line":66},[45,139026,132096],{"class":69},[45,139028,79907],{"class":55},[45,139030,129012],{"class":79},[45,139032,51537],{"class":55},[45,139034,132105],{"class":79},[45,139036,129582],{"class":55},[45,139038,139039],{"class":47,"line":1331},[45,139040,132112],{"class":337},[45,139042,139043,139045,139047,139049,139051,139053],{"class":47,"line":1346},[45,139044,132117],{"class":69},[45,139046,79907],{"class":55},[45,139048,129012],{"class":79},[45,139050,51537],{"class":55},[45,139052,54864],{"class":79},[45,139054,129582],{"class":55},[45,139056,139057],{"class":47,"line":1352},[45,139058,132132],{"class":337},[45,139060,139061,139063,139065,139067,139069,139071],{"class":47,"line":1366},[45,139062,132137],{"class":69},[45,139064,79907],{"class":55},[45,139066,129012],{"class":79},[45,139068,51537],{"class":55},[45,139070,54931],{"class":79},[45,139072,129582],{"class":55},[45,139074,139075],{"class":47,"line":1372},[45,139076,132152],{"class":337},[45,139078,139079,139081,139083,139085,139087,139089],{"class":47,"line":1463},[45,139080,132157],{"class":69},[45,139082,79907],{"class":55},[45,139084,129012],{"class":79},[45,139086,51537],{"class":55},[45,139088,86333],{"class":79},[45,139090,129582],{"class":55},[45,139092,139093],{"class":47,"line":1469},[45,139094,132172],{"class":337},[45,139096,139097,139099,139101,139103,139105,139107],{"class":47,"line":1481},[45,139098,132177],{"class":69},[45,139100,79907],{"class":55},[45,139102,129012],{"class":79},[45,139104,51537],{"class":55},[45,139106,132186],{"class":79},[45,139108,129582],{"class":55},[249,139110,139112,139113,139115],{"id":139111},"_1544-nav导航模块制作","15.4.4 ",[42,139114,53813],{},"导航模块制作",[23,139117],{"style":126508,"src":139118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[20,139120,139121,139123],{},[42,139122,53813],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[20,139125,139126,139127],{},"1 号盒子左侧浮动，",[42,139128,139129],{},"dropdown",[166,139131,139132,139142,139150,139156,139164,139174,139182,139193],{},[169,139133,139134,139135,101118,139138,139141],{},"1号盒子有讲究，根据相关性 里面包含 ",[42,139136,139137],{},".dt",[42,139139,139140],{},".dd"," 两个盒子",[169,139143,139144,139146,139147,139149],{},[42,139145,139137],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[42,139148,139140],{}," 挤到下面去了",[169,139151,139152,139153,139155],{},"给 ",[42,139154,139140],{}," 盒子设置宽度 和 高度，以及背景颜色",[169,139157,139152,139158,139160,139161,120337],{},[42,139159,139140],{}," 盒子里面定义 无序列表 （",[42,139162,139163],{},"ul > li > a",[169,139165,139166,139167,139169,139170,139173],{},"每个 ",[42,139168,169],{}," 都有一个高度（",[42,139171,139172],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[169,139175,139152,139176,139178,139179,120337],{},[42,139177,169],{}," 里面的a设置文字大小（",[42,139180,139181],{},"14px",[169,139183,139152,139184,139186,139187,139189,139190,139192],{},[42,139185,169],{}," 设置 ",[42,139188,127813],{},"，当鼠标移入的时候，让",[42,139191,169],{},"的背景变成白色，让里面的文字变成红色",[169,139194,139195,139197,139198,139200,139201,139203],{},[42,139196,169],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[42,139199,169],{},"的右侧，那么给",[42,139202,169],{},"设置相对定位",[20,139205,139206],{},"一定要注意相关性",[20,139208,138491],{},[36,139210,139211],{"className":126652,"code":138494,"language":126654,"meta":25,"style":25},[42,139212,139213,139221,139231,139241],{"__ignoreMap":25},[45,139214,139215,139217,139219],{"class":47,"line":48},[45,139216,51711],{"class":51400},[45,139218,137653],{"class":69},[45,139220,15721],{"class":55},[45,139222,139223,139225,139227,139229],{"class":47,"line":66},[45,139224,137660],{"class":79},[45,139226,51537],{"class":55},[45,139228,7802],{"class":62},[45,139230,1442],{"class":55},[45,139232,139233,139235,139237,139239],{"class":47,"line":1331},[45,139234,128268],{"class":79},[45,139236,51537],{"class":55},[45,139238,60969],{"class":79},[45,139240,1442],{"class":55},[45,139242,139243],{"class":47,"line":1346},[45,139244,1716],{"class":55},[20,139246,138531],{},[36,139248,139249],{"className":126652,"code":138494,"language":126654,"meta":25,"style":25},[42,139250,139251,139259,139269,139279],{"__ignoreMap":25},[45,139252,139253,139255,139257],{"class":47,"line":48},[45,139254,51711],{"class":51400},[45,139256,137653],{"class":69},[45,139258,15721],{"class":55},[45,139260,139261,139263,139265,139267],{"class":47,"line":66},[45,139262,137660],{"class":79},[45,139264,51537],{"class":55},[45,139266,7802],{"class":62},[45,139268,1442],{"class":55},[45,139270,139271,139273,139275,139277],{"class":47,"line":1331},[45,139272,128268],{"class":79},[45,139274,51537],{"class":55},[45,139276,60969],{"class":79},[45,139278,1442],{"class":55},[45,139280,139281],{"class":47,"line":1346},[45,139282,1716],{"class":55},[20,139284,139285],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[20,139287,139288,139289,139292],{},"2 号盒子左侧浮动，",[42,139290,139291],{},"navitems"," 导航栏组",[166,139294,139295,139300,139309],{},[169,139296,139297,139298],{},"里面结构是 ",[42,139299,139163],{},[169,139301,139302,139303,139305,139306,139308],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[42,139304,516],{},"左右的",[42,139307,30983],{},"把两侧撑开",[169,139310,139311],{},"让文字垂直居中（行高等于高度）",[23,139313],{"style":126508,"src":139314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[20,139316,139317],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[20,139319,138491],{},[36,139321,139323],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},".box {\n  float: left;\n}\n",[42,139324,139325,139331,139341],{"__ignoreMap":25},[45,139326,139327,139329],{"class":47,"line":48},[45,139328,130500],{"class":69},[45,139330,15721],{"class":55},[45,139332,139333,139335,139337,139339],{"class":47,"line":66},[45,139334,131132],{"class":79},[45,139336,51537],{"class":55},[45,139338,23885],{"class":79},[45,139340,1442],{"class":55},[45,139342,139343],{"class":47,"line":1331},[45,139344,1716],{"class":55},[20,139346,138531],{},[36,139348,139349],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},[42,139350,139351,139357,139367],{"__ignoreMap":25},[45,139352,139353,139355],{"class":47,"line":48},[45,139354,130500],{"class":69},[45,139356,15721],{"class":55},[45,139358,139359,139361,139363,139365],{"class":47,"line":66},[45,139360,131132],{"class":79},[45,139362,51537],{"class":55},[45,139364,23885],{"class":79},[45,139366,1442],{"class":55},[45,139368,139369],{"class":47,"line":1331},[45,139370,1716],{"class":55},[20,139372,139373],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[23,139375],{"style":126508,"src":139376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[36,139378,139379],{"className":126652,"code":130809,"language":126654,"meta":25,"style":25},[42,139380,139381,139387,139403],{"__ignoreMap":25},[45,139382,139383,139385],{"class":47,"line":48},[45,139384,51711],{"class":51400},[45,139386,15721],{"class":55},[45,139388,139389,139391,139393,139395,139397,139399,139401],{"class":47,"line":66},[45,139390,70996],{"class":79},[45,139392,51537],{"class":55},[45,139394,495],{"class":79},[45,139396,51592],{"class":51},[45,139398,51621],{"class":79},[45,139400,130044],{"class":79},[45,139402,1442],{"class":55},[45,139404,139405],{"class":47,"line":1331},[45,139406,1716],{"class":55},[249,139408,139410],{"id":139409},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[23,139412],{"style":126508,"src":139413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[166,139415,139416,139421,139426],{},[169,139417,139418,139420],{},[42,139419,131855],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[169,139422,139423,139425],{},[42,139424,131855],{}," 里面有一个大的版心",[169,139427,139428,139429,139432,139433],{},"版心里面包含 1 号盒子，",[42,139430,139431],{},"mod_service"," 是服务模块，mod 是模块的意思",[166,139434,139435,139440,139453,139469,139474],{},[169,139436,139152,139437,139439],{},[42,139438,139431],{}," 设置高度（80px）和下边框",[169,139441,139442,139443,139446,139447,139449,139450,139452],{},"在里面定义 ",[42,139444,139445],{},"ul > li"," ,每个",[42,139448,169],{}," 宽度是300px 高度是 50px，给每个",[42,139451,169],{},"设置35px的左内边距",[169,139454,139455,139456,139458,139459,139461,139462,139464,139465,18559,139467,120337],{},"在每个",[42,139457,169],{},"里面，放一个 ",[42,139460,23059],{},"（里面放图标），一个",[42,139463,51711],{},"（里面放",[42,139466,51711],{},[42,139468,20],{},[169,139470,139152,139471,139473],{},[42,139472,23059],{},"设置浮动，让h5与这个div左右排列",[169,139475,139476],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[20,139478,138491],{},[36,139480,139482],{"className":126652,"code":139481,"language":126654,"meta":25,"style":25},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[42,139483,139484,139490,139502,139514,139541],{"__ignoreMap":25},[45,139485,139486,139488],{"class":47,"line":48},[45,139487,134409],{"class":69},[45,139489,15721],{"class":55},[45,139491,139492,139494,139496,139498,139500],{"class":47,"line":66},[45,139493,70668],{"class":79},[45,139495,51537],{"class":55},[45,139497,977],{"class":79},[45,139499,51592],{"class":51},[45,139501,1442],{"class":55},[45,139503,139504,139506,139508,139510,139512],{"class":47,"line":1331},[45,139505,70888],{"class":79},[45,139507,51537],{"class":55},[45,139509,977],{"class":79},[45,139511,51592],{"class":51},[45,139513,1442],{"class":55},[45,139515,139516,139518,139520,139522,139524,139526,139528,139530,139533,139535,139537,139539],{"class":47,"line":1346},[45,139517,70711],{"class":79},[45,139519,51537],{"class":55},[45,139521,61826],{"class":79},[45,139523,282],{"class":55},[45,139525,134448],{"class":5366},[45,139527,13863],{"class":55},[45,139529,61836],{"class":79},[45,139531,139532],{"class":79}," -10",[45,139534,51592],{"class":51},[45,139536,134467],{"class":79},[45,139538,51592],{"class":51},[45,139540,1442],{"class":55},[45,139542,139543],{"class":47,"line":1352},[45,139544,1716],{"class":55},[20,139546,138531],{},[36,139548,139549],{"className":126652,"code":139481,"language":126654,"meta":25,"style":25},[42,139550,139551,139557,139569,139581,139607],{"__ignoreMap":25},[45,139552,139553,139555],{"class":47,"line":48},[45,139554,134409],{"class":69},[45,139556,15721],{"class":55},[45,139558,139559,139561,139563,139565,139567],{"class":47,"line":66},[45,139560,70668],{"class":79},[45,139562,51537],{"class":55},[45,139564,977],{"class":79},[45,139566,51592],{"class":51},[45,139568,1442],{"class":55},[45,139570,139571,139573,139575,139577,139579],{"class":47,"line":1331},[45,139572,70888],{"class":79},[45,139574,51537],{"class":55},[45,139576,977],{"class":79},[45,139578,51592],{"class":51},[45,139580,1442],{"class":55},[45,139582,139583,139585,139587,139589,139591,139593,139595,139597,139599,139601,139603,139605],{"class":47,"line":1346},[45,139584,70711],{"class":79},[45,139586,51537],{"class":55},[45,139588,61826],{"class":79},[45,139590,282],{"class":55},[45,139592,134448],{"class":5366},[45,139594,13863],{"class":55},[45,139596,61836],{"class":79},[45,139598,139532],{"class":79},[45,139600,51592],{"class":51},[45,139602,134467],{"class":79},[45,139604,51592],{"class":51},[45,139606,1442],{"class":55},[45,139608,139609],{"class":47,"line":1352},[45,139610,1716],{"class":55},[20,139612,139613],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[166,139615,139616,139619,139625,139631,139643],{},[169,139617,139618],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[169,139620,139621,139622,120337],{},"里面的布局利用 自定义列表来实现（",[42,139623,139624],{},"dl > dt + dd",[169,139626,139152,139627,139630],{},[42,139628,139629],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[169,139632,139152,139633,139636,139637,18559,139639,139642],{},[42,139634,139635],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[42,139638,139635],{},[42,139640,139641],{},"dd","之间有些距离",[169,139644,139645],{},"最后一个 dl 结构和样式不一样，需要单独设置",[20,139647,138491],{},[36,139649,139650],{"className":126652,"code":138841,"language":126654,"meta":25,"style":25},[42,139651,139652,139658,139670],{"__ignoreMap":25},[45,139653,139654,139656],{"class":47,"line":48},[45,139655,51711],{"class":51400},[45,139657,15721],{"class":55},[45,139659,139660,139662,139664,139666,139668],{"class":47,"line":66},[45,139661,70570],{"class":79},[45,139663,51537],{"class":55},[45,139665,469],{"class":79},[45,139667,51656],{"class":79},[45,139669,1442],{"class":55},[45,139671,139672],{"class":47,"line":1331},[45,139673,1716],{"class":55},[20,139675,138531],{},[36,139677,139678],{"className":126652,"code":138841,"language":126654,"meta":25,"style":25},[42,139679,139680,139686,139698],{"__ignoreMap":25},[45,139681,139682,139684],{"class":47,"line":48},[45,139683,51711],{"class":51400},[45,139685,15721],{"class":55},[45,139687,139688,139690,139692,139694,139696],{"class":47,"line":66},[45,139689,70570],{"class":79},[45,139691,51537],{"class":55},[45,139693,469],{"class":79},[45,139695,51656],{"class":79},[45,139697,1442],{"class":55},[45,139699,139700],{"class":47,"line":1331},[45,139701,1716],{"class":55},[20,139703,139704],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[166,139706,139707,139716,139719,139730],{},[169,139708,139709,139710,139712,139713,139715],{},"分为上下两块，上面是 ",[42,139711,131872],{}," 友情链接，下面是 ",[42,139714,131865],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[169,139717,139718],{},"把内容分别复制到相应模块中",[169,139720,139152,139721,139723,139724,139726,139727,139729],{},[42,139722,131872],{}," 设置 15px 的下外边距，给",[42,139725,131872],{}," 里面 的 ",[42,139728,516],{}," 标签设置 左右 3px 的外边距",[169,139731,139732,139733,139735],{},"给",[42,139734,131865],{}," 设置 20px 的行高",[20,139737,138491],{},[36,139739,139740],{"className":126652,"code":138841,"language":126654,"meta":25,"style":25},[42,139741,139742,139748,139760],{"__ignoreMap":25},[45,139743,139744,139746],{"class":47,"line":48},[45,139745,51711],{"class":51400},[45,139747,15721],{"class":55},[45,139749,139750,139752,139754,139756,139758],{"class":47,"line":66},[45,139751,70570],{"class":79},[45,139753,51537],{"class":55},[45,139755,469],{"class":79},[45,139757,51656],{"class":79},[45,139759,1442],{"class":55},[45,139761,139762],{"class":47,"line":1331},[45,139763,1716],{"class":55},[20,139765,138531],{},[36,139767,139768],{"className":126652,"code":138841,"language":126654,"meta":25,"style":25},[42,139769,139770,139776,139788],{"__ignoreMap":25},[45,139771,139772,139774],{"class":47,"line":48},[45,139773,51711],{"class":51400},[45,139775,15721],{"class":55},[45,139777,139778,139780,139782,139784,139786],{"class":47,"line":66},[45,139779,70570],{"class":79},[45,139781,51537],{"class":55},[45,139783,469],{"class":79},[45,139785,51656],{"class":79},[45,139787,1442],{"class":55},[45,139789,139790],{"class":47,"line":1331},[45,139791,1716],{"class":55},[20,139793,139794],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[196,139796,139797],{},"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":25,"searchDepth":66,"depth":66,"links":139799},[139800,139801,139802,139809],{"id":138080,"depth":66,"text":138081},{"id":138099,"depth":66,"text":138100},{"id":138126,"depth":66,"text":138127,"children":139803},[139804,139805,139806,139807,139808],{"id":138130,"depth":1331,"text":138131},{"id":138143,"depth":1331,"text":138144},{"id":138167,"depth":1331,"text":138168},{"id":138189,"depth":1331,"text":138190},{"id":138261,"depth":1331,"text":138262},{"id":138387,"depth":66,"text":138388,"children":139810},[139811,139812,139813,139814,139816],{"id":138391,"depth":1331,"text":138392},{"id":138398,"depth":1331,"text":138399},{"id":138570,"depth":1331,"text":138571},{"id":139111,"depth":1331,"text":139815},"15.4.4 nav导航模块制作",{"id":139409,"depth":1331,"text":139410},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138072,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139823,"title":139824,"body":139825,"description":204,"extension":205,"meta":142227,"navigation":207,"path":142228,"seo":142229,"stem":142230,"__hash__":142231},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139826,"toc":142204},[139827,139830,139834,139838,139850,139853,139856,139859,139870,139872,139896,139898,139922,139927,139930,139932,139968,139970,140006,140009,140014,140017,140020,140023,140053,140060,140063,140073,140075,140109,140112,140146,140152,140169,140171,140207,140209,140245,140250,140275,140277,140303,140305,140329,140336,140339,140403,140405,140447,140449,140489,140496,140501,140503,140533,140535,140565,140569,140572,140579,140591,140593,140619,140621,140645,140648,140650,140674,140680,140690,140692,140722,140724,140754,140761,140802,140804,140840,140842,140878,140882,140885,140888,140891,140897,140902,140905,140928,140931,140955,140958,140982,140987,140990,140993,140996,140999,141002,141076,141078,141108,141110,141140,141143,141146,141178,141182,141186,141200,141209,141212,141217,141219,141313,141315,141409,141432,141434,141458,141460,141484,141491,141494,141504,141506,141530,141535,141543,141545,141575,141580,141620,141622,141648,141650,141676,141680,141683,141688,141691,141695,141703,141710,141718,141720,141750,141752,141782,141790,141793,141796,141798,141828,141830,141860,141863,141868,141870,141894,141896,141920,141923,142008,142010,142034,142036,142060,142064,142066,142090,142092,142126,142130,142144,142147,142152,142155,142160,142163,142193,142201],[10,139828,139824],{"id":139829},"_16-品优购项目下篇-主体与页面开发",[15,139831,139833],{"id":139832},"_161-项目主体模块制作","16.1 项目主体模块制作",[249,139835,139837],{"id":139836},"_1611-首页制作","16.1.1 首页制作",[20,139839,139840,139842,139843,139845,139846,139849],{},[427,139841,102158],{}," 主体模块是 ",[427,139844,74158],{}," 里面专有的，注意需要新的样式文件 ",[427,139847,139848],{},"index.css，"," 就不要写在common.css中了",[23,139851],{"style":126508,"src":139852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[23,139854],{"style":126508,"src":139855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[20,139857,139858],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[166,139860,139861,139864,139867],{},[169,139862,139863],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[169,139865,139866],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[169,139868,139869],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[20,139871,138491],{},[36,139873,139874],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},[42,139875,139876,139882,139892],{"__ignoreMap":25},[45,139877,139878,139880],{"class":47,"line":48},[45,139879,130500],{"class":69},[45,139881,15721],{"class":55},[45,139883,139884,139886,139888,139890],{"class":47,"line":66},[45,139885,131132],{"class":79},[45,139887,51537],{"class":55},[45,139889,23885],{"class":79},[45,139891,1442],{"class":55},[45,139893,139894],{"class":47,"line":1331},[45,139895,1716],{"class":55},[20,139897,138531],{},[36,139899,139900],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},[42,139901,139902,139908,139918],{"__ignoreMap":25},[45,139903,139904,139906],{"class":47,"line":48},[45,139905,130500],{"class":69},[45,139907,15721],{"class":55},[45,139909,139910,139912,139914,139916],{"class":47,"line":66},[45,139911,131132],{"class":79},[45,139913,51537],{"class":55},[45,139915,23885],{"class":79},[45,139917,1442],{"class":55},[45,139919,139920],{"class":47,"line":1331},[45,139921,1716],{"class":55},[233,139923,139924],{},[169,139925,139926],{},"左侧focus模块制作",[23,139928],{"style":126508,"src":139929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[20,139931,138491],{},[36,139933,139934],{"className":126652,"code":127975,"language":126654,"meta":25,"style":25},[42,139935,139936,139944,139954,139964],{"__ignoreMap":25},[45,139937,139938,139940,139942],{"class":47,"line":48},[45,139939,53921],{"class":51400},[45,139941,62000],{"class":69},[45,139943,15721],{"class":55},[45,139945,139946,139948,139950,139952],{"class":47,"line":66},[45,139947,127990],{"class":79},[45,139949,51537],{"class":55},[45,139951,54989],{"class":79},[45,139953,1442],{"class":55},[45,139955,139956,139958,139960,139962],{"class":47,"line":1331},[45,139957,70898],{"class":79},[45,139959,51537],{"class":55},[45,139961,54837],{"class":79},[45,139963,1442],{"class":55},[45,139965,139966],{"class":47,"line":1346},[45,139967,1716],{"class":55},[20,139969,138531],{},[36,139971,139972],{"className":126652,"code":127975,"language":126654,"meta":25,"style":25},[42,139973,139974,139982,139992,140002],{"__ignoreMap":25},[45,139975,139976,139978,139980],{"class":47,"line":48},[45,139977,53921],{"class":51400},[45,139979,62000],{"class":69},[45,139981,15721],{"class":55},[45,139983,139984,139986,139988,139990],{"class":47,"line":66},[45,139985,127990],{"class":79},[45,139987,51537],{"class":55},[45,139989,54989],{"class":79},[45,139991,1442],{"class":55},[45,139993,139994,139996,139998,140000],{"class":47,"line":1331},[45,139995,70898],{"class":79},[45,139997,51537],{"class":55},[45,139999,54837],{"class":79},[45,140001,1442],{"class":55},[45,140003,140004],{"class":47,"line":1346},[45,140005,1716],{"class":55},[20,140007,140008],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[233,140010,140011],{"start":66},[169,140012,140013],{},"右侧newsflash模块制作",[23,140015],{"style":126508,"src":140016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[20,140018,140019],{},"右侧的模块 分为上中下三个盒子",[20,140021,140022],{},"结构代码：",[36,140024,140025],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,140026,140027],{"__ignoreMap":25},[45,140028,140029,140031,140033,140035,140037,140039,140041,140043,140045,140047,140049,140051],{"class":47,"line":48},[45,140030,1187],{"class":55},[45,140032,23],{"class":51400},[45,140034,55339],{"class":69},[45,140036,59],{"class":55},[45,140038,134169],{"class":62},[45,140040,55347],{"class":69},[45,140042,59],{"class":55},[45,140044,134176],{"class":62},[45,140046,134179],{"class":69},[45,140048,59],{"class":55},[45,140050,134184],{"class":62},[45,140052,51407],{"class":55},[20,140054,140055,140056,140059],{},"1 号盒子为 ",[42,140057,140058],{},"news"," 新闻模块 高度为 165px",[23,140061],{"style":126508,"src":140062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[20,140064,140065,140066,140069,140070],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[42,140067,140068],{},"news-hd","，下面是 ",[42,140071,140072],{},"news-bd",[20,140074,140022],{},[36,140076,140077],{"className":127399,"code":130756,"language":127401,"meta":25,"style":25},[42,140078,140079,140083,140097,140101],{"__ignoreMap":25},[45,140080,140081],{"class":47,"line":48},[45,140082,130763],{"class":337},[45,140084,140085,140087,140089,140091,140093,140095],{"class":47,"line":66},[45,140086,1187],{"class":55},[45,140088,51711],{"class":51400},[45,140090,53586],{"class":69},[45,140092,59],{"class":55},[45,140094,130776],{"class":62},[45,140096,51407],{"class":55},[45,140098,140099],{"class":47,"line":1331},[45,140100,130783],{"class":55},[45,140102,140103,140105,140107],{"class":47,"line":1346},[45,140104,51885],{"class":55},[45,140106,51711],{"class":51400},[45,140108,51407],{"class":55},[20,140110,140111],{},"样式代码：",[36,140113,140114],{"className":127399,"code":130756,"language":127401,"meta":25,"style":25},[42,140115,140116,140120,140134,140138],{"__ignoreMap":25},[45,140117,140118],{"class":47,"line":48},[45,140119,130763],{"class":337},[45,140121,140122,140124,140126,140128,140130,140132],{"class":47,"line":66},[45,140123,1187],{"class":55},[45,140125,51711],{"class":51400},[45,140127,53586],{"class":69},[45,140129,59],{"class":55},[45,140131,130776],{"class":62},[45,140133,51407],{"class":55},[45,140135,140136],{"class":47,"line":1331},[45,140137,130783],{"class":55},[45,140139,140140,140142,140144],{"class":47,"line":1346},[45,140141,51885],{"class":55},[45,140143,51711],{"class":51400},[45,140145,51407],{"class":55},[20,140147,140148,140149,140151],{},"上面是",[42,140150,140068],{},"，设置高度是 33px，设置下边框",[166,140153,140154,140160],{},[169,140155,140156,140157,140159],{},"里面放一个",[42,140158,23059],{}," 标题",[169,140161,140162,140163,140165,140166,140168],{},"放一个a",[42,140164,102793],{},"，内容是 更多，然后让 ",[42,140167,516],{}," 进行右浮动，三角用伪元素设置字体图标就好",[20,140170,140022],{},[36,140172,140173],{"className":126652,"code":138494,"language":126654,"meta":25,"style":25},[42,140174,140175,140183,140193,140203],{"__ignoreMap":25},[45,140176,140177,140179,140181],{"class":47,"line":48},[45,140178,51711],{"class":51400},[45,140180,137653],{"class":69},[45,140182,15721],{"class":55},[45,140184,140185,140187,140189,140191],{"class":47,"line":66},[45,140186,137660],{"class":79},[45,140188,51537],{"class":55},[45,140190,7802],{"class":62},[45,140192,1442],{"class":55},[45,140194,140195,140197,140199,140201],{"class":47,"line":1331},[45,140196,128268],{"class":79},[45,140198,51537],{"class":55},[45,140200,60969],{"class":79},[45,140202,1442],{"class":55},[45,140204,140205],{"class":47,"line":1346},[45,140206,1716],{"class":55},[20,140208,140111],{},[36,140210,140211],{"className":126652,"code":138494,"language":126654,"meta":25,"style":25},[42,140212,140213,140221,140231,140241],{"__ignoreMap":25},[45,140214,140215,140217,140219],{"class":47,"line":48},[45,140216,51711],{"class":51400},[45,140218,137653],{"class":69},[45,140220,15721],{"class":55},[45,140222,140223,140225,140227,140229],{"class":47,"line":66},[45,140224,137660],{"class":79},[45,140226,51537],{"class":55},[45,140228,7802],{"class":62},[45,140230,1442],{"class":55},[45,140232,140233,140235,140237,140239],{"class":47,"line":1331},[45,140234,128268],{"class":79},[45,140236,51537],{"class":55},[45,140238,60969],{"class":79},[45,140240,1442],{"class":55},[45,140242,140243],{"class":47,"line":1346},[45,140244,1716],{"class":55},[20,140246,140247,140248],{},"下面是",[42,140249,140072],{},[166,140251,140252,140260],{},[169,140253,140254,140255,101118,140257,140259],{},"里面包含 ",[42,140256,166],{},[42,140258,169],{}," 还有链接",[169,140261,139732,140262,140264,140265,140267,140268,140271,140272],{},[42,140263,169],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[42,140266,131318],{}," 2.设置 ",[42,140269,140270],{},"white-space: nowrap;"," 3. 设置 ",[42,140273,140274],{},"text-overflow: ellipsis;",[20,140276,140022],{},[36,140278,140280],{"className":126652,"code":140279,"language":126654,"meta":25,"style":25},"div {\n  overflow: hidden;\n}\n",[42,140281,140282,140288,140299],{"__ignoreMap":25},[45,140283,140284,140286],{"class":47,"line":48},[45,140285,51711],{"class":51400},[45,140287,15721],{"class":55},[45,140289,140290,140293,140295,140297],{"class":47,"line":66},[45,140291,140292],{"class":79},"  overflow",[45,140294,51537],{"class":55},[45,140296,61814],{"class":79},[45,140298,1442],{"class":55},[45,140300,140301],{"class":47,"line":1331},[45,140302,1716],{"class":55},[20,140304,140111],{},[36,140306,140307],{"className":126652,"code":140279,"language":126654,"meta":25,"style":25},[42,140308,140309,140315,140325],{"__ignoreMap":25},[45,140310,140311,140313],{"class":47,"line":48},[45,140312,51711],{"class":51400},[45,140314,15721],{"class":55},[45,140316,140317,140319,140321,140323],{"class":47,"line":66},[45,140318,140292],{"class":79},[45,140320,51537],{"class":55},[45,140322,61814],{"class":79},[45,140324,1442],{"class":55},[45,140326,140327],{"class":47,"line":1331},[45,140328,1716],{"class":55},[20,140330,140331,140332,140335],{},"2 号盒子为 ",[42,140333,140334],{},"lifeservice"," 生活服务模块 高度为 209px",[23,140337],{"style":126508,"src":140338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[166,140340,140341,140344,140354,140378,140389],{},[169,140342,140343],{},"设置边框（左右下边框）",[169,140345,140346,140347,140350,140351,140353],{},"里面的内容 是 ",[42,140348,140349],{},"ul > 12*li","，给",[42,140352,169],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[169,140355,140356,140357],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[166,140358,140359,140364,140373],{},[169,140360,140361,140363],{},[42,140362,140334],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[169,140365,140366,140367,140369,140370,140372],{},"可以让 ",[42,140368,140334],{}," 里面的 ",[42,140371,166],{}," 宽度为 252，就可以装的下 4 个 小 li",[169,140374,140375,140377],{},[42,140376,140334],{}," 盒子 overflow 隐藏多余的部分就可以了",[169,140379,116567,140380,140382,140383,140385,140386,140388],{},[42,140381,169],{}," 里面放一个 ",[42,140384,718],{},"（里面放图标），下面的文本用 ",[42,140387,20],{}," 标签包裹",[169,140390,139152,140391,140393,140394,140396,140397,139186,140399,140402],{},[42,140392,718],{}," 设置 24px宽和28px的高（注意 ",[42,140395,718],{}," 是行内元素， 转成行内块），给 ",[42,140398,169],{},[42,140400,140401],{},"text-align:center"," 让里面内容居中显示",[20,140404,140022],{},[36,140406,140408],{"className":126652,"code":140407,"language":126654,"meta":25,"style":25},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[42,140409,140410,140428,140433,140443],{"__ignoreMap":25},[45,140411,140412,140414,140416,140418,140420,140422,140424,140426],{"class":47,"line":48},[45,140413,45],{"class":51400},[45,140415,12584],{"class":55},[45,140417,516],{"class":51400},[45,140419,12584],{"class":55},[45,140421,23702],{"class":51400},[45,140423,12584],{"class":55},[45,140425,427],{"class":51400},[45,140427,15721],{"class":55},[45,140429,140430],{"class":47,"line":66},[45,140431,140432],{"class":337},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[45,140434,140435,140437,140439,140441],{"class":47,"line":1331},[45,140436,128268],{"class":79},[45,140438,51537],{"class":55},[45,140440,128330],{"class":79},[45,140442,1442],{"class":55},[45,140444,140445],{"class":47,"line":1346},[45,140446,1716],{"class":55},[20,140448,140111],{},[36,140450,140451],{"className":126652,"code":140407,"language":126654,"meta":25,"style":25},[42,140452,140453,140471,140475,140485],{"__ignoreMap":25},[45,140454,140455,140457,140459,140461,140463,140465,140467,140469],{"class":47,"line":48},[45,140456,45],{"class":51400},[45,140458,12584],{"class":55},[45,140460,516],{"class":51400},[45,140462,12584],{"class":55},[45,140464,23702],{"class":51400},[45,140466,12584],{"class":55},[45,140468,427],{"class":51400},[45,140470,15721],{"class":55},[45,140472,140473],{"class":47,"line":66},[45,140474,140432],{"class":337},[45,140476,140477,140479,140481,140483],{"class":47,"line":1331},[45,140478,128268],{"class":79},[45,140480,51537],{"class":55},[45,140482,128330],{"class":79},[45,140484,1442],{"class":55},[45,140486,140487],{"class":47,"line":1346},[45,140488,1716],{"class":55},[20,140490,140491,140492,140495],{},"3 号盒子为 ",[42,140493,140494],{},"bargain"," 特价商品",[166,140497,140498],{},[169,140499,140500],{},"这个比较简单，直接插入一张图片即可",[20,140502,140022],{},[36,140504,140505],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,140506,140507],{"__ignoreMap":25},[45,140508,140509,140511,140513,140515,140517,140519,140521,140523,140525,140527,140529,140531],{"class":47,"line":48},[45,140510,1187],{"class":55},[45,140512,23],{"class":51400},[45,140514,55339],{"class":69},[45,140516,59],{"class":55},[45,140518,134169],{"class":62},[45,140520,55347],{"class":69},[45,140522,59],{"class":55},[45,140524,134176],{"class":62},[45,140526,134179],{"class":69},[45,140528,59],{"class":55},[45,140530,134184],{"class":62},[45,140532,51407],{"class":55},[20,140534,140111],{},[36,140536,140537],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,140538,140539],{"__ignoreMap":25},[45,140540,140541,140543,140545,140547,140549,140551,140553,140555,140557,140559,140561,140563],{"class":47,"line":48},[45,140542,1187],{"class":55},[45,140544,23],{"class":51400},[45,140546,55339],{"class":69},[45,140548,59],{"class":55},[45,140550,134169],{"class":62},[45,140552,55347],{"class":69},[45,140554,59],{"class":55},[45,140556,134176],{"class":62},[45,140558,134179],{"class":69},[45,140560,59],{"class":55},[45,140562,134184],{"class":62},[45,140564,51407],{"class":55},[249,140566,140568],{"id":140567},"_1612-推荐模块制作","16.1.2 推荐模块制作",[23,140570],{"style":126508,"src":140571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[20,140573,140574,140575,140578],{},"大盒子 ",[42,140576,140577],{},"recom"," 推荐模块 recommend",[166,140580,140581],{},[169,140582,140583,140584,140586,140587,140590],{},"给这个 ",[42,140585,140577],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[42,140588,140589],{},"#ebebeb","），设置距离上边 12px",[20,140592,140022],{},[36,140594,140596],{"className":126652,"code":140595,"language":126654,"meta":25,"style":25},"div {\n  background-color: #f0f0f0;\n}\n",[42,140597,140598,140604,140615],{"__ignoreMap":25},[45,140599,140600,140602],{"class":47,"line":48},[45,140601,51711],{"class":51400},[45,140603,15721],{"class":55},[45,140605,140606,140608,140610,140613],{"class":47,"line":66},[45,140607,70978],{"class":79},[45,140609,51537],{"class":55},[45,140611,140612],{"class":79},"#f0f0f0",[45,140614,1442],{"class":55},[45,140616,140617],{"class":47,"line":1331},[45,140618,1716],{"class":55},[20,140620,140111],{},[36,140622,140623],{"className":126652,"code":140595,"language":126654,"meta":25,"style":25},[42,140624,140625,140631,140641],{"__ignoreMap":25},[45,140626,140627,140629],{"class":47,"line":48},[45,140628,51711],{"class":51400},[45,140630,15721],{"class":55},[45,140632,140633,140635,140637,140639],{"class":47,"line":66},[45,140634,70978],{"class":79},[45,140636,51537],{"class":55},[45,140638,140612],{"class":79},[45,140640,1442],{"class":55},[45,140642,140643],{"class":47,"line":1331},[45,140644,1716],{"class":55},[20,140646,140647],{},"里面包含 2 个盒子， 浮动即可",[20,140649,140022],{},[36,140651,140652],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},[42,140653,140654,140660,140670],{"__ignoreMap":25},[45,140655,140656,140658],{"class":47,"line":48},[45,140657,130500],{"class":69},[45,140659,15721],{"class":55},[45,140661,140662,140664,140666,140668],{"class":47,"line":66},[45,140663,131132],{"class":79},[45,140665,51537],{"class":55},[45,140667,23885],{"class":79},[45,140669,1442],{"class":55},[45,140671,140672],{"class":47,"line":1331},[45,140673,1716],{"class":55},[20,140675,140676,140677],{},"1 号盒子 ",[42,140678,140679],{},"recom_hd",[166,140681,140682,140685],{},[169,140683,140684],{},"设置宽度205px，高度163px",[169,140686,140156,140687,140689],{},[42,140688,23],{},"标签，插入图片即可",[20,140691,140022],{},[36,140693,140694],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,140695,140696],{"__ignoreMap":25},[45,140697,140698,140700,140702,140704,140706,140708,140710,140712,140714,140716,140718,140720],{"class":47,"line":48},[45,140699,1187],{"class":55},[45,140701,23],{"class":51400},[45,140703,55339],{"class":69},[45,140705,59],{"class":55},[45,140707,134169],{"class":62},[45,140709,55347],{"class":69},[45,140711,59],{"class":55},[45,140713,134176],{"class":62},[45,140715,134179],{"class":69},[45,140717,59],{"class":55},[45,140719,134184],{"class":62},[45,140721,51407],{"class":55},[20,140723,140111],{},[36,140725,140726],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,140727,140728],{"__ignoreMap":25},[45,140729,140730,140732,140734,140736,140738,140740,140742,140744,140746,140748,140750,140752],{"class":47,"line":48},[45,140731,1187],{"class":55},[45,140733,23],{"class":51400},[45,140735,55339],{"class":69},[45,140737,59],{"class":55},[45,140739,134169],{"class":62},[45,140741,55347],{"class":69},[45,140743,59],{"class":55},[45,140745,134176],{"class":62},[45,140747,134179],{"class":69},[45,140749,59],{"class":55},[45,140751,134184],{"class":62},[45,140753,51407],{"class":55},[20,140755,140756,140757,140760],{},"2 号盒子 ",[42,140758,140759],{},"recom_bd"," ，注意里面的小竖线",[166,140762,140763,140774,140777,140782,140787],{},[169,140764,140765,140766,140768,140769,140771,140772],{},"右侧结构里面放 ",[42,140767,166],{}," 包含 4个 ",[42,140770,169],{},"，每个li里面包含一个",[42,140773,23],{},[169,140775,140776],{},"直接利用切片工具把里面的内容当成一张图片",[169,140778,139152,140779,140781],{},[42,140780,169],{}," 设置浮动",[169,140783,139152,140784,140786],{},[42,140785,23],{}," 设置宽高，宽度 248px，高度 163px",[169,140788,140789,140790,140350,140793,140795,140796,140798,140799],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[42,140791,140792],{},"top 10px",[42,140794,169],{},"设置相对定位（注意，最后一个",[42,140797,169],{},"不用设置伪元素），可以利用 ",[42,140800,140801],{},"nth-child(-n+3){...}",[20,140803,140022],{},[36,140805,140806],{"className":126652,"code":138494,"language":126654,"meta":25,"style":25},[42,140807,140808,140816,140826,140836],{"__ignoreMap":25},[45,140809,140810,140812,140814],{"class":47,"line":48},[45,140811,51711],{"class":51400},[45,140813,137653],{"class":69},[45,140815,15721],{"class":55},[45,140817,140818,140820,140822,140824],{"class":47,"line":66},[45,140819,137660],{"class":79},[45,140821,51537],{"class":55},[45,140823,7802],{"class":62},[45,140825,1442],{"class":55},[45,140827,140828,140830,140832,140834],{"class":47,"line":1331},[45,140829,128268],{"class":79},[45,140831,51537],{"class":55},[45,140833,60969],{"class":79},[45,140835,1442],{"class":55},[45,140837,140838],{"class":47,"line":1346},[45,140839,1716],{"class":55},[20,140841,140111],{},[36,140843,140844],{"className":126652,"code":138494,"language":126654,"meta":25,"style":25},[42,140845,140846,140854,140864,140874],{"__ignoreMap":25},[45,140847,140848,140850,140852],{"class":47,"line":48},[45,140849,51711],{"class":51400},[45,140851,137653],{"class":69},[45,140853,15721],{"class":55},[45,140855,140856,140858,140860,140862],{"class":47,"line":66},[45,140857,137660],{"class":79},[45,140859,51537],{"class":55},[45,140861,7802],{"class":62},[45,140863,1442],{"class":55},[45,140865,140866,140868,140870,140872],{"class":47,"line":1331},[45,140867,128268],{"class":79},[45,140869,51537],{"class":55},[45,140871,60969],{"class":79},[45,140873,1442],{"class":55},[45,140875,140876],{"class":47,"line":1346},[45,140877,1716],{"class":55},[249,140879,140881],{"id":140880},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[23,140883],{"style":126508,"src":140884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[20,140886,140887],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[20,140889,140890],{},"第一楼是家用电器模块： 里面包含两个盒子",[20,140892,140893,140896],{},[42,140894,140895],{},"box_hd"," 制作",[20,140898,140676,140899,140901],{},[42,140900,140895],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[23,140903],{"style":126508,"src":140904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[166,140906,140907,140912,140917,140920],{},[169,140908,140909,140911],{},[42,140910,140895],{}," 给 30px 的高度，2个像素的下边框",[169,140913,140914,140915],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[42,140916,139163],{},[169,140918,140919],{},"左侧盒左浮动，右侧盒子右浮动",[169,140921,140922,140924,140925,140927],{},[42,140923,516],{},"标签之间的距离用左右的",[42,140926,30983],{},"撑开即可",[20,140929,140930],{},"结构代码",[36,140932,140933],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},[42,140934,140935,140941,140951],{"__ignoreMap":25},[45,140936,140937,140939],{"class":47,"line":48},[45,140938,130500],{"class":69},[45,140940,15721],{"class":55},[45,140942,140943,140945,140947,140949],{"class":47,"line":66},[45,140944,131132],{"class":79},[45,140946,51537],{"class":55},[45,140948,23885],{"class":79},[45,140950,1442],{"class":55},[45,140952,140953],{"class":47,"line":1331},[45,140954,1716],{"class":55},[20,140956,140957],{},"样式代码",[36,140959,140960],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},[42,140961,140962,140968,140978],{"__ignoreMap":25},[45,140963,140964,140966],{"class":47,"line":48},[45,140965,130500],{"class":69},[45,140967,15721],{"class":55},[45,140969,140970,140972,140974,140976],{"class":47,"line":66},[45,140971,131132],{"class":79},[45,140973,51537],{"class":55},[45,140975,23885],{"class":79},[45,140977,1442],{"class":55},[45,140979,140980],{"class":47,"line":1331},[45,140981,1716],{"class":55},[20,140983,140984,140896],{},[42,140985,140986],{},"box_bd",[20,140988,140989],{},"2 号盒子 box_bd，不要给高度",[23,140991],{"style":126508,"src":140992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[20,140994,140995],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[20,140997,140998],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[20,141000,141001],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[166,141003,141004,141016,141032],{},[169,141005,141006,141008,141009,141012,141013,141015],{},[42,141007,140986],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[42,141010,141011],{},"tab_content","，在",[42,141014,141011],{}," 里面包裹tab选项卡对应的内容",[169,141017,141018,141019,141022,141023,141025,141026,141028,141029,141031],{},"内容被一个大盒子包裹（",[42,141020,141021],{},"tab_list_item","），里面是 ",[42,141024,166],{}," 包裹 5个 ",[42,141027,169],{},"，每个",[42,141030,169],{},"设置对应的宽度，然后设置浮动",[169,141033,141034,141035,141037,141038,141040,141041],{},"而这5个",[42,141036,169],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[42,141039,169],{},"设置",[166,141042,141043,141061,141064],{},[169,141044,141045,141046,141048,141049,141051,141052,141054,141055,141057,141058,141060],{},"第一个小 ",[42,141047,169],{}," 分为上下结构，上面是 ",[42,141050,166],{}," 包裹 ",[42,141053,169],{}," ，",[42,141056,169],{},"里面包裹 ",[42,141059,516],{},"，下面插入一张图片",[169,141062,141063],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[169,141065,141066,141067,141069,141070,141072,141073,141075],{},"后面的小 ",[42,141068,169],{}," 里面先放一个",[42,141071,516],{},"标签，然后在",[42,141074,516],{},"标签里面插入图片即可",[20,141077,140930],{},[36,141079,141080],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,141081,141082],{"__ignoreMap":25},[45,141083,141084,141086,141088,141090,141092,141094,141096,141098,141100,141102,141104,141106],{"class":47,"line":48},[45,141085,1187],{"class":55},[45,141087,23],{"class":51400},[45,141089,55339],{"class":69},[45,141091,59],{"class":55},[45,141093,134169],{"class":62},[45,141095,55347],{"class":69},[45,141097,59],{"class":55},[45,141099,134176],{"class":62},[45,141101,134179],{"class":69},[45,141103,59],{"class":55},[45,141105,134184],{"class":62},[45,141107,51407],{"class":55},[20,141109,140957],{},[36,141111,141112],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,141113,141114],{"__ignoreMap":25},[45,141115,141116,141118,141120,141122,141124,141126,141128,141130,141132,141134,141136,141138],{"class":47,"line":48},[45,141117,1187],{"class":55},[45,141119,23],{"class":51400},[45,141121,55339],{"class":69},[45,141123,59],{"class":55},[45,141125,134169],{"class":62},[45,141127,55347],{"class":69},[45,141129,59],{"class":55},[45,141131,134176],{"class":62},[45,141133,134179],{"class":69},[45,141135,59],{"class":55},[45,141137,134184],{"class":62},[45,141139,51407],{"class":55},[20,141141,141142],{},"tab栏切换需求！！！！！！介绍：",[23,141144],{"style":126508,"src":141145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[166,141147,141148,141156,141162,141165],{},[169,141149,141150,141153,141154],{},[42,141151,141152],{},"tab","栏的布局是 ",[42,141155,139163],{},[169,141157,141158,141159,141161],{},"有多少个",[42,141160,141152],{},"选项卡，那么对应就有多少个内容",[169,141163,141164],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[169,141166,141167,141168,141171,141172,141174,141175,141177],{},"等后面我们学习了",[42,141169,141170],{},"js","之后，我们就会配合",[42,141173,141170],{},"来实现，",[42,141176,141152],{},"栏的切换",[15,141179,141181],{"id":141180},"_162-列表制作","16.2 列表制作",[249,141183,141185],{"id":141184},"_1621-准备工作","16.2.1 准备工作",[166,141187,141188,141191,141194,141197],{},[169,141189,141190],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[169,141192,141193],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[169,141195,141196],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[169,141198,141199],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[249,141201,141203,141204,101118,141206,141208],{"id":141202},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[42,141205,131657],{},[42,141207,53813],{}," 修改",[23,141210],{"style":126508,"src":141211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[166,141213,141214],{},[169,141215,141216],{},"秒杀盒子 sk（ second kill ） 定位即可",[20,141218,140022],{},[36,141220,141221],{"className":126652,"code":132084,"language":126654,"meta":25,"style":25},[42,141222,141223,141227,141241,141245,141259,141263,141277,141281,141295,141299],{"__ignoreMap":25},[45,141224,141225],{"class":47,"line":48},[45,141226,132091],{"class":337},[45,141228,141229,141231,141233,141235,141237,141239],{"class":47,"line":66},[45,141230,132096],{"class":69},[45,141232,79907],{"class":55},[45,141234,129012],{"class":79},[45,141236,51537],{"class":55},[45,141238,132105],{"class":79},[45,141240,129582],{"class":55},[45,141242,141243],{"class":47,"line":1331},[45,141244,132112],{"class":337},[45,141246,141247,141249,141251,141253,141255,141257],{"class":47,"line":1346},[45,141248,132117],{"class":69},[45,141250,79907],{"class":55},[45,141252,129012],{"class":79},[45,141254,51537],{"class":55},[45,141256,54864],{"class":79},[45,141258,129582],{"class":55},[45,141260,141261],{"class":47,"line":1352},[45,141262,132132],{"class":337},[45,141264,141265,141267,141269,141271,141273,141275],{"class":47,"line":1366},[45,141266,132137],{"class":69},[45,141268,79907],{"class":55},[45,141270,129012],{"class":79},[45,141272,51537],{"class":55},[45,141274,54931],{"class":79},[45,141276,129582],{"class":55},[45,141278,141279],{"class":47,"line":1372},[45,141280,132152],{"class":337},[45,141282,141283,141285,141287,141289,141291,141293],{"class":47,"line":1463},[45,141284,132157],{"class":69},[45,141286,79907],{"class":55},[45,141288,129012],{"class":79},[45,141290,51537],{"class":55},[45,141292,86333],{"class":79},[45,141294,129582],{"class":55},[45,141296,141297],{"class":47,"line":1469},[45,141298,132172],{"class":337},[45,141300,141301,141303,141305,141307,141309,141311],{"class":47,"line":1481},[45,141302,132177],{"class":69},[45,141304,79907],{"class":55},[45,141306,129012],{"class":79},[45,141308,51537],{"class":55},[45,141310,132186],{"class":79},[45,141312,129582],{"class":55},[20,141314,140111],{},[36,141316,141317],{"className":126652,"code":132084,"language":126654,"meta":25,"style":25},[42,141318,141319,141323,141337,141341,141355,141359,141373,141377,141391,141395],{"__ignoreMap":25},[45,141320,141321],{"class":47,"line":48},[45,141322,132091],{"class":337},[45,141324,141325,141327,141329,141331,141333,141335],{"class":47,"line":66},[45,141326,132096],{"class":69},[45,141328,79907],{"class":55},[45,141330,129012],{"class":79},[45,141332,51537],{"class":55},[45,141334,132105],{"class":79},[45,141336,129582],{"class":55},[45,141338,141339],{"class":47,"line":1331},[45,141340,132112],{"class":337},[45,141342,141343,141345,141347,141349,141351,141353],{"class":47,"line":1346},[45,141344,132117],{"class":69},[45,141346,79907],{"class":55},[45,141348,129012],{"class":79},[45,141350,51537],{"class":55},[45,141352,54864],{"class":79},[45,141354,129582],{"class":55},[45,141356,141357],{"class":47,"line":1352},[45,141358,132132],{"class":337},[45,141360,141361,141363,141365,141367,141369,141371],{"class":47,"line":1366},[45,141362,132137],{"class":69},[45,141364,79907],{"class":55},[45,141366,129012],{"class":79},[45,141368,51537],{"class":55},[45,141370,54931],{"class":79},[45,141372,129582],{"class":55},[45,141374,141375],{"class":47,"line":1372},[45,141376,132152],{"class":337},[45,141378,141379,141381,141383,141385,141387,141389],{"class":47,"line":1463},[45,141380,132157],{"class":69},[45,141382,79907],{"class":55},[45,141384,129012],{"class":79},[45,141386,51537],{"class":55},[45,141388,86333],{"class":79},[45,141390,129582],{"class":55},[45,141392,141393],{"class":47,"line":1469},[45,141394,132172],{"class":337},[45,141396,141397,141399,141401,141403,141405,141407],{"class":47,"line":1481},[45,141398,132177],{"class":69},[45,141400,79907],{"class":55},[45,141402,129012],{"class":79},[45,141404,51537],{"class":55},[45,141406,132186],{"class":79},[45,141408,129582],{"class":55},[166,141410,141411,141422],{},[169,141412,141413,141414,141417,141418,101118,141420],{},"1 号盒子左侧浮动 ",[42,141415,141416],{},"sk_list"," 里面包含 ",[42,141419,166],{},[42,141421,169],{},[169,141423,141424,141425,141417,141428,101118,141430],{},"2 号盒子左侧浮动 ",[42,141426,141427],{},"sk_con",[42,141429,166],{},[42,141431,169],{},[20,141433,140022],{},[36,141435,141436],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},[42,141437,141438,141444,141454],{"__ignoreMap":25},[45,141439,141440,141442],{"class":47,"line":48},[45,141441,130500],{"class":69},[45,141443,15721],{"class":55},[45,141445,141446,141448,141450,141452],{"class":47,"line":66},[45,141447,131132],{"class":79},[45,141449,51537],{"class":55},[45,141451,23885],{"class":79},[45,141453,1442],{"class":55},[45,141455,141456],{"class":47,"line":1331},[45,141457,1716],{"class":55},[20,141459,140111],{},[36,141461,141462],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},[42,141463,141464,141470,141480],{"__ignoreMap":25},[45,141465,141466,141468],{"class":47,"line":48},[45,141467,130500],{"class":69},[45,141469,15721],{"class":55},[45,141471,141472,141474,141476,141478],{"class":47,"line":66},[45,141473,131132],{"class":79},[45,141475,51537],{"class":55},[45,141477,23885],{"class":79},[45,141479,1442],{"class":55},[45,141481,141482],{"class":47,"line":1331},[45,141483,1716],{"class":55},[249,141485,141487,141488],{"id":141486},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[42,141489,141490],{},"sk_container",[23,141492],{"style":126508,"src":141493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[166,141495,141496,141501],{},[169,141497,140676,141498,141500],{},[42,141499,141490],{}," 给宽度 1200，不要给高度",[169,141502,141503],{},"一定不要忘记清除浮动",[20,141505,140022],{},[36,141507,141508],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},[42,141509,141510,141516,141526],{"__ignoreMap":25},[45,141511,141512,141514],{"class":47,"line":48},[45,141513,130500],{"class":69},[45,141515,15721],{"class":55},[45,141517,141518,141520,141522,141524],{"class":47,"line":66},[45,141519,131132],{"class":79},[45,141521,51537],{"class":55},[45,141523,23885],{"class":79},[45,141525,1442],{"class":55},[45,141527,141528],{"class":47,"line":1331},[45,141529,1716],{"class":55},[233,141531,141532],{},[169,141533,141534],{},"sk_hd制作",[166,141536,141537],{},[169,141538,140756,141539,141542],{},[42,141540,141541],{},"sk_hd"," ，插入图片即可",[20,141544,140022],{},[36,141546,141547],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,141548,141549],{"__ignoreMap":25},[45,141550,141551,141553,141555,141557,141559,141561,141563,141565,141567,141569,141571,141573],{"class":47,"line":48},[45,141552,1187],{"class":55},[45,141554,23],{"class":51400},[45,141556,55339],{"class":69},[45,141558,59],{"class":55},[45,141560,134169],{"class":62},[45,141562,55347],{"class":69},[45,141564,59],{"class":55},[45,141566,134176],{"class":62},[45,141568,134179],{"class":69},[45,141570,59],{"class":55},[45,141572,134184],{"class":62},[45,141574,51407],{"class":55},[233,141576,141577],{"start":66},[169,141578,141579],{},"sk_bd制作",[166,141581,141582],{},[169,141583,141584,141585,141588,141589,101118,141591,141593],{},"3 号盒子 ",[42,141586,141587],{},"sk_bd"," ，里面包含很多的 ",[42,141590,166],{},[42,141592,169],{},[166,141594,141595,141604],{},[169,141596,141597,141598,141600,141601,141603],{},"当鼠标移入到 ",[42,141599,169],{}," 上面的时候显示红色的边框，在这里先给 ",[42,141602,169],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[169,141605,141606,141607,141609,141610,141612,141613,141616,141617,141619],{},"由于给每个 ",[42,141608,169],{}," 都设置了外边距，导致一行的最后一个 ",[42,141611,169],{}," 掉了下来，在这里我们利用 ",[42,141614,141615],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[42,141618,169],{},"，去掉外边距就好了",[20,141621,140022],{},[36,141623,141624],{"className":126652,"code":138841,"language":126654,"meta":25,"style":25},[42,141625,141626,141632,141644],{"__ignoreMap":25},[45,141627,141628,141630],{"class":47,"line":48},[45,141629,51711],{"class":51400},[45,141631,15721],{"class":55},[45,141633,141634,141636,141638,141640,141642],{"class":47,"line":66},[45,141635,70570],{"class":79},[45,141637,51537],{"class":55},[45,141639,469],{"class":79},[45,141641,51656],{"class":79},[45,141643,1442],{"class":55},[45,141645,141646],{"class":47,"line":1331},[45,141647,1716],{"class":55},[20,141649,140111],{},[36,141651,141652],{"className":126652,"code":138841,"language":126654,"meta":25,"style":25},[42,141653,141654,141660,141672],{"__ignoreMap":25},[45,141655,141656,141658],{"class":47,"line":48},[45,141657,51711],{"class":51400},[45,141659,15721],{"class":55},[45,141661,141662,141664,141666,141668,141670],{"class":47,"line":66},[45,141663,70570],{"class":79},[45,141665,51537],{"class":55},[45,141667,469],{"class":79},[45,141669,51656],{"class":79},[45,141671,1442],{"class":55},[45,141673,141674],{"class":47,"line":1331},[45,141675,1716],{"class":55},[15,141677,141679],{"id":141678},"_163-注册页面制作","16.3 注册页面制作",[23,141681],{"style":126508,"src":141682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[20,141684,141685,141687],{},[427,141686,9175],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[23,141689],{"style":126508,"src":141690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[249,141692,141694],{"id":141693},"_1631-准备工作","16.3.1 准备工作",[166,141696,141697,141700],{},[169,141698,141699],{},"创建register.html，引入 base.css，引入favicon图标",[169,141701,141702],{},"创建register.css ，在html页面进行引入",[249,141704,141706,141707,141709],{"id":141705},"_1632-header-头部实现","16.3.2 ",[42,141708,131657],{}," 头部实现",[166,141711,141712,141715],{},[169,141713,141714],{},"整个内容用 版心 进行包裹",[169,141716,141717],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[20,141719,140022],{},[36,141721,141722],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,141723,141724],{"__ignoreMap":25},[45,141725,141726,141728,141730,141732,141734,141736,141738,141740,141742,141744,141746,141748],{"class":47,"line":48},[45,141727,1187],{"class":55},[45,141729,23],{"class":51400},[45,141731,55339],{"class":69},[45,141733,59],{"class":55},[45,141735,134169],{"class":62},[45,141737,55347],{"class":69},[45,141739,59],{"class":55},[45,141741,134176],{"class":62},[45,141743,134179],{"class":69},[45,141745,59],{"class":55},[45,141747,134184],{"class":62},[45,141749,51407],{"class":55},[20,141751,140111],{},[36,141753,141754],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,141755,141756],{"__ignoreMap":25},[45,141757,141758,141760,141762,141764,141766,141768,141770,141772,141774,141776,141778,141780],{"class":47,"line":48},[45,141759,1187],{"class":55},[45,141761,23],{"class":51400},[45,141763,55339],{"class":69},[45,141765,59],{"class":55},[45,141767,134169],{"class":62},[45,141769,55347],{"class":69},[45,141771,59],{"class":55},[45,141773,134176],{"class":62},[45,141775,134179],{"class":69},[45,141777,59],{"class":55},[45,141779,134184],{"class":62},[45,141781,51407],{"class":55},[249,141783,141785,141786,141789],{"id":141784},"_1633-registerarea-主体模块实现","16.3.3 ",[42,141787,141788],{},"registerarea"," 主体模块实现",[23,141791],{"style":126508,"src":141792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[20,141794,141795],{},"整个大盒子 高度为 522px，设置4个边框",[20,141797,140022],{},[36,141799,141800],{"className":126652,"code":130809,"language":126654,"meta":25,"style":25},[42,141801,141802,141808,141824],{"__ignoreMap":25},[45,141803,141804,141806],{"class":47,"line":48},[45,141805,51711],{"class":51400},[45,141807,15721],{"class":55},[45,141809,141810,141812,141814,141816,141818,141820,141822],{"class":47,"line":66},[45,141811,70996],{"class":79},[45,141813,51537],{"class":55},[45,141815,495],{"class":79},[45,141817,51592],{"class":51},[45,141819,51621],{"class":79},[45,141821,130044],{"class":79},[45,141823,1442],{"class":55},[45,141825,141826],{"class":47,"line":1331},[45,141827,1716],{"class":55},[20,141829,140111],{},[36,141831,141832],{"className":126652,"code":130809,"language":126654,"meta":25,"style":25},[42,141833,141834,141840,141856],{"__ignoreMap":25},[45,141835,141836,141838],{"class":47,"line":48},[45,141837,51711],{"class":51400},[45,141839,15721],{"class":55},[45,141841,141842,141844,141846,141848,141850,141852,141854],{"class":47,"line":66},[45,141843,70996],{"class":79},[45,141845,51537],{"class":55},[45,141847,495],{"class":79},[45,141849,51592],{"class":51},[45,141851,51621],{"class":79},[45,141853,130044],{"class":79},[45,141855,1442],{"class":55},[45,141857,141858],{"class":47,"line":1331},[45,141859,1716],{"class":55},[20,141861,141862],{},"1号盒子 是一个 h3 标签，放标题",[166,141864,141865],{},[169,141866,141867],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[20,141869,140022],{},[36,141871,141872],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},[42,141873,141874,141880,141890],{"__ignoreMap":25},[45,141875,141876,141878],{"class":47,"line":48},[45,141877,130500],{"class":69},[45,141879,15721],{"class":55},[45,141881,141882,141884,141886,141888],{"class":47,"line":66},[45,141883,131132],{"class":79},[45,141885,51537],{"class":55},[45,141887,23885],{"class":79},[45,141889,1442],{"class":55},[45,141891,141892],{"class":47,"line":1331},[45,141893,1716],{"class":55},[20,141895,140111],{},[36,141897,141898],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},[42,141899,141900,141906,141916],{"__ignoreMap":25},[45,141901,141902,141904],{"class":47,"line":48},[45,141903,130500],{"class":69},[45,141905,15721],{"class":55},[45,141907,141908,141910,141912,141914],{"class":47,"line":66},[45,141909,131132],{"class":79},[45,141911,51537],{"class":55},[45,141913,23885],{"class":79},[45,141915,1442],{"class":55},[45,141917,141918],{"class":47,"line":1331},[45,141919,1716],{"class":55},[20,141921,141922],{},"2号盒子 里面放注册的内容",[166,141924,141925,141928,141937,141951,141964,141967,141970,141988,142002],{},[169,141926,141927],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[169,141929,141930,141931,141933,141934,141936],{},"里面的内容利用 ",[42,141932,166],{}," 包含 ",[42,141935,169],{}," 来实现的（不需要用表格）",[169,141938,139166,141939,141941,141942,141944,141945,141947,141948,141950],{},[42,141940,169],{}," 里面，左侧放 ",[42,141943,33708],{}," 标签， 中间放",[42,141946,53921],{}," 标签， 右侧放 ",[42,141949,45],{}," 提示信息",[169,141952,141953,141954,141956,141957,141959,141960,141963],{},"左侧 ",[42,141955,33708],{},"里面的文字都是右对齐，我们可以给",[42,141958,33708],{},"设置一个宽度（88px），然后利用",[42,141961,141962],{},"text-align"," 来设置右对齐",[169,141965,141966],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[169,141968,141969],{},"右侧 span修饰一下文字颜色",[169,141971,141972,141973],{},"提示信息的样式优化",[166,141974,141975,141978,141981],{},[169,141976,141977],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[169,141979,141980],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[169,141982,141983,141984,141987],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[42,141985,141986],{},"vertical-algin"," 来设置 图片与文字对齐方式",[169,141989,141990,141991],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[166,141992,141993,141999],{},[169,141994,141995,141996,141998],{},"设置 ",[42,141997,23702],{}," 的 左右 12px 的内边距，设置一下文字颜色",[169,142000,142001],{},"分别设置 背景颜色",[169,142003,142004,142005,142007],{},"同意协议 和 完成注册 都是用 ",[42,142006,169],{}," 进行包裹",[20,142009,140022],{},[36,142011,142012],{"className":126652,"code":140595,"language":126654,"meta":25,"style":25},[42,142013,142014,142020,142030],{"__ignoreMap":25},[45,142015,142016,142018],{"class":47,"line":48},[45,142017,51711],{"class":51400},[45,142019,15721],{"class":55},[45,142021,142022,142024,142026,142028],{"class":47,"line":66},[45,142023,70978],{"class":79},[45,142025,51537],{"class":55},[45,142027,140612],{"class":79},[45,142029,1442],{"class":55},[45,142031,142032],{"class":47,"line":1331},[45,142033,1716],{"class":55},[20,142035,140111],{},[36,142037,142038],{"className":126652,"code":140595,"language":126654,"meta":25,"style":25},[42,142039,142040,142046,142056],{"__ignoreMap":25},[45,142041,142042,142044],{"class":47,"line":48},[45,142043,51711],{"class":51400},[45,142045,15721],{"class":55},[45,142047,142048,142050,142052,142054],{"class":47,"line":66},[45,142049,70978],{"class":79},[45,142051,51537],{"class":55},[45,142053,140612],{"class":79},[45,142055,1442],{"class":55},[45,142057,142058],{"class":47,"line":1331},[45,142059,1716],{"class":55},[249,142061,142063],{"id":142062},"_1634-底部实现","16.3.4 底部实现",[20,142065,140022],{},[36,142067,142068],{"className":126652,"code":140595,"language":126654,"meta":25,"style":25},[42,142069,142070,142076,142086],{"__ignoreMap":25},[45,142071,142072,142074],{"class":47,"line":48},[45,142073,51711],{"class":51400},[45,142075,15721],{"class":55},[45,142077,142078,142080,142082,142084],{"class":47,"line":66},[45,142079,70978],{"class":79},[45,142081,51537],{"class":55},[45,142083,140612],{"class":79},[45,142085,1442],{"class":55},[45,142087,142088],{"class":47,"line":1331},[45,142089,1716],{"class":55},[20,142091,140111],{},[36,142093,142094],{"className":127399,"code":130756,"language":127401,"meta":25,"style":25},[42,142095,142096,142100,142114,142118],{"__ignoreMap":25},[45,142097,142098],{"class":47,"line":48},[45,142099,130763],{"class":337},[45,142101,142102,142104,142106,142108,142110,142112],{"class":47,"line":66},[45,142103,1187],{"class":55},[45,142105,51711],{"class":51400},[45,142107,53586],{"class":69},[45,142109,59],{"class":55},[45,142111,130776],{"class":62},[45,142113,51407],{"class":55},[45,142115,142116],{"class":47,"line":1331},[45,142117,130783],{"class":55},[45,142119,142120,142122,142124],{"class":47,"line":1346},[45,142121,51885],{"class":55},[45,142123,51711],{"class":51400},[45,142125,51407],{"class":55},[15,142127,142129],{"id":142128},"_164-项目总结","16.4 项目总结",[233,142131,142132,142135,142138,142141],{},[169,142133,142134],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[169,142136,142137],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[169,142139,142140],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[169,142142,142143],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[23,142145],{"style":126508,"src":142146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[233,142148,142149],{"start":1352},[169,142150,142151],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[23,142153],{"style":126508,"src":142154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[233,142156,142157],{"start":1366},[169,142158,142159],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[23,142161],{"style":126508,"src":142162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[36,142164,142165],{"className":127399,"code":136809,"language":127401,"meta":25,"style":25},[42,142166,142167],{"__ignoreMap":25},[45,142168,142169,142171,142173,142175,142177,142179,142181,142183,142185,142187,142189,142191],{"class":47,"line":48},[45,142170,1187],{"class":55},[45,142172,53921],{"class":51400},[45,142174,53924],{"class":69},[45,142176,59],{"class":55},[45,142178,62799],{"class":62},[45,142180,15069],{"class":69},[45,142182,59],{"class":55},[45,142184,136830],{"class":62},[45,142186,61120],{"class":69},[45,142188,59],{"class":55},[45,142190,136837],{"class":62},[45,142192,51407],{"class":55},[233,142194,142195,142198],{"start":1372},[169,142196,142197],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[169,142199,142200],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[196,142202,142203],{},"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":25,"searchDepth":66,"depth":66,"links":142205},[142206,142211,142218,142226],{"id":139832,"depth":66,"text":139833,"children":142207},[142208,142209,142210],{"id":139836,"depth":1331,"text":139837},{"id":140567,"depth":1331,"text":140568},{"id":140880,"depth":1331,"text":140881},{"id":141180,"depth":66,"text":141181,"children":142212},[142213,142214,142216],{"id":141184,"depth":1331,"text":141185},{"id":141202,"depth":1331,"text":142215},"16.2.2 列表页 header 和 nav 修改",{"id":141486,"depth":1331,"text":142217},"16.2.3 列表页主体 sk_container",{"id":141678,"depth":66,"text":141679,"children":142219},[142220,142221,142223,142225],{"id":141693,"depth":1331,"text":141694},{"id":141705,"depth":1331,"text":142222},"16.3.2 header 头部实现",{"id":141784,"depth":1331,"text":142224},"16.3.3 registerarea 主体模块实现",{"id":142062,"depth":1331,"text":142063},{"id":142128,"depth":66,"text":142129},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139824,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142233,"title":142234,"body":142235,"description":204,"extension":205,"meta":142343,"navigation":207,"path":142344,"seo":142345,"stem":142346,"__hash__":142347},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142236,"toc":142338},[142237,142240,142244,142247,142250,142259,142268,142272,142277,142284,142302,142305,142308,142311,142314,142317,142320,142323,142326,142329,142332,142335],[10,142238,142234],{"id":142239},"_17-web服务器与网站发布",[15,142241,142243],{"id":142242},"_171-web服务器","17.1 Web服务器",[20,142245,142246],{},"把自己网站上传到服务器上，可以让其他人访问",[23,142248],{"style":126508,"src":142249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[20,142251,142252,142255,142256],{},[427,142253,142254],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[427,142257,142258],{},"Web 服务器等",[20,142260,142261,142262,101118,142265,25840],{},"根据服务器在网络中所在的位置不同，又可分为 ",[427,142263,142264],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[427,142266,142267],{},"远程服务器",[249,142269,142271],{"id":142270},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[20,142273,142274],{},[427,142275,142276],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[20,142278,142279,142280],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[516,142281,142282],{"href":142282,"rel":142283},"http:\u002F\u002Ffree.3v.do\u002F",[24012],[166,142285,142286,142289,142292,142299],{},[169,142287,142288],{},"去免费空间网站注册账号。",[169,142290,142291],{},"记录下主机名、用户名、密码、域名。",[169,142293,142294,142295,142298],{},"利用 ",[42,142296,142297],{},"utftp"," 软件 上传网站到远程服务器",[169,142300,142301],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[20,142303,142304],{},"使用软件上传，对上传软件文件进行解压",[23,142306],{"style":126508,"src":142307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[23,142309],{"style":126508,"src":142310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[20,142312,142313],{},"输入刚刚申请的服务器账号信息：",[23,142315],{"style":126508,"src":142316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[23,142318],{"style":126508,"src":142319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[23,142321],{"style":126508,"src":142322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[23,142324],{"style":126508,"src":142325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[20,142327,142328],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[23,142330],{"style":126508,"src":142331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[20,142333,142334],{},"浏览器输入域名即可访问",[20,142336,142337],{},"首页一定必须是index",{"title":25,"searchDepth":66,"depth":66,"links":142339},[142340],{"id":142242,"depth":66,"text":142243,"children":142341},[142342],{"id":142270,"depth":1331,"text":142271},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142234,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142349,"title":142350,"body":142351,"description":204,"extension":205,"meta":143278,"navigation":207,"path":143279,"seo":143280,"stem":143281,"__hash__":143282},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142352,"toc":143261},[142353,142356,142360,142363,142366,142377,142380,142384,142388,142393,142396,142399,142402,142405,142409,142435,142439,142443,142446,142449,142453,142486,142490,142493,142496,142560,142564,142568,142571,142574,142577,142581,142626,142630,142633,142663,142667,142671,142674,142677,142681,142684,142753,142756,142864,142866,142872,142876,142879,142882,142978,142981,142985,143009,143013,143016,143020,143023,143027,143030,143033,143036,143039,143043,143046,143049,143053,143057,143060,143063,143066,143069,143073,143076,143080,143083,143086,143131,143135,143139,143142,143145,143148,143180,143184,143187,143221,143225,143228,143258],[10,142354,142350],{"id":142355},"_18-2d动画与3d转换",[15,142357,142359],{"id":142358},"_181-css3-2d转换","18.1 CSS3 2D转换",[20,142361,142362],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[20,142364,142365],{},"转换（transform）你可以简单理解为变形",[166,142367,142368,142371,142374],{},[169,142369,142370],{},"移动：translate",[169,142372,142373],{},"旋转：rotate",[169,142375,142376],{},"缩放：scale",[23,142378],{"style":126508,"src":142379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[249,142381,142383],{"id":142382},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22147,142385,142387],{"id":142386},"_18111-translate介绍","18.1.1.1 translate介绍",[20,142389,142390,142391],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[427,142392,133311],{},[23,142394],{"style":126508,"src":142395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[20,142397,142398],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[20,142400,142401],{},"对于行内元素无效",[20,142403,142404],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22147,142406,142408],{"id":142407},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[36,142410,142411],{"className":126652,"code":138841,"language":126654,"meta":25,"style":25},[42,142412,142413,142419,142431],{"__ignoreMap":25},[45,142414,142415,142417],{"class":47,"line":48},[45,142416,51711],{"class":51400},[45,142418,15721],{"class":55},[45,142420,142421,142423,142425,142427,142429],{"class":47,"line":66},[45,142422,70570],{"class":79},[45,142424,51537],{"class":55},[45,142426,469],{"class":79},[45,142428,51656],{"class":79},[45,142430,1442],{"class":55},[45,142432,142433],{"class":47,"line":1331},[45,142434,1716],{"class":55},[249,142436,142438],{"id":142437},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22147,142440,142442],{"id":142441},"_18121-rotate介绍","18.1.2.1 rotate介绍",[20,142444,142445],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[23,142447],{"style":126508,"src":142448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22147,142450,142452],{"id":142451},"_18122-旋转效果","18.1.2.2 旋转效果",[36,142454,142456],{"className":126652,"code":142455,"language":126654,"meta":25,"style":25},"div {\n  transform: rotate(45deg);\n}\n",[42,142457,142458,142464,142482],{"__ignoreMap":25},[45,142459,142460,142462],{"class":47,"line":48},[45,142461,51711],{"class":51400},[45,142463,15721],{"class":55},[45,142465,142466,142468,142470,142473,142475,142477,142480],{"class":47,"line":66},[45,142467,136636],{"class":79},[45,142469,51537],{"class":55},[45,142471,142472],{"class":79},"rotate",[45,142474,282],{"class":55},[45,142476,806],{"class":79},[45,142478,142479],{"class":51},"deg",[45,142481,2869],{"class":55},[45,142483,142484],{"class":47,"line":1331},[45,142485,1716],{"class":55},[22147,142487,142489],{"id":142488},"_18123-三角做法","18.1.2.3 三角做法",[20,142491,142492],{},"该下标当经过最外层大盒子时会实现向上反转",[23,142494],{"style":126508,"src":142495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[36,142497,142498],{"className":126652,"code":135172,"language":126654,"meta":25,"style":25},[42,142499,142500,142504,142510,142520,142530,142546,142556],{"__ignoreMap":25},[45,142501,142502],{"class":47,"line":48},[45,142503,135179],{"class":337},[45,142505,142506,142508],{"class":47,"line":66},[45,142507,135184],{"class":69},[45,142509,15721],{"class":55},[45,142511,142512,142514,142516,142518],{"class":47,"line":1331},[45,142513,70668],{"class":79},[45,142515,51537],{"class":55},[45,142517,469],{"class":79},[45,142519,1442],{"class":55},[45,142521,142522,142524,142526,142528],{"class":47,"line":1346},[45,142523,70888],{"class":79},[45,142525,51537],{"class":55},[45,142527,469],{"class":79},[45,142529,1442],{"class":55},[45,142531,142532,142534,142536,142538,142540,142542,142544],{"class":47,"line":1352},[45,142533,70996],{"class":79},[45,142535,51537],{"class":55},[45,142537,723],{"class":79},[45,142539,51592],{"class":51},[45,142541,51621],{"class":79},[45,142543,64091],{"class":79},[45,142545,1442],{"class":55},[45,142547,142548,142550,142552,142554],{"class":47,"line":1366},[45,142549,135227],{"class":79},[45,142551,51537],{"class":55},[45,142553,62469],{"class":79},[45,142555,1442],{"class":55},[45,142557,142558],{"class":47,"line":1372},[45,142559,1716],{"class":55},[249,142561,142563],{"id":142562},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22147,142565,142567],{"id":142566},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[20,142569,142570],{},"设置中心点",[23,142572],{"style":126508,"src":142573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[20,142575,142576],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22147,142578,142580],{"id":142579},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[36,142582,142584],{"className":126652,"code":142583,"language":126654,"meta":25,"style":25},"\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",[42,142585,142586,142591,142597,142612,142617,142622],{"__ignoreMap":25},[45,142587,142588],{"class":47,"line":48},[45,142589,142590],{"class":337},"\u002F* 转换中心点 *\u002F\n",[45,142592,142593,142595],{"class":47,"line":66},[45,142594,51711],{"class":51400},[45,142596,15721],{"class":55},[45,142598,142599,142602,142604,142606,142608,142610],{"class":47,"line":1331},[45,142600,142601],{"class":79},"  transform-origin",[45,142603,51537],{"class":55},[45,142605,51692],{"class":79},[45,142607,17293],{"class":79},[45,142609,130515],{"class":55},[45,142611,135325],{"class":337},[45,142613,142614],{"class":47,"line":1346},[45,142615,142616],{"class":337},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[45,142618,142619],{"class":47,"line":1352},[45,142620,142621],{"class":337},"  \u002F* transform-origin: left top; *\u002F\n",[45,142623,142624],{"class":47,"line":1366},[45,142625,1716],{"class":55},[22147,142627,142629],{"id":142628},"_18133-旋转案例","18.1.3.3 旋转案例",[23,142631],{"style":126508,"src":142632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[36,142634,142635],{"className":126652,"code":142455,"language":126654,"meta":25,"style":25},[42,142636,142637,142643,142659],{"__ignoreMap":25},[45,142638,142639,142641],{"class":47,"line":48},[45,142640,51711],{"class":51400},[45,142642,15721],{"class":55},[45,142644,142645,142647,142649,142651,142653,142655,142657],{"class":47,"line":66},[45,142646,136636],{"class":79},[45,142648,51537],{"class":55},[45,142650,142472],{"class":79},[45,142652,282],{"class":55},[45,142654,806],{"class":79},[45,142656,142479],{"class":51},[45,142658,2869],{"class":55},[45,142660,142661],{"class":47,"line":1331},[45,142662,1716],{"class":55},[249,142664,142666],{"id":142665},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22147,142668,142670],{"id":142669},"_18141-scale介绍","18.1.4.1 scale介绍",[20,142672,142673],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[23,142675],{"style":126508,"src":142676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22147,142678,142680],{"id":142679},"_18142-分页按钮","18.1.4.2 分页按钮",[23,142682],{"style":126508,"src":142683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[36,142685,142687],{"className":126652,"code":142686,"language":126654,"meta":25,"style":25},"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",[42,142688,142689,142695,142711,142715,142719,142724,142730,142744,142749],{"__ignoreMap":25},[45,142690,142691,142693],{"class":47,"line":48},[45,142692,51711],{"class":51400},[45,142694,15721],{"class":55},[45,142696,142697,142699,142701,142704,142706,142709],{"class":47,"line":66},[45,142698,136636],{"class":79},[45,142700,51537],{"class":55},[45,142702,142703],{"class":79},"scale",[45,142705,282],{"class":55},[45,142707,142708],{"class":79},"1.2",[45,142710,2869],{"class":55},[45,142712,142713],{"class":47,"line":1331},[45,142714,1716],{"class":55},[45,142716,142717],{"class":47,"line":1346},[45,142718,136113],{"class":55},[45,142720,142721],{"class":47,"line":1352},[45,142722,142723],{"class":337},"\u002F* 2D 缩放 *\u002F\n",[45,142725,142726,142728],{"class":47,"line":1366},[45,142727,51711],{"class":51400},[45,142729,15721],{"class":55},[45,142731,142732,142734,142736,142738,142740,142742],{"class":47,"line":1372},[45,142733,136636],{"class":79},[45,142735,51537],{"class":55},[45,142737,142703],{"class":79},[45,142739,282],{"class":55},[45,142741,142708],{"class":79},[45,142743,2869],{"class":55},[45,142745,142746],{"class":47,"line":1463},[45,142747,142748],{"class":337},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[45,142750,142751],{"class":47,"line":1469},[45,142752,1716],{"class":55},[20,142754,142755],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[36,142757,142759],{"className":126652,"code":142758,"language":126654,"meta":25,"style":25},"\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",[42,142760,142761,142766,142776,142797,142818,142822,142827,142833,142860],{"__ignoreMap":25},[45,142762,142763],{"class":47,"line":48},[45,142764,142765],{"class":337},"\u002F* 定义动画 *\u002F\n",[45,142767,142768,142771,142774],{"class":47,"line":66},[45,142769,142770],{"class":51},"@keyframes",[45,142772,142773],{"class":5366}," move",[45,142775,15721],{"class":55},[45,142777,142778,142781,142783,142785,142787,142790,142792,142794],{"class":47,"line":1331},[45,142779,142780],{"class":69},"  0%",[45,142782,79907],{"class":55},[45,142784,48234],{"class":79},[45,142786,51537],{"class":55},[45,142788,142789],{"class":79},"translateX",[45,142791,282],{"class":55},[45,142793,469],{"class":79},[45,142795,142796],{"class":55},"); }\n",[45,142798,142799,142802,142804,142806,142808,142810,142812,142814,142816],{"class":47,"line":1346},[45,142800,142801],{"class":69},"  100%",[45,142803,79907],{"class":55},[45,142805,48234],{"class":79},[45,142807,51537],{"class":55},[45,142809,142789],{"class":79},[45,142811,282],{"class":55},[45,142813,588],{"class":79},[45,142815,51592],{"class":51},[45,142817,142796],{"class":55},[45,142819,142820],{"class":47,"line":1352},[45,142821,1716],{"class":55},[45,142823,142824],{"class":47,"line":1366},[45,142825,142826],{"class":337},"\u002F* 调用动画 *\u002F\n",[45,142828,142829,142831],{"class":47,"line":1372},[45,142830,51711],{"class":51400},[45,142832,15721],{"class":55},[45,142834,142835,142838,142840,142842,142844,142846,142848,142850,142852,142855,142858],{"class":47,"line":1463},[45,142836,142837],{"class":79},"  animation",[45,142839,51537],{"class":55},[45,142841,135338],{"class":79},[45,142843,136],{"class":79},[45,142845,972],{"class":51},[45,142847,78780],{"class":79},[45,142849,4243],{"class":79},[45,142851,972],{"class":51},[45,142853,142854],{"class":79}," infinite",[45,142856,142857],{"class":79}," alternate",[45,142859,1442],{"class":55},[45,142861,142862],{"class":47,"line":1469},[45,142863,1716],{"class":55},[20,142865,142755],{},[36,142867,142870],{"className":142868,"code":142869,"language":5337},[5335],"\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",[42,142871,142869],{"__ignoreMap":25},[22147,142873,142875],{"id":142874},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[20,142877,142878],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[23,142880],{"style":126508,"src":142881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[36,142883,142884],{"className":126652,"code":142758,"language":126654,"meta":25,"style":25},[42,142885,142886,142890,142898,142916,142936,142940,142944,142950,142974],{"__ignoreMap":25},[45,142887,142888],{"class":47,"line":48},[45,142889,142765],{"class":337},[45,142891,142892,142894,142896],{"class":47,"line":66},[45,142893,142770],{"class":51},[45,142895,142773],{"class":5366},[45,142897,15721],{"class":55},[45,142899,142900,142902,142904,142906,142908,142910,142912,142914],{"class":47,"line":1331},[45,142901,142780],{"class":69},[45,142903,79907],{"class":55},[45,142905,48234],{"class":79},[45,142907,51537],{"class":55},[45,142909,142789],{"class":79},[45,142911,282],{"class":55},[45,142913,469],{"class":79},[45,142915,142796],{"class":55},[45,142917,142918,142920,142922,142924,142926,142928,142930,142932,142934],{"class":47,"line":1346},[45,142919,142801],{"class":69},[45,142921,79907],{"class":55},[45,142923,48234],{"class":79},[45,142925,51537],{"class":55},[45,142927,142789],{"class":79},[45,142929,282],{"class":55},[45,142931,588],{"class":79},[45,142933,51592],{"class":51},[45,142935,142796],{"class":55},[45,142937,142938],{"class":47,"line":1352},[45,142939,1716],{"class":55},[45,142941,142942],{"class":47,"line":1366},[45,142943,142826],{"class":337},[45,142945,142946,142948],{"class":47,"line":1372},[45,142947,51711],{"class":51400},[45,142949,15721],{"class":55},[45,142951,142952,142954,142956,142958,142960,142962,142964,142966,142968,142970,142972],{"class":47,"line":1463},[45,142953,142837],{"class":79},[45,142955,51537],{"class":55},[45,142957,135338],{"class":79},[45,142959,136],{"class":79},[45,142961,972],{"class":51},[45,142963,78780],{"class":79},[45,142965,4243],{"class":79},[45,142967,972],{"class":51},[45,142969,142854],{"class":79},[45,142971,142857],{"class":79},[45,142973,1442],{"class":55},[45,142975,142976],{"class":47,"line":1469},[45,142977,1716],{"class":55},[20,142979,142980],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[249,142982,142984],{"id":142983},"_1823-知识点回顾","18.2.3 知识点回顾",[36,142986,142987],{"className":126652,"code":128821,"language":126654,"meta":25,"style":25},[42,142988,142989,142995,143005],{"__ignoreMap":25},[45,142990,142991,142993],{"class":47,"line":48},[45,142992,51711],{"class":51400},[45,142994,15721],{"class":55},[45,142996,142997,142999,143001,143003],{"class":47,"line":66},[45,142998,128834],{"class":79},[45,143000,51537],{"class":55},[45,143002,61836],{"class":79},[45,143004,1442],{"class":55},[45,143006,143007],{"class":47,"line":1331},[45,143008,1716],{"class":55},[15,143010,143012],{"id":143011},"_183-3d-转换","18.3 3D 转换",[20,143014,143015],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[249,143017,143019],{"id":143018},"_1831-坐标轴认识","18.3.1 坐标轴认识",[23,143021],{"style":126508,"src":143022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[249,143024,143026],{"id":143025},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[23,143028],{"style":126508,"src":143029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[20,143031,143032],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[20,143034,143035],{},"translate3d的效果需要搭配透视perspective来使用",[23,143037],{"style":126508,"src":143038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[249,143040,143042],{"id":143041},"_1833-透视-perspective","18.3.3 透视 perspective",[23,143044],{"style":126508,"src":143045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[20,143047,143048],{},"透视写在父盒子上，单位为像素",[249,143050,143052],{"id":143051},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22147,143054,143056],{"id":143055},"_18341-分开解释","18.3.4.1 分开解释",[23,143058],{"style":126508,"src":143059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[23,143061],{"style":126508,"src":143062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[23,143064],{"style":126508,"src":143065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[20,143067,143068],{},"总结来说就是左手原则",[22147,143070,143072],{"id":143071},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[23,143074],{"style":126508,"src":143075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[249,143077,143079],{"id":143078},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[23,143081],{"style":126508,"src":143082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[23,143084],{"style":126508,"src":143085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[36,143087,143089],{"className":126652,"code":143088,"language":126654,"meta":25,"style":25},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[42,143090,143091,143097,143110,143127],{"__ignoreMap":25},[45,143092,143093,143095],{"class":47,"line":48},[45,143094,51711],{"class":51400},[45,143096,15721],{"class":55},[45,143098,143099,143102,143104,143106,143108],{"class":47,"line":66},[45,143100,143101],{"class":79},"  perspective",[45,143103,51537],{"class":55},[45,143105,65174],{"class":79},[45,143107,51592],{"class":51},[45,143109,1442],{"class":55},[45,143111,143112,143114,143116,143119,143121,143123,143125],{"class":47,"line":1331},[45,143113,136636],{"class":79},[45,143115,51537],{"class":55},[45,143117,143118],{"class":79},"rotateX",[45,143120,282],{"class":55},[45,143122,806],{"class":79},[45,143124,142479],{"class":51},[45,143126,2869],{"class":55},[45,143128,143129],{"class":47,"line":1346},[45,143130,1716],{"class":55},[249,143132,143134],{"id":143133},"_1836-案例","18.3.6 案例",[22147,143136,143138],{"id":143137},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[23,143140],{"style":126508,"src":143141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[23,143143],{"style":126508,"src":143144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[23,143146],{"style":126508,"src":143147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[36,143149,143151],{"className":126652,"code":143150,"language":126654,"meta":25,"style":25},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[42,143152,143153,143158,143164,143176],{"__ignoreMap":25},[45,143154,143155],{"class":47,"line":48},[45,143156,143157],{"class":337},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[45,143159,143160,143162],{"class":47,"line":66},[45,143161,133649],{"class":69},[45,143163,15721],{"class":55},[45,143165,143166,143168,143170,143172,143174],{"class":47,"line":1331},[45,143167,143101],{"class":79},[45,143169,51537],{"class":55},[45,143171,65174],{"class":79},[45,143173,51592],{"class":51},[45,143175,1442],{"class":55},[45,143177,143178],{"class":47,"line":1346},[45,143179,1716],{"class":55},[22147,143181,143183],{"id":143182},"_18362-3d导航栏","18.3.6.2 3D导航栏",[23,143185],{"style":126508,"src":143186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[36,143188,143189],{"className":127399,"code":130756,"language":127401,"meta":25,"style":25},[42,143190,143191,143195,143209,143213],{"__ignoreMap":25},[45,143192,143193],{"class":47,"line":48},[45,143194,130763],{"class":337},[45,143196,143197,143199,143201,143203,143205,143207],{"class":47,"line":66},[45,143198,1187],{"class":55},[45,143200,51711],{"class":51400},[45,143202,53586],{"class":69},[45,143204,59],{"class":55},[45,143206,130776],{"class":62},[45,143208,51407],{"class":55},[45,143210,143211],{"class":47,"line":1331},[45,143212,130783],{"class":55},[45,143214,143215,143217,143219],{"class":47,"line":1346},[45,143216,51885],{"class":55},[45,143218,51711],{"class":51400},[45,143220,51407],{"class":55},[22147,143222,143224],{"id":143223},"_18363-旋转木马","18.3.6.3 旋转木马",[23,143226],{"style":126508,"src":143227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[36,143229,143230],{"className":126652,"code":142455,"language":126654,"meta":25,"style":25},[42,143231,143232,143238,143254],{"__ignoreMap":25},[45,143233,143234,143236],{"class":47,"line":48},[45,143235,51711],{"class":51400},[45,143237,15721],{"class":55},[45,143239,143240,143242,143244,143246,143248,143250,143252],{"class":47,"line":66},[45,143241,136636],{"class":79},[45,143243,51537],{"class":55},[45,143245,142472],{"class":79},[45,143247,282],{"class":55},[45,143249,806],{"class":79},[45,143251,142479],{"class":51},[45,143253,2869],{"class":55},[45,143255,143256],{"class":47,"line":1331},[45,143257,1716],{"class":55},[196,143259,143260],{},"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":25,"searchDepth":66,"depth":66,"links":143262},[143263,143270],{"id":142358,"depth":66,"text":142359,"children":143264},[143265,143266,143267,143268,143269],{"id":142382,"depth":1331,"text":142383},{"id":142437,"depth":1331,"text":142438},{"id":142562,"depth":1331,"text":142563},{"id":142665,"depth":1331,"text":142666},{"id":142983,"depth":1331,"text":142984},{"id":143011,"depth":66,"text":143012,"children":143271},[143272,143273,143274,143275,143276,143277],{"id":143018,"depth":1331,"text":143019},{"id":143025,"depth":1331,"text":143026},{"id":143041,"depth":1331,"text":143042},{"id":143051,"depth":1331,"text":143052},{"id":143078,"depth":1331,"text":143079},{"id":143133,"depth":1331,"text":143134},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142350,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143284,"title":143285,"body":143286,"description":204,"extension":205,"meta":143489,"navigation":207,"path":143490,"seo":143491,"stem":143492,"__hash__":143493},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143287,"toc":143478},[143288,143291,143295,143298,143301,143305,143308,143311,143314,143318,143321,143325,143328,143332,143335,143339,143353,143357,143382,143385,143388,143405,143409,143413,143416,143419,143423,143426,143429,143447,143451,143454,143468,143472,143475],[10,143289,143285],{"id":143290},"_19-移动端基础-前缀现状与视口",[15,143292,143294],{"id":143293},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[23,143296],{"style":126508,"src":143297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[20,143299,143300],{},"意思就是加个前缀，增加兼容性",[15,143302,143304],{"id":143303},"_192-移动端现状认识","19.2 移动端现状认识",[23,143306],{"style":126508,"src":143307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[20,143309,143310],{},"调试方法：",[23,143312],{"style":126508,"src":143313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[15,143315,143317],{"id":143316},"_193-视口","19.3 视口",[20,143319,143320],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[249,143322,143324],{"id":143323},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[23,143326],{"style":126508,"src":143327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[249,143329,143331],{"id":143330},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[23,143333],{"style":126508,"src":143334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[249,143336,143338],{"id":143337},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[166,143340,143341,143344,143347,143350],{},[169,143342,143343],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[169,143345,143346],{},"理想视口，对设备来讲，是最理想的视口尺寸",[169,143348,143349],{},"需要手动添写meta视口标签通知浏览器操作",[169,143351,143352],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[249,143354,143356],{"id":143355},"_1934-meta视口标签","19.3.4 meta视口标签",[36,143358,143360],{"className":127399,"code":143359,"language":127401,"meta":25,"style":25},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[42,143361,143362],{"__ignoreMap":25},[45,143363,143364,143366,143368,143370,143372,143374,143376,143378,143380],{"class":47,"line":48},[45,143365,1187],{"class":55},[45,143367,51444],{"class":51400},[45,143369,15069],{"class":69},[45,143371,59],{"class":55},[45,143373,51491],{"class":62},[45,143375,51471],{"class":69},[45,143377,59],{"class":55},[45,143379,51498],{"class":62},[45,143381,51407],{"class":55},[23,143383],{"style":126508,"src":143384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[20,143386,143387],{},"标准视口设置：",[233,143389,143390,143393,143396,143399,143402],{},[169,143391,143392],{},"视口宽度和设备保持一致",[169,143394,143395],{},"视口的默认缩放比例1.0",[169,143397,143398],{},"不允许用户自行缩放",[169,143400,143401],{},"最大允许的缩放比例1.0",[169,143403,143404],{},"最小允许的缩放比例1.0",[249,143406,143408],{"id":143407},"_1935-二倍图","19.3.5 二倍图",[22147,143410,143412],{"id":143411},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[23,143414],{"style":126508,"src":143415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[23,143417],{"style":126508,"src":143418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22147,143420,143422],{"id":143421},"_19352-多倍图","19.3.5.2 多倍图",[23,143424],{"style":126508,"src":143425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[20,143427,143428],{},"二倍图法，代码如下：",[36,143430,143432],{"className":126652,"code":143431,"language":126654,"meta":25,"style":25},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[42,143433,143434,143439],{"__ignoreMap":25},[45,143435,143436],{"class":47,"line":48},[45,143437,143438],{"class":337},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[45,143440,143441,143444],{"class":47,"line":66},[45,143442,143443],{"class":51400},"background-size",[45,143445,143446],{"class":55},": 50% 50%;\n",[22147,143448,143450],{"id":143449},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[23,143452],{"style":126508,"src":143453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[233,143455,143456,143459,143462,143465],{},[169,143457,143458],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[169,143460,143461],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[169,143463,143464],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[169,143466,143467],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22147,143469,143471],{"id":143470},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[23,143473],{"style":126508,"src":143474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[196,143476,143477],{},"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":25,"searchDepth":66,"depth":66,"links":143479},[143480,143481,143482],{"id":143293,"depth":66,"text":143294},{"id":143303,"depth":66,"text":143304},{"id":143316,"depth":66,"text":143317,"children":143483},[143484,143485,143486,143487,143488],{"id":143323,"depth":1331,"text":143324},{"id":143330,"depth":1331,"text":143331},{"id":143337,"depth":1331,"text":143338},{"id":143355,"depth":1331,"text":143356},{"id":143407,"depth":1331,"text":143408},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143285,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143495,"title":143496,"body":143497,"description":204,"extension":205,"meta":144374,"navigation":207,"path":144375,"seo":144376,"stem":144377,"__hash__":144378},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143498,"toc":144358},[143499,143502,143506,143513,143516,143523,143526,143531,143534,143538,143542,143549,143552,143555,143559,143562,143565,143568,143571,143574,143578,143581,143585,143587,143590,143593,143596,143599,143601,143604,143606,143636,143638,143668,143672,143675,143679,143682,143699,143702,143705,143781,143783,143786,143789,143792,143795,143797,143800,143803,143807,143829,143832,143835,143839,143842,143848,143851,143855,143858,143861,143865,143868,143871,143874,143878,143881,143884,143887,143890,143894,143897,143901,143908,143911,143914,143917,143920,143930,143933,143936,143943,143946,143950,143953,143956,143960,143963,143966,143969,144014,144017,144020,144023,144025,144154,144156,144194,144197,144200,144202,144320,144322,144356],[10,143500,143496],{"id":143501},"_20-移动端布局实战上篇",[15,143503,143505],{"id":143504},"_201-移动端主流方案","20.1 移动端主流方案",[233,143507,143508],{},[169,143509,143510],{},[427,143511,143512],{},"单独移动端页面（主流）",[23,143514],{"style":126508,"src":143515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[233,143517,143518],{"start":66},[169,143519,143520],{},[427,143521,143522],{},"响应式兼容PC移动端",[23,143524],{"style":126508,"src":143525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[233,143527,143528],{"start":1331},[169,143529,143530],{},"两种页面选型布局方式",[23,143532],{"style":126508,"src":143533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[15,143535,143537],{"id":143536},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[249,143539,143541],{"id":143540},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[20,143543,143544,143545],{},"官网地址： ",[516,143546,143547],{"href":143547,"rel":143548},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24012],[23,143550],{"style":126508,"src":143551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[23,143553],{"style":126508,"src":143554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[249,143556,143558],{"id":143557},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[23,143560],{"style":126508,"src":143561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[23,143563],{"style":126508,"src":143564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[20,143566,143567],{},"去除高亮：",[20,143569,143570],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[20,143572,143573],{},"-webkit- tap-highlight-color: transparent;",[15,143575,143577],{"id":143576},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[23,143579],{"style":126508,"src":143580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[15,143582,143584],{"id":143583},"_204-流式布局案例","20.4 流式布局案例",[20,143586,310],{},[20,143588,143589],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[20,143591,143592],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[20,143594,143595],{},"图片格式：",[23,143597],{"style":126508,"src":143598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[20,143600,135695],{},[23,143602],{"style":126508,"src":143603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[20,143605,140022],{},[36,143607,143608],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,143609,143610],{"__ignoreMap":25},[45,143611,143612,143614,143616,143618,143620,143622,143624,143626,143628,143630,143632,143634],{"class":47,"line":48},[45,143613,1187],{"class":55},[45,143615,23],{"class":51400},[45,143617,55339],{"class":69},[45,143619,59],{"class":55},[45,143621,134169],{"class":62},[45,143623,55347],{"class":69},[45,143625,59],{"class":55},[45,143627,134176],{"class":62},[45,143629,134179],{"class":69},[45,143631,59],{"class":55},[45,143633,134184],{"class":62},[45,143635,51407],{"class":55},[20,143637,140111],{},[36,143639,143640],{"className":127399,"code":134154,"language":127401,"meta":25,"style":25},[42,143641,143642],{"__ignoreMap":25},[45,143643,143644,143646,143648,143650,143652,143654,143656,143658,143660,143662,143664,143666],{"class":47,"line":48},[45,143645,1187],{"class":55},[45,143647,23],{"class":51400},[45,143649,55339],{"class":69},[45,143651,59],{"class":55},[45,143653,134169],{"class":62},[45,143655,55347],{"class":69},[45,143657,59],{"class":55},[45,143659,134176],{"class":62},[45,143661,134179],{"class":69},[45,143663,59],{"class":55},[45,143665,134184],{"class":62},[45,143667,51407],{"class":55},[15,143669,143671],{"id":143670},"_205-flex布局","20.5 flex布局",[23,143673],{"style":126508,"src":143674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[249,143676,143678],{"id":143677},"_2051-布局原理","20.5.1 布局原理",[20,143680,143681],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[166,143683,143684,143687,143690,143693,143696],{},[169,143685,143686],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[169,143688,143689],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[169,143691,143692],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[169,143694,143695],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[169,143697,143698],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[20,143700,143701],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[20,143703,143704],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[36,143706,143708],{"className":126652,"code":143707,"language":126654,"meta":25,"style":25},"\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",[42,143709,143710,143715,143722,143732,143744,143755,143766,143777],{"__ignoreMap":25},[45,143711,143712],{"class":47,"line":48},[45,143713,143714],{"class":337},"\u002F* Flex 弹性布局 *\u002F\n",[45,143716,143717,143720],{"class":47,"line":66},[45,143718,143719],{"class":69},".container",[45,143721,15721],{"class":55},[45,143723,143724,143726,143728,143730],{"class":47,"line":1331},[45,143725,128268],{"class":79},[45,143727,51537],{"class":55},[45,143729,51577],{"class":79},[45,143731,1442],{"class":55},[45,143733,143734,143737,143739,143742],{"class":47,"line":1346},[45,143735,143736],{"class":79},"  flex-direction",[45,143738,51537],{"class":55},[45,143740,143741],{"class":79},"row",[45,143743,1442],{"class":55},[45,143745,143746,143749,143751,143753],{"class":47,"line":1352},[45,143747,143748],{"class":79},"  justify-content",[45,143750,51537],{"class":55},[45,143752,51768],{"class":79},[45,143754,1442],{"class":55},[45,143756,143757,143760,143762,143764],{"class":47,"line":1366},[45,143758,143759],{"class":79},"  align-items",[45,143761,51537],{"class":55},[45,143763,51692],{"class":79},[45,143765,1442],{"class":55},[45,143767,143768,143771,143773,143775],{"class":47,"line":1372},[45,143769,143770],{"class":79},"  flex-wrap",[45,143772,51537],{"class":55},[45,143774,78710],{"class":79},[45,143776,1442],{"class":55},[45,143778,143779],{"class":47,"line":1463},[45,143780,1716],{"class":55},[20,143782,70553],{},[20,143784,143785],{},".form-item .male-label {",[20,143787,143788],{},"   margin-right: 20px;",[20,143790,143791],{},"   display: inline-flex;",[20,143793,143794],{},"   align-items: center;",[20,143796,1223],{},[23,143798],{"style":126508,"src":143799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[23,143801],{"style":126508,"src":143802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[249,143804,143806],{"id":143805},"_2052-常见父项属性","20.5.2 常见父项属性",[233,143808,143809,143812,143815,143818,143821,143824,143827],{},[169,143810,143811],{},"flex-direction：设置主轴的方向",[169,143813,143814],{},"justify-content：设置主轴上的子元素排列方式",[169,143816,143817],{},"flex-wrap：设置子元素是否换行",[169,143819,143820],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[169,143822,143823],{},"align-items：设置侧轴上的子元素排列方式（单行）",[169,143825,143826],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[169,143828,143811],{},[23,143830],{"style":126508,"src":143831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[23,143833],{"style":126508,"src":143834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[233,143836,143837],{"start":66},[169,143838,143814],{},[23,143840],{"style":126508,"src":143841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[20,143843,143844,143847],{},[42,143845,143846],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[20,143849,143850],{},"跟着主轴走",[233,143852,143853],{"start":1331},[169,143854,143817],{},[23,143856],{"style":126508,"src":143857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[20,143859,143860],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[233,143862,143863],{"start":1346},[169,143864,143820],{},[23,143866],{"style":126508,"src":143867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[20,143869,143870],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[20,143872,143873],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[233,143875,143876],{"start":1352},[169,143877,143823],{},[23,143879],{"style":126508,"src":143880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[20,143882,143883],{},"align-items与align-content之间的区别：",[20,143885,143886],{},"单找items，多找content",[23,143888],{"style":126508,"src":143889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[233,143891,143892],{"start":1366},[169,143893,143826],{},[23,143895],{"style":126508,"src":143896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[249,143898,143900],{"id":143899},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[233,143902,143903],{},[169,143904,143905],{},[427,143906,143907],{},"flex 属性",[20,143909,143910],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[23,143912],{"style":126508,"src":143913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[20,143915,143916],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[20,143918,143919],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[233,143921,143922],{"start":66},[169,143923,143924,13944,143927],{},[427,143925,143926],{},"align-self",[427,143928,143929],{},"控制子项自己在侧轴上的排列方式",[23,143931],{"style":126508,"src":143932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[20,143934,143935],{},"单个子盒子在父盒子侧轴上的排列方式",[233,143937,143938],{"start":1331},[169,143939,143940,143942],{},[427,143941,95397],{}," 属性定义项目的排列顺序",[23,143944],{"style":126508,"src":143945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[249,143947,143949],{"id":143948},"_2054-背景线性渐变","20.5.4 背景线性渐变",[23,143951],{"style":126508,"src":143952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[20,143954,143955],{},"必须要添加浏览器的私有前缀",[249,143957,143959],{"id":143958},"_2055-携程网首页案例","20.5.5 携程网首页案例",[20,143961,143962],{},"学到最重要的知识：",[20,143964,143965],{},"flex处理这样的布局思路",[23,143967],{"style":126508,"src":143968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[36,143970,143972],{"className":126652,"code":143971,"language":126654,"meta":25,"style":25},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[42,143973,143974,143980,143990,144000,144010],{"__ignoreMap":25},[45,143975,143976,143978],{"class":47,"line":48},[45,143977,143719],{"class":69},[45,143979,15721],{"class":55},[45,143981,143982,143984,143986,143988],{"class":47,"line":66},[45,143983,128268],{"class":79},[45,143985,51537],{"class":55},[45,143987,51577],{"class":79},[45,143989,1442],{"class":55},[45,143991,143992,143994,143996,143998],{"class":47,"line":1331},[45,143993,143748],{"class":79},[45,143995,51537],{"class":55},[45,143997,51692],{"class":79},[45,143999,1442],{"class":55},[45,144001,144002,144004,144006,144008],{"class":47,"line":1346},[45,144003,143759],{"class":79},[45,144005,51537],{"class":55},[45,144007,51692],{"class":79},[45,144009,1442],{"class":55},[45,144011,144012],{"class":47,"line":1352},[45,144013,1716],{"class":55},[20,144015,144016],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[20,144018,144019],{},"使用属性选择器",[23,144021],{"style":126508,"src":144022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[20,144024,68989],{},[36,144026,144028],{"className":127399,"code":144027,"language":127401,"meta":25,"style":25},"\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",[42,144029,144030,144035,144049,144054,144074,144079,144098,144103,144122,144127,144146],{"__ignoreMap":25},[45,144031,144032],{"class":47,"line":48},[45,144033,144034],{"class":337},"\u003C!-- 携程网移动端案例结构 -->\n",[45,144036,144037,144039,144041,144043,144045,144047],{"class":47,"line":66},[45,144038,1187],{"class":55},[45,144040,51711],{"class":51400},[45,144042,53586],{"class":69},[45,144044,59],{"class":55},[45,144046,92423],{"class":62},[45,144048,51407],{"class":55},[45,144050,144051],{"class":47,"line":1331},[45,144052,144053],{"class":337},"  \u003C!-- 搜索栏 -->\n",[45,144055,144056,144058,144060,144062,144064,144067,144070,144072],{"class":47,"line":1346},[45,144057,52244],{"class":55},[45,144059,51711],{"class":51400},[45,144061,53586],{"class":69},[45,144063,59],{"class":55},[45,144065,144066],{"class":62},"\"search-index\"",[45,144068,144069],{"class":55},">...\u003C\u002F",[45,144071,51711],{"class":51400},[45,144073,51407],{"class":55},[45,144075,144076],{"class":47,"line":1352},[45,144077,144078],{"class":337},"  \u003C!-- 焦点图 -->\n",[45,144080,144081,144083,144085,144087,144089,144092,144094,144096],{"class":47,"line":1366},[45,144082,52244],{"class":55},[45,144084,51711],{"class":51400},[45,144086,53586],{"class":69},[45,144088,59],{"class":55},[45,144090,144091],{"class":62},"\"focus\"",[45,144093,144069],{"class":55},[45,144095,51711],{"class":51400},[45,144097,51407],{"class":55},[45,144099,144100],{"class":47,"line":1372},[45,144101,144102],{"class":337},"  \u003C!-- 主导航 -->\n",[45,144104,144105,144107,144109,144111,144113,144116,144118,144120],{"class":47,"line":1463},[45,144106,52244],{"class":55},[45,144108,51711],{"class":51400},[45,144110,53586],{"class":69},[45,144112,59],{"class":55},[45,144114,144115],{"class":62},"\"local-nav\"",[45,144117,144069],{"class":55},[45,144119,51711],{"class":51400},[45,144121,51407],{"class":55},[45,144123,144124],{"class":47,"line":1469},[45,144125,144126],{"class":337},"  \u003C!-- 子导航 -->\n",[45,144128,144129,144131,144133,144135,144137,144140,144142,144144],{"class":47,"line":1481},[45,144130,52244],{"class":55},[45,144132,51711],{"class":51400},[45,144134,53586],{"class":69},[45,144136,59],{"class":55},[45,144138,144139],{"class":62},"\"nav-common\"",[45,144141,144069],{"class":55},[45,144143,51711],{"class":51400},[45,144145,51407],{"class":55},[45,144147,144148,144150,144152],{"class":47,"line":1763},[45,144149,51885],{"class":55},[45,144151,51711],{"class":51400},[45,144153,51407],{"class":55},[20,144155,70553],{},[36,144157,144158],{"className":126652,"code":137104,"language":126654,"meta":25,"style":25},[42,144159,144160,144174,144190],{"__ignoreMap":25},[45,144161,144162,144164,144166,144168,144170,144172],{"class":47,"line":48},[45,144163,53921],{"class":51400},[45,144165,1167],{"class":55},[45,144167,103207],{"class":69},[45,144169,59],{"class":51},[45,144171,62799],{"class":62},[45,144173,137121],{"class":55},[45,144175,144176,144178,144180,144182,144184,144186,144188],{"class":47,"line":66},[45,144177,70996],{"class":79},[45,144179,51537],{"class":55},[45,144181,495],{"class":79},[45,144183,51592],{"class":51},[45,144185,51621],{"class":79},[45,144187,130232],{"class":79},[45,144189,1442],{"class":55},[45,144191,144192],{"class":47,"line":1331},[45,144193,1716],{"class":55},[20,144195,144196],{},"总代码和效果展示：",[23,144198],{"style":126508,"src":144199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[20,144201,68989],{},[36,144203,144204],{"className":127399,"code":144027,"language":127401,"meta":25,"style":25},[42,144205,144206,144210,144224,144228,144246,144250,144268,144272,144290,144294,144312],{"__ignoreMap":25},[45,144207,144208],{"class":47,"line":48},[45,144209,144034],{"class":337},[45,144211,144212,144214,144216,144218,144220,144222],{"class":47,"line":66},[45,144213,1187],{"class":55},[45,144215,51711],{"class":51400},[45,144217,53586],{"class":69},[45,144219,59],{"class":55},[45,144221,92423],{"class":62},[45,144223,51407],{"class":55},[45,144225,144226],{"class":47,"line":1331},[45,144227,144053],{"class":337},[45,144229,144230,144232,144234,144236,144238,144240,144242,144244],{"class":47,"line":1346},[45,144231,52244],{"class":55},[45,144233,51711],{"class":51400},[45,144235,53586],{"class":69},[45,144237,59],{"class":55},[45,144239,144066],{"class":62},[45,144241,144069],{"class":55},[45,144243,51711],{"class":51400},[45,144245,51407],{"class":55},[45,144247,144248],{"class":47,"line":1352},[45,144249,144078],{"class":337},[45,144251,144252,144254,144256,144258,144260,144262,144264,144266],{"class":47,"line":1366},[45,144253,52244],{"class":55},[45,144255,51711],{"class":51400},[45,144257,53586],{"class":69},[45,144259,59],{"class":55},[45,144261,144091],{"class":62},[45,144263,144069],{"class":55},[45,144265,51711],{"class":51400},[45,144267,51407],{"class":55},[45,144269,144270],{"class":47,"line":1372},[45,144271,144102],{"class":337},[45,144273,144274,144276,144278,144280,144282,144284,144286,144288],{"class":47,"line":1463},[45,144275,52244],{"class":55},[45,144277,51711],{"class":51400},[45,144279,53586],{"class":69},[45,144281,59],{"class":55},[45,144283,144115],{"class":62},[45,144285,144069],{"class":55},[45,144287,51711],{"class":51400},[45,144289,51407],{"class":55},[45,144291,144292],{"class":47,"line":1469},[45,144293,144126],{"class":337},[45,144295,144296,144298,144300,144302,144304,144306,144308,144310],{"class":47,"line":1481},[45,144297,52244],{"class":55},[45,144299,51711],{"class":51400},[45,144301,53586],{"class":69},[45,144303,59],{"class":55},[45,144305,144139],{"class":62},[45,144307,144069],{"class":55},[45,144309,51711],{"class":51400},[45,144311,51407],{"class":55},[45,144313,144314,144316,144318],{"class":47,"line":1763},[45,144315,51885],{"class":55},[45,144317,51711],{"class":51400},[45,144319,51407],{"class":55},[20,144321,70553],{},[36,144323,144324],{"className":127399,"code":130756,"language":127401,"meta":25,"style":25},[42,144325,144326,144330,144344,144348],{"__ignoreMap":25},[45,144327,144328],{"class":47,"line":48},[45,144329,130763],{"class":337},[45,144331,144332,144334,144336,144338,144340,144342],{"class":47,"line":66},[45,144333,1187],{"class":55},[45,144335,51711],{"class":51400},[45,144337,53586],{"class":69},[45,144339,59],{"class":55},[45,144341,130776],{"class":62},[45,144343,51407],{"class":55},[45,144345,144346],{"class":47,"line":1331},[45,144347,130783],{"class":55},[45,144349,144350,144352,144354],{"class":47,"line":1346},[45,144351,51885],{"class":55},[45,144353,51711],{"class":51400},[45,144355,51407],{"class":55},[196,144357,138053],{},{"title":25,"searchDepth":66,"depth":66,"links":144359},[144360,144361,144365,144366,144367],{"id":143504,"depth":66,"text":143505},{"id":143536,"depth":66,"text":143537,"children":144362},[144363,144364],{"id":143540,"depth":1331,"text":143541},{"id":143557,"depth":1331,"text":143558},{"id":143576,"depth":66,"text":143577},{"id":143583,"depth":66,"text":143584},{"id":143670,"depth":66,"text":143671,"children":144368},[144369,144370,144371,144372,144373],{"id":143677,"depth":1331,"text":143678},{"id":143805,"depth":1331,"text":143806},{"id":143899,"depth":1331,"text":143900},{"id":143948,"depth":1331,"text":143949},{"id":143958,"depth":1331,"text":143959},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143496,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144380,"title":144381,"body":144382,"description":204,"extension":205,"meta":145609,"navigation":207,"path":145610,"seo":145611,"stem":145612,"__hash__":145613},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144383,"toc":145587},[144384,144387,144391,144395,144398,144401,144405,144410,144413,144416,144419,144422,144425,144482,144485,144490,144493,144496,144500,144511,144515,144518,144521,144528,144533,144537,144540,144546,144549,144553,144556,144563,144566,144569,144576,144579,144586,144589,144592,144599,144602,144605,144607,144624,144628,144631,144634,144637,144641,144644,144647,144650,144653,144656,144659,144661,144664,144667,144729,144732,144842,144849,144855,144858,144861,144865,144868,144872,144877,144880,144887,144890,144896,144901,144904,144907,144910,144913,144916,144919,144922,144925,144981,144983,145009,145013,145016,145019,145022,145030,145033,145036,145040,145096,145099,145103,145109,145120,145123,145128,145131,145134,145140,145143,145146,145149,145152,145155,145158,145161,145164,145189,145195,145198,145201,145204,145207,145210,145213,145218,145221,145224,145227,145235,145238,145245,145248,145251,145253,145277,145279,145282,145285,145288,145291,145294,145297,145300,145334,145337,145340,145374,145381,145384,145387,145390,145393,145396,145399,145406,145409,145412,145415,145418,145425,145428,145431,145438,145441,145444,145448,145451,145454,145457,145460,145463,145466,145469,145472,145474,145498,145500,145524,145528,145539,145542,145545,145548,145551,145554,145557,145560,145563,145566,145569,145572,145575,145578,145581,145584],[10,144385,144381],{"id":144386},"_21-移动端布局实战下篇",[15,144388,144390],{"id":144389},"_211-rem适配布局","21.1 rem适配布局",[249,144392,144394],{"id":144393},"_2111-rem单位","21.1.1 rem单位",[23,144396],{"style":126508,"src":144397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[20,144399,144400],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[249,144402,144404],{"id":144403},"_2112-媒体查询","21.1.2 媒体查询",[233,144406,144407],{},[169,144408,144409],{},"参数介绍",[23,144411],{"style":126508,"src":144412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[23,144414],{"style":126508,"src":144415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[23,144417],{"style":126508,"src":144418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[23,144420],{"style":126508,"src":144421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[23,144423],{"style":126508,"src":144424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[36,144426,144428],{"className":126652,"code":144427,"language":126654,"meta":25,"style":25},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[42,144429,144430,144435,144454,144461,144474,144478],{"__ignoreMap":25},[45,144431,144432],{"class":47,"line":48},[45,144433,144434],{"class":337},"\u002F* 媒体查询 *\u002F\n",[45,144436,144437,144440,144442,144445,144447,144450,144452],{"class":47,"line":66},[45,144438,144439],{"class":51},"@media",[45,144441,1809],{"class":55},[45,144443,144444],{"class":79},"max-width",[45,144446,51537],{"class":55},[45,144448,144449],{"class":79},"768",[45,144451,51592],{"class":51},[45,144453,12591],{"class":55},[45,144455,144456,144459],{"class":47,"line":1331},[45,144457,144458],{"class":69},"  .container",[45,144460,15721],{"class":55},[45,144462,144463,144466,144468,144470,144472],{"class":47,"line":1346},[45,144464,144465],{"class":79},"    width",[45,144467,51537],{"class":55},[45,144469,588],{"class":79},[45,144471,605],{"class":51},[45,144473,1442],{"class":55},[45,144475,144476],{"class":47,"line":1352},[45,144477,127448],{"class":55},[45,144479,144480],{"class":47,"line":1366},[45,144481,1716],{"class":55},[20,144483,144484],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[233,144486,144487],{"start":66},[169,144488,144489],{},"引入资源",[23,144491],{"style":126508,"src":144492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[20,144494,144495],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[249,144497,144499],{"id":144498},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[166,144501,144502,144505,144508],{},[169,144503,144504],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[169,144506,144507],{},"媒体查询可以根据不同设备宽度来修改样式",[169,144509,144510],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[15,144512,144514],{"id":144513},"_212-less基础","21.2 Less基础",[20,144516,144517],{},"css冗余度较高，不利于复用，没有很好的计算能力",[20,144519,144520],{},"Less可以解决该问题，它是css的扩展语言",[20,144522,144523,144524],{},"Less中文网址： ",[516,144525,144526],{"href":144526,"rel":144527},"http:\u002F\u002Flesscss.cn\u002F",[24012],[20,144529,144530],{},[427,144531,144532],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[249,144534,144536],{"id":144535},"_2121-less安装","21.2.1 less安装",[20,144538,144539],{},"如果使用vscode，则无需进行下方安装步骤",[20,144541,144542],{},[516,144543,144544],{"href":144544,"rel":144545},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24012],[23,144547],{"style":126508,"src":144548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[249,144550,144552],{"id":144551},"_2122-less使用","21.2.2 less使用",[20,144554,144555],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[233,144557,144558],{},[169,144559,144560],{},[427,144561,144562],{},"Less 变量",[23,144564],{"style":126508,"src":144565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[23,144567],{"style":126508,"src":144568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[233,144570,144571],{"start":66},[169,144572,144573],{},[427,144574,144575],{},"Less 编译",[23,144577],{"style":126508,"src":144578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[233,144580,144581],{"start":1331},[169,144582,144583],{},[427,144584,144585],{},"Less 嵌套",[23,144587],{"style":126508,"src":144588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[23,144590],{"style":126508,"src":144591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[233,144593,144594],{"start":1346},[169,144595,144596],{},[427,144597,144598],{},"Less 运算",[23,144600],{"style":126508,"src":144601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[20,144603,144604],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[20,144606,310],{},[166,144608,144609,144612,144615,144618,144621],{},[169,144610,144611],{},"乘号（*）和除号（\u002F）的写法",[169,144613,144614],{},"运算符中间左右有个空格隔开 1px + 5",[169,144616,144617],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[169,144619,144620],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[169,144622,144623],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[15,144625,144627],{"id":144626},"_213-rem-适配方案","21.3 rem 适配方案",[20,144629,144630],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[20,144632,144633],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[23,144635],{"style":126508,"src":144636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[249,144638,144640],{"id":144639},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[20,144642,144643],{},"rem + 媒体查询 + less 技术",[23,144645],{"style":126508,"src":144646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[20,144648,144649],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[20,144651,144652],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[23,144654],{"style":126508,"src":144655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[20,144657,144658],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[20,144660,14782],{},[23,144662],{"style":126508,"src":144663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[20,144665,144666],{},"index.html:",[36,144668,144670],{"className":126652,"code":144669,"language":126654,"meta":25,"style":25},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[42,144671,144672,144677,144683,144699,144703,144709,144725],{"__ignoreMap":25},[45,144673,144674],{"class":47,"line":48},[45,144675,144676],{"class":337},"\u002F* rem 适配方案 *\u002F\n",[45,144678,144679,144681],{"class":47,"line":66},[45,144680,50735],{"class":51400},[45,144682,15721],{"class":55},[45,144684,144685,144687,144689,144692,144694,144696],{"class":47,"line":1331},[45,144686,70726],{"class":79},[45,144688,51537],{"class":55},[45,144690,144691],{"class":79},"62.5",[45,144693,605],{"class":51},[45,144695,130515],{"class":55},[45,144697,144698],{"class":337},"\u002F* 1rem = 10px *\u002F\n",[45,144700,144701],{"class":47,"line":1346},[45,144702,1716],{"class":55},[45,144704,144705,144707],{"class":47,"line":1352},[45,144706,130500],{"class":69},[45,144708,15721],{"class":55},[45,144710,144711,144713,144715,144717,144720,144722],{"class":47,"line":1366},[45,144712,70668],{"class":79},[45,144714,51537],{"class":55},[45,144716,723],{"class":79},[45,144718,144719],{"class":51},"rem",[45,144721,130515],{"class":55},[45,144723,144724],{"class":337},"\u002F* 100px *\u002F\n",[45,144726,144727],{"class":47,"line":1372},[45,144728,1716],{"class":55},[20,144730,144731],{},"common.less",[36,144733,144735],{"className":126652,"code":144734,"language":126654,"meta":25,"style":25},"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",[42,144736,144737,144743,144758,144762,144768,144782,144786,144790,144794,144800,144814,144818,144824,144838],{"__ignoreMap":25},[45,144738,144739,144741],{"class":47,"line":48},[45,144740,50735],{"class":51400},[45,144742,15721],{"class":55},[45,144744,144745,144747,144749,144751,144753,144755],{"class":47,"line":66},[45,144746,70726],{"class":79},[45,144748,51537],{"class":55},[45,144750,144691],{"class":79},[45,144752,605],{"class":51},[45,144754,26167],{"class":55},[45,144756,144757],{"class":337},"\u002F* 10px *\u002F\n",[45,144759,144760],{"class":47,"line":1331},[45,144761,1716],{"class":55},[45,144763,144764,144766],{"class":47,"line":1346},[45,144765,51711],{"class":51400},[45,144767,15721],{"class":55},[45,144769,144770,144772,144774,144776,144778,144780],{"class":47,"line":1352},[45,144771,70668],{"class":79},[45,144773,51537],{"class":55},[45,144775,723],{"class":79},[45,144777,144719],{"class":51},[45,144779,26167],{"class":55},[45,144781,144724],{"class":337},[45,144783,144784],{"class":47,"line":1366},[45,144785,1716],{"class":55},[45,144787,144788],{"class":47,"line":1372},[45,144789,136113],{"class":55},[45,144791,144792],{"class":47,"line":1463},[45,144793,144676],{"class":337},[45,144795,144796,144798],{"class":47,"line":1469},[45,144797,50735],{"class":51400},[45,144799,15721],{"class":55},[45,144801,144802,144804,144806,144808,144810,144812],{"class":47,"line":1481},[45,144803,70726],{"class":79},[45,144805,51537],{"class":55},[45,144807,144691],{"class":79},[45,144809,605],{"class":51},[45,144811,130515],{"class":55},[45,144813,144698],{"class":337},[45,144815,144816],{"class":47,"line":1763},[45,144817,1716],{"class":55},[45,144819,144820,144822],{"class":47,"line":1768},[45,144821,130500],{"class":69},[45,144823,15721],{"class":55},[45,144825,144826,144828,144830,144832,144834,144836],{"class":47,"line":1774},[45,144827,70668],{"class":79},[45,144829,51537],{"class":55},[45,144831,723],{"class":79},[45,144833,144719],{"class":51},[45,144835,130515],{"class":55},[45,144837,144724],{"class":337},[45,144839,144840],{"class":47,"line":1779},[45,144841,1716],{"class":55},[20,144843,144844,144845,144848],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23702,144846,144847],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[36,144850,144853],{"className":144851,"code":144852,"language":5337},[5335],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[42,144854,144852],{"__ignoreMap":25},[20,144856,144857],{},"less保存时会自动变成.css文件",[20,144859,144860],{},"好好搞懂上述代码写法",[249,144862,144864],{"id":144863},"_2132-样式导入样式","21.3.2 样式导入样式",[23,144866],{"style":126508,"src":144867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[249,144869,144871],{"id":144870},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[233,144873,144874],{},[169,144875,144876],{},"准备工作",[23,144878],{"style":126508,"src":144879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[20,144881,144882,144883],{},"github地址：",[516,144884,144885],{"href":144885,"rel":144886},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24012],[20,144888,144889],{},"下载之后，将index.js文件拖到项目中就可以了",[20,144891,144892,144893],{},"js文件引入到index.html中使用的是",[42,144894,144895],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[233,144897,144898],{"start":66},[169,144899,144900],{},"vscode插件",[23,144902],{"style":126508,"src":144903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[20,144905,144906],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[20,144908,144909],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[23,144911],{"style":126508,"src":144912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[20,144914,144915],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[23,144917],{"style":126508,"src":144918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[20,144920,144921],{},"修改成75就可以，alt+z为快捷键",[20,144923,144924],{},"index.css：",[36,144926,144927],{"className":126652,"code":144669,"language":126654,"meta":25,"style":25},[42,144928,144929,144933,144939,144953,144957,144963,144977],{"__ignoreMap":25},[45,144930,144931],{"class":47,"line":48},[45,144932,144676],{"class":337},[45,144934,144935,144937],{"class":47,"line":66},[45,144936,50735],{"class":51400},[45,144938,15721],{"class":55},[45,144940,144941,144943,144945,144947,144949,144951],{"class":47,"line":1331},[45,144942,70726],{"class":79},[45,144944,51537],{"class":55},[45,144946,144691],{"class":79},[45,144948,605],{"class":51},[45,144950,130515],{"class":55},[45,144952,144698],{"class":337},[45,144954,144955],{"class":47,"line":1346},[45,144956,1716],{"class":55},[45,144958,144959,144961],{"class":47,"line":1352},[45,144960,130500],{"class":69},[45,144962,15721],{"class":55},[45,144964,144965,144967,144969,144971,144973,144975],{"class":47,"line":1366},[45,144966,70668],{"class":79},[45,144968,51537],{"class":55},[45,144970,723],{"class":79},[45,144972,144719],{"class":51},[45,144974,130515],{"class":55},[45,144976,144724],{"class":337},[45,144978,144979],{"class":47,"line":1372},[45,144980,1716],{"class":55},[20,144982,144666],{},[36,144984,144985],{"className":126652,"code":127056,"language":126654,"meta":25,"style":25},[42,144986,144987,144993,145005],{"__ignoreMap":25},[45,144988,144989,144991],{"class":47,"line":48},[45,144990,51900],{"class":51400},[45,144992,15721],{"class":55},[45,144994,144995,144997,144999,145001,145003],{"class":47,"line":66},[45,144996,70726],{"class":79},[45,144998,51537],{"class":55},[45,145000,878],{"class":79},[45,145002,51592],{"class":51},[45,145004,1442],{"class":55},[45,145006,145007],{"class":47,"line":1331},[45,145008,1716],{"class":55},[15,145010,145012],{"id":145011},"_214-响应式开发","21.4 响应式开发",[20,145014,145015],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[23,145017],{"style":126508,"src":145018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[20,145020,145021],{},"做法：",[166,145023,145024,145027],{},[169,145025,145026],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[169,145028,145029],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[23,145031],{"style":126508,"src":145032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[20,145034,145035],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[249,145037,145039],{"id":145038},"_2141-简单代码示范","21.4.1 简单代码示范",[36,145041,145042],{"className":126652,"code":144669,"language":126654,"meta":25,"style":25},[42,145043,145044,145048,145054,145068,145072,145078,145092],{"__ignoreMap":25},[45,145045,145046],{"class":47,"line":48},[45,145047,144676],{"class":337},[45,145049,145050,145052],{"class":47,"line":66},[45,145051,50735],{"class":51400},[45,145053,15721],{"class":55},[45,145055,145056,145058,145060,145062,145064,145066],{"class":47,"line":1331},[45,145057,70726],{"class":79},[45,145059,51537],{"class":55},[45,145061,144691],{"class":79},[45,145063,605],{"class":51},[45,145065,130515],{"class":55},[45,145067,144698],{"class":337},[45,145069,145070],{"class":47,"line":1346},[45,145071,1716],{"class":55},[45,145073,145074,145076],{"class":47,"line":1352},[45,145075,130500],{"class":69},[45,145077,15721],{"class":55},[45,145079,145080,145082,145084,145086,145088,145090],{"class":47,"line":1366},[45,145081,70668],{"class":79},[45,145083,51537],{"class":55},[45,145085,723],{"class":79},[45,145087,144719],{"class":51},[45,145089,130515],{"class":55},[45,145091,144724],{"class":337},[45,145093,145094],{"class":47,"line":1372},[45,145095,1716],{"class":55},[20,145097,145098],{},"父盒子一般命名为container",[249,145100,145102],{"id":145101},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[20,145104,145105,145106],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[427,145107,145108],{},"使得 Web 开发更加快捷",[166,145110,145111],{},[169,145112,145113,145114],{},"官网：",[427,145115,145116],{},[516,145117,145118],{"href":145118,"rel":145119},"http:\u002F\u002Fgetbootstrap.com\u002F",[24012],[20,145121,145122],{},"可以直接去官网拿现成的东西",[233,145124,145125],{},[169,145126,145127],{},"Bootstrap的使用",[20,145129,145130],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[20,145132,145133],{},"Bootstrap 使用四步曲：",[20,145135,145136,145139],{},[427,145137,145138],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[23,145141],{"style":126508,"src":145142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[20,145144,145145],{},"打开Bootstrap官网，然后下载",[23,145147],{"style":126508,"src":145148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[23,145150],{"style":126508,"src":145151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[20,145153,145154],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[20,145156,145157],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[20,145159,145160],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[23,145162],{"style":126508,"src":145163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[36,145165,145167],{"className":126652,"code":145166,"language":126654,"meta":25,"style":25},".center {\n  color: red;\n}\n",[42,145168,145169,145175,145185],{"__ignoreMap":25},[45,145170,145171,145173],{"class":47,"line":48},[45,145172,126943],{"class":69},[45,145174,15721],{"class":55},[45,145176,145177,145179,145181,145183],{"class":47,"line":66},[45,145178,71005],{"class":79},[45,145180,51537],{"class":55},[45,145182,57521],{"class":79},[45,145184,1442],{"class":55},[45,145186,145187],{"class":47,"line":1331},[45,145188,1716],{"class":55},[20,145190,145191,145194],{},[42,145192,145193],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[23,145196],{"style":126508,"src":145197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[23,145199],{"style":126508,"src":145200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[23,145202],{"style":126508,"src":145203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[20,145205,145206],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[23,145208],{"style":126508,"src":145209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[20,145211,145212],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[233,145214,145215],{"start":66},[169,145216,145217],{},"布局容器",[23,145219],{"style":126508,"src":145220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[20,145222,145223],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[20,145225,145226],{},"container-fluid用于移动式布局比较方便",[233,145228,145229],{"start":1331},[169,145230,145231,145232],{},"bootstrap ",[427,145233,145234],{},"栅格系统原理",[23,145236],{"style":126508,"src":145237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[233,145239,145240],{"start":1346},[169,145241,145242],{},[427,145243,145244],{},"栅格选项参数",[23,145246],{"style":126508,"src":145247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[20,145249,145250],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[20,145252,14782],{},[36,145254,145255],{"className":126652,"code":145166,"language":126654,"meta":25,"style":25},[42,145256,145257,145263,145273],{"__ignoreMap":25},[45,145258,145259,145261],{"class":47,"line":48},[45,145260,126943],{"class":69},[45,145262,15721],{"class":55},[45,145264,145265,145267,145269,145271],{"class":47,"line":66},[45,145266,71005],{"class":79},[45,145268,51537],{"class":55},[45,145270,57521],{"class":79},[45,145272,1442],{"class":55},[45,145274,145275],{"class":47,"line":1331},[45,145276,1716],{"class":55},[20,145278,135695],{},[23,145280],{"style":126508,"src":145281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[20,145283,145284],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[20,145286,145287],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[20,145289,145290],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[20,145292,145293],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[20,145295,145296],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[20,145298,145299],{},"汇总展示说明：",[36,145301,145302],{"className":127399,"code":130756,"language":127401,"meta":25,"style":25},[42,145303,145304,145308,145322,145326],{"__ignoreMap":25},[45,145305,145306],{"class":47,"line":48},[45,145307,130763],{"class":337},[45,145309,145310,145312,145314,145316,145318,145320],{"class":47,"line":66},[45,145311,1187],{"class":55},[45,145313,51711],{"class":51400},[45,145315,53586],{"class":69},[45,145317,59],{"class":55},[45,145319,130776],{"class":62},[45,145321,51407],{"class":55},[45,145323,145324],{"class":47,"line":1331},[45,145325,130783],{"class":55},[45,145327,145328,145330,145332],{"class":47,"line":1346},[45,145329,51885],{"class":55},[45,145331,51711],{"class":51400},[45,145333,51407],{"class":55},[23,145335],{"style":126508,"src":145336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[20,145338,145339],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[36,145341,145342],{"className":127399,"code":130756,"language":127401,"meta":25,"style":25},[42,145343,145344,145348,145362,145366],{"__ignoreMap":25},[45,145345,145346],{"class":47,"line":48},[45,145347,130763],{"class":337},[45,145349,145350,145352,145354,145356,145358,145360],{"class":47,"line":66},[45,145351,1187],{"class":55},[45,145353,51711],{"class":51400},[45,145355,53586],{"class":69},[45,145357,59],{"class":55},[45,145359,130776],{"class":62},[45,145361,51407],{"class":55},[45,145363,145364],{"class":47,"line":1331},[45,145365,130783],{"class":55},[45,145367,145368,145370,145372],{"class":47,"line":1346},[45,145369,51885],{"class":55},[45,145371,51711],{"class":51400},[45,145373,51407],{"class":55},[233,145375,145376],{"start":1352},[169,145377,145378],{},[427,145379,145380],{},"列嵌套",[23,145382],{"style":126508,"src":145383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[20,145385,145386],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[20,145388,145389],{},"没加row内部这样：",[23,145391],{"style":126508,"src":145392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[20,145394,145395],{},"加上row之后内部为：",[23,145397],{"style":126508,"src":145398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[233,145400,145401],{"start":1366},[169,145402,145403],{},[427,145404,145405],{},"列偏移",[23,145407],{"style":126508,"src":145408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[20,145410,145411],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[20,145413,145414],{},"要加偏移量，即偏移份数",[20,145416,145417],{},"偏移的份数=12-两个盒子的份数",[233,145419,145420],{"start":1372},[169,145421,145422],{},[427,145423,145424],{},"列排序",[23,145426],{"style":126508,"src":145427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[20,145429,145430],{},"pull拉左；push推右",[233,145432,145433],{"start":1463},[169,145434,145435],{},[427,145436,145437],{},"响应式工具",[23,145439],{"style":126508,"src":145440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[20,145442,145443],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[249,145445,145447],{"id":145446},"_2143-响应式小项目","21.4.3 响应式小项目",[20,145449,145450],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[20,145452,145453],{},"ul {",[20,145455,145456],{},"list-style: none;",[20,145458,145459],{},"margin:0;",[20,145461,145462],{},"padding:0; }",[23,145464],{"style":126508,"src":145465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[23,145467],{"style":126508,"src":145468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[20,145470,145471],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[20,145473,68989],{},[36,145475,145476],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},[42,145477,145478,145484,145494],{"__ignoreMap":25},[45,145479,145480,145482],{"class":47,"line":48},[45,145481,130500],{"class":69},[45,145483,15721],{"class":55},[45,145485,145486,145488,145490,145492],{"class":47,"line":66},[45,145487,131132],{"class":79},[45,145489,51537],{"class":55},[45,145491,23885],{"class":79},[45,145493,1442],{"class":55},[45,145495,145496],{"class":47,"line":1331},[45,145497,1716],{"class":55},[20,145499,70553],{},[36,145501,145502],{"className":126652,"code":139322,"language":126654,"meta":25,"style":25},[42,145503,145504,145510,145520],{"__ignoreMap":25},[45,145505,145506,145508],{"class":47,"line":48},[45,145507,130500],{"class":69},[45,145509,15721],{"class":55},[45,145511,145512,145514,145516,145518],{"class":47,"line":66},[45,145513,131132],{"class":79},[45,145515,51537],{"class":55},[45,145517,23885],{"class":79},[45,145519,1442],{"class":55},[45,145521,145522],{"class":47,"line":1331},[45,145523,1716],{"class":55},[15,145525,145527],{"id":145526},"_215-swiper-插件使用","21.5 swiper 插件使用",[166,145529,145530,145533,145536],{},[169,145531,145532],{},"下载需要的css和js文件html页面中 引入相关文件",[169,145534,145535],{},"官网找到类似案例，复制html结构，css样式 js 语法",[169,145537,145538],{},"根据需求定制修改模块",[23,145540],{"style":126508,"src":145541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[20,145543,145544],{},"解压后将这两部分放到项目中",[23,145546],{"style":126508,"src":145547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[20,145549,145550],{},"这个插件可以帮助我们实现轮播图效果",[20,145552,145553],{},"用法：",[23,145555],{"style":126508,"src":145556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[20,145558,145559],{},"找到自己喜欢的",[23,145561],{"style":126508,"src":145562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[20,145564,145565],{},"右键，查看网页源代码",[23,145567],{"style":126508,"src":145568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[20,145570,145571],{},"复制人家的结构内容",[20,145573,145574],{},"然后去看API文档：",[23,145576],{"style":126508,"src":145577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[20,145579,145580],{},"可以看看如何修改样式",[20,145582,145583],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[196,145585,145586],{},"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":25,"searchDepth":66,"depth":66,"links":145588},[145589,145594,145598,145603,145608],{"id":144389,"depth":66,"text":144390,"children":145590},[145591,145592,145593],{"id":144393,"depth":1331,"text":144394},{"id":144403,"depth":1331,"text":144404},{"id":144498,"depth":1331,"text":144499},{"id":144513,"depth":66,"text":144514,"children":145595},[145596,145597],{"id":144535,"depth":1331,"text":144536},{"id":144551,"depth":1331,"text":144552},{"id":144626,"depth":66,"text":144627,"children":145599},[145600,145601,145602],{"id":144639,"depth":1331,"text":144640},{"id":144863,"depth":1331,"text":144864},{"id":144870,"depth":1331,"text":144871},{"id":145011,"depth":66,"text":145012,"children":145604},[145605,145606,145607],{"id":145038,"depth":1331,"text":145039},{"id":145101,"depth":1331,"text":145102},{"id":145446,"depth":1331,"text":145447},{"id":145526,"depth":66,"text":145527},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144381,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145615,"title":145616,"body":145617,"description":204,"extension":205,"meta":145837,"navigation":207,"path":145838,"seo":145839,"stem":145840,"__hash__":145841},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145618,"toc":145833},[145619,145622,145626,145629,145644,145649,145652,145657,145692,145697,145709,145714,145727,145732,145749,145754,145774,145779,145797,145800,145803,145806,145809,145813,145816,145819,145822,145825,145828,145831],[10,145620,145616],{"id":145621},"_22-代码提交与新型相对单位",[15,145623,145625],{"id":145624},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[20,145627,145628],{},"法1：",[233,145630,145631,145638,145641],{},[169,145632,145633,145634],{},"登录网站注册：",[516,145635,145636],{"href":145636,"rel":145637},"https:\u002F\u002Fgitee.com\u002F",[24012],[169,145639,145640],{},"码云创建新的仓库",[169,145642,145643],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[166,145645,145646],{},[169,145647,145648],{},"在网站根目录右键-- Git Bash Here",[23,145650],{"style":126508,"src":145651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[166,145653,145654],{},[169,145655,145656],{},"如果是第一次利用git提交，请配置好全局选项",[36,145658,145660],{"className":117396,"code":145659,"language":117398,"meta":25,"style":25},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[42,145661,145662,145678],{"__ignoreMap":25},[45,145663,145664,145667,145669,145672,145675],{"class":47,"line":48},[45,145665,145666],{"class":69},"git",[45,145668,119819],{"class":62},[45,145670,145671],{"class":79}," --global",[45,145673,145674],{"class":62}," user.name",[45,145676,145677],{"class":62}," \"你的名字\"\n",[45,145679,145680,145682,145684,145686,145689],{"class":47,"line":66},[45,145681,145666],{"class":69},[45,145683,119819],{"class":62},[45,145685,145671],{"class":79},[45,145687,145688],{"class":62}," user.email",[45,145690,145691],{"class":62}," \"你的邮箱\"\n",[166,145693,145694],{},[169,145695,145696],{},"初始化仓库",[36,145698,145700],{"className":117396,"code":145699,"language":117398,"meta":25,"style":25},"git init\n",[42,145701,145702],{"__ignoreMap":25},[45,145703,145704,145706],{"class":47,"line":48},[45,145705,145666],{"class":69},[45,145707,145708],{"class":62}," init\n",[166,145710,145711],{},[169,145712,145713],{},"把本地文件放到暂存区",[36,145715,145717],{"className":117396,"code":145716,"language":117398,"meta":25,"style":25},"git add .\n",[42,145718,145719],{"__ignoreMap":25},[45,145720,145721,145723,145725],{"class":47,"line":48},[45,145722,145666],{"class":69},[45,145724,5359],{"class":62},[45,145726,28841],{"class":62},[166,145728,145729],{},[169,145730,145731],{},"把本地文件放到本地仓库里面",[36,145733,145735],{"className":117396,"code":145734,"language":117398,"meta":25,"style":25},"git commit -m \"first commit\"\n",[42,145736,145737],{"__ignoreMap":25},[45,145738,145739,145741,145744,145746],{"class":47,"line":48},[45,145740,145666],{"class":69},[45,145742,145743],{"class":62}," commit",[45,145745,100982],{"class":79},[45,145747,145748],{"class":62}," \"first commit\"\n",[166,145750,145751],{},[169,145752,145753],{},"链接远程仓库",[36,145755,145757],{"className":117396,"code":145756,"language":117398,"meta":25,"style":25},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[42,145758,145759],{"__ignoreMap":25},[45,145760,145761,145763,145766,145768,145771],{"class":47,"line":48},[45,145762,145666],{"class":69},[45,145764,145765],{"class":62}," remote",[45,145767,5359],{"class":62},[45,145769,145770],{"class":62}," origin",[45,145772,145773],{"class":62}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[166,145775,145776],{},[169,145777,145778],{},"把本地仓库的文件推送到远程仓库 push",[36,145780,145782],{"className":117396,"code":145781,"language":117398,"meta":25,"style":25},"git push -u origin master\n",[42,145783,145784],{"__ignoreMap":25},[45,145785,145786,145788,145790,145792,145794],{"class":47,"line":48},[45,145787,145666],{"class":69},[45,145789,29116],{"class":62},[45,145791,28390],{"class":79},[45,145793,145770],{"class":62},[45,145795,145796],{"class":62}," master\n",[23,145798],{"style":126508,"src":145799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[20,145801,145802],{},"上方方法暂未实现，后边学完git后在整",[20,145804,145805],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[23,145807],{"style":126508,"src":145808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[15,145810,145812],{"id":145811},"_222-新型相对单位","22.2 新型相对单位",[23,145814],{"style":126508,"src":145815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[23,145817],{"style":126508,"src":145818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[20,145820,145821],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[20,145823,145824],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[23,145826],{"style":126508,"src":145827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[20,145829,145830],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[196,145832,24105],{},{"title":25,"searchDepth":66,"depth":66,"links":145834},[145835,145836],{"id":145624,"depth":66,"text":145625},{"id":145811,"depth":66,"text":145812},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145616,"description":204},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145843,"title":145844,"body":145845,"description":145849,"extension":205,"meta":145850,"navigation":207,"path":145851,"seo":145852,"stem":145853,"__hash__":145854},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145846,"toc":145847},[],{"title":25,"searchDepth":66,"depth":66,"links":145848},[],"自己正经开始学编程的第一门语言！",{"category":92939},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145844,"description":145849},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145856,"title":145857,"body":145858,"description":204,"extension":205,"meta":147005,"navigation":207,"path":147006,"seo":147007,"stem":147008,"__hash__":147009},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145859,"toc":146981},[145860,145863,145867,145870,145873,145898,145901,145907,145911,145914,145941,145944,145984,145987,145999,146002,146008,146012,146016,146043,146060,146067,146071,146074,146100,146103,146107,146110,146150,146153,146170,146176,146180,146185,146229,146232,146250,146253,146321,146325,146332,146335,146350,146353,146362,146365,146376,146379,146388,146391,146408,146411,146426,146430,146434,146437,146439,146459,146463,146466,146469,146480,146483,146489,146493,146499,146526,146529,146541,146544,146555,146558,146564,146568,146574,146624,146627,146669,146672,146705,146708,146742,146746,146749,146769,146772,146808,146811,146824,146828,146832,146838,146841,146854,146858,146861,146867,146870,146874,146877,146880,146929,146933,146949,146955,146962,146968,146978],[10,145861,145857],{"id":145862},"_1-python环境与第一个程序",[15,145864,145866],{"id":145865},"_11-什么是python","1.1 什么是Python",[20,145868,145869],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[20,145871,145872],{},"理解 Python 时抓住三个关键词：",[233,145874,145875,145878,145881],{},[169,145876,145877],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[169,145879,145880],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[169,145882,145883,145884,490,145887,490,145890,490,145893,490,145895,28485],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[42,145885,145886],{},"os",[42,145888,145889],{},"sys",[42,145891,145892],{},"json",[42,145894,57960],{},[42,145896,145897],{},"datetime",[20,145899,145900],{},"Python 程序的运行链路：",[36,145902,145905],{"className":145903,"code":145904,"language":5337,"meta":25},[5335],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[42,145906,145904],{"__ignoreMap":25},[15,145908,145910],{"id":145909},"_12-python解释器","1.2 Python解释器",[20,145912,145913],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[36,145915,145917],{"className":38,"code":145916,"language":40,"meta":25,"style":25},"python --version\npython3 --version\npython\npython3\n",[42,145918,145919,145925,145931,145936],{"__ignoreMap":25},[45,145920,145921,145923],{"class":47,"line":48},[45,145922,30480],{"class":69},[45,145924,26393],{"class":79},[45,145926,145927,145929],{"class":47,"line":66},[45,145928,100979],{"class":69},[45,145930,26393],{"class":79},[45,145932,145933],{"class":47,"line":1331},[45,145934,145935],{"class":69},"python\n",[45,145937,145938],{"class":47,"line":1346},[45,145939,145940],{"class":69},"python3\n",[20,145942,145943],{},"进入交互模式后，可以直接输入表达式：",[36,145945,145947],{"className":30478,"code":145946,"language":30480,"meta":25,"style":25},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[42,145948,145949,145960,145965,145979],{"__ignoreMap":25},[45,145950,145951,145954,145956,145958],{"class":47,"line":48},[45,145952,145953],{"class":51},">>>",[45,145955,136],{"class":79},[45,145957,45666],{"class":51},[45,145959,47823],{"class":79},[45,145961,145962],{"class":47,"line":66},[45,145963,145964],{"class":79},"3\n",[45,145966,145967,145969,145972,145974,145977],{"class":47,"line":1331},[45,145968,145953],{"class":51},[45,145970,145971],{"class":79}," print",[45,145973,282],{"class":55},[45,145975,145976],{"class":62},"\"hello python\"",[45,145978,139],{"class":55},[45,145980,145981],{"class":47,"line":1346},[45,145982,145983],{"class":55},"hello python\n",[20,145985,145986],{},"退出交互模式：",[36,145988,145990],{"className":30478,"code":145989,"language":30480,"meta":25,"style":25},"exit()\n",[42,145991,145992],{"__ignoreMap":25},[45,145993,145994,145997],{"class":47,"line":48},[45,145995,145996],{"class":79},"exit",[45,145998,2126],{"class":55},[20,146000,146001],{},"或使用快捷键：",[36,146003,146006],{"className":146004,"code":146005,"language":5337,"meta":25},[5335],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[42,146007,146005],{"__ignoreMap":25},[15,146009,146011],{"id":146010},"_13-安装python","1.3 安装Python",[249,146013,146015],{"id":146014},"_131-windows安装","1.3.1 Windows安装",[233,146017,146018,146025,146028,146034,146040],{},[169,146019,146020,146021],{},"打开 Python 官网：",[516,146022,146023],{"href":146023,"rel":146024},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24012],[169,146026,146027],{},"下载 Windows Installer。",[169,146029,146030,146031,28485],{},"安装时勾选 ",[42,146032,146033],{},"Add Python to PATH",[169,146035,146036,146037,28485],{},"点击 ",[42,146038,146039],{},"Install Now",[169,146041,146042],{},"安装完成后打开命令提示符验证：",[36,146044,146046],{"className":38,"code":146045,"language":40,"meta":25,"style":25},"python --version\npip --version\n",[42,146047,146048,146054],{"__ignoreMap":25},[45,146049,146050,146052],{"class":47,"line":48},[45,146051,30480],{"class":69},[45,146053,26393],{"class":79},[45,146055,146056,146058],{"class":47,"line":66},[45,146057,23978],{"class":69},[45,146059,26393],{"class":79},[20,146061,146062,146063,146066],{},"如果提示 ",[42,146064,146065],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[249,146068,146070],{"id":146069},"_132-macos安装","1.3.2 macOS安装",[20,146072,146073],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[36,146075,146077],{"className":38,"code":146076,"language":40,"meta":25,"style":25},"brew install python\npython3 --version\npip3 --version\n",[42,146078,146079,146088,146094],{"__ignoreMap":25},[45,146080,146081,146084,146086],{"class":47,"line":48},[45,146082,146083],{"class":69},"brew",[45,146085,23981],{"class":62},[45,146087,124418],{"class":62},[45,146089,146090,146092],{"class":47,"line":66},[45,146091,100979],{"class":69},[45,146093,26393],{"class":79},[45,146095,146096,146098],{"class":47,"line":1331},[45,146097,119800],{"class":69},[45,146099,26393],{"class":79},[20,146101,146102],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[249,146104,146106],{"id":146105},"_133-linux安装","1.3.3 Linux安装",[20,146108,146109],{},"Ubuntu\u002FDebian：",[36,146111,146113],{"className":38,"code":146112,"language":40,"meta":25,"style":25},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[42,146114,146115,146123,146138,146144],{"__ignoreMap":25},[45,146116,146117,146119,146121],{"class":47,"line":48},[45,146118,24724],{"class":69},[45,146120,117417],{"class":62},[45,146122,26342],{"class":62},[45,146124,146125,146127,146129,146131,146133,146135],{"class":47,"line":66},[45,146126,24724],{"class":69},[45,146128,117417],{"class":62},[45,146130,23981],{"class":62},[45,146132,104503],{"class":62},[45,146134,100898],{"class":62},[45,146136,146137],{"class":62}," python3-venv\n",[45,146139,146140,146142],{"class":47,"line":1331},[45,146141,100979],{"class":69},[45,146143,26393],{"class":79},[45,146145,146146,146148],{"class":47,"line":1346},[45,146147,119800],{"class":69},[45,146149,26393],{"class":79},[20,146151,146152],{},"Fedora：",[36,146154,146156],{"className":38,"code":146155,"language":40,"meta":25,"style":25},"sudo dnf install python3 python3-pip\n",[42,146157,146158],{"__ignoreMap":25},[45,146159,146160,146162,146164,146166,146168],{"class":47,"line":48},[45,146161,24724],{"class":69},[45,146163,26415],{"class":62},[45,146165,23981],{"class":62},[45,146167,104503],{"class":62},[45,146169,119865],{"class":62},[20,146171,146172,146173,146175],{},"Linux 上通常使用 ",[42,146174,100979],{}," 命令，避免和系统旧版本 Python 冲突。",[15,146177,146179],{"id":146178},"_14-pip包管理器","1.4 pip包管理器",[20,146181,146182,146184],{},[42,146183,23978],{}," 用来安装第三方库。",[36,146186,146188],{"className":38,"code":146187,"language":40,"meta":25,"style":25},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[42,146189,146190,146199,146208,146216,146222],{"__ignoreMap":25},[45,146191,146192,146194,146196],{"class":47,"line":48},[45,146193,23978],{"class":69},[45,146195,23981],{"class":62},[45,146197,146198],{"class":62}," requests\n",[45,146200,146201,146203,146206],{"class":47,"line":66},[45,146202,23978],{"class":69},[45,146204,146205],{"class":62}," uninstall",[45,146207,146198],{"class":62},[45,146209,146210,146212,146214],{"class":47,"line":1331},[45,146211,23978],{"class":69},[45,146213,117674],{"class":62},[45,146215,146198],{"class":62},[45,146217,146218,146220],{"class":47,"line":1346},[45,146219,23978],{"class":69},[45,146221,119055],{"class":62},[45,146223,146224,146226],{"class":47,"line":1352},[45,146225,23978],{"class":69},[45,146227,146228],{"class":62}," freeze\n",[20,146230,146231],{},"国内网络较慢时可以临时使用镜像：",[36,146233,146235],{"className":38,"code":146234,"language":40,"meta":25,"style":25},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[42,146236,146237],{"__ignoreMap":25},[45,146238,146239,146241,146243,146246,146248],{"class":47,"line":48},[45,146240,23978],{"class":69},[45,146242,23981],{"class":62},[45,146244,146245],{"class":62}," requests",[45,146247,26530],{"class":79},[45,146249,119828],{"class":62},[20,146251,146252],{},"常见第三方库：",[415,146254,146255,146264],{},[418,146256,146257],{},[421,146258,146259,146262],{},[424,146260,146261],{},"库",[424,146263,102796],{},[462,146265,146266,146274,146281,146289,146297,146305,146313],{},[421,146267,146268,146271],{},[467,146269,146270],{},"requests",[467,146272,146273],{},"网络请求",[421,146275,146276,146278],{},[467,146277,100726],{},[467,146279,146280],{},"数值计算",[421,146282,146283,146286],{},[467,146284,146285],{},"pandas",[467,146287,146288],{},"表格数据处理",[421,146290,146291,146294],{},[467,146292,146293],{},"matplotlib",[467,146295,146296],{},"绘图",[421,146298,146299,146302],{},[467,146300,146301],{},"pyecharts",[467,146303,146304],{},"ECharts 图表",[421,146306,146307,146310],{},[467,146308,146309],{},"flask",[467,146311,146312],{},"Web 后端",[421,146314,146315,146318],{},[467,146316,146317],{},"pytest",[467,146319,146320],{},"自动化测试",[15,146322,146324],{"id":146323},"_15-虚拟环境","1.5 虚拟环境",[20,146326,146327,146328,146331],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[42,146329,146330],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[20,146333,146334],{},"创建虚拟环境：",[36,146336,146338],{"className":38,"code":146337,"language":40,"meta":25,"style":25},"python -m venv .venv\n",[42,146339,146340],{"__ignoreMap":25},[45,146341,146342,146344,146346,146348],{"class":47,"line":48},[45,146343,30480],{"class":69},[45,146345,100982],{"class":79},[45,146347,100985],{"class":62},[45,146349,100988],{"class":62},[20,146351,146352],{},"Windows 激活：",[36,146354,146356],{"className":38,"code":146355,"language":40,"meta":25,"style":25},".venv\\Scripts\\activate\n",[42,146357,146358],{"__ignoreMap":25},[45,146359,146360],{"class":47,"line":48},[45,146361,146355],{"class":69},[20,146363,146364],{},"macOS\u002FLinux 激活：",[36,146366,146368],{"className":38,"code":146367,"language":40,"meta":25,"style":25},"source .venv\u002Fbin\u002Factivate\n",[42,146369,146370],{"__ignoreMap":25},[45,146371,146372,146374],{"class":47,"line":48},[45,146373,100993],{"class":79},[45,146375,100996],{"class":62},[20,146377,146378],{},"退出虚拟环境：",[36,146380,146382],{"className":38,"code":146381,"language":40,"meta":25,"style":25},"deactivate\n",[42,146383,146384],{"__ignoreMap":25},[45,146385,146386],{"class":47,"line":48},[45,146387,146381],{"class":69},[20,146389,146390],{},"保存依赖：",[36,146392,146394],{"className":38,"code":146393,"language":40,"meta":25,"style":25},"pip freeze > requirements.txt\n",[42,146395,146396],{"__ignoreMap":25},[45,146397,146398,146400,146403,146405],{"class":47,"line":48},[45,146399,23978],{"class":69},[45,146401,146402],{"class":62}," freeze",[45,146404,26322],{"class":51},[45,146406,146407],{"class":62}," requirements.txt\n",[20,146409,146410],{},"安装依赖：",[36,146412,146414],{"className":38,"code":146413,"language":40,"meta":25,"style":25},"pip install -r requirements.txt\n",[42,146415,146416],{"__ignoreMap":25},[45,146417,146418,146420,146422,146424],{"class":47,"line":48},[45,146419,23978],{"class":69},[45,146421,23981],{"class":62},[45,146423,119739],{"class":79},[45,146425,146407],{"class":62},[15,146427,146429],{"id":146428},"_16-开发工具","1.6 开发工具",[249,146431,146433],{"id":146432},"_161-pycharm","1.6.1 PyCharm",[20,146435,146436],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[20,146438,122162],{},[233,146440,146441,146444,146447,146453,146456],{},[169,146442,146443],{},"New Project：创建项目。",[169,146445,146446],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[169,146448,146449,146450,126083],{},"New Python File：创建 ",[42,146451,146452],{},".py",[169,146454,146455],{},"Run：运行当前文件。",[169,146457,146458],{},"Debug：断点调试。",[249,146460,146462],{"id":146461},"_162-vs-code","1.6.2 VS Code",[20,146464,146465],{},"VS Code 轻量，适合后续多语言开发。",[20,146467,146468],{},"建议安装插件：",[233,146470,146471,146474,146477],{},[169,146472,146473],{},"Python。",[169,146475,146476],{},"Pylance。",[169,146478,146479],{},"Jupyter。",[20,146481,146482],{},"选择解释器：",[36,146484,146487],{"className":146485,"code":146486,"language":5337,"meta":25},[5335],"Ctrl + Shift + P -> Python: Select Interpreter\n",[42,146488,146486],{"__ignoreMap":25},[15,146490,146492],{"id":146491},"_17-第一个python程序","1.7 第一个Python程序",[20,146494,146495,146496,24766],{},"创建文件 ",[42,146497,146498],{},"hello.py",[36,146500,146502],{"className":30478,"code":146501,"language":30480,"meta":25,"style":25},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[42,146503,146504,146515],{"__ignoreMap":25},[45,146505,146506,146508,146510,146513],{"class":47,"line":48},[45,146507,30515],{"class":79},[45,146509,282],{"class":55},[45,146511,146512],{"class":62},"\"Hello World\"",[45,146514,139],{"class":55},[45,146516,146517,146519,146521,146524],{"class":47,"line":66},[45,146518,30515],{"class":79},[45,146520,282],{"class":55},[45,146522,146523],{"class":62},"\"你好，Python\"",[45,146525,139],{"class":55},[20,146527,146528],{},"在终端运行：",[36,146530,146532],{"className":38,"code":146531,"language":40,"meta":25,"style":25},"python hello.py\n",[42,146533,146534],{"__ignoreMap":25},[45,146535,146536,146538],{"class":47,"line":48},[45,146537,30480],{"class":69},[45,146539,146540],{"class":62}," hello.py\n",[20,146542,146543],{},"或：",[36,146545,146547],{"className":38,"code":146546,"language":40,"meta":25,"style":25},"python3 hello.py\n",[42,146548,146549],{"__ignoreMap":25},[45,146550,146551,146553],{"class":47,"line":48},[45,146552,100979],{"class":69},[45,146554,146540],{"class":62},[20,146556,146557],{},"输出：",[36,146559,146562],{"className":146560,"code":146561,"language":5337,"meta":25},[5335],"Hello World\n你好，Python\n",[42,146563,146561],{"__ignoreMap":25},[15,146565,146567],{"id":146566},"_18-print函数","1.8 print函数",[20,146569,146570,146573],{},[42,146571,146572],{},"print()"," 用来输出内容。",[36,146575,146577],{"className":30478,"code":146576,"language":30480,"meta":25,"style":25},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[42,146578,146579,146589,146599,146609],{"__ignoreMap":25},[45,146580,146581,146583,146585,146587],{"class":47,"line":48},[45,146582,30515],{"class":79},[45,146584,282],{"class":55},[45,146586,5994],{"class":62},[45,146588,139],{"class":55},[45,146590,146591,146593,146595,146597],{"class":47,"line":66},[45,146592,30515],{"class":79},[45,146594,282],{"class":55},[45,146596,588],{"class":79},[45,146598,139],{"class":55},[45,146600,146601,146603,146605,146607],{"class":47,"line":1331},[45,146602,30515],{"class":79},[45,146604,282],{"class":55},[45,146606,328],{"class":79},[45,146608,139],{"class":55},[45,146610,146611,146613,146615,146618,146620,146622],{"class":47,"line":1346},[45,146612,30515],{"class":79},[45,146614,282],{"class":55},[45,146616,146617],{"class":62},"\"年龄:\"",[45,146619,12584],{"class":55},[45,146621,927],{"class":79},[45,146623,139],{"class":55},[20,146625,146626],{},"多个内容用逗号隔开，默认中间加空格：",[36,146628,146630],{"className":30478,"code":146629,"language":30480,"meta":25,"style":25},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[42,146631,146632,146642,146652],{"__ignoreMap":25},[45,146633,146634,146637,146639],{"class":47,"line":48},[45,146635,146636],{"class":55},"name ",[45,146638,59],{"class":51},[45,146640,146641],{"class":62}," \"张三\"\n",[45,146643,146644,146647,146649],{"class":47,"line":66},[45,146645,146646],{"class":55},"age ",[45,146648,59],{"class":51},[45,146650,146651],{"class":79}," 18\n",[45,146653,146654,146656,146658,146661,146664,146666],{"class":47,"line":1331},[45,146655,30515],{"class":79},[45,146657,282],{"class":55},[45,146659,146660],{"class":62},"\"姓名:\"",[45,146662,146663],{"class":55},", name, ",[45,146665,146617],{"class":62},[45,146667,146668],{"class":55},", age)\n",[20,146670,146671],{},"修改分隔符：",[36,146673,146675],{"className":30478,"code":146674,"language":30480,"meta":25,"style":25},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[42,146676,146677],{"__ignoreMap":25},[45,146678,146679,146681,146683,146686,146688,146690,146692,146694,146696,146699,146701,146703],{"class":47,"line":48},[45,146680,30515],{"class":79},[45,146682,282],{"class":55},[45,146684,146685],{"class":62},"\"2024\"",[45,146687,12584],{"class":55},[45,146689,54416],{"class":62},[45,146691,12584],{"class":55},[45,146693,54416],{"class":62},[45,146695,12584],{"class":55},[45,146697,146698],{"class":5366},"sep",[45,146700,59],{"class":51},[45,146702,32583],{"class":62},[45,146704,139],{"class":55},[20,146706,146707],{},"修改结尾符：",[36,146709,146711],{"className":30478,"code":146710,"language":30480,"meta":25,"style":25},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[42,146712,146713,146731],{"__ignoreMap":25},[45,146714,146715,146717,146719,146721,146723,146725,146727,146729],{"class":47,"line":48},[45,146716,30515],{"class":79},[45,146718,282],{"class":55},[45,146720,5994],{"class":62},[45,146722,12584],{"class":55},[45,146724,45901],{"class":5366},[45,146726,59],{"class":51},[45,146728,4509],{"class":62},[45,146730,139],{"class":55},[45,146732,146733,146735,146737,146740],{"class":47,"line":66},[45,146734,30515],{"class":79},[45,146736,282],{"class":55},[45,146738,146739],{"class":62},"\"python\"",[45,146741,139],{"class":55},[15,146743,146745],{"id":146744},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[20,146747,146748],{},"交互运行适合临时验证：",[36,146750,146752],{"className":30478,"code":146751,"language":30480,"meta":25,"style":25},">>> 10 * 3\n30\n",[42,146753,146754,146764],{"__ignoreMap":25},[45,146755,146756,146758,146760,146762],{"class":47,"line":48},[45,146757,145953],{"class":51},[45,146759,2188],{"class":79},[45,146761,6668],{"class":51},[45,146763,120136],{"class":79},[45,146765,146766],{"class":47,"line":66},[45,146767,146768],{"class":79},"30\n",[20,146770,146771],{},"脚本运行适合保存程序：",[36,146773,146775],{"className":30478,"code":146774,"language":30480,"meta":25,"style":25},"price = 8\ncount = 5\nprint(price * count)\n",[42,146776,146777,146787,146796],{"__ignoreMap":25},[45,146778,146779,146782,146784],{"class":47,"line":48},[45,146780,146781],{"class":55},"price ",[45,146783,59],{"class":51},[45,146785,146786],{"class":79}," 8\n",[45,146788,146789,146792,146794],{"class":47,"line":66},[45,146790,146791],{"class":55},"count ",[45,146793,59],{"class":51},[45,146795,54527],{"class":79},[45,146797,146798,146800,146803,146805],{"class":47,"line":1331},[45,146799,30515],{"class":79},[45,146801,146802],{"class":55},"(price ",[45,146804,732],{"class":51},[45,146806,146807],{"class":55}," count)\n",[20,146809,146810],{},"实际学习中推荐：",[233,146812,146813,146816,146821],{},[169,146814,146815],{},"临时试一个语法，用交互模式。",[169,146817,146818,146819,126083],{},"写完整练习，用 ",[42,146820,146452],{},[169,146822,146823],{},"写项目，用独立目录和虚拟环境。",[15,146825,146827],{"id":146826},"_110-常见错误","1.10 常见错误",[249,146829,146831],{"id":146830},"_1101-命令找不到","1.10.1 命令找不到",[36,146833,146836],{"className":146834,"code":146835,"language":5337,"meta":25},[5335],"python: command not found\n",[42,146837,146835],{"__ignoreMap":25},[20,146839,146840],{},"原因：",[233,146842,146843,146846,146849],{},[169,146844,146845],{},"没安装 Python。",[169,146847,146848],{},"PATH 没配置。",[169,146850,146851,146852,28485],{},"Linux\u002FmacOS 应该使用 ",[42,146853,100979],{},[249,146855,146857],{"id":146856},"_1102-文件名冲突","1.10.2 文件名冲突",[20,146859,146860],{},"不要把文件命名为：",[36,146862,146865],{"className":146863,"code":146864,"language":5337,"meta":25},[5335],"random.py\njson.py\ntime.py\nrequests.py\n",[42,146866,146864],{"__ignoreMap":25},[20,146868,146869],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[249,146871,146873],{"id":146872},"_1103-中文乱码","1.10.3 中文乱码",[20,146875,146876],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[20,146878,146879],{},"如果读写文件出现乱码，要明确指定编码：",[36,146881,146883],{"className":30478,"code":146882,"language":30480,"meta":25,"style":25},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[42,146884,146885,146919],{"__ignoreMap":25},[45,146886,146887,146889,146892,146894,146897,146899,146902,146904,146907,146909,146912,146914,146916],{"class":47,"line":48},[45,146888,107933],{"class":51},[45,146890,146891],{"class":79}," open",[45,146893,282],{"class":55},[45,146895,146896],{"class":62},"\"data.txt\"",[45,146898,12584],{"class":55},[45,146900,146901],{"class":62},"\"r\"",[45,146903,12584],{"class":55},[45,146905,146906],{"class":5366},"encoding",[45,146908,59],{"class":51},[45,146910,146911],{"class":62},"\"utf-8\"",[45,146913,13863],{"class":55},[45,146915,31483],{"class":51},[45,146917,146918],{"class":55}," f:\n",[45,146920,146921,146924,146926],{"class":47,"line":66},[45,146922,146923],{"class":55},"    content ",[45,146925,59],{"class":51},[45,146927,146928],{"class":55}," f.read()\n",[15,146930,146932],{"id":146931},"_111-本章练习","1.11 本章练习",[233,146934,146935,146938,146944],{},[169,146936,146937],{},"安装 Python，并在终端输出版本号。",[169,146939,146940,146941,146943],{},"新建 ",[42,146942,146498],{},"，输出自己的姓名、年龄、学习目标。",[169,146945,104466,146946,146948],{},[42,146947,146572],{}," 输出下面格式：",[36,146950,146953],{"className":146951,"code":146952,"language":5337,"meta":25},[5335],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[42,146954,146952],{"__ignoreMap":25},[233,146956,146957],{"start":1346},[169,146958,104466,146959,146961],{},[42,146960,146698],{}," 输出日期：",[36,146963,146966],{"className":146964,"code":146965,"language":5337,"meta":25},[5335],"2024-10-10\n",[42,146967,146965],{"__ignoreMap":25},[233,146969,146970],{"start":1352},[169,146971,104466,146972,146974,146975,146977],{},[42,146973,45901],{}," 让两次 ",[42,146976,146572],{}," 输出在同一行。",[196,146979,146980],{},"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":25,"searchDepth":66,"depth":66,"links":146982},[146983,146984,146985,146990,146991,146992,146996,146997,146998,146999,147004],{"id":145865,"depth":66,"text":145866},{"id":145909,"depth":66,"text":145910},{"id":146010,"depth":66,"text":146011,"children":146986},[146987,146988,146989],{"id":146014,"depth":1331,"text":146015},{"id":146069,"depth":1331,"text":146070},{"id":146105,"depth":1331,"text":146106},{"id":146178,"depth":66,"text":146179},{"id":146323,"depth":66,"text":146324},{"id":146428,"depth":66,"text":146429,"children":146993},[146994,146995],{"id":146432,"depth":1331,"text":146433},{"id":146461,"depth":1331,"text":146462},{"id":146491,"depth":66,"text":146492},{"id":146566,"depth":66,"text":146567},{"id":146744,"depth":66,"text":146745},{"id":146826,"depth":66,"text":146827,"children":147000},[147001,147002,147003],{"id":146830,"depth":1331,"text":146831},{"id":146856,"depth":1331,"text":146857},{"id":146872,"depth":1331,"text":146873},{"id":146931,"depth":66,"text":146932},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145857,"description":204},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147011,"title":147012,"body":147013,"description":204,"extension":205,"meta":149417,"navigation":207,"path":149418,"seo":149419,"stem":149420,"__hash__":149421},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147014,"toc":149402},[147015,147018,147022,147025,147028,147045,147048,147090,147093,147097,147100,147103,147140,147143,147177,147180,147272,147276,147290,147293,147320,147323,147327,147430,147437,147440,147457,147461,147468,147657,147660,147733,147737,147740,147824,147827,147859,147863,148067,148070,148074,148080,148182,148185,148441,148445,148448,148451,148465,148467,148653,148657,149019,149025,149029,149032,149156,149159,149338,149341,149345,149378,149382,149399],[10,147016,147012],{"id":147017},"_10-json与pyecharts折线图",[15,147019,147021],{"id":147020},"_101-数据可视化","10.1 数据可视化",[20,147023,147024],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[20,147026,147027],{},"常见图表：",[233,147029,147030,147033,147036,147039,147042],{},[169,147031,147032],{},"折线图：看趋势。",[169,147034,147035],{},"柱状图：看分类对比。",[169,147037,147038],{},"饼图：看占比。",[169,147040,147041],{},"地图：看地域分布。",[169,147043,147044],{},"散点图：看两个变量之间的关系。",[20,147046,147047],{},"Python 可视化常用库：",[415,147049,147050,147058],{},[418,147051,147052],{},[421,147053,147054,147056],{},[424,147055,146261],{},[424,147057,23889],{},[462,147059,147060,147067,147075,147082],{},[421,147061,147062,147064],{},[467,147063,146293],{},[467,147065,147066],{},"基础、经典、可定制",[421,147068,147069,147072],{},[467,147070,147071],{},"seaborn",[467,147073,147074],{},"统计图表更美观",[421,147076,147077,147079],{},[467,147078,146301],{},[467,147080,147081],{},"生成交互式网页图表",[421,147083,147084,147087],{},[467,147085,147086],{},"plotly",[467,147088,147089],{},"交互图表能力强",[20,147091,147092],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[15,147094,147096],{"id":147095},"_102-json回顾","10.2 JSON回顾",[20,147098,147099],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[20,147101,147102],{},"Python 字典：",[36,147104,147106],{"className":30478,"code":147105,"language":30480,"meta":25,"style":25},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[42,147107,147108,147116,147127,147136],{"__ignoreMap":25},[45,147109,147110,147112,147114],{"class":47,"line":48},[45,147111,101758],{"class":55},[45,147113,59],{"class":51},[45,147115,15721],{"class":55},[45,147117,147118,147121,147123,147125],{"class":47,"line":66},[45,147119,147120],{"class":62},"    \"name\"",[45,147122,51537],{"class":55},[45,147124,69369],{"class":62},[45,147126,31566],{"class":55},[45,147128,147129,147132,147134],{"class":47,"line":1331},[45,147130,147131],{"class":62},"    \"value\"",[45,147133,51537],{"class":55},[45,147135,97558],{"class":79},[45,147137,147138],{"class":47,"line":1346},[45,147139,1716],{"class":55},[20,147141,147142],{},"JSON 字符串：",[36,147144,147147],{"className":147145,"code":147146,"language":145892,"meta":25,"style":25},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[42,147148,147149,147153,147164,147173],{"__ignoreMap":25},[45,147150,147151],{"class":47,"line":48},[45,147152,1697],{"class":55},[45,147154,147155,147158,147160,147162],{"class":47,"line":66},[45,147156,147157],{"class":79},"  \"name\"",[45,147159,51537],{"class":55},[45,147161,69369],{"class":62},[45,147163,31566],{"class":55},[45,147165,147166,147169,147171],{"class":47,"line":1331},[45,147167,147168],{"class":79},"  \"value\"",[45,147170,51537],{"class":55},[45,147172,97558],{"class":79},[45,147174,147175],{"class":47,"line":1346},[45,147176,1716],{"class":55},[20,147178,147179],{},"Python 与 JSON 的转换：",[36,147181,147183],{"className":30478,"code":147182,"language":30480,"meta":25,"style":25},"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",[42,147184,147185,147192,147196,147221,147225,147244,147251,147255,147265],{"__ignoreMap":25},[45,147186,147187,147189],{"class":47,"line":48},[45,147188,30492],{"class":51},[45,147190,147191],{"class":55}," json\n",[45,147193,147194],{"class":47,"line":66},[45,147195,2550],{"emptyLinePlaceholder":207},[45,147197,147198,147200,147202,147204,147206,147208,147210,147212,147215,147217,147219],{"class":47,"line":1331},[45,147199,101758],{"class":55},[45,147201,59],{"class":51},[45,147203,4598],{"class":55},[45,147205,62779],{"class":62},[45,147207,51537],{"class":55},[45,147209,69369],{"class":62},[45,147211,12584],{"class":55},[45,147213,147214],{"class":62},"\"value\"",[45,147216,51537],{"class":55},[45,147218,588],{"class":79},[45,147220,1716],{"class":55},[45,147222,147223],{"class":47,"line":1346},[45,147224,2550],{"emptyLinePlaceholder":207},[45,147226,147227,147230,147232,147235,147238,147240,147242],{"class":47,"line":1352},[45,147228,147229],{"class":55},"json_text ",[45,147231,59],{"class":51},[45,147233,147234],{"class":55}," json.dumps(data, ",[45,147236,147237],{"class":5366},"ensure_ascii",[45,147239,59],{"class":51},[45,147241,34087],{"class":79},[45,147243,139],{"class":55},[45,147245,147246,147248],{"class":47,"line":1366},[45,147247,30515],{"class":79},[45,147249,147250],{"class":55},"(json_text)\n",[45,147252,147253],{"class":47,"line":1372},[45,147254,2550],{"emptyLinePlaceholder":207},[45,147256,147257,147260,147262],{"class":47,"line":1463},[45,147258,147259],{"class":55},"new_data ",[45,147261,59],{"class":51},[45,147263,147264],{"class":55}," json.loads(json_text)\n",[45,147266,147267,147269],{"class":47,"line":1469},[45,147268,30515],{"class":79},[45,147270,147271],{"class":55},"(new_data)\n",[15,147273,147275],{"id":147274},"_103-安装pyecharts","10.3 安装pyecharts",[36,147277,147279],{"className":38,"code":147278,"language":40,"meta":25,"style":25},"pip install pyecharts\n",[42,147280,147281],{"__ignoreMap":25},[45,147282,147283,147285,147287],{"class":47,"line":48},[45,147284,23978],{"class":69},[45,147286,23981],{"class":62},[45,147288,147289],{"class":62}," pyecharts\n",[20,147291,147292],{},"验证：",[36,147294,147296],{"className":30478,"code":147295,"language":30480,"meta":25,"style":25},"import pyecharts\n\nprint(pyecharts.__version__)\n",[42,147297,147298,147304,147308],{"__ignoreMap":25},[45,147299,147300,147302],{"class":47,"line":48},[45,147301,30492],{"class":51},[45,147303,147289],{"class":55},[45,147305,147306],{"class":47,"line":66},[45,147307,2550],{"emptyLinePlaceholder":207},[45,147309,147310,147312,147315,147318],{"class":47,"line":1331},[45,147311,30515],{"class":79},[45,147313,147314],{"class":55},"(pyecharts.",[45,147316,147317],{"class":79},"__version__",[45,147319,139],{"class":55},[20,147321,147322],{},"如果使用虚拟环境，要先激活环境再安装。",[15,147324,147326],{"id":147325},"_104-第一个折线图","10.4 第一个折线图",[36,147328,147330],{"className":30478,"code":147329,"language":30480,"meta":25,"style":25},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[42,147331,147332,147344,147348,147358,147388,147420],{"__ignoreMap":25},[45,147333,147334,147336,147339,147341],{"class":47,"line":48},[45,147335,30837],{"class":51},[45,147337,147338],{"class":55}," pyecharts.charts ",[45,147340,30492],{"class":51},[45,147342,147343],{"class":55}," Line\n",[45,147345,147346],{"class":47,"line":66},[45,147347,2550],{"emptyLinePlaceholder":207},[45,147349,147350,147353,147355],{"class":47,"line":1331},[45,147351,147352],{"class":55},"line ",[45,147354,59],{"class":51},[45,147356,147357],{"class":55}," Line()\n",[45,147359,147360,147363,147366,147368,147371,147373,147376,147378,147381,147383,147386],{"class":47,"line":1346},[45,147361,147362],{"class":55},"line.add_xaxis([",[45,147364,147365],{"class":62},"\"周一\"",[45,147367,12584],{"class":55},[45,147369,147370],{"class":62},"\"周二\"",[45,147372,12584],{"class":55},[45,147374,147375],{"class":62},"\"周三\"",[45,147377,12584],{"class":55},[45,147379,147380],{"class":62},"\"周四\"",[45,147382,12584],{"class":55},[45,147384,147385],{"class":62},"\"周五\"",[45,147387,4807],{"class":55},[45,147389,147390,147393,147396,147398,147400,147402,147404,147406,147408,147410,147413,147415,147418],{"class":47,"line":1352},[45,147391,147392],{"class":55},"line.add_yaxis(",[45,147394,147395],{"class":62},"\"销售额\"",[45,147397,77618],{"class":55},[45,147399,588],{"class":79},[45,147401,12584],{"class":55},[45,147403,1094],{"class":79},[45,147405,12584],{"class":55},[45,147407,1139],{"class":79},[45,147409,12584],{"class":55},[45,147411,147412],{"class":79},"150",[45,147414,12584],{"class":55},[45,147416,147417],{"class":79},"180",[45,147419,4807],{"class":55},[45,147421,147422,147425,147428],{"class":47,"line":1366},[45,147423,147424],{"class":55},"line.render(",[45,147426,147427],{"class":62},"\"line.html\"",[45,147429,139],{"class":55},[20,147431,147432,147433,147436],{},"运行后会生成 ",[42,147434,147435],{},"line.html","，用浏览器打开即可看到图表。",[20,147438,147439],{},"核心步骤：",[233,147441,147442,147445,147448,147451,147454],{},[169,147443,147444],{},"导入图表类。",[169,147446,147447],{},"创建图表对象。",[169,147449,147450],{},"添加 x 轴数据。",[169,147452,147453],{},"添加 y 轴数据。",[169,147455,147456],{},"渲染为 HTML。",[15,147458,147460],{"id":147459},"_105-全局配置","10.5 全局配置",[20,147462,147463,147464,147467],{},"常用配置在 ",[42,147465,147466],{},"pyecharts.options"," 中。",[36,147469,147471],{"className":30478,"code":147470,"language":30480,"meta":25,"style":25},"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",[42,147472,147473,147490,147500,147504,147512,147536,147564,147569,147588,147607,147625,147645,147649],{"__ignoreMap":25},[45,147474,147475,147477,147480,147482,147485,147487],{"class":47,"line":48},[45,147476,30837],{"class":51},[45,147478,147479],{"class":55}," pyecharts ",[45,147481,30492],{"class":51},[45,147483,147484],{"class":55}," options ",[45,147486,31483],{"class":51},[45,147488,147489],{"class":55}," opts\n",[45,147491,147492,147494,147496,147498],{"class":47,"line":66},[45,147493,30837],{"class":51},[45,147495,147338],{"class":55},[45,147497,30492],{"class":51},[45,147499,147343],{"class":55},[45,147501,147502],{"class":47,"line":1331},[45,147503,2550],{"emptyLinePlaceholder":207},[45,147505,147506,147508,147510],{"class":47,"line":1346},[45,147507,147352],{"class":55},[45,147509,59],{"class":51},[45,147511,147357],{"class":55},[45,147513,147514,147516,147518,147520,147522,147524,147526,147528,147530,147532,147534],{"class":47,"line":1352},[45,147515,147362],{"class":55},[45,147517,147365],{"class":62},[45,147519,12584],{"class":55},[45,147521,147370],{"class":62},[45,147523,12584],{"class":55},[45,147525,147375],{"class":62},[45,147527,12584],{"class":55},[45,147529,147380],{"class":62},[45,147531,12584],{"class":55},[45,147533,147385],{"class":62},[45,147535,4807],{"class":55},[45,147537,147538,147540,147542,147544,147546,147548,147550,147552,147554,147556,147558,147560,147562],{"class":47,"line":1366},[45,147539,147392],{"class":55},[45,147541,147395],{"class":62},[45,147543,77618],{"class":55},[45,147545,588],{"class":79},[45,147547,12584],{"class":55},[45,147549,1094],{"class":79},[45,147551,12584],{"class":55},[45,147553,1139],{"class":79},[45,147555,12584],{"class":55},[45,147557,147412],{"class":79},[45,147559,12584],{"class":55},[45,147561,147417],{"class":79},[45,147563,4807],{"class":55},[45,147565,147566],{"class":47,"line":1372},[45,147567,147568],{"class":55},"line.set_global_opts(\n",[45,147570,147571,147574,147576,147579,147581,147583,147586],{"class":47,"line":1463},[45,147572,147573],{"class":5366},"    title_opts",[45,147575,59],{"class":51},[45,147577,147578],{"class":55},"opts.TitleOpts(",[45,147580,51507],{"class":5366},[45,147582,59],{"class":51},[45,147584,147585],{"class":62},"\"一周销售额\"",[45,147587,38147],{"class":55},[45,147589,147590,147593,147595,147598,147600,147602,147605],{"class":47,"line":1469},[45,147591,147592],{"class":5366},"    xaxis_opts",[45,147594,59],{"class":51},[45,147596,147597],{"class":55},"opts.AxisOpts(",[45,147599,79910],{"class":5366},[45,147601,59],{"class":51},[45,147603,147604],{"class":62},"\"日期\"",[45,147606,38147],{"class":55},[45,147608,147609,147612,147614,147616,147618,147620,147623],{"class":47,"line":1481},[45,147610,147611],{"class":5366},"    yaxis_opts",[45,147613,59],{"class":51},[45,147615,147597],{"class":55},[45,147617,79910],{"class":5366},[45,147619,59],{"class":51},[45,147621,147622],{"class":62},"\"金额\"",[45,147624,38147],{"class":55},[45,147626,147627,147630,147632,147635,147638,147640,147643],{"class":47,"line":1763},[45,147628,147629],{"class":5366},"    tooltip_opts",[45,147631,59],{"class":51},[45,147633,147634],{"class":55},"opts.TooltipOpts(",[45,147636,147637],{"class":5366},"trigger",[45,147639,59],{"class":51},[45,147641,147642],{"class":62},"\"axis\"",[45,147644,38147],{"class":55},[45,147646,147647],{"class":47,"line":1768},[45,147648,139],{"class":55},[45,147650,147651,147653,147655],{"class":47,"line":1774},[45,147652,147424],{"class":55},[45,147654,147427],{"class":62},[45,147656,139],{"class":55},[20,147658,147659],{},"常见全局配置：",[415,147661,147662,147671],{},[418,147663,147664],{},[421,147665,147666,147669],{},[424,147667,147668],{},"配置",[424,147670,102796],{},[462,147672,147673,147683,147693,147703,147713,147723],{},[421,147674,147675,147680],{},[467,147676,147677],{},[42,147678,147679],{},"TitleOpts",[467,147681,147682],{},"标题",[421,147684,147685,147690],{},[467,147686,147687],{},[42,147688,147689],{},"LegendOpts",[467,147691,147692],{},"图例",[421,147694,147695,147700],{},[467,147696,147697],{},[42,147698,147699],{},"TooltipOpts",[467,147701,147702],{},"提示框",[421,147704,147705,147710],{},[467,147706,147707],{},[42,147708,147709],{},"AxisOpts",[467,147711,147712],{},"坐标轴",[421,147714,147715,147720],{},[467,147716,147717],{},[42,147718,147719],{},"VisualMapOpts",[467,147721,147722],{},"视觉映射",[421,147724,147725,147730],{},[467,147726,147727],{},[42,147728,147729],{},"DataZoomOpts",[467,147731,147732],{},"区域缩放",[15,147734,147736],{"id":147735},"_106-系列配置","10.6 系列配置",[20,147738,147739],{},"系列配置作用于某一组数据。",[36,147741,147743],{"className":30478,"code":147742,"language":30480,"meta":25,"style":25},"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",[42,147744,147745,147750,147761,147790,147801,147820],{"__ignoreMap":25},[45,147746,147747],{"class":47,"line":48},[45,147748,147749],{"class":55},"line.add_yaxis(\n",[45,147751,147752,147755,147757,147759],{"class":47,"line":66},[45,147753,147754],{"class":5366},"    series_name",[45,147756,59],{"class":51},[45,147758,147395],{"class":62},[45,147760,31566],{"class":55},[45,147762,147763,147766,147768,147770,147772,147774,147776,147778,147780,147782,147784,147786,147788],{"class":47,"line":1331},[45,147764,147765],{"class":5366},"    y_axis",[45,147767,59],{"class":51},[45,147769,1167],{"class":55},[45,147771,588],{"class":79},[45,147773,12584],{"class":55},[45,147775,1094],{"class":79},[45,147777,12584],{"class":55},[45,147779,1139],{"class":79},[45,147781,12584],{"class":55},[45,147783,147412],{"class":79},[45,147785,12584],{"class":55},[45,147787,147417],{"class":79},[45,147789,87936],{"class":55},[45,147791,147792,147795,147797,147799],{"class":47,"line":1346},[45,147793,147794],{"class":5366},"    is_smooth",[45,147796,59],{"class":51},[45,147798,31576],{"class":79},[45,147800,31566],{"class":55},[45,147802,147803,147806,147808,147811,147814,147816,147818],{"class":47,"line":1352},[45,147804,147805],{"class":5366},"    label_opts",[45,147807,59],{"class":51},[45,147809,147810],{"class":55},"opts.LabelOpts(",[45,147812,147813],{"class":5366},"is_show",[45,147815,59],{"class":51},[45,147817,31576],{"class":79},[45,147819,38147],{"class":55},[45,147821,147822],{"class":47,"line":1366},[45,147823,139],{"class":55},[20,147825,147826],{},"常用参数：",[233,147828,147829,147835,147841,147847,147853],{},[169,147830,147831,147834],{},[42,147832,147833],{},"series_name","：系列名称。",[169,147836,147837,147840],{},[42,147838,147839],{},"y_axis","：y 轴数据。",[169,147842,147843,147846],{},[42,147844,147845],{},"is_smooth","：是否平滑曲线。",[169,147848,147849,147852],{},[42,147850,147851],{},"label_opts","：标签配置。",[169,147854,147855,147858],{},[42,147856,147857],{},"symbol_size","：标记点大小。",[15,147860,147862],{"id":147861},"_107-多条折线","10.7 多条折线",[36,147864,147866],{"className":30478,"code":147865,"language":30480,"meta":25,"style":25},"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",[42,147867,147868,147882,147892,147896,147925,147929,147937,147942,147980,148017,148021,148038,148054,148058],{"__ignoreMap":25},[45,147869,147870,147872,147874,147876,147878,147880],{"class":47,"line":48},[45,147871,30837],{"class":51},[45,147873,147479],{"class":55},[45,147875,30492],{"class":51},[45,147877,147484],{"class":55},[45,147879,31483],{"class":51},[45,147881,147489],{"class":55},[45,147883,147884,147886,147888,147890],{"class":47,"line":66},[45,147885,30837],{"class":51},[45,147887,147338],{"class":55},[45,147889,30492],{"class":51},[45,147891,147343],{"class":55},[45,147893,147894],{"class":47,"line":1331},[45,147895,2550],{"emptyLinePlaceholder":207},[45,147897,147898,147901,147903,147905,147907,147909,147911,147913,147915,147917,147919,147921,147923],{"class":47,"line":1346},[45,147899,147900],{"class":55},"dates ",[45,147902,59],{"class":51},[45,147904,52326],{"class":55},[45,147906,147365],{"class":62},[45,147908,12584],{"class":55},[45,147910,147370],{"class":62},[45,147912,12584],{"class":55},[45,147914,147375],{"class":62},[45,147916,12584],{"class":55},[45,147918,147380],{"class":62},[45,147920,12584],{"class":55},[45,147922,147385],{"class":62},[45,147924,33346],{"class":55},[45,147926,147927],{"class":47,"line":1352},[45,147928,2550],{"emptyLinePlaceholder":207},[45,147930,147931,147933,147935],{"class":47,"line":1366},[45,147932,147352],{"class":55},[45,147934,59],{"class":51},[45,147936,147357],{"class":55},[45,147938,147939],{"class":47,"line":1372},[45,147940,147941],{"class":55},"line.add_xaxis(dates)\n",[45,147943,147944,147946,147949,147951,147953,147955,147958,147960,147962,147964,147966,147968,147970,147972,147974,147976,147978],{"class":47,"line":1463},[45,147945,147392],{"class":55},[45,147947,147948],{"class":62},"\"线上销售\"",[45,147950,77618],{"class":55},[45,147952,588],{"class":79},[45,147954,12584],{"class":55},[45,147956,147957],{"class":79},"130",[45,147959,12584],{"class":55},[45,147961,1094],{"class":79},[45,147963,12584],{"class":55},[45,147965,21197],{"class":79},[45,147967,12584],{"class":55},[45,147969,1873],{"class":79},[45,147971,112302],{"class":55},[45,147973,147845],{"class":5366},[45,147975,59],{"class":51},[45,147977,31576],{"class":79},[45,147979,139],{"class":55},[45,147981,147982,147984,147987,147989,147991,147993,147995,147997,147999,148001,148003,148005,148007,148009,148011,148013,148015],{"class":47,"line":1469},[45,147983,147392],{"class":55},[45,147985,147986],{"class":62},"\"线下销售\"",[45,147988,77618],{"class":55},[45,147990,889],{"class":79},[45,147992,12584],{"class":55},[45,147994,1139],{"class":79},[45,147996,12584],{"class":55},[45,147998,588],{"class":79},[45,148000,12584],{"class":55},[45,148002,1094],{"class":79},[45,148004,12584],{"class":55},[45,148006,147412],{"class":79},[45,148008,112302],{"class":55},[45,148010,147845],{"class":5366},[45,148012,59],{"class":51},[45,148014,31576],{"class":79},[45,148016,139],{"class":55},[45,148018,148019],{"class":47,"line":1481},[45,148020,147568],{"class":55},[45,148022,148023,148025,148027,148029,148031,148033,148036],{"class":47,"line":1763},[45,148024,147573],{"class":5366},[45,148026,59],{"class":51},[45,148028,147578],{"class":55},[45,148030,51507],{"class":5366},[45,148032,59],{"class":51},[45,148034,148035],{"class":62},"\"线上线下销售趋势\"",[45,148037,38147],{"class":55},[45,148039,148040,148042,148044,148046,148048,148050,148052],{"class":47,"line":1768},[45,148041,147629],{"class":5366},[45,148043,59],{"class":51},[45,148045,147634],{"class":55},[45,148047,147637],{"class":5366},[45,148049,59],{"class":51},[45,148051,147642],{"class":62},[45,148053,38147],{"class":55},[45,148055,148056],{"class":47,"line":1774},[45,148057,139],{"class":55},[45,148059,148060,148062,148065],{"class":47,"line":1779},[45,148061,147424],{"class":55},[45,148063,148064],{"class":62},"\"sales.html\"",[45,148066,139],{"class":55},[20,148068,148069],{},"多条折线适合比较不同指标或不同地区。",[15,148071,148073],{"id":148072},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[20,148075,148076,148077,24766],{},"假设 ",[42,148078,148079],{},"sales.json",[36,148081,148083],{"className":147145,"code":148082,"language":145892,"meta":25,"style":25},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[42,148084,148085,148090,148122,148150,148178],{"__ignoreMap":25},[45,148086,148087],{"class":47,"line":48},[45,148088,148089],{"class":55},"[\n",[45,148091,148092,148095,148098,148100,148102,148104,148107,148109,148111,148113,148116,148118,148120],{"class":47,"line":66},[45,148093,148094],{"class":55},"  {",[45,148096,148097],{"class":79},"\"date\"",[45,148099,51537],{"class":55},[45,148101,147365],{"class":62},[45,148103,12584],{"class":55},[45,148105,148106],{"class":79},"\"online\"",[45,148108,51537],{"class":55},[45,148110,588],{"class":79},[45,148112,12584],{"class":55},[45,148114,148115],{"class":79},"\"offline\"",[45,148117,51537],{"class":55},[45,148119,889],{"class":79},[45,148121,5080],{"class":55},[45,148123,148124,148126,148128,148130,148132,148134,148136,148138,148140,148142,148144,148146,148148],{"class":47,"line":1331},[45,148125,148094],{"class":55},[45,148127,148097],{"class":79},[45,148129,51537],{"class":55},[45,148131,147370],{"class":62},[45,148133,12584],{"class":55},[45,148135,148106],{"class":79},[45,148137,51537],{"class":55},[45,148139,147957],{"class":79},[45,148141,12584],{"class":55},[45,148143,148115],{"class":79},[45,148145,51537],{"class":55},[45,148147,1139],{"class":79},[45,148149,5080],{"class":55},[45,148151,148152,148154,148156,148158,148160,148162,148164,148166,148168,148170,148172,148174,148176],{"class":47,"line":1346},[45,148153,148094],{"class":55},[45,148155,148097],{"class":79},[45,148157,51537],{"class":55},[45,148159,147375],{"class":62},[45,148161,12584],{"class":55},[45,148163,148106],{"class":79},[45,148165,51537],{"class":55},[45,148167,1094],{"class":79},[45,148169,12584],{"class":55},[45,148171,148115],{"class":79},[45,148173,51537],{"class":55},[45,148175,588],{"class":79},[45,148177,1716],{"class":55},[45,148179,148180],{"class":47,"line":1352},[45,148181,33346],{"class":55},[20,148183,148184],{},"读取并绘图：",[36,148186,148188],{"className":30478,"code":148187,"language":30480,"meta":25,"style":25},"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",[42,148189,148190,148196,148210,148220,148224,148256,148269,148273,148281,148290,148299,148303,148315,148324,148333,148342,148346,148354,148358,148375,148392,148396,148413,148429,148433],{"__ignoreMap":25},[45,148191,148192,148194],{"class":47,"line":48},[45,148193,30492],{"class":51},[45,148195,147191],{"class":55},[45,148197,148198,148200,148202,148204,148206,148208],{"class":47,"line":66},[45,148199,30837],{"class":51},[45,148201,147479],{"class":55},[45,148203,30492],{"class":51},[45,148205,147484],{"class":55},[45,148207,31483],{"class":51},[45,148209,147489],{"class":55},[45,148211,148212,148214,148216,148218],{"class":47,"line":1331},[45,148213,30837],{"class":51},[45,148215,147338],{"class":55},[45,148217,30492],{"class":51},[45,148219,147343],{"class":55},[45,148221,148222],{"class":47,"line":1346},[45,148223,2550],{"emptyLinePlaceholder":207},[45,148225,148226,148228,148230,148232,148235,148237,148239,148241,148243,148245,148247,148249,148251,148254],{"class":47,"line":1352},[45,148227,107933],{"class":51},[45,148229,146891],{"class":79},[45,148231,282],{"class":55},[45,148233,148234],{"class":62},"\"sales.json\"",[45,148236,12584],{"class":55},[45,148238,146901],{"class":62},[45,148240,12584],{"class":55},[45,148242,146906],{"class":5366},[45,148244,59],{"class":51},[45,148246,146911],{"class":62},[45,148248,13863],{"class":55},[45,148250,31483],{"class":51},[45,148252,148253],{"class":5366}," file",[45,148255,3889],{"class":55},[45,148257,148258,148260,148262,148265,148267],{"class":47,"line":1366},[45,148259,101521],{"class":55},[45,148261,59],{"class":51},[45,148263,148264],{"class":55}," json.load(",[45,148266,45454],{"class":5366},[45,148268,139],{"class":55},[45,148270,148271],{"class":47,"line":1372},[45,148272,2550],{"emptyLinePlaceholder":207},[45,148274,148275,148277,148279],{"class":47,"line":1463},[45,148276,147900],{"class":55},[45,148278,59],{"class":51},[45,148280,51938],{"class":55},[45,148282,148283,148286,148288],{"class":47,"line":1469},[45,148284,148285],{"class":55},"online_sales ",[45,148287,59],{"class":51},[45,148289,51938],{"class":55},[45,148291,148292,148295,148297],{"class":47,"line":1481},[45,148293,148294],{"class":55},"offline_sales ",[45,148296,59],{"class":51},[45,148298,51938],{"class":55},[45,148300,148301],{"class":47,"line":1763},[45,148302,2550],{"emptyLinePlaceholder":207},[45,148304,148305,148307,148310,148312],{"class":47,"line":1768},[45,148306,3175],{"class":51},[45,148308,148309],{"class":55}," item ",[45,148311,26143],{"class":51},[45,148313,148314],{"class":55}," data:\n",[45,148316,148317,148320,148322],{"class":47,"line":1774},[45,148318,148319],{"class":55},"    dates.append(item[",[45,148321,148097],{"class":62},[45,148323,4807],{"class":55},[45,148325,148326,148329,148331],{"class":47,"line":1779},[45,148327,148328],{"class":55},"    online_sales.append(item[",[45,148330,148106],{"class":62},[45,148332,4807],{"class":55},[45,148334,148335,148338,148340],{"class":47,"line":1793},[45,148336,148337],{"class":55},"    offline_sales.append(item[",[45,148339,148115],{"class":62},[45,148341,4807],{"class":55},[45,148343,148344],{"class":47,"line":1798},[45,148345,2550],{"emptyLinePlaceholder":207},[45,148347,148348,148350,148352],{"class":47,"line":1804},[45,148349,147352],{"class":55},[45,148351,59],{"class":51},[45,148353,147357],{"class":55},[45,148355,148356],{"class":47,"line":1825},[45,148357,147941],{"class":55},[45,148359,148360,148362,148364,148367,148369,148371,148373],{"class":47,"line":1830},[45,148361,147392],{"class":55},[45,148363,147948],{"class":62},[45,148365,148366],{"class":55},", online_sales, ",[45,148368,147845],{"class":5366},[45,148370,59],{"class":51},[45,148372,31576],{"class":79},[45,148374,139],{"class":55},[45,148376,148377,148379,148381,148384,148386,148388,148390],{"class":47,"line":1844},[45,148378,147392],{"class":55},[45,148380,147986],{"class":62},[45,148382,148383],{"class":55},", offline_sales, ",[45,148385,147845],{"class":5366},[45,148387,59],{"class":51},[45,148389,31576],{"class":79},[45,148391,139],{"class":55},[45,148393,148394],{"class":47,"line":1849},[45,148395,147568],{"class":55},[45,148397,148398,148400,148402,148404,148406,148408,148411],{"class":47,"line":1878},[45,148399,147573],{"class":5366},[45,148401,59],{"class":51},[45,148403,147578],{"class":55},[45,148405,51507],{"class":5366},[45,148407,59],{"class":51},[45,148409,148410],{"class":62},"\"销售趋势\"",[45,148412,38147],{"class":55},[45,148414,148415,148417,148419,148421,148423,148425,148427],{"class":47,"line":1883},[45,148416,147629],{"class":5366},[45,148418,59],{"class":51},[45,148420,147634],{"class":55},[45,148422,147637],{"class":5366},[45,148424,59],{"class":51},[45,148426,147642],{"class":62},[45,148428,38147],{"class":55},[45,148430,148431],{"class":47,"line":1900},[45,148432,139],{"class":55},[45,148434,148435,148437,148439],{"class":47,"line":1905},[45,148436,147424],{"class":55},[45,148438,148064],{"class":62},[45,148440,139],{"class":55},[15,148442,148444],{"id":148443},"_109-数据清洗","10.9 数据清洗",[20,148446,148447],{},"真实数据经常不整齐，需要清洗。",[20,148449,148450],{},"常见问题：",[233,148452,148453,148456,148459,148462],{},[169,148454,148455],{},"数字是字符串。",[169,148457,148458],{},"字段缺失。",[169,148460,148461],{},"空值。",[169,148463,148464],{},"日期格式不统一。",[20,148466,15284],{},[36,148468,148470],{"className":30478,"code":148469,"language":30480,"meta":25,"style":25},"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",[42,148471,148472,148481,148504,148524,148545,148549,148553,148561,148570,148574,148585,148599,148608,148613,148617,148625,148635,148639,148646],{"__ignoreMap":25},[45,148473,148474,148477,148479],{"class":47,"line":48},[45,148475,148476],{"class":55},"raw_data ",[45,148478,59],{"class":51},[45,148480,55547],{"class":55},[45,148482,148483,148486,148488,148490,148492,148494,148497,148499,148502],{"class":47,"line":66},[45,148484,148485],{"class":55},"    {",[45,148487,148097],{"class":62},[45,148489,51537],{"class":55},[45,148491,147365],{"class":62},[45,148493,12584],{"class":55},[45,148495,148496],{"class":62},"\"sales\"",[45,148498,51537],{"class":55},[45,148500,148501],{"class":62},"\"100\"",[45,148503,5080],{"class":55},[45,148505,148506,148508,148510,148512,148514,148516,148518,148520,148522],{"class":47,"line":1331},[45,148507,148485],{"class":55},[45,148509,148097],{"class":62},[45,148511,51537],{"class":55},[45,148513,147370],{"class":62},[45,148515,12584],{"class":55},[45,148517,148496],{"class":62},[45,148519,51537],{"class":55},[45,148521,7802],{"class":62},[45,148523,5080],{"class":55},[45,148525,148526,148528,148530,148532,148534,148536,148538,148540,148543],{"class":47,"line":1346},[45,148527,148485],{"class":55},[45,148529,148097],{"class":62},[45,148531,51537],{"class":55},[45,148533,147375],{"class":62},[45,148535,12584],{"class":55},[45,148537,148496],{"class":62},[45,148539,51537],{"class":55},[45,148541,148542],{"class":62},"\"120\"",[45,148544,5080],{"class":55},[45,148546,148547],{"class":47,"line":1352},[45,148548,33346],{"class":55},[45,148550,148551],{"class":47,"line":1366},[45,148552,2550],{"emptyLinePlaceholder":207},[45,148554,148555,148557,148559],{"class":47,"line":1372},[45,148556,147900],{"class":55},[45,148558,59],{"class":51},[45,148560,51938],{"class":55},[45,148562,148563,148566,148568],{"class":47,"line":1463},[45,148564,148565],{"class":55},"sales ",[45,148567,59],{"class":51},[45,148569,51938],{"class":55},[45,148571,148572],{"class":47,"line":1469},[45,148573,2550],{"emptyLinePlaceholder":207},[45,148575,148576,148578,148580,148582],{"class":47,"line":1481},[45,148577,3175],{"class":51},[45,148579,148309],{"class":55},[45,148581,26143],{"class":51},[45,148583,148584],{"class":55}," raw_data:\n",[45,148586,148587,148590,148592,148595,148597],{"class":47,"line":1763},[45,148588,148589],{"class":55},"    value ",[45,148591,59],{"class":51},[45,148593,148594],{"class":55}," item.get(",[45,148596,148496],{"class":62},[45,148598,139],{"class":55},[45,148600,148601,148603,148605],{"class":47,"line":1768},[45,148602,3251],{"class":51},[45,148604,39030],{"class":51},[45,148606,148607],{"class":55}," value:\n",[45,148609,148610],{"class":47,"line":1774},[45,148611,148612],{"class":51},"        continue\n",[45,148614,148615],{"class":47,"line":1779},[45,148616,2550],{"emptyLinePlaceholder":207},[45,148618,148619,148621,148623],{"class":47,"line":1793},[45,148620,148319],{"class":55},[45,148622,148097],{"class":62},[45,148624,4807],{"class":55},[45,148626,148627,148630,148632],{"class":47,"line":1798},[45,148628,148629],{"class":55},"    sales.append(",[45,148631,285],{"class":79},[45,148633,148634],{"class":55},"(value))\n",[45,148636,148637],{"class":47,"line":1804},[45,148638,2550],{"emptyLinePlaceholder":207},[45,148640,148641,148643],{"class":47,"line":1825},[45,148642,30515],{"class":79},[45,148644,148645],{"class":55},"(dates)\n",[45,148647,148648,148650],{"class":47,"line":1830},[45,148649,30515],{"class":79},[45,148651,148652],{"class":55},"(sales)\n",[15,148654,148656],{"id":148655},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[36,148658,148660],{"className":30478,"code":148659,"language":30480,"meta":25,"style":25},"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",[42,148661,148662,148676,148686,148690,148698,148719,148741,148763,148785,148807,148811,148815,148837,148858,148862,148870,148874,148878,148888,148897,148907,148923,148927,148931,148948,148964,148980,148996,149006,149010],{"__ignoreMap":25},[45,148663,148664,148666,148668,148670,148672,148674],{"class":47,"line":48},[45,148665,30837],{"class":51},[45,148667,147479],{"class":55},[45,148669,30492],{"class":51},[45,148671,147484],{"class":55},[45,148673,31483],{"class":51},[45,148675,147489],{"class":55},[45,148677,148678,148680,148682,148684],{"class":47,"line":66},[45,148679,30837],{"class":51},[45,148681,147338],{"class":55},[45,148683,30492],{"class":51},[45,148685,147343],{"class":55},[45,148687,148688],{"class":47,"line":1331},[45,148689,2550],{"emptyLinePlaceholder":207},[45,148691,148692,148694,148696],{"class":47,"line":1346},[45,148693,148565],{"class":55},[45,148695,59],{"class":51},[45,148697,55547],{"class":55},[45,148699,148700,148702,148704,148706,148709,148711,148713,148715,148717],{"class":47,"line":1352},[45,148701,148485],{"class":55},[45,148703,148097],{"class":62},[45,148705,51537],{"class":55},[45,148707,148708],{"class":62},"\"2024-10-01\"",[45,148710,12584],{"class":55},[45,148712,84184],{"class":62},[45,148714,51537],{"class":55},[45,148716,92123],{"class":79},[45,148718,5080],{"class":55},[45,148720,148721,148723,148725,148727,148730,148732,148734,148736,148739],{"class":47,"line":1366},[45,148722,148485],{"class":55},[45,148724,148097],{"class":62},[45,148726,51537],{"class":55},[45,148728,148729],{"class":62},"\"2024-10-02\"",[45,148731,12584],{"class":55},[45,148733,84184],{"class":62},[45,148735,51537],{"class":55},[45,148737,148738],{"class":79},"1800",[45,148740,5080],{"class":55},[45,148742,148743,148745,148747,148749,148752,148754,148756,148758,148761],{"class":47,"line":1372},[45,148744,148485],{"class":55},[45,148746,148097],{"class":62},[45,148748,51537],{"class":55},[45,148750,148751],{"class":62},"\"2024-10-03\"",[45,148753,12584],{"class":55},[45,148755,84184],{"class":62},[45,148757,51537],{"class":55},[45,148759,148760],{"class":79},"1500",[45,148762,5080],{"class":55},[45,148764,148765,148767,148769,148771,148774,148776,148778,148780,148783],{"class":47,"line":1463},[45,148766,148485],{"class":55},[45,148768,148097],{"class":62},[45,148770,51537],{"class":55},[45,148772,148773],{"class":62},"\"2024-10-04\"",[45,148775,12584],{"class":55},[45,148777,84184],{"class":62},[45,148779,51537],{"class":55},[45,148781,148782],{"class":79},"2100",[45,148784,5080],{"class":55},[45,148786,148787,148789,148791,148793,148796,148798,148800,148802,148805],{"class":47,"line":1469},[45,148788,148485],{"class":55},[45,148790,148097],{"class":62},[45,148792,51537],{"class":55},[45,148794,148795],{"class":62},"\"2024-10-05\"",[45,148797,12584],{"class":55},[45,148799,84184],{"class":62},[45,148801,51537],{"class":55},[45,148803,148804],{"class":79},"2600",[45,148806,5080],{"class":55},[45,148808,148809],{"class":47,"line":1481},[45,148810,33346],{"class":55},[45,148812,148813],{"class":47,"line":1763},[45,148814,2550],{"emptyLinePlaceholder":207},[45,148816,148817,148819,148821,148824,148826,148828,148830,148832,148834],{"class":47,"line":1768},[45,148818,147900],{"class":55},[45,148820,59],{"class":51},[45,148822,148823],{"class":55}," [item[",[45,148825,148097],{"class":62},[45,148827,4593],{"class":55},[45,148829,3175],{"class":51},[45,148831,148309],{"class":55},[45,148833,26143],{"class":51},[45,148835,148836],{"class":55}," sales]\n",[45,148838,148839,148842,148844,148846,148848,148850,148852,148854,148856],{"class":47,"line":1774},[45,148840,148841],{"class":55},"amounts ",[45,148843,59],{"class":51},[45,148845,148823],{"class":55},[45,148847,84184],{"class":62},[45,148849,4593],{"class":55},[45,148851,3175],{"class":51},[45,148853,148309],{"class":55},[45,148855,26143],{"class":51},[45,148857,148836],{"class":55},[45,148859,148860],{"class":47,"line":1779},[45,148861,2550],{"emptyLinePlaceholder":207},[45,148863,148864,148866,148868],{"class":47,"line":1793},[45,148865,147352],{"class":55},[45,148867,59],{"class":51},[45,148869,147357],{"class":55},[45,148871,148872],{"class":47,"line":1798},[45,148873,147941],{"class":55},[45,148875,148876],{"class":47,"line":1804},[45,148877,147749],{"class":55},[45,148879,148880,148882,148884,148886],{"class":47,"line":1825},[45,148881,147754],{"class":5366},[45,148883,59],{"class":51},[45,148885,147395],{"class":62},[45,148887,31566],{"class":55},[45,148889,148890,148892,148894],{"class":47,"line":1830},[45,148891,147765],{"class":5366},[45,148893,59],{"class":51},[45,148895,148896],{"class":55},"amounts,\n",[45,148898,148899,148901,148903,148905],{"class":47,"line":1844},[45,148900,147794],{"class":5366},[45,148902,59],{"class":51},[45,148904,31576],{"class":79},[45,148906,31566],{"class":55},[45,148908,148909,148911,148913,148915,148917,148919,148921],{"class":47,"line":1849},[45,148910,147805],{"class":5366},[45,148912,59],{"class":51},[45,148914,147810],{"class":55},[45,148916,147813],{"class":5366},[45,148918,59],{"class":51},[45,148920,31576],{"class":79},[45,148922,38147],{"class":55},[45,148924,148925],{"class":47,"line":1878},[45,148926,139],{"class":55},[45,148928,148929],{"class":47,"line":1883},[45,148930,147568],{"class":55},[45,148932,148933,148935,148937,148939,148941,148943,148946],{"class":47,"line":1900},[45,148934,147573],{"class":5366},[45,148936,59],{"class":51},[45,148938,147578],{"class":55},[45,148940,51507],{"class":5366},[45,148942,59],{"class":51},[45,148944,148945],{"class":62},"\"每日销售额\"",[45,148947,38147],{"class":55},[45,148949,148950,148952,148954,148956,148958,148960,148962],{"class":47,"line":1905},[45,148951,147592],{"class":5366},[45,148953,59],{"class":51},[45,148955,147597],{"class":55},[45,148957,79910],{"class":5366},[45,148959,59],{"class":51},[45,148961,147604],{"class":62},[45,148963,38147],{"class":55},[45,148965,148966,148968,148970,148972,148974,148976,148978],{"class":47,"line":1910},[45,148967,147611],{"class":5366},[45,148969,59],{"class":51},[45,148971,147597],{"class":55},[45,148973,79910],{"class":5366},[45,148975,59],{"class":51},[45,148977,147622],{"class":62},[45,148979,38147],{"class":55},[45,148981,148982,148984,148986,148988,148990,148992,148994],{"class":47,"line":1915},[45,148983,147629],{"class":5366},[45,148985,59],{"class":51},[45,148987,147634],{"class":55},[45,148989,147637],{"class":5366},[45,148991,59],{"class":51},[45,148993,147642],{"class":62},[45,148995,38147],{"class":55},[45,148997,148998,149001,149003],{"class":47,"line":1929},[45,148999,149000],{"class":5366},"    datazoom_opts",[45,149002,59],{"class":51},[45,149004,149005],{"class":55},"[opts.DataZoomOpts()],\n",[45,149007,149008],{"class":47,"line":1934},[45,149009,139],{"class":55},[45,149011,149012,149014,149017],{"class":47,"line":2727},[45,149013,147424],{"class":55},[45,149015,149016],{"class":62},"\"daily_sales.html\"",[45,149018,139],{"class":55},[20,149020,149021,149024],{},[42,149022,149023],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[15,149026,149028],{"id":149027},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[20,149030,149031],{},"如果数据结构如下：",[36,149033,149035],{"className":30478,"code":149034,"language":30480,"meta":25,"style":25},"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",[42,149036,149037,149045,149053,149075,149096,149101,149108,149128,149148,149152],{"__ignoreMap":25},[45,149038,149039,149041,149043],{"class":47,"line":48},[45,149040,101758],{"class":55},[45,149042,59],{"class":51},[45,149044,15721],{"class":55},[45,149046,149047,149050],{"class":47,"line":66},[45,149048,149049],{"class":62},"    \"北京\"",[45,149051,149052],{"class":55},": [\n",[45,149054,149055,149057,149059,149061,149064,149066,149069,149071,149073],{"class":47,"line":1331},[45,149056,5067],{"class":55},[45,149058,148097],{"class":62},[45,149060,51537],{"class":55},[45,149062,149063],{"class":62},"\"2024-01-01\"",[45,149065,12584],{"class":55},[45,149067,149068],{"class":62},"\"confirm\"",[45,149070,51537],{"class":55},[45,149072,723],{"class":79},[45,149074,5080],{"class":55},[45,149076,149077,149079,149081,149083,149086,149088,149090,149092,149094],{"class":47,"line":1346},[45,149078,5067],{"class":55},[45,149080,148097],{"class":62},[45,149082,51537],{"class":55},[45,149084,149085],{"class":62},"\"2024-01-02\"",[45,149087,12584],{"class":55},[45,149089,149068],{"class":62},[45,149091,51537],{"class":55},[45,149093,775],{"class":79},[45,149095,5080],{"class":55},[45,149097,149098],{"class":47,"line":1352},[45,149099,149100],{"class":55},"    ],\n",[45,149102,149103,149106],{"class":47,"line":1366},[45,149104,149105],{"class":62},"    \"上海\"",[45,149107,149052],{"class":55},[45,149109,149110,149112,149114,149116,149118,149120,149122,149124,149126],{"class":47,"line":1372},[45,149111,5067],{"class":55},[45,149113,148097],{"class":62},[45,149115,51537],{"class":55},[45,149117,149063],{"class":62},[45,149119,12584],{"class":55},[45,149121,149068],{"class":62},[45,149123,51537],{"class":55},[45,149125,672],{"class":79},[45,149127,5080],{"class":55},[45,149129,149130,149132,149134,149136,149138,149140,149142,149144,149146],{"class":47,"line":1463},[45,149131,5067],{"class":55},[45,149133,148097],{"class":62},[45,149135,51537],{"class":55},[45,149137,149085],{"class":62},[45,149139,12584],{"class":55},[45,149141,149068],{"class":62},[45,149143,51537],{"class":55},[45,149145,800],{"class":79},[45,149147,5080],{"class":55},[45,149149,149150],{"class":47,"line":1469},[45,149151,149100],{"class":55},[45,149153,149154],{"class":47,"line":1481},[45,149155,1716],{"class":55},[20,149157,149158],{},"绘制多地区趋势：",[36,149160,149162],{"className":30478,"code":149161,"language":30480,"meta":25,"style":25},"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",[42,149163,149164,149178,149188,149192,149217,149221,149229,149233,149237,149249,149271,149284,149288,149292,149309,149325,149329],{"__ignoreMap":25},[45,149165,149166,149168,149170,149172,149174,149176],{"class":47,"line":48},[45,149167,30837],{"class":51},[45,149169,147479],{"class":55},[45,149171,30492],{"class":51},[45,149173,147484],{"class":55},[45,149175,31483],{"class":51},[45,149177,147489],{"class":55},[45,149179,149180,149182,149184,149186],{"class":47,"line":66},[45,149181,30837],{"class":51},[45,149183,147338],{"class":55},[45,149185,30492],{"class":51},[45,149187,147343],{"class":55},[45,149189,149190],{"class":47,"line":1331},[45,149191,2550],{"emptyLinePlaceholder":207},[45,149193,149194,149196,149198,149200,149202,149204,149206,149208,149210,149213,149215],{"class":47,"line":1346},[45,149195,147900],{"class":55},[45,149197,59],{"class":51},[45,149199,148823],{"class":55},[45,149201,148097],{"class":62},[45,149203,4593],{"class":55},[45,149205,3175],{"class":51},[45,149207,148309],{"class":55},[45,149209,26143],{"class":51},[45,149211,149212],{"class":55}," data[",[45,149214,69369],{"class":62},[45,149216,77627],{"class":55},[45,149218,149219],{"class":47,"line":1352},[45,149220,2550],{"emptyLinePlaceholder":207},[45,149222,149223,149225,149227],{"class":47,"line":1366},[45,149224,147352],{"class":55},[45,149226,59],{"class":51},[45,149228,147357],{"class":55},[45,149230,149231],{"class":47,"line":1372},[45,149232,147941],{"class":55},[45,149234,149235],{"class":47,"line":1463},[45,149236,2550],{"emptyLinePlaceholder":207},[45,149238,149239,149241,149244,149246],{"class":47,"line":1469},[45,149240,3175],{"class":51},[45,149242,149243],{"class":55}," city, records ",[45,149245,26143],{"class":51},[45,149247,149248],{"class":55}," data.items():\n",[45,149250,149251,149254,149256,149258,149260,149262,149264,149266,149268],{"class":47,"line":1481},[45,149252,149253],{"class":55},"    values ",[45,149255,59],{"class":51},[45,149257,148823],{"class":55},[45,149259,149068],{"class":62},[45,149261,4593],{"class":55},[45,149263,3175],{"class":51},[45,149265,148309],{"class":55},[45,149267,26143],{"class":51},[45,149269,149270],{"class":55}," records]\n",[45,149272,149273,149276,149278,149280,149282],{"class":47,"line":1763},[45,149274,149275],{"class":55},"    line.add_yaxis(city, values, ",[45,149277,147845],{"class":5366},[45,149279,59],{"class":51},[45,149281,31576],{"class":79},[45,149283,139],{"class":55},[45,149285,149286],{"class":47,"line":1768},[45,149287,2550],{"emptyLinePlaceholder":207},[45,149289,149290],{"class":47,"line":1774},[45,149291,147568],{"class":55},[45,149293,149294,149296,149298,149300,149302,149304,149307],{"class":47,"line":1779},[45,149295,147573],{"class":5366},[45,149297,59],{"class":51},[45,149299,147578],{"class":55},[45,149301,51507],{"class":5366},[45,149303,59],{"class":51},[45,149305,149306],{"class":62},"\"多地区趋势图\"",[45,149308,38147],{"class":55},[45,149310,149311,149313,149315,149317,149319,149321,149323],{"class":47,"line":1793},[45,149312,147629],{"class":5366},[45,149314,59],{"class":51},[45,149316,147634],{"class":55},[45,149318,147637],{"class":5366},[45,149320,59],{"class":51},[45,149322,147642],{"class":62},[45,149324,38147],{"class":55},[45,149326,149327],{"class":47,"line":1798},[45,149328,139],{"class":55},[45,149330,149331,149333,149336],{"class":47,"line":1804},[45,149332,147424],{"class":55},[45,149334,149335],{"class":62},"\"trend.html\"",[45,149337,139],{"class":55},[20,149339,149340],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[15,149342,149344],{"id":149343},"_1012-易错点","10.12 易错点",[233,149346,149347,149353,149359,149369,149375],{},[169,149348,149349,149352],{},[42,149350,149351],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[169,149354,149355,149358],{},[42,149356,149357],{},"render()"," 生成的是 HTML，不是图片。",[169,149360,149361,149362,149365,149366,28485],{},"JSON 字符串用 ",[42,149363,149364],{},"json.loads()","，JSON 文件用 ",[42,149367,149368],{},"json.load()",[169,149370,149371,149372,28485],{},"中文 JSON 保存时加 ",[42,149373,149374],{},"ensure_ascii=False",[169,149376,149377],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[15,149379,149381],{"id":149380},"_1013-本章练习","10.13 本章练习",[233,149383,149384,149387,149390,149393,149396],{},[169,149385,149386],{},"安装 pyecharts 并生成第一个折线图。",[169,149388,149389],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[169,149391,149392],{},"绘制两条折线，对比线上和线下销售额。",[169,149394,149395],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[169,149397,149398],{},"对含有空值的销售数据进行清洗后再绘图。",[196,149400,149401],{},"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":25,"searchDepth":66,"depth":66,"links":149403},[149404,149405,149406,149407,149408,149409,149410,149411,149412,149413,149414,149415,149416],{"id":147020,"depth":66,"text":147021},{"id":147095,"depth":66,"text":147096},{"id":147274,"depth":66,"text":147275},{"id":147325,"depth":66,"text":147326},{"id":147459,"depth":66,"text":147460},{"id":147735,"depth":66,"text":147736},{"id":147861,"depth":66,"text":147862},{"id":148072,"depth":66,"text":148073},{"id":148443,"depth":66,"text":148444},{"id":148655,"depth":66,"text":148656},{"id":149027,"depth":66,"text":149028},{"id":149343,"depth":66,"text":149344},{"id":149380,"depth":66,"text":149381},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147012,"description":204},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149423,"title":149424,"body":149425,"description":204,"extension":205,"meta":151785,"navigation":207,"path":151786,"seo":151787,"stem":151788,"__hash__":151789},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149426,"toc":151762},[149427,149430,149434,149437,149440,149516,149519,149610,149613,149617,149620,149664,149677,149681,149684,149751,149754,149758,149761,149845,149853,149857,149862,150003,150006,150017,150023,150029,150143,150147,150150,150153,150406,150409,150413,150416,150520,150523,150527,150678,150682,150689,150802,150806,150809,150915,150918,150922,150925,150956,150959,151064,151067,151071,151075,151085,151153,151157,151164,151228,151231,151235,151241,151337,151346,151350,151674,151683,151687,151715,151719,151759],[10,149428,149424],{"id":149429},"_11-面向对象基础",[15,149431,149433],{"id":149432},"_111-什么是面向对象","11.1 什么是面向对象",[20,149435,149436],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[20,149438,149439],{},"面向过程：",[36,149441,149443],{"className":30478,"code":149442,"language":30480,"meta":25,"style":25},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[42,149444,149445,149454,149462,149466,149476,149507,149511],{"__ignoreMap":25},[45,149446,149447,149449,149451],{"class":47,"line":48},[45,149448,146636],{"class":55},[45,149450,59],{"class":51},[45,149452,149453],{"class":62}," \"小明\"\n",[45,149455,149456,149458,149460],{"class":47,"line":66},[45,149457,146646],{"class":55},[45,149459,59],{"class":51},[45,149461,146651],{"class":79},[45,149463,149464],{"class":47,"line":1331},[45,149465,2550],{"emptyLinePlaceholder":207},[45,149467,149468,149470,149473],{"class":47,"line":1346},[45,149469,32047],{"class":51},[45,149471,149472],{"class":69}," introduce",[45,149474,149475],{"class":55},"(name, age):\n",[45,149477,149478,149480,149482,149484,149487,149489,149491,149493,149496,149498,149500,149502,149505],{"class":47,"line":1352},[45,149479,31399],{"class":79},[45,149481,282],{"class":55},[45,149483,331],{"class":51},[45,149485,149486],{"class":62},"\"我叫",[45,149488,1173],{"class":79},[45,149490,79910],{"class":55},[45,149492,1223],{"class":79},[45,149494,149495],{"class":62},"，今年",[45,149497,1173],{"class":79},[45,149499,70321],{"class":55},[45,149501,1223],{"class":79},[45,149503,149504],{"class":62},"岁\"",[45,149506,139],{"class":55},[45,149508,149509],{"class":47,"line":1366},[45,149510,2550],{"emptyLinePlaceholder":207},[45,149512,149513],{"class":47,"line":1372},[45,149514,149515],{"class":55},"introduce(name, age)\n",[20,149517,149518],{},"面向对象：",[36,149520,149522],{"className":30478,"code":149521,"language":30480,"meta":25,"style":25},"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",[42,149523,149524,149532,149540,149569,149573,149577,149587,149596,149605],{"__ignoreMap":25},[45,149525,149526,149528,149530],{"class":47,"line":48},[45,149527,14843],{"class":51},[45,149529,8048],{"class":69},[45,149531,3889],{"class":55},[45,149533,149534,149536,149538],{"class":47,"line":66},[45,149535,30901],{"class":51},[45,149537,149472],{"class":69},[45,149539,30907],{"class":55},[45,149541,149542,149544,149546,149548,149550,149553,149555,149557,149559,149561,149563,149565,149567],{"class":47,"line":1331},[45,149543,32551],{"class":79},[45,149545,282],{"class":55},[45,149547,331],{"class":51},[45,149549,149486],{"class":62},[45,149551,149552],{"class":79},"{self",[45,149554,80401],{"class":55},[45,149556,1223],{"class":79},[45,149558,149495],{"class":62},[45,149560,149552],{"class":79},[45,149562,80413],{"class":55},[45,149564,1223],{"class":79},[45,149566,149504],{"class":62},[45,149568,139],{"class":55},[45,149570,149571],{"class":47,"line":1346},[45,149572,2550],{"emptyLinePlaceholder":207},[45,149574,149575],{"class":47,"line":1352},[45,149576,2550],{"emptyLinePlaceholder":207},[45,149578,149579,149582,149584],{"class":47,"line":1366},[45,149580,149581],{"class":55},"student ",[45,149583,59],{"class":51},[45,149585,149586],{"class":55}," Student()\n",[45,149588,149589,149592,149594],{"class":47,"line":1372},[45,149590,149591],{"class":55},"student.name ",[45,149593,59],{"class":51},[45,149595,149453],{"class":62},[45,149597,149598,149601,149603],{"class":47,"line":1463},[45,149599,149600],{"class":55},"student.age ",[45,149602,59],{"class":51},[45,149604,146651],{"class":79},[45,149606,149607],{"class":47,"line":1469},[45,149608,149609],{"class":55},"student.introduce()\n",[20,149611,149612],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[15,149614,149616],{"id":149615},"_112-类和对象","11.2 类和对象",[20,149618,149619],{},"类是模板，对象是根据模板创建出来的具体实例。",[36,149621,149623],{"className":30478,"code":149622,"language":30480,"meta":25,"style":25},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[42,149624,149625,149633,149638,149642,149646,149655],{"__ignoreMap":25},[45,149626,149627,149629,149631],{"class":47,"line":48},[45,149628,14843],{"class":51},[45,149630,8048],{"class":69},[45,149632,3889],{"class":55},[45,149634,149635],{"class":47,"line":66},[45,149636,149637],{"class":51},"    pass\n",[45,149639,149640],{"class":47,"line":1331},[45,149641,2550],{"emptyLinePlaceholder":207},[45,149643,149644],{"class":47,"line":1346},[45,149645,2550],{"emptyLinePlaceholder":207},[45,149647,149648,149651,149653],{"class":47,"line":1352},[45,149649,149650],{"class":55},"student1 ",[45,149652,59],{"class":51},[45,149654,149586],{"class":55},[45,149656,149657,149660,149662],{"class":47,"line":1366},[45,149658,149659],{"class":55},"student2 ",[45,149661,59],{"class":51},[45,149663,149586],{"class":55},[20,149665,149666,149669,149670,101118,149673,149676],{},[42,149667,149668],{},"Student"," 是类，",[42,149671,149672],{},"student1",[42,149674,149675],{},"student2"," 是对象。",[15,149678,149680],{"id":149679},"_113-属性","11.3 属性",[20,149682,149683],{},"属性是对象保存的数据。",[36,149685,149687],{"className":30478,"code":149686,"language":30480,"meta":25,"style":25},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[42,149688,149689,149697,149701,149705,149709,149717,149725,149733,149737,149744],{"__ignoreMap":25},[45,149690,149691,149693,149695],{"class":47,"line":48},[45,149692,14843],{"class":51},[45,149694,8048],{"class":69},[45,149696,3889],{"class":55},[45,149698,149699],{"class":47,"line":66},[45,149700,149637],{"class":51},[45,149702,149703],{"class":47,"line":1331},[45,149704,2550],{"emptyLinePlaceholder":207},[45,149706,149707],{"class":47,"line":1346},[45,149708,2550],{"emptyLinePlaceholder":207},[45,149710,149711,149713,149715],{"class":47,"line":1352},[45,149712,149581],{"class":55},[45,149714,59],{"class":51},[45,149716,149586],{"class":55},[45,149718,149719,149721,149723],{"class":47,"line":1366},[45,149720,149591],{"class":55},[45,149722,59],{"class":51},[45,149724,149453],{"class":62},[45,149726,149727,149729,149731],{"class":47,"line":1372},[45,149728,149600],{"class":55},[45,149730,59],{"class":51},[45,149732,146651],{"class":79},[45,149734,149735],{"class":47,"line":1463},[45,149736,2550],{"emptyLinePlaceholder":207},[45,149738,149739,149741],{"class":47,"line":1469},[45,149740,30515],{"class":79},[45,149742,149743],{"class":55},"(student.name)\n",[45,149745,149746,149748],{"class":47,"line":1481},[45,149747,30515],{"class":79},[45,149749,149750],{"class":55},"(student.age)\n",[20,149752,149753],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[15,149755,149757],{"id":149756},"_114-方法","11.4 方法",[20,149759,149760],{},"类中的函数叫方法。",[36,149762,149763],{"className":30478,"code":149521,"language":30480,"meta":25,"style":25},[42,149764,149765,149773,149781,149809,149813,149817,149825,149833,149841],{"__ignoreMap":25},[45,149766,149767,149769,149771],{"class":47,"line":48},[45,149768,14843],{"class":51},[45,149770,8048],{"class":69},[45,149772,3889],{"class":55},[45,149774,149775,149777,149779],{"class":47,"line":66},[45,149776,30901],{"class":51},[45,149778,149472],{"class":69},[45,149780,30907],{"class":55},[45,149782,149783,149785,149787,149789,149791,149793,149795,149797,149799,149801,149803,149805,149807],{"class":47,"line":1331},[45,149784,32551],{"class":79},[45,149786,282],{"class":55},[45,149788,331],{"class":51},[45,149790,149486],{"class":62},[45,149792,149552],{"class":79},[45,149794,80401],{"class":55},[45,149796,1223],{"class":79},[45,149798,149495],{"class":62},[45,149800,149552],{"class":79},[45,149802,80413],{"class":55},[45,149804,1223],{"class":79},[45,149806,149504],{"class":62},[45,149808,139],{"class":55},[45,149810,149811],{"class":47,"line":1346},[45,149812,2550],{"emptyLinePlaceholder":207},[45,149814,149815],{"class":47,"line":1352},[45,149816,2550],{"emptyLinePlaceholder":207},[45,149818,149819,149821,149823],{"class":47,"line":1366},[45,149820,149581],{"class":55},[45,149822,59],{"class":51},[45,149824,149586],{"class":55},[45,149826,149827,149829,149831],{"class":47,"line":1372},[45,149828,149591],{"class":55},[45,149830,59],{"class":51},[45,149832,149453],{"class":62},[45,149834,149835,149837,149839],{"class":47,"line":1463},[45,149836,149600],{"class":55},[45,149838,59],{"class":51},[45,149840,146651],{"class":79},[45,149842,149843],{"class":47,"line":1469},[45,149844,149609],{"class":55},[20,149846,149847,149849,149850,149852],{},[42,149848,30923],{}," 表示当前对象。调用方法时不需要手动传入 ",[42,149851,30923],{},"，Python 会自动传。",[15,149854,149856],{"id":149855},"_115-构造方法__init__","11.5 构造方法__init__",[20,149858,149859,149861],{},[42,149860,30929],{}," 在对象创建时自动执行，用于初始化属性。",[36,149863,149865],{"className":30478,"code":149864,"language":30480,"meta":25,"style":25},"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",[42,149866,149867,149875,149884,149896,149908,149919,149923,149931,149969,149973,149977,149999],{"__ignoreMap":25},[45,149868,149869,149871,149873],{"class":47,"line":48},[45,149870,14843],{"class":51},[45,149872,8048],{"class":69},[45,149874,3889],{"class":55},[45,149876,149877,149879,149881],{"class":47,"line":66},[45,149878,30901],{"class":51},[45,149880,30904],{"class":79},[45,149882,149883],{"class":55},"(self, name, age, score):\n",[45,149885,149886,149888,149891,149893],{"class":47,"line":1331},[45,149887,30945],{"class":79},[45,149889,149890],{"class":55},".name ",[45,149892,59],{"class":51},[45,149894,149895],{"class":55}," name\n",[45,149897,149898,149900,149903,149905],{"class":47,"line":1346},[45,149899,30945],{"class":79},[45,149901,149902],{"class":55},".age ",[45,149904,59],{"class":51},[45,149906,149907],{"class":55}," age\n",[45,149909,149910,149912,149915,149917],{"class":47,"line":1352},[45,149911,30945],{"class":79},[45,149913,149914],{"class":55},".score ",[45,149916,59],{"class":51},[45,149918,1730],{"class":55},[45,149920,149921],{"class":47,"line":1366},[45,149922,2550],{"emptyLinePlaceholder":207},[45,149924,149925,149927,149929],{"class":47,"line":1372},[45,149926,30901],{"class":51},[45,149928,149472],{"class":69},[45,149930,30907],{"class":55},[45,149932,149933,149935,149937,149939,149941,149943,149945,149947,149949,149951,149953,149955,149958,149960,149963,149965,149967],{"class":47,"line":1463},[45,149934,32551],{"class":79},[45,149936,282],{"class":55},[45,149938,331],{"class":51},[45,149940,149486],{"class":62},[45,149942,149552],{"class":79},[45,149944,80401],{"class":55},[45,149946,1223],{"class":79},[45,149948,149495],{"class":62},[45,149950,149552],{"class":79},[45,149952,80413],{"class":55},[45,149954,1223],{"class":79},[45,149956,149957],{"class":62},"岁，成绩",[45,149959,149552],{"class":79},[45,149961,149962],{"class":55},".score",[45,149964,1223],{"class":79},[45,149966,89],{"class":62},[45,149968,139],{"class":55},[45,149970,149971],{"class":47,"line":1469},[45,149972,2550],{"emptyLinePlaceholder":207},[45,149974,149975],{"class":47,"line":1481},[45,149976,2550],{"emptyLinePlaceholder":207},[45,149978,149979,149981,149983,149986,149989,149991,149993,149995,149997],{"class":47,"line":1763},[45,149980,149581],{"class":55},[45,149982,59],{"class":51},[45,149984,149985],{"class":55}," Student(",[45,149987,149988],{"class":62},"\"小明\"",[45,149990,12584],{"class":55},[45,149992,927],{"class":79},[45,149994,12584],{"class":55},[45,149996,1266],{"class":79},[45,149998,139],{"class":55},[45,150000,150001],{"class":47,"line":1768},[45,150002,149609],{"class":55},[20,150004,150005],{},"构造方法的好处：",[233,150007,150008,150011,150014],{},[169,150009,150010],{},"创建对象时必须提供必要数据。",[169,150012,150013],{},"属性初始化集中，不容易漏。",[169,150015,150016],{},"对象状态更完整。",[15,150018,150020,150021],{"id":150019},"_116-str","11.6 ",[427,150022,1451],{},[20,150024,150025,150026,28485],{},"直接打印对象时，默认输出不直观。可以定义 ",[42,150027,150028],{},"__str__",[36,150030,150032],{"className":30478,"code":150031,"language":30480,"meta":25,"style":25},"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",[42,150033,150034,150042,150051,150061,150071,150075,150084,150112,150116,150120,150136],{"__ignoreMap":25},[45,150035,150036,150038,150040],{"class":47,"line":48},[45,150037,14843],{"class":51},[45,150039,8048],{"class":69},[45,150041,3889],{"class":55},[45,150043,150044,150046,150048],{"class":47,"line":66},[45,150045,30901],{"class":51},[45,150047,30904],{"class":79},[45,150049,150050],{"class":55},"(self, name, age):\n",[45,150052,150053,150055,150057,150059],{"class":47,"line":1331},[45,150054,30945],{"class":79},[45,150056,149890],{"class":55},[45,150058,59],{"class":51},[45,150060,149895],{"class":55},[45,150062,150063,150065,150067,150069],{"class":47,"line":1346},[45,150064,30945],{"class":79},[45,150066,149902],{"class":55},[45,150068,59],{"class":51},[45,150070,149907],{"class":55},[45,150072,150073],{"class":47,"line":1352},[45,150074,2550],{"emptyLinePlaceholder":207},[45,150076,150077,150079,150082],{"class":47,"line":1366},[45,150078,30901],{"class":51},[45,150080,150081],{"class":79}," __str__",[45,150083,30907],{"class":55},[45,150085,150086,150088,150091,150094,150096,150098,150100,150103,150105,150107,150109],{"class":47,"line":1372},[45,150087,14901],{"class":51},[45,150089,150090],{"class":51}," f",[45,150092,150093],{"class":62},"\"Student(name=",[45,150095,149552],{"class":79},[45,150097,80401],{"class":55},[45,150099,1223],{"class":79},[45,150101,150102],{"class":62},", age=",[45,150104,149552],{"class":79},[45,150106,80413],{"class":55},[45,150108,1223],{"class":79},[45,150110,150111],{"class":62},")\"\n",[45,150113,150114],{"class":47,"line":1463},[45,150115,2550],{"emptyLinePlaceholder":207},[45,150117,150118],{"class":47,"line":1469},[45,150119,2550],{"emptyLinePlaceholder":207},[45,150121,150122,150124,150126,150128,150130,150132,150134],{"class":47,"line":1481},[45,150123,149581],{"class":55},[45,150125,59],{"class":51},[45,150127,149985],{"class":55},[45,150129,149988],{"class":62},[45,150131,12584],{"class":55},[45,150133,927],{"class":79},[45,150135,139],{"class":55},[45,150137,150138,150140],{"class":47,"line":1763},[45,150139,30515],{"class":79},[45,150141,150142],{"class":55},"(student)\n",[15,150144,150146],{"id":150145},"_117-封装","11.7 封装",[20,150148,150149],{},"封装就是把数据和方法放到类中，并控制访问方式。",[20,150151,150152],{},"Python 中以双下划线开头的属性通常视为私有属性。",[36,150154,150156],{"className":30478,"code":150155,"language":30480,"meta":25,"style":25},"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",[42,150157,150158,150167,150176,150188,150200,150204,150213,150222,150226,150236,150249,150260,150265,150276,150280,150289,150301,150312,150316,150329,150340,150344,150355,150359,150363,150381,150390,150399],{"__ignoreMap":25},[45,150159,150160,150162,150165],{"class":47,"line":48},[45,150161,14843],{"class":51},[45,150163,150164],{"class":69}," Account",[45,150166,3889],{"class":55},[45,150168,150169,150171,150173],{"class":47,"line":66},[45,150170,30901],{"class":51},[45,150172,30904],{"class":79},[45,150174,150175],{"class":55},"(self, owner, balance):\n",[45,150177,150178,150180,150183,150185],{"class":47,"line":1331},[45,150179,30945],{"class":79},[45,150181,150182],{"class":55},".owner ",[45,150184,59],{"class":51},[45,150186,150187],{"class":55}," owner\n",[45,150189,150190,150192,150195,150197],{"class":47,"line":1346},[45,150191,30945],{"class":79},[45,150193,150194],{"class":55},".__balance ",[45,150196,59],{"class":51},[45,150198,150199],{"class":55}," balance\n",[45,150201,150202],{"class":47,"line":1352},[45,150203,2550],{"emptyLinePlaceholder":207},[45,150205,150206,150208,150211],{"class":47,"line":1366},[45,150207,30901],{"class":51},[45,150209,150210],{"class":69}," get_balance",[45,150212,30907],{"class":55},[45,150214,150215,150217,150219],{"class":47,"line":1372},[45,150216,14901],{"class":51},[45,150218,38973],{"class":79},[45,150220,150221],{"class":55},".__balance\n",[45,150223,150224],{"class":47,"line":1463},[45,150225,2550],{"emptyLinePlaceholder":207},[45,150227,150228,150230,150233],{"class":47,"line":1469},[45,150229,30901],{"class":51},[45,150231,150232],{"class":69}," deposit",[45,150234,150235],{"class":55},"(self, money):\n",[45,150237,150238,150240,150243,150245,150247],{"class":47,"line":1481},[45,150239,2647],{"class":51},[45,150241,150242],{"class":55}," money ",[45,150244,1739],{"class":51},[45,150246,4243],{"class":79},[45,150248,3889],{"class":55},[45,150250,150251,150253,150255,150258],{"class":47,"line":1763},[45,150252,34750],{"class":79},[45,150254,282],{"class":55},[45,150256,150257],{"class":62},"\"存款金额必须大于0\"",[45,150259,139],{"class":55},[45,150261,150262],{"class":47,"line":1768},[45,150263,150264],{"class":51},"            return\n",[45,150266,150267,150269,150271,150273],{"class":47,"line":1774},[45,150268,30945],{"class":79},[45,150270,150194],{"class":55},[45,150272,9627],{"class":51},[45,150274,150275],{"class":55}," money\n",[45,150277,150278],{"class":47,"line":1779},[45,150279,2550],{"emptyLinePlaceholder":207},[45,150281,150282,150284,150287],{"class":47,"line":1793},[45,150283,30901],{"class":51},[45,150285,150286],{"class":69}," withdraw",[45,150288,150235],{"class":55},[45,150290,150291,150293,150295,150297,150299],{"class":47,"line":1798},[45,150292,2647],{"class":51},[45,150294,150242],{"class":55},[45,150296,1739],{"class":51},[45,150298,4243],{"class":79},[45,150300,3889],{"class":55},[45,150302,150303,150305,150307,150310],{"class":47,"line":1804},[45,150304,34750],{"class":79},[45,150306,282],{"class":55},[45,150308,150309],{"class":62},"\"取款金额必须大于0\"",[45,150311,139],{"class":55},[45,150313,150314],{"class":47,"line":1825},[45,150315,150264],{"class":51},[45,150317,150318,150320,150322,150324,150326],{"class":47,"line":1830},[45,150319,2647],{"class":51},[45,150321,150242],{"class":55},[45,150323,1237],{"class":51},[45,150325,38973],{"class":79},[45,150327,150328],{"class":55},".__balance:\n",[45,150330,150331,150333,150335,150338],{"class":47,"line":1844},[45,150332,34750],{"class":79},[45,150334,282],{"class":55},[45,150336,150337],{"class":62},"\"余额不足\"",[45,150339,139],{"class":55},[45,150341,150342],{"class":47,"line":1849},[45,150343,150264],{"class":51},[45,150345,150346,150348,150350,150353],{"class":47,"line":1878},[45,150347,30945],{"class":79},[45,150349,150194],{"class":55},[45,150351,150352],{"class":51},"-=",[45,150354,150275],{"class":55},[45,150356,150357],{"class":47,"line":1883},[45,150358,2550],{"emptyLinePlaceholder":207},[45,150360,150361],{"class":47,"line":1900},[45,150362,2550],{"emptyLinePlaceholder":207},[45,150364,150365,150368,150370,150373,150375,150377,150379],{"class":47,"line":1905},[45,150366,150367],{"class":55},"account ",[45,150369,59],{"class":51},[45,150371,150372],{"class":55}," Account(",[45,150374,149988],{"class":62},[45,150376,12584],{"class":55},[45,150378,6560],{"class":79},[45,150380,139],{"class":55},[45,150382,150383,150386,150388],{"class":47,"line":1910},[45,150384,150385],{"class":55},"account.deposit(",[45,150387,1873],{"class":79},[45,150389,139],{"class":55},[45,150391,150392,150395,150397],{"class":47,"line":1915},[45,150393,150394],{"class":55},"account.withdraw(",[45,150396,588],{"class":79},[45,150398,139],{"class":55},[45,150400,150401,150403],{"class":47,"line":1929},[45,150402,30515],{"class":79},[45,150404,150405],{"class":55},"(account.get_balance())\n",[20,150407,150408],{},"封装的意义是避免外部随意修改内部状态。",[15,150410,150412],{"id":150411},"_118-继承","11.8 继承",[20,150414,150415],{},"继承可以让子类复用父类的属性和方法。",[36,150417,150419],{"className":30478,"code":150418,"language":30480,"meta":25,"style":25},"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",[42,150420,150421,150430,150439,150450,150454,150458,150472,150481,150492,150496,150500,150510,150515],{"__ignoreMap":25},[45,150422,150423,150425,150428],{"class":47,"line":48},[45,150424,14843],{"class":51},[45,150426,150427],{"class":69}," Animal",[45,150429,3889],{"class":55},[45,150431,150432,150434,150437],{"class":47,"line":66},[45,150433,30901],{"class":51},[45,150435,150436],{"class":69}," eat",[45,150438,30907],{"class":55},[45,150440,150441,150443,150445,150448],{"class":47,"line":1331},[45,150442,32551],{"class":79},[45,150444,282],{"class":55},[45,150446,150447],{"class":62},"\"吃东西\"",[45,150449,139],{"class":55},[45,150451,150452],{"class":47,"line":1346},[45,150453,2550],{"emptyLinePlaceholder":207},[45,150455,150456],{"class":47,"line":1352},[45,150457,2550],{"emptyLinePlaceholder":207},[45,150459,150460,150462,150465,150467,150470],{"class":47,"line":1366},[45,150461,14843],{"class":51},[45,150463,150464],{"class":69}," Dog",[45,150466,282],{"class":55},[45,150468,150469],{"class":69},"Animal",[45,150471,30886],{"class":55},[45,150473,150474,150476,150479],{"class":47,"line":1372},[45,150475,30901],{"class":51},[45,150477,150478],{"class":69}," bark",[45,150480,30907],{"class":55},[45,150482,150483,150485,150487,150490],{"class":47,"line":1463},[45,150484,32551],{"class":79},[45,150486,282],{"class":55},[45,150488,150489],{"class":62},"\"汪汪\"",[45,150491,139],{"class":55},[45,150493,150494],{"class":47,"line":1469},[45,150495,2550],{"emptyLinePlaceholder":207},[45,150497,150498],{"class":47,"line":1481},[45,150499,2550],{"emptyLinePlaceholder":207},[45,150501,150502,150505,150507],{"class":47,"line":1763},[45,150503,150504],{"class":55},"dog ",[45,150506,59],{"class":51},[45,150508,150509],{"class":55}," Dog()\n",[45,150511,150512],{"class":47,"line":1768},[45,150513,150514],{"class":55},"dog.eat()\n",[45,150516,150517],{"class":47,"line":1774},[45,150518,150519],{"class":55},"dog.bark()\n",[20,150521,150522],{},"子类可以扩展新方法，也可以重写父类方法。",[15,150524,150526],{"id":150525},"_119-方法重写","11.9 方法重写",[36,150528,150530],{"className":30478,"code":150529,"language":30480,"meta":25,"style":25},"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",[42,150531,150532,150540,150549,150560,150564,150568,150580,150588,150598,150602,150606,150619,150627,150638,150642,150646,150654,150664,150668,150673],{"__ignoreMap":25},[45,150533,150534,150536,150538],{"class":47,"line":48},[45,150535,14843],{"class":51},[45,150537,150427],{"class":69},[45,150539,3889],{"class":55},[45,150541,150542,150544,150547],{"class":47,"line":66},[45,150543,30901],{"class":51},[45,150545,150546],{"class":69}," speak",[45,150548,30907],{"class":55},[45,150550,150551,150553,150555,150558],{"class":47,"line":1331},[45,150552,32551],{"class":79},[45,150554,282],{"class":55},[45,150556,150557],{"class":62},"\"动物叫\"",[45,150559,139],{"class":55},[45,150561,150562],{"class":47,"line":1346},[45,150563,2550],{"emptyLinePlaceholder":207},[45,150565,150566],{"class":47,"line":1352},[45,150567,2550],{"emptyLinePlaceholder":207},[45,150569,150570,150572,150574,150576,150578],{"class":47,"line":1366},[45,150571,14843],{"class":51},[45,150573,150464],{"class":69},[45,150575,282],{"class":55},[45,150577,150469],{"class":69},[45,150579,30886],{"class":55},[45,150581,150582,150584,150586],{"class":47,"line":1372},[45,150583,30901],{"class":51},[45,150585,150546],{"class":69},[45,150587,30907],{"class":55},[45,150589,150590,150592,150594,150596],{"class":47,"line":1463},[45,150591,32551],{"class":79},[45,150593,282],{"class":55},[45,150595,150489],{"class":62},[45,150597,139],{"class":55},[45,150599,150600],{"class":47,"line":1469},[45,150601,2550],{"emptyLinePlaceholder":207},[45,150603,150604],{"class":47,"line":1481},[45,150605,2550],{"emptyLinePlaceholder":207},[45,150607,150608,150610,150613,150615,150617],{"class":47,"line":1763},[45,150609,14843],{"class":51},[45,150611,150612],{"class":69}," Cat",[45,150614,282],{"class":55},[45,150616,150469],{"class":69},[45,150618,30886],{"class":55},[45,150620,150621,150623,150625],{"class":47,"line":1768},[45,150622,30901],{"class":51},[45,150624,150546],{"class":69},[45,150626,30907],{"class":55},[45,150628,150629,150631,150633,150636],{"class":47,"line":1774},[45,150630,32551],{"class":79},[45,150632,282],{"class":55},[45,150634,150635],{"class":62},"\"喵喵\"",[45,150637,139],{"class":55},[45,150639,150640],{"class":47,"line":1779},[45,150641,2550],{"emptyLinePlaceholder":207},[45,150643,150644],{"class":47,"line":1793},[45,150645,2550],{"emptyLinePlaceholder":207},[45,150647,150648,150650,150652],{"class":47,"line":1798},[45,150649,150504],{"class":55},[45,150651,59],{"class":51},[45,150653,150509],{"class":55},[45,150655,150656,150659,150661],{"class":47,"line":1804},[45,150657,150658],{"class":55},"cat ",[45,150660,59],{"class":51},[45,150662,150663],{"class":55}," Cat()\n",[45,150665,150666],{"class":47,"line":1825},[45,150667,2550],{"emptyLinePlaceholder":207},[45,150669,150670],{"class":47,"line":1830},[45,150671,150672],{"class":55},"dog.speak()\n",[45,150674,150675],{"class":47,"line":1844},[45,150676,150677],{"class":55},"cat.speak()\n",[15,150679,150681],{"id":150680},"_1110-super","11.10 super",[20,150683,150684,150685,150688],{},"子类可以通过 ",[42,150686,150687],{},"super()"," 调用父类方法。",[36,150690,150692],{"className":30478,"code":150691,"language":30480,"meta":25,"style":25},"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",[42,150693,150694,150702,150711,150721,150725,150729,150741,150750,150761,150771,150775,150779,150795],{"__ignoreMap":25},[45,150695,150696,150698,150700],{"class":47,"line":48},[45,150697,14843],{"class":51},[45,150699,15718],{"class":69},[45,150701,3889],{"class":55},[45,150703,150704,150706,150708],{"class":47,"line":66},[45,150705,30901],{"class":51},[45,150707,30904],{"class":79},[45,150709,150710],{"class":55},"(self, name):\n",[45,150712,150713,150715,150717,150719],{"class":47,"line":1331},[45,150714,30945],{"class":79},[45,150716,149890],{"class":55},[45,150718,59],{"class":51},[45,150720,149895],{"class":55},[45,150722,150723],{"class":47,"line":1346},[45,150724,2550],{"emptyLinePlaceholder":207},[45,150726,150727],{"class":47,"line":1352},[45,150728,2550],{"emptyLinePlaceholder":207},[45,150730,150731,150733,150735,150737,150739],{"class":47,"line":1366},[45,150732,14843],{"class":51},[45,150734,8048],{"class":69},[45,150736,282],{"class":55},[45,150738,19195],{"class":69},[45,150740,30886],{"class":55},[45,150742,150743,150745,150747],{"class":47,"line":1372},[45,150744,30901],{"class":51},[45,150746,30904],{"class":79},[45,150748,150749],{"class":55},"(self, name, score):\n",[45,150751,150752,150754,150756,150758],{"class":47,"line":1463},[45,150753,30917],{"class":79},[45,150755,17410],{"class":55},[45,150757,30929],{"class":79},[45,150759,150760],{"class":55},"(name)\n",[45,150762,150763,150765,150767,150769],{"class":47,"line":1469},[45,150764,30945],{"class":79},[45,150766,149914],{"class":55},[45,150768,59],{"class":51},[45,150770,1730],{"class":55},[45,150772,150773],{"class":47,"line":1481},[45,150774,2550],{"emptyLinePlaceholder":207},[45,150776,150777],{"class":47,"line":1763},[45,150778,2550],{"emptyLinePlaceholder":207},[45,150780,150781,150783,150785,150787,150789,150791,150793],{"class":47,"line":1768},[45,150782,149581],{"class":55},[45,150784,59],{"class":51},[45,150786,149985],{"class":55},[45,150788,149988],{"class":62},[45,150790,12584],{"class":55},[45,150792,1266],{"class":79},[45,150794,139],{"class":55},[45,150796,150797,150799],{"class":47,"line":1774},[45,150798,30515],{"class":79},[45,150800,150801],{"class":55},"(student.name, student.score)\n",[15,150803,150805],{"id":150804},"_1111-多态","11.11 多态",[20,150807,150808],{},"多态指不同对象响应同一个方法，表现出不同结果。",[36,150810,150812],{"className":30478,"code":150811,"language":30480,"meta":25,"style":25},"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",[42,150813,150814,150822,150830,150840,150844,150848,150856,150864,150874,150878,150882,150892,150897,150901,150905,150910],{"__ignoreMap":25},[45,150815,150816,150818,150820],{"class":47,"line":48},[45,150817,14843],{"class":51},[45,150819,150464],{"class":69},[45,150821,3889],{"class":55},[45,150823,150824,150826,150828],{"class":47,"line":66},[45,150825,30901],{"class":51},[45,150827,150546],{"class":69},[45,150829,30907],{"class":55},[45,150831,150832,150834,150836,150838],{"class":47,"line":1331},[45,150833,32551],{"class":79},[45,150835,282],{"class":55},[45,150837,150489],{"class":62},[45,150839,139],{"class":55},[45,150841,150842],{"class":47,"line":1346},[45,150843,2550],{"emptyLinePlaceholder":207},[45,150845,150846],{"class":47,"line":1352},[45,150847,2550],{"emptyLinePlaceholder":207},[45,150849,150850,150852,150854],{"class":47,"line":1366},[45,150851,14843],{"class":51},[45,150853,150612],{"class":69},[45,150855,3889],{"class":55},[45,150857,150858,150860,150862],{"class":47,"line":1372},[45,150859,30901],{"class":51},[45,150861,150546],{"class":69},[45,150863,30907],{"class":55},[45,150865,150866,150868,150870,150872],{"class":47,"line":1463},[45,150867,32551],{"class":79},[45,150869,282],{"class":55},[45,150871,150635],{"class":62},[45,150873,139],{"class":55},[45,150875,150876],{"class":47,"line":1469},[45,150877,2550],{"emptyLinePlaceholder":207},[45,150879,150880],{"class":47,"line":1481},[45,150881,2550],{"emptyLinePlaceholder":207},[45,150883,150884,150886,150889],{"class":47,"line":1763},[45,150885,32047],{"class":51},[45,150887,150888],{"class":69}," make_sound",[45,150890,150891],{"class":55},"(animal):\n",[45,150893,150894],{"class":47,"line":1768},[45,150895,150896],{"class":55},"    animal.speak()\n",[45,150898,150899],{"class":47,"line":1774},[45,150900,2550],{"emptyLinePlaceholder":207},[45,150902,150903],{"class":47,"line":1779},[45,150904,2550],{"emptyLinePlaceholder":207},[45,150906,150907],{"class":47,"line":1793},[45,150908,150909],{"class":55},"make_sound(Dog())\n",[45,150911,150912],{"class":47,"line":1798},[45,150913,150914],{"class":55},"make_sound(Cat())\n",[20,150916,150917],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[15,150919,150921],{"id":150920},"_1112-类属性和实例属性","11.12 类属性和实例属性",[20,150923,150924],{},"实例属性属于对象：",[36,150926,150928],{"className":30478,"code":150927,"language":30480,"meta":25,"style":25},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[42,150929,150930,150938,150946],{"__ignoreMap":25},[45,150931,150932,150934,150936],{"class":47,"line":48},[45,150933,14843],{"class":51},[45,150935,8048],{"class":69},[45,150937,3889],{"class":55},[45,150939,150940,150942,150944],{"class":47,"line":66},[45,150941,30901],{"class":51},[45,150943,30904],{"class":79},[45,150945,150710],{"class":55},[45,150947,150948,150950,150952,150954],{"class":47,"line":1331},[45,150949,30945],{"class":79},[45,150951,149890],{"class":55},[45,150953,59],{"class":51},[45,150955,149895],{"class":55},[20,150957,150958],{},"类属性属于类，所有对象共享：",[36,150960,150962],{"className":30478,"code":150961,"language":30480,"meta":25,"style":25},"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",[42,150963,150964,150972,150982,150986,150994,151004,151008,151012,151025,151039,151043,151050,151057],{"__ignoreMap":25},[45,150965,150966,150968,150970],{"class":47,"line":48},[45,150967,14843],{"class":51},[45,150969,8048],{"class":69},[45,150971,3889],{"class":55},[45,150973,150974,150977,150979],{"class":47,"line":66},[45,150975,150976],{"class":55},"    school ",[45,150978,59],{"class":51},[45,150980,150981],{"class":62}," \"黑马学校\"\n",[45,150983,150984],{"class":47,"line":1331},[45,150985,2550],{"emptyLinePlaceholder":207},[45,150987,150988,150990,150992],{"class":47,"line":1346},[45,150989,30901],{"class":51},[45,150991,30904],{"class":79},[45,150993,150710],{"class":55},[45,150995,150996,150998,151000,151002],{"class":47,"line":1352},[45,150997,30945],{"class":79},[45,150999,149890],{"class":55},[45,151001,59],{"class":51},[45,151003,149895],{"class":55},[45,151005,151006],{"class":47,"line":1366},[45,151007,2550],{"emptyLinePlaceholder":207},[45,151009,151010],{"class":47,"line":1372},[45,151011,2550],{"emptyLinePlaceholder":207},[45,151013,151014,151017,151019,151021,151023],{"class":47,"line":1463},[45,151015,151016],{"class":55},"s1 ",[45,151018,59],{"class":51},[45,151020,149985],{"class":55},[45,151022,149988],{"class":62},[45,151024,139],{"class":55},[45,151026,151027,151030,151032,151034,151037],{"class":47,"line":1469},[45,151028,151029],{"class":55},"s2 ",[45,151031,59],{"class":51},[45,151033,149985],{"class":55},[45,151035,151036],{"class":62},"\"小红\"",[45,151038,139],{"class":55},[45,151040,151041],{"class":47,"line":1481},[45,151042,2550],{"emptyLinePlaceholder":207},[45,151044,151045,151047],{"class":47,"line":1763},[45,151046,30515],{"class":79},[45,151048,151049],{"class":55},"(s1.school)\n",[45,151051,151052,151054],{"class":47,"line":1768},[45,151053,30515],{"class":79},[45,151055,151056],{"class":55},"(s2.school)\n",[45,151058,151059,151061],{"class":47,"line":1774},[45,151060,30515],{"class":79},[45,151062,151063],{"class":55},"(Student.school)\n",[20,151065,151066],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[15,151068,151070],{"id":151069},"_1113-类方法和静态方法","11.13 类方法和静态方法",[249,151072,151074],{"id":151073},"_11131-类方法","11.13.1 类方法",[20,151076,151077,151078,151081,151082,28485],{},"类方法使用 ",[42,151079,151080],{},"@classmethod","，第一个参数通常是 ",[42,151083,151084],{},"cls",[36,151086,151088],{"className":30478,"code":151087,"language":30480,"meta":25,"style":25},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[42,151089,151090,151098,151106,151110,151118,151128,151138,151142,151146],{"__ignoreMap":25},[45,151091,151092,151094,151096],{"class":47,"line":48},[45,151093,14843],{"class":51},[45,151095,8048],{"class":69},[45,151097,3889],{"class":55},[45,151099,151100,151102,151104],{"class":47,"line":66},[45,151101,150976],{"class":55},[45,151103,59],{"class":51},[45,151105,150981],{"class":62},[45,151107,151108],{"class":47,"line":1331},[45,151109,2550],{"emptyLinePlaceholder":207},[45,151111,151112,151115],{"class":47,"line":1346},[45,151113,151114],{"class":69},"    @",[45,151116,151117],{"class":79},"classmethod\n",[45,151119,151120,151122,151125],{"class":47,"line":1352},[45,151121,30901],{"class":51},[45,151123,151124],{"class":69}," get_school",[45,151126,151127],{"class":55},"(cls):\n",[45,151129,151130,151132,151135],{"class":47,"line":1366},[45,151131,14901],{"class":51},[45,151133,151134],{"class":79}," cls",[45,151136,151137],{"class":55},".school\n",[45,151139,151140],{"class":47,"line":1372},[45,151141,2550],{"emptyLinePlaceholder":207},[45,151143,151144],{"class":47,"line":1463},[45,151145,2550],{"emptyLinePlaceholder":207},[45,151147,151148,151150],{"class":47,"line":1469},[45,151149,30515],{"class":79},[45,151151,151152],{"class":55},"(Student.get_school())\n",[249,151154,151156],{"id":151155},"_11132-静态方法","11.13.2 静态方法",[20,151158,151159,151160,151163],{},"静态方法使用 ",[42,151161,151162],{},"@staticmethod","，不需要访问实例和类。",[36,151165,151167],{"className":30478,"code":151166,"language":30480,"meta":25,"style":25},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[42,151168,151169,151178,151185,151194,151205,151209,151213],{"__ignoreMap":25},[45,151170,151171,151173,151176],{"class":47,"line":48},[45,151172,14843],{"class":51},[45,151174,151175],{"class":69}," MathUtils",[45,151177,3889],{"class":55},[45,151179,151180,151182],{"class":47,"line":66},[45,151181,151114],{"class":69},[45,151183,151184],{"class":79},"staticmethod\n",[45,151186,151187,151189,151191],{"class":47,"line":1331},[45,151188,30901],{"class":51},[45,151190,5359],{"class":69},[45,151192,151193],{"class":55},"(a, b):\n",[45,151195,151196,151198,151200,151202],{"class":47,"line":1346},[45,151197,14901],{"class":51},[45,151199,11018],{"class":55},[45,151201,758],{"class":51},[45,151203,151204],{"class":55}," b\n",[45,151206,151207],{"class":47,"line":1352},[45,151208,2550],{"emptyLinePlaceholder":207},[45,151210,151211],{"class":47,"line":1366},[45,151212,2550],{"emptyLinePlaceholder":207},[45,151214,151215,151217,151220,151222,151224,151226],{"class":47,"line":1372},[45,151216,30515],{"class":79},[45,151218,151219],{"class":55},"(MathUtils.add(",[45,151221,495],{"class":79},[45,151223,12584],{"class":55},[45,151225,356],{"class":79},[45,151227,30597],{"class":55},[20,151229,151230],{},"静态方法本质上是放在类命名空间里的普通函数。",[15,151232,151234],{"id":151233},"_1114-dataclass","11.14 dataclass",[20,151236,151237,151240],{},[42,151238,151239],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[36,151242,151244],{"className":30478,"code":151243,"language":30480,"meta":25,"style":25},"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",[42,151245,151246,151258,151262,151266,151271,151279,151287,151295,151303,151307,151311,151331],{"__ignoreMap":25},[45,151247,151248,151250,151253,151255],{"class":47,"line":48},[45,151249,30837],{"class":51},[45,151251,151252],{"class":55}," dataclasses ",[45,151254,30492],{"class":51},[45,151256,151257],{"class":55}," dataclass\n",[45,151259,151260],{"class":47,"line":66},[45,151261,2550],{"emptyLinePlaceholder":207},[45,151263,151264],{"class":47,"line":1331},[45,151265,2550],{"emptyLinePlaceholder":207},[45,151267,151268],{"class":47,"line":1346},[45,151269,151270],{"class":69},"@dataclass\n",[45,151272,151273,151275,151277],{"class":47,"line":1352},[45,151274,14843],{"class":51},[45,151276,8048],{"class":69},[45,151278,3889],{"class":55},[45,151280,151281,151284],{"class":47,"line":1366},[45,151282,151283],{"class":55},"    name: ",[45,151285,151286],{"class":79},"str\n",[45,151288,151289,151292],{"class":47,"line":1372},[45,151290,151291],{"class":55},"    age: ",[45,151293,151294],{"class":79},"int\n",[45,151296,151297,151300],{"class":47,"line":1463},[45,151298,151299],{"class":55},"    score: ",[45,151301,151302],{"class":79},"float\n",[45,151304,151305],{"class":47,"line":1469},[45,151306,2550],{"emptyLinePlaceholder":207},[45,151308,151309],{"class":47,"line":1481},[45,151310,2550],{"emptyLinePlaceholder":207},[45,151312,151313,151315,151317,151319,151321,151323,151325,151327,151329],{"class":47,"line":1763},[45,151314,149581],{"class":55},[45,151316,59],{"class":51},[45,151318,149985],{"class":55},[45,151320,149988],{"class":62},[45,151322,12584],{"class":55},[45,151324,927],{"class":79},[45,151326,12584],{"class":55},[45,151328,1266],{"class":79},[45,151330,139],{"class":55},[45,151332,151333,151335],{"class":47,"line":1768},[45,151334,30515],{"class":79},[45,151336,150142],{"class":55},[20,151338,151339,151340,490,151342,151345],{},"它会自动生成 ",[42,151341,30929],{},[42,151343,151344],{},"__repr__"," 等方法。适合数据模型类。",[15,151347,151349],{"id":151348},"_1115-小案例学生类","11.15 小案例：学生类",[36,151351,151353],{"className":30478,"code":151352,"language":30480,"meta":25,"style":25},"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",[42,151354,151355,151363,151372,151384,151394,151404,151414,151418,151427,151440,151444,151453,151459,151471,151483,151495,151507,151511,151515,151521,151531,151540,151550,151558,151566,151575,151579,151583,151591,151627,151631,151635,151660,151667],{"__ignoreMap":25},[45,151356,151357,151359,151361],{"class":47,"line":48},[45,151358,14843],{"class":51},[45,151360,8048],{"class":69},[45,151362,3889],{"class":55},[45,151364,151365,151367,151369],{"class":47,"line":66},[45,151366,30901],{"class":51},[45,151368,30904],{"class":79},[45,151370,151371],{"class":55},"(self, student_id, name, age, score):\n",[45,151373,151374,151376,151379,151381],{"class":47,"line":1331},[45,151375,30945],{"class":79},[45,151377,151378],{"class":55},".student_id ",[45,151380,59],{"class":51},[45,151382,151383],{"class":55}," student_id\n",[45,151385,151386,151388,151390,151392],{"class":47,"line":1346},[45,151387,30945],{"class":79},[45,151389,149890],{"class":55},[45,151391,59],{"class":51},[45,151393,149895],{"class":55},[45,151395,151396,151398,151400,151402],{"class":47,"line":1352},[45,151397,30945],{"class":79},[45,151399,149902],{"class":55},[45,151401,59],{"class":51},[45,151403,149907],{"class":55},[45,151405,151406,151408,151410,151412],{"class":47,"line":1366},[45,151407,30945],{"class":79},[45,151409,149914],{"class":55},[45,151411,59],{"class":51},[45,151413,1730],{"class":55},[45,151415,151416],{"class":47,"line":1372},[45,151417,2550],{"emptyLinePlaceholder":207},[45,151419,151420,151422,151425],{"class":47,"line":1463},[45,151421,30901],{"class":51},[45,151423,151424],{"class":69}," is_passed",[45,151426,30907],{"class":55},[45,151428,151429,151431,151433,151435,151437],{"class":47,"line":1469},[45,151430,14901],{"class":51},[45,151432,38973],{"class":79},[45,151434,149914],{"class":55},[45,151436,1861],{"class":51},[45,151438,151439],{"class":79}," 60\n",[45,151441,151442],{"class":47,"line":1481},[45,151443,2550],{"emptyLinePlaceholder":207},[45,151445,151446,151448,151451],{"class":47,"line":1763},[45,151447,30901],{"class":51},[45,151449,151450],{"class":69}," to_dict",[45,151452,30907],{"class":55},[45,151454,151455,151457],{"class":47,"line":1768},[45,151456,14901],{"class":51},[45,151458,15721],{"class":55},[45,151460,151461,151464,151466,151468],{"class":47,"line":1774},[45,151462,151463],{"class":62},"            \"student_id\"",[45,151465,51537],{"class":55},[45,151467,30923],{"class":79},[45,151469,151470],{"class":55},".student_id,\n",[45,151472,151473,151476,151478,151480],{"class":47,"line":1779},[45,151474,151475],{"class":62},"            \"name\"",[45,151477,51537],{"class":55},[45,151479,30923],{"class":79},[45,151481,151482],{"class":55},".name,\n",[45,151484,151485,151488,151490,151492],{"class":47,"line":1793},[45,151486,151487],{"class":62},"            \"age\"",[45,151489,51537],{"class":55},[45,151491,30923],{"class":79},[45,151493,151494],{"class":55},".age,\n",[45,151496,151497,151500,151502,151504],{"class":47,"line":1798},[45,151498,151499],{"class":62},"            \"score\"",[45,151501,51537],{"class":55},[45,151503,30923],{"class":79},[45,151505,151506],{"class":55},".score,\n",[45,151508,151509],{"class":47,"line":1804},[45,151510,2679],{"class":55},[45,151512,151513],{"class":47,"line":1825},[45,151514,2550],{"emptyLinePlaceholder":207},[45,151516,151517,151519],{"class":47,"line":1830},[45,151518,151114],{"class":69},[45,151520,151117],{"class":79},[45,151522,151523,151525,151528],{"class":47,"line":1844},[45,151524,30901],{"class":51},[45,151526,151527],{"class":69}," from_dict",[45,151529,151530],{"class":55},"(cls, data):\n",[45,151532,151533,151535,151537],{"class":47,"line":1849},[45,151534,14901],{"class":51},[45,151536,151134],{"class":79},[45,151538,151539],{"class":55},"(\n",[45,151541,151542,151545,151548],{"class":47,"line":1878},[45,151543,151544],{"class":55},"            data[",[45,151546,151547],{"class":62},"\"student_id\"",[45,151549,87936],{"class":55},[45,151551,151552,151554,151556],{"class":47,"line":1883},[45,151553,151544],{"class":55},[45,151555,62779],{"class":62},[45,151557,87936],{"class":55},[45,151559,151560,151562,151564],{"class":47,"line":1900},[45,151561,151544],{"class":55},[45,151563,69224],{"class":62},[45,151565,87936],{"class":55},[45,151567,151568,151570,151573],{"class":47,"line":1905},[45,151569,151544],{"class":55},[45,151571,151572],{"class":62},"\"score\"",[45,151574,87936],{"class":55},[45,151576,151577],{"class":47,"line":1910},[45,151578,38226],{"class":55},[45,151580,151581],{"class":47,"line":1915},[45,151582,2550],{"emptyLinePlaceholder":207},[45,151584,151585,151587,151589],{"class":47,"line":1929},[45,151586,30901],{"class":51},[45,151588,150081],{"class":79},[45,151590,30907],{"class":55},[45,151592,151593,151595,151597,151599,151601,151604,151606,151609,151611,151613,151615,151617,151619,151621,151623,151625],{"class":47,"line":1934},[45,151594,14901],{"class":51},[45,151596,150090],{"class":51},[45,151598,89],{"class":62},[45,151600,149552],{"class":79},[45,151602,151603],{"class":55},".student_id",[45,151605,1223],{"class":79},[45,151607,151608],{"class":79}," {self",[45,151610,80401],{"class":55},[45,151612,1223],{"class":79},[45,151614,151608],{"class":79},[45,151616,80413],{"class":55},[45,151618,1223],{"class":79},[45,151620,151608],{"class":79},[45,151622,149962],{"class":55},[45,151624,1223],{"class":79},[45,151626,152],{"class":62},[45,151628,151629],{"class":47,"line":2727},[45,151630,2550],{"emptyLinePlaceholder":207},[45,151632,151633],{"class":47,"line":2741},[45,151634,2550],{"emptyLinePlaceholder":207},[45,151636,151637,151639,151641,151643,151646,151648,151650,151652,151654,151656,151658],{"class":47,"line":2749},[45,151638,149581],{"class":55},[45,151640,59],{"class":51},[45,151642,149985],{"class":55},[45,151644,151645],{"class":62},"\"001\"",[45,151647,12584],{"class":55},[45,151649,149988],{"class":62},[45,151651,12584],{"class":55},[45,151653,927],{"class":79},[45,151655,12584],{"class":55},[45,151657,1266],{"class":79},[45,151659,139],{"class":55},[45,151661,151662,151664],{"class":47,"line":2754},[45,151663,30515],{"class":79},[45,151665,151666],{"class":55},"(student.is_passed())\n",[45,151668,151669,151671],{"class":47,"line":2760},[45,151670,30515],{"class":79},[45,151672,151673],{"class":55},"(student.to_dict())\n",[20,151675,151676,101118,151679,151682],{},[42,151677,151678],{},"to_dict()",[42,151680,151681],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[15,151684,151686],{"id":151685},"_1116-易错点","11.16 易错点",[233,151688,151689,151695,151701,151706,151709,151712],{},[169,151690,151691,151692,28485],{},"类名推荐使用大驼峰，如 ",[42,151693,151694],{},"StudentManager",[169,151696,151697,151698,151700],{},"方法第一个参数必须写 ",[42,151699,30923],{},"，调用时不用传。",[169,151702,151703,151705],{},[42,151704,30929],{}," 不是普通方法，它在创建对象时自动执行。",[169,151707,151708],{},"私有属性不是绝对安全，只是约定和名称改写。",[169,151710,151711],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[169,151713,151714],{},"类中方法太多时，说明职责可能过重。",[15,151716,151718],{"id":151717},"_1117-本章练习","11.17 本章练习",[233,151720,151721,151727,151733,151738,151751],{},[169,151722,151723,151724,151726],{},"定义 ",[42,151725,149668],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[169,151728,151723,151729,151732],{},[42,151730,151731],{},"Account"," 类，实现存款、取款、查询余额。",[169,151734,151723,151735,151737],{},[42,151736,17375],{}," 类，计算圆的周长和面积。",[169,151739,151723,151740,490,151743,151746,151747,151750],{},[42,151741,151742],{},"Dog",[42,151744,151745],{},"Cat"," 类，并用同一个函数调用它们的 ",[42,151748,151749],{},"speak()"," 方法。",[169,151752,104466,151753,151755,151756,28485],{},[42,151754,151239],{}," 定义一个商品类 ",[42,151757,151758],{},"Product",[196,151760,151761],{},"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":25,"searchDepth":66,"depth":66,"links":151763},[151764,151765,151766,151767,151768,151769,151771,151772,151773,151774,151775,151776,151777,151781,151782,151783,151784],{"id":149432,"depth":66,"text":149433},{"id":149615,"depth":66,"text":149616},{"id":149679,"depth":66,"text":149680},{"id":149756,"depth":66,"text":149757},{"id":149855,"depth":66,"text":149856},{"id":150019,"depth":66,"text":151770},"11.6 str",{"id":150145,"depth":66,"text":150146},{"id":150411,"depth":66,"text":150412},{"id":150525,"depth":66,"text":150526},{"id":150680,"depth":66,"text":150681},{"id":150804,"depth":66,"text":150805},{"id":150920,"depth":66,"text":150921},{"id":151069,"depth":66,"text":151070,"children":151778},[151779,151780],{"id":151073,"depth":1331,"text":151074},{"id":151155,"depth":1331,"text":151156},{"id":151233,"depth":66,"text":151234},{"id":151348,"depth":66,"text":151349},{"id":151685,"depth":66,"text":151686},{"id":151717,"depth":66,"text":151718},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149424,"description":204},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151791,"title":151792,"body":151793,"description":204,"extension":205,"meta":155106,"navigation":207,"path":155107,"seo":155108,"stem":155109,"__hash__":155110},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151794,"toc":155082},[151795,151798,151802,151805,151808,151837,151840,151848,151852,151856,151859,151882,151885,151891,151895,153341,153344,153365,153369,153372,153384,153387,153571,153574,153700,153703,153707,153711,153847,153851,153937,153941,154023,154027,154064,154068,154257,154261,154264,154494,154498,154501,154682,154685,154689,154692,154698,154701,154727,154731,154734,154748,154751,154776,154779,154793,154796,154813,154816,154833,154836,154853,154857,154883,154887,154910,154914,154917,154919,154925,154927,154948,154951,154957,154963,154967,154970,155046,155049,155053,155079],[10,151796,151792],{"id":151797},"_12-综合案例与复习路线",[15,151799,151801],{"id":151800},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[20,151803,151804],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[20,151806,151807],{},"一个合格的入门综合项目最好覆盖：",[233,151809,151810,151813,151816,151819,151822,151825,151828,151831,151834],{},[169,151811,151812],{},"输入输出。",[169,151814,151815],{},"判断和循环。",[169,151817,151818],{},"函数拆分。",[169,151820,151821],{},"列表、字典等容器。",[169,151823,151824],{},"文件持久化。",[169,151826,151827],{},"异常处理。",[169,151829,151830],{},"模块拆分。",[169,151832,151833],{},"可选：面向对象。",[169,151835,151836],{},"可选：数据可视化。",[20,151838,151839],{},"本章整理两个方向：",[233,151841,151842,151845],{},[169,151843,151844],{},"学生管理系统。",[169,151846,151847],{},"销售数据统计和可视化。",[15,151849,151851],{"id":151850},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[249,151853,151855],{"id":151854},"_1221-需求","12.2.1 需求",[20,151857,151858],{},"实现一个命令行学生管理系统：",[233,151860,151861,151864,151867,151870,151873,151876,151879],{},[169,151862,151863],{},"添加学生。",[169,151865,151866],{},"删除学生。",[169,151868,151869],{},"修改学生。",[169,151871,151872],{},"查询学生。",[169,151874,151875],{},"显示所有学生。",[169,151877,151878],{},"保存到 JSON 文件。",[169,151880,151881],{},"程序启动时自动读取 JSON 文件。",[20,151883,151884],{},"学生字段：",[36,151886,151889],{"className":151887,"code":151888,"language":5337,"meta":25},[5335],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[42,151890,151888],{"__ignoreMap":25},[15,151892,151894],{"id":151893},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[36,151896,151898],{"className":30478,"code":151897,"language":30480,"meta":25,"style":25},"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",[42,151899,151900,151906,151916,151920,151934,151938,151942,151951,151963,151969,151973,151979,152010,152020,152027,152038,152044,152048,152052,152062,152093,152119,152123,152127,152136,152147,152158,152169,152180,152191,152202,152213,152217,152221,152231,152243,152259,152266,152273,152277,152281,152291,152299,152306,152319,152329,152340,152344,152348,152357,152365,152371,152383,152391,152402,152406,152410,152419,152435,152439,152446,152457,152462,152466,152482,152497,152512,152516,152521,152529,152537,152545,152553,152557,152562,152573,152577,152581,152590,152605,152615,152619,152631,152642,152646,152650,152655,152659,152670,152674,152678,152687,152702,152710,152714,152726,152736,152740,152744,152759,152772,152785,152789,152802,152814,152826,152830,152834,152845,152849,152853,152862,152877,152885,152889,152901,152911,152915,152919,152924,152928,152932,152942,152948,152970,152989,153008,153027,153032,153036,153040,153049,153057,153068,153072,153076,153102,153112,153117,153121,153125,153133,153143,153147,153155,153160,153176,153180,153194,153199,153213,153218,153231,153236,153249,153254,153267,153272,153285,153296,153300,153306,153317,153321,153325,153337],{"__ignoreMap":25},[45,151901,151902,151904],{"class":47,"line":48},[45,151903,30492],{"class":51},[45,151905,147191],{"class":55},[45,151907,151908,151910,151912,151914],{"class":47,"line":66},[45,151909,30837],{"class":51},[45,151911,108411],{"class":55},[45,151913,30492],{"class":51},[45,151915,108416],{"class":55},[45,151917,151918],{"class":47,"line":1331},[45,151919,2550],{"emptyLinePlaceholder":207},[45,151921,151922,151925,151927,151929,151932],{"class":47,"line":1346},[45,151923,151924],{"class":79},"DATA_FILE",[45,151926,13713],{"class":51},[45,151928,108645],{"class":55},[45,151930,151931],{"class":62},"\"students.json\"",[45,151933,139],{"class":55},[45,151935,151936],{"class":47,"line":1352},[45,151937,2550],{"emptyLinePlaceholder":207},[45,151939,151940],{"class":47,"line":1366},[45,151941,2550],{"emptyLinePlaceholder":207},[45,151943,151944,151946,151949],{"class":47,"line":1372},[45,151945,32047],{"class":51},[45,151947,151948],{"class":69}," load_students",[45,151950,32053],{"class":55},[45,151952,151953,151955,151957,151960],{"class":47,"line":1463},[45,151954,3251],{"class":51},[45,151956,39030],{"class":51},[45,151958,151959],{"class":79}," DATA_FILE",[45,151961,151962],{"class":55},".exists():\n",[45,151964,151965,151967],{"class":47,"line":1469},[45,151966,14901],{"class":51},[45,151968,51938],{"class":55},[45,151970,151971],{"class":47,"line":1481},[45,151972,2550],{"emptyLinePlaceholder":207},[45,151974,151975,151977],{"class":47,"line":1763},[45,151976,125884],{"class":51},[45,151978,3889],{"class":55},[45,151980,151981,151984,151986,151988,151990,151992,151994,151996,151998,152000,152002,152004,152006,152008],{"class":47,"line":1768},[45,151982,151983],{"class":51},"        with",[45,151985,146891],{"class":79},[45,151987,282],{"class":55},[45,151989,151924],{"class":79},[45,151991,12584],{"class":55},[45,151993,146901],{"class":62},[45,151995,12584],{"class":55},[45,151997,146906],{"class":5366},[45,151999,59],{"class":51},[45,152001,146911],{"class":62},[45,152003,13863],{"class":55},[45,152005,31483],{"class":51},[45,152007,148253],{"class":5366},[45,152009,3889],{"class":55},[45,152011,152012,152014,152016,152018],{"class":47,"line":1774},[45,152013,15881],{"class":51},[45,152015,148264],{"class":55},[45,152017,45454],{"class":5366},[45,152019,139],{"class":55},[45,152021,152022,152024],{"class":47,"line":1779},[45,152023,125912],{"class":51},[45,152025,152026],{"class":55}," json.JSONDecodeError:\n",[45,152028,152029,152031,152033,152036],{"class":47,"line":1793},[45,152030,32551],{"class":79},[45,152032,282],{"class":55},[45,152034,152035],{"class":62},"\"数据文件格式错误，已使用空数据启动\"",[45,152037,139],{"class":55},[45,152039,152040,152042],{"class":47,"line":1798},[45,152041,14901],{"class":51},[45,152043,51938],{"class":55},[45,152045,152046],{"class":47,"line":1804},[45,152047,2550],{"emptyLinePlaceholder":207},[45,152049,152050],{"class":47,"line":1825},[45,152051,2550],{"emptyLinePlaceholder":207},[45,152053,152054,152056,152059],{"class":47,"line":1830},[45,152055,32047],{"class":51},[45,152057,152058],{"class":69}," save_students",[45,152060,152061],{"class":55},"(students):\n",[45,152063,152064,152066,152068,152070,152072,152074,152077,152079,152081,152083,152085,152087,152089,152091],{"class":47,"line":1844},[45,152065,34278],{"class":51},[45,152067,146891],{"class":79},[45,152069,282],{"class":55},[45,152071,151924],{"class":79},[45,152073,12584],{"class":55},[45,152075,152076],{"class":62},"\"w\"",[45,152078,12584],{"class":55},[45,152080,146906],{"class":5366},[45,152082,59],{"class":51},[45,152084,146911],{"class":62},[45,152086,13863],{"class":55},[45,152088,31483],{"class":51},[45,152090,148253],{"class":5366},[45,152092,3889],{"class":55},[45,152094,152095,152098,152100,152102,152104,152106,152108,152110,152113,152115,152117],{"class":47,"line":1849},[45,152096,152097],{"class":55},"        json.dump(students, ",[45,152099,45454],{"class":5366},[45,152101,12584],{"class":55},[45,152103,147237],{"class":5366},[45,152105,59],{"class":51},[45,152107,34087],{"class":79},[45,152109,12584],{"class":55},[45,152111,152112],{"class":5366},"indent",[45,152114,59],{"class":51},[45,152116,356],{"class":79},[45,152118,139],{"class":55},[45,152120,152121],{"class":47,"line":1878},[45,152122,2550],{"emptyLinePlaceholder":207},[45,152124,152125],{"class":47,"line":1883},[45,152126,2550],{"emptyLinePlaceholder":207},[45,152128,152129,152131,152134],{"class":47,"line":1900},[45,152130,32047],{"class":51},[45,152132,152133],{"class":69}," show_menu",[45,152135,32053],{"class":55},[45,152137,152138,152140,152142,152145],{"class":47,"line":1905},[45,152139,31399],{"class":79},[45,152141,282],{"class":55},[45,152143,152144],{"class":62},"\"====== 学生管理系统 ======\"",[45,152146,139],{"class":55},[45,152148,152149,152151,152153,152156],{"class":47,"line":1910},[45,152150,31399],{"class":79},[45,152152,282],{"class":55},[45,152154,152155],{"class":62},"\"1. 添加学生\"",[45,152157,139],{"class":55},[45,152159,152160,152162,152164,152167],{"class":47,"line":1915},[45,152161,31399],{"class":79},[45,152163,282],{"class":55},[45,152165,152166],{"class":62},"\"2. 删除学生\"",[45,152168,139],{"class":55},[45,152170,152171,152173,152175,152178],{"class":47,"line":1929},[45,152172,31399],{"class":79},[45,152174,282],{"class":55},[45,152176,152177],{"class":62},"\"3. 修改学生\"",[45,152179,139],{"class":55},[45,152181,152182,152184,152186,152189],{"class":47,"line":1934},[45,152183,31399],{"class":79},[45,152185,282],{"class":55},[45,152187,152188],{"class":62},"\"4. 查询学生\"",[45,152190,139],{"class":55},[45,152192,152193,152195,152197,152200],{"class":47,"line":2727},[45,152194,31399],{"class":79},[45,152196,282],{"class":55},[45,152198,152199],{"class":62},"\"5. 显示所有学生\"",[45,152201,139],{"class":55},[45,152203,152204,152206,152208,152211],{"class":47,"line":2741},[45,152205,31399],{"class":79},[45,152207,282],{"class":55},[45,152209,152210],{"class":62},"\"0. 退出系统\"",[45,152212,139],{"class":55},[45,152214,152215],{"class":47,"line":2749},[45,152216,2550],{"emptyLinePlaceholder":207},[45,152218,152219],{"class":47,"line":2754},[45,152220,2550],{"emptyLinePlaceholder":207},[45,152222,152223,152225,152228],{"class":47,"line":2760},[45,152224,32047],{"class":51},[45,152226,152227],{"class":69}," find_student",[45,152229,152230],{"class":55},"(students, student_id):\n",[45,152232,152233,152235,152238,152240],{"class":47,"line":2766},[45,152234,3351],{"class":51},[45,152236,152237],{"class":55}," student ",[45,152239,26143],{"class":51},[45,152241,152242],{"class":55}," students:\n",[45,152244,152245,152247,152250,152252,152254,152256],{"class":47,"line":2771},[45,152246,2647],{"class":51},[45,152248,152249],{"class":55}," student[",[45,152251,151547],{"class":62},[45,152253,4593],{"class":55},[45,152255,3099],{"class":51},[45,152257,152258],{"class":55}," student_id:\n",[45,152260,152261,152263],{"class":47,"line":8098},[45,152262,15881],{"class":51},[45,152264,152265],{"class":55}," student\n",[45,152267,152268,152270],{"class":47,"line":8122},[45,152269,4240],{"class":51},[45,152271,152272],{"class":79}," None\n",[45,152274,152275],{"class":47,"line":8127},[45,152276,2550],{"emptyLinePlaceholder":207},[45,152278,152279],{"class":47,"line":8133},[45,152280,2550],{"emptyLinePlaceholder":207},[45,152282,152283,152285,152288],{"class":47,"line":8160},[45,152284,32047],{"class":51},[45,152286,152287],{"class":69}," input_int",[45,152289,152290],{"class":55},"(prompt):\n",[45,152292,152293,152295,152297],{"class":47,"line":8165},[45,152294,2401],{"class":51},[45,152296,95392],{"class":79},[45,152298,3889],{"class":55},[45,152300,152301,152304],{"class":47,"line":8171},[45,152302,152303],{"class":51},"        try",[45,152305,3889],{"class":55},[45,152307,152308,152310,152312,152314,152316],{"class":47,"line":8183},[45,152309,15881],{"class":51},[45,152311,2532],{"class":79},[45,152313,282],{"class":55},[45,152315,53921],{"class":79},[45,152317,152318],{"class":55},"(prompt))\n",[45,152320,152321,152324,152327],{"class":47,"line":8195},[45,152322,152323],{"class":51},"        except",[45,152325,152326],{"class":79}," ValueError",[45,152328,3889],{"class":55},[45,152330,152331,152333,152335,152338],{"class":47,"line":8207},[45,152332,34750],{"class":79},[45,152334,282],{"class":55},[45,152336,152337],{"class":62},"\"请输入整数\"",[45,152339,139],{"class":55},[45,152341,152342],{"class":47,"line":9866},[45,152343,2550],{"emptyLinePlaceholder":207},[45,152345,152346],{"class":47,"line":9890},[45,152347,2550],{"emptyLinePlaceholder":207},[45,152349,152350,152352,152355],{"class":47,"line":9913},[45,152351,32047],{"class":51},[45,152353,152354],{"class":69}," input_float",[45,152356,152290],{"class":55},[45,152358,152359,152361,152363],{"class":47,"line":9937},[45,152360,2401],{"class":51},[45,152362,95392],{"class":79},[45,152364,3889],{"class":55},[45,152366,152367,152369],{"class":47,"line":9942},[45,152368,152303],{"class":51},[45,152370,3889],{"class":55},[45,152372,152373,152375,152377,152379,152381],{"class":47,"line":9947},[45,152374,15881],{"class":51},[45,152376,109897],{"class":79},[45,152378,282],{"class":55},[45,152380,53921],{"class":79},[45,152382,152318],{"class":55},[45,152384,152385,152387,152389],{"class":47,"line":9952},[45,152386,152323],{"class":51},[45,152388,152326],{"class":79},[45,152390,3889],{"class":55},[45,152392,152393,152395,152397,152400],{"class":47,"line":9961},[45,152394,34750],{"class":79},[45,152396,282],{"class":55},[45,152398,152399],{"class":62},"\"请输入数字\"",[45,152401,139],{"class":55},[45,152403,152404],{"class":47,"line":9966},[45,152405,2550],{"emptyLinePlaceholder":207},[45,152407,152408],{"class":47,"line":9972},[45,152409,2550],{"emptyLinePlaceholder":207},[45,152411,152412,152414,152417],{"class":47,"line":9993},[45,152413,32047],{"class":51},[45,152415,152416],{"class":69}," add_student",[45,152418,152061],{"class":55},[45,152420,152421,152424,152426,152428,152430,152433],{"class":47,"line":9999},[45,152422,152423],{"class":55},"    student_id ",[45,152425,59],{"class":51},[45,152427,60705],{"class":79},[45,152429,282],{"class":55},[45,152431,152432],{"class":62},"\"请输入学号:\"",[45,152434,139],{"class":55},[45,152436,152437],{"class":47,"line":10013},[45,152438,2550],{"emptyLinePlaceholder":207},[45,152440,152441,152443],{"class":47,"line":10019},[45,152442,3251],{"class":51},[45,152444,152445],{"class":55}," find_student(students, student_id):\n",[45,152447,152448,152450,152452,152455],{"class":47,"line":10046},[45,152449,32551],{"class":79},[45,152451,282],{"class":55},[45,152453,152454],{"class":62},"\"学号已存在\"",[45,152456,139],{"class":55},[45,152458,152459],{"class":47,"line":10055},[45,152460,152461],{"class":51},"        return\n",[45,152463,152464],{"class":47,"line":10061},[45,152465,2550],{"emptyLinePlaceholder":207},[45,152467,152468,152471,152473,152475,152477,152480],{"class":47,"line":10069},[45,152469,152470],{"class":55},"    name ",[45,152472,59],{"class":51},[45,152474,60705],{"class":79},[45,152476,282],{"class":55},[45,152478,152479],{"class":62},"\"请输入姓名:\"",[45,152481,139],{"class":55},[45,152483,152484,152487,152489,152492,152495],{"class":47,"line":10074},[45,152485,152486],{"class":55},"    age ",[45,152488,59],{"class":51},[45,152490,152491],{"class":55}," input_int(",[45,152493,152494],{"class":62},"\"请输入年龄:\"",[45,152496,139],{"class":55},[45,152498,152499,152502,152504,152507,152510],{"class":47,"line":16753},[45,152500,152501],{"class":55},"    score ",[45,152503,59],{"class":51},[45,152505,152506],{"class":55}," input_float(",[45,152508,152509],{"class":62},"\"请输入成绩:\"",[45,152511,139],{"class":55},[45,152513,152514],{"class":47,"line":16759},[45,152515,2550],{"emptyLinePlaceholder":207},[45,152517,152518],{"class":47,"line":16782},[45,152519,152520],{"class":55},"    students.append({\n",[45,152522,152523,152526],{"class":47,"line":16788},[45,152524,152525],{"class":62},"        \"student_id\"",[45,152527,152528],{"class":55},": student_id,\n",[45,152530,152531,152534],{"class":47,"line":16811},[45,152532,152533],{"class":62},"        \"name\"",[45,152535,152536],{"class":55},": name,\n",[45,152538,152539,152542],{"class":47,"line":16825},[45,152540,152541],{"class":62},"        \"age\"",[45,152543,152544],{"class":55},": age,\n",[45,152546,152547,152550],{"class":47,"line":16845},[45,152548,152549],{"class":62},"        \"score\"",[45,152551,152552],{"class":55},": score,\n",[45,152554,152555],{"class":47,"line":16851},[45,152556,33561],{"class":55},[45,152558,152559],{"class":47,"line":16862},[45,152560,152561],{"class":55},"    save_students(students)\n",[45,152563,152564,152566,152568,152571],{"class":47,"line":16885},[45,152565,31399],{"class":79},[45,152567,282],{"class":55},[45,152569,152570],{"class":62},"\"添加成功\"",[45,152572,139],{"class":55},[45,152574,152575],{"class":47,"line":16907},[45,152576,2550],{"emptyLinePlaceholder":207},[45,152578,152579],{"class":47,"line":16912},[45,152580,2550],{"emptyLinePlaceholder":207},[45,152582,152583,152585,152588],{"class":47,"line":16918},[45,152584,32047],{"class":51},[45,152586,152587],{"class":69}," delete_student",[45,152589,152061],{"class":55},[45,152591,152592,152594,152596,152598,152600,152603],{"class":47,"line":16932},[45,152593,152423],{"class":55},[45,152595,59],{"class":51},[45,152597,60705],{"class":79},[45,152599,282],{"class":55},[45,152601,152602],{"class":62},"\"请输入要删除的学号:\"",[45,152604,139],{"class":55},[45,152606,152607,152610,152612],{"class":47,"line":16945},[45,152608,152609],{"class":55},"    student ",[45,152611,59],{"class":51},[45,152613,152614],{"class":55}," find_student(students, student_id)\n",[45,152616,152617],{"class":47,"line":16950},[45,152618,2550],{"emptyLinePlaceholder":207},[45,152620,152621,152623,152625,152627,152629],{"class":47,"line":16964},[45,152622,3251],{"class":51},[45,152624,152237],{"class":55},[45,152626,39027],{"class":51},[45,152628,39033],{"class":79},[45,152630,3889],{"class":55},[45,152632,152633,152635,152637,152640],{"class":47,"line":16969},[45,152634,32551],{"class":79},[45,152636,282],{"class":55},[45,152638,152639],{"class":62},"\"学生不存在\"",[45,152641,139],{"class":55},[45,152643,152644],{"class":47,"line":16975},[45,152645,152461],{"class":51},[45,152647,152648],{"class":47,"line":16980},[45,152649,2550],{"emptyLinePlaceholder":207},[45,152651,152652],{"class":47,"line":16994},[45,152653,152654],{"class":55},"    students.remove(student)\n",[45,152656,152657],{"class":47,"line":16999},[45,152658,152561],{"class":55},[45,152660,152661,152663,152665,152668],{"class":47,"line":17004},[45,152662,31399],{"class":79},[45,152664,282],{"class":55},[45,152666,152667],{"class":62},"\"删除成功\"",[45,152669,139],{"class":55},[45,152671,152672],{"class":47,"line":17018},[45,152673,2550],{"emptyLinePlaceholder":207},[45,152675,152676],{"class":47,"line":17030},[45,152677,2550],{"emptyLinePlaceholder":207},[45,152679,152680,152682,152685],{"class":47,"line":17035},[45,152681,32047],{"class":51},[45,152683,152684],{"class":69}," update_student",[45,152686,152061],{"class":55},[45,152688,152689,152691,152693,152695,152697,152700],{"class":47,"line":17048},[45,152690,152423],{"class":55},[45,152692,59],{"class":51},[45,152694,60705],{"class":79},[45,152696,282],{"class":55},[45,152698,152699],{"class":62},"\"请输入要修改的学号:\"",[45,152701,139],{"class":55},[45,152703,152704,152706,152708],{"class":47,"line":17053},[45,152705,152609],{"class":55},[45,152707,59],{"class":51},[45,152709,152614],{"class":55},[45,152711,152712],{"class":47,"line":17058},[45,152713,2550],{"emptyLinePlaceholder":207},[45,152715,152716,152718,152720,152722,152724],{"class":47,"line":17063},[45,152717,3251],{"class":51},[45,152719,152237],{"class":55},[45,152721,39027],{"class":51},[45,152723,39033],{"class":79},[45,152725,3889],{"class":55},[45,152727,152728,152730,152732,152734],{"class":47,"line":17076},[45,152729,32551],{"class":79},[45,152731,282],{"class":55},[45,152733,152639],{"class":62},[45,152735,139],{"class":55},[45,152737,152738],{"class":47,"line":17081},[45,152739,152461],{"class":51},[45,152741,152742],{"class":47,"line":32733},[45,152743,2550],{"emptyLinePlaceholder":207},[45,152745,152746,152748,152750,152752,152754,152757],{"class":47,"line":32739},[45,152747,152470],{"class":55},[45,152749,59],{"class":51},[45,152751,60705],{"class":79},[45,152753,282],{"class":55},[45,152755,152756],{"class":62},"\"请输入新姓名:\"",[45,152758,139],{"class":55},[45,152760,152761,152763,152765,152767,152770],{"class":47,"line":32745},[45,152762,152486],{"class":55},[45,152764,59],{"class":51},[45,152766,152491],{"class":55},[45,152768,152769],{"class":62},"\"请输入新年龄:\"",[45,152771,139],{"class":55},[45,152773,152774,152776,152778,152780,152783],{"class":47,"line":32751},[45,152775,152501],{"class":55},[45,152777,59],{"class":51},[45,152779,152506],{"class":55},[45,152781,152782],{"class":62},"\"请输入新成绩:\"",[45,152784,139],{"class":55},[45,152786,152787],{"class":47,"line":32757},[45,152788,2550],{"emptyLinePlaceholder":207},[45,152790,152791,152794,152796,152798,152800],{"class":47,"line":32768},[45,152792,152793],{"class":55},"    student[",[45,152795,62779],{"class":62},[45,152797,4593],{"class":55},[45,152799,59],{"class":51},[45,152801,149895],{"class":55},[45,152803,152804,152806,152808,152810,152812],{"class":47,"line":32774},[45,152805,152793],{"class":55},[45,152807,69224],{"class":62},[45,152809,4593],{"class":55},[45,152811,59],{"class":51},[45,152813,149907],{"class":55},[45,152815,152816,152818,152820,152822,152824],{"class":47,"line":32794},[45,152817,152793],{"class":55},[45,152819,151572],{"class":62},[45,152821,4593],{"class":55},[45,152823,59],{"class":51},[45,152825,1730],{"class":55},[45,152827,152828],{"class":47,"line":32800},[45,152829,2550],{"emptyLinePlaceholder":207},[45,152831,152832],{"class":47,"line":32811},[45,152833,152561],{"class":55},[45,152835,152836,152838,152840,152843],{"class":47,"line":32817},[45,152837,31399],{"class":79},[45,152839,282],{"class":55},[45,152841,152842],{"class":62},"\"修改成功\"",[45,152844,139],{"class":55},[45,152846,152847],{"class":47,"line":32823},[45,152848,2550],{"emptyLinePlaceholder":207},[45,152850,152851],{"class":47,"line":32829},[45,152852,2550],{"emptyLinePlaceholder":207},[45,152854,152855,152857,152860],{"class":47,"line":32835},[45,152856,32047],{"class":51},[45,152858,152859],{"class":69}," query_student",[45,152861,152061],{"class":55},[45,152863,152864,152866,152868,152870,152872,152875],{"class":47,"line":32841},[45,152865,152423],{"class":55},[45,152867,59],{"class":51},[45,152869,60705],{"class":79},[45,152871,282],{"class":55},[45,152873,152874],{"class":62},"\"请输入要查询的学号:\"",[45,152876,139],{"class":55},[45,152878,152879,152881,152883],{"class":47,"line":32847},[45,152880,152609],{"class":55},[45,152882,59],{"class":51},[45,152884,152614],{"class":55},[45,152886,152887],{"class":47,"line":32853},[45,152888,2550],{"emptyLinePlaceholder":207},[45,152890,152891,152893,152895,152897,152899],{"class":47,"line":32873},[45,152892,3251],{"class":51},[45,152894,152237],{"class":55},[45,152896,39027],{"class":51},[45,152898,39033],{"class":79},[45,152900,3889],{"class":55},[45,152902,152903,152905,152907,152909],{"class":47,"line":32879},[45,152904,32551],{"class":79},[45,152906,282],{"class":55},[45,152908,152639],{"class":62},[45,152910,139],{"class":55},[45,152912,152913],{"class":47,"line":32895},[45,152914,152461],{"class":51},[45,152916,152917],{"class":47,"line":32901},[45,152918,2550],{"emptyLinePlaceholder":207},[45,152920,152921],{"class":47,"line":32915},[45,152922,152923],{"class":55},"    print_student(student)\n",[45,152925,152926],{"class":47,"line":32921},[45,152927,2550],{"emptyLinePlaceholder":207},[45,152929,152930],{"class":47,"line":32936},[45,152931,2550],{"emptyLinePlaceholder":207},[45,152933,152934,152936,152939],{"class":47,"line":32942},[45,152935,32047],{"class":51},[45,152937,152938],{"class":69}," print_student",[45,152940,152941],{"class":55},"(student):\n",[45,152943,152944,152946],{"class":47,"line":32951},[45,152945,31399],{"class":79},[45,152947,151539],{"class":55},[45,152949,152950,152953,152955,152957,152960,152963,152965,152968],{"class":47,"line":32957},[45,152951,152952],{"class":51},"        f",[45,152954,89],{"class":62},[45,152956,1173],{"class":79},[45,152958,152959],{"class":55},"student[",[45,152961,152962],{"class":62},"'student_id'",[45,152964,1217],{"class":55},[45,152966,152967],{"class":79},"}\\t",[45,152969,152],{"class":62},[45,152971,152972,152974,152976,152978,152980,152983,152985,152987],{"class":47,"line":32966},[45,152973,152952],{"class":51},[45,152975,89],{"class":62},[45,152977,1173],{"class":79},[45,152979,152959],{"class":55},[45,152981,152982],{"class":62},"'name'",[45,152984,1217],{"class":55},[45,152986,152967],{"class":79},[45,152988,152],{"class":62},[45,152990,152991,152993,152995,152997,152999,153002,153004,153006],{"class":47,"line":32972},[45,152992,152952],{"class":51},[45,152994,89],{"class":62},[45,152996,1173],{"class":79},[45,152998,152959],{"class":55},[45,153000,153001],{"class":62},"'age'",[45,153003,1217],{"class":55},[45,153005,152967],{"class":79},[45,153007,152],{"class":62},[45,153009,153010,153012,153014,153016,153018,153021,153023,153025],{"class":47,"line":32978},[45,153011,152952],{"class":51},[45,153013,89],{"class":62},[45,153015,1173],{"class":79},[45,153017,152959],{"class":55},[45,153019,153020],{"class":62},"'score'",[45,153022,1217],{"class":55},[45,153024,1223],{"class":79},[45,153026,152],{"class":62},[45,153028,153029],{"class":47,"line":32987},[45,153030,153031],{"class":55},"    )\n",[45,153033,153034],{"class":47,"line":32993},[45,153035,2550],{"emptyLinePlaceholder":207},[45,153037,153038],{"class":47,"line":33004},[45,153039,2550],{"emptyLinePlaceholder":207},[45,153041,153042,153044,153047],{"class":47,"line":33010},[45,153043,32047],{"class":51},[45,153045,153046],{"class":69}," show_all_students",[45,153048,152061],{"class":55},[45,153050,153051,153053,153055],{"class":47,"line":33029},[45,153052,3251],{"class":51},[45,153054,39030],{"class":51},[45,153056,152242],{"class":55},[45,153058,153059,153061,153063,153066],{"class":47,"line":33035},[45,153060,32551],{"class":79},[45,153062,282],{"class":55},[45,153064,153065],{"class":62},"\"暂无学生\"",[45,153067,139],{"class":55},[45,153069,153070],{"class":47,"line":33046},[45,153071,152461],{"class":51},[45,153073,153074],{"class":47,"line":33052},[45,153075,2550],{"emptyLinePlaceholder":207},[45,153077,153078,153080,153082,153085,153087,153090,153092,153095,153097,153100],{"class":47,"line":33072},[45,153079,31399],{"class":79},[45,153081,282],{"class":55},[45,153083,153084],{"class":62},"\"学号",[45,153086,1382],{"class":79},[45,153088,153089],{"class":62},"姓名",[45,153091,1382],{"class":79},[45,153093,153094],{"class":62},"年龄",[45,153096,1382],{"class":79},[45,153098,153099],{"class":62},"成绩\"",[45,153101,139],{"class":55},[45,153103,153104,153106,153108,153110],{"class":47,"line":33088},[45,153105,3351],{"class":51},[45,153107,152237],{"class":55},[45,153109,26143],{"class":51},[45,153111,152242],{"class":55},[45,153113,153114],{"class":47,"line":33094},[45,153115,153116],{"class":55},"        print_student(student)\n",[45,153118,153119],{"class":47,"line":33108},[45,153120,2550],{"emptyLinePlaceholder":207},[45,153122,153123],{"class":47,"line":33114},[45,153124,2550],{"emptyLinePlaceholder":207},[45,153126,153127,153129,153131],{"class":47,"line":33120},[45,153128,32047],{"class":51},[45,153130,2123],{"class":69},[45,153132,32053],{"class":55},[45,153134,153135,153138,153140],{"class":47,"line":33131},[45,153136,153137],{"class":55},"    students ",[45,153139,59],{"class":51},[45,153141,153142],{"class":55}," load_students()\n",[45,153144,153145],{"class":47,"line":33137},[45,153146,2550],{"emptyLinePlaceholder":207},[45,153148,153149,153151,153153],{"class":47,"line":33143},[45,153150,2401],{"class":51},[45,153152,95392],{"class":79},[45,153154,3889],{"class":55},[45,153156,153157],{"class":47,"line":33153},[45,153158,153159],{"class":55},"        show_menu()\n",[45,153161,153162,153165,153167,153169,153171,153174],{"class":47,"line":33159},[45,153163,153164],{"class":55},"        choice ",[45,153166,59],{"class":51},[45,153168,60705],{"class":79},[45,153170,282],{"class":55},[45,153172,153173],{"class":62},"\"请输入操作:\"",[45,153175,139],{"class":55},[45,153177,153178],{"class":47,"line":33170},[45,153179,2550],{"emptyLinePlaceholder":207},[45,153181,153182,153184,153187,153189,153192],{"class":47,"line":33176},[45,153183,2647],{"class":51},[45,153185,153186],{"class":55}," choice ",[45,153188,3099],{"class":51},[45,153190,153191],{"class":62}," \"1\"",[45,153193,3889],{"class":55},[45,153195,153196],{"class":47,"line":33186},[45,153197,153198],{"class":55},"            add_student(students)\n",[45,153200,153201,153204,153206,153208,153211],{"class":47,"line":33191},[45,153202,153203],{"class":51},"        elif",[45,153205,153186],{"class":55},[45,153207,3099],{"class":51},[45,153209,153210],{"class":62}," \"2\"",[45,153212,3889],{"class":55},[45,153214,153215],{"class":47,"line":33197},[45,153216,153217],{"class":55},"            delete_student(students)\n",[45,153219,153220,153222,153224,153226,153229],{"class":47,"line":33246},[45,153221,153203],{"class":51},[45,153223,153186],{"class":55},[45,153225,3099],{"class":51},[45,153227,153228],{"class":62}," \"3\"",[45,153230,3889],{"class":55},[45,153232,153233],{"class":47,"line":33293},[45,153234,153235],{"class":55},"            update_student(students)\n",[45,153237,153238,153240,153242,153244,153247],{"class":47,"line":33298},[45,153239,153203],{"class":51},[45,153241,153186],{"class":55},[45,153243,3099],{"class":51},[45,153245,153246],{"class":62}," \"4\"",[45,153248,3889],{"class":55},[45,153250,153251],{"class":47,"line":33304},[45,153252,153253],{"class":55},"            query_student(students)\n",[45,153255,153256,153258,153260,153262,153265],{"class":47,"line":33323},[45,153257,153203],{"class":51},[45,153259,153186],{"class":55},[45,153261,3099],{"class":51},[45,153263,153264],{"class":62}," \"5\"",[45,153266,3889],{"class":55},[45,153268,153269],{"class":47,"line":33329},[45,153270,153271],{"class":55},"            show_all_students(students)\n",[45,153273,153274,153276,153278,153280,153283],{"class":47,"line":33349},[45,153275,153203],{"class":51},[45,153277,153186],{"class":55},[45,153279,3099],{"class":51},[45,153281,153282],{"class":62}," \"0\"",[45,153284,3889],{"class":55},[45,153286,153287,153289,153291,153294],{"class":47,"line":33355},[45,153288,34750],{"class":79},[45,153290,282],{"class":55},[45,153292,153293],{"class":62},"\"退出系统\"",[45,153295,139],{"class":55},[45,153297,153298],{"class":47,"line":33361},[45,153299,115198],{"class":51},[45,153301,153302,153304],{"class":47,"line":33371},[45,153303,2684],{"class":51},[45,153305,3889],{"class":55},[45,153307,153308,153310,153312,153315],{"class":47,"line":33376},[45,153309,34750],{"class":79},[45,153311,282],{"class":55},[45,153313,153314],{"class":62},"\"输入错误\"",[45,153316,139],{"class":55},[45,153318,153319],{"class":47,"line":33382},[45,153320,2550],{"emptyLinePlaceholder":207},[45,153322,153323],{"class":47,"line":33398},[45,153324,2550],{"emptyLinePlaceholder":207},[45,153326,153327,153329,153331,153333,153335],{"class":47,"line":33443},[45,153328,1682],{"class":51},[45,153330,31320],{"class":79},[45,153332,101659],{"class":51},[45,153334,101662],{"class":62},[45,153336,3889],{"class":55},[45,153338,153339],{"class":47,"line":33449},[45,153340,101669],{"class":55},[20,153342,153343],{},"这个项目串联了：",[233,153345,153346,153349,153352,153355,153358,153360],{},[169,153347,153348],{},"菜单循环。",[169,153350,153351],{},"函数封装。",[169,153353,153354],{},"列表字典。",[169,153356,153357],{},"JSON 读写。",[169,153359,151827],{},[169,153361,153362,28485],{},[42,153363,153364],{},"if __name__ == \"__main__\"",[15,153366,153368],{"id":153367},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[20,153370,153371],{},"可以进一步拆成两个类：",[233,153373,153374,153379],{},[169,153375,153376,153378],{},[42,153377,149668],{},"：表示单个学生。",[169,153380,153381,153383],{},[42,153382,151694],{},"：负责学生增删改查和文件保存。",[20,153385,153386],{},"示意代码：",[36,153388,153390],{"className":30478,"code":153389,"language":30480,"meta":25,"style":25},"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",[42,153391,153392,153402,153406,153410,153414,153422,153429,153435,153441,153447,153451,153459,153465,153475,153485,153495,153505,153509,153513,153519,153527,153535,153543,153551,153559,153567],{"__ignoreMap":25},[45,153393,153394,153396,153398,153400],{"class":47,"line":48},[45,153395,30837],{"class":51},[45,153397,151252],{"class":55},[45,153399,30492],{"class":51},[45,153401,151257],{"class":55},[45,153403,153404],{"class":47,"line":66},[45,153405,2550],{"emptyLinePlaceholder":207},[45,153407,153408],{"class":47,"line":1331},[45,153409,2550],{"emptyLinePlaceholder":207},[45,153411,153412],{"class":47,"line":1346},[45,153413,151270],{"class":69},[45,153415,153416,153418,153420],{"class":47,"line":1352},[45,153417,14843],{"class":51},[45,153419,8048],{"class":69},[45,153421,3889],{"class":55},[45,153423,153424,153427],{"class":47,"line":1366},[45,153425,153426],{"class":55},"    student_id: ",[45,153428,151286],{"class":79},[45,153430,153431,153433],{"class":47,"line":1372},[45,153432,151283],{"class":55},[45,153434,151286],{"class":79},[45,153436,153437,153439],{"class":47,"line":1463},[45,153438,151291],{"class":55},[45,153440,151294],{"class":79},[45,153442,153443,153445],{"class":47,"line":1469},[45,153444,151299],{"class":55},[45,153446,151302],{"class":79},[45,153448,153449],{"class":47,"line":1481},[45,153450,2550],{"emptyLinePlaceholder":207},[45,153452,153453,153455,153457],{"class":47,"line":1763},[45,153454,30901],{"class":51},[45,153456,151450],{"class":69},[45,153458,30907],{"class":55},[45,153460,153461,153463],{"class":47,"line":1768},[45,153462,14901],{"class":51},[45,153464,15721],{"class":55},[45,153466,153467,153469,153471,153473],{"class":47,"line":1774},[45,153468,151463],{"class":62},[45,153470,51537],{"class":55},[45,153472,30923],{"class":79},[45,153474,151470],{"class":55},[45,153476,153477,153479,153481,153483],{"class":47,"line":1779},[45,153478,151475],{"class":62},[45,153480,51537],{"class":55},[45,153482,30923],{"class":79},[45,153484,151482],{"class":55},[45,153486,153487,153489,153491,153493],{"class":47,"line":1793},[45,153488,151487],{"class":62},[45,153490,51537],{"class":55},[45,153492,30923],{"class":79},[45,153494,151494],{"class":55},[45,153496,153497,153499,153501,153503],{"class":47,"line":1798},[45,153498,151499],{"class":62},[45,153500,51537],{"class":55},[45,153502,30923],{"class":79},[45,153504,151506],{"class":55},[45,153506,153507],{"class":47,"line":1804},[45,153508,2679],{"class":55},[45,153510,153511],{"class":47,"line":1825},[45,153512,2550],{"emptyLinePlaceholder":207},[45,153514,153515,153517],{"class":47,"line":1830},[45,153516,151114],{"class":69},[45,153518,151117],{"class":79},[45,153520,153521,153523,153525],{"class":47,"line":1844},[45,153522,30901],{"class":51},[45,153524,151527],{"class":69},[45,153526,151530],{"class":55},[45,153528,153529,153531,153533],{"class":47,"line":1849},[45,153530,14901],{"class":51},[45,153532,151134],{"class":79},[45,153534,151539],{"class":55},[45,153536,153537,153539,153541],{"class":47,"line":1878},[45,153538,151544],{"class":55},[45,153540,151547],{"class":62},[45,153542,87936],{"class":55},[45,153544,153545,153547,153549],{"class":47,"line":1883},[45,153546,151544],{"class":55},[45,153548,62779],{"class":62},[45,153550,87936],{"class":55},[45,153552,153553,153555,153557],{"class":47,"line":1900},[45,153554,151544],{"class":55},[45,153556,69224],{"class":62},[45,153558,87936],{"class":55},[45,153560,153561,153563,153565],{"class":47,"line":1905},[45,153562,151544],{"class":55},[45,153564,151572],{"class":62},[45,153566,87936],{"class":55},[45,153568,153569],{"class":47,"line":1910},[45,153570,38226],{"class":55},[20,153572,153573],{},"管理器示意：",[36,153575,153577],{"className":30478,"code":153576,"language":30480,"meta":25,"style":25},"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",[42,153578,153579,153588,153596,153607,153611,153621,153634,153645,153652,153658,153662,153671,153680,153686,153693],{"__ignoreMap":25},[45,153580,153581,153583,153586],{"class":47,"line":48},[45,153582,14843],{"class":51},[45,153584,153585],{"class":69}," StudentManager",[45,153587,3889],{"class":55},[45,153589,153590,153592,153594],{"class":47,"line":66},[45,153591,30901],{"class":51},[45,153593,30904],{"class":79},[45,153595,30907],{"class":55},[45,153597,153598,153600,153603,153605],{"class":47,"line":1331},[45,153599,30945],{"class":79},[45,153601,153602],{"class":55},".students ",[45,153604,59],{"class":51},[45,153606,51938],{"class":55},[45,153608,153609],{"class":47,"line":1346},[45,153610,2550],{"emptyLinePlaceholder":207},[45,153612,153613,153615,153618],{"class":47,"line":1352},[45,153614,30901],{"class":51},[45,153616,153617],{"class":69}," find_by_id",[45,153619,153620],{"class":55},"(self, student_id):\n",[45,153622,153623,153625,153627,153629,153631],{"class":47,"line":1366},[45,153624,3553],{"class":51},[45,153626,152237],{"class":55},[45,153628,26143],{"class":51},[45,153630,38973],{"class":79},[45,153632,153633],{"class":55},".students:\n",[45,153635,153636,153638,153641,153643],{"class":47,"line":1372},[45,153637,4792],{"class":51},[45,153639,153640],{"class":55}," student.student_id ",[45,153642,3099],{"class":51},[45,153644,152258],{"class":55},[45,153646,153647,153650],{"class":47,"line":1463},[45,153648,153649],{"class":51},"                return",[45,153651,152265],{"class":55},[45,153653,153654,153656],{"class":47,"line":1469},[45,153655,14901],{"class":51},[45,153657,152272],{"class":79},[45,153659,153660],{"class":47,"line":1481},[45,153661,2550],{"emptyLinePlaceholder":207},[45,153663,153664,153666,153668],{"class":47,"line":1763},[45,153665,30901],{"class":51},[45,153667,5359],{"class":69},[45,153669,153670],{"class":55},"(self, student):\n",[45,153672,153673,153675,153677],{"class":47,"line":1768},[45,153674,2647],{"class":51},[45,153676,38973],{"class":79},[45,153678,153679],{"class":55},".find_by_id(student.student_id):\n",[45,153681,153682,153684],{"class":47,"line":1774},[45,153683,15881],{"class":51},[45,153685,125907],{"class":79},[45,153687,153688,153690],{"class":47,"line":1779},[45,153689,30945],{"class":79},[45,153691,153692],{"class":55},".students.append(student)\n",[45,153694,153695,153697],{"class":47,"line":1793},[45,153696,14901],{"class":51},[45,153698,153699],{"class":79}," True\n",[20,153701,153702],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[15,153704,153706],{"id":153705},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[249,153708,153710],{"id":153709},"_1251-数据结构","12.5.1 数据结构",[36,153712,153714],{"className":30478,"code":153713,"language":30480,"meta":25,"style":25},"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",[42,153715,153716,153724,153755,153785,153814,153843],{"__ignoreMap":25},[45,153717,153718,153720,153722],{"class":47,"line":48},[45,153719,148565],{"class":55},[45,153721,59],{"class":51},[45,153723,55547],{"class":55},[45,153725,153726,153728,153730,153732,153734,153736,153739,153741,153744,153746,153748,153750,153753],{"class":47,"line":66},[45,153727,148485],{"class":55},[45,153729,148097],{"class":62},[45,153731,51537],{"class":55},[45,153733,148708],{"class":62},[45,153735,12584],{"class":55},[45,153737,153738],{"class":62},"\"category\"",[45,153740,51537],{"class":55},[45,153742,153743],{"class":62},"\"手机\"",[45,153745,12584],{"class":55},[45,153747,84184],{"class":62},[45,153749,51537],{"class":55},[45,153751,153752],{"class":79},"12000",[45,153754,5080],{"class":55},[45,153756,153757,153759,153761,153763,153765,153767,153769,153771,153774,153776,153778,153780,153783],{"class":47,"line":1331},[45,153758,148485],{"class":55},[45,153760,148097],{"class":62},[45,153762,51537],{"class":55},[45,153764,148708],{"class":62},[45,153766,12584],{"class":55},[45,153768,153738],{"class":62},[45,153770,51537],{"class":55},[45,153772,153773],{"class":62},"\"电脑\"",[45,153775,12584],{"class":55},[45,153777,84184],{"class":62},[45,153779,51537],{"class":55},[45,153781,153782],{"class":79},"18000",[45,153784,5080],{"class":55},[45,153786,153787,153789,153791,153793,153795,153797,153799,153801,153803,153805,153807,153809,153812],{"class":47,"line":1346},[45,153788,148485],{"class":55},[45,153790,148097],{"class":62},[45,153792,51537],{"class":55},[45,153794,148729],{"class":62},[45,153796,12584],{"class":55},[45,153798,153738],{"class":62},[45,153800,51537],{"class":55},[45,153802,153743],{"class":62},[45,153804,12584],{"class":55},[45,153806,84184],{"class":62},[45,153808,51537],{"class":55},[45,153810,153811],{"class":79},"15000",[45,153813,5080],{"class":55},[45,153815,153816,153818,153820,153822,153824,153826,153828,153830,153832,153834,153836,153838,153841],{"class":47,"line":1352},[45,153817,148485],{"class":55},[45,153819,148097],{"class":62},[45,153821,51537],{"class":55},[45,153823,148729],{"class":62},[45,153825,12584],{"class":55},[45,153827,153738],{"class":62},[45,153829,51537],{"class":55},[45,153831,153773],{"class":62},[45,153833,12584],{"class":55},[45,153835,84184],{"class":62},[45,153837,51537],{"class":55},[45,153839,153840],{"class":79},"16000",[45,153842,5080],{"class":55},[45,153844,153845],{"class":47,"line":1366},[45,153846,33346],{"class":55},[249,153848,153850],{"id":153849},"_1252-按日期统计","12.5.2 按日期统计",[36,153852,153854],{"className":30478,"code":153853,"language":30480,"meta":25,"style":25},"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",[42,153855,153856,153865,153869,153880,153894,153907,153926,153930],{"__ignoreMap":25},[45,153857,153858,153861,153863],{"class":47,"line":48},[45,153859,153860],{"class":55},"daily_total ",[45,153862,59],{"class":51},[45,153864,87968],{"class":55},[45,153866,153867],{"class":47,"line":66},[45,153868,2550],{"emptyLinePlaceholder":207},[45,153870,153871,153873,153875,153877],{"class":47,"line":1331},[45,153872,3175],{"class":51},[45,153874,148309],{"class":55},[45,153876,26143],{"class":51},[45,153878,153879],{"class":55}," sales:\n",[45,153881,153882,153885,153887,153890,153892],{"class":47,"line":1346},[45,153883,153884],{"class":55},"    date ",[45,153886,59],{"class":51},[45,153888,153889],{"class":55}," item[",[45,153891,148097],{"class":62},[45,153893,33346],{"class":55},[45,153895,153896,153899,153901,153903,153905],{"class":47,"line":1352},[45,153897,153898],{"class":55},"    amount ",[45,153900,59],{"class":51},[45,153902,153889],{"class":55},[45,153904,84184],{"class":62},[45,153906,33346],{"class":55},[45,153908,153909,153912,153914,153917,153919,153921,153923],{"class":47,"line":1366},[45,153910,153911],{"class":55},"    daily_total[date] ",[45,153913,59],{"class":51},[45,153915,153916],{"class":55}," daily_total.get(date, ",[45,153918,469],{"class":79},[45,153920,13863],{"class":55},[45,153922,758],{"class":51},[45,153924,153925],{"class":55}," amount\n",[45,153927,153928],{"class":47,"line":1372},[45,153929,2550],{"emptyLinePlaceholder":207},[45,153931,153932,153934],{"class":47,"line":1463},[45,153933,30515],{"class":79},[45,153935,153936],{"class":55},"(daily_total)\n",[249,153938,153940],{"id":153939},"_1253-按类别统计","12.5.3 按类别统计",[36,153942,153944],{"className":30478,"code":153943,"language":30480,"meta":25,"style":25},"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",[42,153945,153946,153955,153959,153969,153982,153994,154012,154016],{"__ignoreMap":25},[45,153947,153948,153951,153953],{"class":47,"line":48},[45,153949,153950],{"class":55},"category_total ",[45,153952,59],{"class":51},[45,153954,87968],{"class":55},[45,153956,153957],{"class":47,"line":66},[45,153958,2550],{"emptyLinePlaceholder":207},[45,153960,153961,153963,153965,153967],{"class":47,"line":1331},[45,153962,3175],{"class":51},[45,153964,148309],{"class":55},[45,153966,26143],{"class":51},[45,153968,153879],{"class":55},[45,153970,153971,153974,153976,153978,153980],{"class":47,"line":1346},[45,153972,153973],{"class":55},"    category ",[45,153975,59],{"class":51},[45,153977,153889],{"class":55},[45,153979,153738],{"class":62},[45,153981,33346],{"class":55},[45,153983,153984,153986,153988,153990,153992],{"class":47,"line":1352},[45,153985,153898],{"class":55},[45,153987,59],{"class":51},[45,153989,153889],{"class":55},[45,153991,84184],{"class":62},[45,153993,33346],{"class":55},[45,153995,153996,153999,154001,154004,154006,154008,154010],{"class":47,"line":1366},[45,153997,153998],{"class":55},"    category_total[category] ",[45,154000,59],{"class":51},[45,154002,154003],{"class":55}," category_total.get(category, ",[45,154005,469],{"class":79},[45,154007,13863],{"class":55},[45,154009,758],{"class":51},[45,154011,153925],{"class":55},[45,154013,154014],{"class":47,"line":1372},[45,154015,2550],{"emptyLinePlaceholder":207},[45,154017,154018,154020],{"class":47,"line":1463},[45,154019,30515],{"class":79},[45,154021,154022],{"class":55},"(category_total)\n",[249,154024,154026],{"id":154025},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[36,154028,154030],{"className":30478,"code":154029,"language":30480,"meta":25,"style":25},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[42,154031,154032,154057],{"__ignoreMap":25},[45,154033,154034,154037,154039,154041,154044,154047,154050,154053,154055],{"class":47,"line":48},[45,154035,154036],{"class":55},"top_date, top_amount ",[45,154038,59],{"class":51},[45,154040,6101],{"class":79},[45,154042,154043],{"class":55},"(daily_total.items(), ",[45,154045,154046],{"class":5366},"key",[45,154048,154049],{"class":51},"=lambda",[45,154051,154052],{"class":55}," item: item[",[45,154054,495],{"class":79},[45,154056,4807],{"class":55},[45,154058,154059,154061],{"class":47,"line":66},[45,154060,30515],{"class":79},[45,154062,154063],{"class":55},"(top_date, top_amount)\n",[15,154065,154067],{"id":154066},"_126-绘制柱状图","12.6 绘制柱状图",[36,154069,154071],{"className":30478,"code":154070,"language":30480,"meta":25,"style":25},"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",[42,154072,154073,154087,154098,154102,154110,154122,154134,154145,154149,154153,154163,154174,154188,154193,154210,154227,154243,154247],{"__ignoreMap":25},[45,154074,154075,154077,154079,154081,154083,154085],{"class":47,"line":48},[45,154076,30837],{"class":51},[45,154078,147479],{"class":55},[45,154080,30492],{"class":51},[45,154082,147484],{"class":55},[45,154084,31483],{"class":51},[45,154086,147489],{"class":55},[45,154088,154089,154091,154093,154095],{"class":47,"line":66},[45,154090,30837],{"class":51},[45,154092,147338],{"class":55},[45,154094,30492],{"class":51},[45,154096,154097],{"class":55}," Bar\n",[45,154099,154100],{"class":47,"line":1331},[45,154101,2550],{"emptyLinePlaceholder":207},[45,154103,154104,154106,154108],{"class":47,"line":1346},[45,154105,153950],{"class":55},[45,154107,59],{"class":51},[45,154109,15721],{"class":55},[45,154111,154112,154115,154117,154120],{"class":47,"line":1352},[45,154113,154114],{"class":62},"    \"手机\"",[45,154116,51537],{"class":55},[45,154118,154119],{"class":79},"27000",[45,154121,31566],{"class":55},[45,154123,154124,154127,154129,154132],{"class":47,"line":1366},[45,154125,154126],{"class":62},"    \"电脑\"",[45,154128,51537],{"class":55},[45,154130,154131],{"class":79},"34000",[45,154133,31566],{"class":55},[45,154135,154136,154139,154141,154143],{"class":47,"line":1372},[45,154137,154138],{"class":62},"    \"耳机\"",[45,154140,51537],{"class":55},[45,154142,124499],{"class":79},[45,154144,31566],{"class":55},[45,154146,154147],{"class":47,"line":1463},[45,154148,1716],{"class":55},[45,154150,154151],{"class":47,"line":1469},[45,154152,2550],{"emptyLinePlaceholder":207},[45,154154,154155,154158,154160],{"class":47,"line":1481},[45,154156,154157],{"class":55},"bar ",[45,154159,59],{"class":51},[45,154161,154162],{"class":55}," Bar()\n",[45,154164,154165,154168,154171],{"class":47,"line":1763},[45,154166,154167],{"class":55},"bar.add_xaxis(",[45,154169,154170],{"class":79},"list",[45,154172,154173],{"class":55},"(category_total.keys()))\n",[45,154175,154176,154179,154181,154183,154185],{"class":47,"line":1768},[45,154177,154178],{"class":55},"bar.add_yaxis(",[45,154180,147395],{"class":62},[45,154182,12584],{"class":55},[45,154184,154170],{"class":79},[45,154186,154187],{"class":55},"(category_total.values()))\n",[45,154189,154190],{"class":47,"line":1774},[45,154191,154192],{"class":55},"bar.set_global_opts(\n",[45,154194,154195,154197,154199,154201,154203,154205,154208],{"class":47,"line":1779},[45,154196,147573],{"class":5366},[45,154198,59],{"class":51},[45,154200,147578],{"class":55},[45,154202,51507],{"class":5366},[45,154204,59],{"class":51},[45,154206,154207],{"class":62},"\"品类销售额\"",[45,154209,38147],{"class":55},[45,154211,154212,154214,154216,154218,154220,154222,154225],{"class":47,"line":1793},[45,154213,147592],{"class":5366},[45,154215,59],{"class":51},[45,154217,147597],{"class":55},[45,154219,79910],{"class":5366},[45,154221,59],{"class":51},[45,154223,154224],{"class":62},"\"品类\"",[45,154226,38147],{"class":55},[45,154228,154229,154231,154233,154235,154237,154239,154241],{"class":47,"line":1798},[45,154230,147611],{"class":5366},[45,154232,59],{"class":51},[45,154234,147597],{"class":55},[45,154236,79910],{"class":5366},[45,154238,59],{"class":51},[45,154240,147395],{"class":62},[45,154242,38147],{"class":55},[45,154244,154245],{"class":47,"line":1804},[45,154246,139],{"class":55},[45,154248,154249,154252,154255],{"class":47,"line":1825},[45,154250,154251],{"class":55},"bar.render(",[45,154253,154254],{"class":62},"\"category_sales.html\"",[45,154256,139],{"class":55},[15,154258,154260],{"id":154259},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[20,154262,154263],{},"时间线适合展示不同日期、月份、年份的数据变化。",[36,154265,154267],{"className":30478,"code":154266,"language":30480,"meta":25,"style":25},"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",[42,154268,154269,154283,154294,154298,154306,154330,154353,154378,154382,154386,154396,154400,154411,154420,154430,154444,154475,154480,154484],{"__ignoreMap":25},[45,154270,154271,154273,154275,154277,154279,154281],{"class":47,"line":48},[45,154272,30837],{"class":51},[45,154274,147479],{"class":55},[45,154276,30492],{"class":51},[45,154278,147484],{"class":55},[45,154280,31483],{"class":51},[45,154282,147489],{"class":55},[45,154284,154285,154287,154289,154291],{"class":47,"line":66},[45,154286,30837],{"class":51},[45,154288,147338],{"class":55},[45,154290,30492],{"class":51},[45,154292,154293],{"class":55}," Bar, Timeline\n",[45,154295,154296],{"class":47,"line":1331},[45,154297,2550],{"emptyLinePlaceholder":207},[45,154299,154300,154302,154304],{"class":47,"line":1346},[45,154301,101758],{"class":55},[45,154303,59],{"class":51},[45,154305,15721],{"class":55},[45,154307,154308,154311,154314,154316,154318,154320,154322,154324,154326,154328],{"class":47,"line":1352},[45,154309,154310],{"class":62},"    \"2024-10-01\"",[45,154312,154313],{"class":55},": {",[45,154315,153743],{"class":62},[45,154317,51537],{"class":55},[45,154319,153752],{"class":79},[45,154321,12584],{"class":55},[45,154323,153773],{"class":62},[45,154325,51537],{"class":55},[45,154327,153782],{"class":79},[45,154329,5080],{"class":55},[45,154331,154332,154335,154337,154339,154341,154343,154345,154347,154349,154351],{"class":47,"line":1366},[45,154333,154334],{"class":62},"    \"2024-10-02\"",[45,154336,154313],{"class":55},[45,154338,153743],{"class":62},[45,154340,51537],{"class":55},[45,154342,153811],{"class":79},[45,154344,12584],{"class":55},[45,154346,153773],{"class":62},[45,154348,51537],{"class":55},[45,154350,153840],{"class":79},[45,154352,5080],{"class":55},[45,154354,154355,154358,154360,154362,154364,154367,154369,154371,154373,154376],{"class":47,"line":1372},[45,154356,154357],{"class":62},"    \"2024-10-03\"",[45,154359,154313],{"class":55},[45,154361,153743],{"class":62},[45,154363,51537],{"class":55},[45,154365,154366],{"class":79},"17000",[45,154368,12584],{"class":55},[45,154370,153773],{"class":62},[45,154372,51537],{"class":55},[45,154374,154375],{"class":79},"19000",[45,154377,5080],{"class":55},[45,154379,154380],{"class":47,"line":1463},[45,154381,1716],{"class":55},[45,154383,154384],{"class":47,"line":1469},[45,154385,2550],{"emptyLinePlaceholder":207},[45,154387,154388,154391,154393],{"class":47,"line":1481},[45,154389,154390],{"class":55},"timeline ",[45,154392,59],{"class":51},[45,154394,154395],{"class":55}," Timeline()\n",[45,154397,154398],{"class":47,"line":1763},[45,154399,2550],{"emptyLinePlaceholder":207},[45,154401,154402,154404,154407,154409],{"class":47,"line":1768},[45,154403,3175],{"class":51},[45,154405,154406],{"class":55}," date, category_data ",[45,154408,26143],{"class":51},[45,154410,149248],{"class":55},[45,154412,154413,154416,154418],{"class":47,"line":1774},[45,154414,154415],{"class":55},"    bar ",[45,154417,59],{"class":51},[45,154419,154162],{"class":55},[45,154421,154422,154425,154427],{"class":47,"line":1779},[45,154423,154424],{"class":55},"    bar.add_xaxis(",[45,154426,154170],{"class":79},[45,154428,154429],{"class":55},"(category_data.keys()))\n",[45,154431,154432,154435,154437,154439,154441],{"class":47,"line":1793},[45,154433,154434],{"class":55},"    bar.add_yaxis(",[45,154436,147395],{"class":62},[45,154438,12584],{"class":55},[45,154440,154170],{"class":79},[45,154442,154443],{"class":55},"(category_data.values()))\n",[45,154445,154446,154449,154452,154454,154456,154458,154460,154462,154464,154466,154468,154470,154473],{"class":47,"line":1798},[45,154447,154448],{"class":55},"    bar.set_global_opts(",[45,154450,154451],{"class":5366},"title_opts",[45,154453,59],{"class":51},[45,154455,147578],{"class":55},[45,154457,51507],{"class":5366},[45,154459,59],{"class":51},[45,154461,331],{"class":51},[45,154463,89],{"class":62},[45,154465,1173],{"class":79},[45,154467,74026],{"class":55},[45,154469,1223],{"class":79},[45,154471,154472],{"class":62},"销售额\"",[45,154474,30597],{"class":55},[45,154476,154477],{"class":47,"line":1804},[45,154478,154479],{"class":55},"    timeline.add(bar, date)\n",[45,154481,154482],{"class":47,"line":1825},[45,154483,2550],{"emptyLinePlaceholder":207},[45,154485,154486,154489,154492],{"class":47,"line":1830},[45,154487,154488],{"class":55},"timeline.render(",[45,154490,154491],{"class":62},"\"timeline_sales.html\"",[45,154493,139],{"class":55},[15,154495,154497],{"id":154496},"_128-绘制地图","12.8 绘制地图",[20,154499,154500],{},"地图适合展示地区数据。",[36,154502,154504],{"className":30478,"code":154503,"language":30480,"meta":25,"style":25},"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",[42,154505,154506,154520,154531,154535,154543,154556,154568,154581,154594,154598,154602,154612,154627,154632,154649,154668,154672],{"__ignoreMap":25},[45,154507,154508,154510,154512,154514,154516,154518],{"class":47,"line":48},[45,154509,30837],{"class":51},[45,154511,147479],{"class":55},[45,154513,30492],{"class":51},[45,154515,147484],{"class":55},[45,154517,31483],{"class":51},[45,154519,147489],{"class":55},[45,154521,154522,154524,154526,154528],{"class":47,"line":66},[45,154523,30837],{"class":51},[45,154525,147338],{"class":55},[45,154527,30492],{"class":51},[45,154529,154530],{"class":55}," Map\n",[45,154532,154533],{"class":47,"line":1331},[45,154534,2550],{"emptyLinePlaceholder":207},[45,154536,154537,154539,154541],{"class":47,"line":1346},[45,154538,101758],{"class":55},[45,154540,59],{"class":51},[45,154542,55547],{"class":55},[45,154544,154545,154548,154550,154552,154554],{"class":47,"line":1352},[45,154546,154547],{"class":55},"    (",[45,154549,69369],{"class":62},[45,154551,12584],{"class":55},[45,154553,1094],{"class":79},[45,154555,38147],{"class":55},[45,154557,154558,154560,154562,154564,154566],{"class":47,"line":1366},[45,154559,154547],{"class":55},[45,154561,69389],{"class":62},[45,154563,12584],{"class":55},[45,154565,147412],{"class":79},[45,154567,38147],{"class":55},[45,154569,154570,154572,154575,154577,154579],{"class":47,"line":1372},[45,154571,154547],{"class":55},[45,154573,154574],{"class":62},"\"广东\"",[45,154576,12584],{"class":55},[45,154578,1873],{"class":79},[45,154580,38147],{"class":55},[45,154582,154583,154585,154588,154590,154592],{"class":47,"line":1463},[45,154584,154547],{"class":55},[45,154586,154587],{"class":62},"\"浙江\"",[45,154589,12584],{"class":55},[45,154591,147417],{"class":79},[45,154593,38147],{"class":55},[45,154595,154596],{"class":47,"line":1469},[45,154597,33346],{"class":55},[45,154599,154600],{"class":47,"line":1481},[45,154601,2550],{"emptyLinePlaceholder":207},[45,154603,154604,154607,154609],{"class":47,"line":1763},[45,154605,154606],{"class":55},"map_chart ",[45,154608,59],{"class":51},[45,154610,154611],{"class":55}," Map()\n",[45,154613,154614,154617,154619,154622,154625],{"class":47,"line":1768},[45,154615,154616],{"class":55},"map_chart.add(",[45,154618,147395],{"class":62},[45,154620,154621],{"class":55},", data, ",[45,154623,154624],{"class":62},"\"china\"",[45,154626,139],{"class":55},[45,154628,154629],{"class":47,"line":1774},[45,154630,154631],{"class":55},"map_chart.set_global_opts(\n",[45,154633,154634,154636,154638,154640,154642,154644,154647],{"class":47,"line":1779},[45,154635,147573],{"class":5366},[45,154637,59],{"class":51},[45,154639,147578],{"class":55},[45,154641,51507],{"class":5366},[45,154643,59],{"class":51},[45,154645,154646],{"class":62},"\"地区销售额\"",[45,154648,38147],{"class":55},[45,154650,154651,154654,154656,154659,154662,154664,154666],{"class":47,"line":1793},[45,154652,154653],{"class":5366},"    visualmap_opts",[45,154655,59],{"class":51},[45,154657,154658],{"class":55},"opts.VisualMapOpts(",[45,154660,154661],{"class":5366},"max_",[45,154663,59],{"class":51},[45,154665,1873],{"class":79},[45,154667,38147],{"class":55},[45,154669,154670],{"class":47,"line":1798},[45,154671,139],{"class":55},[45,154673,154674,154677,154680],{"class":47,"line":1804},[45,154675,154676],{"class":55},"map_chart.render(",[45,154678,154679],{"class":62},"\"map_sales.html\"",[45,154681,139],{"class":55},[20,154683,154684],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[15,154686,154688],{"id":154687},"_129-项目拆分建议","12.9 项目拆分建议",[20,154690,154691],{},"当代码超过一个文件时，可以这样组织：",[36,154693,154696],{"className":154694,"code":154695,"language":5337,"meta":25},[5335],"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",[42,154697,154695],{"__ignoreMap":25},[20,154699,154700],{},"职责：",[233,154702,154703,154709,154715,154721],{},[169,154704,154705,154708],{},[42,154706,154707],{},"main.py","：程序入口。",[169,154710,154711,154714],{},[42,154712,154713],{},"file_utils.py","：读写 JSON。",[169,154716,154717,154720],{},[42,154718,154719],{},"sales_service.py","：统计销售数据。",[169,154722,154723,154726],{},[42,154724,154725],{},"chart_builder.py","：生成图表。",[15,154728,154730],{"id":154729},"_1210-python基础复习清单","12.10 Python基础复习清单",[20,154732,154733],{},"语法基础：",[233,154735,154736,154739,154742,154745],{},[169,154737,154738],{},"会写变量、注释、输入输出。",[169,154740,154741],{},"会使用 int、float、str、bool。",[169,154743,154744],{},"会做类型转换。",[169,154746,154747],{},"会使用 f-string 格式化输出。",[20,154749,154750],{},"流程控制：",[233,154752,154753,154759,154765,154773],{},[169,154754,154755,154756,28485],{},"会写 ",[42,154757,154758],{},"if elif else",[169,154760,154755,154761,101118,154763,28485],{},[42,154762,108763],{},[42,154764,3175],{},[169,154766,154767,154768,101118,154770,28485],{},"理解 ",[42,154769,2203],{},[42,154771,154772],{},"continue",[169,154774,154775],{},"能写嵌套循环。",[20,154777,154778],{},"函数：",[233,154780,154781,154784,154787,154790],{},[169,154782,154783],{},"会定义和调用函数。",[169,154785,154786],{},"理解参数和返回值。",[169,154788,154789],{},"知道局部变量和全局变量。",[169,154791,154792],{},"会使用默认参数、关键字参数、不定长参数。",[20,154794,154795],{},"容器：",[233,154797,154798,154801,154804,154807,154810],{},[169,154799,154800],{},"会使用列表增删改查。",[169,154802,154803],{},"会遍历列表、字典。",[169,154805,154806],{},"会使用切片。",[169,154808,154809],{},"会用集合去重。",[169,154811,154812],{},"会处理列表嵌套字典。",[20,154814,154815],{},"文件和模块：",[233,154817,154818,154821,154824,154827,154830],{},[169,154819,154820],{},"会读写文本文件。",[169,154822,154823],{},"会读写 JSON。",[169,154825,154826],{},"会捕获常见异常。",[169,154828,154829],{},"会导入模块和第三方包。",[169,154831,154832],{},"会创建简单包结构。",[20,154834,154835],{},"项目能力：",[233,154837,154838,154841,154844,154847,154850],{},[169,154839,154840],{},"能把代码拆成函数。",[169,154842,154843],{},"能把数据保存到文件。",[169,154845,154846],{},"能处理用户输入错误。",[169,154848,154849],{},"能写一个完整菜单程序。",[169,154851,154852],{},"能用 pyecharts 生成图表。",[15,154854,154856],{"id":154855},"_1211-推荐练习顺序","12.11 推荐练习顺序",[233,154858,154859,154862,154865,154868,154871,154874,154877,154880],{},[169,154860,154861],{},"猜数字游戏。",[169,154863,154864],{},"ATM 菜单程序。",[169,154866,154867],{},"学生成绩统计。",[169,154869,154870],{},"学生管理系统函数版。",[169,154872,154873],{},"学生管理系统文件持久化版。",[169,154875,154876],{},"学生管理系统面向对象版。",[169,154878,154879],{},"销售数据统计。",[169,154881,154882],{},"销售数据可视化。",[15,154884,154886],{"id":154885},"_1212-常见学习误区","12.12 常见学习误区",[233,154888,154889,154892,154895,154898,154901,154904,154907],{},[169,154890,154891],{},"只看视频不敲代码。",[169,154893,154894],{},"一报错就复制错误去搜，不先读报错位置。",[169,154896,154897],{},"变量名随便写，后续自己看不懂。",[169,154899,154900],{},"所有代码都写在一个文件一个函数里。",[169,154902,154903],{},"不保存练习代码，复习时没有材料。",[169,154905,154906],{},"还没掌握列表字典就急着学框架。",[169,154908,154909],{},"不会读官方文档，只依赖教程。",[15,154911,154913],{"id":154912},"_1213-如何读报错","12.13 如何读报错",[20,154915,154916],{},"报错通常从下往上看最后几行。",[20,154918,15284],{},[36,154920,154923],{"className":154921,"code":154922,"language":5337,"meta":25},[5335],"ValueError: invalid literal for int() with base 10: 'abc'\n",[42,154924,154922],{"__ignoreMap":25},[20,154926,24747],{},[233,154928,154929,154935,154945],{},[169,154930,154931,154932,28485],{},"异常类型是 ",[42,154933,154934],{},"ValueError",[169,154936,107445,154937,154940,154941,154944],{},[42,154938,154939],{},"int()"," 无法把 ",[42,154942,154943],{},"'abc'"," 转成整数。",[169,154946,154947],{},"应该检查输入内容或增加异常处理。",[20,154949,154950],{},"再看文件名和行号：",[36,154952,154955],{"className":154953,"code":154954,"language":5337,"meta":25},[5335],"File \"main.py\", line 10, in \u003Cmodule>\n",[42,154956,154954],{"__ignoreMap":25},[20,154958,154959,154960,154962],{},"表示错误发生在 ",[42,154961,154707],{}," 第 10 行。",[15,154964,154966],{"id":154965},"_1214-后续学习方向","12.14 后续学习方向",[20,154968,154969],{},"Python 基础完成后，可以按兴趣选择方向：",[233,154971,154972,154984,154993,155005,155016,155025,155035],{},[169,154973,154974,154975,490,154978,490,154981,28485],{},"自动化办公：",[42,154976,154977],{},"openpyxl",[42,154979,154980],{},"python-docx",[42,154982,154983],{},"pdfplumber",[169,154985,154986,154987,490,154989,490,154991,28485],{},"数据分析：",[42,154988,100726],{},[42,154990,146285],{},[42,154992,146293],{},[169,154994,154995,154996,490,154999,490,155002,28485],{},"Web 后端：",[42,154997,154998],{},"Flask",[42,155000,155001],{},"FastAPI",[42,155003,155004],{},"Django",[169,155006,155007,155008,490,155010,490,155013,28485],{},"爬虫：",[42,155009,146270],{},[42,155011,155012],{},"BeautifulSoup",[42,155014,155015],{},"Scrapy",[169,155017,155018,155019,490,155021,155024],{},"测试开发：",[42,155020,146317],{},[42,155022,155023],{},"selenium","、接口测试。",[169,155026,155027,155028,490,155030,490,155032,28485],{},"人工智能：",[42,155029,100726],{},[42,155031,146285],{},[42,155033,155034],{},"pytorch",[169,155036,155037,155038,490,155040,490,155043,28485],{},"运维脚本：",[42,155039,145886],{},[42,155041,155042],{},"subprocess",[42,155044,155045],{},"paramiko",[20,155047,155048],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[15,155050,155052],{"id":155051},"_1215-结课练习","12.15 结课练习",[233,155054,155055,155058,155061,155064,155067,155070,155073,155076],{},[169,155056,155057],{},"完成函数版学生管理系统。",[169,155059,155060],{},"给学生管理系统增加 JSON 持久化。",[169,155062,155063],{},"给学生管理系统增加异常处理。",[169,155065,155066],{},"把学生管理系统改成面向对象版。",[169,155068,155069],{},"使用 pyecharts 绘制学生成绩柱状图。",[169,155071,155072],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[169,155074,155075],{},"按品类统计销售额并绘制柱状图。",[169,155077,155078],{},"写一份自己的 Python 学习路线图。",[196,155080,155081],{},"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":25,"searchDepth":66,"depth":66,"links":155083},[155084,155085,155088,155089,155090,155096,155097,155098,155099,155100,155101,155102,155103,155104,155105],{"id":151800,"depth":66,"text":151801},{"id":151850,"depth":66,"text":151851,"children":155086},[155087],{"id":151854,"depth":1331,"text":151855},{"id":151893,"depth":66,"text":151894},{"id":153367,"depth":66,"text":153368},{"id":153705,"depth":66,"text":153706,"children":155091},[155092,155093,155094,155095],{"id":153709,"depth":1331,"text":153710},{"id":153849,"depth":1331,"text":153850},{"id":153939,"depth":1331,"text":153940},{"id":154025,"depth":1331,"text":154026},{"id":154066,"depth":66,"text":154067},{"id":154259,"depth":66,"text":154260},{"id":154496,"depth":66,"text":154497},{"id":154687,"depth":66,"text":154688},{"id":154729,"depth":66,"text":154730},{"id":154855,"depth":66,"text":154856},{"id":154885,"depth":66,"text":154886},{"id":154912,"depth":66,"text":154913},{"id":154965,"depth":66,"text":154966},{"id":155051,"depth":66,"text":155052},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151792,"description":204},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155112,"title":155113,"body":155114,"description":204,"extension":205,"meta":157583,"navigation":207,"path":157584,"seo":157585,"stem":157586,"__hash__":157587},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155115,"toc":157558},[155116,155119,155123,155126,155129,155149,155152,155175,155178,155181,155203,155206,155228,155232,155235,155275,155278,155399,155403,155406,155446,155449,155473,155476,155480,155483,155497,155530,155533,155568,155571,155594,155597,155630,155633,155635,155641,155716,155719,155725,155742,155782,155786,155789,155835,155837,155875,155878,155913,155916,155951,155954,155986,155989,156008,156012,156016,156129,156131,156206,156210,156256,156259,156285,156294,156298,156301,156364,156372,156400,156404,156444,156509,156513,156516,156555,156558,156603,156606,156667,156671,156698,156701,156729,156732,156736,156740,156805,156808,156846,156849,156881,156885,156984,156988,156991,157064,157067,157115,157119,157125,157165,157168,157215,157218,157267,157271,157273,157287,157289,157470,157474,157501,157521,157528,157532,157549,157555],[10,155117,155113],{"id":155118},"_2-基础语法变量与字符串",[15,155120,155122],{"id":155121},"_21-注释","2.1 注释",[20,155124,155125],{},"注释是给人看的说明文字，不会被 Python 执行。",[20,155127,155128],{},"单行注释：",[36,155130,155132],{"className":30478,"code":155131,"language":30480,"meta":25,"style":25},"# 这是单行注释\nprint(\"hello\")\n",[42,155133,155134,155139],{"__ignoreMap":25},[45,155135,155136],{"class":47,"line":48},[45,155137,155138],{"class":337},"# 这是单行注释\n",[45,155140,155141,155143,155145,155147],{"class":47,"line":66},[45,155142,30515],{"class":79},[45,155144,282],{"class":55},[45,155146,5994],{"class":62},[45,155148,139],{"class":55},[20,155150,155151],{},"多行说明常用三引号：",[36,155153,155155],{"className":30478,"code":155154,"language":30480,"meta":25,"style":25},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[42,155156,155157,155161,155166,155171],{"__ignoreMap":25},[45,155158,155159],{"class":47,"line":48},[45,155160,95798],{"class":62},[45,155162,155163],{"class":47,"line":66},[45,155164,155165],{"class":62},"这是多行说明。\n",[45,155167,155168],{"class":47,"line":1331},[45,155169,155170],{"class":62},"常用于文件顶部说明、函数说明等。\n",[45,155172,155173],{"class":47,"line":1346},[45,155174,95798],{"class":62},[20,155176,155177],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[20,155179,155180],{},"不好：",[36,155182,155184],{"className":30478,"code":155183,"language":30480,"meta":25,"style":25},"# age 加 1\nage = age + 1\n",[42,155185,155186,155191],{"__ignoreMap":25},[45,155187,155188],{"class":47,"line":48},[45,155189,155190],{"class":337},"# age 加 1\n",[45,155192,155193,155195,155197,155199,155201],{"class":47,"line":66},[45,155194,146646],{"class":55},[45,155196,59],{"class":51},[45,155198,15856],{"class":55},[45,155200,758],{"class":51},[45,155202,55799],{"class":79},[20,155204,155205],{},"较好：",[36,155207,155209],{"className":30478,"code":155208,"language":30480,"meta":25,"style":25},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[42,155210,155211,155216],{"__ignoreMap":25},[45,155212,155213],{"class":47,"line":48},[45,155214,155215],{"class":337},"# 用户过完生日后，年龄增加一岁\n",[45,155217,155218,155220,155222,155224,155226],{"class":47,"line":66},[45,155219,146646],{"class":55},[45,155221,59],{"class":51},[45,155223,15856],{"class":55},[45,155225,758],{"class":51},[45,155227,55799],{"class":79},[15,155229,155231],{"id":155230},"_22-字面量","2.2 字面量",[20,155233,155234],{},"字面量就是代码中直接写出来的数据。",[36,155236,155238],{"className":30478,"code":155237,"language":30480,"meta":25,"style":25},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[42,155239,155240,155247,155254,155261,155268],{"__ignoreMap":25},[45,155241,155242,155244],{"class":47,"line":48},[45,155243,588],{"class":79},[45,155245,155246],{"class":337},"          # 整数\n",[45,155248,155249,155251],{"class":47,"line":66},[45,155250,328],{"class":79},[45,155252,155253],{"class":337},"         # 小数\n",[45,155255,155256,155258],{"class":47,"line":1331},[45,155257,5994],{"class":62},[45,155259,155260],{"class":337},"      # 字符串\n",[45,155262,155263,155265],{"class":47,"line":1346},[45,155264,31576],{"class":79},[45,155266,155267],{"class":337},"         # 布尔值\n",[45,155269,155270,155272],{"class":47,"line":1352},[45,155271,95786],{"class":79},[45,155273,155274],{"class":337},"         # 空值\n",[20,155276,155277],{},"常见字面量类型：",[415,155279,155280,155290],{},[418,155281,155282],{},[421,155283,155284,155286,155288],{},[424,155285,23886],{},[424,155287,27592],{},[424,155289,25969],{},[462,155291,155292,155303,155314,155325,155337,155349,155361,155374,155386],{},[421,155293,155294,155296,155300],{},[467,155295,285],{},[467,155297,155298],{},[42,155299,588],{},[467,155301,155302],{},"整数",[421,155304,155305,155307,155311],{},[467,155306,320],{},[467,155308,155309],{},[42,155310,328],{},[467,155312,155313],{},"浮点数",[421,155315,155316,155318,155322],{},[467,155317,1451],{},[467,155319,155320],{},[42,155321,5994],{},[467,155323,155324],{},"字符串",[421,155326,155327,155329,155335],{},[467,155328,1506],{},[467,155330,155331,490,155333],{},[42,155332,31576],{},[42,155334,34087],{},[467,155336,66115],{},[421,155338,155339,155342,155346],{},[467,155340,155341],{},"NoneType",[467,155343,155344],{},[42,155345,95786],{},[467,155347,155348],{},"空值",[421,155350,155351,155353,155358],{},[467,155352,154170],{},[467,155354,155355],{},[42,155356,155357],{},"[1, 2, 3]",[467,155359,155360],{},"列表",[421,155362,155363,155366,155371],{},[467,155364,155365],{},"tuple",[467,155367,155368],{},[42,155369,155370],{},"(1, 2, 3)",[467,155372,155373],{},"元组",[421,155375,155376,155378,155383],{},[467,155377,114646],{},[467,155379,155380],{},[42,155381,155382],{},"{\"name\": \"张三\"}",[467,155384,155385],{},"字典",[421,155387,155388,155391,155396],{},[467,155389,155390],{},"set",[467,155392,155393],{},[42,155394,155395],{},"{1, 2, 3}",[467,155397,155398],{},"集合",[15,155400,155402],{"id":155401},"_23-变量","2.3 变量",[20,155404,155405],{},"变量是保存数据的名字。",[36,155407,155409],{"className":30478,"code":155408,"language":30480,"meta":25,"style":25},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[42,155410,155411,155419,155427,155437],{"__ignoreMap":25},[45,155412,155413,155415,155417],{"class":47,"line":48},[45,155414,146636],{"class":55},[45,155416,59],{"class":51},[45,155418,149453],{"class":62},[45,155420,155421,155423,155425],{"class":47,"line":66},[45,155422,146646],{"class":55},[45,155424,59],{"class":51},[45,155426,146651],{"class":79},[45,155428,155429,155432,155434],{"class":47,"line":1331},[45,155430,155431],{"class":55},"height ",[45,155433,59],{"class":51},[45,155435,155436],{"class":79}," 1.75\n",[45,155438,155439,155442,155444],{"class":47,"line":1346},[45,155440,155441],{"class":55},"is_student ",[45,155443,59],{"class":51},[45,155445,153699],{"class":79},[20,155447,155448],{},"Python 的变量不需要提前声明类型：",[36,155450,155452],{"className":30478,"code":155451,"language":30480,"meta":25,"style":25},"score = 100\nscore = \"满分\"\n",[42,155453,155454,155464],{"__ignoreMap":25},[45,155455,155456,155459,155461],{"class":47,"line":48},[45,155457,155458],{"class":55},"score ",[45,155460,59],{"class":51},[45,155462,155463],{"class":79}," 100\n",[45,155465,155466,155468,155470],{"class":47,"line":66},[45,155467,155458],{"class":55},[45,155469,59],{"class":51},[45,155471,155472],{"class":62}," \"满分\"\n",[20,155474,155475],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[15,155477,155479],{"id":155478},"_24-变量命名规则","2.4 变量命名规则",[20,155481,155482],{},"硬性规则：",[233,155484,155485,155488,155491,155494],{},[169,155486,155487],{},"只能由字母、数字、下划线组成。",[169,155489,155490],{},"不能以数字开头。",[169,155492,155493],{},"不能使用 Python 关键字。",[169,155495,155496],{},"区分大小写。",[36,155498,155500],{"className":30478,"code":155499,"language":30480,"meta":25,"style":25},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[42,155501,155502,155511,155520],{"__ignoreMap":25},[45,155503,155504,155507,155509],{"class":47,"line":48},[45,155505,155506],{"class":55},"user_name ",[45,155508,59],{"class":51},[45,155510,146641],{"class":62},[45,155512,155513,155516,155518],{"class":47,"line":66},[45,155514,155515],{"class":55},"age2 ",[45,155517,59],{"class":51},[45,155519,146651],{"class":79},[45,155521,155522,155525,155527],{"class":47,"line":1331},[45,155523,155524],{"class":55},"_token ",[45,155526,59],{"class":51},[45,155528,155529],{"class":62}," \"abc\"\n",[20,155531,155532],{},"错误写法：",[36,155534,155536],{"className":30478,"code":155535,"language":30480,"meta":25,"style":25},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[42,155537,155538,155547,155559],{"__ignoreMap":25},[45,155539,155540,155543,155545],{"class":47,"line":48},[45,155541,155542],{"class":77503},"2age",[45,155544,13713],{"class":51},[45,155546,146651],{"class":79},[45,155548,155549,155551,155553,155555,155557],{"class":47,"line":66},[45,155550,131684],{"class":55},[45,155552,809],{"class":51},[45,155554,146636],{"class":55},[45,155556,59],{"class":51},[45,155558,146641],{"class":62},[45,155560,155561,155563,155565],{"class":47,"line":1331},[45,155562,14843],{"class":51},[45,155564,13713],{"class":51},[45,155566,155567],{"class":62}," \"一班\"\n",[20,155569,155570],{},"查看关键字：",[36,155572,155574],{"className":30478,"code":155573,"language":30480,"meta":25,"style":25},"import keyword\n\nprint(keyword.kwlist)\n",[42,155575,155576,155583,155587],{"__ignoreMap":25},[45,155577,155578,155580],{"class":47,"line":48},[45,155579,30492],{"class":51},[45,155581,155582],{"class":55}," keyword\n",[45,155584,155585],{"class":47,"line":66},[45,155586,2550],{"emptyLinePlaceholder":207},[45,155588,155589,155591],{"class":47,"line":1331},[45,155590,30515],{"class":79},[45,155592,155593],{"class":55},"(keyword.kwlist)\n",[20,155595,155596],{},"推荐命名风格：",[36,155598,155600],{"className":30478,"code":155599,"language":30480,"meta":25,"style":25},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[42,155601,155602,155611,155621],{"__ignoreMap":25},[45,155603,155604,155607,155609],{"class":47,"line":48},[45,155605,155606],{"class":55},"student_name ",[45,155608,59],{"class":51},[45,155610,149453],{"class":62},[45,155612,155613,155616,155618],{"class":47,"line":66},[45,155614,155615],{"class":55},"total_price ",[45,155617,59],{"class":51},[45,155619,155620],{"class":79}," 99.8\n",[45,155622,155623,155626,155628],{"class":47,"line":1331},[45,155624,155625],{"class":55},"is_finished ",[45,155627,59],{"class":51},[45,155629,125907],{"class":79},[20,155631,155632],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[15,155634,50832],{"id":50831},[20,155636,104466,155637,155640],{},[42,155638,155639],{},"type()"," 查看数据类型：",[36,155642,155644],{"className":30478,"code":155643,"language":30480,"meta":25,"style":25},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[42,155645,155646,155660,155674,155688,155702],{"__ignoreMap":25},[45,155647,155648,155650,155652,155654,155656,155658],{"class":47,"line":48},[45,155649,30515],{"class":79},[45,155651,282],{"class":55},[45,155653,103207],{"class":79},[45,155655,282],{"class":55},[45,155657,588],{"class":79},[45,155659,30597],{"class":55},[45,155661,155662,155664,155666,155668,155670,155672],{"class":47,"line":66},[45,155663,30515],{"class":79},[45,155665,282],{"class":55},[45,155667,103207],{"class":79},[45,155669,282],{"class":55},[45,155671,328],{"class":79},[45,155673,30597],{"class":55},[45,155675,155676,155678,155680,155682,155684,155686],{"class":47,"line":1331},[45,155677,30515],{"class":79},[45,155679,282],{"class":55},[45,155681,103207],{"class":79},[45,155683,282],{"class":55},[45,155685,5994],{"class":62},[45,155687,30597],{"class":55},[45,155689,155690,155692,155694,155696,155698,155700],{"class":47,"line":1346},[45,155691,30515],{"class":79},[45,155693,282],{"class":55},[45,155695,103207],{"class":79},[45,155697,282],{"class":55},[45,155699,31576],{"class":79},[45,155701,30597],{"class":55},[45,155703,155704,155706,155708,155710,155712,155714],{"class":47,"line":1352},[45,155705,30515],{"class":79},[45,155707,282],{"class":55},[45,155709,103207],{"class":79},[45,155711,282],{"class":55},[45,155713,95786],{"class":79},[45,155715,30597],{"class":55},[20,155717,155718],{},"输出类似：",[36,155720,155723],{"className":155721,"code":155722,"language":5337,"meta":25},[5335],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[42,155724,155722],{"__ignoreMap":25},[20,155726,9175,155727,107383,155729,155731,155732,155734,155735,21649,155737,155734,155739,155741],{},[42,155728,1506],{},[42,155730,285],{}," 的子类，",[42,155733,31576],{}," 可以当作 ",[42,155736,495],{},[42,155738,34087],{},[42,155740,469],{},"，但业务代码中不要滥用。",[36,155743,155745],{"className":30478,"code":155744,"language":30480,"meta":25,"style":25},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[42,155746,155747,155765],{"__ignoreMap":25},[45,155748,155749,155751,155753,155755,155757,155759,155762],{"class":47,"line":48},[45,155750,30515],{"class":79},[45,155752,282],{"class":55},[45,155754,31576],{"class":79},[45,155756,45666],{"class":51},[45,155758,136],{"class":79},[45,155760,155761],{"class":55},")   ",[45,155763,155764],{"class":337},"# 2\n",[45,155766,155767,155769,155771,155773,155775,155777,155779],{"class":47,"line":66},[45,155768,30515],{"class":79},[45,155770,282],{"class":55},[45,155772,34087],{"class":79},[45,155774,45666],{"class":51},[45,155776,136],{"class":79},[45,155778,45908],{"class":55},[45,155780,155781],{"class":337},"# 1\n",[15,155783,155785],{"id":155784},"_26-类型转换","2.6 类型转换",[20,155787,155788],{},"常用转换函数：",[36,155790,155792],{"className":30478,"code":155791,"language":30480,"meta":25,"style":25},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[42,155793,155794,155804,155815,155825],{"__ignoreMap":25},[45,155795,155796,155798,155800,155802],{"class":47,"line":48},[45,155797,285],{"class":79},[45,155799,282],{"class":55},[45,155801,54416],{"class":62},[45,155803,139],{"class":55},[45,155805,155806,155808,155810,155813],{"class":47,"line":66},[45,155807,320],{"class":79},[45,155809,282],{"class":55},[45,155811,155812],{"class":62},"\"3.14\"",[45,155814,139],{"class":55},[45,155816,155817,155819,155821,155823],{"class":47,"line":1331},[45,155818,1451],{"class":79},[45,155820,282],{"class":55},[45,155822,588],{"class":79},[45,155824,139],{"class":55},[45,155826,155827,155829,155831,155833],{"class":47,"line":1346},[45,155828,1506],{"class":79},[45,155830,282],{"class":55},[45,155832,495],{"class":79},[45,155834,139],{"class":55},[20,155836,15284],{},[36,155838,155840],{"className":30478,"code":155839,"language":30480,"meta":25,"style":25},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[42,155841,155842,155851,155862],{"__ignoreMap":25},[45,155843,155844,155846,155848],{"class":47,"line":48},[45,155845,146646],{"class":55},[45,155847,59],{"class":51},[45,155849,155850],{"class":62}," \"18\"\n",[45,155852,155853,155855,155857,155859],{"class":47,"line":66},[45,155854,146646],{"class":55},[45,155856,59],{"class":51},[45,155858,2532],{"class":79},[45,155860,155861],{"class":55},"(age)\n",[45,155863,155864,155866,155869,155871,155873],{"class":47,"line":1331},[45,155865,30515],{"class":79},[45,155867,155868],{"class":55},"(age ",[45,155870,758],{"class":51},[45,155872,136],{"class":79},[45,155874,139],{"class":55},[20,155876,155877],{},"输入得到的内容永远是字符串：",[36,155879,155881],{"className":30478,"code":155880,"language":30480,"meta":25,"style":25},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[42,155882,155883,155899],{"__ignoreMap":25},[45,155884,155885,155888,155890,155892,155894,155897],{"class":47,"line":48},[45,155886,155887],{"class":55},"num ",[45,155889,59],{"class":51},[45,155891,60705],{"class":79},[45,155893,282],{"class":55},[45,155895,155896],{"class":62},"\"请输入数字:\"",[45,155898,139],{"class":55},[45,155900,155901,155903,155905,155907,155910],{"class":47,"line":66},[45,155902,30515],{"class":79},[45,155904,282],{"class":55},[45,155906,103207],{"class":79},[45,155908,155909],{"class":55},"(num))  ",[45,155911,155912],{"class":337},"# str\n",[20,155914,155915],{},"如果要做数学运算，必须转换：",[36,155917,155919],{"className":30478,"code":155918,"language":30480,"meta":25,"style":25},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[42,155920,155921,155939],{"__ignoreMap":25},[45,155922,155923,155925,155927,155929,155931,155933,155935,155937],{"class":47,"line":48},[45,155924,155887],{"class":55},[45,155926,59],{"class":51},[45,155928,2532],{"class":79},[45,155930,282],{"class":55},[45,155932,53921],{"class":79},[45,155934,282],{"class":55},[45,155936,155896],{"class":62},[45,155938,30597],{"class":55},[45,155940,155941,155943,155945,155947,155949],{"class":47,"line":66},[45,155942,30515],{"class":79},[45,155944,45719],{"class":55},[45,155946,758],{"class":51},[45,155948,2188],{"class":79},[45,155950,139],{"class":55},[20,155952,155953],{},"常见错误：",[36,155955,155957],{"className":30478,"code":155956,"language":30480,"meta":25,"style":25},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[42,155958,155959,155972],{"__ignoreMap":25},[45,155960,155961,155963,155965,155967,155969],{"class":47,"line":48},[45,155962,285],{"class":79},[45,155964,282],{"class":55},[45,155966,155812],{"class":62},[45,155968,155761],{"class":55},[45,155970,155971],{"class":337},"# 错误\n",[45,155973,155974,155976,155978,155981,155984],{"class":47,"line":66},[45,155975,285],{"class":79},[45,155977,282],{"class":55},[45,155979,155980],{"class":62},"\"abc\"",[45,155982,155983],{"class":55},")    ",[45,155985,155971],{"class":337},[20,155987,155988],{},"正确写法：",[36,155990,155992],{"className":30478,"code":155991,"language":30480,"meta":25,"style":25},"num = float(\"3.14\")\n",[42,155993,155994],{"__ignoreMap":25},[45,155995,155996,155998,156000,156002,156004,156006],{"class":47,"line":48},[45,155997,155887],{"class":55},[45,155999,59],{"class":51},[45,156001,109897],{"class":79},[45,156003,282],{"class":55},[45,156005,155812],{"class":62},[45,156007,139],{"class":55},[15,156009,156011],{"id":156010},"_27-运算符","2.7 运算符",[249,156013,156015],{"id":156014},"_271-算术运算符","2.7.1 算术运算符",[415,156017,156018,156029],{},[418,156019,156020],{},[421,156021,156022,156025,156027],{},[424,156023,156024],{},"运算符",[424,156026,25969],{},[424,156028,27592],{},[462,156030,156031,156045,156059,156073,156087,156101,156115],{},[421,156032,156033,156037,156040],{},[467,156034,156035],{},[42,156036,758],{},[467,156038,156039],{},"加法",[467,156041,156042],{},[42,156043,156044],{},"1 + 2",[421,156046,156047,156051,156054],{},[467,156048,156049],{},[42,156050,809],{},[467,156052,156053],{},"减法",[467,156055,156056],{},[42,156057,156058],{},"5 - 3",[421,156060,156061,156065,156068],{},[467,156062,156063],{},[42,156064,732],{},[467,156066,156067],{},"乘法",[467,156069,156070],{},[42,156071,156072],{},"2 * 3",[421,156074,156075,156079,156082],{},[467,156076,156077],{},[42,156078,861],{},[467,156080,156081],{},"除法，结果是浮点数",[467,156083,156084],{},[42,156085,156086],{},"5 \u002F 2",[421,156088,156089,156093,156096],{},[467,156090,156091],{},[42,156092,33429],{},[467,156094,156095],{},"整除",[467,156097,156098],{},[42,156099,156100],{},"5 \u002F\u002F 2",[421,156102,156103,156107,156110],{},[467,156104,156105],{},[42,156106,605],{},[467,156108,156109],{},"取余",[467,156111,156112],{},[42,156113,156114],{},"5 % 2",[421,156116,156117,156121,156124],{},[467,156118,156119],{},[42,156120,10810],{},[467,156122,156123],{},"幂运算",[467,156125,156126],{},[42,156127,156128],{},"2 ** 3",[20,156130,15284],{},[36,156132,156134],{"className":30478,"code":156133,"language":30480,"meta":25,"style":25},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[42,156135,156136,156154,156171,156188],{"__ignoreMap":25},[45,156137,156138,156140,156142,156144,156147,156149,156151],{"class":47,"line":48},[45,156139,30515],{"class":79},[45,156141,282],{"class":55},[45,156143,596],{"class":79},[45,156145,156146],{"class":51}," \u002F",[45,156148,14904],{"class":79},[45,156150,155761],{"class":55},[45,156152,156153],{"class":337},"# 2.5\n",[45,156155,156156,156158,156160,156162,156165,156167,156169],{"class":47,"line":66},[45,156157,30515],{"class":79},[45,156159,282],{"class":55},[45,156161,596],{"class":79},[45,156163,156164],{"class":51}," \u002F\u002F",[45,156166,14904],{"class":79},[45,156168,45908],{"class":55},[45,156170,155764],{"class":337},[45,156172,156173,156175,156177,156179,156182,156184,156186],{"class":47,"line":1331},[45,156174,30515],{"class":79},[45,156176,282],{"class":55},[45,156178,596],{"class":79},[45,156180,156181],{"class":51}," %",[45,156183,14904],{"class":79},[45,156185,155761],{"class":55},[45,156187,155781],{"class":337},[45,156189,156190,156192,156194,156196,156199,156201,156203],{"class":47,"line":1346},[45,156191,30515],{"class":79},[45,156193,282],{"class":55},[45,156195,356],{"class":79},[45,156197,156198],{"class":51}," **",[45,156200,78170],{"class":79},[45,156202,45908],{"class":55},[45,156204,156205],{"class":337},"# 8\n",[249,156207,156209],{"id":156208},"_272-赋值运算符","2.7.2 赋值运算符",[36,156211,156213],{"className":30478,"code":156212,"language":30480,"meta":25,"style":25},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[42,156214,156215,156223,156231,156239,156247],{"__ignoreMap":25},[45,156216,156217,156219,156221],{"class":47,"line":48},[45,156218,155887],{"class":55},[45,156220,59],{"class":51},[45,156222,58528],{"class":79},[45,156224,156225,156227,156229],{"class":47,"line":66},[45,156226,155887],{"class":55},[45,156228,9627],{"class":51},[45,156230,54527],{"class":79},[45,156232,156233,156235,156237],{"class":47,"line":1331},[45,156234,155887],{"class":55},[45,156236,150352],{"class":51},[45,156238,47823],{"class":79},[45,156240,156241,156243,156245],{"class":47,"line":1346},[45,156242,155887],{"class":55},[45,156244,137248],{"class":51},[45,156246,120136],{"class":79},[45,156248,156249,156251,156254],{"class":47,"line":1352},[45,156250,155887],{"class":55},[45,156252,156253],{"class":51},"\u002F=",[45,156255,47823],{"class":79},[20,156257,156258],{},"等价关系：",[36,156260,156262],{"className":30478,"code":156261,"language":30480,"meta":25,"style":25},"num += 1\nnum = num + 1\n",[42,156263,156264,156272],{"__ignoreMap":25},[45,156265,156266,156268,156270],{"class":47,"line":48},[45,156267,155887],{"class":55},[45,156269,9627],{"class":51},[45,156271,55799],{"class":79},[45,156273,156274,156276,156278,156281,156283],{"class":47,"line":66},[45,156275,155887],{"class":55},[45,156277,59],{"class":51},[45,156279,156280],{"class":55}," num ",[45,156282,758],{"class":51},[45,156284,55799],{"class":79},[20,156286,156287,156288,101118,156291,28485],{},"Python 没有 ",[42,156289,156290],{},"num++",[42,156292,156293],{},"num--",[249,156295,156297],{"id":156296},"_273-比较运算符","2.7.3 比较运算符",[20,156299,156300],{},"比较运算结果是布尔值。",[36,156302,156304],{"className":30478,"code":156303,"language":30480,"meta":25,"style":25},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[42,156305,156306,156320,156335,156349],{"__ignoreMap":25},[45,156307,156308,156310,156312,156314,156316,156318],{"class":47,"line":48},[45,156309,30515],{"class":79},[45,156311,282],{"class":55},[45,156313,723],{"class":79},[45,156315,26322],{"class":51},[45,156317,2298],{"class":79},[45,156319,139],{"class":55},[45,156321,156322,156324,156326,156328,156331,156333],{"class":47,"line":66},[45,156323,30515],{"class":79},[45,156325,282],{"class":55},[45,156327,723],{"class":79},[45,156329,156330],{"class":51}," >=",[45,156332,2188],{"class":79},[45,156334,139],{"class":55},[45,156336,156337,156339,156341,156343,156345,156347],{"class":47,"line":1331},[45,156338,30515],{"class":79},[45,156340,282],{"class":55},[45,156342,723],{"class":79},[45,156344,101659],{"class":51},[45,156346,2233],{"class":79},[45,156348,139],{"class":55},[45,156350,156351,156353,156355,156357,156360,156362],{"class":47,"line":1346},[45,156352,30515],{"class":79},[45,156354,282],{"class":55},[45,156356,723],{"class":79},[45,156358,156359],{"class":51}," !=",[45,156361,2233],{"class":79},[45,156363,139],{"class":55},[20,156365,156366,156367,156369,156370,28485],{},"注意：判断相等用 ",[42,156368,3099],{},"，赋值用 ",[42,156371,59],{},[36,156373,156375],{"className":30478,"code":156374,"language":30480,"meta":25,"style":25},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[42,156376,156377,156389],{"__ignoreMap":25},[45,156378,156379,156381,156383,156386],{"class":47,"line":48},[45,156380,146646],{"class":55},[45,156382,59],{"class":51},[45,156384,156385],{"class":79}," 18",[45,156387,156388],{"class":337},"       # 赋值\n",[45,156390,156391,156393,156395,156397],{"class":47,"line":66},[45,156392,146646],{"class":55},[45,156394,3099],{"class":51},[45,156396,156385],{"class":79},[45,156398,156399],{"class":337},"      # 判断是否相等\n",[249,156401,156403],{"id":156402},"_274-逻辑运算符","2.7.4 逻辑运算符",[415,156405,156406,156414],{},[418,156407,156408],{},[421,156409,156410,156412],{},[424,156411,156024],{},[424,156413,25969],{},[462,156415,156416,156425,156434],{},[421,156417,156418,156422],{},[467,156419,156420],{},[42,156421,30562],{},[467,156423,156424],{},"并且",[421,156426,156427,156431],{},[467,156428,156429],{},[42,156430,115190],{},[467,156432,156433],{},"或者",[421,156435,156436,156441],{},[467,156437,156438],{},[42,156439,156440],{},"not",[467,156442,156443],{},"取反",[36,156445,156447],{"className":30478,"code":156446,"language":30480,"meta":25,"style":25},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[42,156448,156449,156457,156466,156470,156485,156499],{"__ignoreMap":25},[45,156450,156451,156453,156455],{"class":47,"line":48},[45,156452,146646],{"class":55},[45,156454,59],{"class":51},[45,156456,88165],{"class":79},[45,156458,156459,156462,156464],{"class":47,"line":66},[45,156460,156461],{"class":55},"has_ticket ",[45,156463,59],{"class":51},[45,156465,153699],{"class":79},[45,156467,156468],{"class":47,"line":1331},[45,156469,2550],{"emptyLinePlaceholder":207},[45,156471,156472,156474,156476,156478,156480,156482],{"class":47,"line":1346},[45,156473,30515],{"class":79},[45,156475,155868],{"class":55},[45,156477,1861],{"class":51},[45,156479,156385],{"class":79},[45,156481,120529],{"class":51},[45,156483,156484],{"class":55}," has_ticket)\n",[45,156486,156487,156489,156491,156493,156495,156497],{"class":47,"line":1352},[45,156488,30515],{"class":79},[45,156490,155868],{"class":55},[45,156492,1187],{"class":51},[45,156494,156385],{"class":79},[45,156496,114301],{"class":51},[45,156498,156484],{"class":55},[45,156500,156501,156503,156505,156507],{"class":47,"line":1366},[45,156502,30515],{"class":79},[45,156504,282],{"class":55},[45,156506,156440],{"class":51},[45,156508,156484],{"class":55},[15,156510,156512],{"id":156511},"_28-字符串定义","2.8 字符串定义",[20,156514,156515],{},"三种常见写法：",[36,156517,156519],{"className":30478,"code":156518,"language":30480,"meta":25,"style":25},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[42,156520,156521,156531,156540,156550],{"__ignoreMap":25},[45,156522,156523,156526,156528],{"class":47,"line":48},[45,156524,156525],{"class":55},"name1 ",[45,156527,59],{"class":51},[45,156529,156530],{"class":62}," '小明'\n",[45,156532,156533,156536,156538],{"class":47,"line":66},[45,156534,156535],{"class":55},"name2 ",[45,156537,59],{"class":51},[45,156539,149453],{"class":62},[45,156541,156542,156545,156547],{"class":47,"line":1331},[45,156543,156544],{"class":55},"text ",[45,156546,59],{"class":51},[45,156548,156549],{"class":62}," \"\"\"这是多行字符串\n",[45,156551,156552],{"class":47,"line":1346},[45,156553,156554],{"class":62},"可以换行\"\"\"\n",[20,156556,156557],{},"字符串中包含引号：",[36,156559,156561],{"className":30478,"code":156560,"language":30480,"meta":25,"style":25},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[42,156562,156563,156573,156583],{"__ignoreMap":25},[45,156564,156565,156568,156570],{"class":47,"line":48},[45,156566,156567],{"class":55},"msg ",[45,156569,59],{"class":51},[45,156571,156572],{"class":62}," \"他说:'你好'\"\n",[45,156574,156575,156578,156580],{"class":47,"line":66},[45,156576,156577],{"class":55},"msg2 ",[45,156579,59],{"class":51},[45,156581,156582],{"class":62}," '他说:\"你好\"'\n",[45,156584,156585,156588,156590,156593,156596,156599,156601],{"class":47,"line":1331},[45,156586,156587],{"class":55},"msg3 ",[45,156589,59],{"class":51},[45,156591,156592],{"class":62}," \"他说:",[45,156594,156595],{"class":79},"\\\"",[45,156597,156598],{"class":62},"你好",[45,156600,156595],{"class":79},[45,156602,152],{"class":62},[20,156604,156605],{},"常见转义字符：",[415,156607,156608,156617],{},[418,156609,156610],{},[421,156611,156612,156615],{},[424,156613,156614],{},"写法",[424,156616,100800],{},[462,156618,156619,156629,156638,156648,156657],{},[421,156620,156621,156626],{},[467,156622,156623],{},[42,156624,156625],{},"\\n",[467,156627,156628],{},"换行",[421,156630,156631,156635],{},[467,156632,156633],{},[42,156634,1382],{},[467,156636,156637],{},"制表符",[421,156639,156640,156645],{},[467,156641,156642],{},[42,156643,156644],{},"\\\\",[467,156646,156647],{},"反斜杠",[421,156649,156650,156654],{},[467,156651,156652],{},[42,156653,156595],{},[467,156655,156656],{},"双引号",[421,156658,156659,156664],{},[467,156660,156661],{},[42,156662,156663],{},"\\'",[467,156665,156666],{},"单引号",[15,156668,156670],{"id":156669},"_29-字符串拼接","2.9 字符串拼接",[36,156672,156674],{"className":30478,"code":156673,"language":30480,"meta":25,"style":25},"name = \"小明\"\nprint(\"你好，\" + name)\n",[42,156675,156676,156684],{"__ignoreMap":25},[45,156677,156678,156680,156682],{"class":47,"line":48},[45,156679,146636],{"class":55},[45,156681,59],{"class":51},[45,156683,149453],{"class":62},[45,156685,156686,156688,156690,156693,156695],{"class":47,"line":66},[45,156687,30515],{"class":79},[45,156689,282],{"class":55},[45,156691,156692],{"class":62},"\"你好，\"",[45,156694,45666],{"class":51},[45,156696,156697],{"class":55}," name)\n",[20,156699,156700],{},"字符串只能和字符串拼接：",[36,156702,156704],{"className":30478,"code":156703,"language":30480,"meta":25,"style":25},"age = 18\nprint(\"年龄:\" + str(age))\n",[42,156705,156706,156714],{"__ignoreMap":25},[45,156707,156708,156710,156712],{"class":47,"line":48},[45,156709,146646],{"class":55},[45,156711,59],{"class":51},[45,156713,146651],{"class":79},[45,156715,156716,156718,156720,156722,156724,156726],{"class":47,"line":66},[45,156717,30515],{"class":79},[45,156719,282],{"class":55},[45,156721,146617],{"class":62},[45,156723,45666],{"class":51},[45,156725,74019],{"class":79},[45,156727,156728],{"class":55},"(age))\n",[20,156730,156731],{},"更推荐使用格式化字符串。",[15,156733,156735],{"id":156734},"_210-字符串格式化","2.10 字符串格式化",[249,156737,156739],{"id":156738},"_2101-百分号格式化","2.10.1 百分号格式化",[36,156741,156743],{"className":30478,"code":156742,"language":30480,"meta":25,"style":25},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[42,156744,156745,156753,156761,156770,156774],{"__ignoreMap":25},[45,156746,156747,156749,156751],{"class":47,"line":48},[45,156748,146636],{"class":55},[45,156750,59],{"class":51},[45,156752,149453],{"class":62},[45,156754,156755,156757,156759],{"class":47,"line":66},[45,156756,146646],{"class":55},[45,156758,59],{"class":51},[45,156760,146651],{"class":79},[45,156762,156763,156765,156767],{"class":47,"line":1331},[45,156764,155458],{"class":55},[45,156766,59],{"class":51},[45,156768,156769],{"class":79}," 95.5\n",[45,156771,156772],{"class":47,"line":1346},[45,156773,2550],{"emptyLinePlaceholder":207},[45,156775,156776,156778,156780,156783,156786,156789,156792,156795,156798,156800,156802],{"class":47,"line":1352},[45,156777,30515],{"class":79},[45,156779,282],{"class":55},[45,156781,156782],{"class":62},"\"姓名:",[45,156784,156785],{"class":79},"%s",[45,156787,156788],{"class":62}," 年龄:",[45,156790,156791],{"class":79},"%d",[45,156793,156794],{"class":62}," 分数:",[45,156796,156797],{"class":79},"%.1f",[45,156799,89],{"class":62},[45,156801,156181],{"class":51},[45,156803,156804],{"class":55}," (name, age, score))\n",[20,156806,156807],{},"常用占位符：",[415,156809,156810,156819],{},[418,156811,156812],{},[421,156813,156814,156817],{},[424,156815,156816],{},"占位符",[424,156818,25969],{},[462,156820,156821,156829,156837],{},[421,156822,156823,156827],{},[467,156824,156825],{},[42,156826,156785],{},[467,156828,155324],{},[421,156830,156831,156835],{},[467,156832,156833],{},[42,156834,156791],{},[467,156836,155302],{},[421,156838,156839,156844],{},[467,156840,156841],{},[42,156842,156843],{},"%f",[467,156845,155313],{},[20,156847,156848],{},"精度控制：",[36,156850,156852],{"className":30478,"code":156851,"language":30480,"meta":25,"style":25},"price = 12.3456\nprint(\"%.2f\" % price)\n",[42,156853,156854,156863],{"__ignoreMap":25},[45,156855,156856,156858,156860],{"class":47,"line":48},[45,156857,146781],{"class":55},[45,156859,59],{"class":51},[45,156861,156862],{"class":79}," 12.3456\n",[45,156864,156865,156867,156869,156871,156874,156876,156878],{"class":47,"line":66},[45,156866,30515],{"class":79},[45,156868,282],{"class":55},[45,156870,89],{"class":62},[45,156872,156873],{"class":79},"%.2f",[45,156875,89],{"class":62},[45,156877,156181],{"class":51},[45,156879,156880],{"class":55}," price)\n",[249,156882,156884],{"id":156883},"_2102-format方法","2.10.2 format方法",[36,156886,156888],{"className":30478,"code":156887,"language":30480,"meta":25,"style":25},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[42,156889,156890,156898,156906,156910,156929,156949],{"__ignoreMap":25},[45,156891,156892,156894,156896],{"class":47,"line":48},[45,156893,146636],{"class":55},[45,156895,59],{"class":51},[45,156897,149453],{"class":62},[45,156899,156900,156902,156904],{"class":47,"line":66},[45,156901,146646],{"class":55},[45,156903,59],{"class":51},[45,156905,146651],{"class":79},[45,156907,156908],{"class":47,"line":1331},[45,156909,2550],{"emptyLinePlaceholder":207},[45,156911,156912,156914,156916,156918,156920,156922,156924,156926],{"class":47,"line":1346},[45,156913,30515],{"class":79},[45,156915,282],{"class":55},[45,156917,156782],{"class":62},[45,156919,32559],{"class":79},[45,156921,156788],{"class":62},[45,156923,32559],{"class":79},[45,156925,89],{"class":62},[45,156927,156928],{"class":55},".format(name, age))\n",[45,156930,156931,156933,156935,156937,156940,156942,156945,156947],{"class":47,"line":1352},[45,156932,30515],{"class":79},[45,156934,282],{"class":55},[45,156936,156782],{"class":62},[45,156938,156939],{"class":79},"{0}",[45,156941,156788],{"class":62},[45,156943,156944],{"class":79},"{1}",[45,156946,89],{"class":62},[45,156948,156928],{"class":55},[45,156950,156951,156953,156955,156957,156960,156962,156965,156967,156970,156972,156974,156977,156979,156981],{"class":47,"line":1366},[45,156952,30515],{"class":79},[45,156954,282],{"class":55},[45,156956,156782],{"class":62},[45,156958,156959],{"class":79},"{name}",[45,156961,156788],{"class":62},[45,156963,156964],{"class":79},"{age}",[45,156966,89],{"class":62},[45,156968,156969],{"class":55},".format(",[45,156971,79910],{"class":5366},[45,156973,59],{"class":51},[45,156975,156976],{"class":55},"name, ",[45,156978,70321],{"class":5366},[45,156980,59],{"class":51},[45,156982,156983],{"class":55},"age))\n",[249,156985,156987],{"id":156986},"_2103-f-string","2.10.3 f-string",[20,156989,156990],{},"推荐写法：",[36,156992,156994],{"className":30478,"code":156993,"language":30480,"meta":25,"style":25},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[42,156995,156996,157004,157012,157020,157024],{"__ignoreMap":25},[45,156997,156998,157000,157002],{"class":47,"line":48},[45,156999,146636],{"class":55},[45,157001,59],{"class":51},[45,157003,149453],{"class":62},[45,157005,157006,157008,157010],{"class":47,"line":66},[45,157007,146646],{"class":55},[45,157009,59],{"class":51},[45,157011,146651],{"class":79},[45,157013,157014,157016,157018],{"class":47,"line":1331},[45,157015,155458],{"class":55},[45,157017,59],{"class":51},[45,157019,156769],{"class":79},[45,157021,157022],{"class":47,"line":1346},[45,157023,2550],{"emptyLinePlaceholder":207},[45,157025,157026,157028,157030,157032,157034,157036,157038,157040,157042,157044,157046,157048,157050,157052,157055,157058,157060,157062],{"class":47,"line":1352},[45,157027,30515],{"class":79},[45,157029,282],{"class":55},[45,157031,331],{"class":51},[45,157033,156782],{"class":62},[45,157035,1173],{"class":79},[45,157037,79910],{"class":55},[45,157039,1223],{"class":79},[45,157041,156788],{"class":62},[45,157043,1173],{"class":79},[45,157045,70321],{"class":55},[45,157047,1223],{"class":79},[45,157049,156794],{"class":62},[45,157051,1173],{"class":79},[45,157053,157054],{"class":55},"score",[45,157056,157057],{"class":51},":.1f",[45,157059,1223],{"class":79},[45,157061,89],{"class":62},[45,157063,139],{"class":55},[20,157065,157066],{},"表达式也可以放进去：",[36,157068,157070],{"className":30478,"code":157069,"language":30480,"meta":25,"style":25},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[42,157071,157072,157080,157088],{"__ignoreMap":25},[45,157073,157074,157076,157078],{"class":47,"line":48},[45,157075,146781],{"class":55},[45,157077,59],{"class":51},[45,157079,146786],{"class":79},[45,157081,157082,157084,157086],{"class":47,"line":66},[45,157083,146791],{"class":55},[45,157085,59],{"class":51},[45,157087,54527],{"class":79},[45,157089,157090,157092,157094,157096,157099,157101,157103,157105,157108,157110,157113],{"class":47,"line":1331},[45,157091,30515],{"class":79},[45,157093,282],{"class":55},[45,157095,331],{"class":51},[45,157097,157098],{"class":62},"\"总价:",[45,157100,1173],{"class":79},[45,157102,146781],{"class":55},[45,157104,732],{"class":51},[45,157106,157107],{"class":55}," count",[45,157109,1223],{"class":79},[45,157111,157112],{"class":62},"元\"",[45,157114,139],{"class":55},[15,157116,157118],{"id":157117},"_211-input输入","2.11 input输入",[20,157120,157121,157124],{},[42,157122,157123],{},"input()"," 会暂停程序，等待用户输入。",[36,157126,157128],{"className":30478,"code":157127,"language":30480,"meta":25,"style":25},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[42,157129,157130,157144],{"__ignoreMap":25},[45,157131,157132,157134,157136,157138,157140,157142],{"class":47,"line":48},[45,157133,146636],{"class":55},[45,157135,59],{"class":51},[45,157137,60705],{"class":79},[45,157139,282],{"class":55},[45,157141,152479],{"class":62},[45,157143,139],{"class":55},[45,157145,157146,157148,157150,157152,157155,157157,157159,157161,157163],{"class":47,"line":66},[45,157147,30515],{"class":79},[45,157149,282],{"class":55},[45,157151,331],{"class":51},[45,157153,157154],{"class":62},"\"你好，",[45,157156,1173],{"class":79},[45,157158,79910],{"class":55},[45,157160,1223],{"class":79},[45,157162,89],{"class":62},[45,157164,139],{"class":55},[20,157166,157167],{},"输入整数：",[36,157169,157171],{"className":30478,"code":157170,"language":30480,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[42,157172,157173,157191],{"__ignoreMap":25},[45,157174,157175,157177,157179,157181,157183,157185,157187,157189],{"class":47,"line":48},[45,157176,146646],{"class":55},[45,157178,59],{"class":51},[45,157180,2532],{"class":79},[45,157182,282],{"class":55},[45,157184,53921],{"class":79},[45,157186,282],{"class":55},[45,157188,152494],{"class":62},[45,157190,30597],{"class":55},[45,157192,157193,157195,157197,157199,157202,157204,157206,157208,157211,157213],{"class":47,"line":66},[45,157194,30515],{"class":79},[45,157196,282],{"class":55},[45,157198,331],{"class":51},[45,157200,157201],{"class":62},"\"明年你",[45,157203,1173],{"class":79},[45,157205,146646],{"class":55},[45,157207,758],{"class":51},[45,157209,157210],{"class":79}," 1}",[45,157212,149504],{"class":62},[45,157214,139],{"class":55},[20,157216,157217],{},"输入小数：",[36,157219,157221],{"className":30478,"code":157220,"language":30480,"meta":25,"style":25},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[42,157222,157223,157242],{"__ignoreMap":25},[45,157224,157225,157227,157229,157231,157233,157235,157237,157240],{"class":47,"line":48},[45,157226,155431],{"class":55},[45,157228,59],{"class":51},[45,157230,109897],{"class":79},[45,157232,282],{"class":55},[45,157234,53921],{"class":79},[45,157236,282],{"class":55},[45,157238,157239],{"class":62},"\"请输入身高:\"",[45,157241,30597],{"class":55},[45,157243,157244,157246,157248,157250,157253,157255,157257,157260,157262,157265],{"class":47,"line":66},[45,157245,30515],{"class":79},[45,157247,282],{"class":55},[45,157249,331],{"class":51},[45,157251,157252],{"class":62},"\"身高:",[45,157254,1173],{"class":79},[45,157256,25129],{"class":55},[45,157258,157259],{"class":51},":.2f",[45,157261,1223],{"class":79},[45,157263,157264],{"class":62},"米\"",[45,157266,139],{"class":55},[15,157268,157270],{"id":157269},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[20,157272,123392],{},[233,157274,157275,157278,157281,157284],{},[169,157276,157277],{},"输入商品单价。",[169,157279,157280],{},"输入购买数量。",[169,157282,157283],{},"输入折扣，例如 0.8 表示八折。",[169,157285,157286],{},"输出最终金额，保留两位小数。",[20,157288,10184],{},[36,157290,157292],{"className":30478,"code":157291,"language":30480,"meta":25,"style":25},"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",[42,157293,157294,157313,157332,157352,157356,157376,157380,157403,157424,157446],{"__ignoreMap":25},[45,157295,157296,157298,157300,157302,157304,157306,157308,157311],{"class":47,"line":48},[45,157297,146781],{"class":55},[45,157299,59],{"class":51},[45,157301,109897],{"class":79},[45,157303,282],{"class":55},[45,157305,53921],{"class":79},[45,157307,282],{"class":55},[45,157309,157310],{"class":62},"\"请输入商品单价:\"",[45,157312,30597],{"class":55},[45,157314,157315,157317,157319,157321,157323,157325,157327,157330],{"class":47,"line":66},[45,157316,146791],{"class":55},[45,157318,59],{"class":51},[45,157320,2532],{"class":79},[45,157322,282],{"class":55},[45,157324,53921],{"class":79},[45,157326,282],{"class":55},[45,157328,157329],{"class":62},"\"请输入购买数量:\"",[45,157331,30597],{"class":55},[45,157333,157334,157337,157339,157341,157343,157345,157347,157350],{"class":47,"line":1331},[45,157335,157336],{"class":55},"discount ",[45,157338,59],{"class":51},[45,157340,109897],{"class":79},[45,157342,282],{"class":55},[45,157344,53921],{"class":79},[45,157346,282],{"class":55},[45,157348,157349],{"class":62},"\"请输入折扣:\"",[45,157351,30597],{"class":55},[45,157353,157354],{"class":47,"line":1346},[45,157355,2550],{"emptyLinePlaceholder":207},[45,157357,157358,157361,157363,157366,157368,157371,157373],{"class":47,"line":1352},[45,157359,157360],{"class":55},"total ",[45,157362,59],{"class":51},[45,157364,157365],{"class":55}," price ",[45,157367,732],{"class":51},[45,157369,157370],{"class":55}," count ",[45,157372,732],{"class":51},[45,157374,157375],{"class":55}," discount\n",[45,157377,157378],{"class":47,"line":1366},[45,157379,2550],{"emptyLinePlaceholder":207},[45,157381,157382,157384,157386,157388,157391,157393,157395,157397,157399,157401],{"class":47,"line":1372},[45,157383,30515],{"class":79},[45,157385,282],{"class":55},[45,157387,331],{"class":51},[45,157389,157390],{"class":62},"\"商品单价:",[45,157392,1173],{"class":79},[45,157394,79915],{"class":55},[45,157396,157259],{"class":51},[45,157398,1223],{"class":79},[45,157400,89],{"class":62},[45,157402,139],{"class":55},[45,157404,157405,157407,157409,157411,157414,157416,157418,157420,157422],{"class":47,"line":1463},[45,157406,30515],{"class":79},[45,157408,282],{"class":55},[45,157410,331],{"class":51},[45,157412,157413],{"class":62},"\"购买数量:",[45,157415,1173],{"class":79},[45,157417,84534],{"class":55},[45,157419,1223],{"class":79},[45,157421,89],{"class":62},[45,157423,139],{"class":55},[45,157425,157426,157428,157430,157432,157435,157437,157440,157442,157444],{"class":47,"line":1469},[45,157427,30515],{"class":79},[45,157429,282],{"class":55},[45,157431,331],{"class":51},[45,157433,157434],{"class":62},"\"折扣:",[45,157436,1173],{"class":79},[45,157438,157439],{"class":55},"discount",[45,157441,1223],{"class":79},[45,157443,89],{"class":62},[45,157445,139],{"class":55},[45,157447,157448,157450,157452,157454,157457,157459,157462,157464,157466,157468],{"class":47,"line":1481},[45,157449,30515],{"class":79},[45,157451,282],{"class":55},[45,157453,331],{"class":51},[45,157455,157456],{"class":62},"\"应付金额:",[45,157458,1173],{"class":79},[45,157460,157461],{"class":55},"total",[45,157463,157259],{"class":51},[45,157465,1223],{"class":79},[45,157467,157112],{"class":62},[45,157469,139],{"class":55},[15,157471,157473],{"id":157472},"_213-易错点","2.13 易错点",[233,157475,157476,157481,157487,157495,157498],{},[169,157477,157478,157480],{},[42,157479,157123],{}," 的结果是字符串，做运算前要转换。",[169,157482,157483,157484,28485],{},"字符串拼接时，数字要先 ",[42,157485,157486],{},"str()",[169,157488,157489,157491,157492,157494],{},[42,157490,59],{}," 是赋值，",[42,157493,3099],{}," 是比较。",[169,157496,157497],{},"Python 没有自增自减运算符。",[169,157499,157500],{},"浮点数计算可能有精度误差：",[36,157502,157504],{"className":30478,"code":157503,"language":30480,"meta":25,"style":25},"print(0.1 + 0.2)\n",[42,157505,157506],{"__ignoreMap":25},[45,157507,157508,157510,157512,157514,157516,157519],{"class":47,"line":48},[45,157509,30515],{"class":79},[45,157511,282],{"class":55},[45,157513,86310],{"class":79},[45,157515,45666],{"class":51},[45,157517,157518],{"class":79}," 0.2",[45,157520,139],{"class":55},[20,157522,157523,157524,157527],{},"金额计算如果要求严格，可以后续学习 ",[42,157525,157526],{},"decimal"," 模块。",[15,157529,157531],{"id":157530},"_214-本章练习","2.14 本章练习",[233,157533,157534,157537,157540,157543,157546],{},[169,157535,157536],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[169,157538,157539],{},"输入圆的半径，计算面积，保留两位小数。",[169,157541,157542],{},"输入工资和奖金，计算总收入。",[169,157544,157545],{},"输入摄氏温度，转换为华氏温度。",[169,157547,157548],{},"写一个 BMI 计算程序：",[36,157550,157553],{"className":157551,"code":157552,"language":5337,"meta":25},[5335],"BMI = 体重kg \u002F 身高m ** 2\n",[42,157554,157552],{"__ignoreMap":25},[196,157556,157557],{},"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":25,"searchDepth":66,"depth":66,"links":157559},[157560,157561,157562,157563,157564,157565,157566,157572,157573,157574,157579,157580,157581,157582],{"id":155121,"depth":66,"text":155122},{"id":155230,"depth":66,"text":155231},{"id":155401,"depth":66,"text":155402},{"id":155478,"depth":66,"text":155479},{"id":50831,"depth":66,"text":50832},{"id":155784,"depth":66,"text":155785},{"id":156010,"depth":66,"text":156011,"children":157567},[157568,157569,157570,157571],{"id":156014,"depth":1331,"text":156015},{"id":156208,"depth":1331,"text":156209},{"id":156296,"depth":1331,"text":156297},{"id":156402,"depth":1331,"text":156403},{"id":156511,"depth":66,"text":156512},{"id":156669,"depth":66,"text":156670},{"id":156734,"depth":66,"text":156735,"children":157575},[157576,157577,157578],{"id":156738,"depth":1331,"text":156739},{"id":156883,"depth":1331,"text":156884},{"id":156986,"depth":1331,"text":156987},{"id":157117,"depth":66,"text":157118},{"id":157269,"depth":66,"text":157270},{"id":157472,"depth":66,"text":157473},{"id":157530,"depth":66,"text":157531},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155113,"description":204},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157589,"title":157590,"body":157591,"description":204,"extension":205,"meta":159227,"navigation":207,"path":159228,"seo":159229,"stem":159230,"__hash__":159231},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157592,"toc":159208},[157593,157596,157600,157603,157618,157621,157649,157653,157703,157705,157721,157724,157750,157753,157757,157824,157827,157843,157847,157850,157968,157971,157978,158027,158033,158037,158040,158153,158156,158160,158164,158167,158217,158221,158224,158274,158278,158281,158319,158323,158326,158372,158375,158410,158414,158419,158422,158468,158470,158537,158541,158547,158658,158667,158671,158673,158684,158686,158852,158856,158858,158872,158874,159088,159092,159111,159128,159131,159177,159181,159205],[10,157594,157590],{"id":157595},"_3-判断语句",[15,157597,157599],{"id":157598},"_31-布尔值","3.1 布尔值",[20,157601,157602],{},"判断语句依赖布尔值：",[36,157604,157606],{"className":30478,"code":157605,"language":30480,"meta":25,"style":25},"True\nFalse\n",[42,157607,157608,157613],{"__ignoreMap":25},[45,157609,157610],{"class":47,"line":48},[45,157611,157612],{"class":79},"True\n",[45,157614,157615],{"class":47,"line":66},[45,157616,157617],{"class":79},"False\n",[20,157619,157620],{},"比较表达式会产生布尔值：",[36,157622,157624],{"className":30478,"code":157623,"language":30480,"meta":25,"style":25},"age = 18\nprint(age >= 18)  # True\n",[42,157625,157626,157634],{"__ignoreMap":25},[45,157627,157628,157630,157632],{"class":47,"line":48},[45,157629,146646],{"class":55},[45,157631,59],{"class":51},[45,157633,146651],{"class":79},[45,157635,157636,157638,157640,157642,157644,157646],{"class":47,"line":66},[45,157637,30515],{"class":79},[45,157639,155868],{"class":55},[45,157641,1861],{"class":51},[45,157643,156385],{"class":79},[45,157645,45908],{"class":55},[45,157647,157648],{"class":337},"# True\n",[15,157650,157652],{"id":157651},"_32-if基础语法","3.2 if基础语法",[36,157654,157656],{"className":30478,"code":157655,"language":30480,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[42,157657,157658,157676,157680,157692],{"__ignoreMap":25},[45,157659,157660,157662,157664,157666,157668,157670,157672,157674],{"class":47,"line":48},[45,157661,146646],{"class":55},[45,157663,59],{"class":51},[45,157665,2532],{"class":79},[45,157667,282],{"class":55},[45,157669,53921],{"class":79},[45,157671,282],{"class":55},[45,157673,152494],{"class":62},[45,157675,30597],{"class":55},[45,157677,157678],{"class":47,"line":66},[45,157679,2550],{"emptyLinePlaceholder":207},[45,157681,157682,157684,157686,157688,157690],{"class":47,"line":1331},[45,157683,1682],{"class":51},[45,157685,15856],{"class":55},[45,157687,1861],{"class":51},[45,157689,156385],{"class":79},[45,157691,3889],{"class":55},[45,157693,157694,157696,157698,157701],{"class":47,"line":1346},[45,157695,31399],{"class":79},[45,157697,282],{"class":55},[45,157699,157700],{"class":62},"\"可以进入网吧\"",[45,157702,139],{"class":55},[20,157704,9175],{},[233,157706,157707,157712,157715,157718],{},[169,157708,157709,157711],{},[42,157710,1682],{}," 后面是条件表达式。",[169,157713,157714],{},"条件后面必须写冒号。",[169,157716,157717],{},"条件成立时执行缩进代码块。",[169,157719,157720],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[20,157722,157723],{},"错误示例：",[36,157725,157727],{"className":30478,"code":157726,"language":30480,"meta":25,"style":25},"if age >= 18\n    print(\"可以进入\")\n",[42,157728,157729,157739],{"__ignoreMap":25},[45,157730,157731,157733,157735,157737],{"class":47,"line":48},[45,157732,1682],{"class":51},[45,157734,15856],{"class":55},[45,157736,1861],{"class":51},[45,157738,146651],{"class":79},[45,157740,157741,157743,157745,157748],{"class":47,"line":66},[45,157742,31399],{"class":79},[45,157744,282],{"class":55},[45,157746,157747],{"class":62},"\"可以进入\"",[45,157749,139],{"class":55},[20,157751,157752],{},"缺少冒号。",[15,157754,157756],{"id":157755},"_33-if-else","3.3 if else",[36,157758,157760],{"className":30478,"code":157759,"language":30480,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[42,157761,157762,157780,157784,157796,157807,157813],{"__ignoreMap":25},[45,157763,157764,157766,157768,157770,157772,157774,157776,157778],{"class":47,"line":48},[45,157765,146646],{"class":55},[45,157767,59],{"class":51},[45,157769,2532],{"class":79},[45,157771,282],{"class":55},[45,157773,53921],{"class":79},[45,157775,282],{"class":55},[45,157777,152494],{"class":62},[45,157779,30597],{"class":55},[45,157781,157782],{"class":47,"line":66},[45,157783,2550],{"emptyLinePlaceholder":207},[45,157785,157786,157788,157790,157792,157794],{"class":47,"line":1331},[45,157787,1682],{"class":51},[45,157789,15856],{"class":55},[45,157791,1861],{"class":51},[45,157793,156385],{"class":79},[45,157795,3889],{"class":55},[45,157797,157798,157800,157802,157805],{"class":47,"line":1346},[45,157799,31399],{"class":79},[45,157801,282],{"class":55},[45,157803,157804],{"class":62},"\"成年人\"",[45,157806,139],{"class":55},[45,157808,157809,157811],{"class":47,"line":1352},[45,157810,1852],{"class":51},[45,157812,3889],{"class":55},[45,157814,157815,157817,157819,157822],{"class":47,"line":1366},[45,157816,31399],{"class":79},[45,157818,282],{"class":55},[45,157820,157821],{"class":62},"\"未成年人\"",[45,157823,139],{"class":55},[20,157825,157826],{},"执行逻辑：",[233,157828,157829,157835,157840],{},[169,157830,157831,157832,157834],{},"条件成立，执行 ",[42,157833,1682],{}," 代码块。",[169,157836,157837,157838,157834],{},"条件不成立，执行 ",[42,157839,1852],{},[169,157841,157842],{},"两个代码块只会执行其中一个。",[15,157844,157846],{"id":157845},"_34-if-elif-else","3.4 if elif else",[20,157848,157849],{},"多条件判断：",[36,157851,157853],{"className":30478,"code":157852,"language":30480,"meta":25,"style":25},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[42,157854,157855,157873,157877,157891,157902,157916,157927,157940,157951,157957],{"__ignoreMap":25},[45,157856,157857,157859,157861,157863,157865,157867,157869,157871],{"class":47,"line":48},[45,157858,155458],{"class":55},[45,157860,59],{"class":51},[45,157862,2532],{"class":79},[45,157864,282],{"class":55},[45,157866,53921],{"class":79},[45,157868,282],{"class":55},[45,157870,152509],{"class":62},[45,157872,30597],{"class":55},[45,157874,157875],{"class":47,"line":66},[45,157876,2550],{"emptyLinePlaceholder":207},[45,157878,157879,157881,157884,157886,157889],{"class":47,"line":1331},[45,157880,1682],{"class":51},[45,157882,157883],{"class":55}," score ",[45,157885,1861],{"class":51},[45,157887,157888],{"class":79}," 90",[45,157890,3889],{"class":55},[45,157892,157893,157895,157897,157900],{"class":47,"line":1346},[45,157894,31399],{"class":79},[45,157896,282],{"class":55},[45,157898,157899],{"class":62},"\"优秀\"",[45,157901,139],{"class":55},[45,157903,157904,157907,157909,157911,157914],{"class":47,"line":1352},[45,157905,157906],{"class":51},"elif",[45,157908,157883],{"class":55},[45,157910,1861],{"class":51},[45,157912,157913],{"class":79}," 80",[45,157915,3889],{"class":55},[45,157917,157918,157920,157922,157925],{"class":47,"line":1366},[45,157919,31399],{"class":79},[45,157921,282],{"class":55},[45,157923,157924],{"class":62},"\"良好\"",[45,157926,139],{"class":55},[45,157928,157929,157931,157933,157935,157938],{"class":47,"line":1372},[45,157930,157906],{"class":51},[45,157932,157883],{"class":55},[45,157934,1861],{"class":51},[45,157936,157937],{"class":79}," 60",[45,157939,3889],{"class":55},[45,157941,157942,157944,157946,157949],{"class":47,"line":1463},[45,157943,31399],{"class":79},[45,157945,282],{"class":55},[45,157947,157948],{"class":62},"\"及格\"",[45,157950,139],{"class":55},[45,157952,157953,157955],{"class":47,"line":1469},[45,157954,1852],{"class":51},[45,157956,3889],{"class":55},[45,157958,157959,157961,157963,157966],{"class":47,"line":1481},[45,157960,31399],{"class":79},[45,157962,282],{"class":55},[45,157964,157965],{"class":62},"\"不及格\"",[45,157967,139],{"class":55},[20,157969,157970],{},"注意判断顺序很重要。",[20,157972,157973,157974,157977],{},"如果把 ",[42,157975,157976],{},"score >= 60"," 放在最前面：",[36,157979,157981],{"className":30478,"code":157980,"language":30480,"meta":25,"style":25},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[42,157982,157983,157995,158005,158017],{"__ignoreMap":25},[45,157984,157985,157987,157989,157991,157993],{"class":47,"line":48},[45,157986,1682],{"class":51},[45,157988,157883],{"class":55},[45,157990,1861],{"class":51},[45,157992,157937],{"class":79},[45,157994,3889],{"class":55},[45,157996,157997,157999,158001,158003],{"class":47,"line":66},[45,157998,31399],{"class":79},[45,158000,282],{"class":55},[45,158002,157948],{"class":62},[45,158004,139],{"class":55},[45,158006,158007,158009,158011,158013,158015],{"class":47,"line":1331},[45,158008,157906],{"class":51},[45,158010,157883],{"class":55},[45,158012,1861],{"class":51},[45,158014,157888],{"class":79},[45,158016,3889],{"class":55},[45,158018,158019,158021,158023,158025],{"class":47,"line":1346},[45,158020,31399],{"class":79},[45,158022,282],{"class":55},[45,158024,157899],{"class":62},[45,158026,139],{"class":55},[20,158028,158029,158030,158032],{},"成绩 95 会先满足 ",[42,158031,157976],{},"，后面的优秀分支就不会执行。",[15,158034,158036],{"id":158035},"_35-判断语句嵌套","3.5 判断语句嵌套",[20,158038,158039],{},"嵌套判断就是在一个判断内部再写判断。",[36,158041,158043],{"className":30478,"code":158042,"language":30480,"meta":25,"style":25},"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",[42,158044,158045,158063,158078,158082,158094,158108,158118,158125,158136,158142],{"__ignoreMap":25},[45,158046,158047,158049,158051,158053,158055,158057,158059,158061],{"class":47,"line":48},[45,158048,146646],{"class":55},[45,158050,59],{"class":51},[45,158052,2532],{"class":79},[45,158054,282],{"class":55},[45,158056,53921],{"class":79},[45,158058,282],{"class":55},[45,158060,152494],{"class":62},[45,158062,30597],{"class":55},[45,158064,158065,158067,158069,158071,158073,158076],{"class":47,"line":66},[45,158066,156461],{"class":55},[45,158068,59],{"class":51},[45,158070,60705],{"class":79},[45,158072,282],{"class":55},[45,158074,158075],{"class":62},"\"是否有票(y\u002Fn):\"",[45,158077,139],{"class":55},[45,158079,158080],{"class":47,"line":1331},[45,158081,2550],{"emptyLinePlaceholder":207},[45,158083,158084,158086,158088,158090,158092],{"class":47,"line":1346},[45,158085,1682],{"class":51},[45,158087,15856],{"class":55},[45,158089,1861],{"class":51},[45,158091,156385],{"class":79},[45,158093,3889],{"class":55},[45,158095,158096,158098,158101,158103,158106],{"class":47,"line":1352},[45,158097,3251],{"class":51},[45,158099,158100],{"class":55}," has_ticket ",[45,158102,3099],{"class":51},[45,158104,158105],{"class":62}," \"y\"",[45,158107,3889],{"class":55},[45,158109,158110,158112,158114,158116],{"class":47,"line":1366},[45,158111,32551],{"class":79},[45,158113,282],{"class":55},[45,158115,157747],{"class":62},[45,158117,139],{"class":55},[45,158119,158120,158123],{"class":47,"line":1372},[45,158121,158122],{"class":51},"    else",[45,158124,3889],{"class":55},[45,158126,158127,158129,158131,158134],{"class":47,"line":1463},[45,158128,32551],{"class":79},[45,158130,282],{"class":55},[45,158132,158133],{"class":62},"\"请先买票\"",[45,158135,139],{"class":55},[45,158137,158138,158140],{"class":47,"line":1469},[45,158139,1852],{"class":51},[45,158141,3889],{"class":55},[45,158143,158144,158146,158148,158151],{"class":47,"line":1481},[45,158145,31399],{"class":79},[45,158147,282],{"class":55},[45,158149,158150],{"class":62},"\"未成年人禁止进入\"",[45,158152,139],{"class":55},[20,158154,158155],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[15,158157,158159],{"id":158158},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[249,158161,158163],{"id":158162},"_361-and","3.6.1 and",[20,158165,158166],{},"两个条件都成立才成立。",[36,158168,158170],{"className":30478,"code":158169,"language":30480,"meta":25,"style":25},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[42,158171,158172,158180,158188,158192,158207],{"__ignoreMap":25},[45,158173,158174,158176,158178],{"class":47,"line":48},[45,158175,146646],{"class":55},[45,158177,59],{"class":51},[45,158179,88165],{"class":79},[45,158181,158182,158184,158186],{"class":47,"line":66},[45,158183,156461],{"class":55},[45,158185,59],{"class":51},[45,158187,153699],{"class":79},[45,158189,158190],{"class":47,"line":1331},[45,158191,2550],{"emptyLinePlaceholder":207},[45,158193,158194,158196,158198,158200,158202,158204],{"class":47,"line":1346},[45,158195,1682],{"class":51},[45,158197,15856],{"class":55},[45,158199,1861],{"class":51},[45,158201,156385],{"class":79},[45,158203,120529],{"class":51},[45,158205,158206],{"class":55}," has_ticket:\n",[45,158208,158209,158211,158213,158215],{"class":47,"line":1352},[45,158210,31399],{"class":79},[45,158212,282],{"class":55},[45,158214,157747],{"class":62},[45,158216,139],{"class":55},[249,158218,158220],{"id":158219},"_362-or","3.6.2 or",[20,158222,158223],{},"只要一个条件成立就成立。",[36,158225,158227],{"className":30478,"code":158226,"language":30480,"meta":25,"style":25},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[42,158228,158229,158238,158247,158251,158263],{"__ignoreMap":25},[45,158230,158231,158234,158236],{"class":47,"line":48},[45,158232,158233],{"class":55},"is_vip ",[45,158235,59],{"class":51},[45,158237,125907],{"class":79},[45,158239,158240,158243,158245],{"class":47,"line":66},[45,158241,158242],{"class":55},"coupon ",[45,158244,59],{"class":51},[45,158246,153699],{"class":79},[45,158248,158249],{"class":47,"line":1331},[45,158250,2550],{"emptyLinePlaceholder":207},[45,158252,158253,158255,158258,158260],{"class":47,"line":1346},[45,158254,1682],{"class":51},[45,158256,158257],{"class":55}," is_vip ",[45,158259,115190],{"class":51},[45,158261,158262],{"class":55}," coupon:\n",[45,158264,158265,158267,158269,158272],{"class":47,"line":1352},[45,158266,31399],{"class":79},[45,158268,282],{"class":55},[45,158270,158271],{"class":62},"\"可以享受优惠\"",[45,158273,139],{"class":55},[249,158275,158277],{"id":158276},"_363-not","3.6.3 not",[20,158279,158280],{},"取反。",[36,158282,158284],{"className":30478,"code":158283,"language":30480,"meta":25,"style":25},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[42,158285,158286,158295,158299,158308],{"__ignoreMap":25},[45,158287,158288,158291,158293],{"class":47,"line":48},[45,158289,158290],{"class":55},"is_closed ",[45,158292,59],{"class":51},[45,158294,125907],{"class":79},[45,158296,158297],{"class":47,"line":66},[45,158298,2550],{"emptyLinePlaceholder":207},[45,158300,158301,158303,158305],{"class":47,"line":1331},[45,158302,1682],{"class":51},[45,158304,39030],{"class":51},[45,158306,158307],{"class":55}," is_closed:\n",[45,158309,158310,158312,158314,158317],{"class":47,"line":1346},[45,158311,31399],{"class":79},[45,158313,282],{"class":55},[45,158315,158316],{"class":62},"\"店铺营业中\"",[45,158318,139],{"class":55},[15,158320,158322],{"id":158321},"_37-链式比较","3.7 链式比较",[20,158324,158325],{},"Python 支持链式比较：",[36,158327,158329],{"className":30478,"code":158328,"language":30480,"meta":25,"style":25},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[42,158330,158331,158340,158344,158361],{"__ignoreMap":25},[45,158332,158333,158335,158337],{"class":47,"line":48},[45,158334,155458],{"class":55},[45,158336,59],{"class":51},[45,158338,158339],{"class":79}," 85\n",[45,158341,158342],{"class":47,"line":66},[45,158343,2550],{"emptyLinePlaceholder":207},[45,158345,158346,158348,158350,158353,158355,158357,158359],{"class":47,"line":1331},[45,158347,1682],{"class":51},[45,158349,4243],{"class":79},[45,158351,158352],{"class":51}," \u003C=",[45,158354,157883],{"class":55},[45,158356,1739],{"class":51},[45,158358,5904],{"class":79},[45,158360,3889],{"class":55},[45,158362,158363,158365,158367,158370],{"class":47,"line":1346},[45,158364,31399],{"class":79},[45,158366,282],{"class":55},[45,158368,158369],{"class":62},"\"成绩合法\"",[45,158371,139],{"class":55},[20,158373,158374],{},"等价于：",[36,158376,158378],{"className":30478,"code":158377,"language":30480,"meta":25,"style":25},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[42,158379,158380,158400],{"__ignoreMap":25},[45,158381,158382,158384,158386,158388,158390,158392,158394,158396,158398],{"class":47,"line":48},[45,158383,1682],{"class":51},[45,158385,157883],{"class":55},[45,158387,1861],{"class":51},[45,158389,4243],{"class":79},[45,158391,120529],{"class":51},[45,158393,157883],{"class":55},[45,158395,1739],{"class":51},[45,158397,5904],{"class":79},[45,158399,3889],{"class":55},[45,158401,158402,158404,158406,158408],{"class":47,"line":66},[45,158403,31399],{"class":79},[45,158405,282],{"class":55},[45,158407,158369],{"class":62},[45,158409,139],{"class":55},[15,158411,158413],{"id":158412},"_38-真值和假值","3.8 真值和假值",[20,158415,116567,158416,158418],{},[42,158417,1682],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[20,158420,158421],{},"假值：",[36,158423,158425],{"className":30478,"code":158424,"language":30480,"meta":25,"style":25},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[42,158426,158427,158431,158436,158440,158444,158449,158453,158457,158462],{"__ignoreMap":25},[45,158428,158429],{"class":47,"line":48},[45,158430,157617],{"class":79},[45,158432,158433],{"class":47,"line":66},[45,158434,158435],{"class":79},"None\n",[45,158437,158438],{"class":47,"line":1331},[45,158439,3235],{"class":79},[45,158441,158442],{"class":47,"line":1346},[45,158443,32442],{"class":79},[45,158445,158446],{"class":47,"line":1352},[45,158447,158448],{"class":62},"\"\"\n",[45,158450,158451],{"class":47,"line":1366},[45,158452,32457],{"class":55},[45,158454,158455],{"class":47,"line":1372},[45,158456,2126],{"class":55},[45,158458,158459],{"class":47,"line":1463},[45,158460,158461],{"class":55},"{}\n",[45,158463,158464,158466],{"class":47,"line":1469},[45,158465,155390],{"class":79},[45,158467,2126],{"class":55},[20,158469,15284],{},[36,158471,158473],{"className":30478,"code":158472,"language":30480,"meta":25,"style":25},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[42,158474,158475,158489,158493,158500,158520,158526],{"__ignoreMap":25},[45,158476,158477,158479,158481,158483,158485,158487],{"class":47,"line":48},[45,158478,146636],{"class":55},[45,158480,59],{"class":51},[45,158482,60705],{"class":79},[45,158484,282],{"class":55},[45,158486,152479],{"class":62},[45,158488,139],{"class":55},[45,158490,158491],{"class":47,"line":66},[45,158492,2550],{"emptyLinePlaceholder":207},[45,158494,158495,158497],{"class":47,"line":1331},[45,158496,1682],{"class":51},[45,158498,158499],{"class":55}," name:\n",[45,158501,158502,158504,158506,158508,158510,158512,158514,158516,158518],{"class":47,"line":1346},[45,158503,31399],{"class":79},[45,158505,282],{"class":55},[45,158507,331],{"class":51},[45,158509,157154],{"class":62},[45,158511,1173],{"class":79},[45,158513,79910],{"class":55},[45,158515,1223],{"class":79},[45,158517,89],{"class":62},[45,158519,139],{"class":55},[45,158521,158522,158524],{"class":47,"line":1352},[45,158523,1852],{"class":51},[45,158525,3889],{"class":55},[45,158527,158528,158530,158532,158535],{"class":47,"line":1366},[45,158529,31399],{"class":79},[45,158531,282],{"class":55},[45,158533,158534],{"class":62},"\"姓名不能为空\"",[45,158536,139],{"class":55},[15,158538,158540],{"id":158539},"_39-match语句","3.9 match语句",[20,158542,158543,158544,158546],{},"Python 3.10 开始支持 ",[42,158545,71365],{},"。它适合处理固定选项。",[36,158548,158550],{"className":30478,"code":158549,"language":30480,"meta":25,"style":25},"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",[42,158551,158552,158568,158572,158579,158589,158600,158609,158620,158629,158640,158647],{"__ignoreMap":25},[45,158553,158554,158557,158559,158561,158563,158566],{"class":47,"line":48},[45,158555,158556],{"class":55},"command ",[45,158558,59],{"class":51},[45,158560,60705],{"class":79},[45,158562,282],{"class":55},[45,158564,158565],{"class":62},"\"请输入命令:\"",[45,158567,139],{"class":55},[45,158569,158570],{"class":47,"line":66},[45,158571,2550],{"emptyLinePlaceholder":207},[45,158573,158574,158576],{"class":47,"line":1331},[45,158575,71365],{"class":51},[45,158577,158578],{"class":55}," command:\n",[45,158580,158581,158584,158587],{"class":47,"line":1346},[45,158582,158583],{"class":51},"    case",[45,158585,158586],{"class":62}," \"start\"",[45,158588,3889],{"class":55},[45,158590,158591,158593,158595,158598],{"class":47,"line":1352},[45,158592,32551],{"class":79},[45,158594,282],{"class":55},[45,158596,158597],{"class":62},"\"启动\"",[45,158599,139],{"class":55},[45,158601,158602,158604,158607],{"class":47,"line":1366},[45,158603,158583],{"class":51},[45,158605,158606],{"class":62}," \"stop\"",[45,158608,3889],{"class":55},[45,158610,158611,158613,158615,158618],{"class":47,"line":1372},[45,158612,32551],{"class":79},[45,158614,282],{"class":55},[45,158616,158617],{"class":62},"\"停止\"",[45,158619,139],{"class":55},[45,158621,158622,158624,158627],{"class":47,"line":1463},[45,158623,158583],{"class":51},[45,158625,158626],{"class":62}," \"restart\"",[45,158628,3889],{"class":55},[45,158630,158631,158633,158635,158638],{"class":47,"line":1469},[45,158632,32551],{"class":79},[45,158634,282],{"class":55},[45,158636,158637],{"class":62},"\"重启\"",[45,158639,139],{"class":55},[45,158641,158642,158644],{"class":47,"line":1481},[45,158643,158583],{"class":51},[45,158645,158646],{"class":55}," _:\n",[45,158648,158649,158651,158653,158656],{"class":47,"line":1763},[45,158650,32551],{"class":79},[45,158652,282],{"class":55},[45,158654,158655],{"class":62},"\"未知命令\"",[45,158657,139],{"class":55},[20,158659,158660,158661,158663,158664,158666],{},"入门阶段掌握 ",[42,158662,154758],{}," 更重要，",[42,158665,71365],{}," 可以作为补充。",[15,158668,158670],{"id":158669},"_310-小案例成绩等级","3.10 小案例：成绩等级",[20,158672,123392],{},[233,158674,158675,158678,158681],{},[169,158676,158677],{},"输入成绩。",[169,158679,158680],{},"判断成绩是否合法。",[169,158682,158683],{},"输出等级。",[20,158685,10184],{},[36,158687,158689],{"className":30478,"code":158688,"language":30480,"meta":25,"style":25},"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",[42,158690,158691,158709,158713,158731,158742,158754,158765,158777,158788,158801,158812,158824,158835,158841],{"__ignoreMap":25},[45,158692,158693,158695,158697,158699,158701,158703,158705,158707],{"class":47,"line":48},[45,158694,155458],{"class":55},[45,158696,59],{"class":51},[45,158698,109897],{"class":79},[45,158700,282],{"class":55},[45,158702,53921],{"class":79},[45,158704,282],{"class":55},[45,158706,152509],{"class":62},[45,158708,30597],{"class":55},[45,158710,158711],{"class":47,"line":66},[45,158712,2550],{"emptyLinePlaceholder":207},[45,158714,158715,158717,158719,158721,158723,158725,158727,158729],{"class":47,"line":1331},[45,158716,1682],{"class":51},[45,158718,39030],{"class":51},[45,158720,4243],{"class":79},[45,158722,158352],{"class":51},[45,158724,157883],{"class":55},[45,158726,1739],{"class":51},[45,158728,5904],{"class":79},[45,158730,3889],{"class":55},[45,158732,158733,158735,158737,158740],{"class":47,"line":1346},[45,158734,31399],{"class":79},[45,158736,282],{"class":55},[45,158738,158739],{"class":62},"\"成绩不合法\"",[45,158741,139],{"class":55},[45,158743,158744,158746,158748,158750,158752],{"class":47,"line":1352},[45,158745,157906],{"class":51},[45,158747,157883],{"class":55},[45,158749,1861],{"class":51},[45,158751,157888],{"class":79},[45,158753,3889],{"class":55},[45,158755,158756,158758,158760,158763],{"class":47,"line":1366},[45,158757,31399],{"class":79},[45,158759,282],{"class":55},[45,158761,158762],{"class":62},"\"等级:A\"",[45,158764,139],{"class":55},[45,158766,158767,158769,158771,158773,158775],{"class":47,"line":1372},[45,158768,157906],{"class":51},[45,158770,157883],{"class":55},[45,158772,1861],{"class":51},[45,158774,157913],{"class":79},[45,158776,3889],{"class":55},[45,158778,158779,158781,158783,158786],{"class":47,"line":1463},[45,158780,31399],{"class":79},[45,158782,282],{"class":55},[45,158784,158785],{"class":62},"\"等级:B\"",[45,158787,139],{"class":55},[45,158789,158790,158792,158794,158796,158799],{"class":47,"line":1469},[45,158791,157906],{"class":51},[45,158793,157883],{"class":55},[45,158795,1861],{"class":51},[45,158797,158798],{"class":79}," 70",[45,158800,3889],{"class":55},[45,158802,158803,158805,158807,158810],{"class":47,"line":1481},[45,158804,31399],{"class":79},[45,158806,282],{"class":55},[45,158808,158809],{"class":62},"\"等级:C\"",[45,158811,139],{"class":55},[45,158813,158814,158816,158818,158820,158822],{"class":47,"line":1763},[45,158815,157906],{"class":51},[45,158817,157883],{"class":55},[45,158819,1861],{"class":51},[45,158821,157937],{"class":79},[45,158823,3889],{"class":55},[45,158825,158826,158828,158830,158833],{"class":47,"line":1768},[45,158827,31399],{"class":79},[45,158829,282],{"class":55},[45,158831,158832],{"class":62},"\"等级:D\"",[45,158834,139],{"class":55},[45,158836,158837,158839],{"class":47,"line":1774},[45,158838,1852],{"class":51},[45,158840,3889],{"class":55},[45,158842,158843,158845,158847,158850],{"class":47,"line":1779},[45,158844,31399],{"class":79},[45,158846,282],{"class":55},[45,158848,158849],{"class":62},"\"等级:E\"",[45,158851,139],{"class":55},[15,158853,158855],{"id":158854},"_311-小案例会员折扣","3.11 小案例：会员折扣",[20,158857,123392],{},[233,158859,158860,158863,158866,158869],{},[169,158861,158862],{},"输入消费金额。",[169,158864,158865],{},"输入会员等级，普通、银卡、金卡。",[169,158867,158868],{},"普通不打折，银卡 9 折，金卡 8 折。",[169,158870,158871],{},"满 500 再减 50。",[20,158873,10184],{},[36,158875,158877],{"className":30478,"code":158876,"language":30480,"meta":25,"style":25},"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",[42,158878,158879,158899,158915,158919,158927,158931,158945,158955,158968,158977,158990,158998,159004,159015,159019,159033,159037,159051,159061,159065],{"__ignoreMap":25},[45,158880,158881,158884,158886,158888,158890,158892,158894,158897],{"class":47,"line":48},[45,158882,158883],{"class":55},"amount ",[45,158885,59],{"class":51},[45,158887,109897],{"class":79},[45,158889,282],{"class":55},[45,158891,53921],{"class":79},[45,158893,282],{"class":55},[45,158895,158896],{"class":62},"\"请输入消费金额:\"",[45,158898,30597],{"class":55},[45,158900,158901,158904,158906,158908,158910,158913],{"class":47,"line":66},[45,158902,158903],{"class":55},"level ",[45,158905,59],{"class":51},[45,158907,60705],{"class":79},[45,158909,282],{"class":55},[45,158911,158912],{"class":62},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[45,158914,139],{"class":55},[45,158916,158917],{"class":47,"line":1331},[45,158918,2550],{"emptyLinePlaceholder":207},[45,158920,158921,158923,158925],{"class":47,"line":1346},[45,158922,157336],{"class":55},[45,158924,59],{"class":51},[45,158926,55799],{"class":79},[45,158928,158929],{"class":47,"line":1352},[45,158930,2550],{"emptyLinePlaceholder":207},[45,158932,158933,158935,158938,158940,158943],{"class":47,"line":1366},[45,158934,1682],{"class":51},[45,158936,158937],{"class":55}," level ",[45,158939,3099],{"class":51},[45,158941,158942],{"class":62}," \"银卡\"",[45,158944,3889],{"class":55},[45,158946,158947,158950,158952],{"class":47,"line":1372},[45,158948,158949],{"class":55},"    discount ",[45,158951,59],{"class":51},[45,158953,158954],{"class":79}," 0.9\n",[45,158956,158957,158959,158961,158963,158966],{"class":47,"line":1463},[45,158958,157906],{"class":51},[45,158960,158937],{"class":55},[45,158962,3099],{"class":51},[45,158964,158965],{"class":62}," \"金卡\"",[45,158967,3889],{"class":55},[45,158969,158970,158972,158974],{"class":47,"line":1469},[45,158971,158949],{"class":55},[45,158973,59],{"class":51},[45,158975,158976],{"class":79}," 0.8\n",[45,158978,158979,158981,158983,158985,158988],{"class":47,"line":1481},[45,158980,157906],{"class":51},[45,158982,158937],{"class":55},[45,158984,3099],{"class":51},[45,158986,158987],{"class":62}," \"普通\"",[45,158989,3889],{"class":55},[45,158991,158992,158994,158996],{"class":47,"line":1763},[45,158993,158949],{"class":55},[45,158995,59],{"class":51},[45,158997,55799],{"class":79},[45,158999,159000,159002],{"class":47,"line":1768},[45,159001,1852],{"class":51},[45,159003,3889],{"class":55},[45,159005,159006,159008,159010,159013],{"class":47,"line":1774},[45,159007,31399],{"class":79},[45,159009,282],{"class":55},[45,159011,159012],{"class":62},"\"会员等级输入错误，按普通会员计算\"",[45,159014,139],{"class":55},[45,159016,159017],{"class":47,"line":1779},[45,159018,2550],{"emptyLinePlaceholder":207},[45,159020,159021,159024,159026,159029,159031],{"class":47,"line":1793},[45,159022,159023],{"class":55},"pay ",[45,159025,59],{"class":51},[45,159027,159028],{"class":55}," amount ",[45,159030,732],{"class":51},[45,159032,157375],{"class":55},[45,159034,159035],{"class":47,"line":1798},[45,159036,2550],{"emptyLinePlaceholder":207},[45,159038,159039,159041,159044,159046,159049],{"class":47,"line":1804},[45,159040,1682],{"class":51},[45,159042,159043],{"class":55}," pay ",[45,159045,1861],{"class":51},[45,159047,159048],{"class":79}," 500",[45,159050,3889],{"class":55},[45,159052,159053,159056,159058],{"class":47,"line":1825},[45,159054,159055],{"class":55},"    pay ",[45,159057,150352],{"class":51},[45,159059,159060],{"class":79}," 50\n",[45,159062,159063],{"class":47,"line":1830},[45,159064,2550],{"emptyLinePlaceholder":207},[45,159066,159067,159069,159071,159073,159075,159077,159080,159082,159084,159086],{"class":47,"line":1844},[45,159068,30515],{"class":79},[45,159070,282],{"class":55},[45,159072,331],{"class":51},[45,159074,157456],{"class":62},[45,159076,1173],{"class":79},[45,159078,159079],{"class":55},"pay",[45,159081,157259],{"class":51},[45,159083,1223],{"class":79},[45,159085,157112],{"class":62},[45,159087,139],{"class":55},[15,159089,159091],{"id":159090},"_312-易错点","3.12 易错点",[233,159093,159094,159097,159100,159103,159108],{},[169,159095,159096],{},"冒号不能漏。",[169,159098,159099],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[169,159101,159102],{},"多分支判断要注意顺序。",[169,159104,159105,159106,28485],{},"判断相等用 ",[42,159107,3099],{},[169,159109,159110],{},"字符串比较区分大小写：",[36,159112,159114],{"className":30478,"code":159113,"language":30480,"meta":25,"style":25},"\"Y\" == \"y\"  # False\n",[42,159115,159116],{"__ignoreMap":25},[45,159117,159118,159121,159123,159125],{"class":47,"line":48},[45,159119,159120],{"class":62},"\"Y\"",[45,159122,101659],{"class":51},[45,159124,158105],{"class":62},[45,159126,159127],{"class":337},"  # False\n",[20,159129,159130],{},"可转换后再判断：",[36,159132,159134],{"className":30478,"code":159133,"language":30480,"meta":25,"style":25},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[42,159135,159136,159153,159166],{"__ignoreMap":25},[45,159137,159138,159141,159143,159145,159147,159150],{"class":47,"line":48},[45,159139,159140],{"class":55},"answer ",[45,159142,59],{"class":51},[45,159144,60705],{"class":79},[45,159146,282],{"class":55},[45,159148,159149],{"class":62},"\"是否继续(y\u002Fn):\"",[45,159151,159152],{"class":55},").lower()\n",[45,159154,159155,159157,159160,159162,159164],{"class":47,"line":66},[45,159156,1682],{"class":51},[45,159158,159159],{"class":55}," answer ",[45,159161,3099],{"class":51},[45,159163,158105],{"class":62},[45,159165,3889],{"class":55},[45,159167,159168,159170,159172,159175],{"class":47,"line":1331},[45,159169,31399],{"class":79},[45,159171,282],{"class":55},[45,159173,159174],{"class":62},"\"继续\"",[45,159176,139],{"class":55},[15,159178,159180],{"id":159179},"_313-本章练习","3.13 本章练习",[233,159182,159183,159186,159189,159192,159202],{},[169,159184,159185],{},"输入年龄，判断是否成年。",[169,159187,159188],{},"输入年份，判断是否为闰年。",[169,159190,159191],{},"输入三个数字，输出最大值。",[169,159193,159194,159195,159198,159199,159201],{},"写登录判断：用户名是 ",[42,159196,159197],{},"admin"," 且密码是 ",[42,159200,15233],{}," 才登录成功。",[169,159203,159204],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[196,159206,159207],{},"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":25,"searchDepth":66,"depth":66,"links":159209},[159210,159211,159212,159213,159214,159215,159220,159221,159222,159223,159224,159225,159226],{"id":157598,"depth":66,"text":157599},{"id":157651,"depth":66,"text":157652},{"id":157755,"depth":66,"text":157756},{"id":157845,"depth":66,"text":157846},{"id":158035,"depth":66,"text":158036},{"id":158158,"depth":66,"text":158159,"children":159216},[159217,159218,159219],{"id":158162,"depth":1331,"text":158163},{"id":158219,"depth":1331,"text":158220},{"id":158276,"depth":1331,"text":158277},{"id":158321,"depth":66,"text":158322},{"id":158412,"depth":66,"text":158413},{"id":158539,"depth":66,"text":158540},{"id":158669,"depth":66,"text":158670},{"id":158854,"depth":66,"text":158855},{"id":159090,"depth":66,"text":159091},{"id":159179,"depth":66,"text":159180},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157590,"description":204},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159233,"title":159234,"body":159235,"description":204,"extension":205,"meta":161004,"navigation":207,"path":161005,"seo":161006,"stem":161007,"__hash__":161008},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159236,"toc":160984},[159237,159240,159244,159250,159253,159270,159274,159276,159293,159295,159340,159342,159359,159363,159366,159432,159435,159453,159457,159618,159627,159631,159635,159640,159687,159689,159695,159699,159704,159751,159753,159759,159763,159768,159804,159807,159854,159858,159864,159922,159927,159958,159963,159967,160022,160025,160097,160100,160159,160163,160166,160241,160244,160248,160354,160357,160383,160387,160399,160468,160471,160563,160567,160569,160580,160582,160712,160716,160918,160926,160930,160960,160964,160981],[10,159238,159234],{"id":159239},"_4-循环语句",[15,159241,159243],{"id":159242},"_41-为什么需要循环","4.1 为什么需要循环",[20,159245,159246,159247,159249],{},"如果要输出 1 到 100，不应该写 100 行 ",[42,159248,146572],{},"，而应该用循环。",[20,159251,159252],{},"循环适合处理重复任务：",[233,159254,159255,159258,159261,159264,159267],{},[169,159256,159257],{},"重复输出。",[169,159259,159260],{},"重复输入。",[169,159262,159263],{},"遍历数据。",[169,159265,159266],{},"持续执行菜单。",[169,159268,159269],{},"批量处理文件或数据。",[15,159271,159273],{"id":159272},"_42-while循环","4.2 while循环",[20,159275,5331],{},[36,159277,159279],{"className":30478,"code":159278,"language":30480,"meta":25,"style":25},"while 条件:\n    循环体\n",[42,159280,159281,159288],{"__ignoreMap":25},[45,159282,159283,159285],{"class":47,"line":48},[45,159284,108763],{"class":51},[45,159286,159287],{"class":55}," 条件:\n",[45,159289,159290],{"class":47,"line":66},[45,159291,159292],{"class":55},"    循环体\n",[20,159294,15284],{},[36,159296,159298],{"className":30478,"code":159297,"language":30480,"meta":25,"style":25},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[42,159299,159300,159308,159312,159324,159331],{"__ignoreMap":25},[45,159301,159302,159304,159306],{"class":47,"line":48},[45,159303,100248],{"class":55},[45,159305,59],{"class":51},[45,159307,55799],{"class":79},[45,159309,159310],{"class":47,"line":66},[45,159311,2550],{"emptyLinePlaceholder":207},[45,159313,159314,159316,159318,159320,159322],{"class":47,"line":1331},[45,159315,108763],{"class":51},[45,159317,9588],{"class":55},[45,159319,1739],{"class":51},[45,159321,2298],{"class":79},[45,159323,3889],{"class":55},[45,159325,159326,159328],{"class":47,"line":1346},[45,159327,31399],{"class":79},[45,159329,159330],{"class":55},"(i)\n",[45,159332,159333,159336,159338],{"class":47,"line":1352},[45,159334,159335],{"class":55},"    i ",[45,159337,9627],{"class":51},[45,159339,55799],{"class":79},[20,159341,81029],{},[233,159343,159344,159350,159353,159356],{},[169,159345,159346,159347,28485],{},"判断条件 ",[42,159348,159349],{},"i \u003C= 5",[169,159351,159352],{},"条件成立，执行循环体。",[169,159354,159355],{},"执行完后回到条件判断。",[169,159357,159358],{},"条件不成立，退出循环。",[15,159360,159362],{"id":159361},"_43-while累加","4.3 while累加",[20,159364,159365],{},"计算 1 到 100 的和：",[36,159367,159369],{"className":30478,"code":159368,"language":30480,"meta":25,"style":25},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[42,159370,159371,159379,159387,159391,159403,159413,159421,159425],{"__ignoreMap":25},[45,159372,159373,159375,159377],{"class":47,"line":48},[45,159374,100248],{"class":55},[45,159376,59],{"class":51},[45,159378,55799],{"class":79},[45,159380,159381,159383,159385],{"class":47,"line":66},[45,159382,157360],{"class":55},[45,159384,59],{"class":51},[45,159386,47433],{"class":79},[45,159388,159389],{"class":47,"line":1331},[45,159390,2550],{"emptyLinePlaceholder":207},[45,159392,159393,159395,159397,159399,159401],{"class":47,"line":1346},[45,159394,108763],{"class":51},[45,159396,9588],{"class":55},[45,159398,1739],{"class":51},[45,159400,5904],{"class":79},[45,159402,3889],{"class":55},[45,159404,159405,159408,159410],{"class":47,"line":1352},[45,159406,159407],{"class":55},"    total ",[45,159409,9627],{"class":51},[45,159411,159412],{"class":55}," i\n",[45,159414,159415,159417,159419],{"class":47,"line":1366},[45,159416,159335],{"class":55},[45,159418,9627],{"class":51},[45,159420,55799],{"class":79},[45,159422,159423],{"class":47,"line":1372},[45,159424,2550],{"emptyLinePlaceholder":207},[45,159426,159427,159429],{"class":47,"line":1463},[45,159428,30515],{"class":79},[45,159430,159431],{"class":55},"(total)\n",[20,159433,159434],{},"核心思想：",[233,159436,159437,159442,159447],{},[169,159438,159439,159441],{},[42,159440,718],{}," 控制循环次数。",[169,159443,159444,159446],{},[42,159445,157461],{}," 保存累加结果。",[169,159448,159449,159450,159452],{},"每轮循环都要更新 ",[42,159451,718],{},"，否则可能死循环。",[15,159454,159456],{"id":159455},"_44-while猜数字","4.4 while猜数字",[36,159458,159460],{"className":30478,"code":159459,"language":30480,"meta":25,"style":25},"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",[42,159461,159462,159468,159472,159489,159497,159501,159509,159529,159538,159542,159554,159565,159575,159586,159592,159614],{"__ignoreMap":25},[45,159463,159464,159466],{"class":47,"line":48},[45,159465,30492],{"class":51},[45,159467,45428],{"class":55},[45,159469,159470],{"class":47,"line":66},[45,159471,2550],{"emptyLinePlaceholder":207},[45,159473,159474,159476,159478,159481,159483,159485,159487],{"class":47,"line":1331},[45,159475,159140],{"class":55},[45,159477,59],{"class":51},[45,159479,159480],{"class":55}," random.randint(",[45,159482,495],{"class":79},[45,159484,12584],{"class":55},[45,159486,588],{"class":79},[45,159488,139],{"class":55},[45,159490,159491,159493,159495],{"class":47,"line":1346},[45,159492,146791],{"class":55},[45,159494,59],{"class":51},[45,159496,47433],{"class":79},[45,159498,159499],{"class":47,"line":1352},[45,159500,2550],{"emptyLinePlaceholder":207},[45,159502,159503,159505,159507],{"class":47,"line":1366},[45,159504,108763],{"class":51},[45,159506,95392],{"class":79},[45,159508,3889],{"class":55},[45,159510,159511,159514,159516,159518,159520,159522,159524,159527],{"class":47,"line":1372},[45,159512,159513],{"class":55},"    guess ",[45,159515,59],{"class":51},[45,159517,2532],{"class":79},[45,159519,282],{"class":55},[45,159521,53921],{"class":79},[45,159523,282],{"class":55},[45,159525,159526],{"class":62},"\"请输入1到100之间的数字:\"",[45,159528,30597],{"class":55},[45,159530,159531,159534,159536],{"class":47,"line":1463},[45,159532,159533],{"class":55},"    count ",[45,159535,9627],{"class":51},[45,159537,55799],{"class":79},[45,159539,159540],{"class":47,"line":1469},[45,159541,2550],{"emptyLinePlaceholder":207},[45,159543,159544,159546,159549,159551],{"class":47,"line":1481},[45,159545,3251],{"class":51},[45,159547,159548],{"class":55}," guess ",[45,159550,1237],{"class":51},[45,159552,159553],{"class":55}," answer:\n",[45,159555,159556,159558,159560,159563],{"class":47,"line":1763},[45,159557,32551],{"class":79},[45,159559,282],{"class":55},[45,159561,159562],{"class":62},"\"猜大了\"",[45,159564,139],{"class":55},[45,159566,159567,159569,159571,159573],{"class":47,"line":1768},[45,159568,39393],{"class":51},[45,159570,159548],{"class":55},[45,159572,1187],{"class":51},[45,159574,159553],{"class":55},[45,159576,159577,159579,159581,159584],{"class":47,"line":1774},[45,159578,32551],{"class":79},[45,159580,282],{"class":55},[45,159582,159583],{"class":62},"\"猜小了\"",[45,159585,139],{"class":55},[45,159587,159588,159590],{"class":47,"line":1779},[45,159589,158122],{"class":51},[45,159591,3889],{"class":55},[45,159593,159594,159596,159598,159600,159603,159605,159607,159609,159612],{"class":47,"line":1793},[45,159595,32551],{"class":79},[45,159597,282],{"class":55},[45,159599,331],{"class":51},[45,159601,159602],{"class":62},"\"猜对了，一共猜了",[45,159604,1173],{"class":79},[45,159606,84534],{"class":55},[45,159608,1223],{"class":79},[45,159610,159611],{"class":62},"次\"",[45,159613,139],{"class":55},[45,159615,159616],{"class":47,"line":1798},[45,159617,31727],{"class":51},[20,159619,159620,159623,159624,159626],{},[42,159621,159622],{},"while True"," 表示无限循环，通常配合 ",[42,159625,2203],{}," 使用。",[15,159628,159630],{"id":159629},"_45-break和continue","4.5 break和continue",[249,159632,159634],{"id":159633},"_451-break","4.5.1 break",[20,159636,159637,159639],{},[42,159638,2203],{}," 直接结束整个循环。",[36,159641,159643],{"className":30478,"code":159642,"language":30480,"meta":25,"style":25},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[42,159644,159645,159665,159677,159681],{"__ignoreMap":25},[45,159646,159647,159649,159651,159653,159655,159657,159659,159661,159663],{"class":47,"line":48},[45,159648,3175],{"class":51},[45,159650,9588],{"class":55},[45,159652,26143],{"class":51},[45,159654,32543],{"class":79},[45,159656,282],{"class":55},[45,159658,495],{"class":79},[45,159660,12584],{"class":55},[45,159662,621],{"class":79},[45,159664,30886],{"class":55},[45,159666,159667,159669,159671,159673,159675],{"class":47,"line":66},[45,159668,3251],{"class":51},[45,159670,9588],{"class":55},[45,159672,3099],{"class":51},[45,159674,78170],{"class":79},[45,159676,3889],{"class":55},[45,159678,159679],{"class":47,"line":1331},[45,159680,31727],{"class":51},[45,159682,159683,159685],{"class":47,"line":1346},[45,159684,31399],{"class":79},[45,159686,159330],{"class":55},[20,159688,146557],{},[36,159690,159693],{"className":159691,"code":159692,"language":5337,"meta":25},[5335],"1\n2\n",[42,159694,159692],{"__ignoreMap":25},[249,159696,159698],{"id":159697},"_452-continue","4.5.2 continue",[20,159700,159701,159703],{},[42,159702,154772],{}," 跳过本轮剩余代码，进入下一轮循环。",[36,159705,159707],{"className":30478,"code":159706,"language":30480,"meta":25,"style":25},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[42,159708,159709,159729,159741,159745],{"__ignoreMap":25},[45,159710,159711,159713,159715,159717,159719,159721,159723,159725,159727],{"class":47,"line":48},[45,159712,3175],{"class":51},[45,159714,9588],{"class":55},[45,159716,26143],{"class":51},[45,159718,32543],{"class":79},[45,159720,282],{"class":55},[45,159722,495],{"class":79},[45,159724,12584],{"class":55},[45,159726,621],{"class":79},[45,159728,30886],{"class":55},[45,159730,159731,159733,159735,159737,159739],{"class":47,"line":66},[45,159732,3251],{"class":51},[45,159734,9588],{"class":55},[45,159736,3099],{"class":51},[45,159738,78170],{"class":79},[45,159740,3889],{"class":55},[45,159742,159743],{"class":47,"line":1331},[45,159744,148612],{"class":51},[45,159746,159747,159749],{"class":47,"line":1346},[45,159748,31399],{"class":79},[45,159750,159330],{"class":55},[20,159752,146557],{},[36,159754,159757],{"className":159755,"code":159756,"language":5337,"meta":25},[5335],"1\n2\n4\n5\n",[42,159758,159756],{"__ignoreMap":25},[15,159760,159762],{"id":159761},"_46-for循环","4.6 for循环",[20,159764,159765,159767],{},[42,159766,3175],{}," 常用于遍历序列。",[36,159769,159771],{"className":30478,"code":159770,"language":30480,"meta":25,"style":25},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[42,159772,159773,159782,159786,159797],{"__ignoreMap":25},[45,159774,159775,159777,159779],{"class":47,"line":48},[45,159776,146636],{"class":55},[45,159778,59],{"class":51},[45,159780,159781],{"class":62}," \"python\"\n",[45,159783,159784],{"class":47,"line":66},[45,159785,2550],{"emptyLinePlaceholder":207},[45,159787,159788,159790,159793,159795],{"class":47,"line":1331},[45,159789,3175],{"class":51},[45,159791,159792],{"class":55}," ch ",[45,159794,26143],{"class":51},[45,159796,158499],{"class":55},[45,159798,159799,159801],{"class":47,"line":1346},[45,159800,31399],{"class":79},[45,159802,159803],{"class":55},"(ch)\n",[20,159805,159806],{},"遍历列表：",[36,159808,159810],{"className":30478,"code":159809,"language":30480,"meta":25,"style":25},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[42,159811,159812,159834,159838,159848],{"__ignoreMap":25},[45,159813,159814,159817,159819,159821,159823,159825,159827,159829,159832],{"class":47,"line":48},[45,159815,159816],{"class":55},"students ",[45,159818,59],{"class":51},[45,159820,52326],{"class":55},[45,159822,149988],{"class":62},[45,159824,12584],{"class":55},[45,159826,151036],{"class":62},[45,159828,12584],{"class":55},[45,159830,159831],{"class":62},"\"小刚\"",[45,159833,33346],{"class":55},[45,159835,159836],{"class":47,"line":66},[45,159837,2550],{"emptyLinePlaceholder":207},[45,159839,159840,159842,159844,159846],{"class":47,"line":1331},[45,159841,3175],{"class":51},[45,159843,152237],{"class":55},[45,159845,26143],{"class":51},[45,159847,152242],{"class":55},[45,159849,159850,159852],{"class":47,"line":1346},[45,159851,31399],{"class":79},[45,159853,150142],{"class":55},[15,159855,159857],{"id":159856},"_47-range函数","4.7 range函数",[20,159859,159860,159863],{},[42,159861,159862],{},"range()"," 用于生成整数序列。",[36,159865,159867],{"className":30478,"code":159866,"language":30480,"meta":25,"style":25},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[42,159868,159869,159883,159901],{"__ignoreMap":25},[45,159870,159871,159873,159875,159877,159880],{"class":47,"line":48},[45,159872,33516],{"class":79},[45,159874,282],{"class":55},[45,159876,596],{"class":79},[45,159878,159879],{"class":55},")          ",[45,159881,159882],{"class":337},"# 0,1,2,3,4\n",[45,159884,159885,159887,159889,159891,159893,159895,159898],{"class":47,"line":66},[45,159886,33516],{"class":79},[45,159888,282],{"class":55},[45,159890,495],{"class":79},[45,159892,12584],{"class":55},[45,159894,596],{"class":79},[45,159896,159897],{"class":55},")       ",[45,159899,159900],{"class":337},"# 1,2,3,4\n",[45,159902,159903,159905,159907,159909,159911,159913,159915,159917,159919],{"class":47,"line":1331},[45,159904,33516],{"class":79},[45,159906,282],{"class":55},[45,159908,495],{"class":79},[45,159910,12584],{"class":55},[45,159912,723],{"class":79},[45,159914,12584],{"class":55},[45,159916,356],{"class":79},[45,159918,155761],{"class":55},[45,159920,159921],{"class":337},"# 1,3,5,7,9\n",[20,159923,159924,159925,24766],{},"配合 ",[42,159926,3175],{},[36,159928,159930],{"className":30478,"code":159929,"language":30480,"meta":25,"style":25},"for i in range(1, 6):\n    print(i)\n",[42,159931,159932,159952],{"__ignoreMap":25},[45,159933,159934,159936,159938,159940,159942,159944,159946,159948,159950],{"class":47,"line":48},[45,159935,3175],{"class":51},[45,159937,9588],{"class":55},[45,159939,26143],{"class":51},[45,159941,32543],{"class":79},[45,159943,282],{"class":55},[45,159945,495],{"class":79},[45,159947,12584],{"class":55},[45,159949,621],{"class":79},[45,159951,30886],{"class":55},[45,159953,159954,159956],{"class":47,"line":66},[45,159955,31399],{"class":79},[45,159957,159330],{"class":55},[20,159959,9175,159960,159962],{},[42,159961,33516],{}," 的结束值不包含在内。",[15,159964,159966],{"id":159965},"_48-for循环求和","4.8 for循环求和",[36,159968,159970],{"className":30478,"code":159969,"language":30480,"meta":25,"style":25},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[42,159971,159972,159980,159984,160004,160012,160016],{"__ignoreMap":25},[45,159973,159974,159976,159978],{"class":47,"line":48},[45,159975,157360],{"class":55},[45,159977,59],{"class":51},[45,159979,47433],{"class":79},[45,159981,159982],{"class":47,"line":66},[45,159983,2550],{"emptyLinePlaceholder":207},[45,159985,159986,159988,159990,159992,159994,159996,159998,160000,160002],{"class":47,"line":1331},[45,159987,3175],{"class":51},[45,159989,9588],{"class":55},[45,159991,26143],{"class":51},[45,159993,32543],{"class":79},[45,159995,282],{"class":55},[45,159997,495],{"class":79},[45,159999,12584],{"class":55},[45,160001,614],{"class":79},[45,160003,30886],{"class":55},[45,160005,160006,160008,160010],{"class":47,"line":1346},[45,160007,159407],{"class":55},[45,160009,9627],{"class":51},[45,160011,159412],{"class":55},[45,160013,160014],{"class":47,"line":1352},[45,160015,2550],{"emptyLinePlaceholder":207},[45,160017,160018,160020],{"class":47,"line":1366},[45,160019,30515],{"class":79},[45,160021,159431],{"class":55},[20,160023,160024],{},"求偶数和：",[36,160026,160028],{"className":30478,"code":160027,"language":30480,"meta":25,"style":25},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[42,160029,160030,160038,160042,160062,160078,160087,160091],{"__ignoreMap":25},[45,160031,160032,160034,160036],{"class":47,"line":48},[45,160033,157360],{"class":55},[45,160035,59],{"class":51},[45,160037,47433],{"class":79},[45,160039,160040],{"class":47,"line":66},[45,160041,2550],{"emptyLinePlaceholder":207},[45,160043,160044,160046,160048,160050,160052,160054,160056,160058,160060],{"class":47,"line":1331},[45,160045,3175],{"class":51},[45,160047,9588],{"class":55},[45,160049,26143],{"class":51},[45,160051,32543],{"class":79},[45,160053,282],{"class":55},[45,160055,495],{"class":79},[45,160057,12584],{"class":55},[45,160059,614],{"class":79},[45,160061,30886],{"class":55},[45,160063,160064,160066,160068,160070,160072,160074,160076],{"class":47,"line":1346},[45,160065,3251],{"class":51},[45,160067,9588],{"class":55},[45,160069,605],{"class":51},[45,160071,14904],{"class":79},[45,160073,101659],{"class":51},[45,160075,4243],{"class":79},[45,160077,3889],{"class":55},[45,160079,160080,160083,160085],{"class":47,"line":1352},[45,160081,160082],{"class":55},"        total ",[45,160084,9627],{"class":51},[45,160086,159412],{"class":55},[45,160088,160089],{"class":47,"line":1366},[45,160090,2550],{"emptyLinePlaceholder":207},[45,160092,160093,160095],{"class":47,"line":1372},[45,160094,30515],{"class":79},[45,160096,159431],{"class":55},[20,160098,160099],{},"也可以：",[36,160101,160103],{"className":30478,"code":160102,"language":30480,"meta":25,"style":25},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[42,160104,160105,160113,160117,160141,160149,160153],{"__ignoreMap":25},[45,160106,160107,160109,160111],{"class":47,"line":48},[45,160108,157360],{"class":55},[45,160110,59],{"class":51},[45,160112,47433],{"class":79},[45,160114,160115],{"class":47,"line":66},[45,160116,2550],{"emptyLinePlaceholder":207},[45,160118,160119,160121,160123,160125,160127,160129,160131,160133,160135,160137,160139],{"class":47,"line":1331},[45,160120,3175],{"class":51},[45,160122,9588],{"class":55},[45,160124,26143],{"class":51},[45,160126,32543],{"class":79},[45,160128,282],{"class":55},[45,160130,356],{"class":79},[45,160132,12584],{"class":55},[45,160134,614],{"class":79},[45,160136,12584],{"class":55},[45,160138,356],{"class":79},[45,160140,30886],{"class":55},[45,160142,160143,160145,160147],{"class":47,"line":1346},[45,160144,159407],{"class":55},[45,160146,9627],{"class":51},[45,160148,159412],{"class":55},[45,160150,160151],{"class":47,"line":1352},[45,160152,2550],{"emptyLinePlaceholder":207},[45,160154,160155,160157],{"class":47,"line":1366},[45,160156,30515],{"class":79},[45,160158,159431],{"class":55},[15,160160,160162],{"id":160161},"_49-循环嵌套","4.9 循环嵌套",[20,160164,160165],{},"嵌套循环就是循环里面再写循环。",[36,160167,160169],{"className":30478,"code":160168,"language":30480,"meta":25,"style":25},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[42,160170,160171,160191,160211],{"__ignoreMap":25},[45,160172,160173,160175,160177,160179,160181,160183,160185,160187,160189],{"class":47,"line":48},[45,160174,3175],{"class":51},[45,160176,9588],{"class":55},[45,160178,26143],{"class":51},[45,160180,32543],{"class":79},[45,160182,282],{"class":55},[45,160184,495],{"class":79},[45,160186,12584],{"class":55},[45,160188,570],{"class":79},[45,160190,30886],{"class":55},[45,160192,160193,160195,160197,160199,160201,160203,160205,160207,160209],{"class":47,"line":66},[45,160194,3351],{"class":51},[45,160196,9650],{"class":55},[45,160198,26143],{"class":51},[45,160200,32543],{"class":79},[45,160202,282],{"class":55},[45,160204,495],{"class":79},[45,160206,12584],{"class":55},[45,160208,570],{"class":79},[45,160210,30886],{"class":55},[45,160212,160213,160215,160217,160219,160222,160224,160226,160228,160231,160233,160235,160237,160239],{"class":47,"line":1331},[45,160214,32551],{"class":79},[45,160216,282],{"class":55},[45,160218,331],{"class":51},[45,160220,160221],{"class":62},"\"i=",[45,160223,1173],{"class":79},[45,160225,718],{"class":55},[45,160227,1223],{"class":79},[45,160229,160230],{"class":62},", j=",[45,160232,1173],{"class":79},[45,160234,744],{"class":55},[45,160236,1223],{"class":79},[45,160238,89],{"class":62},[45,160240,139],{"class":55},[20,160242,160243],{},"外层循环执行一次，内层循环执行完整一轮。",[15,160245,160247],{"id":160246},"_410-九九乘法表","4.10 九九乘法表",[36,160249,160251],{"className":30478,"code":160250,"language":30480,"meta":25,"style":25},"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",[42,160252,160253,160273,160296,160348],{"__ignoreMap":25},[45,160254,160255,160257,160259,160261,160263,160265,160267,160269,160271],{"class":47,"line":48},[45,160256,3175],{"class":51},[45,160258,9588],{"class":55},[45,160260,26143],{"class":51},[45,160262,32543],{"class":79},[45,160264,282],{"class":55},[45,160266,495],{"class":79},[45,160268,12584],{"class":55},[45,160270,723],{"class":79},[45,160272,30886],{"class":55},[45,160274,160275,160277,160279,160281,160283,160285,160287,160290,160292,160294],{"class":47,"line":66},[45,160276,3351],{"class":51},[45,160278,9650],{"class":55},[45,160280,26143],{"class":51},[45,160282,32543],{"class":79},[45,160284,282],{"class":55},[45,160286,495],{"class":79},[45,160288,160289],{"class":55},", i ",[45,160291,758],{"class":51},[45,160293,136],{"class":79},[45,160295,30886],{"class":55},[45,160297,160298,160300,160302,160304,160306,160308,160310,160312,160314,160316,160318,160320,160322,160324,160326,160328,160330,160332,160334,160336,160338,160340,160342,160344,160346],{"class":47,"line":1331},[45,160299,32551],{"class":79},[45,160301,282],{"class":55},[45,160303,331],{"class":51},[45,160305,89],{"class":62},[45,160307,1173],{"class":79},[45,160309,744],{"class":55},[45,160311,1223],{"class":79},[45,160313,732],{"class":62},[45,160315,1173],{"class":79},[45,160317,718],{"class":55},[45,160319,1223],{"class":79},[45,160321,59],{"class":62},[45,160323,1173],{"class":79},[45,160325,100248],{"class":55},[45,160327,732],{"class":51},[45,160329,3560],{"class":55},[45,160331,1223],{"class":79},[45,160333,89],{"class":62},[45,160335,12584],{"class":55},[45,160337,45901],{"class":5366},[45,160339,59],{"class":51},[45,160341,89],{"class":62},[45,160343,1382],{"class":79},[45,160345,89],{"class":62},[45,160347,139],{"class":55},[45,160349,160350,160352],{"class":47,"line":1346},[45,160351,31399],{"class":79},[45,160353,2126],{"class":55},[20,160355,160356],{},"关键点：",[233,160358,160359,160365,160371,160377],{},[169,160360,160361,160362,160364],{},"外层 ",[42,160363,718],{}," 控制行。",[169,160366,160367,160368,160370],{},"内层 ",[42,160369,744],{}," 控制列。",[169,160372,160373,160374,160376],{},"每行结束后用 ",[42,160375,146572],{}," 换行。",[169,160378,160379,160382],{},[42,160380,160381],{},"end=\"\\t\""," 让同一行的内容横向排列。",[15,160384,160386],{"id":160385},"_411-循环else","4.11 循环else",[20,160388,160389,160390,160392,160393,160395,160396,160398],{},"Python 的循环可以带 ",[42,160391,1852],{},"。当循环正常结束时执行 ",[42,160394,1852],{},"，如果被 ",[42,160397,2203],{}," 打断，则不执行。",[36,160400,160402],{"className":30478,"code":160401,"language":30480,"meta":25,"style":25},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[42,160403,160404,160424,160436,160447,160451,160457],{"__ignoreMap":25},[45,160405,160406,160408,160410,160412,160414,160416,160418,160420,160422],{"class":47,"line":48},[45,160407,3175],{"class":51},[45,160409,9588],{"class":55},[45,160411,26143],{"class":51},[45,160413,32543],{"class":79},[45,160415,282],{"class":55},[45,160417,495],{"class":79},[45,160419,12584],{"class":55},[45,160421,621],{"class":79},[45,160423,30886],{"class":55},[45,160425,160426,160428,160430,160432,160434],{"class":47,"line":66},[45,160427,3251],{"class":51},[45,160429,9588],{"class":55},[45,160431,3099],{"class":51},[45,160433,2188],{"class":79},[45,160435,3889],{"class":55},[45,160437,160438,160440,160442,160445],{"class":47,"line":1331},[45,160439,32551],{"class":79},[45,160441,282],{"class":55},[45,160443,160444],{"class":62},"\"找到了\"",[45,160446,139],{"class":55},[45,160448,160449],{"class":47,"line":1346},[45,160450,31727],{"class":51},[45,160452,160453,160455],{"class":47,"line":1352},[45,160454,1852],{"class":51},[45,160456,3889],{"class":55},[45,160458,160459,160461,160463,160466],{"class":47,"line":1366},[45,160460,31399],{"class":79},[45,160462,282],{"class":55},[45,160464,160465],{"class":62},"\"没找到\"",[45,160467,139],{"class":55},[20,160469,160470],{},"常用于搜索。",[36,160472,160474],{"className":30478,"code":160473,"language":30480,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[42,160475,160476,160497,160506,160510,160522,160533,160543,160547,160553],{"__ignoreMap":25},[45,160477,160478,160481,160483,160485,160487,160489,160491,160493,160495],{"class":47,"line":48},[45,160479,160480],{"class":55},"names ",[45,160482,59],{"class":51},[45,160484,52326],{"class":55},[45,160486,149988],{"class":62},[45,160488,12584],{"class":55},[45,160490,151036],{"class":62},[45,160492,12584],{"class":55},[45,160494,159831],{"class":62},[45,160496,33346],{"class":55},[45,160498,160499,160501,160503],{"class":47,"line":66},[45,160500,111678],{"class":55},[45,160502,59],{"class":51},[45,160504,160505],{"class":62}," \"小李\"\n",[45,160507,160508],{"class":47,"line":1331},[45,160509,2550],{"emptyLinePlaceholder":207},[45,160511,160512,160514,160517,160519],{"class":47,"line":1346},[45,160513,3175],{"class":51},[45,160515,160516],{"class":55}," name ",[45,160518,26143],{"class":51},[45,160520,160521],{"class":55}," names:\n",[45,160523,160524,160526,160528,160530],{"class":47,"line":1352},[45,160525,3251],{"class":51},[45,160527,160516],{"class":55},[45,160529,3099],{"class":51},[45,160531,160532],{"class":55}," target:\n",[45,160534,160535,160537,160539,160541],{"class":47,"line":1366},[45,160536,32551],{"class":79},[45,160538,282],{"class":55},[45,160540,160444],{"class":62},[45,160542,139],{"class":55},[45,160544,160545],{"class":47,"line":1372},[45,160546,31727],{"class":51},[45,160548,160549,160551],{"class":47,"line":1463},[45,160550,1852],{"class":51},[45,160552,3889],{"class":55},[45,160554,160555,160557,160559,160561],{"class":47,"line":1469},[45,160556,31399],{"class":79},[45,160558,282],{"class":55},[45,160560,160465],{"class":62},[45,160562,139],{"class":55},[15,160564,160566],{"id":160565},"_412-小案例登录重试","4.12 小案例：登录重试",[20,160568,123392],{},[233,160570,160571,160574,160577],{},[169,160572,160573],{},"用户最多输入 3 次密码。",[169,160575,160576],{},"密码正确则登录成功。",[169,160578,160579],{},"3 次都错误则锁定账号。",[20,160581,10184],{},[36,160583,160585],{"className":30478,"code":160584,"language":30480,"meta":25,"style":25},"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",[42,160586,160587,160597,160601,160617,160633,160637,160649,160660,160664,160670,160695,160701],{"__ignoreMap":25},[45,160588,160589,160592,160594],{"class":47,"line":48},[45,160590,160591],{"class":55},"password ",[45,160593,59],{"class":51},[45,160595,160596],{"class":62}," \"123456\"\n",[45,160598,160599],{"class":47,"line":66},[45,160600,2550],{"emptyLinePlaceholder":207},[45,160602,160603,160605,160607,160609,160611,160613,160615],{"class":47,"line":1331},[45,160604,3175],{"class":51},[45,160606,9588],{"class":55},[45,160608,26143],{"class":51},[45,160610,32543],{"class":79},[45,160612,282],{"class":55},[45,160614,350],{"class":79},[45,160616,30886],{"class":55},[45,160618,160619,160622,160624,160626,160628,160631],{"class":47,"line":1346},[45,160620,160621],{"class":55},"    user_password ",[45,160623,59],{"class":51},[45,160625,60705],{"class":79},[45,160627,282],{"class":55},[45,160629,160630],{"class":62},"\"请输入密码:\"",[45,160632,139],{"class":55},[45,160634,160635],{"class":47,"line":1352},[45,160636,2550],{"emptyLinePlaceholder":207},[45,160638,160639,160641,160644,160646],{"class":47,"line":1366},[45,160640,3251],{"class":51},[45,160642,160643],{"class":55}," user_password ",[45,160645,3099],{"class":51},[45,160647,160648],{"class":55}," password:\n",[45,160650,160651,160653,160655,160658],{"class":47,"line":1372},[45,160652,32551],{"class":79},[45,160654,282],{"class":55},[45,160656,160657],{"class":62},"\"登录成功\"",[45,160659,139],{"class":55},[45,160661,160662],{"class":47,"line":1463},[45,160663,31727],{"class":51},[45,160665,160666,160668],{"class":47,"line":1469},[45,160667,158122],{"class":51},[45,160669,3889],{"class":55},[45,160671,160672,160674,160676,160678,160681,160684,160686,160688,160690,160693],{"class":47,"line":1481},[45,160673,32551],{"class":79},[45,160675,282],{"class":55},[45,160677,331],{"class":51},[45,160679,160680],{"class":62},"\"密码错误，还剩",[45,160682,160683],{"class":79},"{2",[45,160685,52371],{"class":51},[45,160687,3182],{"class":55},[45,160689,1223],{"class":79},[45,160691,160692],{"class":62},"次机会\"",[45,160694,139],{"class":55},[45,160696,160697,160699],{"class":47,"line":1763},[45,160698,1852],{"class":51},[45,160700,3889],{"class":55},[45,160702,160703,160705,160707,160710],{"class":47,"line":1768},[45,160704,31399],{"class":79},[45,160706,282],{"class":55},[45,160708,160709],{"class":62},"\"账号已锁定\"",[45,160711,139],{"class":55},[15,160713,160715],{"id":160714},"_413-小案例菜单程序","4.13 小案例：菜单程序",[36,160717,160719],{"className":30478,"code":160718,"language":30480,"meta":25,"style":25},"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",[42,160720,160721,160729,160740,160751,160762,160773,160784,160788,160803,160807,160819,160830,160842,160853,160865,160876,160888,160898,160902,160908],{"__ignoreMap":25},[45,160722,160723,160725,160727],{"class":47,"line":48},[45,160724,108763],{"class":51},[45,160726,95392],{"class":79},[45,160728,3889],{"class":55},[45,160730,160731,160733,160735,160738],{"class":47,"line":66},[45,160732,31399],{"class":79},[45,160734,282],{"class":55},[45,160736,160737],{"class":62},"\"====== 菜单 ======\"",[45,160739,139],{"class":55},[45,160741,160742,160744,160746,160749],{"class":47,"line":1331},[45,160743,31399],{"class":79},[45,160745,282],{"class":55},[45,160747,160748],{"class":62},"\"1. 查询余额\"",[45,160750,139],{"class":55},[45,160752,160753,160755,160757,160760],{"class":47,"line":1346},[45,160754,31399],{"class":79},[45,160756,282],{"class":55},[45,160758,160759],{"class":62},"\"2. 存款\"",[45,160761,139],{"class":55},[45,160763,160764,160766,160768,160771],{"class":47,"line":1352},[45,160765,31399],{"class":79},[45,160767,282],{"class":55},[45,160769,160770],{"class":62},"\"3. 取款\"",[45,160772,139],{"class":55},[45,160774,160775,160777,160779,160782],{"class":47,"line":1366},[45,160776,31399],{"class":79},[45,160778,282],{"class":55},[45,160780,160781],{"class":62},"\"0. 退出\"",[45,160783,139],{"class":55},[45,160785,160786],{"class":47,"line":1372},[45,160787,2550],{"emptyLinePlaceholder":207},[45,160789,160790,160793,160795,160797,160799,160801],{"class":47,"line":1463},[45,160791,160792],{"class":55},"    choice ",[45,160794,59],{"class":51},[45,160796,60705],{"class":79},[45,160798,282],{"class":55},[45,160800,153173],{"class":62},[45,160802,139],{"class":55},[45,160804,160805],{"class":47,"line":1469},[45,160806,2550],{"emptyLinePlaceholder":207},[45,160808,160809,160811,160813,160815,160817],{"class":47,"line":1481},[45,160810,3251],{"class":51},[45,160812,153186],{"class":55},[45,160814,3099],{"class":51},[45,160816,153191],{"class":62},[45,160818,3889],{"class":55},[45,160820,160821,160823,160825,160828],{"class":47,"line":1763},[45,160822,32551],{"class":79},[45,160824,282],{"class":55},[45,160826,160827],{"class":62},"\"余额为1000元\"",[45,160829,139],{"class":55},[45,160831,160832,160834,160836,160838,160840],{"class":47,"line":1768},[45,160833,39393],{"class":51},[45,160835,153186],{"class":55},[45,160837,3099],{"class":51},[45,160839,153210],{"class":62},[45,160841,3889],{"class":55},[45,160843,160844,160846,160848,160851],{"class":47,"line":1774},[45,160845,32551],{"class":79},[45,160847,282],{"class":55},[45,160849,160850],{"class":62},"\"存款功能\"",[45,160852,139],{"class":55},[45,160854,160855,160857,160859,160861,160863],{"class":47,"line":1779},[45,160856,39393],{"class":51},[45,160858,153186],{"class":55},[45,160860,3099],{"class":51},[45,160862,153228],{"class":62},[45,160864,3889],{"class":55},[45,160866,160867,160869,160871,160874],{"class":47,"line":1793},[45,160868,32551],{"class":79},[45,160870,282],{"class":55},[45,160872,160873],{"class":62},"\"取款功能\"",[45,160875,139],{"class":55},[45,160877,160878,160880,160882,160884,160886],{"class":47,"line":1798},[45,160879,39393],{"class":51},[45,160881,153186],{"class":55},[45,160883,3099],{"class":51},[45,160885,153282],{"class":62},[45,160887,3889],{"class":55},[45,160889,160890,160892,160894,160896],{"class":47,"line":1804},[45,160891,32551],{"class":79},[45,160893,282],{"class":55},[45,160895,153293],{"class":62},[45,160897,139],{"class":55},[45,160899,160900],{"class":47,"line":1825},[45,160901,31727],{"class":51},[45,160903,160904,160906],{"class":47,"line":1830},[45,160905,158122],{"class":51},[45,160907,3889],{"class":55},[45,160909,160910,160912,160914,160916],{"class":47,"line":1844},[45,160911,32551],{"class":79},[45,160913,282],{"class":55},[45,160915,153314],{"class":62},[45,160917,139],{"class":55},[20,160919,160920,160921,160923,160924,28485],{},"菜单类程序通常使用 ",[42,160922,159622],{},"，用户选择退出时 ",[42,160925,2203],{},[15,160927,160929],{"id":160928},"_414-易错点","4.14 易错点",[233,160931,160932,160937,160943,160951,160957],{},[169,160933,160934,160936],{},[42,160935,108763],{}," 循环必须更新控制变量。",[169,160938,160939,160942],{},[42,160940,160941],{},"range(1, 10)"," 不包含 10。",[169,160944,160945,160947,160948,160950],{},[42,160946,2203],{}," 结束整个循环，",[42,160949,154772],{}," 只跳过本轮。",[169,160952,160953,160954,160956],{},"嵌套循环中，",[42,160955,2203],{}," 只跳出当前所在的一层循环。",[169,160958,160959],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[15,160961,160963],{"id":160962},"_415-本章练习","4.15 本章练习",[233,160965,160966,160969,160972,160975,160978],{},[169,160967,160968],{},"输出 1 到 100。",[169,160970,160971],{},"计算 1 到 100 的偶数和。",[169,160973,160974],{},"输出 100 以内能被 3 和 5 同时整除的数。",[169,160976,160977],{},"编写猜数字游戏，限制最多猜 7 次。",[169,160979,160980],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[196,160982,160983],{},"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":25,"searchDepth":66,"depth":66,"links":160985},[160986,160987,160988,160989,160990,160994,160995,160996,160997,160998,160999,161000,161001,161002,161003],{"id":159242,"depth":66,"text":159243},{"id":159272,"depth":66,"text":159273},{"id":159361,"depth":66,"text":159362},{"id":159455,"depth":66,"text":159456},{"id":159629,"depth":66,"text":159630,"children":160991},[160992,160993],{"id":159633,"depth":1331,"text":159634},{"id":159697,"depth":1331,"text":159698},{"id":159761,"depth":66,"text":159762},{"id":159856,"depth":66,"text":159857},{"id":159965,"depth":66,"text":159966},{"id":160161,"depth":66,"text":160162},{"id":160246,"depth":66,"text":160247},{"id":160385,"depth":66,"text":160386},{"id":160565,"depth":66,"text":160566},{"id":160714,"depth":66,"text":160715},{"id":160928,"depth":66,"text":160929},{"id":160962,"depth":66,"text":160963},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159234,"description":204},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161010,"title":161011,"body":161012,"description":204,"extension":205,"meta":163017,"navigation":207,"path":163018,"seo":163019,"stem":163020,"__hash__":163021},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161013,"toc":162997},[161014,161017,161021,161024,161027,161041,161044,161058,161062,161064,161083,161085,161132,161134,161148,161152,161226,161229,161233,161236,161295,161303,161306,161359,161362,161366,161371,161426,161434,161484,161488,161493,161501,161600,161606,161610,161615,161618,161629,161670,161683,161687,161690,161726,161729,161742,161745,161805,161809,161813,161816,161867,161871,161874,161921,161927,161993,161996,162000,162003,162119,162122,162126,162129,162235,162239,162242,162280,162283,162325,162328,162388,162391,162395,162859,162862,162866,162893,162899,162960,162964,162994],[10,161015,161011],{"id":161016},"_5-函数基础",[15,161018,161020],{"id":161019},"_51-为什么需要函数","5.1 为什么需要函数",[20,161022,161023],{},"函数用于封装一段可以重复使用的代码。",[20,161025,161026],{},"不使用函数的问题：",[233,161028,161029,161032,161035,161038],{},[169,161030,161031],{},"重复代码多。",[169,161033,161034],{},"修改逻辑时容易漏改。",[169,161036,161037],{},"主流程不清晰。",[169,161039,161040],{},"程序越写越长，难以维护。",[20,161042,161043],{},"使用函数后的好处：",[233,161045,161046,161049,161052,161055],{},[169,161047,161048],{},"提高复用性。",[169,161050,161051],{},"提高可读性。",[169,161053,161054],{},"便于调试。",[169,161056,161057],{},"便于分工。",[15,161059,161061],{"id":161060},"_52-函数定义","5.2 函数定义",[20,161063,5331],{},[36,161065,161067],{"className":30478,"code":161066,"language":30480,"meta":25,"style":25},"def 函数名():\n    函数体\n",[42,161068,161069,161078],{"__ignoreMap":25},[45,161070,161071,161073,161076],{"class":47,"line":48},[45,161072,32047],{"class":51},[45,161074,161075],{"class":69}," 函数名",[45,161077,32053],{"class":55},[45,161079,161080],{"class":47,"line":66},[45,161081,161082],{"class":55},"    函数体\n",[20,161084,15284],{},[36,161086,161088],{"className":30478,"code":161087,"language":30480,"meta":25,"style":25},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[42,161089,161090,161099,161109,161119,161123,161127],{"__ignoreMap":25},[45,161091,161092,161094,161097],{"class":47,"line":48},[45,161093,32047],{"class":51},[45,161095,161096],{"class":69}," say_hello",[45,161098,32053],{"class":55},[45,161100,161101,161103,161105,161107],{"class":47,"line":66},[45,161102,31399],{"class":79},[45,161104,282],{"class":55},[45,161106,5994],{"class":62},[45,161108,139],{"class":55},[45,161110,161111,161113,161115,161117],{"class":47,"line":1331},[45,161112,31399],{"class":79},[45,161114,282],{"class":55},[45,161116,146739],{"class":62},[45,161118,139],{"class":55},[45,161120,161121],{"class":47,"line":1346},[45,161122,2550],{"emptyLinePlaceholder":207},[45,161124,161125],{"class":47,"line":1352},[45,161126,2550],{"emptyLinePlaceholder":207},[45,161128,161129],{"class":47,"line":1366},[45,161130,161131],{"class":55},"say_hello()\n",[20,161133,9175],{},[233,161135,161136,161139,161142,161145],{},[169,161137,161138],{},"函数必须先定义，再调用。",[169,161140,161141],{},"函数名遵循变量命名规则。",[169,161143,161144],{},"函数体需要缩进。",[169,161146,161147],{},"函数不调用就不会执行。",[15,161149,161151],{"id":161150},"_53-函数调用","5.3 函数调用",[36,161153,161155],{"className":30478,"code":161154,"language":30480,"meta":25,"style":25},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[42,161156,161157,161166,161177,161188,161199,161209,161213,161217,161222],{"__ignoreMap":25},[45,161158,161159,161161,161164],{"class":47,"line":48},[45,161160,32047],{"class":51},[45,161162,161163],{"class":69}," print_menu",[45,161165,32053],{"class":55},[45,161167,161168,161170,161172,161175],{"class":47,"line":66},[45,161169,31399],{"class":79},[45,161171,282],{"class":55},[45,161173,161174],{"class":62},"\"1. 查询\"",[45,161176,139],{"class":55},[45,161178,161179,161181,161183,161186],{"class":47,"line":1331},[45,161180,31399],{"class":79},[45,161182,282],{"class":55},[45,161184,161185],{"class":62},"\"2. 添加\"",[45,161187,139],{"class":55},[45,161189,161190,161192,161194,161197],{"class":47,"line":1346},[45,161191,31399],{"class":79},[45,161193,282],{"class":55},[45,161195,161196],{"class":62},"\"3. 删除\"",[45,161198,139],{"class":55},[45,161200,161201,161203,161205,161207],{"class":47,"line":1352},[45,161202,31399],{"class":79},[45,161204,282],{"class":55},[45,161206,160781],{"class":62},[45,161208,139],{"class":55},[45,161210,161211],{"class":47,"line":1366},[45,161212,2550],{"emptyLinePlaceholder":207},[45,161214,161215],{"class":47,"line":1372},[45,161216,2550],{"emptyLinePlaceholder":207},[45,161218,161219],{"class":47,"line":1463},[45,161220,161221],{"class":55},"print_menu()\n",[45,161223,161224],{"class":47,"line":1469},[45,161225,161221],{"class":55},[20,161227,161228],{},"函数可以多次调用，每次调用都会执行函数体。",[15,161230,161232],{"id":161231},"_54-参数","5.4 参数",[20,161234,161235],{},"参数用于向函数传递数据。",[36,161237,161239],{"className":30478,"code":161238,"language":30480,"meta":25,"style":25},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[42,161240,161241,161250,161270,161274,161278,161287],{"__ignoreMap":25},[45,161242,161243,161245,161247],{"class":47,"line":48},[45,161244,32047],{"class":51},[45,161246,161096],{"class":69},[45,161248,161249],{"class":55},"(name):\n",[45,161251,161252,161254,161256,161258,161260,161262,161264,161266,161268],{"class":47,"line":66},[45,161253,31399],{"class":79},[45,161255,282],{"class":55},[45,161257,331],{"class":51},[45,161259,157154],{"class":62},[45,161261,1173],{"class":79},[45,161263,79910],{"class":55},[45,161265,1223],{"class":79},[45,161267,89],{"class":62},[45,161269,139],{"class":55},[45,161271,161272],{"class":47,"line":1331},[45,161273,2550],{"emptyLinePlaceholder":207},[45,161275,161276],{"class":47,"line":1346},[45,161277,2550],{"emptyLinePlaceholder":207},[45,161279,161280,161283,161285],{"class":47,"line":1352},[45,161281,161282],{"class":55},"say_hello(",[45,161284,149988],{"class":62},[45,161286,139],{"class":55},[45,161288,161289,161291,161293],{"class":47,"line":1366},[45,161290,161282],{"class":55},[45,161292,151036],{"class":62},[45,161294,139],{"class":55},[20,161296,161297,161299,161300,161302],{},[42,161298,79910],{}," 是形参，",[42,161301,149988],{}," 是实参。",[20,161304,161305],{},"多个参数：",[36,161307,161309],{"className":30478,"code":161308,"language":30480,"meta":25,"style":25},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[42,161310,161311,161319,161332,161338,161342,161346],{"__ignoreMap":25},[45,161312,161313,161315,161317],{"class":47,"line":48},[45,161314,32047],{"class":51},[45,161316,5359],{"class":69},[45,161318,151193],{"class":55},[45,161320,161321,161324,161326,161328,161330],{"class":47,"line":66},[45,161322,161323],{"class":55},"    result ",[45,161325,59],{"class":51},[45,161327,11018],{"class":55},[45,161329,758],{"class":51},[45,161331,151204],{"class":55},[45,161333,161334,161336],{"class":47,"line":1331},[45,161335,31399],{"class":79},[45,161337,76685],{"class":55},[45,161339,161340],{"class":47,"line":1346},[45,161341,2550],{"emptyLinePlaceholder":207},[45,161343,161344],{"class":47,"line":1352},[45,161345,2550],{"emptyLinePlaceholder":207},[45,161347,161348,161351,161353,161355,161357],{"class":47,"line":1366},[45,161349,161350],{"class":55},"add(",[45,161352,723],{"class":79},[45,161354,12584],{"class":55},[45,161356,977],{"class":79},[45,161358,139],{"class":55},[20,161360,161361],{},"调用时参数数量必须匹配。",[15,161363,161365],{"id":161364},"_55-返回值","5.5 返回值",[20,161367,161368,161370],{},[42,161369,17195],{}," 用于把函数内部的结果返回给调用者。",[36,161372,161374],{"className":30478,"code":161373,"language":30480,"meta":25,"style":25},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[42,161375,161376,161384,161394,161398,161402,161420],{"__ignoreMap":25},[45,161377,161378,161380,161382],{"class":47,"line":48},[45,161379,32047],{"class":51},[45,161381,5359],{"class":69},[45,161383,151193],{"class":55},[45,161385,161386,161388,161390,161392],{"class":47,"line":66},[45,161387,4240],{"class":51},[45,161389,11018],{"class":55},[45,161391,758],{"class":51},[45,161393,151204],{"class":55},[45,161395,161396],{"class":47,"line":1331},[45,161397,2550],{"emptyLinePlaceholder":207},[45,161399,161400],{"class":47,"line":1346},[45,161401,2550],{"emptyLinePlaceholder":207},[45,161403,161404,161407,161409,161412,161414,161416,161418],{"class":47,"line":1352},[45,161405,161406],{"class":55},"result ",[45,161408,59],{"class":51},[45,161410,161411],{"class":55}," add(",[45,161413,723],{"class":79},[45,161415,12584],{"class":55},[45,161417,977],{"class":79},[45,161419,139],{"class":55},[45,161421,161422,161424],{"class":47,"line":1366},[45,161423,30515],{"class":79},[45,161425,76685],{"class":55},[20,161427,161428,161429,161431,161432,28485],{},"如果函数没有写 ",[42,161430,17195],{},"，默认返回 ",[42,161433,95786],{},[36,161435,161437],{"className":30478,"code":161436,"language":30480,"meta":25,"style":25},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[42,161438,161439,161447,161457,161461,161465,161474],{"__ignoreMap":25},[45,161440,161441,161443,161445],{"class":47,"line":48},[45,161442,32047],{"class":51},[45,161444,161096],{"class":69},[45,161446,32053],{"class":55},[45,161448,161449,161451,161453,161455],{"class":47,"line":66},[45,161450,31399],{"class":79},[45,161452,282],{"class":55},[45,161454,5994],{"class":62},[45,161456,139],{"class":55},[45,161458,161459],{"class":47,"line":1331},[45,161460,2550],{"emptyLinePlaceholder":207},[45,161462,161463],{"class":47,"line":1346},[45,161464,2550],{"emptyLinePlaceholder":207},[45,161466,161467,161469,161471],{"class":47,"line":1352},[45,161468,161406],{"class":55},[45,161470,59],{"class":51},[45,161472,161473],{"class":55}," say_hello()\n",[45,161475,161476,161478,161481],{"class":47,"line":1366},[45,161477,30515],{"class":79},[45,161479,161480],{"class":55},"(result)  ",[45,161482,161483],{"class":337},"# None\n",[15,161485,161487],{"id":161486},"_56-return的作用","5.6 return的作用",[20,161489,161490,161492],{},[42,161491,17195],{}," 有两个作用：",[233,161494,161495,161498],{},[169,161496,161497],{},"返回结果。",[169,161499,161500],{},"结束函数。",[36,161502,161504],{"className":30478,"code":161503,"language":30480,"meta":25,"style":25},"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",[42,161505,161506,161516,161528,161535,161539,161551,161558,161562,161569,161573,161577,161588],{"__ignoreMap":25},[45,161507,161508,161510,161513],{"class":47,"line":48},[45,161509,32047],{"class":51},[45,161511,161512],{"class":69}," check_age",[45,161514,161515],{"class":55},"(age):\n",[45,161517,161518,161520,161522,161524,161526],{"class":47,"line":66},[45,161519,3251],{"class":51},[45,161521,15856],{"class":55},[45,161523,1187],{"class":51},[45,161525,4243],{"class":79},[45,161527,3889],{"class":55},[45,161529,161530,161532],{"class":47,"line":1331},[45,161531,14901],{"class":51},[45,161533,161534],{"class":62}," \"年龄不合法\"\n",[45,161536,161537],{"class":47,"line":1346},[45,161538,2550],{"emptyLinePlaceholder":207},[45,161540,161541,161543,161545,161547,161549],{"class":47,"line":1352},[45,161542,3251],{"class":51},[45,161544,15856],{"class":55},[45,161546,1861],{"class":51},[45,161548,156385],{"class":79},[45,161550,3889],{"class":55},[45,161552,161553,161555],{"class":47,"line":1366},[45,161554,14901],{"class":51},[45,161556,161557],{"class":62}," \"成年人\"\n",[45,161559,161560],{"class":47,"line":1372},[45,161561,2550],{"emptyLinePlaceholder":207},[45,161563,161564,161566],{"class":47,"line":1463},[45,161565,4240],{"class":51},[45,161567,161568],{"class":62}," \"未成年人\"\n",[45,161570,161571],{"class":47,"line":1469},[45,161572,2550],{"emptyLinePlaceholder":207},[45,161574,161575],{"class":47,"line":1481},[45,161576,2550],{"emptyLinePlaceholder":207},[45,161578,161579,161581,161584,161586],{"class":47,"line":1763},[45,161580,30515],{"class":79},[45,161582,161583],{"class":55},"(check_age(",[45,161585,977],{"class":79},[45,161587,30597],{"class":55},[45,161589,161590,161592,161594,161596,161598],{"class":47,"line":1768},[45,161591,30515],{"class":79},[45,161593,161583],{"class":55},[45,161595,809],{"class":51},[45,161597,495],{"class":79},[45,161599,30597],{"class":55},[20,161601,161602,161603,161605],{},"函数执行到 ",[42,161604,17195],{}," 后，后面的代码不会继续执行。",[15,161607,161609],{"id":161608},"_57-none","5.7 None",[20,161611,161612,161614],{},[42,161613,95786],{}," 表示空值或没有结果。",[20,161616,161617],{},"常见使用场景：",[233,161619,161620,161623,161626],{},[169,161621,161622],{},"函数没有返回值。",[169,161624,161625],{},"变量暂时没有具体值。",[169,161627,161628],{},"表示查询不到结果。",[36,161630,161632],{"className":30478,"code":161631,"language":30480,"meta":25,"style":25},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[42,161633,161634,161642,161646,161659],{"__ignoreMap":25},[45,161635,161636,161638,161640],{"class":47,"line":48},[45,161637,161406],{"class":55},[45,161639,59],{"class":51},[45,161641,152272],{"class":79},[45,161643,161644],{"class":47,"line":66},[45,161645,2550],{"emptyLinePlaceholder":207},[45,161647,161648,161650,161653,161655,161657],{"class":47,"line":1331},[45,161649,1682],{"class":51},[45,161651,161652],{"class":55}," result ",[45,161654,39027],{"class":51},[45,161656,39033],{"class":79},[45,161658,3889],{"class":55},[45,161660,161661,161663,161665,161668],{"class":47,"line":1346},[45,161662,31399],{"class":79},[45,161664,282],{"class":55},[45,161666,161667],{"class":62},"\"没有数据\"",[45,161669,139],{"class":55},[20,161671,161672,161673,161675,161676,161679,161680,28485],{},"判断 ",[42,161674,95786],{}," 推荐使用 ",[42,161677,161678],{},"is None","，不要写成 ",[42,161681,161682],{},"== None",[15,161684,161686],{"id":161685},"_58-函数文档字符串","5.8 函数文档字符串",[20,161688,161689],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[36,161691,161693],{"className":30478,"code":161692,"language":30480,"meta":25,"style":25},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[42,161694,161695,161705,161710],{"__ignoreMap":25},[45,161696,161697,161699,161702],{"class":47,"line":48},[45,161698,32047],{"class":51},[45,161700,161701],{"class":69}," calculate_bmi",[45,161703,161704],{"class":55},"(weight, height):\n",[45,161706,161707],{"class":47,"line":66},[45,161708,161709],{"class":62},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[45,161711,161712,161714,161717,161719,161722,161724],{"class":47,"line":1331},[45,161713,4240],{"class":51},[45,161715,161716],{"class":55}," weight ",[45,161718,861],{"class":51},[45,161720,161721],{"class":55}," height ",[45,161723,10810],{"class":51},[45,161725,47823],{"class":79},[20,161727,161728],{},"查看说明：",[36,161730,161732],{"className":30478,"code":161731,"language":30480,"meta":25,"style":25},"help(calculate_bmi)\n",[42,161733,161734],{"__ignoreMap":25},[45,161735,161736,161739],{"class":47,"line":48},[45,161737,161738],{"class":79},"help",[45,161740,161741],{"class":55},"(calculate_bmi)\n",[20,161743,161744],{},"较完整的写法：",[36,161746,161748],{"className":30478,"code":161747,"language":30480,"meta":25,"style":25},"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",[42,161749,161750,161758,161763,161768,161772,161777,161782,161787,161791],{"__ignoreMap":25},[45,161751,161752,161754,161756],{"class":47,"line":48},[45,161753,32047],{"class":51},[45,161755,161701],{"class":69},[45,161757,161704],{"class":55},[45,161759,161760],{"class":47,"line":66},[45,161761,161762],{"class":62},"    \"\"\"\n",[45,161764,161765],{"class":47,"line":1331},[45,161766,161767],{"class":62},"    计算BMI。\n",[45,161769,161770],{"class":47,"line":1346},[45,161771,2550],{"emptyLinePlaceholder":207},[45,161773,161774],{"class":47,"line":1352},[45,161775,161776],{"class":62},"    :param weight: 体重，单位kg\n",[45,161778,161779],{"class":47,"line":1366},[45,161780,161781],{"class":62},"    :param height: 身高，单位m\n",[45,161783,161784],{"class":47,"line":1372},[45,161785,161786],{"class":62},"    :return: BMI数值\n",[45,161788,161789],{"class":47,"line":1463},[45,161790,161762],{"class":62},[45,161792,161793,161795,161797,161799,161801,161803],{"class":47,"line":1469},[45,161794,4240],{"class":51},[45,161796,161716],{"class":55},[45,161798,861],{"class":51},[45,161800,161721],{"class":55},[45,161802,10810],{"class":51},[45,161804,47823],{"class":79},[15,161806,161808],{"id":161807},"_59-变量作用域","5.9 变量作用域",[249,161810,161812],{"id":161811},"_591-局部变量","5.9.1 局部变量",[20,161814,161815],{},"在函数内部定义的变量，只能在函数内部使用。",[36,161817,161819],{"className":30478,"code":161818,"language":30480,"meta":25,"style":25},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[42,161820,161821,161830,161838,161844,161848,161852,161857],{"__ignoreMap":25},[45,161822,161823,161825,161828],{"class":47,"line":48},[45,161824,32047],{"class":51},[45,161826,161827],{"class":69}," test",[45,161829,32053],{"class":55},[45,161831,161832,161834,161836],{"class":47,"line":66},[45,161833,45693],{"class":55},[45,161835,59],{"class":51},[45,161837,58528],{"class":79},[45,161839,161840,161842],{"class":47,"line":1331},[45,161841,31399],{"class":79},[45,161843,294],{"class":55},[45,161845,161846],{"class":47,"line":1346},[45,161847,2550],{"emptyLinePlaceholder":207},[45,161849,161850],{"class":47,"line":1352},[45,161851,2550],{"emptyLinePlaceholder":207},[45,161853,161854],{"class":47,"line":1366},[45,161855,161856],{"class":55},"test()\n",[45,161858,161859,161861,161864],{"class":47,"line":1372},[45,161860,30515],{"class":79},[45,161862,161863],{"class":55},"(num)  ",[45,161865,161866],{"class":337},"# 报错\n",[249,161868,161870],{"id":161869},"_592-全局变量","5.9.2 全局变量",[20,161872,161873],{},"在函数外部定义的变量，可以在函数内部读取。",[36,161875,161877],{"className":30478,"code":161876,"language":30480,"meta":25,"style":25},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[42,161878,161879,161887,161891,161895,161903,161909,161913,161917],{"__ignoreMap":25},[45,161880,161881,161883,161885],{"class":47,"line":48},[45,161882,146636],{"class":55},[45,161884,59],{"class":51},[45,161886,149453],{"class":62},[45,161888,161889],{"class":47,"line":66},[45,161890,2550],{"emptyLinePlaceholder":207},[45,161892,161893],{"class":47,"line":1331},[45,161894,2550],{"emptyLinePlaceholder":207},[45,161896,161897,161899,161901],{"class":47,"line":1346},[45,161898,32047],{"class":51},[45,161900,161096],{"class":69},[45,161902,32053],{"class":55},[45,161904,161905,161907],{"class":47,"line":1352},[45,161906,31399],{"class":79},[45,161908,150760],{"class":55},[45,161910,161911],{"class":47,"line":1366},[45,161912,2550],{"emptyLinePlaceholder":207},[45,161914,161915],{"class":47,"line":1372},[45,161916,2550],{"emptyLinePlaceholder":207},[45,161918,161919],{"class":47,"line":1463},[45,161920,161131],{"class":55},[20,161922,161923,161924,28485],{},"如果要在函数内部修改全局变量，需要 ",[42,161925,161926],{},"global",[36,161928,161930],{"className":30478,"code":161929,"language":30480,"meta":25,"style":25},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[42,161931,161932,161940,161944,161948,161957,161965,161973,161977,161981,161986],{"__ignoreMap":25},[45,161933,161934,161936,161938],{"class":47,"line":48},[45,161935,146791],{"class":55},[45,161937,59],{"class":51},[45,161939,47433],{"class":79},[45,161941,161942],{"class":47,"line":66},[45,161943,2550],{"emptyLinePlaceholder":207},[45,161945,161946],{"class":47,"line":1331},[45,161947,2550],{"emptyLinePlaceholder":207},[45,161949,161950,161952,161955],{"class":47,"line":1346},[45,161951,32047],{"class":51},[45,161953,161954],{"class":69}," add_count",[45,161956,32053],{"class":55},[45,161958,161959,161962],{"class":47,"line":1352},[45,161960,161961],{"class":51},"    global",[45,161963,161964],{"class":55}," count\n",[45,161966,161967,161969,161971],{"class":47,"line":1366},[45,161968,159533],{"class":55},[45,161970,9627],{"class":51},[45,161972,55799],{"class":79},[45,161974,161975],{"class":47,"line":1372},[45,161976,2550],{"emptyLinePlaceholder":207},[45,161978,161979],{"class":47,"line":1463},[45,161980,2550],{"emptyLinePlaceholder":207},[45,161982,161983],{"class":47,"line":1469},[45,161984,161985],{"class":55},"add_count()\n",[45,161987,161988,161990],{"class":47,"line":1481},[45,161989,30515],{"class":79},[45,161991,161992],{"class":55},"(count)\n",[20,161994,161995],{},"不建议大量使用全局变量，项目变大后很难维护。",[15,161997,161999],{"id":161998},"_510-函数嵌套调用","5.10 函数嵌套调用",[20,162001,162002],{},"一个函数中可以调用另一个函数。",[36,162004,162006],{"className":30478,"code":162005,"language":30480,"meta":25,"style":25},"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",[42,162007,162008,162017,162031,162035,162039,162048,162053,162073,162094,162098,162102,162106],{"__ignoreMap":25},[45,162009,162010,162012,162015],{"class":47,"line":48},[45,162011,32047],{"class":51},[45,162013,162014],{"class":69}," print_line",[45,162016,32053],{"class":55},[45,162018,162019,162021,162023,162025,162027,162029],{"class":47,"line":66},[45,162020,31399],{"class":79},[45,162022,282],{"class":55},[45,162024,32583],{"class":62},[45,162026,6668],{"class":51},[45,162028,78765],{"class":79},[45,162030,139],{"class":55},[45,162032,162033],{"class":47,"line":1331},[45,162034,2550],{"emptyLinePlaceholder":207},[45,162036,162037],{"class":47,"line":1346},[45,162038,2550],{"emptyLinePlaceholder":207},[45,162040,162041,162043,162046],{"class":47,"line":1352},[45,162042,32047],{"class":51},[45,162044,162045],{"class":69}," print_info",[45,162047,149475],{"class":55},[45,162049,162050],{"class":47,"line":1366},[45,162051,162052],{"class":55},"    print_line()\n",[45,162054,162055,162057,162059,162061,162063,162065,162067,162069,162071],{"class":47,"line":1372},[45,162056,31399],{"class":79},[45,162058,282],{"class":55},[45,162060,331],{"class":51},[45,162062,156782],{"class":62},[45,162064,1173],{"class":79},[45,162066,79910],{"class":55},[45,162068,1223],{"class":79},[45,162070,89],{"class":62},[45,162072,139],{"class":55},[45,162074,162075,162077,162079,162081,162084,162086,162088,162090,162092],{"class":47,"line":1463},[45,162076,31399],{"class":79},[45,162078,282],{"class":55},[45,162080,331],{"class":51},[45,162082,162083],{"class":62},"\"年龄:",[45,162085,1173],{"class":79},[45,162087,70321],{"class":55},[45,162089,1223],{"class":79},[45,162091,89],{"class":62},[45,162093,139],{"class":55},[45,162095,162096],{"class":47,"line":1469},[45,162097,162052],{"class":55},[45,162099,162100],{"class":47,"line":1481},[45,162101,2550],{"emptyLinePlaceholder":207},[45,162103,162104],{"class":47,"line":1763},[45,162105,2550],{"emptyLinePlaceholder":207},[45,162107,162108,162111,162113,162115,162117],{"class":47,"line":1768},[45,162109,162110],{"class":55},"print_info(",[45,162112,149988],{"class":62},[45,162114,12584],{"class":55},[45,162116,927],{"class":79},[45,162118,139],{"class":55},[20,162120,162121],{},"这种方式可以把小功能组合成大功能。",[15,162123,162125],{"id":162124},"_511-参数检查","5.11 参数检查",[20,162127,162128],{},"函数内部可以检查参数是否合法。",[36,162130,162132],{"className":30478,"code":162131,"language":30480,"meta":25,"style":25},"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",[42,162133,162134,162143,162155,162161,162171,162175,162179,162196,162200,162212,162223,162229],{"__ignoreMap":25},[45,162135,162136,162138,162141],{"class":47,"line":48},[45,162137,32047],{"class":51},[45,162139,162140],{"class":69}," divide",[45,162142,151193],{"class":55},[45,162144,162145,162147,162149,162151,162153],{"class":47,"line":66},[45,162146,3251],{"class":51},[45,162148,11031],{"class":55},[45,162150,3099],{"class":51},[45,162152,4243],{"class":79},[45,162154,3889],{"class":55},[45,162156,162157,162159],{"class":47,"line":1331},[45,162158,14901],{"class":51},[45,162160,152272],{"class":79},[45,162162,162163,162165,162167,162169],{"class":47,"line":1346},[45,162164,4240],{"class":51},[45,162166,11018],{"class":55},[45,162168,861],{"class":51},[45,162170,151204],{"class":55},[45,162172,162173],{"class":47,"line":1352},[45,162174,2550],{"emptyLinePlaceholder":207},[45,162176,162177],{"class":47,"line":1366},[45,162178,2550],{"emptyLinePlaceholder":207},[45,162180,162181,162183,162185,162188,162190,162192,162194],{"class":47,"line":1372},[45,162182,161406],{"class":55},[45,162184,59],{"class":51},[45,162186,162187],{"class":55}," divide(",[45,162189,723],{"class":79},[45,162191,12584],{"class":55},[45,162193,469],{"class":79},[45,162195,139],{"class":55},[45,162197,162198],{"class":47,"line":1463},[45,162199,2550],{"emptyLinePlaceholder":207},[45,162201,162202,162204,162206,162208,162210],{"class":47,"line":1469},[45,162203,1682],{"class":51},[45,162205,161652],{"class":55},[45,162207,39027],{"class":51},[45,162209,39033],{"class":79},[45,162211,3889],{"class":55},[45,162213,162214,162216,162218,162221],{"class":47,"line":1481},[45,162215,31399],{"class":79},[45,162217,282],{"class":55},[45,162219,162220],{"class":62},"\"除数不能为0\"",[45,162222,139],{"class":55},[45,162224,162225,162227],{"class":47,"line":1763},[45,162226,1852],{"class":51},[45,162228,3889],{"class":55},[45,162230,162231,162233],{"class":47,"line":1768},[45,162232,31399],{"class":79},[45,162234,76685],{"class":55},[15,162236,162238],{"id":162237},"_512-类型提示","5.12 类型提示",[20,162240,162241],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[36,162243,162245],{"className":30478,"code":162244,"language":30480,"meta":25,"style":25},"def add(a: int, b: int) -> int:\n    return a + b\n",[42,162246,162247,162270],{"__ignoreMap":25},[45,162248,162249,162251,162253,162256,162258,162261,162263,162266,162268],{"class":47,"line":48},[45,162250,32047],{"class":51},[45,162252,5359],{"class":69},[45,162254,162255],{"class":55},"(a: ",[45,162257,285],{"class":79},[45,162259,162260],{"class":55},", b: ",[45,162262,285],{"class":79},[45,162264,162265],{"class":55},") -> ",[45,162267,285],{"class":79},[45,162269,3889],{"class":55},[45,162271,162272,162274,162276,162278],{"class":47,"line":66},[45,162273,4240],{"class":51},[45,162275,11018],{"class":55},[45,162277,758],{"class":51},[45,162279,151204],{"class":55},[20,162281,162282],{},"字符串参数：",[36,162284,162286],{"className":30478,"code":162285,"language":30480,"meta":25,"style":25},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[42,162287,162288,162305],{"__ignoreMap":25},[45,162289,162290,162292,162294,162297,162299,162301,162303],{"class":47,"line":48},[45,162291,32047],{"class":51},[45,162293,161096],{"class":69},[45,162295,162296],{"class":55},"(name: ",[45,162298,1451],{"class":79},[45,162300,162265],{"class":55},[45,162302,95786],{"class":79},[45,162304,3889],{"class":55},[45,162306,162307,162309,162311,162313,162315,162317,162319,162321,162323],{"class":47,"line":66},[45,162308,31399],{"class":79},[45,162310,282],{"class":55},[45,162312,331],{"class":51},[45,162314,157154],{"class":62},[45,162316,1173],{"class":79},[45,162318,79910],{"class":55},[45,162320,1223],{"class":79},[45,162322,89],{"class":62},[45,162324,139],{"class":55},[20,162326,162327],{},"列表参数：",[36,162329,162331],{"className":30478,"code":162330,"language":30480,"meta":25,"style":25},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[42,162332,162333,162352,162360,162372,162381],{"__ignoreMap":25},[45,162334,162335,162337,162340,162343,162345,162348,162350],{"class":47,"line":48},[45,162336,32047],{"class":51},[45,162338,162339],{"class":69}," get_total",[45,162341,162342],{"class":55},"(numbers: list[",[45,162344,285],{"class":79},[45,162346,162347],{"class":55},"]) -> ",[45,162349,285],{"class":79},[45,162351,3889],{"class":55},[45,162353,162354,162356,162358],{"class":47,"line":66},[45,162355,159407],{"class":55},[45,162357,59],{"class":51},[45,162359,47433],{"class":79},[45,162361,162362,162364,162367,162369],{"class":47,"line":1331},[45,162363,3351],{"class":51},[45,162365,162366],{"class":55}," number ",[45,162368,26143],{"class":51},[45,162370,162371],{"class":55}," numbers:\n",[45,162373,162374,162376,162378],{"class":47,"line":1346},[45,162375,160082],{"class":55},[45,162377,9627],{"class":51},[45,162379,162380],{"class":55}," number\n",[45,162382,162383,162385],{"class":47,"line":1352},[45,162384,4240],{"class":51},[45,162386,162387],{"class":55}," total\n",[20,162389,162390],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[15,162392,162394],{"id":162393},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[36,162396,162398],{"className":30478,"code":162397,"language":30480,"meta":25,"style":25},"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",[42,162399,162400,162410,162414,162418,162426,162437,162447,162457,162467,162477,162481,162485,162494,162516,162520,162524,162533,162539,162559,162571,162582,162586,162595,162606,162611,162615,162619,162628,162634,162653,162665,162675,162679,162690,162700,162704,162712,162723,162727,162731,162735,162743,162748,162762,162766,162778,162783,162795,162800,162812,162817,162829,162839,162843,162849],{"__ignoreMap":25},[45,162401,162402,162405,162407],{"class":47,"line":48},[45,162403,162404],{"class":55},"balance ",[45,162406,59],{"class":51},[45,162408,162409],{"class":79}," 1000\n",[45,162411,162412],{"class":47,"line":66},[45,162413,2550],{"emptyLinePlaceholder":207},[45,162415,162416],{"class":47,"line":1331},[45,162417,2550],{"emptyLinePlaceholder":207},[45,162419,162420,162422,162424],{"class":47,"line":1346},[45,162421,32047],{"class":51},[45,162423,152133],{"class":69},[45,162425,32053],{"class":55},[45,162427,162428,162430,162432,162435],{"class":47,"line":1352},[45,162429,31399],{"class":79},[45,162431,282],{"class":55},[45,162433,162434],{"class":62},"\"====== ATM ======\"",[45,162436,139],{"class":55},[45,162438,162439,162441,162443,162445],{"class":47,"line":1366},[45,162440,31399],{"class":79},[45,162442,282],{"class":55},[45,162444,160748],{"class":62},[45,162446,139],{"class":55},[45,162448,162449,162451,162453,162455],{"class":47,"line":1372},[45,162450,31399],{"class":79},[45,162452,282],{"class":55},[45,162454,160759],{"class":62},[45,162456,139],{"class":55},[45,162458,162459,162461,162463,162465],{"class":47,"line":1463},[45,162460,31399],{"class":79},[45,162462,282],{"class":55},[45,162464,160770],{"class":62},[45,162466,139],{"class":55},[45,162468,162469,162471,162473,162475],{"class":47,"line":1469},[45,162470,31399],{"class":79},[45,162472,282],{"class":55},[45,162474,160781],{"class":62},[45,162476,139],{"class":55},[45,162478,162479],{"class":47,"line":1481},[45,162480,2550],{"emptyLinePlaceholder":207},[45,162482,162483],{"class":47,"line":1763},[45,162484,2550],{"emptyLinePlaceholder":207},[45,162486,162487,162489,162492],{"class":47,"line":1768},[45,162488,32047],{"class":51},[45,162490,162491],{"class":69}," show_balance",[45,162493,32053],{"class":55},[45,162495,162496,162498,162500,162502,162505,162507,162510,162512,162514],{"class":47,"line":1774},[45,162497,31399],{"class":79},[45,162499,282],{"class":55},[45,162501,331],{"class":51},[45,162503,162504],{"class":62},"\"当前余额:",[45,162506,1173],{"class":79},[45,162508,162509],{"class":55},"balance",[45,162511,1223],{"class":79},[45,162513,157112],{"class":62},[45,162515,139],{"class":55},[45,162517,162518],{"class":47,"line":1779},[45,162519,2550],{"emptyLinePlaceholder":207},[45,162521,162522],{"class":47,"line":1793},[45,162523,2550],{"emptyLinePlaceholder":207},[45,162525,162526,162528,162531],{"class":47,"line":1798},[45,162527,32047],{"class":51},[45,162529,162530],{"class":69}," save_money",[45,162532,32053],{"class":55},[45,162534,162535,162537],{"class":47,"line":1804},[45,162536,161961],{"class":51},[45,162538,150199],{"class":55},[45,162540,162541,162544,162546,162548,162550,162552,162554,162557],{"class":47,"line":1825},[45,162542,162543],{"class":55},"    money ",[45,162545,59],{"class":51},[45,162547,109897],{"class":79},[45,162549,282],{"class":55},[45,162551,53921],{"class":79},[45,162553,282],{"class":55},[45,162555,162556],{"class":62},"\"请输入存款金额:\"",[45,162558,30597],{"class":55},[45,162560,162561,162563,162565,162567,162569],{"class":47,"line":1830},[45,162562,3251],{"class":51},[45,162564,150242],{"class":55},[45,162566,1739],{"class":51},[45,162568,4243],{"class":79},[45,162570,3889],{"class":55},[45,162572,162573,162575,162577,162580],{"class":47,"line":1844},[45,162574,32551],{"class":79},[45,162576,282],{"class":55},[45,162578,162579],{"class":62},"\"金额必须大于0\"",[45,162581,139],{"class":55},[45,162583,162584],{"class":47,"line":1849},[45,162585,152461],{"class":51},[45,162587,162588,162591,162593],{"class":47,"line":1878},[45,162589,162590],{"class":55},"    balance ",[45,162592,9627],{"class":51},[45,162594,150275],{"class":55},[45,162596,162597,162599,162601,162604],{"class":47,"line":1883},[45,162598,31399],{"class":79},[45,162600,282],{"class":55},[45,162602,162603],{"class":62},"\"存款成功\"",[45,162605,139],{"class":55},[45,162607,162608],{"class":47,"line":1900},[45,162609,162610],{"class":55},"    show_balance()\n",[45,162612,162613],{"class":47,"line":1905},[45,162614,2550],{"emptyLinePlaceholder":207},[45,162616,162617],{"class":47,"line":1910},[45,162618,2550],{"emptyLinePlaceholder":207},[45,162620,162621,162623,162626],{"class":47,"line":1915},[45,162622,32047],{"class":51},[45,162624,162625],{"class":69}," withdraw_money",[45,162627,32053],{"class":55},[45,162629,162630,162632],{"class":47,"line":1929},[45,162631,161961],{"class":51},[45,162633,150199],{"class":55},[45,162635,162636,162638,162640,162642,162644,162646,162648,162651],{"class":47,"line":1934},[45,162637,162543],{"class":55},[45,162639,59],{"class":51},[45,162641,109897],{"class":79},[45,162643,282],{"class":55},[45,162645,53921],{"class":79},[45,162647,282],{"class":55},[45,162649,162650],{"class":62},"\"请输入取款金额:\"",[45,162652,30597],{"class":55},[45,162654,162655,162657,162659,162661,162663],{"class":47,"line":2727},[45,162656,3251],{"class":51},[45,162658,150242],{"class":55},[45,162660,1739],{"class":51},[45,162662,4243],{"class":79},[45,162664,3889],{"class":55},[45,162666,162667,162669,162671,162673],{"class":47,"line":2741},[45,162668,32551],{"class":79},[45,162670,282],{"class":55},[45,162672,162579],{"class":62},[45,162674,139],{"class":55},[45,162676,162677],{"class":47,"line":2749},[45,162678,152461],{"class":51},[45,162680,162681,162683,162685,162687],{"class":47,"line":2754},[45,162682,3251],{"class":51},[45,162684,150242],{"class":55},[45,162686,1237],{"class":51},[45,162688,162689],{"class":55}," balance:\n",[45,162691,162692,162694,162696,162698],{"class":47,"line":2760},[45,162693,32551],{"class":79},[45,162695,282],{"class":55},[45,162697,150337],{"class":62},[45,162699,139],{"class":55},[45,162701,162702],{"class":47,"line":2766},[45,162703,152461],{"class":51},[45,162705,162706,162708,162710],{"class":47,"line":2771},[45,162707,162590],{"class":55},[45,162709,150352],{"class":51},[45,162711,150275],{"class":55},[45,162713,162714,162716,162718,162721],{"class":47,"line":8098},[45,162715,31399],{"class":79},[45,162717,282],{"class":55},[45,162719,162720],{"class":62},"\"取款成功\"",[45,162722,139],{"class":55},[45,162724,162725],{"class":47,"line":8122},[45,162726,162610],{"class":55},[45,162728,162729],{"class":47,"line":8127},[45,162730,2550],{"emptyLinePlaceholder":207},[45,162732,162733],{"class":47,"line":8133},[45,162734,2550],{"emptyLinePlaceholder":207},[45,162736,162737,162739,162741],{"class":47,"line":8160},[45,162738,108763],{"class":51},[45,162740,95392],{"class":79},[45,162742,3889],{"class":55},[45,162744,162745],{"class":47,"line":8165},[45,162746,162747],{"class":55},"    show_menu()\n",[45,162749,162750,162752,162754,162756,162758,162760],{"class":47,"line":8171},[45,162751,160792],{"class":55},[45,162753,59],{"class":51},[45,162755,60705],{"class":79},[45,162757,282],{"class":55},[45,162759,153173],{"class":62},[45,162761,139],{"class":55},[45,162763,162764],{"class":47,"line":8183},[45,162765,2550],{"emptyLinePlaceholder":207},[45,162767,162768,162770,162772,162774,162776],{"class":47,"line":8195},[45,162769,3251],{"class":51},[45,162771,153186],{"class":55},[45,162773,3099],{"class":51},[45,162775,153191],{"class":62},[45,162777,3889],{"class":55},[45,162779,162780],{"class":47,"line":8207},[45,162781,162782],{"class":55},"        show_balance()\n",[45,162784,162785,162787,162789,162791,162793],{"class":47,"line":9866},[45,162786,39393],{"class":51},[45,162788,153186],{"class":55},[45,162790,3099],{"class":51},[45,162792,153210],{"class":62},[45,162794,3889],{"class":55},[45,162796,162797],{"class":47,"line":9890},[45,162798,162799],{"class":55},"        save_money()\n",[45,162801,162802,162804,162806,162808,162810],{"class":47,"line":9913},[45,162803,39393],{"class":51},[45,162805,153186],{"class":55},[45,162807,3099],{"class":51},[45,162809,153228],{"class":62},[45,162811,3889],{"class":55},[45,162813,162814],{"class":47,"line":9937},[45,162815,162816],{"class":55},"        withdraw_money()\n",[45,162818,162819,162821,162823,162825,162827],{"class":47,"line":9942},[45,162820,39393],{"class":51},[45,162822,153186],{"class":55},[45,162824,3099],{"class":51},[45,162826,153282],{"class":62},[45,162828,3889],{"class":55},[45,162830,162831,162833,162835,162837],{"class":47,"line":9947},[45,162832,32551],{"class":79},[45,162834,282],{"class":55},[45,162836,153293],{"class":62},[45,162838,139],{"class":55},[45,162840,162841],{"class":47,"line":9952},[45,162842,31727],{"class":51},[45,162844,162845,162847],{"class":47,"line":9961},[45,162846,158122],{"class":51},[45,162848,3889],{"class":55},[45,162850,162851,162853,162855,162857],{"class":47,"line":9966},[45,162852,32551],{"class":79},[45,162854,282],{"class":55},[45,162856,153314],{"class":62},[45,162858,139],{"class":55},[20,162860,162861],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[15,162863,162865],{"id":162864},"_514-易错点","5.14 易错点",[233,162867,162868,162871,162874,162879,162884,162887],{},[169,162869,162870],{},"函数定义后必须调用才会执行。",[169,162872,162873],{},"函数名后面有括号才是调用。",[169,162875,162876,162878],{},[42,162877,17195],{}," 后面的代码不会执行。",[169,162880,162881,162882,28485],{},"没有返回值的函数默认返回 ",[42,162883,95786],{},[169,162885,162886],{},"局部变量不能在函数外部访问。",[169,162888,162889,162890,162892],{},"不要滥用 ",[42,162891,161926],{},"，更好的方式是让函数返回新值。",[20,162894,162895,162896,162898],{},"例如不用 ",[42,162897,161926],{}," 改写存款：",[36,162900,162902],{"className":30478,"code":162901,"language":30480,"meta":25,"style":25},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[42,162903,162904,162913,162924,162928,162932,162940,162953],{"__ignoreMap":25},[45,162905,162906,162908,162910],{"class":47,"line":48},[45,162907,32047],{"class":51},[45,162909,162530],{"class":69},[45,162911,162912],{"class":55},"(balance, money):\n",[45,162914,162915,162917,162920,162922],{"class":47,"line":66},[45,162916,4240],{"class":51},[45,162918,162919],{"class":55}," balance ",[45,162921,758],{"class":51},[45,162923,150275],{"class":55},[45,162925,162926],{"class":47,"line":1331},[45,162927,2550],{"emptyLinePlaceholder":207},[45,162929,162930],{"class":47,"line":1346},[45,162931,2550],{"emptyLinePlaceholder":207},[45,162933,162934,162936,162938],{"class":47,"line":1352},[45,162935,162404],{"class":55},[45,162937,59],{"class":51},[45,162939,162409],{"class":79},[45,162941,162942,162944,162946,162949,162951],{"class":47,"line":1366},[45,162943,162404],{"class":55},[45,162945,59],{"class":51},[45,162947,162948],{"class":55}," save_money(balance, ",[45,162950,1873],{"class":79},[45,162952,139],{"class":55},[45,162954,162955,162957],{"class":47,"line":1372},[45,162956,30515],{"class":79},[45,162958,162959],{"class":55},"(balance)\n",[15,162961,162963],{"id":162962},"_515-本章练习","5.15 本章练习",[233,162965,162966,162973,162979,162985,162991],{},[169,162967,162968,162969,162972],{},"定义函数 ",[42,162970,162971],{},"print_student(name, age)","，输出学生信息。",[169,162974,162968,162975,162978],{},[42,162976,162977],{},"get_max(a, b, c)","，返回三个数中的最大值。",[169,162980,162968,162981,162984],{},[42,162982,162983],{},"is_even(num)","，判断一个数是否为偶数。",[169,162986,162968,162987,162990],{},[42,162988,162989],{},"calculate_bmi(weight, height)","，返回 BMI。",[169,162992,162993],{},"把第 4 章的菜单程序拆分成多个函数。",[196,162995,162996],{},"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":25,"searchDepth":66,"depth":66,"links":162998},[162999,163000,163001,163002,163003,163004,163005,163006,163007,163011,163012,163013,163014,163015,163016],{"id":161019,"depth":66,"text":161020},{"id":161060,"depth":66,"text":161061},{"id":161150,"depth":66,"text":161151},{"id":161231,"depth":66,"text":161232},{"id":161364,"depth":66,"text":161365},{"id":161486,"depth":66,"text":161487},{"id":161608,"depth":66,"text":161609},{"id":161685,"depth":66,"text":161686},{"id":161807,"depth":66,"text":161808,"children":163008},[163009,163010],{"id":161811,"depth":1331,"text":161812},{"id":161869,"depth":1331,"text":161870},{"id":161998,"depth":66,"text":161999},{"id":162124,"depth":66,"text":162125},{"id":162237,"depth":66,"text":162238},{"id":162393,"depth":66,"text":162394},{"id":162864,"depth":66,"text":162865},{"id":162962,"depth":66,"text":162963},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161011,"description":204},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163023,"title":163024,"body":163025,"description":204,"extension":205,"meta":166069,"navigation":207,"path":166070,"seo":166071,"stem":166072,"__hash__":166073},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163026,"toc":166050},[163027,163030,163034,163037,163040,163144,163147,163151,163154,163234,163237,163241,163244,163304,163307,163343,163346,163361,163365,163438,163441,163496,163499,163569,163572,163656,163666,163724,163728,163773,163776,163802,163805,163911,163915,163918,163960,163963,164027,164030,164034,164037,164098,164101,164131,164134,164172,164176,164179,164188,164191,164315,164318,164359,164363,164366,164377,164417,164420,164435,164440,164443,164510,164513,164603,164607,164610,164658,164661,164688,164690,164720,164723,164743,164746,164777,164780,164813,164817,164820,164844,164847,164871,164874,164898,164902,164905,165035,165038,165118,165121,165196,165200,165203,165253,165256,165298,165301,165325,165327,165351,165354,165409,165412,165478,165482,165485,165488,165526,165529,165582,165585,165631,165634,165667,165670,165674,165993,165997,166026,166030,166047],[10,163028,163024],{"id":163029},"_6-数据容器",[15,163031,163033],{"id":163032},"_61-什么是数据容器","6.1 什么是数据容器",[20,163035,163036],{},"数据容器用于一次保存多个数据。",[20,163038,163039],{},"常见容器：",[415,163041,163042,163059],{},[418,163043,163044],{},[421,163045,163046,163048,163051,163054,163057],{},[424,163047,25871],{},[424,163049,163050],{},"是否有序",[424,163052,163053],{},"是否可变",[424,163055,163056],{},"是否允许重复",[424,163058,27592],{},[462,163060,163061,163079,163095,163110,163127],{},[421,163062,163063,163066,163069,163072,163075],{},[467,163064,163065],{},"list列表",[467,163067,163068],{},"有序",[467,163070,163071],{},"可变",[467,163073,163074],{},"允许",[467,163076,163077],{},[42,163078,155357],{},[421,163080,163081,163084,163086,163089,163091],{},[467,163082,163083],{},"tuple元组",[467,163085,163068],{},[467,163087,163088],{},"不可变",[467,163090,163074],{},[467,163092,163093],{},[42,163094,155370],{},[421,163096,163097,163100,163102,163104,163106],{},[467,163098,163099],{},"str字符串",[467,163101,163068],{},[467,163103,163088],{},[467,163105,163074],{},[467,163107,163108],{},[42,163109,155980],{},[421,163111,163112,163115,163118,163120,163123],{},[467,163113,163114],{},"set集合",[467,163116,163117],{},"无序",[467,163119,163071],{},[467,163121,163122],{},"不允许",[467,163124,163125],{},[42,163126,155395],{},[421,163128,163129,163132,163134,163136,163139],{},[467,163130,163131],{},"dict字典",[467,163133,163068],{},[467,163135,163071],{},[467,163137,163138],{},"key不允许重复",[467,163140,163141],{},[42,163142,163143],{},"{\"name\": \"小明\"}",[20,163145,163146],{},"Python 3.7 之后，字典保持插入顺序。",[15,163148,163150],{"id":163149},"_62-列表list","6.2 列表list",[20,163152,163153],{},"列表用于保存一组有顺序的数据。",[36,163155,163157],{"className":30478,"code":163156,"language":30480,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[42,163158,163159,163179,163204,163225],{"__ignoreMap":25},[45,163160,163161,163163,163165,163167,163169,163171,163173,163175,163177],{"class":47,"line":48},[45,163162,160480],{"class":55},[45,163164,59],{"class":51},[45,163166,52326],{"class":55},[45,163168,149988],{"class":62},[45,163170,12584],{"class":55},[45,163172,151036],{"class":62},[45,163174,12584],{"class":55},[45,163176,159831],{"class":62},[45,163178,33346],{"class":55},[45,163180,163181,163184,163186,163188,163190,163192,163194,163196,163198,163200,163202],{"class":47,"line":66},[45,163182,163183],{"class":55},"numbers ",[45,163185,59],{"class":51},[45,163187,52326],{"class":55},[45,163189,495],{"class":79},[45,163191,12584],{"class":55},[45,163193,356],{"class":79},[45,163195,12584],{"class":55},[45,163197,350],{"class":79},[45,163199,12584],{"class":55},[45,163201,570],{"class":79},[45,163203,33346],{"class":55},[45,163205,163206,163209,163211,163213,163215,163217,163219,163221,163223],{"class":47,"line":1331},[45,163207,163208],{"class":55},"mixed ",[45,163210,59],{"class":51},[45,163212,52326],{"class":55},[45,163214,149988],{"class":62},[45,163216,12584],{"class":55},[45,163218,927],{"class":79},[45,163220,12584],{"class":55},[45,163222,31576],{"class":79},[45,163224,33346],{"class":55},[45,163226,163227,163230,163232],{"class":47,"line":1346},[45,163228,163229],{"class":55},"empty ",[45,163231,59],{"class":51},[45,163233,51938],{"class":55},[20,163235,163236],{},"推荐一个列表中保存同类数据，代码更清晰。",[15,163238,163240],{"id":163239},"_63-列表索引","6.3 列表索引",[20,163242,163243],{},"正向索引从 0 开始：",[36,163245,163247],{"className":30478,"code":163246,"language":30480,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[42,163248,163249,163269,163273,163284,163294],{"__ignoreMap":25},[45,163250,163251,163253,163255,163257,163259,163261,163263,163265,163267],{"class":47,"line":48},[45,163252,160480],{"class":55},[45,163254,59],{"class":51},[45,163256,52326],{"class":55},[45,163258,149988],{"class":62},[45,163260,12584],{"class":55},[45,163262,151036],{"class":62},[45,163264,12584],{"class":55},[45,163266,159831],{"class":62},[45,163268,33346],{"class":55},[45,163270,163271],{"class":47,"line":66},[45,163272,2550],{"emptyLinePlaceholder":207},[45,163274,163275,163277,163280,163282],{"class":47,"line":1331},[45,163276,30515],{"class":79},[45,163278,163279],{"class":55},"(names[",[45,163281,469],{"class":79},[45,163283,4807],{"class":55},[45,163285,163286,163288,163290,163292],{"class":47,"line":1346},[45,163287,30515],{"class":79},[45,163289,163279],{"class":55},[45,163291,495],{"class":79},[45,163293,4807],{"class":55},[45,163295,163296,163298,163300,163302],{"class":47,"line":1352},[45,163297,30515],{"class":79},[45,163299,163279],{"class":55},[45,163301,356],{"class":79},[45,163303,4807],{"class":55},[20,163305,163306],{},"反向索引从 -1 开始：",[36,163308,163310],{"className":30478,"code":163309,"language":30480,"meta":25,"style":25},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[42,163311,163312,163328],{"__ignoreMap":25},[45,163313,163314,163316,163318,163320,163322,163325],{"class":47,"line":48},[45,163315,30515],{"class":79},[45,163317,163279],{"class":55},[45,163319,809],{"class":51},[45,163321,495],{"class":79},[45,163323,163324],{"class":55},"])  ",[45,163326,163327],{"class":337},"# 小刚\n",[45,163329,163330,163332,163334,163336,163338,163340],{"class":47,"line":66},[45,163331,30515],{"class":79},[45,163333,163279],{"class":55},[45,163335,809],{"class":51},[45,163337,356],{"class":79},[45,163339,163324],{"class":55},[45,163341,163342],{"class":337},"# 小红\n",[20,163344,163345],{},"索引越界会报错：",[36,163347,163349],{"className":30478,"code":163348,"language":30480,"meta":25,"style":25},"print(names[3])\n",[42,163350,163351],{"__ignoreMap":25},[45,163352,163353,163355,163357,163359],{"class":47,"line":48},[45,163354,30515],{"class":79},[45,163356,163279],{"class":55},[45,163358,350],{"class":79},[45,163360,4807],{"class":55},[15,163362,163364],{"id":163363},"_64-列表常用方法","6.4 列表常用方法",[36,163366,163368],{"className":30478,"code":163367,"language":30480,"meta":25,"style":25},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[42,163369,163370,163386,163390,163399,163413,163427,163431],{"__ignoreMap":25},[45,163371,163372,163374,163376,163378,163380,163382,163384],{"class":47,"line":48},[45,163373,160480],{"class":55},[45,163375,59],{"class":51},[45,163377,52326],{"class":55},[45,163379,149988],{"class":62},[45,163381,12584],{"class":55},[45,163383,151036],{"class":62},[45,163385,33346],{"class":55},[45,163387,163388],{"class":47,"line":66},[45,163389,2550],{"emptyLinePlaceholder":207},[45,163391,163392,163395,163397],{"class":47,"line":1331},[45,163393,163394],{"class":55},"names.append(",[45,163396,159831],{"class":62},[45,163398,139],{"class":55},[45,163400,163401,163404,163406,163408,163411],{"class":47,"line":1346},[45,163402,163403],{"class":55},"names.insert(",[45,163405,495],{"class":79},[45,163407,12584],{"class":55},[45,163409,163410],{"class":62},"\"小李\"",[45,163412,139],{"class":55},[45,163414,163415,163418,163420,163422,163425],{"class":47,"line":1352},[45,163416,163417],{"class":55},"names.extend([",[45,163419,8833],{"class":62},[45,163421,12584],{"class":55},[45,163423,163424],{"class":62},"\"小赵\"",[45,163426,4807],{"class":55},[45,163428,163429],{"class":47,"line":1366},[45,163430,2550],{"emptyLinePlaceholder":207},[45,163432,163433,163435],{"class":47,"line":1372},[45,163434,30515],{"class":79},[45,163436,163437],{"class":55},"(names)\n",[20,163439,163440],{},"删除元素：",[36,163442,163444],{"className":30478,"code":163443,"language":30480,"meta":25,"style":25},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[42,163445,163446,163455,163465,163479,163491],{"__ignoreMap":25},[45,163447,163448,163451,163453],{"class":47,"line":48},[45,163449,163450],{"class":55},"names.remove(",[45,163452,151036],{"class":62},[45,163454,139],{"class":55},[45,163456,163457,163460,163462],{"class":47,"line":66},[45,163458,163459],{"class":55},"last ",[45,163461,59],{"class":51},[45,163463,163464],{"class":55}," names.pop()\n",[45,163466,163467,163470,163472,163475,163477],{"class":47,"line":1331},[45,163468,163469],{"class":55},"first ",[45,163471,59],{"class":51},[45,163473,163474],{"class":55}," names.pop(",[45,163476,469],{"class":79},[45,163478,139],{"class":55},[45,163480,163481,163484,163487,163489],{"class":47,"line":1346},[45,163482,163483],{"class":51},"del",[45,163485,163486],{"class":55}," names[",[45,163488,469],{"class":79},[45,163490,33346],{"class":55},[45,163492,163493],{"class":47,"line":1352},[45,163494,163495],{"class":55},"names.clear()\n",[20,163497,163498],{},"查询和统计：",[36,163500,163502],{"className":30478,"code":163501,"language":30480,"meta":25,"style":25},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[42,163503,163504,163532,163536,163547,163558],{"__ignoreMap":25},[45,163505,163506,163508,163510,163512,163514,163516,163518,163520,163522,163524,163526,163528,163530],{"class":47,"line":48},[45,163507,163183],{"class":55},[45,163509,59],{"class":51},[45,163511,52326],{"class":55},[45,163513,495],{"class":79},[45,163515,12584],{"class":55},[45,163517,356],{"class":79},[45,163519,12584],{"class":55},[45,163521,350],{"class":79},[45,163523,12584],{"class":55},[45,163525,356],{"class":79},[45,163527,12584],{"class":55},[45,163529,570],{"class":79},[45,163531,33346],{"class":55},[45,163533,163534],{"class":47,"line":66},[45,163535,2550],{"emptyLinePlaceholder":207},[45,163537,163538,163540,163543,163545],{"class":47,"line":1331},[45,163539,30515],{"class":79},[45,163541,163542],{"class":55},"(numbers.index(",[45,163544,350],{"class":79},[45,163546,30597],{"class":55},[45,163548,163549,163551,163554,163556],{"class":47,"line":1346},[45,163550,30515],{"class":79},[45,163552,163553],{"class":55},"(numbers.count(",[45,163555,356],{"class":79},[45,163557,30597],{"class":55},[45,163559,163560,163562,163564,163566],{"class":47,"line":1352},[45,163561,30515],{"class":79},[45,163563,282],{"class":55},[45,163565,7508],{"class":79},[45,163567,163568],{"class":55},"(numbers))\n",[20,163570,163571],{},"排序：",[36,163573,163575],{"className":30478,"code":163574,"language":30480,"meta":25,"style":25},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[42,163576,163577,163601,163605,163610,163617,163621,163635,163641,163645,163650],{"__ignoreMap":25},[45,163578,163579,163581,163583,163585,163587,163589,163591,163593,163595,163597,163599],{"class":47,"line":48},[45,163580,163183],{"class":55},[45,163582,59],{"class":51},[45,163584,52326],{"class":55},[45,163586,350],{"class":79},[45,163588,12584],{"class":55},[45,163590,495],{"class":79},[45,163592,12584],{"class":55},[45,163594,596],{"class":79},[45,163596,12584],{"class":55},[45,163598,356],{"class":79},[45,163600,33346],{"class":55},[45,163602,163603],{"class":47,"line":66},[45,163604,2550],{"emptyLinePlaceholder":207},[45,163606,163607],{"class":47,"line":1331},[45,163608,163609],{"class":55},"numbers.sort()\n",[45,163611,163612,163614],{"class":47,"line":1346},[45,163613,30515],{"class":79},[45,163615,163616],{"class":55},"(numbers)\n",[45,163618,163619],{"class":47,"line":1352},[45,163620,2550],{"emptyLinePlaceholder":207},[45,163622,163623,163626,163629,163631,163633],{"class":47,"line":1366},[45,163624,163625],{"class":55},"numbers.sort(",[45,163627,163628],{"class":5366},"reverse",[45,163630,59],{"class":51},[45,163632,31576],{"class":79},[45,163634,139],{"class":55},[45,163636,163637,163639],{"class":47,"line":1372},[45,163638,30515],{"class":79},[45,163640,163616],{"class":55},[45,163642,163643],{"class":47,"line":1463},[45,163644,2550],{"emptyLinePlaceholder":207},[45,163646,163647],{"class":47,"line":1469},[45,163648,163649],{"class":55},"numbers.reverse()\n",[45,163651,163652,163654],{"class":47,"line":1481},[45,163653,30515],{"class":79},[45,163655,163616],{"class":55},[20,163657,163658,163661,163662,163665],{},[42,163659,163660],{},"sort()"," 会修改原列表，",[42,163663,163664],{},"sorted()"," 返回新列表。",[36,163667,163669],{"className":30478,"code":163668,"language":30480,"meta":25,"style":25},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[42,163670,163671,163695,163707,163711,163717],{"__ignoreMap":25},[45,163672,163673,163675,163677,163679,163681,163683,163685,163687,163689,163691,163693],{"class":47,"line":48},[45,163674,163183],{"class":55},[45,163676,59],{"class":51},[45,163678,52326],{"class":55},[45,163680,350],{"class":79},[45,163682,12584],{"class":55},[45,163684,495],{"class":79},[45,163686,12584],{"class":55},[45,163688,596],{"class":79},[45,163690,12584],{"class":55},[45,163692,356],{"class":79},[45,163694,33346],{"class":55},[45,163696,163697,163700,163702,163705],{"class":47,"line":66},[45,163698,163699],{"class":55},"new_numbers ",[45,163701,59],{"class":51},[45,163703,163704],{"class":79}," sorted",[45,163706,163616],{"class":55},[45,163708,163709],{"class":47,"line":1331},[45,163710,2550],{"emptyLinePlaceholder":207},[45,163712,163713,163715],{"class":47,"line":1346},[45,163714,30515],{"class":79},[45,163716,163616],{"class":55},[45,163718,163719,163721],{"class":47,"line":1352},[45,163720,30515],{"class":79},[45,163722,163723],{"class":55},"(new_numbers)\n",[15,163725,163727],{"id":163726},"_65-列表遍历","6.5 列表遍历",[36,163729,163731],{"className":30478,"code":163730,"language":30480,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[42,163732,163733,163753,163757,163767],{"__ignoreMap":25},[45,163734,163735,163737,163739,163741,163743,163745,163747,163749,163751],{"class":47,"line":48},[45,163736,160480],{"class":55},[45,163738,59],{"class":51},[45,163740,52326],{"class":55},[45,163742,149988],{"class":62},[45,163744,12584],{"class":55},[45,163746,151036],{"class":62},[45,163748,12584],{"class":55},[45,163750,159831],{"class":62},[45,163752,33346],{"class":55},[45,163754,163755],{"class":47,"line":66},[45,163756,2550],{"emptyLinePlaceholder":207},[45,163758,163759,163761,163763,163765],{"class":47,"line":1331},[45,163760,3175],{"class":51},[45,163762,160516],{"class":55},[45,163764,26143],{"class":51},[45,163766,160521],{"class":55},[45,163768,163769,163771],{"class":47,"line":1346},[45,163770,31399],{"class":79},[45,163772,150760],{"class":55},[20,163774,163775],{},"需要索引时：",[36,163777,163779],{"className":30478,"code":163778,"language":30480,"meta":25,"style":25},"for index, name in enumerate(names):\n    print(index, name)\n",[42,163780,163781,163795],{"__ignoreMap":25},[45,163782,163783,163785,163788,163790,163792],{"class":47,"line":48},[45,163784,3175],{"class":51},[45,163786,163787],{"class":55}," index, name ",[45,163789,26143],{"class":51},[45,163791,31706],{"class":79},[45,163793,163794],{"class":55},"(names):\n",[45,163796,163797,163799],{"class":47,"line":66},[45,163798,31399],{"class":79},[45,163800,163801],{"class":55},"(index, name)\n",[20,163803,163804],{},"统计总分：",[36,163806,163808],{"className":30478,"code":163807,"language":30480,"meta":25,"style":25},"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",[42,163809,163810,163835,163843,163847,163858,163866,163870,163887],{"__ignoreMap":25},[45,163811,163812,163815,163817,163819,163821,163823,163825,163827,163829,163831,163833],{"class":47,"line":48},[45,163813,163814],{"class":55},"scores ",[45,163816,59],{"class":51},[45,163818,52326],{"class":55},[45,163820,1139],{"class":79},[45,163822,12584],{"class":55},[45,163824,1013],{"class":79},[45,163826,12584],{"class":55},[45,163828,531],{"class":79},[45,163830,12584],{"class":55},[45,163832,838],{"class":79},[45,163834,33346],{"class":55},[45,163836,163837,163839,163841],{"class":47,"line":66},[45,163838,157360],{"class":55},[45,163840,59],{"class":51},[45,163842,47433],{"class":79},[45,163844,163845],{"class":47,"line":1331},[45,163846,2550],{"emptyLinePlaceholder":207},[45,163848,163849,163851,163853,163855],{"class":47,"line":1346},[45,163850,3175],{"class":51},[45,163852,157883],{"class":55},[45,163854,26143],{"class":51},[45,163856,163857],{"class":55}," scores:\n",[45,163859,163860,163862,163864],{"class":47,"line":1352},[45,163861,159407],{"class":55},[45,163863,9627],{"class":51},[45,163865,1730],{"class":55},[45,163867,163868],{"class":47,"line":1366},[45,163869,2550],{"emptyLinePlaceholder":207},[45,163871,163872,163875,163877,163880,163882,163884],{"class":47,"line":1372},[45,163873,163874],{"class":55},"avg ",[45,163876,59],{"class":51},[45,163878,163879],{"class":55}," total ",[45,163881,861],{"class":51},[45,163883,7481],{"class":79},[45,163885,163886],{"class":55},"(scores)\n",[45,163888,163889,163891,163893,163895,163898,163900,163903,163905,163907,163909],{"class":47,"line":1463},[45,163890,30515],{"class":79},[45,163892,282],{"class":55},[45,163894,331],{"class":51},[45,163896,163897],{"class":62},"\"平均分:",[45,163899,1173],{"class":79},[45,163901,163902],{"class":55},"avg",[45,163904,157259],{"class":51},[45,163906,1223],{"class":79},[45,163908,89],{"class":62},[45,163910,139],{"class":55},[15,163912,163914],{"id":163913},"_66-元组tuple","6.6 元组tuple",[20,163916,163917],{},"元组和列表类似，但不可修改。",[36,163919,163921],{"className":30478,"code":163920,"language":30480,"meta":25,"style":25},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[42,163922,163923,163940],{"__ignoreMap":25},[45,163924,163925,163928,163930,163932,163934,163936,163938],{"class":47,"line":48},[45,163926,163927],{"class":55},"point ",[45,163929,59],{"class":51},[45,163931,1809],{"class":55},[45,163933,723],{"class":79},[45,163935,12584],{"class":55},[45,163937,977],{"class":79},[45,163939,139],{"class":55},[45,163941,163942,163944,163946,163948,163950,163952,163954,163956,163958],{"class":47,"line":66},[45,163943,116414],{"class":55},[45,163945,59],{"class":51},[45,163947,1809],{"class":55},[45,163949,149988],{"class":62},[45,163951,12584],{"class":55},[45,163953,927],{"class":79},[45,163955,12584],{"class":55},[45,163957,69369],{"class":62},[45,163959,139],{"class":55},[20,163961,163962],{},"单元素元组必须加逗号：",[36,163964,163966],{"className":30478,"code":163965,"language":30480,"meta":25,"style":25},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[42,163967,163968,163982,163995,163999,164013],{"__ignoreMap":25},[45,163969,163970,163973,163975,163977,163979],{"class":47,"line":48},[45,163971,163972],{"class":55},"t1 ",[45,163974,59],{"class":51},[45,163976,1809],{"class":55},[45,163978,723],{"class":79},[45,163980,163981],{"class":55},",)\n",[45,163983,163984,163987,163989,163991,163993],{"class":47,"line":66},[45,163985,163986],{"class":55},"t2 ",[45,163988,59],{"class":51},[45,163990,1809],{"class":55},[45,163992,723],{"class":79},[45,163994,139],{"class":55},[45,163996,163997],{"class":47,"line":1331},[45,163998,2550],{"emptyLinePlaceholder":207},[45,164000,164001,164003,164005,164007,164010],{"class":47,"line":1346},[45,164002,30515],{"class":79},[45,164004,282],{"class":55},[45,164006,103207],{"class":79},[45,164008,164009],{"class":55},"(t1))  ",[45,164011,164012],{"class":337},"# tuple\n",[45,164014,164015,164017,164019,164021,164024],{"class":47,"line":1352},[45,164016,30515],{"class":79},[45,164018,282],{"class":55},[45,164020,103207],{"class":79},[45,164022,164023],{"class":55},"(t2))  ",[45,164025,164026],{"class":337},"# int\n",[20,164028,164029],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[15,164031,164033],{"id":164032},"_67-字符串str","6.7 字符串str",[20,164035,164036],{},"字符串也是序列，可以索引、切片和遍历。",[36,164038,164040],{"className":30478,"code":164039,"language":30480,"meta":25,"style":25},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[42,164041,164042,164050,164054,164065,164077,164081,164092],{"__ignoreMap":25},[45,164043,164044,164046,164048],{"class":47,"line":48},[45,164045,156544],{"class":55},[45,164047,59],{"class":51},[45,164049,159781],{"class":62},[45,164051,164052],{"class":47,"line":66},[45,164053,2550],{"emptyLinePlaceholder":207},[45,164055,164056,164058,164061,164063],{"class":47,"line":1331},[45,164057,30515],{"class":79},[45,164059,164060],{"class":55},"(text[",[45,164062,469],{"class":79},[45,164064,4807],{"class":55},[45,164066,164067,164069,164071,164073,164075],{"class":47,"line":1346},[45,164068,30515],{"class":79},[45,164070,164060],{"class":55},[45,164072,809],{"class":51},[45,164074,495],{"class":79},[45,164076,4807],{"class":55},[45,164078,164079],{"class":47,"line":1352},[45,164080,2550],{"emptyLinePlaceholder":207},[45,164082,164083,164085,164087,164089],{"class":47,"line":1366},[45,164084,3175],{"class":51},[45,164086,159792],{"class":55},[45,164088,26143],{"class":51},[45,164090,164091],{"class":55}," text:\n",[45,164093,164094,164096],{"class":47,"line":1372},[45,164095,31399],{"class":79},[45,164097,159803],{"class":55},[20,164099,164100],{},"字符串不可变：",[36,164102,164104],{"className":30478,"code":164103,"language":30480,"meta":25,"style":25},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[42,164105,164106,164114],{"__ignoreMap":25},[45,164107,164108,164110,164112],{"class":47,"line":48},[45,164109,156544],{"class":55},[45,164111,59],{"class":51},[45,164113,159781],{"class":62},[45,164115,164116,164119,164121,164123,164125,164128],{"class":47,"line":66},[45,164117,164118],{"class":55},"text[",[45,164120,469],{"class":79},[45,164122,4593],{"class":55},[45,164124,59],{"class":51},[45,164126,164127],{"class":62}," \"P\"",[45,164129,164130],{"class":337},"  # 报错\n",[20,164132,164133],{},"如果要得到新字符串：",[36,164135,164137],{"className":30478,"code":164136,"language":30480,"meta":25,"style":25},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[42,164138,164139,164147,164165],{"__ignoreMap":25},[45,164140,164141,164143,164145],{"class":47,"line":48},[45,164142,156544],{"class":55},[45,164144,59],{"class":51},[45,164146,159781],{"class":62},[45,164148,164149,164151,164153,164155,164157,164160,164162],{"class":47,"line":66},[45,164150,156544],{"class":55},[45,164152,59],{"class":51},[45,164154,164127],{"class":62},[45,164156,45666],{"class":51},[45,164158,164159],{"class":55}," text[",[45,164161,495],{"class":79},[45,164163,164164],{"class":55},":]\n",[45,164166,164167,164169],{"class":47,"line":1331},[45,164168,30515],{"class":79},[45,164170,164171],{"class":55},"(text)\n",[15,164173,164175],{"id":164174},"_68-切片","6.8 切片",[20,164177,164178],{},"切片用于从序列中取一部分。",[36,164180,164182],{"className":30478,"code":164181,"language":30480,"meta":25,"style":25},"序列[开始:结束:步长]\n",[42,164183,164184],{"__ignoreMap":25},[45,164185,164186],{"class":47,"line":48},[45,164187,164181],{"class":55},[20,164189,164190],{},"结束位置不包含。",[36,164192,164194],{"className":30478,"code":164193,"language":30480,"meta":25,"style":25},"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",[42,164195,164196,164233,164237,164256,164271,164285,164299],{"__ignoreMap":25},[45,164197,164198,164201,164203,164205,164207,164209,164211,164213,164215,164217,164219,164221,164223,164225,164227,164229,164231],{"class":47,"line":48},[45,164199,164200],{"class":55},"nums ",[45,164202,59],{"class":51},[45,164204,52326],{"class":55},[45,164206,469],{"class":79},[45,164208,12584],{"class":55},[45,164210,495],{"class":79},[45,164212,12584],{"class":55},[45,164214,356],{"class":79},[45,164216,12584],{"class":55},[45,164218,350],{"class":79},[45,164220,12584],{"class":55},[45,164222,570],{"class":79},[45,164224,12584],{"class":55},[45,164226,596],{"class":79},[45,164228,12584],{"class":55},[45,164230,621],{"class":79},[45,164232,33346],{"class":55},[45,164234,164235],{"class":47,"line":66},[45,164236,2550],{"emptyLinePlaceholder":207},[45,164238,164239,164241,164244,164246,164248,164250,164253],{"class":47,"line":1331},[45,164240,30515],{"class":79},[45,164242,164243],{"class":55},"(nums[",[45,164245,495],{"class":79},[45,164247,1136],{"class":55},[45,164249,570],{"class":79},[45,164251,164252],{"class":55},"])    ",[45,164254,164255],{"class":337},"# [1, 2, 3]\n",[45,164257,164258,164260,164263,164265,164268],{"class":47,"line":1346},[45,164259,30515],{"class":79},[45,164261,164262],{"class":55},"(nums[:",[45,164264,350],{"class":79},[45,164266,164267],{"class":55},"])     ",[45,164269,164270],{"class":337},"# [0, 1, 2]\n",[45,164272,164273,164275,164277,164279,164282],{"class":47,"line":1352},[45,164274,30515],{"class":79},[45,164276,164243],{"class":55},[45,164278,350],{"class":79},[45,164280,164281],{"class":55},":])     ",[45,164283,164284],{"class":337},"# [3, 4, 5, 6]\n",[45,164286,164287,164289,164292,164294,164296],{"class":47,"line":1366},[45,164288,30515],{"class":79},[45,164290,164291],{"class":55},"(nums[::",[45,164293,356],{"class":79},[45,164295,164252],{"class":55},[45,164297,164298],{"class":337},"# [0, 2, 4, 6]\n",[45,164300,164301,164303,164305,164307,164309,164312],{"class":47,"line":1372},[45,164302,30515],{"class":79},[45,164304,164291],{"class":55},[45,164306,809],{"class":51},[45,164308,495],{"class":79},[45,164310,164311],{"class":55},"])   ",[45,164313,164314],{"class":337},"# 反转\n",[20,164316,164317],{},"字符串切片：",[36,164319,164321],{"className":30478,"code":164320,"language":30480,"meta":25,"style":25},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[42,164322,164323,164332,164346],{"__ignoreMap":25},[45,164324,164325,164327,164329],{"class":47,"line":48},[45,164326,156544],{"class":55},[45,164328,59],{"class":51},[45,164330,164331],{"class":62}," \"abcdef\"\n",[45,164333,164334,164336,164338,164340,164342,164344],{"class":47,"line":66},[45,164335,30515],{"class":79},[45,164337,164060],{"class":55},[45,164339,495],{"class":79},[45,164341,1136],{"class":55},[45,164343,570],{"class":79},[45,164345,4807],{"class":55},[45,164347,164348,164350,164353,164355,164357],{"class":47,"line":1331},[45,164349,30515],{"class":79},[45,164351,164352],{"class":55},"(text[::",[45,164354,809],{"class":51},[45,164356,495],{"class":79},[45,164358,4807],{"class":55},[15,164360,164362],{"id":164361},"_69-集合set","6.9 集合set",[20,164364,164365],{},"集合特点：",[233,164367,164368,164371,164374],{},[169,164369,164370],{},"无序。",[169,164372,164373],{},"元素不重复。",[169,164375,164376],{},"可以做交集、并集、差集。",[36,164378,164380],{"className":30478,"code":164379,"language":30480,"meta":25,"style":25},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[42,164381,164382,164410],{"__ignoreMap":25},[45,164383,164384,164386,164388,164390,164392,164394,164396,164398,164400,164402,164404,164406,164408],{"class":47,"line":48},[45,164385,164200],{"class":55},[45,164387,59],{"class":51},[45,164389,4598],{"class":55},[45,164391,495],{"class":79},[45,164393,12584],{"class":55},[45,164395,356],{"class":79},[45,164397,12584],{"class":55},[45,164399,350],{"class":79},[45,164401,12584],{"class":55},[45,164403,350],{"class":79},[45,164405,12584],{"class":55},[45,164407,570],{"class":79},[45,164409,1716],{"class":55},[45,164411,164412,164414],{"class":47,"line":66},[45,164413,30515],{"class":79},[45,164415,164416],{"class":55},"(nums)\n",[20,164418,164419],{},"创建空集合：",[36,164421,164423],{"className":30478,"code":164422,"language":30480,"meta":25,"style":25},"s = set()\n",[42,164424,164425],{"__ignoreMap":25},[45,164426,164427,164429,164431,164433],{"class":47,"line":48},[45,164428,10728],{"class":55},[45,164430,59],{"class":51},[45,164432,119822],{"class":79},[45,164434,2126],{"class":55},[20,164436,9175,164437,164439],{},[42,164438,32559],{}," 是空字典，不是空集合。",[20,164441,164442],{},"集合常用操作：",[36,164444,164446],{"className":30478,"code":164445,"language":30480,"meta":25,"style":25},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[42,164447,164448,164468,164472,164481,164490,164499],{"__ignoreMap":25},[45,164449,164450,164452,164454,164456,164458,164460,164462,164464,164466],{"class":47,"line":48},[45,164451,10728],{"class":55},[45,164453,59],{"class":51},[45,164455,4598],{"class":55},[45,164457,495],{"class":79},[45,164459,12584],{"class":55},[45,164461,356],{"class":79},[45,164463,12584],{"class":55},[45,164465,350],{"class":79},[45,164467,1716],{"class":55},[45,164469,164470],{"class":47,"line":66},[45,164471,2550],{"emptyLinePlaceholder":207},[45,164473,164474,164477,164479],{"class":47,"line":1331},[45,164475,164476],{"class":55},"s.add(",[45,164478,570],{"class":79},[45,164480,139],{"class":55},[45,164482,164483,164486,164488],{"class":47,"line":1346},[45,164484,164485],{"class":55},"s.remove(",[45,164487,356],{"class":79},[45,164489,139],{"class":55},[45,164491,164492,164495,164497],{"class":47,"line":1352},[45,164493,164494],{"class":55},"s.discard(",[45,164496,723],{"class":79},[45,164498,139],{"class":55},[45,164500,164501,164503,164505,164507],{"class":47,"line":1366},[45,164502,30515],{"class":79},[45,164504,282],{"class":55},[45,164506,7508],{"class":79},[45,164508,164509],{"class":55},"(s))\n",[20,164511,164512],{},"交并差：",[36,164514,164516],{"className":30478,"code":164515,"language":30480,"meta":25,"style":25},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[42,164517,164518,164538,164558,164562,164577,164590],{"__ignoreMap":25},[45,164519,164520,164522,164524,164526,164528,164530,164532,164534,164536],{"class":47,"line":48},[45,164521,11068],{"class":55},[45,164523,59],{"class":51},[45,164525,4598],{"class":55},[45,164527,495],{"class":79},[45,164529,12584],{"class":55},[45,164531,356],{"class":79},[45,164533,12584],{"class":55},[45,164535,350],{"class":79},[45,164537,1716],{"class":55},[45,164539,164540,164542,164544,164546,164548,164550,164552,164554,164556],{"class":47,"line":66},[45,164541,11094],{"class":55},[45,164543,59],{"class":51},[45,164545,4598],{"class":55},[45,164547,350],{"class":79},[45,164549,12584],{"class":55},[45,164551,570],{"class":79},[45,164553,12584],{"class":55},[45,164555,596],{"class":79},[45,164557,1716],{"class":55},[45,164559,164560],{"class":47,"line":1331},[45,164561,2550],{"emptyLinePlaceholder":207},[45,164563,164564,164566,164569,164571,164574],{"class":47,"line":1346},[45,164565,30515],{"class":79},[45,164567,164568],{"class":55},"(a ",[45,164570,630],{"class":51},[45,164572,164573],{"class":55}," b)  ",[45,164575,164576],{"class":337},"# 交集\n",[45,164578,164579,164581,164583,164585,164587],{"class":47,"line":1352},[45,164580,30515],{"class":79},[45,164582,164568],{"class":55},[45,164584,1198],{"class":51},[45,164586,164573],{"class":55},[45,164588,164589],{"class":337},"# 并集\n",[45,164591,164592,164594,164596,164598,164600],{"class":47,"line":1366},[45,164593,30515],{"class":79},[45,164595,164568],{"class":55},[45,164597,809],{"class":51},[45,164599,164573],{"class":55},[45,164601,164602],{"class":337},"# 差集\n",[15,164604,164606],{"id":164605},"_610-字典dict","6.10 字典dict",[20,164608,164609],{},"字典通过 key-value 保存数据。",[36,164611,164613],{"className":30478,"code":164612,"language":30480,"meta":25,"style":25},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[42,164614,164615,164623,164633,164644,164654],{"__ignoreMap":25},[45,164616,164617,164619,164621],{"class":47,"line":48},[45,164618,149581],{"class":55},[45,164620,59],{"class":51},[45,164622,15721],{"class":55},[45,164624,164625,164627,164629,164631],{"class":47,"line":66},[45,164626,147120],{"class":62},[45,164628,51537],{"class":55},[45,164630,149988],{"class":62},[45,164632,31566],{"class":55},[45,164634,164635,164638,164640,164642],{"class":47,"line":1331},[45,164636,164637],{"class":62},"    \"age\"",[45,164639,51537],{"class":55},[45,164641,927],{"class":79},[45,164643,31566],{"class":55},[45,164645,164646,164649,164651],{"class":47,"line":1346},[45,164647,164648],{"class":62},"    \"score\"",[45,164650,51537],{"class":55},[45,164652,164653],{"class":79},"95\n",[45,164655,164656],{"class":47,"line":1352},[45,164657,1716],{"class":55},[20,164659,164660],{},"获取值：",[36,164662,164664],{"className":30478,"code":164663,"language":30480,"meta":25,"style":25},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[42,164665,164666,164677],{"__ignoreMap":25},[45,164667,164668,164670,164673,164675],{"class":47,"line":48},[45,164669,30515],{"class":79},[45,164671,164672],{"class":55},"(student[",[45,164674,62779],{"class":62},[45,164676,4807],{"class":55},[45,164678,164679,164681,164684,164686],{"class":47,"line":66},[45,164680,30515],{"class":79},[45,164682,164683],{"class":55},"(student.get(",[45,164685,62779],{"class":62},[45,164687,30597],{"class":55},[20,164689,15537],{},[36,164691,164693],{"className":30478,"code":164692,"language":30480,"meta":25,"style":25},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[42,164694,164695,164708],{"__ignoreMap":25},[45,164696,164697,164699,164702,164705],{"class":47,"line":48},[45,164698,152959],{"class":55},[45,164700,164701],{"class":62},"\"address\"",[45,164703,164704],{"class":55},"]     ",[45,164706,164707],{"class":337},"# key不存在会报错\n",[45,164709,164710,164713,164715,164717],{"class":47,"line":66},[45,164711,164712],{"class":55},"student.get(",[45,164714,164701],{"class":62},[45,164716,13863],{"class":55},[45,164718,164719],{"class":337},"# key不存在返回None\n",[20,164721,164722],{},"设置默认值：",[36,164724,164726],{"className":30478,"code":164725,"language":30480,"meta":25,"style":25},"print(student.get(\"address\", \"未知\"))\n",[42,164727,164728],{"__ignoreMap":25},[45,164729,164730,164732,164734,164736,164738,164741],{"class":47,"line":48},[45,164731,30515],{"class":79},[45,164733,164683],{"class":55},[45,164735,164701],{"class":62},[45,164737,12584],{"class":55},[45,164739,164740],{"class":62},"\"未知\"",[45,164742,30597],{"class":55},[20,164744,164745],{},"新增和修改：",[36,164747,164749],{"className":30478,"code":164748,"language":30480,"meta":25,"style":25},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[42,164750,164751,164764],{"__ignoreMap":25},[45,164752,164753,164755,164757,164759,164761],{"class":47,"line":48},[45,164754,152959],{"class":55},[45,164756,69224],{"class":62},[45,164758,4593],{"class":55},[45,164760,59],{"class":51},[45,164762,164763],{"class":79}," 19\n",[45,164765,164766,164768,164770,164772,164774],{"class":47,"line":66},[45,164767,152959],{"class":55},[45,164769,164701],{"class":62},[45,164771,4593],{"class":55},[45,164773,59],{"class":51},[45,164775,164776],{"class":62}," \"北京\"\n",[20,164778,164779],{},"删除：",[36,164781,164783],{"className":30478,"code":164782,"language":30480,"meta":25,"style":25},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[42,164784,164785,164798,164808],{"__ignoreMap":25},[45,164786,164787,164789,164791,164794,164796],{"class":47,"line":48},[45,164788,155458],{"class":55},[45,164790,59],{"class":51},[45,164792,164793],{"class":55}," student.pop(",[45,164795,151572],{"class":62},[45,164797,139],{"class":55},[45,164799,164800,164802,164804,164806],{"class":47,"line":66},[45,164801,163483],{"class":51},[45,164803,152249],{"class":55},[45,164805,69224],{"class":62},[45,164807,33346],{"class":55},[45,164809,164810],{"class":47,"line":1331},[45,164811,164812],{"class":55},"student.clear()\n",[15,164814,164816],{"id":164815},"_611-字典遍历","6.11 字典遍历",[20,164818,164819],{},"遍历 key：",[36,164821,164823],{"className":30478,"code":164822,"language":30480,"meta":25,"style":25},"for key in student:\n    print(key, student[key])\n",[42,164824,164825,164837],{"__ignoreMap":25},[45,164826,164827,164829,164832,164834],{"class":47,"line":48},[45,164828,3175],{"class":51},[45,164830,164831],{"class":55}," key ",[45,164833,26143],{"class":51},[45,164835,164836],{"class":55}," student:\n",[45,164838,164839,164841],{"class":47,"line":66},[45,164840,31399],{"class":79},[45,164842,164843],{"class":55},"(key, student[key])\n",[20,164845,164846],{},"遍历 value：",[36,164848,164850],{"className":30478,"code":164849,"language":30480,"meta":25,"style":25},"for value in student.values():\n    print(value)\n",[42,164851,164852,164864],{"__ignoreMap":25},[45,164853,164854,164856,164859,164861],{"class":47,"line":48},[45,164855,3175],{"class":51},[45,164857,164858],{"class":55}," value ",[45,164860,26143],{"class":51},[45,164862,164863],{"class":55}," student.values():\n",[45,164865,164866,164868],{"class":47,"line":66},[45,164867,31399],{"class":79},[45,164869,164870],{"class":55},"(value)\n",[20,164872,164873],{},"遍历 key 和 value：",[36,164875,164877],{"className":30478,"code":164876,"language":30480,"meta":25,"style":25},"for key, value in student.items():\n    print(key, value)\n",[42,164878,164879,164891],{"__ignoreMap":25},[45,164880,164881,164883,164886,164888],{"class":47,"line":48},[45,164882,3175],{"class":51},[45,164884,164885],{"class":55}," key, value ",[45,164887,26143],{"class":51},[45,164889,164890],{"class":55}," student.items():\n",[45,164892,164893,164895],{"class":47,"line":66},[45,164894,31399],{"class":79},[45,164896,164897],{"class":55},"(key, value)\n",[15,164899,164901],{"id":164900},"_612-嵌套容器","6.12 嵌套容器",[20,164903,164904],{},"列表中保存字典，是项目中最常见的结构之一。",[36,164906,164908],{"className":30478,"code":164907,"language":30480,"meta":25,"style":25},"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",[42,164909,164910,164918,164946,164974,165002,165006,165010,165020],{"__ignoreMap":25},[45,164911,164912,164914,164916],{"class":47,"line":48},[45,164913,159816],{"class":55},[45,164915,59],{"class":51},[45,164917,55547],{"class":55},[45,164919,164920,164922,164924,164926,164928,164930,164932,164934,164936,164938,164940,164942,164944],{"class":47,"line":66},[45,164921,148485],{"class":55},[45,164923,62779],{"class":62},[45,164925,51537],{"class":55},[45,164927,149988],{"class":62},[45,164929,12584],{"class":55},[45,164931,69224],{"class":62},[45,164933,51537],{"class":55},[45,164935,927],{"class":79},[45,164937,12584],{"class":55},[45,164939,151572],{"class":62},[45,164941,51537],{"class":55},[45,164943,1266],{"class":79},[45,164945,5080],{"class":55},[45,164947,164948,164950,164952,164954,164956,164958,164960,164962,164964,164966,164968,164970,164972],{"class":47,"line":1331},[45,164949,148485],{"class":55},[45,164951,62779],{"class":62},[45,164953,51537],{"class":55},[45,164955,151036],{"class":62},[45,164957,12584],{"class":55},[45,164959,69224],{"class":62},[45,164961,51537],{"class":55},[45,164963,902],{"class":79},[45,164965,12584],{"class":55},[45,164967,151572],{"class":62},[45,164969,51537],{"class":55},[45,164971,1088],{"class":79},[45,164973,5080],{"class":55},[45,164975,164976,164978,164980,164982,164984,164986,164988,164990,164992,164994,164996,164998,165000],{"class":47,"line":1346},[45,164977,148485],{"class":55},[45,164979,62779],{"class":62},[45,164981,51537],{"class":55},[45,164983,159831],{"class":62},[45,164985,12584],{"class":55},[45,164987,69224],{"class":62},[45,164989,51537],{"class":55},[45,164991,952],{"class":79},[45,164993,12584],{"class":55},[45,164995,151572],{"class":62},[45,164997,51537],{"class":55},[45,164999,683],{"class":79},[45,165001,5080],{"class":55},[45,165003,165004],{"class":47,"line":1352},[45,165005,33346],{"class":55},[45,165007,165008],{"class":47,"line":1366},[45,165009,2550],{"emptyLinePlaceholder":207},[45,165011,165012,165014,165016,165018],{"class":47,"line":1372},[45,165013,3175],{"class":51},[45,165015,152237],{"class":55},[45,165017,26143],{"class":51},[45,165019,152242],{"class":55},[45,165021,165022,165024,165026,165028,165031,165033],{"class":47,"line":1463},[45,165023,31399],{"class":79},[45,165025,164672],{"class":55},[45,165027,62779],{"class":62},[45,165029,165030],{"class":55},"], student[",[45,165032,151572],{"class":62},[45,165034,4807],{"class":55},[20,165036,165037],{},"统计平均分：",[36,165039,165041],{"className":30478,"code":165040,"language":30480,"meta":25,"style":25},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[42,165042,165043,165051,165055,165065,165077,165081,165096],{"__ignoreMap":25},[45,165044,165045,165047,165049],{"class":47,"line":48},[45,165046,157360],{"class":55},[45,165048,59],{"class":51},[45,165050,47433],{"class":79},[45,165052,165053],{"class":47,"line":66},[45,165054,2550],{"emptyLinePlaceholder":207},[45,165056,165057,165059,165061,165063],{"class":47,"line":1331},[45,165058,3175],{"class":51},[45,165060,152237],{"class":55},[45,165062,26143],{"class":51},[45,165064,152242],{"class":55},[45,165066,165067,165069,165071,165073,165075],{"class":47,"line":1346},[45,165068,159407],{"class":55},[45,165070,9627],{"class":51},[45,165072,152249],{"class":55},[45,165074,151572],{"class":62},[45,165076,33346],{"class":55},[45,165078,165079],{"class":47,"line":1352},[45,165080,2550],{"emptyLinePlaceholder":207},[45,165082,165083,165085,165087,165089,165091,165093],{"class":47,"line":1366},[45,165084,163874],{"class":55},[45,165086,59],{"class":51},[45,165088,163879],{"class":55},[45,165090,861],{"class":51},[45,165092,7481],{"class":79},[45,165094,165095],{"class":55},"(students)\n",[45,165097,165098,165100,165102,165104,165106,165108,165110,165112,165114,165116],{"class":47,"line":1372},[45,165099,30515],{"class":79},[45,165101,282],{"class":55},[45,165103,331],{"class":51},[45,165105,163897],{"class":62},[45,165107,1173],{"class":79},[45,165109,163902],{"class":55},[45,165111,157259],{"class":51},[45,165113,1223],{"class":79},[45,165115,89],{"class":62},[45,165117,139],{"class":55},[20,165119,165120],{},"查找学生：",[36,165122,165124],{"className":30478,"code":165123,"language":30480,"meta":25,"style":25},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[42,165125,165126,165141,165145,165155,165169,165175,165179,165185],{"__ignoreMap":25},[45,165127,165128,165130,165132,165134,165136,165139],{"class":47,"line":48},[45,165129,111678],{"class":55},[45,165131,59],{"class":51},[45,165133,60705],{"class":79},[45,165135,282],{"class":55},[45,165137,165138],{"class":62},"\"请输入学生姓名:\"",[45,165140,139],{"class":55},[45,165142,165143],{"class":47,"line":66},[45,165144,2550],{"emptyLinePlaceholder":207},[45,165146,165147,165149,165151,165153],{"class":47,"line":1331},[45,165148,3175],{"class":51},[45,165150,152237],{"class":55},[45,165152,26143],{"class":51},[45,165154,152242],{"class":55},[45,165156,165157,165159,165161,165163,165165,165167],{"class":47,"line":1346},[45,165158,3251],{"class":51},[45,165160,152249],{"class":55},[45,165162,62779],{"class":62},[45,165164,4593],{"class":55},[45,165166,3099],{"class":51},[45,165168,160532],{"class":55},[45,165170,165171,165173],{"class":47,"line":1352},[45,165172,32551],{"class":79},[45,165174,150142],{"class":55},[45,165176,165177],{"class":47,"line":1366},[45,165178,31727],{"class":51},[45,165180,165181,165183],{"class":47,"line":1372},[45,165182,1852],{"class":51},[45,165184,3889],{"class":55},[45,165186,165187,165189,165191,165194],{"class":47,"line":1463},[45,165188,31399],{"class":79},[45,165190,282],{"class":55},[45,165192,165193],{"class":62},"\"没有找到\"",[45,165195,139],{"class":55},[15,165197,165199],{"id":165198},"_613-容器通用操作","6.13 容器通用操作",[20,165201,165202],{},"长度：",[36,165204,165206],{"className":30478,"code":165205,"language":30480,"meta":25,"style":25},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[42,165207,165208,165227,165237],{"__ignoreMap":25},[45,165209,165210,165212,165215,165217,165219,165221,165223,165225],{"class":47,"line":48},[45,165211,7508],{"class":79},[45,165213,165214],{"class":55},"([",[45,165216,495],{"class":79},[45,165218,12584],{"class":55},[45,165220,356],{"class":79},[45,165222,12584],{"class":55},[45,165224,350],{"class":79},[45,165226,4807],{"class":55},[45,165228,165229,165231,165233,165235],{"class":47,"line":66},[45,165230,7508],{"class":79},[45,165232,282],{"class":55},[45,165234,155980],{"class":62},[45,165236,139],{"class":55},[45,165238,165239,165241,165244,165246,165248,165250],{"class":47,"line":1331},[45,165240,7508],{"class":79},[45,165242,165243],{"class":55},"({",[45,165245,62779],{"class":62},[45,165247,51537],{"class":55},[45,165249,149988],{"class":62},[45,165251,165252],{"class":55},"})\n",[20,165254,165255],{},"最大最小：",[36,165257,165259],{"className":30478,"code":165258,"language":30480,"meta":25,"style":25},"max([1, 2, 3])\nmin([1, 2, 3])\n",[42,165260,165261,165279],{"__ignoreMap":25},[45,165262,165263,165265,165267,165269,165271,165273,165275,165277],{"class":47,"line":48},[45,165264,6165],{"class":79},[45,165266,165214],{"class":55},[45,165268,495],{"class":79},[45,165270,12584],{"class":55},[45,165272,356],{"class":79},[45,165274,12584],{"class":55},[45,165276,350],{"class":79},[45,165278,4807],{"class":55},[45,165280,165281,165284,165286,165288,165290,165292,165294,165296],{"class":47,"line":66},[45,165282,165283],{"class":79},"min",[45,165285,165214],{"class":55},[45,165287,495],{"class":79},[45,165289,12584],{"class":55},[45,165291,356],{"class":79},[45,165293,12584],{"class":55},[45,165295,350],{"class":79},[45,165297,4807],{"class":55},[20,165299,165300],{},"求和：",[36,165302,165304],{"className":30478,"code":165303,"language":30480,"meta":25,"style":25},"sum([1, 2, 3])\n",[42,165305,165306],{"__ignoreMap":25},[45,165307,165308,165311,165313,165315,165317,165319,165321,165323],{"class":47,"line":48},[45,165309,165310],{"class":79},"sum",[45,165312,165214],{"class":55},[45,165314,495],{"class":79},[45,165316,12584],{"class":55},[45,165318,356],{"class":79},[45,165320,12584],{"class":55},[45,165322,350],{"class":79},[45,165324,4807],{"class":55},[20,165326,163571],{},[36,165328,165330],{"className":30478,"code":165329,"language":30480,"meta":25,"style":25},"sorted([3, 1, 2])\n",[42,165331,165332],{"__ignoreMap":25},[45,165333,165334,165337,165339,165341,165343,165345,165347,165349],{"class":47,"line":48},[45,165335,165336],{"class":79},"sorted",[45,165338,165214],{"class":55},[45,165340,350],{"class":79},[45,165342,12584],{"class":55},[45,165344,495],{"class":79},[45,165346,12584],{"class":55},[45,165348,356],{"class":79},[45,165350,4807],{"class":55},[20,165352,165353],{},"类型转换：",[36,165355,165357],{"className":30478,"code":165356,"language":30480,"meta":25,"style":25},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[42,165358,165359,165369,165387],{"__ignoreMap":25},[45,165360,165361,165363,165365,165367],{"class":47,"line":48},[45,165362,154170],{"class":79},[45,165364,282],{"class":55},[45,165366,155980],{"class":62},[45,165368,139],{"class":55},[45,165370,165371,165373,165375,165377,165379,165381,165383,165385],{"class":47,"line":66},[45,165372,155365],{"class":79},[45,165374,165214],{"class":55},[45,165376,495],{"class":79},[45,165378,12584],{"class":55},[45,165380,356],{"class":79},[45,165382,12584],{"class":55},[45,165384,350],{"class":79},[45,165386,4807],{"class":55},[45,165388,165389,165391,165393,165395,165397,165399,165401,165403,165405,165407],{"class":47,"line":1331},[45,165390,155390],{"class":79},[45,165392,165214],{"class":55},[45,165394,495],{"class":79},[45,165396,12584],{"class":55},[45,165398,495],{"class":79},[45,165400,12584],{"class":55},[45,165402,356],{"class":79},[45,165404,12584],{"class":55},[45,165406,350],{"class":79},[45,165408,4807],{"class":55},[20,165410,165411],{},"成员判断：",[36,165413,165415],{"className":30478,"code":165414,"language":30480,"meta":25,"style":25},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[42,165416,165417,165434,165458],{"__ignoreMap":25},[45,165418,165419,165421,165423,165426,165429,165432],{"class":47,"line":48},[45,165420,30515],{"class":79},[45,165422,282],{"class":55},[45,165424,165425],{"class":62},"\"a\"",[45,165427,165428],{"class":51}," in",[45,165430,165431],{"class":62}," \"abc\"",[45,165433,139],{"class":55},[45,165435,165436,165438,165440,165442,165444,165446,165448,165450,165452,165454,165456],{"class":47,"line":66},[45,165437,30515],{"class":79},[45,165439,282],{"class":55},[45,165441,495],{"class":79},[45,165443,165428],{"class":51},[45,165445,52326],{"class":55},[45,165447,495],{"class":79},[45,165449,12584],{"class":55},[45,165451,356],{"class":79},[45,165453,12584],{"class":55},[45,165455,350],{"class":79},[45,165457,4807],{"class":55},[45,165459,165460,165462,165464,165466,165468,165470,165472,165474,165476],{"class":47,"line":1331},[45,165461,30515],{"class":79},[45,165463,282],{"class":55},[45,165465,62779],{"class":62},[45,165467,165428],{"class":51},[45,165469,4598],{"class":55},[45,165471,62779],{"class":62},[45,165473,51537],{"class":55},[45,165475,149988],{"class":62},[45,165477,165252],{"class":55},[15,165479,165481],{"id":165480},"_614-推导式","6.14 推导式",[20,165483,165484],{},"推导式用于快速生成容器。",[20,165486,165487],{},"列表推导式：",[36,165489,165491],{"className":30478,"code":165490,"language":30480,"meta":25,"style":25},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[42,165492,165493,165520],{"__ignoreMap":25},[45,165494,165495,165497,165499,165502,165504,165506,165508,165510,165512,165514,165516,165518],{"class":47,"line":48},[45,165496,164200],{"class":55},[45,165498,59],{"class":51},[45,165500,165501],{"class":55}," [i ",[45,165503,3175],{"class":51},[45,165505,9588],{"class":55},[45,165507,26143],{"class":51},[45,165509,32543],{"class":79},[45,165511,282],{"class":55},[45,165513,495],{"class":79},[45,165515,12584],{"class":55},[45,165517,621],{"class":79},[45,165519,97400],{"class":55},[45,165521,165522,165524],{"class":47,"line":66},[45,165523,30515],{"class":79},[45,165525,164416],{"class":55},[20,165527,165528],{},"带条件：",[36,165530,165532],{"className":30478,"code":165531,"language":30480,"meta":25,"style":25},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[42,165533,165534,165575],{"__ignoreMap":25},[45,165535,165536,165539,165541,165543,165545,165547,165549,165551,165553,165555,165557,165559,165561,165563,165565,165567,165569,165571,165573],{"class":47,"line":48},[45,165537,165538],{"class":55},"even_nums ",[45,165540,59],{"class":51},[45,165542,165501],{"class":55},[45,165544,3175],{"class":51},[45,165546,9588],{"class":55},[45,165548,26143],{"class":51},[45,165550,32543],{"class":79},[45,165552,282],{"class":55},[45,165554,495],{"class":79},[45,165556,12584],{"class":55},[45,165558,614],{"class":79},[45,165560,13863],{"class":55},[45,165562,1682],{"class":51},[45,165564,9588],{"class":55},[45,165566,605],{"class":51},[45,165568,14904],{"class":79},[45,165570,101659],{"class":51},[45,165572,4243],{"class":79},[45,165574,33346],{"class":55},[45,165576,165577,165579],{"class":47,"line":66},[45,165578,30515],{"class":79},[45,165580,165581],{"class":55},"(even_nums)\n",[20,165583,165584],{},"字典推导式：",[36,165586,165588],{"className":30478,"code":165587,"language":30480,"meta":25,"style":25},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[42,165589,165590,165624],{"__ignoreMap":25},[45,165591,165592,165595,165597,165600,165602,165604,165607,165609,165611,165613,165615,165617,165619,165621],{"class":47,"line":48},[45,165593,165594],{"class":55},"squares ",[45,165596,59],{"class":51},[45,165598,165599],{"class":55}," {i: i ",[45,165601,10810],{"class":51},[45,165603,14904],{"class":79},[45,165605,165606],{"class":51}," for",[45,165608,9588],{"class":55},[45,165610,26143],{"class":51},[45,165612,32543],{"class":79},[45,165614,282],{"class":55},[45,165616,495],{"class":79},[45,165618,12584],{"class":55},[45,165620,621],{"class":79},[45,165622,165623],{"class":55},")}\n",[45,165625,165626,165628],{"class":47,"line":66},[45,165627,30515],{"class":79},[45,165629,165630],{"class":55},"(squares)\n",[20,165632,165633],{},"集合推导式：",[36,165635,165637],{"className":30478,"code":165636,"language":30480,"meta":25,"style":25},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[42,165638,165639,165660],{"__ignoreMap":25},[45,165640,165641,165644,165646,165649,165651,165653,165655,165658],{"class":47,"line":48},[45,165642,165643],{"class":55},"chars ",[45,165645,59],{"class":51},[45,165647,165648],{"class":55}," {ch ",[45,165650,3175],{"class":51},[45,165652,159792],{"class":55},[45,165654,26143],{"class":51},[45,165656,165657],{"class":62}," \"hello\"",[45,165659,1716],{"class":55},[45,165661,165662,165664],{"class":47,"line":66},[45,165663,30515],{"class":79},[45,165665,165666],{"class":55},"(chars)\n",[20,165668,165669],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[15,165671,165673],{"id":165672},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[36,165675,165677],{"className":30478,"code":165676,"language":30480,"meta":25,"style":25},"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",[42,165678,165679,165687,165707,165727,165747,165767,165771,165775,165783,165797,165806,165810,165820,165832,165836,165856,165865,165869,165885,165890,165894,165908,165912,165934,165970],{"__ignoreMap":25},[45,165680,165681,165683,165685],{"class":47,"line":48},[45,165682,159816],{"class":55},[45,165684,59],{"class":51},[45,165686,55547],{"class":55},[45,165688,165689,165691,165693,165695,165697,165699,165701,165703,165705],{"class":47,"line":66},[45,165690,148485],{"class":55},[45,165692,62779],{"class":62},[45,165694,51537],{"class":55},[45,165696,149988],{"class":62},[45,165698,12584],{"class":55},[45,165700,151572],{"class":62},[45,165702,51537],{"class":55},[45,165704,1266],{"class":79},[45,165706,5080],{"class":55},[45,165708,165709,165711,165713,165715,165717,165719,165721,165723,165725],{"class":47,"line":1331},[45,165710,148485],{"class":55},[45,165712,62779],{"class":62},[45,165714,51537],{"class":55},[45,165716,151036],{"class":62},[45,165718,12584],{"class":55},[45,165720,151572],{"class":62},[45,165722,51537],{"class":55},[45,165724,1088],{"class":79},[45,165726,5080],{"class":55},[45,165728,165729,165731,165733,165735,165737,165739,165741,165743,165745],{"class":47,"line":1346},[45,165730,148485],{"class":55},[45,165732,62779],{"class":62},[45,165734,51537],{"class":55},[45,165736,159831],{"class":62},[45,165738,12584],{"class":55},[45,165740,151572],{"class":62},[45,165742,51537],{"class":55},[45,165744,683],{"class":79},[45,165746,5080],{"class":55},[45,165748,165749,165751,165753,165755,165757,165759,165761,165763,165765],{"class":47,"line":1352},[45,165750,148485],{"class":55},[45,165752,62779],{"class":62},[45,165754,51537],{"class":55},[45,165756,163410],{"class":62},[45,165758,12584],{"class":55},[45,165760,151572],{"class":62},[45,165762,51537],{"class":55},[45,165764,1159],{"class":79},[45,165766,5080],{"class":55},[45,165768,165769],{"class":47,"line":1366},[45,165770,33346],{"class":55},[45,165772,165773],{"class":47,"line":1372},[45,165774,2550],{"emptyLinePlaceholder":207},[45,165776,165777,165779,165781],{"class":47,"line":1463},[45,165778,157360],{"class":55},[45,165780,59],{"class":51},[45,165782,47433],{"class":79},[45,165784,165785,165788,165790,165793,165795],{"class":47,"line":1469},[45,165786,165787],{"class":55},"max_student ",[45,165789,59],{"class":51},[45,165791,165792],{"class":55}," students[",[45,165794,469],{"class":79},[45,165796,33346],{"class":55},[45,165798,165799,165802,165804],{"class":47,"line":1481},[45,165800,165801],{"class":55},"passed ",[45,165803,59],{"class":51},[45,165805,51938],{"class":55},[45,165807,165808],{"class":47,"line":1763},[45,165809,2550],{"emptyLinePlaceholder":207},[45,165811,165812,165814,165816,165818],{"class":47,"line":1768},[45,165813,3175],{"class":51},[45,165815,152237],{"class":55},[45,165817,26143],{"class":51},[45,165819,152242],{"class":55},[45,165821,165822,165824,165826,165828,165830],{"class":47,"line":1774},[45,165823,159407],{"class":55},[45,165825,9627],{"class":51},[45,165827,152249],{"class":55},[45,165829,151572],{"class":62},[45,165831,33346],{"class":55},[45,165833,165834],{"class":47,"line":1779},[45,165835,2550],{"emptyLinePlaceholder":207},[45,165837,165838,165840,165842,165844,165846,165848,165851,165853],{"class":47,"line":1793},[45,165839,3251],{"class":51},[45,165841,152249],{"class":55},[45,165843,151572],{"class":62},[45,165845,4593],{"class":55},[45,165847,1237],{"class":51},[45,165849,165850],{"class":55}," max_student[",[45,165852,151572],{"class":62},[45,165854,165855],{"class":55},"]:\n",[45,165857,165858,165861,165863],{"class":47,"line":1798},[45,165859,165860],{"class":55},"        max_student ",[45,165862,59],{"class":51},[45,165864,152265],{"class":55},[45,165866,165867],{"class":47,"line":1804},[45,165868,2550],{"emptyLinePlaceholder":207},[45,165870,165871,165873,165875,165877,165879,165881,165883],{"class":47,"line":1825},[45,165872,3251],{"class":51},[45,165874,152249],{"class":55},[45,165876,151572],{"class":62},[45,165878,4593],{"class":55},[45,165880,1861],{"class":51},[45,165882,157937],{"class":79},[45,165884,3889],{"class":55},[45,165886,165887],{"class":47,"line":1830},[45,165888,165889],{"class":55},"        passed.append(student)\n",[45,165891,165892],{"class":47,"line":1844},[45,165893,2550],{"emptyLinePlaceholder":207},[45,165895,165896,165898,165900,165902,165904,165906],{"class":47,"line":1849},[45,165897,163874],{"class":55},[45,165899,59],{"class":51},[45,165901,163879],{"class":55},[45,165903,861],{"class":51},[45,165905,7481],{"class":79},[45,165907,165095],{"class":55},[45,165909,165910],{"class":47,"line":1878},[45,165911,2550],{"emptyLinePlaceholder":207},[45,165913,165914,165916,165918,165920,165922,165924,165926,165928,165930,165932],{"class":47,"line":1883},[45,165915,30515],{"class":79},[45,165917,282],{"class":55},[45,165919,331],{"class":51},[45,165921,163897],{"class":62},[45,165923,1173],{"class":79},[45,165925,163902],{"class":55},[45,165927,157259],{"class":51},[45,165929,1223],{"class":79},[45,165931,89],{"class":62},[45,165933,139],{"class":55},[45,165935,165936,165938,165940,165942,165945,165947,165950,165952,165954,165956,165958,165960,165962,165964,165966,165968],{"class":47,"line":1900},[45,165937,30515],{"class":79},[45,165939,282],{"class":55},[45,165941,331],{"class":51},[45,165943,165944],{"class":62},"\"最高分学生:",[45,165946,1173],{"class":79},[45,165948,165949],{"class":55},"max_student[",[45,165951,152982],{"class":62},[45,165953,1217],{"class":55},[45,165955,1223],{"class":79},[45,165957,4598],{"class":79},[45,165959,165949],{"class":55},[45,165961,153020],{"class":62},[45,165963,1217],{"class":55},[45,165965,1223],{"class":79},[45,165967,89],{"class":62},[45,165969,139],{"class":55},[45,165971,165972,165974,165976,165978,165981,165984,165987,165989,165991],{"class":47,"line":1905},[45,165973,30515],{"class":79},[45,165975,282],{"class":55},[45,165977,331],{"class":51},[45,165979,165980],{"class":62},"\"及格人数:",[45,165982,165983],{"class":79},"{len",[45,165985,165986],{"class":55},"(passed)",[45,165988,1223],{"class":79},[45,165990,89],{"class":62},[45,165992,139],{"class":55},[15,165994,165996],{"id":165995},"_616-易错点","6.16 易错点",[233,165998,165999,166002,166005,166008,166014,166023],{},[169,166000,166001],{},"列表可变，元组和字符串不可变。",[169,166003,166004],{},"切片结束位置不包含。",[169,166006,166007],{},"字典通过 key 取值，不是通过索引。",[169,166009,166010,166011,28485],{},"空集合要用 ",[42,166012,166013],{},"set()",[169,166015,104466,166016,166019,166020,28485],{},[42,166017,166018],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[42,166021,166022],{},"get()",[169,166024,166025],{},"嵌套容器要先看清楚每一层是什么类型。",[15,166027,166029],{"id":166028},"_617-本章练习","6.17 本章练习",[233,166031,166032,166035,166038,166041,166044],{},[169,166033,166034],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[169,166036,166037],{},"输入一句话，统计每个字符出现次数。",[169,166039,166040],{},"使用集合去除列表中的重复元素。",[169,166042,166043],{},"使用字典保存一个学生的信息，并实现修改成绩。",[169,166045,166046],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[196,166048,166049],{},"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":25,"searchDepth":66,"depth":66,"links":166051},[166052,166053,166054,166055,166056,166057,166058,166059,166060,166061,166062,166063,166064,166065,166066,166067,166068],{"id":163032,"depth":66,"text":163033},{"id":163149,"depth":66,"text":163150},{"id":163239,"depth":66,"text":163240},{"id":163363,"depth":66,"text":163364},{"id":163726,"depth":66,"text":163727},{"id":163913,"depth":66,"text":163914},{"id":164032,"depth":66,"text":164033},{"id":164174,"depth":66,"text":164175},{"id":164361,"depth":66,"text":164362},{"id":164605,"depth":66,"text":164606},{"id":164815,"depth":66,"text":164816},{"id":164900,"depth":66,"text":164901},{"id":165198,"depth":66,"text":165199},{"id":165480,"depth":66,"text":165481},{"id":165672,"depth":66,"text":165673},{"id":165995,"depth":66,"text":165996},{"id":166028,"depth":66,"text":166029},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163024,"description":204},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166075,"title":166076,"body":166077,"description":204,"extension":205,"meta":168249,"navigation":207,"path":168250,"seo":168251,"stem":168252,"__hash__":168253},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166078,"toc":168224},[166079,166082,166086,166089,166169,166172,166193,166196,166200,166203,166265,166268,166285,166289,166292,166337,166339,166347,166351,166354,166436,166439,166442,166467,166470,166493,166497,166500,166502,166564,166567,166569,166620,166624,166628,166634,166739,166743,166749,166820,166824,166827,166895,166898,166978,166982,166988,167024,167027,167030,167140,167146,167150,167153,167225,167228,167232,167236,167241,167303,167307,167312,167380,167384,167389,167505,167509,167512,167592,167595,167599,167602,167706,167708,167723,167726,167730,167868,167876,167880,167882,167893,167895,168153,168157,168189,168193,168221],[10,166080,166076],{"id":166081},"_7-函数进阶",[15,166083,166085],{"id":166084},"_71-多返回值","7.1 多返回值",[20,166087,166088],{},"Python 函数可以返回多个值，本质上返回的是元组。",[36,166090,166092],{"className":30478,"code":166091,"language":30480,"meta":25,"style":25},"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",[42,166093,166094,166103,166111,166119,166128,166135,166139,166143,166152,166158],{"__ignoreMap":25},[45,166095,166096,166098,166101],{"class":47,"line":48},[45,166097,32047],{"class":51},[45,166099,166100],{"class":69}," get_info",[45,166102,32053],{"class":55},[45,166104,166105,166107,166109],{"class":47,"line":66},[45,166106,152470],{"class":55},[45,166108,59],{"class":51},[45,166110,149453],{"class":62},[45,166112,166113,166115,166117],{"class":47,"line":1331},[45,166114,152486],{"class":55},[45,166116,59],{"class":51},[45,166118,146651],{"class":79},[45,166120,166121,166123,166125],{"class":47,"line":1346},[45,166122,152501],{"class":55},[45,166124,59],{"class":51},[45,166126,166127],{"class":79}," 95\n",[45,166129,166130,166132],{"class":47,"line":1352},[45,166131,4240],{"class":51},[45,166133,166134],{"class":55}," name, age, score\n",[45,166136,166137],{"class":47,"line":1366},[45,166138,2550],{"emptyLinePlaceholder":207},[45,166140,166141],{"class":47,"line":1372},[45,166142,2550],{"emptyLinePlaceholder":207},[45,166144,166145,166147,166149],{"class":47,"line":1463},[45,166146,161406],{"class":55},[45,166148,59],{"class":51},[45,166150,166151],{"class":55}," get_info()\n",[45,166153,166154,166156],{"class":47,"line":1469},[45,166155,30515],{"class":79},[45,166157,76685],{"class":55},[45,166159,166160,166162,166164,166166],{"class":47,"line":1481},[45,166161,30515],{"class":79},[45,166163,282],{"class":55},[45,166165,103207],{"class":79},[45,166167,166168],{"class":55},"(result))\n",[20,166170,166171],{},"可以直接解包：",[36,166173,166175],{"className":30478,"code":166174,"language":30480,"meta":25,"style":25},"name, age, score = get_info()\nprint(name, age, score)\n",[42,166176,166177,166186],{"__ignoreMap":25},[45,166178,166179,166182,166184],{"class":47,"line":48},[45,166180,166181],{"class":55},"name, age, score ",[45,166183,59],{"class":51},[45,166185,166151],{"class":55},[45,166187,166188,166190],{"class":47,"line":66},[45,166189,30515],{"class":79},[45,166191,166192],{"class":55},"(name, age, score)\n",[20,166194,166195],{},"返回多个值适合函数需要同时给出多个结果时使用。",[15,166197,166199],{"id":166198},"_72-位置参数","7.2 位置参数",[20,166201,166202],{},"位置参数按顺序传递。",[36,166204,166206],{"className":30478,"code":166205,"language":30480,"meta":25,"style":25},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[42,166207,166208,166216,166244,166248,166252],{"__ignoreMap":25},[45,166209,166210,166212,166214],{"class":47,"line":48},[45,166211,32047],{"class":51},[45,166213,149472],{"class":69},[45,166215,149475],{"class":55},[45,166217,166218,166220,166222,166224,166226,166228,166230,166232,166234,166236,166238,166240,166242],{"class":47,"line":66},[45,166219,31399],{"class":79},[45,166221,282],{"class":55},[45,166223,331],{"class":51},[45,166225,149486],{"class":62},[45,166227,1173],{"class":79},[45,166229,79910],{"class":55},[45,166231,1223],{"class":79},[45,166233,149495],{"class":62},[45,166235,1173],{"class":79},[45,166237,70321],{"class":55},[45,166239,1223],{"class":79},[45,166241,149504],{"class":62},[45,166243,139],{"class":55},[45,166245,166246],{"class":47,"line":1331},[45,166247,2550],{"emptyLinePlaceholder":207},[45,166249,166250],{"class":47,"line":1346},[45,166251,2550],{"emptyLinePlaceholder":207},[45,166253,166254,166257,166259,166261,166263],{"class":47,"line":1352},[45,166255,166256],{"class":55},"introduce(",[45,166258,149988],{"class":62},[45,166260,12584],{"class":55},[45,166262,927],{"class":79},[45,166264,139],{"class":55},[20,166266,166267],{},"顺序错了就会得到错误含义：",[36,166269,166271],{"className":30478,"code":166270,"language":30480,"meta":25,"style":25},"introduce(18, \"小明\")\n",[42,166272,166273],{"__ignoreMap":25},[45,166274,166275,166277,166279,166281,166283],{"class":47,"line":48},[45,166276,166256],{"class":55},[45,166278,927],{"class":79},[45,166280,12584],{"class":55},[45,166282,149988],{"class":62},[45,166284,139],{"class":55},[15,166286,166288],{"id":166287},"_73-关键字参数","7.3 关键字参数",[20,166290,166291],{},"关键字参数按参数名传递。",[36,166293,166295],{"className":30478,"code":166294,"language":30480,"meta":25,"style":25},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[42,166296,166297,166317],{"__ignoreMap":25},[45,166298,166299,166301,166303,166305,166307,166309,166311,166313,166315],{"class":47,"line":48},[45,166300,166256],{"class":55},[45,166302,79910],{"class":5366},[45,166304,59],{"class":51},[45,166306,149988],{"class":62},[45,166308,12584],{"class":55},[45,166310,70321],{"class":5366},[45,166312,59],{"class":51},[45,166314,927],{"class":79},[45,166316,139],{"class":55},[45,166318,166319,166321,166323,166325,166327,166329,166331,166333,166335],{"class":47,"line":66},[45,166320,166256],{"class":55},[45,166322,70321],{"class":5366},[45,166324,59],{"class":51},[45,166326,927],{"class":79},[45,166328,12584],{"class":55},[45,166330,79910],{"class":5366},[45,166332,59],{"class":51},[45,166334,149988],{"class":62},[45,166336,139],{"class":55},[20,166338,118034],{},[233,166340,166341,166344],{},[169,166342,166343],{},"顺序不容易错。",[169,166345,166346],{},"调用时可读性更强。",[15,166348,166350],{"id":166349},"_74-默认参数","7.4 默认参数",[20,166352,166353],{},"默认参数给参数设置默认值。",[36,166355,166357],{"className":30478,"code":166356,"language":30480,"meta":25,"style":25},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[42,166358,166359,166375,166405,166409,166413,166423],{"__ignoreMap":25},[45,166360,166361,166363,166365,166368,166370,166373],{"class":47,"line":48},[45,166362,32047],{"class":51},[45,166364,122193],{"class":69},[45,166366,166367],{"class":55},"(host, port",[45,166369,59],{"class":51},[45,166371,166372],{"class":79},"3306",[45,166374,30886],{"class":55},[45,166376,166377,166379,166381,166383,166386,166388,166390,166392,166394,166396,166399,166401,166403],{"class":47,"line":66},[45,166378,31399],{"class":79},[45,166380,282],{"class":55},[45,166382,331],{"class":51},[45,166384,166385],{"class":62},"\"连接",[45,166387,1173],{"class":79},[45,166389,27495],{"class":55},[45,166391,1223],{"class":79},[45,166393,1136],{"class":62},[45,166395,1173],{"class":79},[45,166397,166398],{"class":55},"port",[45,166400,1223],{"class":79},[45,166402,89],{"class":62},[45,166404,139],{"class":55},[45,166406,166407],{"class":47,"line":1331},[45,166408,2550],{"emptyLinePlaceholder":207},[45,166410,166411],{"class":47,"line":1346},[45,166412,2550],{"emptyLinePlaceholder":207},[45,166414,166415,166418,166421],{"class":47,"line":1352},[45,166416,166417],{"class":55},"connect(",[45,166419,166420],{"class":62},"\"localhost\"",[45,166422,139],{"class":55},[45,166424,166425,166427,166429,166431,166434],{"class":47,"line":1366},[45,166426,166417],{"class":55},[45,166428,166420],{"class":62},[45,166430,12584],{"class":55},[45,166432,166433],{"class":79},"6379",[45,166435,139],{"class":55},[20,166437,166438],{},"注意：默认参数必须放在非默认参数后面。",[20,166440,166441],{},"错误：",[36,166443,166445],{"className":30478,"code":166444,"language":30480,"meta":25,"style":25},"def connect(port=3306, host):\n    pass\n",[42,166446,166447,166463],{"__ignoreMap":25},[45,166448,166449,166451,166453,166456,166458,166460],{"class":47,"line":48},[45,166450,32047],{"class":51},[45,166452,122193],{"class":69},[45,166454,166455],{"class":55},"(port",[45,166457,59],{"class":51},[45,166459,166372],{"class":79},[45,166461,166462],{"class":55},", host):\n",[45,166464,166465],{"class":47,"line":66},[45,166466,149637],{"class":51},[20,166468,166469],{},"正确：",[36,166471,166473],{"className":30478,"code":166472,"language":30480,"meta":25,"style":25},"def connect(host, port=3306):\n    pass\n",[42,166474,166475,166489],{"__ignoreMap":25},[45,166476,166477,166479,166481,166483,166485,166487],{"class":47,"line":48},[45,166478,32047],{"class":51},[45,166480,122193],{"class":69},[45,166482,166367],{"class":55},[45,166484,59],{"class":51},[45,166486,166372],{"class":79},[45,166488,30886],{"class":55},[45,166490,166491],{"class":47,"line":66},[45,166492,149637],{"class":51},[15,166494,166496],{"id":166495},"_75-默认参数的坑","7.5 默认参数的坑",[20,166498,166499],{},"不要使用可变对象作为默认参数。",[20,166501,157723],{},[36,166503,166505],{"className":30478,"code":166504,"language":30480,"meta":25,"style":25},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[42,166506,166507,166522,166527,166534,166538,166542,166553],{"__ignoreMap":25},[45,166508,166509,166511,166514,166517,166519],{"class":47,"line":48},[45,166510,32047],{"class":51},[45,166512,166513],{"class":69}," add_item",[45,166515,166516],{"class":55},"(item, items",[45,166518,59],{"class":51},[45,166520,166521],{"class":55},"[]):\n",[45,166523,166524],{"class":47,"line":66},[45,166525,166526],{"class":55},"    items.append(item)\n",[45,166528,166529,166531],{"class":47,"line":1331},[45,166530,4240],{"class":51},[45,166532,166533],{"class":55}," items\n",[45,166535,166536],{"class":47,"line":1346},[45,166537,2550],{"emptyLinePlaceholder":207},[45,166539,166540],{"class":47,"line":1352},[45,166541,2550],{"emptyLinePlaceholder":207},[45,166543,166544,166546,166549,166551],{"class":47,"line":1366},[45,166545,30515],{"class":79},[45,166547,166548],{"class":55},"(add_item(",[45,166550,165425],{"class":62},[45,166552,30597],{"class":55},[45,166554,166555,166557,166559,166562],{"class":47,"line":1372},[45,166556,30515],{"class":79},[45,166558,166548],{"class":55},[45,166560,166561],{"class":62},"\"b\"",[45,166563,30597],{"class":55},[20,166565,166566],{},"第二次调用会复用第一次的列表。",[20,166568,155988],{},[36,166570,166572],{"className":30478,"code":166571,"language":30480,"meta":25,"style":25},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[42,166573,166574,166588,166601,166610,166614],{"__ignoreMap":25},[45,166575,166576,166578,166580,166582,166584,166586],{"class":47,"line":48},[45,166577,32047],{"class":51},[45,166579,166513],{"class":69},[45,166581,166516],{"class":55},[45,166583,59],{"class":51},[45,166585,95786],{"class":79},[45,166587,30886],{"class":55},[45,166589,166590,166592,166595,166597,166599],{"class":47,"line":66},[45,166591,3251],{"class":51},[45,166593,166594],{"class":55}," items ",[45,166596,39027],{"class":51},[45,166598,39033],{"class":79},[45,166600,3889],{"class":55},[45,166602,166603,166606,166608],{"class":47,"line":1331},[45,166604,166605],{"class":55},"        items ",[45,166607,59],{"class":51},[45,166609,51938],{"class":55},[45,166611,166612],{"class":47,"line":1346},[45,166613,166526],{"class":55},[45,166615,166616,166618],{"class":47,"line":1352},[45,166617,4240],{"class":51},[45,166619,166533],{"class":55},[15,166621,166623],{"id":166622},"_76-不定长参数","7.6 不定长参数",[249,166625,166627],{"id":166626},"_761-args","7.6.1 *args",[20,166629,166630,166633],{},[42,166631,166632],{},"*args"," 接收任意数量的位置参数，得到元组。",[36,166635,166637],{"className":30478,"code":166636,"language":30480,"meta":25,"style":25},"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",[42,166638,166639,166652,166660,166671,166680,166686,166690,166694,166713],{"__ignoreMap":25},[45,166640,166641,166643,166645,166647,166649],{"class":47,"line":48},[45,166642,32047],{"class":51},[45,166644,5359],{"class":69},[45,166646,282],{"class":55},[45,166648,732],{"class":51},[45,166650,166651],{"class":55},"args):\n",[45,166653,166654,166656,166658],{"class":47,"line":66},[45,166655,159407],{"class":55},[45,166657,59],{"class":51},[45,166659,47433],{"class":79},[45,166661,166662,166664,166666,166668],{"class":47,"line":1331},[45,166663,3351],{"class":51},[45,166665,156280],{"class":55},[45,166667,26143],{"class":51},[45,166669,166670],{"class":55}," args:\n",[45,166672,166673,166675,166677],{"class":47,"line":1346},[45,166674,160082],{"class":55},[45,166676,9627],{"class":51},[45,166678,166679],{"class":55}," num\n",[45,166681,166682,166684],{"class":47,"line":1352},[45,166683,4240],{"class":51},[45,166685,162387],{"class":55},[45,166687,166688],{"class":47,"line":1366},[45,166689,2550],{"emptyLinePlaceholder":207},[45,166691,166692],{"class":47,"line":1372},[45,166693,2550],{"emptyLinePlaceholder":207},[45,166695,166696,166698,166701,166703,166705,166707,166709,166711],{"class":47,"line":1463},[45,166697,30515],{"class":79},[45,166699,166700],{"class":55},"(add(",[45,166702,495],{"class":79},[45,166704,12584],{"class":55},[45,166706,356],{"class":79},[45,166708,12584],{"class":55},[45,166710,350],{"class":79},[45,166712,30597],{"class":55},[45,166714,166715,166717,166719,166721,166723,166725,166727,166729,166731,166733,166735,166737],{"class":47,"line":1469},[45,166716,30515],{"class":79},[45,166718,166700],{"class":55},[45,166720,495],{"class":79},[45,166722,12584],{"class":55},[45,166724,356],{"class":79},[45,166726,12584],{"class":55},[45,166728,350],{"class":79},[45,166730,12584],{"class":55},[45,166732,570],{"class":79},[45,166734,12584],{"class":55},[45,166736,596],{"class":79},[45,166738,30597],{"class":55},[249,166740,166742],{"id":166741},"_762-kwargs","7.6.2 **kwargs",[20,166744,166745,166748],{},[42,166746,166747],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[36,166750,166752],{"className":30478,"code":166751,"language":30480,"meta":25,"style":25},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[42,166753,166754,166767,166778,166784,166788,166792],{"__ignoreMap":25},[45,166755,166756,166758,166760,166762,166764],{"class":47,"line":48},[45,166757,32047],{"class":51},[45,166759,162045],{"class":69},[45,166761,282],{"class":55},[45,166763,10810],{"class":51},[45,166765,166766],{"class":55},"kwargs):\n",[45,166768,166769,166771,166773,166775],{"class":47,"line":66},[45,166770,3351],{"class":51},[45,166772,164885],{"class":55},[45,166774,26143],{"class":51},[45,166776,166777],{"class":55}," kwargs.items():\n",[45,166779,166780,166782],{"class":47,"line":1331},[45,166781,32551],{"class":79},[45,166783,164897],{"class":55},[45,166785,166786],{"class":47,"line":1346},[45,166787,2550],{"emptyLinePlaceholder":207},[45,166789,166790],{"class":47,"line":1352},[45,166791,2550],{"emptyLinePlaceholder":207},[45,166793,166794,166796,166798,166800,166802,166804,166806,166808,166810,166812,166814,166816,166818],{"class":47,"line":1366},[45,166795,162110],{"class":55},[45,166797,79910],{"class":5366},[45,166799,59],{"class":51},[45,166801,149988],{"class":62},[45,166803,12584],{"class":55},[45,166805,70321],{"class":5366},[45,166807,59],{"class":51},[45,166809,927],{"class":79},[45,166811,12584],{"class":55},[45,166813,70372],{"class":5366},[45,166815,59],{"class":51},[45,166817,69369],{"class":62},[45,166819,139],{"class":55},[15,166821,166823],{"id":166822},"_77-参数解包","7.7 参数解包",[20,166825,166826],{},"列表或元组解包为位置参数：",[36,166828,166830],{"className":30478,"code":166829,"language":30480,"meta":25,"style":25},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[42,166831,166832,166841,166856,166860,166864,166884],{"__ignoreMap":25},[45,166833,166834,166836,166838],{"class":47,"line":48},[45,166835,32047],{"class":51},[45,166837,5359],{"class":69},[45,166839,166840],{"class":55},"(a, b, c):\n",[45,166842,166843,166845,166847,166849,166851,166853],{"class":47,"line":66},[45,166844,4240],{"class":51},[45,166846,11018],{"class":55},[45,166848,758],{"class":51},[45,166850,11031],{"class":55},[45,166852,758],{"class":51},[45,166854,166855],{"class":55}," c\n",[45,166857,166858],{"class":47,"line":1331},[45,166859,2550],{"emptyLinePlaceholder":207},[45,166861,166862],{"class":47,"line":1346},[45,166863,2550],{"emptyLinePlaceholder":207},[45,166865,166866,166868,166870,166872,166874,166876,166878,166880,166882],{"class":47,"line":1352},[45,166867,164200],{"class":55},[45,166869,59],{"class":51},[45,166871,52326],{"class":55},[45,166873,495],{"class":79},[45,166875,12584],{"class":55},[45,166877,356],{"class":79},[45,166879,12584],{"class":55},[45,166881,350],{"class":79},[45,166883,33346],{"class":55},[45,166885,166886,166888,166890,166892],{"class":47,"line":1366},[45,166887,30515],{"class":79},[45,166889,166700],{"class":55},[45,166891,732],{"class":51},[45,166893,166894],{"class":55},"nums))\n",[20,166896,166897],{},"字典解包为关键字参数：",[36,166899,166901],{"className":30478,"code":166900,"language":30480,"meta":25,"style":25},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[42,166902,166903,166911,166937,166941,166945,166969],{"__ignoreMap":25},[45,166904,166905,166907,166909],{"class":47,"line":48},[45,166906,32047],{"class":51},[45,166908,149472],{"class":69},[45,166910,149475],{"class":55},[45,166912,166913,166915,166917,166919,166921,166923,166925,166927,166929,166931,166933,166935],{"class":47,"line":66},[45,166914,31399],{"class":79},[45,166916,282],{"class":55},[45,166918,331],{"class":51},[45,166920,89],{"class":62},[45,166922,1173],{"class":79},[45,166924,79910],{"class":55},[45,166926,1223],{"class":79},[45,166928,4598],{"class":79},[45,166930,70321],{"class":55},[45,166932,1223],{"class":79},[45,166934,89],{"class":62},[45,166936,139],{"class":55},[45,166938,166939],{"class":47,"line":1331},[45,166940,2550],{"emptyLinePlaceholder":207},[45,166942,166943],{"class":47,"line":1346},[45,166944,2550],{"emptyLinePlaceholder":207},[45,166946,166947,166949,166951,166953,166955,166957,166959,166961,166963,166965,166967],{"class":47,"line":1352},[45,166948,116414],{"class":55},[45,166950,59],{"class":51},[45,166952,4598],{"class":55},[45,166954,62779],{"class":62},[45,166956,51537],{"class":55},[45,166958,149988],{"class":62},[45,166960,12584],{"class":55},[45,166962,69224],{"class":62},[45,166964,51537],{"class":55},[45,166966,927],{"class":79},[45,166968,1716],{"class":55},[45,166970,166971,166973,166975],{"class":47,"line":1366},[45,166972,166256],{"class":55},[45,166974,10810],{"class":51},[45,166976,166977],{"class":55},"info)\n",[15,166979,166981],{"id":166980},"_78-匿名函数lambda","7.8 匿名函数lambda",[20,166983,166984,166987],{},[42,166985,166986],{},"lambda"," 用于定义简单匿名函数。",[36,166989,166991],{"className":30478,"code":166990,"language":30480,"meta":25,"style":25},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[42,166992,166993,167010],{"__ignoreMap":25},[45,166994,166995,166998,167000,167003,167006,167008],{"class":47,"line":48},[45,166996,166997],{"class":55},"add ",[45,166999,59],{"class":51},[45,167001,167002],{"class":51}," lambda",[45,167004,167005],{"class":55}," a, b: a ",[45,167007,758],{"class":51},[45,167009,151204],{"class":55},[45,167011,167012,167014,167016,167018,167020,167022],{"class":47,"line":66},[45,167013,30515],{"class":79},[45,167015,166700],{"class":55},[45,167017,495],{"class":79},[45,167019,12584],{"class":55},[45,167021,356],{"class":79},[45,167023,30597],{"class":55},[20,167025,167026],{},"常和排序、过滤等函数一起使用。",[20,167028,167029],{},"按分数排序：",[36,167031,167033],{"className":30478,"code":167032,"language":30480,"meta":25,"style":25},"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",[42,167034,167035,167043,167063,167083,167103,167107,167111,167134],{"__ignoreMap":25},[45,167036,167037,167039,167041],{"class":47,"line":48},[45,167038,159816],{"class":55},[45,167040,59],{"class":51},[45,167042,55547],{"class":55},[45,167044,167045,167047,167049,167051,167053,167055,167057,167059,167061],{"class":47,"line":66},[45,167046,148485],{"class":55},[45,167048,62779],{"class":62},[45,167050,51537],{"class":55},[45,167052,149988],{"class":62},[45,167054,12584],{"class":55},[45,167056,151572],{"class":62},[45,167058,51537],{"class":55},[45,167060,1266],{"class":79},[45,167062,5080],{"class":55},[45,167064,167065,167067,167069,167071,167073,167075,167077,167079,167081],{"class":47,"line":1331},[45,167066,148485],{"class":55},[45,167068,62779],{"class":62},[45,167070,51537],{"class":55},[45,167072,151036],{"class":62},[45,167074,12584],{"class":55},[45,167076,151572],{"class":62},[45,167078,51537],{"class":55},[45,167080,1088],{"class":79},[45,167082,5080],{"class":55},[45,167084,167085,167087,167089,167091,167093,167095,167097,167099,167101],{"class":47,"line":1346},[45,167086,148485],{"class":55},[45,167088,62779],{"class":62},[45,167090,51537],{"class":55},[45,167092,159831],{"class":62},[45,167094,12584],{"class":55},[45,167096,151572],{"class":62},[45,167098,51537],{"class":55},[45,167100,683],{"class":79},[45,167102,5080],{"class":55},[45,167104,167105],{"class":47,"line":1352},[45,167106,33346],{"class":55},[45,167108,167109],{"class":47,"line":1366},[45,167110,2550],{"emptyLinePlaceholder":207},[45,167112,167113,167116,167118,167120,167122,167124,167126,167128,167130,167132],{"class":47,"line":1372},[45,167114,167115],{"class":55},"students.sort(",[45,167117,154046],{"class":5366},[45,167119,154049],{"class":51},[45,167121,154052],{"class":55},[45,167123,151572],{"class":62},[45,167125,112302],{"class":55},[45,167127,163628],{"class":5366},[45,167129,59],{"class":51},[45,167131,31576],{"class":79},[45,167133,139],{"class":55},[45,167135,167136,167138],{"class":47,"line":1463},[45,167137,30515],{"class":79},[45,167139,165095],{"class":55},[20,167141,167142,167143,167145],{},"如果逻辑复杂，不要硬写 ",[42,167144,166986],{},"，定义普通函数更清晰。",[15,167147,167149],{"id":167148},"_79-函数作为参数","7.9 函数作为参数",[20,167151,167152],{},"函数可以作为参数传给另一个函数。",[36,167154,167156],{"className":30478,"code":167155,"language":30480,"meta":25,"style":25},"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",[42,167157,167158,167166,167176,167180,167184,167194,167201,167205,167209],{"__ignoreMap":25},[45,167159,167160,167162,167164],{"class":47,"line":48},[45,167161,32047],{"class":51},[45,167163,5359],{"class":69},[45,167165,151193],{"class":55},[45,167167,167168,167170,167172,167174],{"class":47,"line":66},[45,167169,4240],{"class":51},[45,167171,11018],{"class":55},[45,167173,758],{"class":51},[45,167175,151204],{"class":55},[45,167177,167178],{"class":47,"line":1331},[45,167179,2550],{"emptyLinePlaceholder":207},[45,167181,167182],{"class":47,"line":1346},[45,167183,2550],{"emptyLinePlaceholder":207},[45,167185,167186,167188,167191],{"class":47,"line":1352},[45,167187,32047],{"class":51},[45,167189,167190],{"class":69}," calculate",[45,167192,167193],{"class":55},"(a, b, func):\n",[45,167195,167196,167198],{"class":47,"line":1366},[45,167197,4240],{"class":51},[45,167199,167200],{"class":55}," func(a, b)\n",[45,167202,167203],{"class":47,"line":1372},[45,167204,2550],{"emptyLinePlaceholder":207},[45,167206,167207],{"class":47,"line":1463},[45,167208,2550],{"emptyLinePlaceholder":207},[45,167210,167211,167213,167216,167218,167220,167222],{"class":47,"line":1469},[45,167212,30515],{"class":79},[45,167214,167215],{"class":55},"(calculate(",[45,167217,723],{"class":79},[45,167219,12584],{"class":55},[45,167221,977],{"class":79},[45,167223,167224],{"class":55},", add))\n",[20,167226,167227],{},"这种思想在排序、回调、框架中经常出现。",[15,167229,167231],{"id":167230},"_710-mapfiltersorted","7.10 map、filter、sorted",[249,167233,167235],{"id":167234},"_7101-map","7.10.1 map",[20,167237,167238,167240],{},[42,167239,74144],{}," 对每个元素执行函数。",[36,167242,167244],{"className":30478,"code":167243,"language":30480,"meta":25,"style":25},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[42,167245,167246,167270,167293],{"__ignoreMap":25},[45,167247,167248,167250,167252,167254,167256,167258,167260,167262,167264,167266,167268],{"class":47,"line":48},[45,167249,164200],{"class":55},[45,167251,59],{"class":51},[45,167253,52326],{"class":55},[45,167255,495],{"class":79},[45,167257,12584],{"class":55},[45,167259,356],{"class":79},[45,167261,12584],{"class":55},[45,167263,350],{"class":79},[45,167265,12584],{"class":55},[45,167267,570],{"class":79},[45,167269,33346],{"class":55},[45,167271,167272,167274,167276,167279,167281,167283,167286,167288,167290],{"class":47,"line":66},[45,167273,161406],{"class":55},[45,167275,59],{"class":51},[45,167277,167278],{"class":79}," map",[45,167280,282],{"class":55},[45,167282,166986],{"class":51},[45,167284,167285],{"class":55}," x: x ",[45,167287,732],{"class":51},[45,167289,14904],{"class":79},[45,167291,167292],{"class":55},", nums)\n",[45,167294,167295,167297,167299,167301],{"class":47,"line":1331},[45,167296,30515],{"class":79},[45,167298,282],{"class":55},[45,167300,154170],{"class":79},[45,167302,166168],{"class":55},[249,167304,167306],{"id":167305},"_7102-filter","7.10.2 filter",[20,167308,167309,167311],{},[42,167310,80151],{}," 保留满足条件的元素。",[36,167313,167315],{"className":30478,"code":167314,"language":30480,"meta":25,"style":25},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[42,167316,167317,167345,167370],{"__ignoreMap":25},[45,167318,167319,167321,167323,167325,167327,167329,167331,167333,167335,167337,167339,167341,167343],{"class":47,"line":48},[45,167320,164200],{"class":55},[45,167322,59],{"class":51},[45,167324,52326],{"class":55},[45,167326,495],{"class":79},[45,167328,12584],{"class":55},[45,167330,356],{"class":79},[45,167332,12584],{"class":55},[45,167334,350],{"class":79},[45,167336,12584],{"class":55},[45,167338,570],{"class":79},[45,167340,12584],{"class":55},[45,167342,596],{"class":79},[45,167344,33346],{"class":55},[45,167346,167347,167349,167351,167354,167356,167358,167360,167362,167364,167366,167368],{"class":47,"line":66},[45,167348,161406],{"class":55},[45,167350,59],{"class":51},[45,167352,167353],{"class":79}," filter",[45,167355,282],{"class":55},[45,167357,166986],{"class":51},[45,167359,167285],{"class":55},[45,167361,605],{"class":51},[45,167363,14904],{"class":79},[45,167365,101659],{"class":51},[45,167367,4243],{"class":79},[45,167369,167292],{"class":55},[45,167371,167372,167374,167376,167378],{"class":47,"line":1331},[45,167373,30515],{"class":79},[45,167375,282],{"class":55},[45,167377,154170],{"class":79},[45,167379,166168],{"class":55},[249,167381,167383],{"id":167382},"_7103-sorted","7.10.3 sorted",[20,167385,167386,167388],{},[42,167387,165336],{}," 返回排序后的新列表。",[36,167390,167392],{"className":30478,"code":167391,"language":30480,"meta":25,"style":25},"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",[42,167393,167394,167402,167422,167442,167462,167466,167470,167499],{"__ignoreMap":25},[45,167395,167396,167398,167400],{"class":47,"line":48},[45,167397,159816],{"class":55},[45,167399,59],{"class":51},[45,167401,55547],{"class":55},[45,167403,167404,167406,167408,167410,167412,167414,167416,167418,167420],{"class":47,"line":66},[45,167405,148485],{"class":55},[45,167407,62779],{"class":62},[45,167409,51537],{"class":55},[45,167411,149988],{"class":62},[45,167413,12584],{"class":55},[45,167415,151572],{"class":62},[45,167417,51537],{"class":55},[45,167419,1266],{"class":79},[45,167421,5080],{"class":55},[45,167423,167424,167426,167428,167430,167432,167434,167436,167438,167440],{"class":47,"line":1331},[45,167425,148485],{"class":55},[45,167427,62779],{"class":62},[45,167429,51537],{"class":55},[45,167431,151036],{"class":62},[45,167433,12584],{"class":55},[45,167435,151572],{"class":62},[45,167437,51537],{"class":55},[45,167439,1088],{"class":79},[45,167441,5080],{"class":55},[45,167443,167444,167446,167448,167450,167452,167454,167456,167458,167460],{"class":47,"line":1346},[45,167445,148485],{"class":55},[45,167447,62779],{"class":62},[45,167449,51537],{"class":55},[45,167451,159831],{"class":62},[45,167453,12584],{"class":55},[45,167455,151572],{"class":62},[45,167457,51537],{"class":55},[45,167459,683],{"class":79},[45,167461,5080],{"class":55},[45,167463,167464],{"class":47,"line":1352},[45,167465,33346],{"class":55},[45,167467,167468],{"class":47,"line":1366},[45,167469,2550],{"emptyLinePlaceholder":207},[45,167471,167472,167474,167476,167478,167481,167483,167485,167487,167489,167491,167493,167495,167497],{"class":47,"line":1372},[45,167473,161406],{"class":55},[45,167475,59],{"class":51},[45,167477,163704],{"class":79},[45,167479,167480],{"class":55},"(students, ",[45,167482,154046],{"class":5366},[45,167484,154049],{"class":51},[45,167486,154052],{"class":55},[45,167488,151572],{"class":62},[45,167490,112302],{"class":55},[45,167492,163628],{"class":5366},[45,167494,59],{"class":51},[45,167496,31576],{"class":79},[45,167498,139],{"class":55},[45,167500,167501,167503],{"class":47,"line":1463},[45,167502,30515],{"class":79},[45,167504,76685],{"class":55},[15,167506,167508],{"id":167507},"_711-闭包入门","7.11 闭包入门",[20,167510,167511],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[36,167513,167515],{"className":30478,"code":167514,"language":30480,"meta":25,"style":25},"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",[42,167516,167517,167527,167537,167548,167552,167559,167563,167567,167581],{"__ignoreMap":25},[45,167518,167519,167521,167524],{"class":47,"line":48},[45,167520,32047],{"class":51},[45,167522,167523],{"class":69}," outer",[45,167525,167526],{"class":55},"(base):\n",[45,167528,167529,167531,167534],{"class":47,"line":66},[45,167530,30901],{"class":51},[45,167532,167533],{"class":69}," inner",[45,167535,167536],{"class":55},"(num):\n",[45,167538,167539,167541,167544,167546],{"class":47,"line":1331},[45,167540,14901],{"class":51},[45,167542,167543],{"class":55}," base ",[45,167545,758],{"class":51},[45,167547,166679],{"class":55},[45,167549,167550],{"class":47,"line":1346},[45,167551,2550],{"emptyLinePlaceholder":207},[45,167553,167554,167556],{"class":47,"line":1352},[45,167555,4240],{"class":51},[45,167557,167558],{"class":55}," inner\n",[45,167560,167561],{"class":47,"line":1366},[45,167562,2550],{"emptyLinePlaceholder":207},[45,167564,167565],{"class":47,"line":1372},[45,167566,2550],{"emptyLinePlaceholder":207},[45,167568,167569,167572,167574,167577,167579],{"class":47,"line":1463},[45,167570,167571],{"class":55},"add_10 ",[45,167573,59],{"class":51},[45,167575,167576],{"class":55}," outer(",[45,167578,723],{"class":79},[45,167580,139],{"class":55},[45,167582,167583,167585,167588,167590],{"class":47,"line":1469},[45,167584,30515],{"class":79},[45,167586,167587],{"class":55},"(add_10(",[45,167589,596],{"class":79},[45,167591,30597],{"class":55},[20,167593,167594],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[15,167596,167598],{"id":167597},"_712-装饰器入门","7.12 装饰器入门",[20,167600,167601],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[36,167603,167605],{"className":30478,"code":167604,"language":30480,"meta":25,"style":25},"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",[42,167606,167607,167616,167625,167636,167641,167652,167656,167663,167667,167671,167676,167684,167694,167698,167702],{"__ignoreMap":25},[45,167608,167609,167611,167613],{"class":47,"line":48},[45,167610,32047],{"class":51},[45,167612,87291],{"class":69},[45,167614,167615],{"class":55},"(func):\n",[45,167617,167618,167620,167623],{"class":47,"line":66},[45,167619,30901],{"class":51},[45,167621,167622],{"class":69}," wrapper",[45,167624,32053],{"class":55},[45,167626,167627,167629,167631,167634],{"class":47,"line":1331},[45,167628,32551],{"class":79},[45,167630,282],{"class":55},[45,167632,167633],{"class":62},"\"函数开始执行\"",[45,167635,139],{"class":55},[45,167637,167638],{"class":47,"line":1346},[45,167639,167640],{"class":55},"        func()\n",[45,167642,167643,167645,167647,167650],{"class":47,"line":1352},[45,167644,32551],{"class":79},[45,167646,282],{"class":55},[45,167648,167649],{"class":62},"\"函数执行结束\"",[45,167651,139],{"class":55},[45,167653,167654],{"class":47,"line":1366},[45,167655,2550],{"emptyLinePlaceholder":207},[45,167657,167658,167660],{"class":47,"line":1372},[45,167659,4240],{"class":51},[45,167661,167662],{"class":55}," wrapper\n",[45,167664,167665],{"class":47,"line":1463},[45,167666,2550],{"emptyLinePlaceholder":207},[45,167668,167669],{"class":47,"line":1469},[45,167670,2550],{"emptyLinePlaceholder":207},[45,167672,167673],{"class":47,"line":1481},[45,167674,167675],{"class":69},"@log\n",[45,167677,167678,167680,167682],{"class":47,"line":1763},[45,167679,32047],{"class":51},[45,167681,161096],{"class":69},[45,167683,32053],{"class":55},[45,167685,167686,167688,167690,167692],{"class":47,"line":1768},[45,167687,31399],{"class":79},[45,167689,282],{"class":55},[45,167691,5994],{"class":62},[45,167693,139],{"class":55},[45,167695,167696],{"class":47,"line":1774},[45,167697,2550],{"emptyLinePlaceholder":207},[45,167699,167700],{"class":47,"line":1779},[45,167701,2550],{"emptyLinePlaceholder":207},[45,167703,167704],{"class":47,"line":1793},[45,167705,161131],{"class":55},[20,167707,158374],{},[36,167709,167711],{"className":30478,"code":167710,"language":30480,"meta":25,"style":25},"say_hello = log(say_hello)\n",[42,167712,167713],{"__ignoreMap":25},[45,167714,167715,167718,167720],{"class":47,"line":48},[45,167716,167717],{"class":55},"say_hello ",[45,167719,59],{"class":51},[45,167721,167722],{"class":55}," log(say_hello)\n",[20,167724,167725],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[15,167727,167729],{"id":167728},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[36,167731,167733],{"className":30478,"code":167732,"language":30480,"meta":25,"style":25},"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",[42,167734,167735,167743,167760,167770,167789,167799,167806,167810,167816,167820,167824,167828,167836,167846,167850,167854],{"__ignoreMap":25},[45,167736,167737,167739,167741],{"class":47,"line":48},[45,167738,32047],{"class":51},[45,167740,87291],{"class":69},[45,167742,167615],{"class":55},[45,167744,167745,167747,167749,167751,167753,167756,167758],{"class":47,"line":66},[45,167746,30901],{"class":51},[45,167748,167622],{"class":69},[45,167750,282],{"class":55},[45,167752,732],{"class":51},[45,167754,167755],{"class":55},"args, ",[45,167757,10810],{"class":51},[45,167759,166766],{"class":55},[45,167761,167762,167764,167766,167768],{"class":47,"line":1331},[45,167763,32551],{"class":79},[45,167765,282],{"class":55},[45,167767,167633],{"class":62},[45,167769,139],{"class":55},[45,167771,167772,167775,167777,167780,167782,167784,167786],{"class":47,"line":1346},[45,167773,167774],{"class":55},"        result ",[45,167776,59],{"class":51},[45,167778,167779],{"class":55}," func(",[45,167781,732],{"class":51},[45,167783,167755],{"class":55},[45,167785,10810],{"class":51},[45,167787,167788],{"class":55},"kwargs)\n",[45,167790,167791,167793,167795,167797],{"class":47,"line":1352},[45,167792,32551],{"class":79},[45,167794,282],{"class":55},[45,167796,167649],{"class":62},[45,167798,139],{"class":55},[45,167800,167801,167803],{"class":47,"line":1366},[45,167802,14901],{"class":51},[45,167804,167805],{"class":55}," result\n",[45,167807,167808],{"class":47,"line":1372},[45,167809,2550],{"emptyLinePlaceholder":207},[45,167811,167812,167814],{"class":47,"line":1463},[45,167813,4240],{"class":51},[45,167815,167662],{"class":55},[45,167817,167818],{"class":47,"line":1469},[45,167819,2550],{"emptyLinePlaceholder":207},[45,167821,167822],{"class":47,"line":1481},[45,167823,2550],{"emptyLinePlaceholder":207},[45,167825,167826],{"class":47,"line":1763},[45,167827,167675],{"class":69},[45,167829,167830,167832,167834],{"class":47,"line":1768},[45,167831,32047],{"class":51},[45,167833,5359],{"class":69},[45,167835,151193],{"class":55},[45,167837,167838,167840,167842,167844],{"class":47,"line":1774},[45,167839,4240],{"class":51},[45,167841,11018],{"class":55},[45,167843,758],{"class":51},[45,167845,151204],{"class":55},[45,167847,167848],{"class":47,"line":1779},[45,167849,2550],{"emptyLinePlaceholder":207},[45,167851,167852],{"class":47,"line":1793},[45,167853,2550],{"emptyLinePlaceholder":207},[45,167855,167856,167858,167860,167862,167864,167866],{"class":47,"line":1798},[45,167857,30515],{"class":79},[45,167859,166700],{"class":55},[45,167861,723],{"class":79},[45,167863,12584],{"class":55},[45,167865,977],{"class":79},[45,167867,30597],{"class":55},[20,167869,167870,167871,101118,167873,167875],{},"这个写法使用 ",[42,167872,166632],{},[42,167874,166747],{}," 接收原函数的所有参数。",[15,167877,167879],{"id":167878},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[20,167881,123392],{},[233,167883,167884,167887,167890],{},[169,167885,167886],{},"给定一组学生数据。",[169,167888,167889],{},"封装函数，根据传入规则筛选学生。",[169,167891,167892],{},"筛选及格、优秀、未成年学生。",[20,167894,10184],{},[36,167896,167898],{"className":30478,"code":167897,"language":30480,"meta":25,"style":25},"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",[42,167899,167900,167908,167936,167964,167992,167996,168000,168004,168014,168022,168032,168039,168044,168050,168054,168058,168082,168105,168128,168132,168139,168146],{"__ignoreMap":25},[45,167901,167902,167904,167906],{"class":47,"line":48},[45,167903,159816],{"class":55},[45,167905,59],{"class":51},[45,167907,55547],{"class":55},[45,167909,167910,167912,167914,167916,167918,167920,167922,167924,167926,167928,167930,167932,167934],{"class":47,"line":66},[45,167911,148485],{"class":55},[45,167913,62779],{"class":62},[45,167915,51537],{"class":55},[45,167917,149988],{"class":62},[45,167919,12584],{"class":55},[45,167921,69224],{"class":62},[45,167923,51537],{"class":55},[45,167925,927],{"class":79},[45,167927,12584],{"class":55},[45,167929,151572],{"class":62},[45,167931,51537],{"class":55},[45,167933,1266],{"class":79},[45,167935,5080],{"class":55},[45,167937,167938,167940,167942,167944,167946,167948,167950,167952,167954,167956,167958,167960,167962],{"class":47,"line":1331},[45,167939,148485],{"class":55},[45,167941,62779],{"class":62},[45,167943,51537],{"class":55},[45,167945,151036],{"class":62},[45,167947,12584],{"class":55},[45,167949,69224],{"class":62},[45,167951,51537],{"class":55},[45,167953,902],{"class":79},[45,167955,12584],{"class":55},[45,167957,151572],{"class":62},[45,167959,51537],{"class":55},[45,167961,1088],{"class":79},[45,167963,5080],{"class":55},[45,167965,167966,167968,167970,167972,167974,167976,167978,167980,167982,167984,167986,167988,167990],{"class":47,"line":1346},[45,167967,148485],{"class":55},[45,167969,62779],{"class":62},[45,167971,51537],{"class":55},[45,167973,159831],{"class":62},[45,167975,12584],{"class":55},[45,167977,69224],{"class":62},[45,167979,51537],{"class":55},[45,167981,952],{"class":79},[45,167983,12584],{"class":55},[45,167985,151572],{"class":62},[45,167987,51537],{"class":55},[45,167989,1159],{"class":79},[45,167991,5080],{"class":55},[45,167993,167994],{"class":47,"line":1352},[45,167995,33346],{"class":55},[45,167997,167998],{"class":47,"line":1366},[45,167999,2550],{"emptyLinePlaceholder":207},[45,168001,168002],{"class":47,"line":1372},[45,168003,2550],{"emptyLinePlaceholder":207},[45,168005,168006,168008,168011],{"class":47,"line":1463},[45,168007,32047],{"class":51},[45,168009,168010],{"class":69}," filter_students",[45,168012,168013],{"class":55},"(students, condition):\n",[45,168015,168016,168018,168020],{"class":47,"line":1469},[45,168017,161323],{"class":55},[45,168019,59],{"class":51},[45,168021,51938],{"class":55},[45,168023,168024,168026,168028,168030],{"class":47,"line":1481},[45,168025,3351],{"class":51},[45,168027,152237],{"class":55},[45,168029,26143],{"class":51},[45,168031,152242],{"class":55},[45,168033,168034,168036],{"class":47,"line":1763},[45,168035,2647],{"class":51},[45,168037,168038],{"class":55}," condition(student):\n",[45,168040,168041],{"class":47,"line":1768},[45,168042,168043],{"class":55},"            result.append(student)\n",[45,168045,168046,168048],{"class":47,"line":1774},[45,168047,4240],{"class":51},[45,168049,167805],{"class":55},[45,168051,168052],{"class":47,"line":1779},[45,168053,2550],{"emptyLinePlaceholder":207},[45,168055,168056],{"class":47,"line":1793},[45,168057,2550],{"emptyLinePlaceholder":207},[45,168059,168060,168062,168064,168067,168069,168072,168074,168076,168078,168080],{"class":47,"line":1798},[45,168061,165801],{"class":55},[45,168063,59],{"class":51},[45,168065,168066],{"class":55}," filter_students(students, ",[45,168068,166986],{"class":51},[45,168070,168071],{"class":55}," s: s[",[45,168073,151572],{"class":62},[45,168075,4593],{"class":55},[45,168077,1861],{"class":51},[45,168079,157937],{"class":79},[45,168081,139],{"class":55},[45,168083,168084,168087,168089,168091,168093,168095,168097,168099,168101,168103],{"class":47,"line":1804},[45,168085,168086],{"class":55},"excellent ",[45,168088,59],{"class":51},[45,168090,168066],{"class":55},[45,168092,166986],{"class":51},[45,168094,168071],{"class":55},[45,168096,151572],{"class":62},[45,168098,4593],{"class":55},[45,168100,1861],{"class":51},[45,168102,157888],{"class":79},[45,168104,139],{"class":55},[45,168106,168107,168110,168112,168114,168116,168118,168120,168122,168124,168126],{"class":47,"line":1825},[45,168108,168109],{"class":55},"under_age ",[45,168111,59],{"class":51},[45,168113,168066],{"class":55},[45,168115,166986],{"class":51},[45,168117,168071],{"class":55},[45,168119,69224],{"class":62},[45,168121,4593],{"class":55},[45,168123,1187],{"class":51},[45,168125,156385],{"class":79},[45,168127,139],{"class":55},[45,168129,168130],{"class":47,"line":1830},[45,168131,2550],{"emptyLinePlaceholder":207},[45,168133,168134,168136],{"class":47,"line":1844},[45,168135,30515],{"class":79},[45,168137,168138],{"class":55},"(passed)\n",[45,168140,168141,168143],{"class":47,"line":1849},[45,168142,30515],{"class":79},[45,168144,168145],{"class":55},"(excellent)\n",[45,168147,168148,168150],{"class":47,"line":1878},[45,168149,30515],{"class":79},[45,168151,168152],{"class":55},"(under_age)\n",[15,168154,168156],{"id":168155},"_715-易错点","7.15 易错点",[233,168158,168159,168162,168170,168175,168186],{},[169,168160,168161],{},"默认参数不要写可变对象。",[169,168163,168164,168166,168167,168169],{},[42,168165,166632],{}," 是元组，",[42,168168,166747],{}," 是字典。",[169,168171,168172,168174],{},[42,168173,166986],{}," 只适合简单表达式。",[169,168176,168177,101118,168179,168181,168182,168185],{},[42,168178,74144],{},[42,168180,80151],{}," 的结果是迭代器，常用 ",[42,168183,168184],{},"list()"," 转换查看。",[169,168187,168188],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[15,168190,168192],{"id":168191},"_716-本章练习","7.16 本章练习",[233,168194,168195,168202,168208,168213,168218],{},[169,168196,168197,168198,168201],{},"写函数 ",[42,168199,168200],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[169,168203,168197,168204,168207],{},[42,168205,168206],{},"print_user(**kwargs)","，输出用户所有字段。",[169,168209,104466,168210,168212],{},[42,168211,166986],{}," 对学生列表按年龄排序。",[169,168214,104466,168215,168217],{},[42,168216,80151],{}," 找出成绩不及格的学生。",[169,168219,168220],{},"写一个装饰器，统计函数执行前后的提示信息。",[196,168222,168223],{},"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":25,"searchDepth":66,"depth":66,"links":168225},[168226,168227,168228,168229,168230,168231,168235,168236,168237,168238,168243,168244,168245,168246,168247,168248],{"id":166084,"depth":66,"text":166085},{"id":166198,"depth":66,"text":166199},{"id":166287,"depth":66,"text":166288},{"id":166349,"depth":66,"text":166350},{"id":166495,"depth":66,"text":166496},{"id":166622,"depth":66,"text":166623,"children":168232},[168233,168234],{"id":166626,"depth":1331,"text":166627},{"id":166741,"depth":1331,"text":166742},{"id":166822,"depth":66,"text":166823},{"id":166980,"depth":66,"text":166981},{"id":167148,"depth":66,"text":167149},{"id":167230,"depth":66,"text":167231,"children":168239},[168240,168241,168242],{"id":167234,"depth":1331,"text":167235},{"id":167305,"depth":1331,"text":167306},{"id":167382,"depth":1331,"text":167383},{"id":167507,"depth":66,"text":167508},{"id":167597,"depth":66,"text":167598},{"id":167728,"depth":66,"text":167729},{"id":167878,"depth":66,"text":167879},{"id":168155,"depth":66,"text":168156},{"id":168191,"depth":66,"text":168192},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166076,"description":204},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168255,"title":168256,"body":168257,"description":204,"extension":205,"meta":170776,"navigation":207,"path":170777,"seo":170778,"stem":170779,"__hash__":170780},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168258,"toc":170751},[168259,168262,168266,168269,168272,168303,168307,168311,168314,168341,168345,168348,168399,168402,168417,168420,168455,168459,168461,168485,168488,168548,168552,168556,168559,168616,168619,168639,168643,168646,168709,168713,168716,168772,168779,168803,168807,168810,168873,168877,168882,168933,168936,168940,168945,169012,169015,169097,169101,169106,169157,169160,169164,169167,169170,169178,169181,169227,169230,169276,169280,169286,169330,169333,169379,169382,169422,169425,169486,169490,169493,169583,169586,169728,169731,169798,169802,169805,169808,169949,169952,170030,170033,170209,170213,170215,170226,170228,170427,170431,170675,170679,170713,170717,170748],[10,168260,168256],{"id":168261},"_8-文件操作",[15,168263,168265],{"id":168264},"_81-文件操作的意义","8.1 文件操作的意义",[20,168267,168268],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[20,168270,168271],{},"常见文件类型：",[233,168273,168274,168280,168286,168292,168298],{},[169,168275,168276,168279],{},[42,168277,168278],{},".txt","：普通文本。",[169,168281,168282,168285],{},[42,168283,168284],{},".csv","：表格文本。",[169,168287,168288,168291],{},[42,168289,168290],{},".json","：结构化数据。",[169,168293,168294,168297],{},[42,168295,168296],{},".log","：日志文件。",[169,168299,168300,168302],{},[42,168301,146452],{},"：Python 源代码。",[15,168304,168306],{"id":168305},"_82-路径","8.2 路径",[249,168308,168310],{"id":168309},"_821-相对路径","8.2.1 相对路径",[20,168312,168313],{},"相对当前运行目录：",[36,168315,168317],{"className":30478,"code":168316,"language":30480,"meta":25,"style":25},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[42,168318,168319],{"__ignoreMap":25},[45,168320,168321,168323,168325,168327,168329,168331,168333,168335,168337,168339],{"class":47,"line":48},[45,168322,87015],{"class":79},[45,168324,282],{"class":55},[45,168326,146896],{"class":62},[45,168328,12584],{"class":55},[45,168330,146901],{"class":62},[45,168332,12584],{"class":55},[45,168334,146906],{"class":5366},[45,168336,59],{"class":51},[45,168338,146911],{"class":62},[45,168340,139],{"class":55},[249,168342,168344],{"id":168343},"_822-绝对路径","8.2.2 绝对路径",[20,168346,168347],{},"从根目录或盘符开始：",[36,168349,168351],{"className":30478,"code":168350,"language":30480,"meta":25,"style":25},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[42,168352,168353,168376],{"__ignoreMap":25},[45,168354,168355,168357,168359,168362,168364,168366,168368,168370,168372,168374],{"class":47,"line":48},[45,168356,87015],{"class":79},[45,168358,282],{"class":55},[45,168360,168361],{"class":62},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[45,168363,12584],{"class":55},[45,168365,146901],{"class":62},[45,168367,12584],{"class":55},[45,168369,146906],{"class":5366},[45,168371,59],{"class":51},[45,168373,146911],{"class":62},[45,168375,139],{"class":55},[45,168377,168378,168380,168382,168385,168387,168389,168391,168393,168395,168397],{"class":47,"line":66},[45,168379,87015],{"class":79},[45,168381,282],{"class":55},[45,168383,168384],{"class":62},"\"D:\u002Fdata\u002Fdata.txt\"",[45,168386,12584],{"class":55},[45,168388,146901],{"class":62},[45,168390,12584],{"class":55},[45,168392,146906],{"class":5366},[45,168394,59],{"class":51},[45,168396,146911],{"class":62},[45,168398,139],{"class":55},[20,168400,168401],{},"Windows 路径建议写成：",[36,168403,168405],{"className":30478,"code":168404,"language":30480,"meta":25,"style":25},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[42,168406,168407],{"__ignoreMap":25},[45,168408,168409,168412,168414],{"class":47,"line":48},[45,168410,168411],{"class":55},"path ",[45,168413,59],{"class":51},[45,168415,168416],{"class":62}," \"D:\u002Fdata\u002Fdata.txt\"\n",[20,168418,168419],{},"或原始字符串：",[36,168421,168423],{"className":30478,"code":168422,"language":30480,"meta":25,"style":25},"path = r\"D:\\data\\data.txt\"\n",[42,168424,168425],{"__ignoreMap":25},[45,168426,168427,168429,168431,168433,168435,168438,168441,168444,168446,168448,168450,168453],{"class":47,"line":48},[45,168428,168411],{"class":55},[45,168430,59],{"class":51},[45,168432,17270],{"class":51},[45,168434,89],{"class":62},[45,168436,168437],{"class":48077},"D:",[45,168439,168440],{"class":79},"\\d",[45,168442,168443],{"class":48077},"ata",[45,168445,168440],{"class":79},[45,168447,168443],{"class":48077},[45,168449,835],{"class":79},[45,168451,168452],{"class":48077},"txt",[45,168454,152],{"class":62},[15,168456,168458],{"id":168457},"_83-open函数","8.3 open函数",[20,168460,5331],{},[36,168462,168464],{"className":30478,"code":168463,"language":30480,"meta":25,"style":25},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[42,168465,168466],{"__ignoreMap":25},[45,168467,168468,168470,168472,168474,168477,168479,168481,168483],{"class":47,"line":48},[45,168469,45454],{"class":5366},[45,168471,13713],{"class":51},[45,168473,146891],{"class":79},[45,168475,168476],{"class":55},"(文件路径, 打开模式, ",[45,168478,146906],{"class":5366},[45,168480,59],{"class":51},[45,168482,146911],{"class":62},[45,168484,139],{"class":55},[20,168486,168487],{},"常见模式：",[415,168489,168490,168499],{},[418,168491,168492],{},[421,168493,168494,168497],{},[424,168495,168496],{},"模式",[424,168498,25969],{},[462,168500,168501,168510,168519,168528,168538],{},[421,168502,168503,168507],{},[467,168504,168505],{},[42,168506,947],{},[467,168508,168509],{},"只读，文件不存在会报错",[421,168511,168512,168516],{},[467,168513,168514],{},[42,168515,1072],{},[467,168517,168518],{},"只写，文件不存在会创建，存在会清空",[421,168520,168521,168525],{},[467,168522,168523],{},[42,168524,516],{},[467,168526,168527],{},"追加，文件不存在会创建",[421,168529,168530,168535],{},[467,168531,168532],{},[42,168533,168534],{},"rb",[467,168536,168537],{},"二进制只读",[421,168539,168540,168545],{},[467,168541,168542],{},[42,168543,168544],{},"wb",[467,168546,168547],{},"二进制只写",[15,168549,168551],{"id":168550},"_84-读取文件","8.4 读取文件",[249,168553,168555],{"id":168554},"_841-read","8.4.1 read",[20,168557,168558],{},"一次读取全部内容：",[36,168560,168562],{"className":30478,"code":168561,"language":30480,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[42,168563,168564,168590,168602,168609],{"__ignoreMap":25},[45,168565,168566,168568,168570,168572,168574,168576,168578,168580,168582,168584,168586,168588],{"class":47,"line":48},[45,168567,45454],{"class":5366},[45,168569,13713],{"class":51},[45,168571,146891],{"class":79},[45,168573,282],{"class":55},[45,168575,146896],{"class":62},[45,168577,12584],{"class":55},[45,168579,146901],{"class":62},[45,168581,12584],{"class":55},[45,168583,146906],{"class":5366},[45,168585,59],{"class":51},[45,168587,146911],{"class":62},[45,168589,139],{"class":55},[45,168591,168592,168595,168597,168599],{"class":47,"line":66},[45,168593,168594],{"class":55},"content ",[45,168596,59],{"class":51},[45,168598,148253],{"class":5366},[45,168600,168601],{"class":55},".read()\n",[45,168603,168604,168606],{"class":47,"line":1331},[45,168605,30515],{"class":79},[45,168607,168608],{"class":55},"(content)\n",[45,168610,168611,168613],{"class":47,"line":1346},[45,168612,45454],{"class":5366},[45,168614,168615],{"class":55},".close()\n",[20,168617,168618],{},"可以指定读取字符数：",[36,168620,168622],{"className":30478,"code":168621,"language":30480,"meta":25,"style":25},"content = file.read(10)\n",[42,168623,168624],{"__ignoreMap":25},[45,168625,168626,168628,168630,168632,168635,168637],{"class":47,"line":48},[45,168627,168594],{"class":55},[45,168629,59],{"class":51},[45,168631,148253],{"class":5366},[45,168633,168634],{"class":55},".read(",[45,168636,723],{"class":79},[45,168638,139],{"class":55},[249,168640,168642],{"id":168641},"_842-readline","8.4.2 readline",[20,168644,168645],{},"一次读取一行：",[36,168647,168649],{"className":30478,"code":168648,"language":30480,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[42,168650,168651,168677,168681,168692,168699,168703],{"__ignoreMap":25},[45,168652,168653,168655,168657,168659,168661,168663,168665,168667,168669,168671,168673,168675],{"class":47,"line":48},[45,168654,45454],{"class":5366},[45,168656,13713],{"class":51},[45,168658,146891],{"class":79},[45,168660,282],{"class":55},[45,168662,146896],{"class":62},[45,168664,12584],{"class":55},[45,168666,146901],{"class":62},[45,168668,12584],{"class":55},[45,168670,146906],{"class":5366},[45,168672,59],{"class":51},[45,168674,146911],{"class":62},[45,168676,139],{"class":55},[45,168678,168679],{"class":47,"line":66},[45,168680,2550],{"emptyLinePlaceholder":207},[45,168682,168683,168685,168687,168689],{"class":47,"line":1331},[45,168684,147352],{"class":55},[45,168686,59],{"class":51},[45,168688,148253],{"class":5366},[45,168690,168691],{"class":55},".readline()\n",[45,168693,168694,168696],{"class":47,"line":1346},[45,168695,30515],{"class":79},[45,168697,168698],{"class":55},"(line)\n",[45,168700,168701],{"class":47,"line":1352},[45,168702,2550],{"emptyLinePlaceholder":207},[45,168704,168705,168707],{"class":47,"line":1366},[45,168706,45454],{"class":5366},[45,168708,168615],{"class":55},[249,168710,168712],{"id":168711},"_843-readlines","8.4.3 readlines",[20,168714,168715],{},"读取所有行，返回列表：",[36,168717,168719],{"className":30478,"code":168718,"language":30480,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[42,168720,168721,168747,168759,168766],{"__ignoreMap":25},[45,168722,168723,168725,168727,168729,168731,168733,168735,168737,168739,168741,168743,168745],{"class":47,"line":48},[45,168724,45454],{"class":5366},[45,168726,13713],{"class":51},[45,168728,146891],{"class":79},[45,168730,282],{"class":55},[45,168732,146896],{"class":62},[45,168734,12584],{"class":55},[45,168736,146901],{"class":62},[45,168738,12584],{"class":55},[45,168740,146906],{"class":5366},[45,168742,59],{"class":51},[45,168744,146911],{"class":62},[45,168746,139],{"class":55},[45,168748,168749,168752,168754,168756],{"class":47,"line":66},[45,168750,168751],{"class":55},"lines ",[45,168753,59],{"class":51},[45,168755,148253],{"class":5366},[45,168757,168758],{"class":55},".readlines()\n",[45,168760,168761,168763],{"class":47,"line":1331},[45,168762,30515],{"class":79},[45,168764,168765],{"class":55},"(lines)\n",[45,168767,168768,168770],{"class":47,"line":1346},[45,168769,45454],{"class":5366},[45,168771,168615],{"class":55},[20,168773,168774,168775,168778],{},"每一行通常带有换行符，可以用 ",[42,168776,168777],{},"strip()"," 去掉：",[36,168780,168782],{"className":30478,"code":168781,"language":30480,"meta":25,"style":25},"for line in lines:\n    print(line.strip())\n",[42,168783,168784,168796],{"__ignoreMap":25},[45,168785,168786,168788,168791,168793],{"class":47,"line":48},[45,168787,3175],{"class":51},[45,168789,168790],{"class":55}," line ",[45,168792,26143],{"class":51},[45,168794,168795],{"class":55}," lines:\n",[45,168797,168798,168800],{"class":47,"line":66},[45,168799,31399],{"class":79},[45,168801,168802],{"class":55},"(line.strip())\n",[249,168804,168806],{"id":168805},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[20,168808,168809],{},"推荐读取大文件时使用：",[36,168811,168813],{"className":30478,"code":168812,"language":30480,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[42,168814,168815,168841,168845,168857,168863,168867],{"__ignoreMap":25},[45,168816,168817,168819,168821,168823,168825,168827,168829,168831,168833,168835,168837,168839],{"class":47,"line":48},[45,168818,45454],{"class":5366},[45,168820,13713],{"class":51},[45,168822,146891],{"class":79},[45,168824,282],{"class":55},[45,168826,146896],{"class":62},[45,168828,12584],{"class":55},[45,168830,146901],{"class":62},[45,168832,12584],{"class":55},[45,168834,146906],{"class":5366},[45,168836,59],{"class":51},[45,168838,146911],{"class":62},[45,168840,139],{"class":55},[45,168842,168843],{"class":47,"line":66},[45,168844,2550],{"emptyLinePlaceholder":207},[45,168846,168847,168849,168851,168853,168855],{"class":47,"line":1331},[45,168848,3175],{"class":51},[45,168850,168790],{"class":55},[45,168852,26143],{"class":51},[45,168854,148253],{"class":5366},[45,168856,3889],{"class":55},[45,168858,168859,168861],{"class":47,"line":1346},[45,168860,31399],{"class":79},[45,168862,168802],{"class":55},[45,168864,168865],{"class":47,"line":1352},[45,168866,2550],{"emptyLinePlaceholder":207},[45,168868,168869,168871],{"class":47,"line":1366},[45,168870,45454],{"class":5366},[45,168872,168615],{"class":55},[15,168874,168876],{"id":168875},"_85-with语句","8.5 with语句",[20,168878,168879,168881],{},[42,168880,107933],{}," 会自动关闭文件，推荐使用。",[36,168883,168885],{"className":30478,"code":168884,"language":30480,"meta":25,"style":25},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[42,168886,168887,168917,168927],{"__ignoreMap":25},[45,168888,168889,168891,168893,168895,168897,168899,168901,168903,168905,168907,168909,168911,168913,168915],{"class":47,"line":48},[45,168890,107933],{"class":51},[45,168892,146891],{"class":79},[45,168894,282],{"class":55},[45,168896,146896],{"class":62},[45,168898,12584],{"class":55},[45,168900,146901],{"class":62},[45,168902,12584],{"class":55},[45,168904,146906],{"class":5366},[45,168906,59],{"class":51},[45,168908,146911],{"class":62},[45,168910,13863],{"class":55},[45,168912,31483],{"class":51},[45,168914,148253],{"class":5366},[45,168916,3889],{"class":55},[45,168918,168919,168921,168923,168925],{"class":47,"line":66},[45,168920,146923],{"class":55},[45,168922,59],{"class":51},[45,168924,148253],{"class":5366},[45,168926,168601],{"class":55},[45,168928,168929,168931],{"class":47,"line":1331},[45,168930,31399],{"class":79},[45,168932,168608],{"class":55},[20,168934,168935],{},"等价于打开文件、读取、最后关闭，但更安全。",[15,168937,168939],{"id":168938},"_86-写入文件","8.6 写入文件",[20,168941,168942,168944],{},[42,168943,1072],{}," 模式会清空原文件。",[36,168946,168948],{"className":30478,"code":168947,"language":30480,"meta":25,"style":25},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[42,168949,168950,168980,168997],{"__ignoreMap":25},[45,168951,168952,168954,168956,168958,168960,168962,168964,168966,168968,168970,168972,168974,168976,168978],{"class":47,"line":48},[45,168953,107933],{"class":51},[45,168955,146891],{"class":79},[45,168957,282],{"class":55},[45,168959,146896],{"class":62},[45,168961,12584],{"class":55},[45,168963,152076],{"class":62},[45,168965,12584],{"class":55},[45,168967,146906],{"class":5366},[45,168969,59],{"class":51},[45,168971,146911],{"class":62},[45,168973,13863],{"class":55},[45,168975,31483],{"class":51},[45,168977,148253],{"class":5366},[45,168979,3889],{"class":55},[45,168981,168982,168985,168988,168991,168993,168995],{"class":47,"line":66},[45,168983,168984],{"class":5366},"    file",[45,168986,168987],{"class":55},".write(",[45,168989,168990],{"class":62},"\"hello",[45,168992,156625],{"class":79},[45,168994,89],{"class":62},[45,168996,139],{"class":55},[45,168998,168999,169001,169003,169006,169008,169010],{"class":47,"line":1331},[45,169000,168984],{"class":5366},[45,169002,168987],{"class":55},[45,169004,169005],{"class":62},"\"python",[45,169007,156625],{"class":79},[45,169009,89],{"class":62},[45,169011,139],{"class":55},[20,169013,169014],{},"写入多行：",[36,169016,169018],{"className":30478,"code":169017,"language":30480,"meta":25,"style":25},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[42,169019,169020,169055,169059,169090],{"__ignoreMap":25},[45,169021,169022,169024,169026,169028,169031,169033,169035,169037,169040,169042,169044,169046,169049,169051,169053],{"class":47,"line":48},[45,169023,168751],{"class":55},[45,169025,59],{"class":51},[45,169027,52326],{"class":55},[45,169029,169030],{"class":62},"\"小明,18",[45,169032,156625],{"class":79},[45,169034,89],{"class":62},[45,169036,12584],{"class":55},[45,169038,169039],{"class":62},"\"小红,17",[45,169041,156625],{"class":79},[45,169043,89],{"class":62},[45,169045,12584],{"class":55},[45,169047,169048],{"class":62},"\"小刚,19",[45,169050,156625],{"class":79},[45,169052,89],{"class":62},[45,169054,33346],{"class":55},[45,169056,169057],{"class":47,"line":66},[45,169058,2550],{"emptyLinePlaceholder":207},[45,169060,169061,169063,169065,169067,169070,169072,169074,169076,169078,169080,169082,169084,169086,169088],{"class":47,"line":1331},[45,169062,107933],{"class":51},[45,169064,146891],{"class":79},[45,169066,282],{"class":55},[45,169068,169069],{"class":62},"\"students.txt\"",[45,169071,12584],{"class":55},[45,169073,152076],{"class":62},[45,169075,12584],{"class":55},[45,169077,146906],{"class":5366},[45,169079,59],{"class":51},[45,169081,146911],{"class":62},[45,169083,13863],{"class":55},[45,169085,31483],{"class":51},[45,169087,148253],{"class":5366},[45,169089,3889],{"class":55},[45,169091,169092,169094],{"class":47,"line":1346},[45,169093,168984],{"class":5366},[45,169095,169096],{"class":55},".writelines(lines)\n",[15,169098,169100],{"id":169099},"_87-追加文件","8.7 追加文件",[20,169102,169103,169105],{},[42,169104,516],{}," 模式不会清空原内容，而是在末尾追加。",[36,169107,169109],{"className":30478,"code":169108,"language":30480,"meta":25,"style":25},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[42,169110,169111,169142],{"__ignoreMap":25},[45,169112,169113,169115,169117,169119,169122,169124,169126,169128,169130,169132,169134,169136,169138,169140],{"class":47,"line":48},[45,169114,107933],{"class":51},[45,169116,146891],{"class":79},[45,169118,282],{"class":55},[45,169120,169121],{"class":62},"\"log.txt\"",[45,169123,12584],{"class":55},[45,169125,165425],{"class":62},[45,169127,12584],{"class":55},[45,169129,146906],{"class":5366},[45,169131,59],{"class":51},[45,169133,146911],{"class":62},[45,169135,13863],{"class":55},[45,169137,31483],{"class":51},[45,169139,148253],{"class":5366},[45,169141,3889],{"class":55},[45,169143,169144,169146,169148,169151,169153,169155],{"class":47,"line":66},[45,169145,168984],{"class":5366},[45,169147,168987],{"class":55},[45,169149,169150],{"class":62},"\"程序启动",[45,169152,156625],{"class":79},[45,169154,89],{"class":62},[45,169156,139],{"class":55},[20,169158,169159],{},"日志类文件常用追加模式。",[15,169161,169163],{"id":169162},"_88-文件编码","8.8 文件编码",[20,169165,169166],{},"编码决定文字如何保存为字节。",[20,169168,169169],{},"常见编码：",[233,169171,169172,169175],{},[169,169173,169174],{},"UTF-8：推荐。",[169,169176,169177],{},"GBK：部分 Windows 中文文件常见。",[20,169179,169180],{},"读取文件乱码时，可以尝试：",[36,169182,169184],{"className":30478,"code":169183,"language":30480,"meta":25,"style":25},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[42,169185,169186,169217],{"__ignoreMap":25},[45,169187,169188,169190,169192,169194,169196,169198,169200,169202,169204,169206,169209,169211,169213,169215],{"class":47,"line":48},[45,169189,107933],{"class":51},[45,169191,146891],{"class":79},[45,169193,282],{"class":55},[45,169195,146896],{"class":62},[45,169197,12584],{"class":55},[45,169199,146901],{"class":62},[45,169201,12584],{"class":55},[45,169203,146906],{"class":5366},[45,169205,59],{"class":51},[45,169207,169208],{"class":62},"\"gbk\"",[45,169210,13863],{"class":55},[45,169212,31483],{"class":51},[45,169214,148253],{"class":5366},[45,169216,3889],{"class":55},[45,169218,169219,169221,169223,169225],{"class":47,"line":66},[45,169220,146923],{"class":55},[45,169222,59],{"class":51},[45,169224,148253],{"class":5366},[45,169226,168601],{"class":55},[20,169228,169229],{},"写文件时建议统一 UTF-8：",[36,169231,169233],{"className":30478,"code":169232,"language":30480,"meta":25,"style":25},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[42,169234,169235,169265],{"__ignoreMap":25},[45,169236,169237,169239,169241,169243,169245,169247,169249,169251,169253,169255,169257,169259,169261,169263],{"class":47,"line":48},[45,169238,107933],{"class":51},[45,169240,146891],{"class":79},[45,169242,282],{"class":55},[45,169244,146896],{"class":62},[45,169246,12584],{"class":55},[45,169248,152076],{"class":62},[45,169250,12584],{"class":55},[45,169252,146906],{"class":5366},[45,169254,59],{"class":51},[45,169256,146911],{"class":62},[45,169258,13863],{"class":55},[45,169260,31483],{"class":51},[45,169262,148253],{"class":5366},[45,169264,3889],{"class":55},[45,169266,169267,169269,169271,169274],{"class":47,"line":66},[45,169268,168984],{"class":5366},[45,169270,168987],{"class":55},[45,169272,169273],{"class":62},"\"中文内容\"",[45,169275,139],{"class":55},[15,169277,169279],{"id":169278},"_89-pathlib","8.9 pathlib",[20,169281,169282,169285],{},[42,169283,169284],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[36,169287,169289],{"className":30478,"code":169288,"language":30480,"meta":25,"style":25},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[42,169290,169291,169301,169305,169323],{"__ignoreMap":25},[45,169292,169293,169295,169297,169299],{"class":47,"line":48},[45,169294,30837],{"class":51},[45,169296,108411],{"class":55},[45,169298,30492],{"class":51},[45,169300,108416],{"class":55},[45,169302,169303],{"class":47,"line":66},[45,169304,2550],{"emptyLinePlaceholder":207},[45,169306,169307,169309,169311,169313,169316,169318,169320],{"class":47,"line":1331},[45,169308,168411],{"class":55},[45,169310,59],{"class":51},[45,169312,108645],{"class":55},[45,169314,169315],{"class":62},"\"data\"",[45,169317,13863],{"class":55},[45,169319,861],{"class":51},[45,169321,169322],{"class":62}," \"students.txt\"\n",[45,169324,169325,169327],{"class":47,"line":1346},[45,169326,30515],{"class":79},[45,169328,169329],{"class":55},"(path)\n",[20,169331,169332],{},"创建目录：",[36,169334,169336],{"className":30478,"code":169335,"language":30480,"meta":25,"style":25},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[42,169337,169338,169348,169352,169365],{"__ignoreMap":25},[45,169339,169340,169342,169344,169346],{"class":47,"line":48},[45,169341,30837],{"class":51},[45,169343,108411],{"class":55},[45,169345,30492],{"class":51},[45,169347,108416],{"class":55},[45,169349,169350],{"class":47,"line":66},[45,169351,2550],{"emptyLinePlaceholder":207},[45,169353,169354,169357,169359,169361,169363],{"class":47,"line":1331},[45,169355,169356],{"class":55},"data_dir ",[45,169358,59],{"class":51},[45,169360,108645],{"class":55},[45,169362,169315],{"class":62},[45,169364,139],{"class":55},[45,169366,169367,169370,169373,169375,169377],{"class":47,"line":1346},[45,169368,169369],{"class":55},"data_dir.mkdir(",[45,169371,169372],{"class":5366},"exist_ok",[45,169374,59],{"class":51},[45,169376,31576],{"class":79},[45,169378,139],{"class":55},[20,169380,169381],{},"判断文件是否存在：",[36,169383,169385],{"className":30478,"code":169384,"language":30480,"meta":25,"style":25},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[42,169386,169387,169400,169404,169411],{"__ignoreMap":25},[45,169388,169389,169391,169393,169395,169398],{"class":47,"line":48},[45,169390,168411],{"class":55},[45,169392,59],{"class":51},[45,169394,108645],{"class":55},[45,169396,169397],{"class":62},"\"data\u002Fstudents.txt\"",[45,169399,139],{"class":55},[45,169401,169402],{"class":47,"line":66},[45,169403,2550],{"emptyLinePlaceholder":207},[45,169405,169406,169408],{"class":47,"line":1331},[45,169407,1682],{"class":51},[45,169409,169410],{"class":55}," path.exists():\n",[45,169412,169413,169415,169417,169420],{"class":47,"line":1346},[45,169414,31399],{"class":79},[45,169416,282],{"class":55},[45,169418,169419],{"class":62},"\"文件存在\"",[45,169421,139],{"class":55},[20,169423,169424],{},"读写文本：",[36,169426,169428],{"className":30478,"code":169427,"language":30480,"meta":25,"style":25},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[42,169429,169430,169442,169446,169463,169480],{"__ignoreMap":25},[45,169431,169432,169434,169436,169438,169440],{"class":47,"line":48},[45,169433,168411],{"class":55},[45,169435,59],{"class":51},[45,169437,108645],{"class":55},[45,169439,146896],{"class":62},[45,169441,139],{"class":55},[45,169443,169444],{"class":47,"line":66},[45,169445,2550],{"emptyLinePlaceholder":207},[45,169447,169448,169451,169453,169455,169457,169459,169461],{"class":47,"line":1331},[45,169449,169450],{"class":55},"path.write_text(",[45,169452,145976],{"class":62},[45,169454,12584],{"class":55},[45,169456,146906],{"class":5366},[45,169458,59],{"class":51},[45,169460,146911],{"class":62},[45,169462,139],{"class":55},[45,169464,169465,169467,169469,169472,169474,169476,169478],{"class":47,"line":1346},[45,169466,168594],{"class":55},[45,169468,59],{"class":51},[45,169470,169471],{"class":55}," path.read_text(",[45,169473,146906],{"class":5366},[45,169475,59],{"class":51},[45,169477,146911],{"class":62},[45,169479,139],{"class":55},[45,169481,169482,169484],{"class":47,"line":1352},[45,169483,30515],{"class":79},[45,169485,168608],{"class":55},[15,169487,169489],{"id":169488},"_810-json文件","8.10 JSON文件",[20,169491,169492],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[36,169494,169496],{"className":30478,"code":169495,"language":30480,"meta":25,"style":25},"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",[42,169497,169498,169504,169508,169516,169526,169536,169544,169548,169552,169577],{"__ignoreMap":25},[45,169499,169500,169502],{"class":47,"line":48},[45,169501,30492],{"class":51},[45,169503,147191],{"class":55},[45,169505,169506],{"class":47,"line":66},[45,169507,2550],{"emptyLinePlaceholder":207},[45,169509,169510,169512,169514],{"class":47,"line":1331},[45,169511,149581],{"class":55},[45,169513,59],{"class":51},[45,169515,15721],{"class":55},[45,169517,169518,169520,169522,169524],{"class":47,"line":1346},[45,169519,147120],{"class":62},[45,169521,51537],{"class":55},[45,169523,149988],{"class":62},[45,169525,31566],{"class":55},[45,169527,169528,169530,169532,169534],{"class":47,"line":1352},[45,169529,164637],{"class":62},[45,169531,51537],{"class":55},[45,169533,927],{"class":79},[45,169535,31566],{"class":55},[45,169537,169538,169540,169542],{"class":47,"line":1366},[45,169539,164648],{"class":62},[45,169541,51537],{"class":55},[45,169543,164653],{"class":79},[45,169545,169546],{"class":47,"line":1372},[45,169547,1716],{"class":55},[45,169549,169550],{"class":47,"line":1463},[45,169551,2550],{"emptyLinePlaceholder":207},[45,169553,169554,169556,169558,169561,169563,169565,169567,169569,169571,169573,169575],{"class":47,"line":1469},[45,169555,156544],{"class":55},[45,169557,59],{"class":51},[45,169559,169560],{"class":55}," json.dumps(student, ",[45,169562,147237],{"class":5366},[45,169564,59],{"class":51},[45,169566,34087],{"class":79},[45,169568,12584],{"class":55},[45,169570,152112],{"class":5366},[45,169572,59],{"class":51},[45,169574,356],{"class":79},[45,169576,139],{"class":55},[45,169578,169579,169581],{"class":47,"line":1481},[45,169580,30515],{"class":79},[45,169582,164171],{"class":55},[20,169584,169585],{},"写入 JSON 文件：",[36,169587,169589],{"className":30478,"code":169588,"language":30480,"meta":25,"style":25},"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",[42,169590,169591,169597,169601,169609,169637,169665,169669,169673,169703],{"__ignoreMap":25},[45,169592,169593,169595],{"class":47,"line":48},[45,169594,30492],{"class":51},[45,169596,147191],{"class":55},[45,169598,169599],{"class":47,"line":66},[45,169600,2550],{"emptyLinePlaceholder":207},[45,169602,169603,169605,169607],{"class":47,"line":1331},[45,169604,159816],{"class":55},[45,169606,59],{"class":51},[45,169608,55547],{"class":55},[45,169610,169611,169613,169615,169617,169619,169621,169623,169625,169627,169629,169631,169633,169635],{"class":47,"line":1346},[45,169612,148485],{"class":55},[45,169614,62779],{"class":62},[45,169616,51537],{"class":55},[45,169618,149988],{"class":62},[45,169620,12584],{"class":55},[45,169622,69224],{"class":62},[45,169624,51537],{"class":55},[45,169626,927],{"class":79},[45,169628,12584],{"class":55},[45,169630,151572],{"class":62},[45,169632,51537],{"class":55},[45,169634,1266],{"class":79},[45,169636,5080],{"class":55},[45,169638,169639,169641,169643,169645,169647,169649,169651,169653,169655,169657,169659,169661,169663],{"class":47,"line":1352},[45,169640,148485],{"class":55},[45,169642,62779],{"class":62},[45,169644,51537],{"class":55},[45,169646,151036],{"class":62},[45,169648,12584],{"class":55},[45,169650,69224],{"class":62},[45,169652,51537],{"class":55},[45,169654,902],{"class":79},[45,169656,12584],{"class":55},[45,169658,151572],{"class":62},[45,169660,51537],{"class":55},[45,169662,1088],{"class":79},[45,169664,5080],{"class":55},[45,169666,169667],{"class":47,"line":1366},[45,169668,33346],{"class":55},[45,169670,169671],{"class":47,"line":1372},[45,169672,2550],{"emptyLinePlaceholder":207},[45,169674,169675,169677,169679,169681,169683,169685,169687,169689,169691,169693,169695,169697,169699,169701],{"class":47,"line":1463},[45,169676,107933],{"class":51},[45,169678,146891],{"class":79},[45,169680,282],{"class":55},[45,169682,151931],{"class":62},[45,169684,12584],{"class":55},[45,169686,152076],{"class":62},[45,169688,12584],{"class":55},[45,169690,146906],{"class":5366},[45,169692,59],{"class":51},[45,169694,146911],{"class":62},[45,169696,13863],{"class":55},[45,169698,31483],{"class":51},[45,169700,148253],{"class":5366},[45,169702,3889],{"class":55},[45,169704,169705,169708,169710,169712,169714,169716,169718,169720,169722,169724,169726],{"class":47,"line":1469},[45,169706,169707],{"class":55},"    json.dump(students, ",[45,169709,45454],{"class":5366},[45,169711,12584],{"class":55},[45,169713,147237],{"class":5366},[45,169715,59],{"class":51},[45,169717,34087],{"class":79},[45,169719,12584],{"class":55},[45,169721,152112],{"class":5366},[45,169723,59],{"class":51},[45,169725,356],{"class":79},[45,169727,139],{"class":55},[20,169729,169730],{},"读取 JSON 文件：",[36,169732,169734],{"className":30478,"code":169733,"language":30480,"meta":25,"style":25},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[42,169735,169736,169742,169746,169776,169788,169792],{"__ignoreMap":25},[45,169737,169738,169740],{"class":47,"line":48},[45,169739,30492],{"class":51},[45,169741,147191],{"class":55},[45,169743,169744],{"class":47,"line":66},[45,169745,2550],{"emptyLinePlaceholder":207},[45,169747,169748,169750,169752,169754,169756,169758,169760,169762,169764,169766,169768,169770,169772,169774],{"class":47,"line":1331},[45,169749,107933],{"class":51},[45,169751,146891],{"class":79},[45,169753,282],{"class":55},[45,169755,151931],{"class":62},[45,169757,12584],{"class":55},[45,169759,146901],{"class":62},[45,169761,12584],{"class":55},[45,169763,146906],{"class":5366},[45,169765,59],{"class":51},[45,169767,146911],{"class":62},[45,169769,13863],{"class":55},[45,169771,31483],{"class":51},[45,169773,148253],{"class":5366},[45,169775,3889],{"class":55},[45,169777,169778,169780,169782,169784,169786],{"class":47,"line":1346},[45,169779,153137],{"class":55},[45,169781,59],{"class":51},[45,169783,148264],{"class":55},[45,169785,45454],{"class":5366},[45,169787,139],{"class":55},[45,169789,169790],{"class":47,"line":1352},[45,169791,2550],{"emptyLinePlaceholder":207},[45,169793,169794,169796],{"class":47,"line":1366},[45,169795,30515],{"class":79},[45,169797,165095],{"class":55},[15,169799,169801],{"id":169800},"_811-csv文件","8.11 CSV文件",[20,169803,169804],{},"CSV 是逗号分隔值，常用于表格数据。",[20,169806,169807],{},"写入 CSV：",[36,169809,169811],{"className":30478,"code":169810,"language":30480,"meta":25,"style":25},"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",[42,169812,169813,169820,169824,169832,169850,169866,169882,169886,169890,169930,169944],{"__ignoreMap":25},[45,169814,169815,169817],{"class":47,"line":48},[45,169816,30492],{"class":51},[45,169818,169819],{"class":55}," csv\n",[45,169821,169822],{"class":47,"line":66},[45,169823,2550],{"emptyLinePlaceholder":207},[45,169825,169826,169828,169830],{"class":47,"line":1331},[45,169827,159816],{"class":55},[45,169829,59],{"class":51},[45,169831,55547],{"class":55},[45,169833,169834,169837,169839,169841,169843,169845,169848],{"class":47,"line":1346},[45,169835,169836],{"class":55},"    [",[45,169838,73199],{"class":62},[45,169840,12584],{"class":55},[45,169842,73232],{"class":62},[45,169844,12584],{"class":55},[45,169846,169847],{"class":62},"\"成绩\"",[45,169849,87936],{"class":55},[45,169851,169852,169854,169856,169858,169860,169862,169864],{"class":47,"line":1352},[45,169853,169836],{"class":55},[45,169855,149988],{"class":62},[45,169857,12584],{"class":55},[45,169859,927],{"class":79},[45,169861,12584],{"class":55},[45,169863,1266],{"class":79},[45,169865,87936],{"class":55},[45,169867,169868,169870,169872,169874,169876,169878,169880],{"class":47,"line":1366},[45,169869,169836],{"class":55},[45,169871,151036],{"class":62},[45,169873,12584],{"class":55},[45,169875,902],{"class":79},[45,169877,12584],{"class":55},[45,169879,1088],{"class":79},[45,169881,87936],{"class":55},[45,169883,169884],{"class":47,"line":1372},[45,169885,33346],{"class":55},[45,169887,169888],{"class":47,"line":1463},[45,169889,2550],{"emptyLinePlaceholder":207},[45,169891,169892,169894,169896,169898,169901,169903,169905,169907,169909,169911,169913,169915,169918,169920,169922,169924,169926,169928],{"class":47,"line":1469},[45,169893,107933],{"class":51},[45,169895,146891],{"class":79},[45,169897,282],{"class":55},[45,169899,169900],{"class":62},"\"students.csv\"",[45,169902,12584],{"class":55},[45,169904,152076],{"class":62},[45,169906,12584],{"class":55},[45,169908,146906],{"class":5366},[45,169910,59],{"class":51},[45,169912,146911],{"class":62},[45,169914,12584],{"class":55},[45,169916,169917],{"class":5366},"newline",[45,169919,59],{"class":51},[45,169921,7802],{"class":62},[45,169923,13863],{"class":55},[45,169925,31483],{"class":51},[45,169927,148253],{"class":5366},[45,169929,3889],{"class":55},[45,169931,169932,169935,169937,169940,169942],{"class":47,"line":1481},[45,169933,169934],{"class":55},"    writer ",[45,169936,59],{"class":51},[45,169938,169939],{"class":55}," csv.writer(",[45,169941,45454],{"class":5366},[45,169943,139],{"class":55},[45,169945,169946],{"class":47,"line":1763},[45,169947,169948],{"class":55},"    writer.writerows(students)\n",[20,169950,169951],{},"读取 CSV：",[36,169953,169955],{"className":30478,"code":169954,"language":30480,"meta":25,"style":25},"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",[42,169956,169957,169963,169967,169997,170011,170023],{"__ignoreMap":25},[45,169958,169959,169961],{"class":47,"line":48},[45,169960,30492],{"class":51},[45,169962,169819],{"class":55},[45,169964,169965],{"class":47,"line":66},[45,169966,2550],{"emptyLinePlaceholder":207},[45,169968,169969,169971,169973,169975,169977,169979,169981,169983,169985,169987,169989,169991,169993,169995],{"class":47,"line":1331},[45,169970,107933],{"class":51},[45,169972,146891],{"class":79},[45,169974,282],{"class":55},[45,169976,169900],{"class":62},[45,169978,12584],{"class":55},[45,169980,146901],{"class":62},[45,169982,12584],{"class":55},[45,169984,146906],{"class":5366},[45,169986,59],{"class":51},[45,169988,146911],{"class":62},[45,169990,13863],{"class":55},[45,169992,31483],{"class":51},[45,169994,148253],{"class":5366},[45,169996,3889],{"class":55},[45,169998,169999,170002,170004,170007,170009],{"class":47,"line":1346},[45,170000,170001],{"class":55},"    reader ",[45,170003,59],{"class":51},[45,170005,170006],{"class":55}," csv.reader(",[45,170008,45454],{"class":5366},[45,170010,139],{"class":55},[45,170012,170013,170015,170018,170020],{"class":47,"line":1352},[45,170014,3351],{"class":51},[45,170016,170017],{"class":55}," row ",[45,170019,26143],{"class":51},[45,170021,170022],{"class":55}," reader:\n",[45,170024,170025,170027],{"class":47,"line":1366},[45,170026,32551],{"class":79},[45,170028,170029],{"class":55},"(row)\n",[20,170031,170032],{},"使用字典写入：",[36,170034,170036],{"className":30478,"code":170035,"language":30480,"meta":25,"style":25},"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",[42,170037,170038,170044,170048,170056,170084,170112,170116,170120,170158,170179,170200,170205],{"__ignoreMap":25},[45,170039,170040,170042],{"class":47,"line":48},[45,170041,30492],{"class":51},[45,170043,169819],{"class":55},[45,170045,170046],{"class":47,"line":66},[45,170047,2550],{"emptyLinePlaceholder":207},[45,170049,170050,170052,170054],{"class":47,"line":1331},[45,170051,159816],{"class":55},[45,170053,59],{"class":51},[45,170055,55547],{"class":55},[45,170057,170058,170060,170062,170064,170066,170068,170070,170072,170074,170076,170078,170080,170082],{"class":47,"line":1346},[45,170059,148485],{"class":55},[45,170061,62779],{"class":62},[45,170063,51537],{"class":55},[45,170065,149988],{"class":62},[45,170067,12584],{"class":55},[45,170069,69224],{"class":62},[45,170071,51537],{"class":55},[45,170073,927],{"class":79},[45,170075,12584],{"class":55},[45,170077,151572],{"class":62},[45,170079,51537],{"class":55},[45,170081,1266],{"class":79},[45,170083,5080],{"class":55},[45,170085,170086,170088,170090,170092,170094,170096,170098,170100,170102,170104,170106,170108,170110],{"class":47,"line":1352},[45,170087,148485],{"class":55},[45,170089,62779],{"class":62},[45,170091,51537],{"class":55},[45,170093,151036],{"class":62},[45,170095,12584],{"class":55},[45,170097,69224],{"class":62},[45,170099,51537],{"class":55},[45,170101,902],{"class":79},[45,170103,12584],{"class":55},[45,170105,151572],{"class":62},[45,170107,51537],{"class":55},[45,170109,1088],{"class":79},[45,170111,5080],{"class":55},[45,170113,170114],{"class":47,"line":1366},[45,170115,33346],{"class":55},[45,170117,170118],{"class":47,"line":1372},[45,170119,2550],{"emptyLinePlaceholder":207},[45,170121,170122,170124,170126,170128,170130,170132,170134,170136,170138,170140,170142,170144,170146,170148,170150,170152,170154,170156],{"class":47,"line":1463},[45,170123,107933],{"class":51},[45,170125,146891],{"class":79},[45,170127,282],{"class":55},[45,170129,169900],{"class":62},[45,170131,12584],{"class":55},[45,170133,152076],{"class":62},[45,170135,12584],{"class":55},[45,170137,146906],{"class":5366},[45,170139,59],{"class":51},[45,170141,146911],{"class":62},[45,170143,12584],{"class":55},[45,170145,169917],{"class":5366},[45,170147,59],{"class":51},[45,170149,7802],{"class":62},[45,170151,13863],{"class":55},[45,170153,31483],{"class":51},[45,170155,148253],{"class":5366},[45,170157,3889],{"class":55},[45,170159,170160,170163,170165,170167,170169,170171,170173,170175,170177],{"class":47,"line":1469},[45,170161,170162],{"class":55},"    fieldnames ",[45,170164,59],{"class":51},[45,170166,52326],{"class":55},[45,170168,62779],{"class":62},[45,170170,12584],{"class":55},[45,170172,69224],{"class":62},[45,170174,12584],{"class":55},[45,170176,151572],{"class":62},[45,170178,33346],{"class":55},[45,170180,170181,170183,170185,170188,170190,170192,170195,170197],{"class":47,"line":1481},[45,170182,169934],{"class":55},[45,170184,59],{"class":51},[45,170186,170187],{"class":55}," csv.DictWriter(",[45,170189,45454],{"class":5366},[45,170191,12584],{"class":55},[45,170193,170194],{"class":5366},"fieldnames",[45,170196,59],{"class":51},[45,170198,170199],{"class":55},"fieldnames)\n",[45,170201,170202],{"class":47,"line":1763},[45,170203,170204],{"class":55},"    writer.writeheader()\n",[45,170206,170207],{"class":47,"line":1768},[45,170208,169948],{"class":55},[15,170210,170212],{"id":170211},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[20,170214,123392],{},[233,170216,170217,170220,170223],{},[169,170218,170219],{},"读取文本文件。",[169,170221,170222],{},"统计每个单词出现次数。",[169,170224,170225],{},"输出出现次数最多的前 10 个单词。",[20,170227,10184],{},[36,170229,170231],{"className":30478,"code":170230,"language":30480,"meta":25,"style":25},"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",[42,170232,170233,170243,170247,170260,170276,170280,170290,170299,170303,170315,170335,170344,170348,170366,170370,170400,170404,170420],{"__ignoreMap":25},[45,170234,170235,170237,170239,170241],{"class":47,"line":48},[45,170236,30837],{"class":51},[45,170238,108411],{"class":55},[45,170240,30492],{"class":51},[45,170242,108416],{"class":55},[45,170244,170245],{"class":47,"line":66},[45,170246,2550],{"emptyLinePlaceholder":207},[45,170248,170249,170251,170253,170255,170258],{"class":47,"line":1331},[45,170250,168411],{"class":55},[45,170252,59],{"class":51},[45,170254,108645],{"class":55},[45,170256,170257],{"class":62},"\"article.txt\"",[45,170259,139],{"class":55},[45,170261,170262,170264,170266,170268,170270,170272,170274],{"class":47,"line":1346},[45,170263,168594],{"class":55},[45,170265,59],{"class":51},[45,170267,169471],{"class":55},[45,170269,146906],{"class":5366},[45,170271,59],{"class":51},[45,170273,146911],{"class":62},[45,170275,139],{"class":55},[45,170277,170278],{"class":47,"line":1352},[45,170279,2550],{"emptyLinePlaceholder":207},[45,170281,170282,170285,170287],{"class":47,"line":1366},[45,170283,170284],{"class":55},"words ",[45,170286,59],{"class":51},[45,170288,170289],{"class":55}," content.lower().split()\n",[45,170291,170292,170295,170297],{"class":47,"line":1372},[45,170293,170294],{"class":55},"counter ",[45,170296,59],{"class":51},[45,170298,87968],{"class":55},[45,170300,170301],{"class":47,"line":1463},[45,170302,2550],{"emptyLinePlaceholder":207},[45,170304,170305,170307,170310,170312],{"class":47,"line":1469},[45,170306,3175],{"class":51},[45,170308,170309],{"class":55}," word ",[45,170311,26143],{"class":51},[45,170313,170314],{"class":55}," words:\n",[45,170316,170317,170320,170322,170325,170328,170330,170333],{"class":47,"line":1481},[45,170318,170319],{"class":55},"    word ",[45,170321,59],{"class":51},[45,170323,170324],{"class":55}," word.strip(",[45,170326,170327],{"class":62},"\".,!?;:",[45,170329,156595],{"class":79},[45,170331,170332],{"class":62},"'()[]\"",[45,170334,139],{"class":55},[45,170336,170337,170339,170341],{"class":47,"line":1763},[45,170338,3251],{"class":51},[45,170340,39030],{"class":51},[45,170342,170343],{"class":55}," word:\n",[45,170345,170346],{"class":47,"line":1768},[45,170347,148612],{"class":51},[45,170349,170350,170353,170355,170358,170360,170362,170364],{"class":47,"line":1774},[45,170351,170352],{"class":55},"    counter[word] ",[45,170354,59],{"class":51},[45,170356,170357],{"class":55}," counter.get(word, ",[45,170359,469],{"class":79},[45,170361,13863],{"class":55},[45,170363,758],{"class":51},[45,170365,55799],{"class":79},[45,170367,170368],{"class":47,"line":1779},[45,170369,2550],{"emptyLinePlaceholder":207},[45,170371,170372,170375,170377,170379,170382,170384,170386,170388,170390,170392,170394,170396,170398],{"class":47,"line":1793},[45,170373,170374],{"class":55},"items ",[45,170376,59],{"class":51},[45,170378,163704],{"class":79},[45,170380,170381],{"class":55},"(counter.items(), ",[45,170383,154046],{"class":5366},[45,170385,154049],{"class":51},[45,170387,154052],{"class":55},[45,170389,495],{"class":79},[45,170391,112302],{"class":55},[45,170393,163628],{"class":5366},[45,170395,59],{"class":51},[45,170397,31576],{"class":79},[45,170399,139],{"class":55},[45,170401,170402],{"class":47,"line":1798},[45,170403,2550],{"emptyLinePlaceholder":207},[45,170405,170406,170408,170411,170413,170416,170418],{"class":47,"line":1804},[45,170407,3175],{"class":51},[45,170409,170410],{"class":55}," word, count ",[45,170412,26143],{"class":51},[45,170414,170415],{"class":55}," items[:",[45,170417,723],{"class":79},[45,170419,165855],{"class":55},[45,170421,170422,170424],{"class":47,"line":1825},[45,170423,31399],{"class":79},[45,170425,170426],{"class":55},"(word, count)\n",[15,170428,170430],{"id":170429},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[36,170432,170434],{"className":30478,"code":170433,"language":30480,"meta":25,"style":25},"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",[42,170435,170436,170442,170452,170456,170468,170472,170476,170484,170494,170500,170504,170534,170544,170548,170552,170560,170590,170614,170618,170622,170630,170659,170664],{"__ignoreMap":25},[45,170437,170438,170440],{"class":47,"line":48},[45,170439,30492],{"class":51},[45,170441,147191],{"class":55},[45,170443,170444,170446,170448,170450],{"class":47,"line":66},[45,170445,30837],{"class":51},[45,170447,108411],{"class":55},[45,170449,30492],{"class":51},[45,170451,108416],{"class":55},[45,170453,170454],{"class":47,"line":1331},[45,170455,2550],{"emptyLinePlaceholder":207},[45,170457,170458,170460,170462,170464,170466],{"class":47,"line":1346},[45,170459,151924],{"class":79},[45,170461,13713],{"class":51},[45,170463,108645],{"class":55},[45,170465,151931],{"class":62},[45,170467,139],{"class":55},[45,170469,170470],{"class":47,"line":1352},[45,170471,2550],{"emptyLinePlaceholder":207},[45,170473,170474],{"class":47,"line":1366},[45,170475,2550],{"emptyLinePlaceholder":207},[45,170477,170478,170480,170482],{"class":47,"line":1372},[45,170479,32047],{"class":51},[45,170481,151948],{"class":69},[45,170483,32053],{"class":55},[45,170485,170486,170488,170490,170492],{"class":47,"line":1463},[45,170487,3251],{"class":51},[45,170489,39030],{"class":51},[45,170491,151959],{"class":79},[45,170493,151962],{"class":55},[45,170495,170496,170498],{"class":47,"line":1469},[45,170497,14901],{"class":51},[45,170499,51938],{"class":55},[45,170501,170502],{"class":47,"line":1481},[45,170503,2550],{"emptyLinePlaceholder":207},[45,170505,170506,170508,170510,170512,170514,170516,170518,170520,170522,170524,170526,170528,170530,170532],{"class":47,"line":1763},[45,170507,34278],{"class":51},[45,170509,146891],{"class":79},[45,170511,282],{"class":55},[45,170513,151924],{"class":79},[45,170515,12584],{"class":55},[45,170517,146901],{"class":62},[45,170519,12584],{"class":55},[45,170521,146906],{"class":5366},[45,170523,59],{"class":51},[45,170525,146911],{"class":62},[45,170527,13863],{"class":55},[45,170529,31483],{"class":51},[45,170531,148253],{"class":5366},[45,170533,3889],{"class":55},[45,170535,170536,170538,170540,170542],{"class":47,"line":1768},[45,170537,14901],{"class":51},[45,170539,148264],{"class":55},[45,170541,45454],{"class":5366},[45,170543,139],{"class":55},[45,170545,170546],{"class":47,"line":1774},[45,170547,2550],{"emptyLinePlaceholder":207},[45,170549,170550],{"class":47,"line":1779},[45,170551,2550],{"emptyLinePlaceholder":207},[45,170553,170554,170556,170558],{"class":47,"line":1793},[45,170555,32047],{"class":51},[45,170557,152058],{"class":69},[45,170559,152061],{"class":55},[45,170561,170562,170564,170566,170568,170570,170572,170574,170576,170578,170580,170582,170584,170586,170588],{"class":47,"line":1798},[45,170563,34278],{"class":51},[45,170565,146891],{"class":79},[45,170567,282],{"class":55},[45,170569,151924],{"class":79},[45,170571,12584],{"class":55},[45,170573,152076],{"class":62},[45,170575,12584],{"class":55},[45,170577,146906],{"class":5366},[45,170579,59],{"class":51},[45,170581,146911],{"class":62},[45,170583,13863],{"class":55},[45,170585,31483],{"class":51},[45,170587,148253],{"class":5366},[45,170589,3889],{"class":55},[45,170591,170592,170594,170596,170598,170600,170602,170604,170606,170608,170610,170612],{"class":47,"line":1804},[45,170593,152097],{"class":55},[45,170595,45454],{"class":5366},[45,170597,12584],{"class":55},[45,170599,147237],{"class":5366},[45,170601,59],{"class":51},[45,170603,34087],{"class":79},[45,170605,12584],{"class":55},[45,170607,152112],{"class":5366},[45,170609,59],{"class":51},[45,170611,356],{"class":79},[45,170613,139],{"class":55},[45,170615,170616],{"class":47,"line":1825},[45,170617,2550],{"emptyLinePlaceholder":207},[45,170619,170620],{"class":47,"line":1830},[45,170621,2550],{"emptyLinePlaceholder":207},[45,170623,170624,170626,170628],{"class":47,"line":1844},[45,170625,159816],{"class":55},[45,170627,59],{"class":51},[45,170629,153142],{"class":55},[45,170631,170632,170635,170637,170639,170641,170643,170645,170647,170649,170651,170653,170655,170657],{"class":47,"line":1849},[45,170633,170634],{"class":55},"students.append({",[45,170636,62779],{"class":62},[45,170638,51537],{"class":55},[45,170640,149988],{"class":62},[45,170642,12584],{"class":55},[45,170644,69224],{"class":62},[45,170646,51537],{"class":55},[45,170648,927],{"class":79},[45,170650,12584],{"class":55},[45,170652,151572],{"class":62},[45,170654,51537],{"class":55},[45,170656,1266],{"class":79},[45,170658,165252],{"class":55},[45,170660,170661],{"class":47,"line":1878},[45,170662,170663],{"class":55},"save_students(students)\n",[45,170665,170666,170668,170670,170673],{"class":47,"line":1883},[45,170667,30515],{"class":79},[45,170669,282],{"class":55},[45,170671,170672],{"class":62},"\"保存成功\"",[45,170674,139],{"class":55},[15,170676,170678],{"id":170677},"_814-易错点","8.14 易错点",[233,170680,170681,170685,170691,170696,170703,170710],{},[169,170682,170683,168944],{},[42,170684,1072],{},[169,170686,170687,170688,28485],{},"读写中文要指定 ",[42,170689,170690],{},"encoding=\"utf-8\"",[169,170692,170693,170694,28485],{},"打开文件后要关闭，推荐使用 ",[42,170695,107933],{},[169,170697,170698,170699,170702],{},"读取大文件不要直接 ",[42,170700,170701],{},"read()"," 全部内容。",[169,170704,170705,170706,170709],{},"Windows 写 CSV 时建议加 ",[42,170707,170708],{},"newline=\"\"","，避免空行。",[169,170711,170712],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[15,170714,170716],{"id":170715},"_815-本章练习","8.15 本章练习",[233,170718,170719,170726,170731,170734,170737],{},[169,170720,170721,170722,170725],{},"写入一个 ",[42,170723,170724],{},"students.txt","，每行保存一个学生姓名。",[169,170727,104455,170728,170730],{},[42,170729,170724],{}," 并输出所有学生。",[169,170732,170733],{},"把学生列表保存为 JSON 文件。",[169,170735,170736],{},"从 JSON 文件读取学生数据，计算平均分。",[169,170738,170739,170740,170743,170744,170747],{},"写一个日志函数 ",[42,170741,170742],{},"write_log(message)","，每次调用向 ",[42,170745,170746],{},"app.log"," 追加一行。",[196,170749,170750],{},"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":25,"searchDepth":66,"depth":66,"links":170752},[170753,170754,170758,170759,170765,170766,170767,170768,170769,170770,170771,170772,170773,170774,170775],{"id":168264,"depth":66,"text":168265},{"id":168305,"depth":66,"text":168306,"children":170755},[170756,170757],{"id":168309,"depth":1331,"text":168310},{"id":168343,"depth":1331,"text":168344},{"id":168457,"depth":66,"text":168458},{"id":168550,"depth":66,"text":168551,"children":170760},[170761,170762,170763,170764],{"id":168554,"depth":1331,"text":168555},{"id":168641,"depth":1331,"text":168642},{"id":168711,"depth":1331,"text":168712},{"id":168805,"depth":1331,"text":168806},{"id":168875,"depth":66,"text":168876},{"id":168938,"depth":66,"text":168939},{"id":169099,"depth":66,"text":169100},{"id":169162,"depth":66,"text":169163},{"id":169278,"depth":66,"text":169279},{"id":169488,"depth":66,"text":169489},{"id":169800,"depth":66,"text":169801},{"id":170211,"depth":66,"text":170212},{"id":170429,"depth":66,"text":170430},{"id":170677,"depth":66,"text":170678},{"id":170715,"depth":66,"text":170716},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168256,"description":204},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170782,"title":170783,"body":170784,"description":204,"extension":205,"meta":172970,"navigation":207,"path":172971,"seo":172972,"stem":172973,"__hash__":172974},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170785,"toc":172937},[170786,170789,170793,170796,170799,170891,170893,170912,170917,170921,170924,170927,170956,170963,170966,170970,170973,171002,171004,171056,171062,171115,171119,171217,171220,171287,171291,171348,171350,171356,171360,171365,171371,171462,171467,171471,171474,171552,171555,171593,171597,171715,171718,171722,171725,171770,171773,171777,171782,171788,171838,171841,171872,171876,171880,171910,171914,171949,171953,171988,172028,172032,172048,172051,172055,172059,172138,172142,172183,172187,172242,172246,172280,172284,172314,172323,172330,172336,172393,172396,172404,172407,172411,172418,172421,172427,172430,172447,172452,172456,172462,172475,172478,172515,172518,172529,172532,172546,172549,172563,172567,172574,172607,172610,172612,172618,172621,172625,172627,172633,172638,172811,172815,172878,172882,172906,172910,172934],[10,170787,170783],{"id":170788},"_9-异常模块与包",[15,170790,170792],{"id":170791},"_91-什么是异常","9.1 什么是异常",[20,170794,170795],{},"异常是程序运行过程中出现的错误。",[20,170797,170798],{},"常见异常：",[415,170800,170801,170810],{},[418,170802,170803],{},[421,170804,170805,170808],{},[424,170806,170807],{},"异常",[424,170809,25969],{},[462,170811,170812,170822,170832,170841,170851,170861,170871,170881],{},[421,170813,170814,170819],{},[467,170815,170816],{},[42,170817,170818],{},"NameError",[467,170820,170821],{},"使用了未定义变量",[421,170823,170824,170829],{},[467,170825,170826],{},[42,170827,170828],{},"TypeError",[467,170830,170831],{},"类型不匹配",[421,170833,170834,170838],{},[467,170835,170836],{},[42,170837,154934],{},[467,170839,170840],{},"值不合法",[421,170842,170843,170848],{},[467,170844,170845],{},[42,170846,170847],{},"IndexError",[467,170849,170850],{},"列表索引越界",[421,170852,170853,170858],{},[467,170854,170855],{},[42,170856,170857],{},"KeyError",[467,170859,170860],{},"字典 key 不存在",[421,170862,170863,170868],{},[467,170864,170865],{},[42,170866,170867],{},"FileNotFoundError",[467,170869,170870],{},"文件不存在",[421,170872,170873,170878],{},[467,170874,170875],{},[42,170876,170877],{},"ZeroDivisionError",[467,170879,170880],{},"除数为 0",[421,170882,170883,170888],{},[467,170884,170885],{},[42,170886,170887],{},"ImportError",[467,170889,170890],{},"导入失败",[20,170892,15284],{},[36,170894,170896],{"className":30478,"code":170895,"language":30480,"meta":25,"style":25},"num = int(\"abc\")\n",[42,170897,170898],{"__ignoreMap":25},[45,170899,170900,170902,170904,170906,170908,170910],{"class":47,"line":48},[45,170901,155887],{"class":55},[45,170903,59],{"class":51},[45,170905,2532],{"class":79},[45,170907,282],{"class":55},[45,170909,155980],{"class":62},[45,170911,139],{"class":55},[20,170913,170914,170915,28485],{},"会触发 ",[42,170916,154934],{},[15,170918,170920],{"id":170919},"_92-为什么要处理异常","9.2 为什么要处理异常",[20,170922,170923],{},"如果不处理异常，程序会直接终止。",[20,170925,170926],{},"例如用户输入年龄：",[36,170928,170930],{"className":30478,"code":170929,"language":30480,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[42,170931,170932,170950],{"__ignoreMap":25},[45,170933,170934,170936,170938,170940,170942,170944,170946,170948],{"class":47,"line":48},[45,170935,146646],{"class":55},[45,170937,59],{"class":51},[45,170939,2532],{"class":79},[45,170941,282],{"class":55},[45,170943,53921],{"class":79},[45,170945,282],{"class":55},[45,170947,152494],{"class":62},[45,170949,30597],{"class":55},[45,170951,170952,170954],{"class":47,"line":66},[45,170953,30515],{"class":79},[45,170955,155861],{"class":55},[20,170957,170958,170959,170962],{},"用户输入 ",[42,170960,170961],{},"abc","，程序就会报错退出。",[20,170964,170965],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[15,170967,170969],{"id":170968},"_93-try-except","9.3 try except",[20,170971,170972],{},"基础语法：",[36,170974,170976],{"className":30478,"code":170975,"language":30480,"meta":25,"style":25},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[42,170977,170978,170985,170990,170997],{"__ignoreMap":25},[45,170979,170980,170983],{"class":47,"line":48},[45,170981,170982],{"class":51},"try",[45,170984,3889],{"class":55},[45,170986,170987],{"class":47,"line":66},[45,170988,170989],{"class":55},"    可能出错的代码\n",[45,170991,170992,170995],{"class":47,"line":1331},[45,170993,170994],{"class":51},"except",[45,170996,3889],{"class":55},[45,170998,170999],{"class":47,"line":1346},[45,171000,171001],{"class":55},"    出错后的处理代码\n",[20,171003,15284],{},[36,171005,171007],{"className":30478,"code":171006,"language":30480,"meta":25,"style":25},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[42,171008,171009,171015,171033,171039,171045],{"__ignoreMap":25},[45,171010,171011,171013],{"class":47,"line":48},[45,171012,170982],{"class":51},[45,171014,3889],{"class":55},[45,171016,171017,171019,171021,171023,171025,171027,171029,171031],{"class":47,"line":66},[45,171018,152486],{"class":55},[45,171020,59],{"class":51},[45,171022,2532],{"class":79},[45,171024,282],{"class":55},[45,171026,53921],{"class":79},[45,171028,282],{"class":55},[45,171030,152494],{"class":62},[45,171032,30597],{"class":55},[45,171034,171035,171037],{"class":47,"line":1331},[45,171036,31399],{"class":79},[45,171038,155861],{"class":55},[45,171040,171041,171043],{"class":47,"line":1346},[45,171042,170994],{"class":51},[45,171044,3889],{"class":55},[45,171046,171047,171049,171051,171054],{"class":47,"line":1352},[45,171048,31399],{"class":79},[45,171050,282],{"class":55},[45,171052,171053],{"class":62},"\"年龄必须是数字\"",[45,171055,139],{"class":55},[20,171057,171058,171059,171061],{},"不建议裸写 ",[42,171060,170994],{},"，最好指定异常类型。",[36,171063,171065],{"className":30478,"code":171064,"language":30480,"meta":25,"style":25},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[42,171066,171067,171073,171091,171097,171105],{"__ignoreMap":25},[45,171068,171069,171071],{"class":47,"line":48},[45,171070,170982],{"class":51},[45,171072,3889],{"class":55},[45,171074,171075,171077,171079,171081,171083,171085,171087,171089],{"class":47,"line":66},[45,171076,152486],{"class":55},[45,171078,59],{"class":51},[45,171080,2532],{"class":79},[45,171082,282],{"class":55},[45,171084,53921],{"class":79},[45,171086,282],{"class":55},[45,171088,152494],{"class":62},[45,171090,30597],{"class":55},[45,171092,171093,171095],{"class":47,"line":1331},[45,171094,31399],{"class":79},[45,171096,155861],{"class":55},[45,171098,171099,171101,171103],{"class":47,"line":1346},[45,171100,170994],{"class":51},[45,171102,152326],{"class":79},[45,171104,3889],{"class":55},[45,171106,171107,171109,171111,171113],{"class":47,"line":1352},[45,171108,31399],{"class":79},[45,171110,282],{"class":55},[45,171112,171053],{"class":62},[45,171114,139],{"class":55},[15,171116,171118],{"id":171117},"_94-捕获多个异常","9.4 捕获多个异常",[36,171120,171122],{"className":30478,"code":171121,"language":30480,"meta":25,"style":25},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[42,171123,171124,171130,171151,171171,171178,171186,171197,171206],{"__ignoreMap":25},[45,171125,171126,171128],{"class":47,"line":48},[45,171127,170982],{"class":51},[45,171129,3889],{"class":55},[45,171131,171132,171135,171137,171139,171141,171143,171145,171147,171149],{"class":47,"line":66},[45,171133,171134],{"class":55},"    nums ",[45,171136,59],{"class":51},[45,171138,52326],{"class":55},[45,171140,495],{"class":79},[45,171142,12584],{"class":55},[45,171144,356],{"class":79},[45,171146,12584],{"class":55},[45,171148,350],{"class":79},[45,171150,33346],{"class":55},[45,171152,171153,171156,171158,171160,171162,171164,171166,171169],{"class":47,"line":1331},[45,171154,171155],{"class":55},"    index ",[45,171157,59],{"class":51},[45,171159,2532],{"class":79},[45,171161,282],{"class":55},[45,171163,53921],{"class":79},[45,171165,282],{"class":55},[45,171167,171168],{"class":62},"\"请输入索引:\"",[45,171170,30597],{"class":55},[45,171172,171173,171175],{"class":47,"line":1346},[45,171174,31399],{"class":79},[45,171176,171177],{"class":55},"(nums[index])\n",[45,171179,171180,171182,171184],{"class":47,"line":1352},[45,171181,170994],{"class":51},[45,171183,152326],{"class":79},[45,171185,3889],{"class":55},[45,171187,171188,171190,171192,171195],{"class":47,"line":1366},[45,171189,31399],{"class":79},[45,171191,282],{"class":55},[45,171193,171194],{"class":62},"\"索引必须是整数\"",[45,171196,139],{"class":55},[45,171198,171199,171201,171204],{"class":47,"line":1372},[45,171200,170994],{"class":51},[45,171202,171203],{"class":79}," IndexError",[45,171205,3889],{"class":55},[45,171207,171208,171210,171212,171215],{"class":47,"line":1463},[45,171209,31399],{"class":79},[45,171211,282],{"class":55},[45,171213,171214],{"class":62},"\"索引越界\"",[45,171216,139],{"class":55},[20,171218,171219],{},"多个异常使用相同处理逻辑：",[36,171221,171223],{"className":30478,"code":171222,"language":30480,"meta":25,"style":25},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[42,171224,171225,171231,171249,171262,171276],{"__ignoreMap":25},[45,171226,171227,171229],{"class":47,"line":48},[45,171228,170982],{"class":51},[45,171230,3889],{"class":55},[45,171232,171233,171235,171237,171239,171241,171243,171245,171247],{"class":47,"line":66},[45,171234,45693],{"class":55},[45,171236,59],{"class":51},[45,171238,2532],{"class":79},[45,171240,282],{"class":55},[45,171242,53921],{"class":79},[45,171244,282],{"class":55},[45,171246,155896],{"class":62},[45,171248,30597],{"class":55},[45,171250,171251,171253,171255,171257,171259],{"class":47,"line":1331},[45,171252,31399],{"class":79},[45,171254,282],{"class":55},[45,171256,723],{"class":79},[45,171258,156146],{"class":51},[45,171260,171261],{"class":55}," num)\n",[45,171263,171264,171266,171268,171270,171272,171274],{"class":47,"line":1346},[45,171265,170994],{"class":51},[45,171267,1809],{"class":55},[45,171269,154934],{"class":79},[45,171271,12584],{"class":55},[45,171273,170877],{"class":79},[45,171275,30886],{"class":55},[45,171277,171278,171280,171282,171285],{"class":47,"line":1352},[45,171279,31399],{"class":79},[45,171281,282],{"class":55},[45,171283,171284],{"class":62},"\"输入不合法\"",[45,171286,139],{"class":55},[15,171288,171290],{"id":171289},"_95-获取异常信息","9.5 获取异常信息",[36,171292,171294],{"className":30478,"code":171293,"language":30480,"meta":25,"style":25},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[42,171295,171296,171302,171316,171327],{"__ignoreMap":25},[45,171297,171298,171300],{"class":47,"line":48},[45,171299,170982],{"class":51},[45,171301,3889],{"class":55},[45,171303,171304,171306,171308,171310,171312,171314],{"class":47,"line":66},[45,171305,45693],{"class":55},[45,171307,59],{"class":51},[45,171309,2532],{"class":79},[45,171311,282],{"class":55},[45,171313,155980],{"class":62},[45,171315,139],{"class":55},[45,171317,171318,171320,171322,171324],{"class":47,"line":1331},[45,171319,170994],{"class":51},[45,171321,152326],{"class":79},[45,171323,64704],{"class":51},[45,171325,171326],{"class":55}," e:\n",[45,171328,171329,171331,171333,171335,171338,171340,171342,171344,171346],{"class":47,"line":1346},[45,171330,31399],{"class":79},[45,171332,282],{"class":55},[45,171334,331],{"class":51},[45,171336,171337],{"class":62},"\"出错了:",[45,171339,1173],{"class":79},[45,171341,353],{"class":55},[45,171343,1223],{"class":79},[45,171345,89],{"class":62},[45,171347,139],{"class":55},[20,171349,146557],{},[36,171351,171354],{"className":171352,"code":171353,"language":5337,"meta":25},[5335],"出错了:invalid literal for int() with base 10: 'abc'\n",[42,171355,171353],{"__ignoreMap":25},[15,171357,171359],{"id":171358},"_96-else和finally","9.6 else和finally",[20,171361,171362,171364],{},[42,171363,1852],{},"：没有异常时执行。",[20,171366,171367,171370],{},[42,171368,171369],{},"finally","：无论是否异常都会执行。",[36,171372,171374],{"className":30478,"code":171373,"language":30480,"meta":25,"style":25},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[42,171375,171376,171382,171400,171408,171418,171424,171445,171451],{"__ignoreMap":25},[45,171377,171378,171380],{"class":47,"line":48},[45,171379,170982],{"class":51},[45,171381,3889],{"class":55},[45,171383,171384,171386,171388,171390,171392,171394,171396,171398],{"class":47,"line":66},[45,171385,45693],{"class":55},[45,171387,59],{"class":51},[45,171389,2532],{"class":79},[45,171391,282],{"class":55},[45,171393,53921],{"class":79},[45,171395,282],{"class":55},[45,171397,155896],{"class":62},[45,171399,30597],{"class":55},[45,171401,171402,171404,171406],{"class":47,"line":1331},[45,171403,170994],{"class":51},[45,171405,152326],{"class":79},[45,171407,3889],{"class":55},[45,171409,171410,171412,171414,171416],{"class":47,"line":1346},[45,171411,31399],{"class":79},[45,171413,282],{"class":55},[45,171415,153314],{"class":62},[45,171417,139],{"class":55},[45,171419,171420,171422],{"class":47,"line":1352},[45,171421,1852],{"class":51},[45,171423,3889],{"class":55},[45,171425,171426,171428,171430,171432,171435,171437,171439,171441,171443],{"class":47,"line":1366},[45,171427,31399],{"class":79},[45,171429,282],{"class":55},[45,171431,331],{"class":51},[45,171433,171434],{"class":62},"\"输入正确:",[45,171436,1173],{"class":79},[45,171438,1816],{"class":55},[45,171440,1223],{"class":79},[45,171442,89],{"class":62},[45,171444,139],{"class":55},[45,171446,171447,171449],{"class":47,"line":1372},[45,171448,171369],{"class":51},[45,171450,3889],{"class":55},[45,171452,171453,171455,171457,171460],{"class":47,"line":1463},[45,171454,31399],{"class":79},[45,171456,282],{"class":55},[45,171458,171459],{"class":62},"\"程序结束\"",[45,171461,139],{"class":55},[20,171463,171464,171466],{},[42,171465,171369],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[15,171468,171470],{"id":171469},"_97-抛出异常","9.7 抛出异常",[20,171472,171473],{},"程序可以主动抛出异常。",[36,171475,171477],{"className":30478,"code":171476,"language":30480,"meta":25,"style":25},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[42,171478,171479,171488,171500,171513,171533,171537,171541],{"__ignoreMap":25},[45,171480,171481,171483,171486],{"class":47,"line":48},[45,171482,32047],{"class":51},[45,171484,171485],{"class":69}," set_age",[45,171487,161515],{"class":55},[45,171489,171490,171492,171494,171496,171498],{"class":47,"line":66},[45,171491,3251],{"class":51},[45,171493,15856],{"class":55},[45,171495,1187],{"class":51},[45,171497,4243],{"class":79},[45,171499,3889],{"class":55},[45,171501,171502,171504,171506,171508,171511],{"class":47,"line":1331},[45,171503,103532],{"class":51},[45,171505,152326],{"class":79},[45,171507,282],{"class":55},[45,171509,171510],{"class":62},"\"年龄不能为负数\"",[45,171512,139],{"class":55},[45,171514,171515,171517,171519,171521,171523,171525,171527,171529,171531],{"class":47,"line":1346},[45,171516,31399],{"class":79},[45,171518,282],{"class":55},[45,171520,331],{"class":51},[45,171522,162083],{"class":62},[45,171524,1173],{"class":79},[45,171526,70321],{"class":55},[45,171528,1223],{"class":79},[45,171530,89],{"class":62},[45,171532,139],{"class":55},[45,171534,171535],{"class":47,"line":1352},[45,171536,2550],{"emptyLinePlaceholder":207},[45,171538,171539],{"class":47,"line":1366},[45,171540,2550],{"emptyLinePlaceholder":207},[45,171542,171543,171546,171548,171550],{"class":47,"line":1372},[45,171544,171545],{"class":55},"set_age(",[45,171547,809],{"class":51},[45,171549,495],{"class":79},[45,171551,139],{"class":55},[20,171553,171554],{},"调用者可以捕获：",[36,171556,171558],{"className":30478,"code":171557,"language":30480,"meta":25,"style":25},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[42,171559,171560,171566,171577,171587],{"__ignoreMap":25},[45,171561,171562,171564],{"class":47,"line":48},[45,171563,170982],{"class":51},[45,171565,3889],{"class":55},[45,171567,171568,171571,171573,171575],{"class":47,"line":66},[45,171569,171570],{"class":55},"    set_age(",[45,171572,809],{"class":51},[45,171574,495],{"class":79},[45,171576,139],{"class":55},[45,171578,171579,171581,171583,171585],{"class":47,"line":1331},[45,171580,170994],{"class":51},[45,171582,152326],{"class":79},[45,171584,64704],{"class":51},[45,171586,171326],{"class":55},[45,171588,171589,171591],{"class":47,"line":1346},[45,171590,31399],{"class":79},[45,171592,67099],{"class":55},[15,171594,171596],{"id":171595},"_98-自定义异常","9.8 自定义异常",[36,171598,171600],{"className":30478,"code":171599,"language":30480,"meta":25,"style":25},"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",[42,171601,171602,171616,171620,171624,171628,171636,171646,171657,171667,171671,171675,171681,171698,171709],{"__ignoreMap":25},[45,171603,171604,171606,171609,171611,171614],{"class":47,"line":48},[45,171605,14843],{"class":51},[45,171607,171608],{"class":69}," BalanceNotEnoughError",[45,171610,282],{"class":55},[45,171612,171613],{"class":79},"Exception",[45,171615,30886],{"class":55},[45,171617,171618],{"class":47,"line":66},[45,171619,149637],{"class":51},[45,171621,171622],{"class":47,"line":1331},[45,171623,2550],{"emptyLinePlaceholder":207},[45,171625,171626],{"class":47,"line":1346},[45,171627,2550],{"emptyLinePlaceholder":207},[45,171629,171630,171632,171634],{"class":47,"line":1352},[45,171631,32047],{"class":51},[45,171633,150286],{"class":69},[45,171635,162912],{"class":55},[45,171637,171638,171640,171642,171644],{"class":47,"line":1366},[45,171639,3251],{"class":51},[45,171641,150242],{"class":55},[45,171643,1237],{"class":51},[45,171645,162689],{"class":55},[45,171647,171648,171650,171653,171655],{"class":47,"line":1372},[45,171649,103532],{"class":51},[45,171651,171652],{"class":55}," BalanceNotEnoughError(",[45,171654,150337],{"class":62},[45,171656,139],{"class":55},[45,171658,171659,171661,171663,171665],{"class":47,"line":1463},[45,171660,4240],{"class":51},[45,171662,162919],{"class":55},[45,171664,809],{"class":51},[45,171666,150275],{"class":55},[45,171668,171669],{"class":47,"line":1469},[45,171670,2550],{"emptyLinePlaceholder":207},[45,171672,171673],{"class":47,"line":1481},[45,171674,2550],{"emptyLinePlaceholder":207},[45,171676,171677,171679],{"class":47,"line":1763},[45,171678,170982],{"class":51},[45,171680,3889],{"class":55},[45,171682,171683,171685,171687,171690,171692,171694,171696],{"class":47,"line":1768},[45,171684,162590],{"class":55},[45,171686,59],{"class":51},[45,171688,171689],{"class":55}," withdraw(",[45,171691,588],{"class":79},[45,171693,12584],{"class":55},[45,171695,1873],{"class":79},[45,171697,139],{"class":55},[45,171699,171700,171702,171705,171707],{"class":47,"line":1774},[45,171701,170994],{"class":51},[45,171703,171704],{"class":55}," BalanceNotEnoughError ",[45,171706,31483],{"class":51},[45,171708,171326],{"class":55},[45,171710,171711,171713],{"class":47,"line":1779},[45,171712,31399],{"class":79},[45,171714,67099],{"class":55},[20,171716,171717],{},"入门阶段大多数情况使用内置异常即可。",[15,171719,171721],{"id":171720},"_99-traceback","9.9 traceback",[20,171723,171724],{},"调试时可以输出完整异常堆栈。",[36,171726,171728],{"className":30478,"code":171727,"language":30480,"meta":25,"style":25},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[42,171729,171730,171737,171741,171747,171757,171765],{"__ignoreMap":25},[45,171731,171732,171734],{"class":47,"line":48},[45,171733,30492],{"class":51},[45,171735,171736],{"class":55}," traceback\n",[45,171738,171739],{"class":47,"line":66},[45,171740,2550],{"emptyLinePlaceholder":207},[45,171742,171743,171745],{"class":47,"line":1331},[45,171744,170982],{"class":51},[45,171746,3889],{"class":55},[45,171748,171749,171751,171753,171755],{"class":47,"line":1346},[45,171750,2135],{"class":79},[45,171752,282],{"class":55},[45,171754,155980],{"class":62},[45,171756,139],{"class":55},[45,171758,171759,171761,171763],{"class":47,"line":1352},[45,171760,170994],{"class":51},[45,171762,152326],{"class":79},[45,171764,3889],{"class":55},[45,171766,171767],{"class":47,"line":1366},[45,171768,171769],{"class":55},"    traceback.print_exc()\n",[20,171771,171772],{},"日志系统中常把异常堆栈记录到文件。",[15,171774,171776],{"id":171775},"_910-什么是模块","9.10 什么是模块",[20,171778,171779,171780,126083],{},"模块就是一个 ",[42,171781,146452],{},[20,171783,171784,171785,24766],{},"例如创建 ",[42,171786,171787],{},"my_math.py",[36,171789,171791],{"className":30478,"code":171790,"language":30480,"meta":25,"style":25},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[42,171792,171793,171801,171811,171815,171819,171828],{"__ignoreMap":25},[45,171794,171795,171797,171799],{"class":47,"line":48},[45,171796,32047],{"class":51},[45,171798,5359],{"class":69},[45,171800,151193],{"class":55},[45,171802,171803,171805,171807,171809],{"class":47,"line":66},[45,171804,4240],{"class":51},[45,171806,11018],{"class":55},[45,171808,758],{"class":51},[45,171810,151204],{"class":55},[45,171812,171813],{"class":47,"line":1331},[45,171814,2550],{"emptyLinePlaceholder":207},[45,171816,171817],{"class":47,"line":1346},[45,171818,2550],{"emptyLinePlaceholder":207},[45,171820,171821,171823,171826],{"class":47,"line":1352},[45,171822,32047],{"class":51},[45,171824,171825],{"class":69}," sub",[45,171827,151193],{"class":55},[45,171829,171830,171832,171834,171836],{"class":47,"line":1366},[45,171831,4240],{"class":51},[45,171833,11018],{"class":55},[45,171835,809],{"class":51},[45,171837,151204],{"class":55},[20,171839,171840],{},"在另一个文件中导入：",[36,171842,171844],{"className":30478,"code":171843,"language":30480,"meta":25,"style":25},"import my_math\n\nprint(my_math.add(1, 2))\n",[42,171845,171846,171853,171857],{"__ignoreMap":25},[45,171847,171848,171850],{"class":47,"line":48},[45,171849,30492],{"class":51},[45,171851,171852],{"class":55}," my_math\n",[45,171854,171855],{"class":47,"line":66},[45,171856,2550],{"emptyLinePlaceholder":207},[45,171858,171859,171861,171864,171866,171868,171870],{"class":47,"line":1331},[45,171860,30515],{"class":79},[45,171862,171863],{"class":55},"(my_math.add(",[45,171865,495],{"class":79},[45,171867,12584],{"class":55},[45,171869,356],{"class":79},[45,171871,30597],{"class":55},[15,171873,171875],{"id":171874},"_911-import导入","9.11 import导入",[249,171877,171879],{"id":171878},"_9111-导入模块","9.11.1 导入模块",[36,171881,171883],{"className":30478,"code":171882,"language":30480,"meta":25,"style":25},"import random\n\nprint(random.randint(1, 10))\n",[42,171884,171885,171891,171895],{"__ignoreMap":25},[45,171886,171887,171889],{"class":47,"line":48},[45,171888,30492],{"class":51},[45,171890,45428],{"class":55},[45,171892,171893],{"class":47,"line":66},[45,171894,2550],{"emptyLinePlaceholder":207},[45,171896,171897,171899,171902,171904,171906,171908],{"class":47,"line":1331},[45,171898,30515],{"class":79},[45,171900,171901],{"class":55},"(random.randint(",[45,171903,495],{"class":79},[45,171905,12584],{"class":55},[45,171907,723],{"class":79},[45,171909,30597],{"class":55},[249,171911,171913],{"id":171912},"_9112-导入指定内容","9.11.2 导入指定内容",[36,171915,171917],{"className":30478,"code":171916,"language":30480,"meta":25,"style":25},"from random import randint\n\nprint(randint(1, 10))\n",[42,171918,171919,171930,171934],{"__ignoreMap":25},[45,171920,171921,171923,171925,171927],{"class":47,"line":48},[45,171922,30837],{"class":51},[45,171924,57896],{"class":55},[45,171926,30492],{"class":51},[45,171928,171929],{"class":55}," randint\n",[45,171931,171932],{"class":47,"line":66},[45,171933,2550],{"emptyLinePlaceholder":207},[45,171935,171936,171938,171941,171943,171945,171947],{"class":47,"line":1331},[45,171937,30515],{"class":79},[45,171939,171940],{"class":55},"(randint(",[45,171942,495],{"class":79},[45,171944,12584],{"class":55},[45,171946,723],{"class":79},[45,171948,30597],{"class":55},[249,171950,171952],{"id":171951},"_9113-起别名","9.11.3 起别名",[36,171954,171956],{"className":30478,"code":171955,"language":30480,"meta":25,"style":25},"import random as rd\n\nprint(rd.randint(1, 10))\n",[42,171957,171958,171969,171973],{"__ignoreMap":25},[45,171959,171960,171962,171964,171966],{"class":47,"line":48},[45,171961,30492],{"class":51},[45,171963,57896],{"class":55},[45,171965,31483],{"class":51},[45,171967,171968],{"class":55}," rd\n",[45,171970,171971],{"class":47,"line":66},[45,171972,2550],{"emptyLinePlaceholder":207},[45,171974,171975,171977,171980,171982,171984,171986],{"class":47,"line":1331},[45,171976,30515],{"class":79},[45,171978,171979],{"class":55},"(rd.randint(",[45,171981,495],{"class":79},[45,171983,12584],{"class":55},[45,171985,723],{"class":79},[45,171987,30597],{"class":55},[36,171989,171991],{"className":30478,"code":171990,"language":30480,"meta":25,"style":25},"from random import randint as rint\n\nprint(rint(1, 10))\n",[42,171992,171993,172009,172013],{"__ignoreMap":25},[45,171994,171995,171997,171999,172001,172004,172006],{"class":47,"line":48},[45,171996,30837],{"class":51},[45,171998,57896],{"class":55},[45,172000,30492],{"class":51},[45,172002,172003],{"class":55}," randint ",[45,172005,31483],{"class":51},[45,172007,172008],{"class":55}," rint\n",[45,172010,172011],{"class":47,"line":66},[45,172012,2550],{"emptyLinePlaceholder":207},[45,172014,172015,172017,172020,172022,172024,172026],{"class":47,"line":1331},[45,172016,30515],{"class":79},[45,172018,172019],{"class":55},"(rint(",[45,172021,495],{"class":79},[45,172023,12584],{"class":55},[45,172025,723],{"class":79},[45,172027,30597],{"class":55},[249,172029,172031],{"id":172030},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[36,172033,172035],{"className":30478,"code":172034,"language":30480,"meta":25,"style":25},"from random import *\n",[42,172036,172037],{"__ignoreMap":25},[45,172038,172039,172041,172043,172045],{"class":47,"line":48},[45,172040,30837],{"class":51},[45,172042,57896],{"class":55},[45,172044,30492],{"class":51},[45,172046,172047],{"class":51}," *\n",[20,172049,172050],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[15,172052,172054],{"id":172053},"_912-常用内置模块","9.12 常用内置模块",[249,172056,172058],{"id":172057},"_9121-random","9.12.1 random",[36,172060,172062],{"className":30478,"code":172061,"language":30480,"meta":25,"style":25},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[42,172063,172064,172070,172074,172088,172107],{"__ignoreMap":25},[45,172065,172066,172068],{"class":47,"line":48},[45,172067,30492],{"class":51},[45,172069,45428],{"class":55},[45,172071,172072],{"class":47,"line":66},[45,172073,2550],{"emptyLinePlaceholder":207},[45,172075,172076,172078,172080,172082,172084,172086],{"class":47,"line":1331},[45,172077,30515],{"class":79},[45,172079,171901],{"class":55},[45,172081,495],{"class":79},[45,172083,12584],{"class":55},[45,172085,723],{"class":79},[45,172087,30597],{"class":55},[45,172089,172090,172092,172095,172097,172099,172101,172103,172105],{"class":47,"line":1346},[45,172091,30515],{"class":79},[45,172093,172094],{"class":55},"(random.choice([",[45,172096,149988],{"class":62},[45,172098,12584],{"class":55},[45,172100,151036],{"class":62},[45,172102,12584],{"class":55},[45,172104,159831],{"class":62},[45,172106,33243],{"class":55},[45,172108,172109,172111,172114,172116,172118,172120,172122,172124,172126,172128,172130,172132,172134,172136],{"class":47,"line":1352},[45,172110,30515],{"class":79},[45,172112,172113],{"class":55},"(random.sample([",[45,172115,495],{"class":79},[45,172117,12584],{"class":55},[45,172119,356],{"class":79},[45,172121,12584],{"class":55},[45,172123,350],{"class":79},[45,172125,12584],{"class":55},[45,172127,570],{"class":79},[45,172129,12584],{"class":55},[45,172131,596],{"class":79},[45,172133,112302],{"class":55},[45,172135,356],{"class":79},[45,172137,30597],{"class":55},[249,172139,172141],{"id":172140},"_9122-time","9.12.2 time",[36,172143,172145],{"className":30478,"code":172144,"language":30480,"meta":25,"style":25},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[42,172146,172147,172153,172157,172164,172172],{"__ignoreMap":25},[45,172148,172149,172151],{"class":47,"line":48},[45,172150,30492],{"class":51},[45,172152,31929],{"class":55},[45,172154,172155],{"class":47,"line":66},[45,172156,2550],{"emptyLinePlaceholder":207},[45,172158,172159,172161],{"class":47,"line":1331},[45,172160,30515],{"class":79},[45,172162,172163],{"class":55},"(time.time())\n",[45,172165,172166,172168,172170],{"class":47,"line":1346},[45,172167,95171],{"class":55},[45,172169,495],{"class":79},[45,172171,139],{"class":55},[45,172173,172174,172176,172178,172181],{"class":47,"line":1352},[45,172175,30515],{"class":79},[45,172177,282],{"class":55},[45,172179,172180],{"class":62},"\"1秒后执行\"",[45,172182,139],{"class":55},[249,172184,172186],{"id":172185},"_9123-datetime","9.12.3 datetime",[36,172188,172190],{"className":30478,"code":172189,"language":30480,"meta":25,"style":25},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[42,172191,172192,172204,172208,172218,172225],{"__ignoreMap":25},[45,172193,172194,172196,172199,172201],{"class":47,"line":48},[45,172195,30837],{"class":51},[45,172197,172198],{"class":55}," datetime ",[45,172200,30492],{"class":51},[45,172202,172203],{"class":55}," datetime\n",[45,172205,172206],{"class":47,"line":66},[45,172207,2550],{"emptyLinePlaceholder":207},[45,172209,172210,172213,172215],{"class":47,"line":1331},[45,172211,172212],{"class":55},"now ",[45,172214,59],{"class":51},[45,172216,172217],{"class":55}," datetime.now()\n",[45,172219,172220,172222],{"class":47,"line":1346},[45,172221,30515],{"class":79},[45,172223,172224],{"class":55},"(now)\n",[45,172226,172227,172229,172232,172235,172237,172240],{"class":47,"line":1352},[45,172228,30515],{"class":79},[45,172230,172231],{"class":55},"(now.strftime(",[45,172233,172234],{"class":62},"\"%Y-%m-",[45,172236,156791],{"class":79},[45,172238,172239],{"class":62}," %H:%M:%S\"",[45,172241,30597],{"class":55},[249,172243,172245],{"id":172244},"_9124-os","9.12.4 os",[36,172247,172249],{"className":30478,"code":172248,"language":30480,"meta":25,"style":25},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[42,172250,172251,172257,172261,172268],{"__ignoreMap":25},[45,172252,172253,172255],{"class":47,"line":48},[45,172254,30492],{"class":51},[45,172256,45405],{"class":55},[45,172258,172259],{"class":47,"line":66},[45,172260,2550],{"emptyLinePlaceholder":207},[45,172262,172263,172265],{"class":47,"line":1331},[45,172264,30515],{"class":79},[45,172266,172267],{"class":55},"(os.getcwd())\n",[45,172269,172270,172272,172275,172278],{"class":47,"line":1346},[45,172271,30515],{"class":79},[45,172273,172274],{"class":55},"(os.listdir(",[45,172276,172277],{"class":62},"\".\"",[45,172279,30597],{"class":55},[249,172281,172283],{"id":172282},"_9125-sys","9.12.5 sys",[36,172285,172287],{"className":30478,"code":172286,"language":30480,"meta":25,"style":25},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[42,172288,172289,172296,172300,172307],{"__ignoreMap":25},[45,172290,172291,172293],{"class":47,"line":48},[45,172292,30492],{"class":51},[45,172294,172295],{"class":55}," sys\n",[45,172297,172298],{"class":47,"line":66},[45,172299,2550],{"emptyLinePlaceholder":207},[45,172301,172302,172304],{"class":47,"line":1331},[45,172303,30515],{"class":79},[45,172305,172306],{"class":55},"(sys.version)\n",[45,172308,172309,172311],{"class":47,"line":1346},[45,172310,30515],{"class":79},[45,172312,172313],{"class":55},"(sys.path)\n",[15,172315,172317,172318,172320,172321,89],{"id":172316},"_913-if-name-main","9.13 if ",[427,172319,79910],{}," == \"",[427,172322,102158],{},[20,172324,172325,172326,172329],{},"模块被直接运行和被导入时，",[42,172327,172328],{},"__name__"," 的值不同。",[20,172331,172332,172333,24766],{},"创建 ",[42,172334,172335],{},"my_module.py",[36,172337,172339],{"className":30478,"code":172338,"language":30480,"meta":25,"style":25},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[42,172340,172341,172349,172359,172363,172367,172379],{"__ignoreMap":25},[45,172342,172343,172345,172347],{"class":47,"line":48},[45,172344,32047],{"class":51},[45,172346,5359],{"class":69},[45,172348,151193],{"class":55},[45,172350,172351,172353,172355,172357],{"class":47,"line":66},[45,172352,4240],{"class":51},[45,172354,11018],{"class":55},[45,172356,758],{"class":51},[45,172358,151204],{"class":55},[45,172360,172361],{"class":47,"line":1331},[45,172362,2550],{"emptyLinePlaceholder":207},[45,172364,172365],{"class":47,"line":1346},[45,172366,2550],{"emptyLinePlaceholder":207},[45,172368,172369,172371,172373,172375,172377],{"class":47,"line":1352},[45,172370,1682],{"class":51},[45,172372,31320],{"class":79},[45,172374,101659],{"class":51},[45,172376,101662],{"class":62},[45,172378,3889],{"class":55},[45,172380,172381,172383,172385,172387,172389,172391],{"class":47,"line":1366},[45,172382,31399],{"class":79},[45,172384,166700],{"class":55},[45,172386,495],{"class":79},[45,172388,12584],{"class":55},[45,172390,356],{"class":79},[45,172392,30597],{"class":55},[20,172394,172395],{},"作用：",[233,172397,172398,172401],{},[169,172399,172400],{},"直接运行该文件时，执行测试代码。",[169,172402,172403],{},"被其他文件导入时，不执行测试代码。",[20,172405,172406],{},"这是写模块时很常用的习惯。",[15,172408,172410],{"id":172409},"_914-包","9.14 包",[20,172412,172413,172414,172417],{},"包是包含 ",[42,172415,172416],{},"__init__.py"," 的目录，用于组织多个模块。",[20,172419,172420],{},"目录结构：",[36,172422,172425],{"className":172423,"code":172424,"language":5337,"meta":25},[5335],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[42,172426,172424],{"__ignoreMap":25},[20,172428,172429],{},"导入：",[36,172431,172433],{"className":30478,"code":172432,"language":30480,"meta":25,"style":25},"from utils.file_utils import read_file\n",[42,172434,172435],{"__ignoreMap":25},[45,172436,172437,172439,172442,172444],{"class":47,"line":48},[45,172438,30837],{"class":51},[45,172440,172441],{"class":55}," utils.file_utils ",[45,172443,30492],{"class":51},[45,172445,172446],{"class":55}," read_file\n",[20,172448,172449,172451],{},[42,172450,172416],{}," 可以为空，也可以写包初始化逻辑。",[15,172453,172455],{"id":172454},"_915-第三方包","9.15 第三方包",[20,172457,172458,172459,172461],{},"第三方包通过 ",[42,172460,23978],{}," 安装。",[36,172463,172465],{"className":38,"code":172464,"language":40,"meta":25,"style":25},"pip install requests\n",[42,172466,172467],{"__ignoreMap":25},[45,172468,172469,172471,172473],{"class":47,"line":48},[45,172470,23978],{"class":69},[45,172472,23981],{"class":62},[45,172474,146198],{"class":62},[20,172476,172477],{},"使用：",[36,172479,172481],{"className":30478,"code":172480,"language":30480,"meta":25,"style":25},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[42,172482,172483,172489,172493,172508],{"__ignoreMap":25},[45,172484,172485,172487],{"class":47,"line":48},[45,172486,30492],{"class":51},[45,172488,146198],{"class":55},[45,172490,172491],{"class":47,"line":66},[45,172492,2550],{"emptyLinePlaceholder":207},[45,172494,172495,172498,172500,172503,172506],{"class":47,"line":1331},[45,172496,172497],{"class":55},"response ",[45,172499,59],{"class":51},[45,172501,172502],{"class":55}," requests.get(",[45,172504,172505],{"class":62},"\"https:\u002F\u002Fwww.example.com\"",[45,172507,139],{"class":55},[45,172509,172510,172512],{"class":47,"line":1346},[45,172511,30515],{"class":79},[45,172513,172514],{"class":55},"(response.status_code)\n",[20,172516,172517],{},"查看已安装包：",[36,172519,172521],{"className":38,"code":172520,"language":40,"meta":25,"style":25},"pip list\n",[42,172522,172523],{"__ignoreMap":25},[45,172524,172525,172527],{"class":47,"line":48},[45,172526,23978],{"class":69},[45,172528,119055],{"class":62},[20,172530,172531],{},"导出项目依赖：",[36,172533,172534],{"className":38,"code":146393,"language":40,"meta":25,"style":25},[42,172535,172536],{"__ignoreMap":25},[45,172537,172538,172540,172542,172544],{"class":47,"line":48},[45,172539,23978],{"class":69},[45,172541,146402],{"class":62},[45,172543,26322],{"class":51},[45,172545,146407],{"class":62},[20,172547,172548],{},"安装项目依赖：",[36,172550,172551],{"className":38,"code":146413,"language":40,"meta":25,"style":25},[42,172552,172553],{"__ignoreMap":25},[45,172554,172555,172557,172559,172561],{"class":47,"line":48},[45,172556,23978],{"class":69},[45,172558,23981],{"class":62},[45,172560,119739],{"class":79},[45,172562,146407],{"class":62},[15,172564,172566],{"id":172565},"_916-模块搜索路径","9.16 模块搜索路径",[20,172568,172569,172570,172573],{},"Python 导入模块时会在 ",[42,172571,172572],{},"sys.path"," 中查找。",[36,172575,172577],{"className":30478,"code":172576,"language":30480,"meta":25,"style":25},"import sys\n\nfor path in sys.path:\n    print(path)\n",[42,172578,172579,172585,172589,172601],{"__ignoreMap":25},[45,172580,172581,172583],{"class":47,"line":48},[45,172582,30492],{"class":51},[45,172584,172295],{"class":55},[45,172586,172587],{"class":47,"line":66},[45,172588,2550],{"emptyLinePlaceholder":207},[45,172590,172591,172593,172596,172598],{"class":47,"line":1331},[45,172592,3175],{"class":51},[45,172594,172595],{"class":55}," path ",[45,172597,26143],{"class":51},[45,172599,172600],{"class":55}," sys.path:\n",[45,172602,172603,172605],{"class":47,"line":1346},[45,172604,31399],{"class":79},[45,172606,169329],{"class":55},[20,172608,172609],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[20,172611,157723],{},[36,172613,172616],{"className":172614,"code":172615,"language":5337,"meta":25},[5335],"random.py\njson.py\ntime.py\n",[42,172617,172615],{"__ignoreMap":25},[20,172619,172620],{},"这些文件名可能导致导入异常。",[15,172622,172624],{"id":172623},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[20,172626,172420],{},[36,172628,172631],{"className":172629,"code":172630,"language":5337,"meta":25},[5335],"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",[42,172632,172630],{"__ignoreMap":25},[20,172634,172635,24766],{},[42,172636,172637],{},"utils\u002Ffile_utils.py",[36,172639,172641],{"className":30478,"code":172640,"language":30480,"meta":25,"style":25},"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",[42,172642,172643,172649,172659,172663,172667,172677,172687,172695,172701,172705,172732,172742,172746,172750,172760,172786],{"__ignoreMap":25},[45,172644,172645,172647],{"class":47,"line":48},[45,172646,30492],{"class":51},[45,172648,147191],{"class":55},[45,172650,172651,172653,172655,172657],{"class":47,"line":66},[45,172652,30837],{"class":51},[45,172654,108411],{"class":55},[45,172656,30492],{"class":51},[45,172658,108416],{"class":55},[45,172660,172661],{"class":47,"line":1331},[45,172662,2550],{"emptyLinePlaceholder":207},[45,172664,172665],{"class":47,"line":1346},[45,172666,2550],{"emptyLinePlaceholder":207},[45,172668,172669,172671,172674],{"class":47,"line":1352},[45,172670,32047],{"class":51},[45,172672,172673],{"class":69}," read_json",[45,172675,172676],{"class":55},"(path):\n",[45,172678,172679,172682,172684],{"class":47,"line":1366},[45,172680,172681],{"class":55},"    path ",[45,172683,59],{"class":51},[45,172685,172686],{"class":55}," Path(path)\n",[45,172688,172689,172691,172693],{"class":47,"line":1372},[45,172690,3251],{"class":51},[45,172692,39030],{"class":51},[45,172694,169410],{"class":55},[45,172696,172697,172699],{"class":47,"line":1463},[45,172698,14901],{"class":51},[45,172700,51938],{"class":55},[45,172702,172703],{"class":47,"line":1469},[45,172704,2550],{"emptyLinePlaceholder":207},[45,172706,172707,172709,172711,172714,172716,172718,172720,172722,172724,172726,172728,172730],{"class":47,"line":1481},[45,172708,34278],{"class":51},[45,172710,146891],{"class":79},[45,172712,172713],{"class":55},"(path, ",[45,172715,146901],{"class":62},[45,172717,12584],{"class":55},[45,172719,146906],{"class":5366},[45,172721,59],{"class":51},[45,172723,146911],{"class":62},[45,172725,13863],{"class":55},[45,172727,31483],{"class":51},[45,172729,148253],{"class":5366},[45,172731,3889],{"class":55},[45,172733,172734,172736,172738,172740],{"class":47,"line":1763},[45,172735,14901],{"class":51},[45,172737,148264],{"class":55},[45,172739,45454],{"class":5366},[45,172741,139],{"class":55},[45,172743,172744],{"class":47,"line":1768},[45,172745,2550],{"emptyLinePlaceholder":207},[45,172747,172748],{"class":47,"line":1774},[45,172749,2550],{"emptyLinePlaceholder":207},[45,172751,172752,172754,172757],{"class":47,"line":1779},[45,172753,32047],{"class":51},[45,172755,172756],{"class":69}," write_json",[45,172758,172759],{"class":55},"(path, data):\n",[45,172761,172762,172764,172766,172768,172770,172772,172774,172776,172778,172780,172782,172784],{"class":47,"line":1793},[45,172763,34278],{"class":51},[45,172765,146891],{"class":79},[45,172767,172713],{"class":55},[45,172769,152076],{"class":62},[45,172771,12584],{"class":55},[45,172773,146906],{"class":5366},[45,172775,59],{"class":51},[45,172777,146911],{"class":62},[45,172779,13863],{"class":55},[45,172781,31483],{"class":51},[45,172783,148253],{"class":5366},[45,172785,3889],{"class":55},[45,172787,172788,172791,172793,172795,172797,172799,172801,172803,172805,172807,172809],{"class":47,"line":1798},[45,172789,172790],{"class":55},"        json.dump(data, ",[45,172792,45454],{"class":5366},[45,172794,12584],{"class":55},[45,172796,147237],{"class":5366},[45,172798,59],{"class":51},[45,172800,34087],{"class":79},[45,172802,12584],{"class":55},[45,172804,152112],{"class":5366},[45,172806,59],{"class":51},[45,172808,356],{"class":79},[45,172810,139],{"class":55},[20,172812,172813,24766],{},[42,172814,154707],{},[36,172816,172818],{"className":30478,"code":172817,"language":30480,"meta":25,"style":25},"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",[42,172819,172820,172831,172835,172848,172868],{"__ignoreMap":25},[45,172821,172822,172824,172826,172828],{"class":47,"line":48},[45,172823,30837],{"class":51},[45,172825,172441],{"class":55},[45,172827,30492],{"class":51},[45,172829,172830],{"class":55}," read_json, write_json\n",[45,172832,172833],{"class":47,"line":66},[45,172834,2550],{"emptyLinePlaceholder":207},[45,172836,172837,172839,172841,172844,172846],{"class":47,"line":1331},[45,172838,159816],{"class":55},[45,172840,59],{"class":51},[45,172842,172843],{"class":55}," read_json(",[45,172845,151931],{"class":62},[45,172847,139],{"class":55},[45,172849,172850,172852,172854,172856,172858,172860,172862,172864,172866],{"class":47,"line":1346},[45,172851,170634],{"class":55},[45,172853,62779],{"class":62},[45,172855,51537],{"class":55},[45,172857,149988],{"class":62},[45,172859,12584],{"class":55},[45,172861,151572],{"class":62},[45,172863,51537],{"class":55},[45,172865,1266],{"class":79},[45,172867,165252],{"class":55},[45,172869,172870,172873,172875],{"class":47,"line":1352},[45,172871,172872],{"class":55},"write_json(",[45,172874,151931],{"class":62},[45,172876,172877],{"class":55},", students)\n",[15,172879,172881],{"id":172880},"_918-易错点","9.18 易错点",[233,172883,172884,172887,172892,172897,172900,172903],{},[169,172885,172886],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[169,172888,172889,172890,28485],{},"能指定异常类型就不要裸写 ",[42,172891,170994],{},[169,172893,172894,172896],{},[42,172895,171369],{}," 无论是否出错都会执行。",[169,172898,172899],{},"模块文件名不要和标准库重名。",[169,172901,172902],{},"导入自己写的模块时，要注意运行目录。",[169,172904,172905],{},"第三方包要安装到当前解释器或虚拟环境中。",[15,172907,172909],{"id":172908},"_919-本章练习","9.19 本章练习",[233,172911,172912,172915,172918,172924,172931],{},[169,172913,172914],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[169,172916,172917],{},"写函数读取文件，如果文件不存在则返回空字符串。",[169,172919,172332,172920,172923],{},[42,172921,172922],{},"math_utils.py","，实现加减乘除函数并导入使用。",[169,172925,172926,172927,172930],{},"创建一个 ",[42,172928,172929],{},"utils"," 包，把 JSON 读写函数放进去。",[169,172932,172933],{},"写一个程序，捕获除零异常和输入格式异常。",[196,172935,172936],{},"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":25,"searchDepth":66,"depth":66,"links":172938},[172939,172940,172941,172942,172943,172944,172945,172946,172947,172948,172949,172955,172962,172964,172965,172966,172967,172968,172969],{"id":170791,"depth":66,"text":170792},{"id":170919,"depth":66,"text":170920},{"id":170968,"depth":66,"text":170969},{"id":171117,"depth":66,"text":171118},{"id":171289,"depth":66,"text":171290},{"id":171358,"depth":66,"text":171359},{"id":171469,"depth":66,"text":171470},{"id":171595,"depth":66,"text":171596},{"id":171720,"depth":66,"text":171721},{"id":171775,"depth":66,"text":171776},{"id":171874,"depth":66,"text":171875,"children":172950},[172951,172952,172953,172954],{"id":171878,"depth":1331,"text":171879},{"id":171912,"depth":1331,"text":171913},{"id":171951,"depth":1331,"text":171952},{"id":172030,"depth":1331,"text":172031},{"id":172053,"depth":66,"text":172054,"children":172956},[172957,172958,172959,172960,172961],{"id":172057,"depth":1331,"text":172058},{"id":172140,"depth":1331,"text":172141},{"id":172185,"depth":1331,"text":172186},{"id":172244,"depth":1331,"text":172245},{"id":172282,"depth":1331,"text":172283},{"id":172316,"depth":66,"text":172963},"9.13 if name == \"main\"",{"id":172409,"depth":66,"text":172410},{"id":172454,"depth":66,"text":172455},{"id":172565,"depth":66,"text":172566},{"id":172623,"depth":66,"text":172624},{"id":172880,"depth":66,"text":172881},{"id":172908,"depth":66,"text":172909},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170783,"description":204},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172976,"title":172977,"body":172978,"description":173141,"extension":205,"meta":173142,"navigation":207,"path":173143,"seo":173144,"stem":173145,"__hash__":173146},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172979,"toc":173136},[172980,172983,172986,172989,173000,173002,173076,173079,173082,173085,173088,173091,173094,173097,173100,173103,173106],[10,172981,172977],{"id":172982},"python教程",[20,172984,172985],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[20,172987,172988],{},"建议学习环境：",[233,172990,172991,172994,172997],{},[169,172992,172993],{},"Python 版本：Python 3.10 及以上。",[169,172995,172996],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[169,172998,172999],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[15,173001,117178],{"id":117178},[233,173003,173004,173010,173016,173022,173028,173034,173040,173046,173052,173058,173064,173070],{},[169,173005,173006],{},[516,173007,173009],{"href":173008},".\u002Fch1-Python","Python环境与第一个程序",[169,173011,173012],{},[516,173013,173015],{"href":173014},".\u002Fch2","基础语法、变量与字符串",[169,173017,173018],{},[516,173019,173021],{"href":173020},".\u002Fch3","判断语句",[169,173023,173024],{},[516,173025,173027],{"href":173026},".\u002Fch4","循环语句",[169,173029,173030],{},[516,173031,173033],{"href":173032},".\u002Fch5","函数基础",[169,173035,173036],{},[516,173037,173039],{"href":173038},".\u002Fch6","数据容器",[169,173041,173042],{},[516,173043,173045],{"href":173044},".\u002Fch7","函数进阶",[169,173047,173048],{},[516,173049,173051],{"href":173050},".\u002Fch8","文件操作",[169,173053,173054],{},[516,173055,173057],{"href":173056},".\u002Fch9","异常、模块与包",[169,173059,173060],{},[516,173061,173063],{"href":173062},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[169,173065,173066],{},[516,173067,173069],{"href":173068},".\u002Fch11","面向对象基础",[169,173071,173072],{},[516,173073,173075],{"href":173074},".\u002Fch12","综合案例与复习路线",[15,173077,173078],{"id":173078},"学习路线",[20,173080,173081],{},"第一阶段：能运行程序。",[20,173083,173084],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[20,173086,173087],{},"第二阶段：能组织数据。",[20,173089,173090],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[20,173092,173093],{},"第三阶段：能封装逻辑。",[20,173095,173096],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[20,173098,173099],{},"第四阶段：能做小项目。",[20,173101,173102],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[15,173104,173105],{"id":173105},"参考资料",[233,173107,173108,173115,173122,173129],{},[169,173109,173110,173111],{},"黑马程序员 Python 入门教程推荐：",[516,173112,173113],{"href":173113,"rel":173114},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24012],[169,173116,173117,173118],{},"Python 官方中文教程：",[516,173119,173120],{"href":173120,"rel":173121},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24012],[169,173123,173124,173125],{},"Python 标准库文档：",[516,173126,173127],{"href":173127,"rel":173128},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24012],[169,173130,173131,173132],{},"pyecharts 文档：",[516,173133,173134],{"href":173134,"rel":173135},"https:\u002F\u002Fpyecharts.org\u002F",[24012],{"title":25,"searchDepth":66,"depth":66,"links":173137},[173138,173139,173140],{"id":117178,"depth":66,"text":117178},{"id":173078,"depth":66,"text":173078},{"id":173105,"depth":66,"text":173105},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23527},"\u002Fwiki\u002F2024-10-10-python",{"title":172977,"description":173141},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331398852]