[{"data":1,"prerenderedAt":173346},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-01-09-genesis-ai-xiang-mu":3,"wiki-doc-nav":476},{"id":4,"title":5,"body":6,"description":12,"extension":469,"meta":470,"navigation":205,"path":472,"seo":473,"stem":474,"__hash__":475},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":8,"toc":467},"minimark",[9,13,18,37,40,106,110,112,152,161,165,168,457,463],[10,11,12],"p",{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[14,15,17],"h1",{"id":16},"_1ubuntu环境配置","1.Ubuntu环境配置",[19,20,21,25,28,31,34],"ol",{},[22,23,24],"li",{},"ubuntu环境换源",[22,26,27],{},"安装cuda",[22,29,30],{},"安装miniconda",[22,32,33],{},"安装pytorch",[22,35,36],{},"安装genesis",[10,38,39],{},"参考链接：",[41,42,47],"pre",{"className":43,"code":44,"language":45,"meta":46,"style":46},"language-bash shiki shiki-themes github-light github-dark","https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n","bash","",[48,49,50],"code",{"__ignoreMap":46},[51,52,55,59,63,67,71,74,77,79,82,85,87,90,93,95,98,101,103],"span",{"class":53,"line":54},"line",1,[51,56,58],{"class":57},"sScJk","https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[51,60,62],{"class":61},"sZZnC","=blogdetail",[51,64,66],{"class":65},"sVt8B","&sharetype",[51,68,70],{"class":69},"szBVR","=",[51,72,73],{"class":61},"blogdetail",[51,75,76],{"class":65},"&sharerId",[51,78,70],{"class":69},[51,80,81],{"class":61},"144728092",[51,83,84],{"class":65},"&sharerefer",[51,86,70],{"class":69},[51,88,89],{"class":61},"PC",[51,91,92],{"class":65},"&sharesource",[51,94,70],{"class":69},[51,96,97],{"class":61},"qq_69379513",[51,99,100],{"class":65},"&sharefrom",[51,102,70],{"class":69},[51,104,105],{"class":61},"from_link\n",[14,107,109],{"id":108},"_2genesis-报错issue","2.Genesis 报错issue",[10,111,39],{},[41,113,114],{"className":43,"code":44,"language":45,"meta":46,"style":46},[48,115,116],{"__ignoreMap":46},[51,117,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150],{"class":53,"line":54},[51,119,58],{"class":57},[51,121,62],{"class":61},[51,123,66],{"class":65},[51,125,70],{"class":69},[51,127,73],{"class":61},[51,129,76],{"class":65},[51,131,70],{"class":69},[51,133,81],{"class":61},[51,135,84],{"class":65},[51,137,70],{"class":69},[51,139,89],{"class":61},[51,141,92],{"class":65},[51,143,70],{"class":69},[51,145,97],{"class":61},[51,147,100],{"class":65},[51,149,70],{"class":69},[51,151,105],{"class":61},[41,153,155],{"className":43,"code":154,"language":45,"meta":46,"style":46},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[48,156,157],{"__ignoreMap":46},[51,158,159],{"class":53,"line":54},[51,160,154],{"class":57},[14,162,164],{"id":163},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[10,166,167],{},"hello_robot.py",[41,169,173],{"className":170,"code":171,"language":172,"meta":46,"style":46},"language-python shiki shiki-themes github-light github-dark","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","python",[48,174,175,183,200,207,221,235,240,255,260,283,294,305,322,327,332,338,343,355,364,381,390,401,407,412,431,437,442,451],{"__ignoreMap":46},[51,176,177,180],{"class":53,"line":54},[51,178,179],{"class":69},"import",[51,181,182],{"class":65}," os\n",[51,184,186,189,192,195,197],{"class":53,"line":185},2,[51,187,188],{"class":65},"os.environ[",[51,190,191],{"class":61},"'PYOPENGL_PLATFORM'",[51,193,194],{"class":65},"] ",[51,196,70],{"class":69},[51,198,199],{"class":61}," 'glx'\n",[51,201,203],{"class":53,"line":202},3,[51,204,206],{"emptyLinePlaceholder":205},true,"\n",[51,208,210,212,215,218],{"class":53,"line":209},4,[51,211,179],{"class":69},[51,213,214],{"class":65}," genesis ",[51,216,217],{"class":69},"as",[51,219,220],{"class":65}," gs\n",[51,222,224,227,230,232],{"class":53,"line":223},5,[51,225,226],{"class":69},"from",[51,228,229],{"class":65}," pynput ",[51,231,179],{"class":69},[51,233,234],{"class":65}," keyboard\n",[51,236,238],{"class":53,"line":237},6,[51,239,206],{"emptyLinePlaceholder":205},[51,241,243,246,250,252],{"class":53,"line":242},7,[51,244,245],{"class":65},"gs.init(",[51,247,249],{"class":248},"s4XuR","backend",[51,251,70],{"class":69},[51,253,254],{"class":65},"gs.gpu)\n",[51,256,258],{"class":53,"line":257},8,[51,259,206],{"emptyLinePlaceholder":205},[51,261,263,266,268,271,274,276,280],{"class":53,"line":262},9,[51,264,265],{"class":65},"scene ",[51,267,70],{"class":69},[51,269,270],{"class":65}," gs.Scene(",[51,272,273],{"class":248},"show_viewer",[51,275,70],{"class":69},[51,277,279],{"class":278},"sj4cs","True",[51,281,282],{"class":65},")\n",[51,284,286,289,291],{"class":53,"line":285},10,[51,287,288],{"class":65},"plane ",[51,290,70],{"class":69},[51,292,293],{"class":65}," scene.add_entity(gs.morphs.Plane())\n",[51,295,297,300,302],{"class":53,"line":296},11,[51,298,299],{"class":65},"franka ",[51,301,70],{"class":69},[51,303,304],{"class":65}," scene.add_entity(\n",[51,306,308,311,314,316,319],{"class":53,"line":307},12,[51,309,310],{"class":65},"    gs.morphs.MJCF(",[51,312,313],{"class":248},"file",[51,315,70],{"class":69},[51,317,318],{"class":61},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[51,320,321],{"class":65},"),\n",[51,323,325],{"class":53,"line":324},13,[51,326,282],{"class":65},[51,328,330],{"class":53,"line":329},14,[51,331,206],{"emptyLinePlaceholder":205},[51,333,335],{"class":53,"line":334},15,[51,336,337],{"class":65},"scene.build()\n",[51,339,341],{"class":53,"line":340},16,[51,342,206],{"emptyLinePlaceholder":205},[51,344,346,349,352],{"class":53,"line":345},17,[51,347,348],{"class":69},"def",[51,350,351],{"class":57}," on_press",[51,353,354],{"class":65},"(key):\n",[51,356,358,361],{"class":53,"line":357},18,[51,359,360],{"class":69},"    try",[51,362,363],{"class":65},":\n",[51,365,367,370,373,376,379],{"class":53,"line":366},19,[51,368,369],{"class":69},"        if",[51,371,372],{"class":65}," key.char ",[51,374,375],{"class":69},"==",[51,377,378],{"class":61}," 'q'",[51,380,363],{"class":65},[51,382,384,387],{"class":53,"line":383},20,[51,385,386],{"class":69},"            return",[51,388,389],{"class":278}," False\n",[51,391,393,396,399],{"class":53,"line":392},21,[51,394,395],{"class":69},"    except",[51,397,398],{"class":278}," AttributeError",[51,400,363],{"class":65},[51,402,404],{"class":53,"line":403},22,[51,405,406],{"class":69},"        pass\n",[51,408,410],{"class":53,"line":409},23,[51,411,206],{"emptyLinePlaceholder":205},[51,413,415,418,420,423,426,428],{"class":53,"line":414},24,[51,416,417],{"class":65},"listener ",[51,419,70],{"class":69},[51,421,422],{"class":65}," keyboard.Listener(",[51,424,425],{"class":248},"on_press",[51,427,70],{"class":69},[51,429,430],{"class":65},"on_press)\n",[51,432,434],{"class":53,"line":433},25,[51,435,436],{"class":65},"listener.start()\n",[51,438,440],{"class":53,"line":439},26,[51,441,206],{"emptyLinePlaceholder":205},[51,443,445,448],{"class":53,"line":444},27,[51,446,447],{"class":69},"while",[51,449,450],{"class":65}," listener.running:\n",[51,452,454],{"class":53,"line":453},28,[51,455,456],{"class":65},"    scene.step()\n",[10,458,459],{},[460,461],"img",{"alt":46,"src":462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[464,465,466],"style",{},"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":46,"searchDepth":185,"depth":185,"links":468},[],"md",{"category":471},"机器人","\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":5,"description":12},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",[477,5547,6654,8074,11063,12414,13903,14992,23754,23766,24363,24389,24513,24754,24819,24837,24850,24897,25021,25190,25389,25569,25774,25910,26005,26042,26055,26365,27106,27814,27835,28855,30486,30637,30650,30662,30960,50765,50780,50797,50830,53702,77050,93195,93216,93329,93450,94220,94883,95244,95282,95388,95488,95531,95557,95618,97272,97373,97398,97889,98389,99469,99752,100494,100996,101008,103024,104688,106191,107889,109805,111724,113746,117216,117648,118111,118860,121804,122152,122174,122530,125837,125849,126180,126203,126350,126517,126722,127023,127580,128237,130168,131766,132415,133909,135340,136575,138269,140021,142431,142547,143482,143693,144578,145813,146041,146054,147209,149621,151989,155310,157787,159431,161208,163221,166273,168453,170980,173174],{"id":478,"title":479,"body":480,"description":46,"extension":469,"meta":5542,"navigation":205,"path":5543,"seo":5544,"stem":5545,"__hash__":5546},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":481,"toc":5514},[482,485,490,493,497,508,512,517,520,523,526,529,532,559,563,566,569,572,575,626,630,648,650,664,667,675,678,1541,1548,1565,1569,1655,1659,1665,1751,1755,1793,1797,1861,1865,1869,1875,1886,1890,1895,1899,1904,1908,1913,1917,1921,1926,2178,2183,2321,2326,2582,2585,2593,2597,2602,2705,2708,3012,3021,3122,3125,3128,3131,3134,3393,3398,3538,3541,3720,3723,3851,3854,4006,4010,4015,4018,4029,4037,4040,4146,4150,4154,4159,4209,4214,4219,4243,4248,4301,4304,4309,4486,4491,4776,4781,5177,5181,5186,5243,5248,5256,5259,5399,5402,5511],[14,483,479],{"id":484},"_1基础入门",[486,487,489],"h2",{"id":488},"_11注释","1.1注释",[10,491,492],{},"\u002F\u002F或者\u002F* *\u002F",[486,494,496],{"id":495},"_12命名","1.2命名",[19,498,499,502,505],{},[22,500,501],{},"字母数字下划线",[22,503,504],{},"开头必须是字母或_",[22,506,507],{},"不能使用关键词",[486,509,511],{"id":510},"_13数据类型","1.3数据类型",[513,514,516],"h3",{"id":515},"_131整形","1.3.1整形",[10,518,519],{},"short 短整形 2",[10,521,522],{},"int 整形 4",[10,524,525],{},"long 长整形 win4 linux32位4 linux64位8",[10,527,528],{},"long long 长长整形 8",[10,530,531],{},"利用sizeof可以求数据类型占用的内存空间大小",[41,533,537],{"className":534,"code":535,"language":536,"meta":46,"style":46},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[48,538,539,552],{"__ignoreMap":46},[51,540,541,544,547,550],{"class":53,"line":54},[51,542,543],{"class":69},"sizeof",[51,545,546],{"class":65},"(",[51,548,549],{"class":69},"int",[51,551,282],{"class":65},[51,553,554,556],{"class":53,"line":185},[51,555,543],{"class":69},[51,557,558],{"class":65},"(num)\n",[513,560,562],{"id":561},"_132浮点型","1.3.2浮点型",[10,564,565],{},"float 单精度 4节 7位有效数字",[10,567,568],{},"double 双精度 8节 15-16有效数字",[10,570,571],{},"默认情况下，输出一个小数，会显示6位有效数字",[10,573,574],{},"注意点：",[41,576,578],{"className":534,"code":577,"language":536,"meta":46,"style":46},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[48,579,580,603],{"__ignoreMap":46},[51,581,582,585,588,590,593,596,599],{"class":53,"line":54},[51,583,584],{"class":69},"float",[51,586,587],{"class":65}," f1",[51,589,70],{"class":69},[51,591,592],{"class":278},"3.14",[51,594,595],{"class":69},"f",[51,597,598],{"class":65},";",[51,600,602],{"class":601},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[51,604,605,607,610,612,615,618,621,623],{"class":53,"line":185},[51,606,584],{"class":69},[51,608,609],{"class":65}," f2",[51,611,70],{"class":69},[51,613,614],{"class":278},"3",[51,616,617],{"class":69},"e",[51,619,620],{"class":278},"2",[51,622,598],{"class":65},[51,624,625],{"class":601}," \u002F\u002F科学记数法\n",[513,627,629],{"id":628},"_133字符型","1.3.3字符型",[41,631,633],{"className":534,"code":632,"language":536,"meta":46,"style":46},"char ch='a'\n",[48,634,635],{"__ignoreMap":46},[51,636,637,640,643,645],{"class":53,"line":54},[51,638,639],{"class":69},"char",[51,641,642],{"class":65}," ch",[51,644,70],{"class":69},[51,646,647],{"class":61},"'a'\n",[10,649,574],{},[19,651,652,655,658,661],{},[22,653,654],{},"在显示字符型变量时，只能单引号，双引号x",[22,656,657],{},"单引号内只能一个字符，不能字符串",[22,659,660],{},"c和c++字符型变量只占用一个字符",[22,662,663],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[10,665,666],{},"ASCII码大致由以下两部分组成：",[19,668,669,672],{},[22,670,671],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[22,673,674],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[10,676,677],{},"ASCII码表格：",[679,680,681,725],"table",{},[682,683,684],"thead",{},[685,686,687,695,700,704,709,713,717,721],"tr",{},[688,689,690,694],"th",{},[691,692,693],"strong",{},"ASCII","值",[688,696,697],{},[691,698,699],{},"控制字符",[688,701,702,694],{},[691,703,693],{},[688,705,706],{},[691,707,708],{},"字符",[688,710,711,694],{},[691,712,693],{},[688,714,715],{},[691,716,708],{},[688,718,719,694],{},[691,720,693],{},[688,722,723],{},[691,724,708],{},[726,727,728,755,781,806,831,857,882,907,933,958,984,1010,1036,1061,1087,1113,1139,1163,1188,1213,1238,1263,1288,1313,1338,1363,1388,1414,1439,1464,1489,1515],"tbody",{},[685,729,730,734,737,740,743,746,749,752],{},[731,732,733],"td",{},"0",[731,735,736],{},"NUT",[731,738,739],{},"32",[731,741,742],{},"(space)",[731,744,745],{},"64",[731,747,748],{},"@",[731,750,751],{},"96",[731,753,754],{},"、",[685,756,757,760,763,766,769,772,775,778],{},[731,758,759],{},"1",[731,761,762],{},"SOH",[731,764,765],{},"33",[731,767,768],{},"!",[731,770,771],{},"65",[731,773,774],{},"A",[731,776,777],{},"97",[731,779,780],{},"a",[685,782,783,785,788,791,794,797,800,803],{},[731,784,620],{},[731,786,787],{},"STX",[731,789,790],{},"34",[731,792,793],{},"\"",[731,795,796],{},"66",[731,798,799],{},"B",[731,801,802],{},"98",[731,804,805],{},"b",[685,807,808,810,813,816,819,822,825,828],{},[731,809,614],{},[731,811,812],{},"ETX",[731,814,815],{},"35",[731,817,818],{},"#",[731,820,821],{},"67",[731,823,824],{},"C",[731,826,827],{},"99",[731,829,830],{},"c",[685,832,833,836,839,842,845,848,851,854],{},[731,834,835],{},"4",[731,837,838],{},"EOT",[731,840,841],{},"36",[731,843,844],{},"$",[731,846,847],{},"68",[731,849,850],{},"D",[731,852,853],{},"100",[731,855,856],{},"d",[685,858,859,862,865,868,871,874,877,880],{},[731,860,861],{},"5",[731,863,864],{},"ENQ",[731,866,867],{},"37",[731,869,870],{},"%",[731,872,873],{},"69",[731,875,876],{},"E",[731,878,879],{},"101",[731,881,617],{},[685,883,884,887,890,893,896,899,902,905],{},[731,885,886],{},"6",[731,888,889],{},"ACK",[731,891,892],{},"38",[731,894,895],{},"&",[731,897,898],{},"70",[731,900,901],{},"F",[731,903,904],{},"102",[731,906,595],{},[685,908,909,912,915,918,921,924,927,930],{},[731,910,911],{},"7",[731,913,914],{},"BEL",[731,916,917],{},"39",[731,919,920],{},",",[731,922,923],{},"71",[731,925,926],{},"G",[731,928,929],{},"103",[731,931,932],{},"g",[685,934,935,938,941,944,946,949,952,955],{},[731,936,937],{},"8",[731,939,940],{},"BS",[731,942,943],{},"40",[731,945,546],{},[731,947,948],{},"72",[731,950,951],{},"H",[731,953,954],{},"104",[731,956,957],{},"h",[685,959,960,963,966,969,972,975,978,981],{},[731,961,962],{},"9",[731,964,965],{},"HT",[731,967,968],{},"41",[731,970,971],{},")",[731,973,974],{},"73",[731,976,977],{},"I",[731,979,980],{},"105",[731,982,983],{},"i",[685,985,986,989,992,995,998,1001,1004,1007],{},[731,987,988],{},"10",[731,990,991],{},"LF",[731,993,994],{},"42",[731,996,997],{},"*",[731,999,1000],{},"74",[731,1002,1003],{},"J",[731,1005,1006],{},"106",[731,1008,1009],{},"j",[685,1011,1012,1015,1018,1021,1024,1027,1030,1033],{},[731,1013,1014],{},"11",[731,1016,1017],{},"VT",[731,1019,1020],{},"43",[731,1022,1023],{},"+",[731,1025,1026],{},"75",[731,1028,1029],{},"K",[731,1031,1032],{},"107",[731,1034,1035],{},"k",[685,1037,1038,1041,1044,1047,1049,1052,1055,1058],{},[731,1039,1040],{},"12",[731,1042,1043],{},"FF",[731,1045,1046],{},"44",[731,1048,920],{},[731,1050,1051],{},"76",[731,1053,1054],{},"L",[731,1056,1057],{},"108",[731,1059,1060],{},"l",[685,1062,1063,1066,1069,1072,1075,1078,1081,1084],{},[731,1064,1065],{},"13",[731,1067,1068],{},"CR",[731,1070,1071],{},"45",[731,1073,1074],{},"-",[731,1076,1077],{},"77",[731,1079,1080],{},"M",[731,1082,1083],{},"109",[731,1085,1086],{},"m",[685,1088,1089,1092,1095,1098,1101,1104,1107,1110],{},[731,1090,1091],{},"14",[731,1093,1094],{},"SO",[731,1096,1097],{},"46",[731,1099,1100],{},".",[731,1102,1103],{},"78",[731,1105,1106],{},"N",[731,1108,1109],{},"110",[731,1111,1112],{},"n",[685,1114,1115,1118,1121,1124,1127,1130,1133,1136],{},[731,1116,1117],{},"15",[731,1119,1120],{},"SI",[731,1122,1123],{},"47",[731,1125,1126],{},"\u002F",[731,1128,1129],{},"79",[731,1131,1132],{},"O",[731,1134,1135],{},"111",[731,1137,1138],{},"o",[685,1140,1141,1144,1147,1150,1152,1155,1158,1161],{},[731,1142,1143],{},"16",[731,1145,1146],{},"DLE",[731,1148,1149],{},"48",[731,1151,733],{},[731,1153,1154],{},"80",[731,1156,1157],{},"P",[731,1159,1160],{},"112",[731,1162,10],{},[685,1164,1165,1168,1171,1174,1176,1179,1182,1185],{},[731,1166,1167],{},"17",[731,1169,1170],{},"DCI",[731,1172,1173],{},"49",[731,1175,759],{},[731,1177,1178],{},"81",[731,1180,1181],{},"Q",[731,1183,1184],{},"113",[731,1186,1187],{},"q",[685,1189,1190,1193,1196,1199,1201,1204,1207,1210],{},[731,1191,1192],{},"18",[731,1194,1195],{},"DC2",[731,1197,1198],{},"50",[731,1200,620],{},[731,1202,1203],{},"82",[731,1205,1206],{},"R",[731,1208,1209],{},"114",[731,1211,1212],{},"r",[685,1214,1215,1218,1221,1224,1226,1229,1232,1235],{},[731,1216,1217],{},"19",[731,1219,1220],{},"DC3",[731,1222,1223],{},"51",[731,1225,614],{},[731,1227,1228],{},"83",[731,1230,1231],{},"S",[731,1233,1234],{},"115",[731,1236,1237],{},"s",[685,1239,1240,1243,1246,1249,1251,1254,1257,1260],{},[731,1241,1242],{},"20",[731,1244,1245],{},"DC4",[731,1247,1248],{},"52",[731,1250,835],{},[731,1252,1253],{},"84",[731,1255,1256],{},"T",[731,1258,1259],{},"116",[731,1261,1262],{},"t",[685,1264,1265,1268,1271,1274,1276,1279,1282,1285],{},[731,1266,1267],{},"21",[731,1269,1270],{},"NAK",[731,1272,1273],{},"53",[731,1275,861],{},[731,1277,1278],{},"85",[731,1280,1281],{},"U",[731,1283,1284],{},"117",[731,1286,1287],{},"u",[685,1289,1290,1293,1296,1299,1301,1304,1307,1310],{},[731,1291,1292],{},"22",[731,1294,1295],{},"SYN",[731,1297,1298],{},"54",[731,1300,886],{},[731,1302,1303],{},"86",[731,1305,1306],{},"V",[731,1308,1309],{},"118",[731,1311,1312],{},"v",[685,1314,1315,1318,1321,1324,1326,1329,1332,1335],{},[731,1316,1317],{},"23",[731,1319,1320],{},"TB",[731,1322,1323],{},"55",[731,1325,911],{},[731,1327,1328],{},"87",[731,1330,1331],{},"W",[731,1333,1334],{},"119",[731,1336,1337],{},"w",[685,1339,1340,1343,1346,1349,1351,1354,1357,1360],{},[731,1341,1342],{},"24",[731,1344,1345],{},"CAN",[731,1347,1348],{},"56",[731,1350,937],{},[731,1352,1353],{},"88",[731,1355,1356],{},"X",[731,1358,1359],{},"120",[731,1361,1362],{},"x",[685,1364,1365,1368,1371,1374,1376,1379,1382,1385],{},[731,1366,1367],{},"25",[731,1369,1370],{},"EM",[731,1372,1373],{},"57",[731,1375,962],{},[731,1377,1378],{},"89",[731,1380,1381],{},"Y",[731,1383,1384],{},"121",[731,1386,1387],{},"y",[685,1389,1390,1393,1396,1399,1402,1405,1408,1411],{},[731,1391,1392],{},"26",[731,1394,1395],{},"SUB",[731,1397,1398],{},"58",[731,1400,1401],{},":",[731,1403,1404],{},"90",[731,1406,1407],{},"Z",[731,1409,1410],{},"122",[731,1412,1413],{},"z",[685,1415,1416,1419,1422,1425,1427,1430,1433,1436],{},[731,1417,1418],{},"27",[731,1420,1421],{},"ESC",[731,1423,1424],{},"59",[731,1426,598],{},[731,1428,1429],{},"91",[731,1431,1432],{},"[",[731,1434,1435],{},"123",[731,1437,1438],{},"{",[685,1440,1441,1444,1447,1450,1453,1456,1458,1461],{},[731,1442,1443],{},"28",[731,1445,1446],{},"FS",[731,1448,1449],{},"60",[731,1451,1452],{},"\u003C",[731,1454,1455],{},"92",[731,1457,1126],{},[731,1459,1460],{},"124",[731,1462,1463],{},"|",[685,1465,1466,1469,1472,1475,1477,1480,1483,1486],{},[731,1467,1468],{},"29",[731,1470,1471],{},"GS",[731,1473,1474],{},"61",[731,1476,70],{},[731,1478,1479],{},"93",[731,1481,1482],{},"]",[731,1484,1485],{},"125",[731,1487,1488],{},"}",[685,1490,1491,1494,1497,1500,1503,1506,1509,1512],{},[731,1492,1493],{},"30",[731,1495,1496],{},"RS",[731,1498,1499],{},"62",[731,1501,1502],{},">",[731,1504,1505],{},"94",[731,1507,1508],{},"^",[731,1510,1511],{},"126",[731,1513,1514],{},"`",[685,1516,1517,1520,1523,1526,1529,1532,1535,1538],{},[731,1518,1519],{},"31",[731,1521,1522],{},"US",[731,1524,1525],{},"63",[731,1527,1528],{},"?",[731,1530,1531],{},"95",[731,1533,1534],{},"_",[731,1536,1537],{},"127",[731,1539,1540],{},"DEL",[10,1542,1543,1544,1547],{},"ASCII 码大致由以下",[691,1545,1546],{},"两部分组","成：",[1549,1550,1551,1558],"ul",{},[22,1552,1553,1554,1557],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[691,1555,1556],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[22,1559,1560,1561,1564],{},"ASCII 打印字符：数字 ",[691,1562,1563],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[513,1566,1568],{"id":1567},"_134转义字符","1.3.4转义字符",[41,1570,1572],{"className":534,"code":1571,"language":536,"meta":46,"style":46},"\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",[48,1573,1574,1579,1595,1609,1614,1627,1632],{"__ignoreMap":46},[51,1575,1576],{"class":53,"line":54},[51,1577,1578],{"class":601},"\u002F\u002F换行符\n",[51,1580,1581,1584,1587,1590,1592],{"class":53,"line":185},[51,1582,1583],{"class":65},"cout ",[51,1585,1586],{"class":69},"\u003C\u003C",[51,1588,1589],{"class":61},"\"hello world\u002Fn\"",[51,1591,598],{"class":65},[51,1593,1594],{"class":601}," \u002F\u002F就等同于如下：\n",[51,1596,1597,1599,1601,1604,1606],{"class":53,"line":202},[51,1598,1583],{"class":65},[51,1600,1586],{"class":69},[51,1602,1603],{"class":61},"\"hello world\"",[51,1605,1586],{"class":69},[51,1607,1608],{"class":65},"endl;\n",[51,1610,1611],{"class":53,"line":209},[51,1612,1613],{"class":601},"\u002F\u002F反斜杠\n",[51,1615,1616,1618,1620,1623,1625],{"class":53,"line":223},[51,1617,1583],{"class":65},[51,1619,1586],{"class":69},[51,1621,1622],{"class":61},"\"\u002F\u002F\"",[51,1624,1586],{"class":69},[51,1626,1608],{"class":65},[51,1628,1629],{"class":53,"line":237},[51,1630,1631],{"class":601},"\u002F\u002F水平制表符\n",[51,1633,1634,1636,1638,1641,1644,1647,1649,1652],{"class":53,"line":242},[51,1635,1583],{"class":65},[51,1637,1586],{"class":69},[51,1639,1640],{"class":61},"\"aaaa",[51,1642,1643],{"class":278},"\\t",[51,1645,1646],{"class":61},"helloworld\"",[51,1648,1586],{"class":69},[51,1650,1651],{"class":65},"endl;",[51,1653,1654],{"class":601}," \u002F\u002F输出窗口时有对齐效果\n",[513,1656,1658],{"id":1657},"_135字符串型","1.3.5字符串型",[10,1660,1661,1662,1664],{},"char 变量名",[51,1663],{},"=\"字符串值\"",[41,1666,1668],{"className":534,"code":1667,"language":536,"meta":46,"style":46},"\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",[48,1669,1670,1675,1680,1685,1690,1704,1717,1722,1727,1738],{"__ignoreMap":46},[51,1671,1672],{"class":53,"line":54},[51,1673,1674],{"class":601},"\u002F\u002Fc风格字符串\n",[51,1676,1677],{"class":53,"line":185},[51,1678,1679],{"class":601},"\u002F\u002F注意事项：\n",[51,1681,1682],{"class":53,"line":202},[51,1683,1684],{"class":601},"\u002F\u002F1.char字符串名[]\n",[51,1686,1687],{"class":53,"line":209},[51,1688,1689],{"class":601},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[51,1691,1692,1694,1697,1699,1701],{"class":53,"line":223},[51,1693,639],{"class":69},[51,1695,1696],{"class":65}," str[]",[51,1698,70],{"class":69},[51,1700,1603],{"class":61},[51,1702,1703],{"class":65},";\n",[51,1705,1706,1708,1710,1713,1715],{"class":53,"line":237},[51,1707,1583],{"class":65},[51,1709,1586],{"class":69},[51,1711,1712],{"class":65},"str",[51,1714,1586],{"class":69},[51,1716,1608],{"class":65},[51,1718,1719],{"class":53,"line":242},[51,1720,1721],{"class":601},"\u002F\u002Fc++风格字符串\n",[51,1723,1724],{"class":53,"line":257},[51,1725,1726],{"class":601},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[51,1728,1729,1732,1734,1736],{"class":53,"line":262},[51,1730,1731],{"class":65},"string str2",[51,1733,70],{"class":69},[51,1735,1603],{"class":61},[51,1737,1703],{"class":65},[51,1739,1740,1742,1744,1747,1749],{"class":53,"line":285},[51,1741,1583],{"class":65},[51,1743,1586],{"class":69},[51,1745,1746],{"class":65},"str2",[51,1748,1586],{"class":69},[51,1750,1608],{"class":65},[513,1752,1754],{"id":1753},"_136布尔类型bool","1.3.6布尔类型bool",[41,1756,1758],{"className":534,"code":1757,"language":536,"meta":46,"style":46},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[48,1759,1760,1775],{"__ignoreMap":46},[51,1761,1762,1765,1768,1770,1773],{"class":53,"line":54},[51,1763,1764],{"class":69},"bool",[51,1766,1767],{"class":65}," flag",[51,1769,70],{"class":69},[51,1771,1772],{"class":278},"true",[51,1774,1703],{"class":65},[51,1776,1777,1780,1783,1786,1788,1790],{"class":53,"line":185},[51,1778,1779],{"class":65},"cout",[51,1781,1782],{"class":69},"\u003C\u003Csizeof",[51,1784,1785],{"class":65},"(flag)",[51,1787,1586],{"class":69},[51,1789,1651],{"class":65},[51,1791,1792],{"class":601}," \u002F\u002F查看布尔占内存空间\n",[486,1794,1796],{"id":1795},"_14键盘输入cin","1.4键盘输入cin",[41,1798,1800],{"className":534,"code":1799,"language":536,"meta":46,"style":46},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[48,1801,1802,1815,1832,1843],{"__ignoreMap":46},[51,1803,1804,1806,1809,1811,1813],{"class":53,"line":54},[51,1805,549],{"class":69},[51,1807,1808],{"class":65}," a",[51,1810,70],{"class":69},[51,1812,733],{"class":278},[51,1814,1703],{"class":65},[51,1816,1817,1819,1821,1824,1826,1828,1830],{"class":53,"line":185},[51,1818,1779],{"class":65},[51,1820,1586],{"class":69},[51,1822,1823],{"class":61},"\"请给整型变量a赋值\"",[51,1825,1586],{"class":69},[51,1827,780],{"class":65},[51,1829,1586],{"class":69},[51,1831,1608],{"class":65},[51,1833,1834,1837,1840],{"class":53,"line":202},[51,1835,1836],{"class":65},"cin ",[51,1838,1839],{"class":69},">>",[51,1841,1842],{"class":65}," a;\n",[51,1844,1845,1847,1849,1852,1855,1857,1859],{"class":53,"line":209},[51,1846,1583],{"class":65},[51,1848,1586],{"class":69},[51,1850,1851],{"class":61}," \"整型变量a=\"",[51,1853,1854],{"class":69}," \u003C\u003C",[51,1856,780],{"class":65},[51,1858,1586],{"class":69},[51,1860,1608],{"class":65},[486,1862,1864],{"id":1863},"_15运算符","1.5运算符",[513,1866,1868],{"id":1867},"_151算术运算符","1.5.1算术运算符",[10,1870,1871,1874],{},[460,1872],{"alt":46,"src":1873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[19,1876,1877,1880,1883],{},[22,1878,1879],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[22,1881,1882],{},"两个小数不可以做取模运算",[22,1884,1885],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[513,1887,1889],{"id":1888},"_152赋值运算符","1.5.2赋值运算符",[10,1891,1892],{},[460,1893],{"alt":46,"src":1894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[513,1896,1898],{"id":1897},"_153比较运算符","1.5.3比较运算符",[10,1900,1901],{},[460,1902],{"alt":46,"src":1903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[513,1905,1907],{"id":1906},"_154逻辑运算符","1.5.4逻辑运算符",[10,1909,1910],{},[460,1911],{"alt":46,"src":1912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[486,1914,1916],{"id":1915},"_16程序流程结构","1.6程序流程结构",[513,1918,1920],{"id":1919},"_161选择结构","1.6.1选择结构",[19,1922,1923],{},[22,1924,1925],{},"if语句\n单行、多行、多条件if语句",[41,1927,1929],{"className":534,"code":1928,"language":536,"meta":46,"style":46},"\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",[48,1930,1931,1936,1951,1956,1970,1975,1980,1989,2002,2006,2019,2023,2028,2032,2045,2049,2054,2074,2078,2091,2095,2123,2127,2143,2147,2151,2155,2168,2172],{"__ignoreMap":46},[51,1932,1933],{"class":53,"line":54},[51,1934,1935],{"class":601},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[51,1937,1938,1941,1944,1946,1949],{"class":53,"line":185},[51,1939,1940],{"class":69},"if",[51,1942,1943],{"class":65},"(score",[51,1945,1502],{"class":69},[51,1947,1948],{"class":278},"600",[51,1950,282],{"class":65},[51,1952,1953],{"class":53,"line":202},[51,1954,1955],{"class":65},"{\n",[51,1957,1958,1961,1963,1966,1968],{"class":53,"line":209},[51,1959,1960],{"class":65},"    cout",[51,1962,1586],{"class":69},[51,1964,1965],{"class":61},"'这是单行if语句'",[51,1967,1586],{"class":69},[51,1969,1608],{"class":65},[51,1971,1972],{"class":53,"line":223},[51,1973,1974],{"class":65},"}\n",[51,1976,1977],{"class":53,"line":237},[51,1978,1979],{"class":601},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[51,1981,1982,1984,1986],{"class":53,"line":242},[51,1983,1836],{"class":65},[51,1985,1839],{"class":69},[51,1987,1988],{"class":65}," score\n",[51,1990,1991,1993,1995,1998,2000],{"class":53,"line":257},[51,1992,1940],{"class":69},[51,1994,1943],{"class":65},[51,1996,1997],{"class":69},"\u003C=",[51,1999,1948],{"class":278},[51,2001,282],{"class":65},[51,2003,2004],{"class":53,"line":262},[51,2005,1955],{"class":65},[51,2007,2008,2010,2012,2015,2017],{"class":53,"line":285},[51,2009,1960],{"class":65},[51,2011,1839],{"class":69},[51,2013,2014],{"class":61},"\"小于等于600\"",[51,2016,1586],{"class":69},[51,2018,1608],{"class":65},[51,2020,2021],{"class":53,"line":296},[51,2022,1974],{"class":65},[51,2024,2025],{"class":53,"line":307},[51,2026,2027],{"class":69},"else\n",[51,2029,2030],{"class":53,"line":324},[51,2031,1955],{"class":65},[51,2033,2034,2036,2038,2041,2043],{"class":53,"line":329},[51,2035,1960],{"class":65},[51,2037,1839],{"class":69},[51,2039,2040],{"class":61},"\"大于600\"",[51,2042,1839],{"class":69},[51,2044,1608],{"class":65},[51,2046,2047],{"class":53,"line":334},[51,2048,1974],{"class":65},[51,2050,2051],{"class":53,"line":340},[51,2052,2053],{"class":601},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[51,2055,2056,2058,2061,2063,2065,2068,2070,2072],{"class":53,"line":345},[51,2057,1940],{"class":69},[51,2059,2060],{"class":65}," (",[51,2062,733],{"class":278},[51,2064,1452],{"class":69},[51,2066,2067],{"class":65},"num",[51,2069,1452],{"class":69},[51,2071,853],{"class":278},[51,2073,282],{"class":65},[51,2075,2076],{"class":53,"line":357},[51,2077,1955],{"class":65},[51,2079,2080,2082,2084,2087,2089],{"class":53,"line":366},[51,2081,1960],{"class":65},[51,2083,1586],{"class":69},[51,2085,2086],{"class":61},"\"小于100\"",[51,2088,1586],{"class":69},[51,2090,1608],{"class":65},[51,2092,2093],{"class":53,"line":383},[51,2094,1974],{"class":65},[51,2096,2097,2100,2103,2106,2109,2111,2114,2116,2118,2121],{"class":53,"line":392},[51,2098,2099],{"class":69},"else",[51,2101,2102],{"class":69}," if",[51,2104,2105],{"class":65}," (nmu",[51,2107,2108],{"class":69},">=",[51,2110,853],{"class":278},[51,2112,2113],{"class":69},"&&",[51,2115,2067],{"class":65},[51,2117,1452],{"class":69},[51,2119,2120],{"class":278},"200",[51,2122,282],{"class":65},[51,2124,2125],{"class":53,"line":403},[51,2126,1955],{"class":65},[51,2128,2129,2131,2133,2136,2138,2140],{"class":53,"line":409},[51,2130,1960],{"class":65},[51,2132,1586],{"class":69},[51,2134,2135],{"class":61},"\"不小于100且小于200\"",[51,2137,1586],{"class":69},[51,2139,1651],{"class":65},[51,2141,2142],{"class":601}," \u002F\u002F可以无限else if,python中是elif：\n",[51,2144,2145],{"class":53,"line":414},[51,2146,1974],{"class":65},[51,2148,2149],{"class":53,"line":433},[51,2150,2027],{"class":69},[51,2152,2153],{"class":53,"line":439},[51,2154,1955],{"class":65},[51,2156,2157,2159,2161,2164,2166],{"class":53,"line":444},[51,2158,1960],{"class":65},[51,2160,1586],{"class":69},[51,2162,2163],{"class":61},"\"不小于200\"",[51,2165,1586],{"class":69},[51,2167,1608],{"class":65},[51,2169,2170],{"class":53,"line":453},[51,2171,1974],{"class":65},[51,2173,2175],{"class":53,"line":2174},29,[51,2176,2177],{"class":601},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[19,2179,2180],{"start":185},[22,2181,2182],{},"三目运算符",[41,2184,2186],{"className":534,"code":2185,"language":536,"meta":46,"style":46},"\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",[48,2187,2188,2193,2198,2224,2246,2263,2268,2291,2306],{"__ignoreMap":46},[51,2189,2190],{"class":53,"line":54},[51,2191,2192],{"class":601},"\u002F\u002F创建三个变量a,b,c\n",[51,2194,2195],{"class":53,"line":185},[51,2196,2197],{"class":601},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[51,2199,2200,2202,2204,2206,2208,2211,2213,2215,2218,2220,2222],{"class":53,"line":202},[51,2201,549],{"class":69},[51,2203,1808],{"class":65},[51,2205,70],{"class":69},[51,2207,1242],{"class":278},[51,2209,2210],{"class":65},",b",[51,2212,70],{"class":69},[51,2214,988],{"class":278},[51,2216,2217],{"class":65},",c",[51,2219,70],{"class":69},[51,2221,733],{"class":278},[51,2223,1703],{"class":65},[51,2225,2226,2228,2230,2233,2235,2237,2239,2241,2243],{"class":53,"line":209},[51,2227,830],{"class":65},[51,2229,70],{"class":69},[51,2231,2232],{"class":65},"(a",[51,2234,1502],{"class":69},[51,2236,805],{"class":65},[51,2238,1528],{"class":69},[51,2240,780],{"class":65},[51,2242,1401],{"class":69},[51,2244,2245],{"class":65},"b)\n",[51,2247,2248,2250,2252,2255,2257,2259,2261],{"class":53,"line":223},[51,2249,1779],{"class":65},[51,2251,1586],{"class":69},[51,2253,2254],{"class":61},"\"c=\"",[51,2256,1586],{"class":69},[51,2258,830],{"class":65},[51,2260,1586],{"class":69},[51,2262,1608],{"class":65},[51,2264,2265],{"class":53,"line":237},[51,2266,2267],{"class":601},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[51,2269,2270,2272,2274,2276,2278,2280,2282,2285,2287,2289],{"class":53,"line":242},[51,2271,2232],{"class":65},[51,2273,1502],{"class":69},[51,2275,805],{"class":65},[51,2277,1528],{"class":69},[51,2279,780],{"class":65},[51,2281,1401],{"class":69},[51,2283,2284],{"class":65},"b)",[51,2286,70],{"class":69},[51,2288,853],{"class":278},[51,2290,1703],{"class":65},[51,2292,2293,2295,2297,2299,2301,2303],{"class":53,"line":257},[51,2294,1779],{"class":65},[51,2296,1586],{"class":69},[51,2298,780],{"class":65},[51,2300,1586],{"class":69},[51,2302,1651],{"class":65},[51,2304,2305],{"class":601}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[51,2307,2308,2310,2312,2314,2316,2318],{"class":53,"line":262},[51,2309,1779],{"class":65},[51,2311,1586],{"class":69},[51,2313,805],{"class":65},[51,2315,1586],{"class":69},[51,2317,1651],{"class":65},[51,2319,2320],{"class":601}," \u002F\u002F10   a>b,b还是原值\n",[19,2322,2323],{"start":202},[22,2324,2325],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[41,2327,2329],{"className":534,"code":2328,"language":536,"meta":46,"style":46},"\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",[48,2330,2331,2336,2344,2357,2367,2371,2385,2398,2408,2416,2421,2446,2467,2489,2510,2532,2553,2573,2578],{"__ignoreMap":46},[51,2332,2333],{"class":53,"line":54},[51,2334,2335],{"class":601},"\u002F\u002F案例-电影打分\n",[51,2337,2338,2341],{"class":53,"line":185},[51,2339,2340],{"class":69},"#include",[51,2342,2343],{"class":61},"\u003Ciostream>\n",[51,2345,2346,2349,2352,2355],{"class":53,"line":202},[51,2347,2348],{"class":69},"using",[51,2350,2351],{"class":69}," namespace",[51,2353,2354],{"class":57}," std",[51,2356,1703],{"class":65},[51,2358,2359,2361,2364],{"class":53,"line":209},[51,2360,549],{"class":69},[51,2362,2363],{"class":57}," main",[51,2365,2366],{"class":65},"()\n",[51,2368,2369],{"class":53,"line":223},[51,2370,1955],{"class":65},[51,2372,2373,2376,2379,2381,2383],{"class":53,"line":237},[51,2374,2375],{"class":69},"    int",[51,2377,2378],{"class":65}," score",[51,2380,70],{"class":69},[51,2382,733],{"class":278},[51,2384,1703],{"class":65},[51,2386,2387,2389,2391,2394,2396],{"class":53,"line":242},[51,2388,1960],{"class":65},[51,2390,1586],{"class":69},[51,2392,2393],{"class":61},"\"电影打分：\"",[51,2395,1586],{"class":69},[51,2397,1608],{"class":65},[51,2399,2400,2403,2405],{"class":53,"line":257},[51,2401,2402],{"class":65},"    cin",[51,2404,1839],{"class":69},[51,2406,2407],{"class":65},"score;\n",[51,2409,2410,2413],{"class":53,"line":262},[51,2411,2412],{"class":69},"    switch",[51,2414,2415],{"class":65},"(score)\n",[51,2417,2418],{"class":53,"line":285},[51,2419,2420],{"class":65},"    {\n",[51,2422,2423,2426,2429,2432,2434,2437,2439,2441,2444],{"class":53,"line":296},[51,2424,2425],{"class":69},"        case",[51,2427,2428],{"class":278}," 10",[51,2430,2431],{"class":65},":cout",[51,2433,1586],{"class":69},[51,2435,2436],{"class":61},"\"经典\"",[51,2438,1586],{"class":69},[51,2440,1651],{"class":65},[51,2442,2443],{"class":69},"break",[51,2445,1703],{"class":65},[51,2447,2448,2450,2453,2455,2457,2459,2461,2463,2465],{"class":53,"line":307},[51,2449,2425],{"class":69},[51,2451,2452],{"class":278}," 9",[51,2454,2431],{"class":65},[51,2456,1586],{"class":69},[51,2458,2436],{"class":61},[51,2460,1586],{"class":69},[51,2462,1651],{"class":65},[51,2464,2443],{"class":69},[51,2466,1703],{"class":65},[51,2468,2469,2471,2474,2476,2478,2481,2483,2485,2487],{"class":53,"line":324},[51,2470,2425],{"class":69},[51,2472,2473],{"class":278}," 8",[51,2475,2431],{"class":65},[51,2477,1586],{"class":69},[51,2479,2480],{"class":61},"\"非常好\"",[51,2482,1586],{"class":69},[51,2484,1651],{"class":65},[51,2486,2443],{"class":69},[51,2488,1703],{"class":65},[51,2490,2491,2493,2496,2498,2500,2502,2504,2506,2508],{"class":53,"line":329},[51,2492,2425],{"class":69},[51,2494,2495],{"class":278}," 7",[51,2497,2431],{"class":65},[51,2499,1586],{"class":69},[51,2501,2480],{"class":61},[51,2503,1586],{"class":69},[51,2505,1651],{"class":65},[51,2507,2443],{"class":69},[51,2509,1703],{"class":65},[51,2511,2512,2514,2517,2519,2521,2524,2526,2528,2530],{"class":53,"line":334},[51,2513,2425],{"class":69},[51,2515,2516],{"class":278}," 6",[51,2518,2431],{"class":65},[51,2520,1586],{"class":69},[51,2522,2523],{"class":61},"\"一般\"",[51,2525,1586],{"class":69},[51,2527,1651],{"class":65},[51,2529,2443],{"class":69},[51,2531,1703],{"class":65},[51,2533,2534,2536,2539,2541,2543,2545,2547,2549,2551],{"class":53,"line":340},[51,2535,2425],{"class":69},[51,2537,2538],{"class":278}," 5",[51,2540,2431],{"class":65},[51,2542,1586],{"class":69},[51,2544,2523],{"class":61},[51,2546,1586],{"class":69},[51,2548,1651],{"class":65},[51,2550,2443],{"class":69},[51,2552,1703],{"class":65},[51,2554,2555,2558,2560,2562,2565,2567,2569,2571],{"class":53,"line":345},[51,2556,2557],{"class":69},"        default",[51,2559,2431],{"class":65},[51,2561,1586],{"class":69},[51,2563,2564],{"class":61},"\"烂片\"",[51,2566,1586],{"class":69},[51,2568,1651],{"class":65},[51,2570,2443],{"class":69},[51,2572,1703],{"class":65},[51,2574,2575],{"class":53,"line":357},[51,2576,2577],{"class":65},"    }\n",[51,2579,2580],{"class":53,"line":366},[51,2581,1974],{"class":65},[10,2583,2584],{},"if和switch区别：",[1549,2586,2587,2590],{},[22,2588,2589],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[22,2591,2592],{},"switch优点：结构清晰，执行效率高",[513,2594,2596],{"id":2595},"_162循环结构","1.6.2循环结构",[19,2598,2599],{},[22,2600,2601],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[41,2603,2605],{"className":534,"code":2604,"language":536,"meta":46,"style":46},"\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",[48,2606,2607,2612,2620,2624,2637,2651,2655,2675,2685,2689,2701],{"__ignoreMap":46},[51,2608,2609],{"class":53,"line":54},[51,2610,2611],{"class":601},"\u002F\u002F打印0-9数字\n",[51,2613,2614,2616,2618],{"class":53,"line":185},[51,2615,549],{"class":69},[51,2617,2363],{"class":57},[51,2619,2366],{"class":65},[51,2621,2622],{"class":53,"line":202},[51,2623,1955],{"class":65},[51,2625,2626,2628,2631,2633,2635],{"class":53,"line":209},[51,2627,2375],{"class":69},[51,2629,2630],{"class":65}," num",[51,2632,70],{"class":69},[51,2634,733],{"class":278},[51,2636,1703],{"class":65},[51,2638,2639,2642,2645,2647,2649],{"class":53,"line":223},[51,2640,2641],{"class":69},"    while",[51,2643,2644],{"class":65},"(num",[51,2646,1452],{"class":69},[51,2648,988],{"class":278},[51,2650,282],{"class":65},[51,2652,2653],{"class":53,"line":237},[51,2654,2420],{"class":65},[51,2656,2657,2660,2663,2665,2667,2669,2672],{"class":53,"line":242},[51,2658,2659],{"class":57},"       std",[51,2661,2662],{"class":65},"::cout",[51,2664,1586],{"class":69},[51,2666,2067],{"class":65},[51,2668,1586],{"class":69},[51,2670,2671],{"class":57},"std",[51,2673,2674],{"class":65},"::endl;\n",[51,2676,2677,2680,2683],{"class":53,"line":257},[51,2678,2679],{"class":65},"        num",[51,2681,2682],{"class":69},"++",[51,2684,1703],{"class":65},[51,2686,2687],{"class":53,"line":262},[51,2688,2577],{"class":65},[51,2690,2691,2694,2696,2699],{"class":53,"line":285},[51,2692,2693],{"class":57},"    system",[51,2695,546],{"class":65},[51,2697,2698],{"class":61},"\"pause\"",[51,2700,282],{"class":65},[51,2702,2703],{"class":53,"line":296},[51,2704,1974],{"class":65},[10,2706,2707],{},"注意：写好循环条件，避免死循环情况",[41,2709,2711],{"className":534,"code":2710,"language":536,"meta":46,"style":46},"\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",[48,2712,2713,2718,2725,2732,2742,2750,2754,2759,2786,2790,2795,2803,2830,2835,2840,2853,2863,2867,2877,2882,2894,2899,2913,2918,2933,2937,2950,2954,2959,2963,2977,2985,2990,2996,3002,3007],{"__ignoreMap":46},[51,2714,2715],{"class":53,"line":54},[51,2716,2717],{"class":601},"\u002F\u002F循环结构-猜数字\n",[51,2719,2720,2722],{"class":53,"line":185},[51,2721,2340],{"class":69},[51,2723,2724],{"class":61}," \u003Ciostream>\n",[51,2726,2727,2729],{"class":53,"line":202},[51,2728,2340],{"class":69},[51,2730,2731],{"class":61}," \u003Cctime>\n",[51,2733,2734,2736,2738,2740],{"class":53,"line":209},[51,2735,2348],{"class":69},[51,2737,2351],{"class":69},[51,2739,2354],{"class":57},[51,2741,1703],{"class":65},[51,2743,2744,2746,2748],{"class":53,"line":223},[51,2745,549],{"class":69},[51,2747,2363],{"class":57},[51,2749,2366],{"class":65},[51,2751,2752],{"class":53,"line":237},[51,2753,1955],{"class":65},[51,2755,2756],{"class":53,"line":242},[51,2757,2758],{"class":601},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[51,2760,2761,2764,2767,2770,2773,2775,2778,2780,2783],{"class":53,"line":257},[51,2762,2763],{"class":57},"    srand",[51,2765,2766],{"class":65},"((",[51,2768,2769],{"class":69},"unsigned",[51,2771,2772],{"class":69}," int",[51,2774,971],{"class":65},[51,2776,2777],{"class":57},"time",[51,2779,546],{"class":65},[51,2781,2782],{"class":278},"NULL",[51,2784,2785],{"class":65},"));\n",[51,2787,2788],{"class":53,"line":262},[51,2789,206],{"emptyLinePlaceholder":205},[51,2791,2792],{"class":53,"line":285},[51,2793,2794],{"class":601},"    \u002F\u002F1.系统生成随机数\n",[51,2796,2797,2800],{"class":53,"line":296},[51,2798,2799],{"class":601},"    \u002F\u002Frand()%100",[51,2801,2802],{"class":601}," \u002F\u002F生成0-99的随机数\n",[51,2804,2805,2807,2809,2811,2814,2817,2819,2821,2823,2825,2827],{"class":53,"line":307},[51,2806,2375],{"class":69},[51,2808,2630],{"class":65},[51,2810,70],{"class":69},[51,2812,2813],{"class":57},"rand",[51,2815,2816],{"class":65},"()",[51,2818,870],{"class":69},[51,2820,853],{"class":278},[51,2822,1023],{"class":69},[51,2824,759],{"class":278},[51,2826,598],{"class":65},[51,2828,2829],{"class":601}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[51,2831,2832],{"class":53,"line":324},[51,2833,2834],{"class":601},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[51,2836,2837],{"class":53,"line":329},[51,2838,2839],{"class":601},"    \u002F\u002F2.玩家猜测\n",[51,2841,2842,2844,2847,2849,2851],{"class":53,"line":334},[51,2843,2375],{"class":69},[51,2845,2846],{"class":65}," val",[51,2848,70],{"class":69},[51,2850,733],{"class":278},[51,2852,1703],{"class":65},[51,2854,2855,2857,2859,2861],{"class":53,"line":340},[51,2856,2641],{"class":69},[51,2858,2060],{"class":65},[51,2860,759],{"class":278},[51,2862,282],{"class":65},[51,2864,2865],{"class":53,"line":345},[51,2866,2420],{"class":65},[51,2868,2869,2872,2874],{"class":53,"line":357},[51,2870,2871],{"class":65},"        cin",[51,2873,1839],{"class":69},[51,2875,2876],{"class":65},"val;\n",[51,2878,2879],{"class":53,"line":366},[51,2880,2881],{"class":601},"        \u002F\u002F3.判断玩家猜测\n",[51,2883,2884,2886,2889,2891],{"class":53,"line":383},[51,2885,369],{"class":69},[51,2887,2888],{"class":65},"(val",[51,2890,1452],{"class":69},[51,2892,2893],{"class":65},"num) \n",[51,2895,2896],{"class":53,"line":392},[51,2897,2898],{"class":65},"        {\n",[51,2900,2901,2904,2906,2909,2911],{"class":53,"line":403},[51,2902,2903],{"class":65},"            cout",[51,2905,1586],{"class":69},[51,2907,2908],{"class":61},"\"猜小了！\"",[51,2910,1586],{"class":69},[51,2912,1608],{"class":65},[51,2914,2915],{"class":53,"line":409},[51,2916,2917],{"class":65},"        }\n",[51,2919,2920,2923,2925,2928,2930],{"class":53,"line":414},[51,2921,2922],{"class":69},"        else",[51,2924,2102],{"class":69},[51,2926,2927],{"class":65}," (val",[51,2929,1502],{"class":69},[51,2931,2932],{"class":65},"num)\n",[51,2934,2935],{"class":53,"line":433},[51,2936,2898],{"class":65},[51,2938,2939,2941,2943,2946,2948],{"class":53,"line":439},[51,2940,2903],{"class":65},[51,2942,1586],{"class":69},[51,2944,2945],{"class":61},"\"猜大了！\"",[51,2947,1586],{"class":69},[51,2949,1608],{"class":65},[51,2951,2952],{"class":53,"line":444},[51,2953,2917],{"class":65},[51,2955,2956],{"class":53,"line":453},[51,2957,2958],{"class":69},"        else\n",[51,2960,2961],{"class":53,"line":2174},[51,2962,2898],{"class":65},[51,2964,2966,2968,2970,2973,2975],{"class":53,"line":2965},30,[51,2967,2903],{"class":65},[51,2969,1586],{"class":69},[51,2971,2972],{"class":61},"\"猜对了！\"",[51,2974,1586],{"class":69},[51,2976,1608],{"class":65},[51,2978,2980,2983],{"class":53,"line":2979},31,[51,2981,2982],{"class":69},"            break",[51,2984,1703],{"class":65},[51,2986,2988],{"class":53,"line":2987},32,[51,2989,2917],{"class":65},[51,2991,2993],{"class":53,"line":2992},33,[51,2994,2995],{"class":601},"        \u002F\u002F猜对 退出游戏\n",[51,2997,2999],{"class":53,"line":2998},34,[51,3000,3001],{"class":601},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[51,3003,3005],{"class":53,"line":3004},35,[51,3006,2577],{"class":65},[51,3008,3010],{"class":53,"line":3009},36,[51,3011,1974],{"class":65},[19,3013,3014],{"start":185},[22,3015,3016,3017,3020],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[691,3018,3019],{},"do...while会先执行一次循环语句","，在判断循环语句",[41,3022,3024],{"className":534,"code":3023,"language":536,"meta":46,"style":46},"\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",[48,3025,3026,3031,3039,3043,3055,3063,3067,3084,3091,3095,3108,3118],{"__ignoreMap":46},[51,3027,3028],{"class":53,"line":54},[51,3029,3030],{"class":601},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[51,3032,3033,3035,3037],{"class":53,"line":185},[51,3034,549],{"class":69},[51,3036,2363],{"class":57},[51,3038,2366],{"class":65},[51,3040,3041],{"class":53,"line":202},[51,3042,1955],{"class":65},[51,3044,3045,3047,3049,3051,3053],{"class":53,"line":209},[51,3046,2375],{"class":69},[51,3048,2630],{"class":65},[51,3050,70],{"class":69},[51,3052,733],{"class":278},[51,3054,1703],{"class":65},[51,3056,3057,3060],{"class":53,"line":223},[51,3058,3059],{"class":69},"    do",[51,3061,3062],{"class":65}," \n",[51,3064,3065],{"class":53,"line":237},[51,3066,2420],{"class":65},[51,3068,3069,3072,3074,3076,3078,3080,3082],{"class":53,"line":242},[51,3070,3071],{"class":57},"        std",[51,3073,2662],{"class":65},[51,3075,1586],{"class":69},[51,3077,2067],{"class":65},[51,3079,1586],{"class":69},[51,3081,2671],{"class":57},[51,3083,2674],{"class":65},[51,3085,3086,3088],{"class":53,"line":257},[51,3087,2679],{"class":65},[51,3089,3090],{"class":69},"++\n",[51,3092,3093],{"class":53,"line":262},[51,3094,2577],{"class":65},[51,3096,3097,3099,3101,3103,3105],{"class":53,"line":285},[51,3098,2641],{"class":69},[51,3100,2644],{"class":65},[51,3102,1452],{"class":69},[51,3104,988],{"class":278},[51,3106,3107],{"class":65},");\n",[51,3109,3110,3112,3114,3116],{"class":53,"line":296},[51,3111,2693],{"class":57},[51,3113,546],{"class":65},[51,3115,2698],{"class":61},[51,3117,3107],{"class":65},[51,3119,3120],{"class":53,"line":307},[51,3121,1974],{"class":65},[10,3123,3124],{},"案例-水仙花数",[10,3126,3127],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[10,3129,3130],{},"例如：1^3+5^3+3^3=153",[10,3132,3133],{},"请用do...while语句，求出所有3位数的水仙花数",[41,3135,3137],{"className":534,"code":3136,"language":536,"meta":46,"style":46},"#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",[48,3138,3139,3145,3155,3163,3167,3172,3184,3190,3194,3199,3215,3231,3247,3262,3281,3296,3343,3347,3359,3363,3371,3375,3389],{"__ignoreMap":46},[51,3140,3141,3143],{"class":53,"line":54},[51,3142,2340],{"class":69},[51,3144,2724],{"class":61},[51,3146,3147,3149,3151,3153],{"class":53,"line":185},[51,3148,2348],{"class":69},[51,3150,2351],{"class":69},[51,3152,2354],{"class":57},[51,3154,1703],{"class":65},[51,3156,3157,3159,3161],{"class":53,"line":202},[51,3158,549],{"class":69},[51,3160,2363],{"class":57},[51,3162,2366],{"class":65},[51,3164,3165],{"class":53,"line":209},[51,3166,1955],{"class":65},[51,3168,3169],{"class":53,"line":223},[51,3170,3171],{"class":601},"    \u002F\u002F1.先打印所有三位数字\n",[51,3173,3174,3176,3178,3180,3182],{"class":53,"line":237},[51,3175,2375],{"class":69},[51,3177,2630],{"class":65},[51,3179,70],{"class":69},[51,3181,853],{"class":278},[51,3183,1703],{"class":65},[51,3185,3186,3188],{"class":53,"line":242},[51,3187,3059],{"class":69},[51,3189,3062],{"class":65},[51,3191,3192],{"class":53,"line":257},[51,3193,2420],{"class":65},[51,3195,3196],{"class":53,"line":262},[51,3197,3198],{"class":601},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[51,3200,3201,3204,3206,3208,3210,3212],{"class":53,"line":285},[51,3202,3203],{"class":69},"        int",[51,3205,1808],{"class":65},[51,3207,70],{"class":69},[51,3209,733],{"class":278},[51,3211,598],{"class":65},[51,3213,3214],{"class":601}," \u002F\u002F个位\n",[51,3216,3217,3219,3222,3224,3226,3228],{"class":53,"line":296},[51,3218,3203],{"class":69},[51,3220,3221],{"class":65}," b",[51,3223,70],{"class":69},[51,3225,733],{"class":278},[51,3227,598],{"class":65},[51,3229,3230],{"class":601}," \u002F\u002F十位\n",[51,3232,3233,3235,3238,3240,3242,3244],{"class":53,"line":307},[51,3234,3203],{"class":69},[51,3236,3237],{"class":65}," c",[51,3239,70],{"class":69},[51,3241,733],{"class":278},[51,3243,598],{"class":65},[51,3245,3246],{"class":601}," \u002F\u002F百位\n",[51,3248,3249,3252,3254,3256,3258,3260],{"class":53,"line":324},[51,3250,3251],{"class":65},"        a",[51,3253,70],{"class":69},[51,3255,2067],{"class":65},[51,3257,870],{"class":69},[51,3259,988],{"class":278},[51,3261,1703],{"class":65},[51,3263,3264,3267,3269,3271,3273,3275,3277,3279],{"class":53,"line":329},[51,3265,3266],{"class":65},"        b",[51,3268,70],{"class":69},[51,3270,2067],{"class":65},[51,3272,1126],{"class":69},[51,3274,988],{"class":278},[51,3276,870],{"class":69},[51,3278,988],{"class":278},[51,3280,1703],{"class":65},[51,3282,3283,3286,3288,3290,3292,3294],{"class":53,"line":334},[51,3284,3285],{"class":65},"        c",[51,3287,70],{"class":69},[51,3289,2067],{"class":65},[51,3291,1126],{"class":69},[51,3293,853],{"class":278},[51,3295,1703],{"class":65},[51,3297,3298,3300,3302,3304,3306,3308,3310,3312,3314,3316,3318,3320,3322,3324,3326,3328,3330,3332,3335,3337,3340],{"class":53,"line":340},[51,3299,369],{"class":69},[51,3301,2232],{"class":65},[51,3303,997],{"class":69},[51,3305,780],{"class":65},[51,3307,997],{"class":69},[51,3309,780],{"class":65},[51,3311,1023],{"class":69},[51,3313,805],{"class":65},[51,3315,997],{"class":69},[51,3317,805],{"class":65},[51,3319,997],{"class":69},[51,3321,805],{"class":65},[51,3323,1023],{"class":69},[51,3325,830],{"class":65},[51,3327,997],{"class":69},[51,3329,830],{"class":65},[51,3331,997],{"class":69},[51,3333,3334],{"class":65},"c ",[51,3336,375],{"class":69},[51,3338,3339],{"class":65}," num)",[51,3341,3342],{"class":601}," \u002F\u002F如果是水仙花数，才打印\n",[51,3344,3345],{"class":53,"line":345},[51,3346,2898],{"class":65},[51,3348,3349,3351,3353,3355,3357],{"class":53,"line":357},[51,3350,2903],{"class":65},[51,3352,1586],{"class":69},[51,3354,2067],{"class":65},[51,3356,1586],{"class":69},[51,3358,1608],{"class":65},[51,3360,3361],{"class":53,"line":366},[51,3362,2917],{"class":65},[51,3364,3365,3367,3369],{"class":53,"line":383},[51,3366,2679],{"class":65},[51,3368,2682],{"class":69},[51,3370,1703],{"class":65},[51,3372,3373],{"class":53,"line":392},[51,3374,2577],{"class":65},[51,3376,3377,3379,3382,3384,3387],{"class":53,"line":403},[51,3378,2641],{"class":69},[51,3380,3381],{"class":65}," (num ",[51,3383,1452],{"class":69},[51,3385,3386],{"class":278}," 1000",[51,3388,3107],{"class":65},[51,3390,3391],{"class":53,"line":409},[51,3392,1974],{"class":65},[19,3394,3395],{"start":202},[22,3396,3397],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[41,3399,3401],{"className":534,"code":3400,"language":536,"meta":46,"style":46},"\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",[48,3402,3403,3408,3437,3441,3453,3457,3462,3473,3480,3484,3498,3502,3509,3513,3525,3534],{"__ignoreMap":46},[51,3404,3405],{"class":53,"line":54},[51,3406,3407],{"class":601},"\u002F\u002F从数字0-9打印\n",[51,3409,3410,3413,3415,3417,3420,3422,3424,3427,3429,3431,3433,3435],{"class":53,"line":185},[51,3411,3412],{"class":69},"for",[51,3414,546],{"class":65},[51,3416,549],{"class":69},[51,3418,3419],{"class":65}," i",[51,3421,70],{"class":69},[51,3423,733],{"class":278},[51,3425,3426],{"class":65},";i",[51,3428,1452],{"class":69},[51,3430,988],{"class":278},[51,3432,3426],{"class":65},[51,3434,2682],{"class":69},[51,3436,282],{"class":65},[51,3438,3439],{"class":53,"line":202},[51,3440,1955],{"class":65},[51,3442,3443,3445,3447,3449,3451],{"class":53,"line":209},[51,3444,1960],{"class":65},[51,3446,1586],{"class":69},[51,3448,983],{"class":65},[51,3450,1586],{"class":69},[51,3452,1608],{"class":65},[51,3454,3455],{"class":53,"line":223},[51,3456,1974],{"class":65},[51,3458,3459],{"class":53,"line":237},[51,3460,3461],{"class":601},"\u002F\u002F上式可以进行拆分\n",[51,3463,3464,3466,3468,3470],{"class":53,"line":242},[51,3465,549],{"class":69},[51,3467,3419],{"class":65},[51,3469,70],{"class":69},[51,3471,3472],{"class":278},"0\n",[51,3474,3475,3477],{"class":53,"line":257},[51,3476,3412],{"class":69},[51,3478,3479],{"class":65},"(;;;)\n",[51,3481,3482],{"class":53,"line":262},[51,3483,1955],{"class":65},[51,3485,3486,3489,3492,3494,3496],{"class":53,"line":285},[51,3487,3488],{"class":69},"    if",[51,3490,3491],{"class":65},"(i",[51,3493,2108],{"class":69},[51,3495,988],{"class":278},[51,3497,282],{"class":65},[51,3499,3500],{"class":53,"line":296},[51,3501,2420],{"class":65},[51,3503,3504,3507],{"class":53,"line":307},[51,3505,3506],{"class":69},"        break",[51,3508,1703],{"class":65},[51,3510,3511],{"class":53,"line":324},[51,3512,2577],{"class":65},[51,3514,3515,3517,3519,3521,3523],{"class":53,"line":329},[51,3516,1960],{"class":65},[51,3518,1586],{"class":69},[51,3520,983],{"class":65},[51,3522,1586],{"class":69},[51,3524,1608],{"class":65},[51,3526,3527,3530,3532],{"class":53,"line":334},[51,3528,3529],{"class":65},"    i",[51,3531,2682],{"class":69},[51,3533,1703],{"class":65},[51,3535,3536],{"class":53,"line":340},[51,3537,1974],{"class":65},[10,3539,3540],{},"小练习",[41,3542,3544],{"className":534,"code":3543,"language":536,"meta":46,"style":46},"#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",[48,3545,3546,3552,3562,3570,3574,3579,3584,3612,3616,3621,3626,3667,3671,3684,3688,3692,3696,3708,3712,3716],{"__ignoreMap":46},[51,3547,3548,3550],{"class":53,"line":54},[51,3549,2340],{"class":69},[51,3551,2343],{"class":61},[51,3553,3554,3556,3558,3560],{"class":53,"line":185},[51,3555,2348],{"class":69},[51,3557,2351],{"class":69},[51,3559,2354],{"class":57},[51,3561,1703],{"class":65},[51,3563,3564,3566,3568],{"class":53,"line":202},[51,3565,549],{"class":69},[51,3567,2363],{"class":57},[51,3569,2366],{"class":65},[51,3571,3572],{"class":53,"line":209},[51,3573,1955],{"class":65},[51,3575,3576],{"class":53,"line":223},[51,3577,3578],{"class":601},"    \u002F\u002F敲桌子案例\n",[51,3580,3581],{"class":53,"line":237},[51,3582,3583],{"class":601},"    \u002F\u002F1.先输出1-100的数字\n",[51,3585,3586,3589,3591,3593,3595,3597,3599,3602,3604,3606,3608,3610],{"class":53,"line":242},[51,3587,3588],{"class":69},"    for",[51,3590,546],{"class":65},[51,3592,549],{"class":69},[51,3594,3419],{"class":65},[51,3596,70],{"class":69},[51,3598,759],{"class":278},[51,3600,3601],{"class":65},"; i",[51,3603,1997],{"class":69},[51,3605,853],{"class":278},[51,3607,3601],{"class":65},[51,3609,2682],{"class":69},[51,3611,282],{"class":65},[51,3613,3614],{"class":53,"line":257},[51,3615,2420],{"class":65},[51,3617,3618],{"class":53,"line":262},[51,3619,3620],{"class":601},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[51,3622,3623],{"class":53,"line":285},[51,3624,3625],{"class":601},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[51,3627,3628,3630,3632,3634,3636,3638,3640,3643,3645,3647,3649,3651,3653,3655,3657,3659,3661,3663,3665],{"class":53,"line":296},[51,3629,369],{"class":69},[51,3631,3491],{"class":65},[51,3633,870],{"class":69},[51,3635,911],{"class":278},[51,3637,375],{"class":69},[51,3639,733],{"class":278},[51,3641,3642],{"class":69}," ||",[51,3644,3419],{"class":65},[51,3646,870],{"class":69},[51,3648,988],{"class":278},[51,3650,375],{"class":69},[51,3652,911],{"class":278},[51,3654,3642],{"class":69},[51,3656,3419],{"class":65},[51,3658,1126],{"class":69},[51,3660,988],{"class":278},[51,3662,375],{"class":69},[51,3664,911],{"class":278},[51,3666,282],{"class":65},[51,3668,3669],{"class":53,"line":307},[51,3670,2898],{"class":65},[51,3672,3673,3675,3677,3680,3682],{"class":53,"line":324},[51,3674,2903],{"class":65},[51,3676,1586],{"class":69},[51,3678,3679],{"class":61},"\"敲桌子\"",[51,3681,1586],{"class":69},[51,3683,1608],{"class":65},[51,3685,3686],{"class":53,"line":329},[51,3687,2917],{"class":65},[51,3689,3690],{"class":53,"line":334},[51,3691,2958],{"class":69},[51,3693,3694],{"class":53,"line":340},[51,3695,2898],{"class":65},[51,3697,3698,3700,3702,3704,3706],{"class":53,"line":345},[51,3699,2903],{"class":65},[51,3701,1586],{"class":69},[51,3703,983],{"class":65},[51,3705,1586],{"class":69},[51,3707,1608],{"class":65},[51,3709,3710],{"class":53,"line":357},[51,3711,2917],{"class":65},[51,3713,3714],{"class":53,"line":366},[51,3715,2577],{"class":65},[51,3717,3718],{"class":53,"line":383},[51,3719,1974],{"class":65},[10,3721,3722],{},"嵌套实现星图",[41,3724,3726],{"className":534,"code":3725,"language":536,"meta":46,"style":46},"#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",[48,3727,3728,3734,3744,3752,3756,3782,3786,3815,3819,3830,3834,3843,3847],{"__ignoreMap":46},[51,3729,3730,3732],{"class":53,"line":54},[51,3731,2340],{"class":69},[51,3733,2343],{"class":61},[51,3735,3736,3738,3740,3742],{"class":53,"line":185},[51,3737,2348],{"class":69},[51,3739,2351],{"class":69},[51,3741,2354],{"class":57},[51,3743,1703],{"class":65},[51,3745,3746,3748,3750],{"class":53,"line":202},[51,3747,549],{"class":69},[51,3749,2363],{"class":57},[51,3751,2366],{"class":65},[51,3753,3754],{"class":53,"line":209},[51,3755,1955],{"class":65},[51,3757,3758,3760,3762,3764,3766,3768,3770,3772,3774,3776,3778,3780],{"class":53,"line":223},[51,3759,3588],{"class":69},[51,3761,2060],{"class":65},[51,3763,549],{"class":69},[51,3765,3419],{"class":65},[51,3767,70],{"class":69},[51,3769,733],{"class":278},[51,3771,3426],{"class":65},[51,3773,1452],{"class":69},[51,3775,988],{"class":278},[51,3777,3426],{"class":65},[51,3779,2682],{"class":69},[51,3781,282],{"class":65},[51,3783,3784],{"class":53,"line":237},[51,3785,2420],{"class":65},[51,3787,3788,3791,3793,3795,3798,3800,3802,3805,3807,3809,3811,3813],{"class":53,"line":242},[51,3789,3790],{"class":69},"        for",[51,3792,2060],{"class":65},[51,3794,549],{"class":69},[51,3796,3797],{"class":65}," j",[51,3799,70],{"class":69},[51,3801,733],{"class":278},[51,3803,3804],{"class":65},";j",[51,3806,1452],{"class":69},[51,3808,988],{"class":278},[51,3810,3804],{"class":65},[51,3812,2682],{"class":69},[51,3814,282],{"class":65},[51,3816,3817],{"class":53,"line":257},[51,3818,2898],{"class":65},[51,3820,3821,3823,3825,3828],{"class":53,"line":262},[51,3822,2903],{"class":65},[51,3824,1586],{"class":69},[51,3826,3827],{"class":61},"\"*\"",[51,3829,1703],{"class":65},[51,3831,3832],{"class":53,"line":285},[51,3833,2917],{"class":65},[51,3835,3836,3839,3841],{"class":53,"line":296},[51,3837,3838],{"class":65},"        cout",[51,3840,1586],{"class":69},[51,3842,1608],{"class":65},[51,3844,3845],{"class":53,"line":307},[51,3846,2577],{"class":65},[51,3848,3849],{"class":53,"line":324},[51,3850,1974],{"class":65},[10,3852,3853],{},"乘法口诀表",[41,3855,3857],{"className":534,"code":3856,"language":536,"meta":46,"style":46},"#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",[48,3858,3859,3865,3875,3883,3887,3913,3917,3942,3946,3986,3990,3998,4002],{"__ignoreMap":46},[51,3860,3861,3863],{"class":53,"line":54},[51,3862,2340],{"class":69},[51,3864,2724],{"class":61},[51,3866,3867,3869,3871,3873],{"class":53,"line":185},[51,3868,2348],{"class":69},[51,3870,2351],{"class":69},[51,3872,2354],{"class":57},[51,3874,1703],{"class":65},[51,3876,3877,3879,3881],{"class":53,"line":202},[51,3878,549],{"class":69},[51,3880,2363],{"class":57},[51,3882,2366],{"class":65},[51,3884,3885],{"class":53,"line":209},[51,3886,1955],{"class":65},[51,3888,3889,3891,3893,3895,3897,3899,3901,3903,3905,3907,3909,3911],{"class":53,"line":223},[51,3890,3588],{"class":69},[51,3892,546],{"class":65},[51,3894,549],{"class":69},[51,3896,3419],{"class":65},[51,3898,70],{"class":69},[51,3900,759],{"class":278},[51,3902,3426],{"class":65},[51,3904,1452],{"class":69},[51,3906,988],{"class":278},[51,3908,3426],{"class":65},[51,3910,2682],{"class":69},[51,3912,282],{"class":65},[51,3914,3915],{"class":53,"line":237},[51,3916,2420],{"class":65},[51,3918,3919,3921,3923,3925,3927,3929,3931,3933,3935,3938,3940],{"class":53,"line":242},[51,3920,3790],{"class":69},[51,3922,546],{"class":65},[51,3924,549],{"class":69},[51,3926,3797],{"class":65},[51,3928,70],{"class":69},[51,3930,759],{"class":278},[51,3932,3804],{"class":65},[51,3934,1997],{"class":69},[51,3936,3937],{"class":65},"i;j",[51,3939,2682],{"class":69},[51,3941,282],{"class":65},[51,3943,3944],{"class":53,"line":257},[51,3945,2898],{"class":65},[51,3947,3948,3950,3952,3954,3956,3958,3960,3962,3964,3967,3969,3971,3973,3975,3977,3980,3982,3984],{"class":53,"line":262},[51,3949,2903],{"class":65},[51,3951,1586],{"class":69},[51,3953,1009],{"class":65},[51,3955,1586],{"class":69},[51,3957,3827],{"class":61},[51,3959,1586],{"class":69},[51,3961,983],{"class":65},[51,3963,1586],{"class":69},[51,3965,3966],{"class":61},"\"=\"",[51,3968,1586],{"class":69},[51,3970,983],{"class":65},[51,3972,997],{"class":69},[51,3974,1009],{"class":65},[51,3976,1586],{"class":69},[51,3978,3979],{"class":61},"'",[51,3981,1643],{"class":278},[51,3983,3979],{"class":61},[51,3985,1703],{"class":65},[51,3987,3988],{"class":53,"line":285},[51,3989,2917],{"class":65},[51,3991,3992,3994,3996],{"class":53,"line":296},[51,3993,3838],{"class":65},[51,3995,1586],{"class":69},[51,3997,1608],{"class":65},[51,3999,4000],{"class":53,"line":307},[51,4001,2577],{"class":65},[51,4003,4004],{"class":53,"line":324},[51,4005,1974],{"class":65},[513,4007,4009],{"id":4008},"_163跳出语句","1.6.3跳出语句",[19,4011,4012],{},[22,4013,4014],{},"break语句\n作用：用于跳出选择结构或者循环结构",[10,4016,4017],{},"break使用时机：",[1549,4019,4020,4023,4026],{},[22,4021,4022],{},"出现在switch条件语句中，作用是终止case并跳出switch",[22,4024,4025],{},"出现在循环结构中，作用是跳出当前的循环结构",[22,4027,4028],{},"出现在嵌套循环中，跳出最近的内层循环语句",[19,4030,4031,4034],{"start":185},[22,4032,4033],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[22,4035,4036],{},"goto语句\n语法：goto 标记;",[10,4038,4039],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[41,4041,4043],{"className":534,"code":4042,"language":536,"meta":46,"style":46},"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",[48,4044,4045,4053,4057,4070,4080,4093,4106,4119,4126,4142],{"__ignoreMap":46},[51,4046,4047,4049,4051],{"class":53,"line":54},[51,4048,549],{"class":69},[51,4050,2363],{"class":57},[51,4052,2366],{"class":65},[51,4054,4055],{"class":53,"line":185},[51,4056,1955],{"class":65},[51,4058,4059,4061,4063,4066,4068],{"class":53,"line":202},[51,4060,1960],{"class":65},[51,4062,1586],{"class":69},[51,4064,4065],{"class":61},"\"1\"",[51,4067,1586],{"class":69},[51,4069,1608],{"class":65},[51,4071,4072,4075,4078],{"class":53,"line":209},[51,4073,4074],{"class":69},"    goto",[51,4076,4077],{"class":57}," FLAG",[51,4079,1703],{"class":65},[51,4081,4082,4084,4086,4089,4091],{"class":53,"line":223},[51,4083,1960],{"class":65},[51,4085,1586],{"class":69},[51,4087,4088],{"class":61},"\"2\"",[51,4090,1586],{"class":69},[51,4092,1608],{"class":65},[51,4094,4095,4097,4099,4102,4104],{"class":53,"line":237},[51,4096,1960],{"class":65},[51,4098,1586],{"class":69},[51,4100,4101],{"class":61},"\"3\"",[51,4103,1586],{"class":69},[51,4105,1608],{"class":65},[51,4107,4108,4110,4112,4115,4117],{"class":53,"line":242},[51,4109,1960],{"class":65},[51,4111,1586],{"class":69},[51,4113,4114],{"class":61},"\"4\"",[51,4116,1586],{"class":69},[51,4118,1608],{"class":65},[51,4120,4121,4124],{"class":53,"line":257},[51,4122,4123],{"class":57},"    FLAG",[51,4125,363],{"class":65},[51,4127,4128,4130,4132,4135,4137,4139],{"class":53,"line":262},[51,4129,1960],{"class":65},[51,4131,1586],{"class":69},[51,4133,4134],{"class":61},"\"5\"",[51,4136,1586],{"class":69},[51,4138,1651],{"class":65},[51,4140,4141],{"class":601},"\u002F\u002F跳过了2,3,4,直接到5\n",[51,4143,4144],{"class":53,"line":285},[51,4145,1974],{"class":65},[486,4147,4149],{"id":4148},"_17数组","1.7数组",[513,4151,4153],{"id":4152},"_171一维数组","1.7.1一维数组",[19,4155,4156],{},[22,4157,4158],{},"一维数组定义方式",[679,4160,4161,4171],{},[682,4162,4163],{},[685,4164,4165,4168],{},[688,4166,4167],{},"方式",[688,4169,4170],{},"注意事项",[726,4172,4173,4187,4197],{},[685,4174,4175,4181],{},[731,4176,4177,4178,598],{},"数据类型 数组名",[51,4179,4180],{},"数组长度",[731,4182,4183,4184,4186],{},"这种方式是先定义再arr",[51,4185,983],{},"赋值",[685,4188,4189,4194],{},[731,4190,4177,4191,4193],{},[51,4192,4180],{},"={值1,值2....};",[731,4195,4196],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[685,4198,4199,4203],{},[731,4200,4177,4201,4193],{},[51,4202],{},[731,4204,4205,4206,4208],{},"int arr",[51,4207],{},";这是不正确的，按照这样的方式定义必须有初始长度",[19,4210,4211],{"start":185},[22,4212,4213],{},"一维数组数组名\n用途：",[1549,4215,4216],{},[22,4217,4218],{},"1.可以统计整个数组在内存中的长度：",[41,4220,4222],{"className":534,"code":4221,"language":536,"meta":46,"style":46},"sizeof(arr);\nsizeof(arr[0]);\n",[48,4223,4224,4231],{"__ignoreMap":46},[51,4225,4226,4228],{"class":53,"line":54},[51,4227,543],{"class":69},[51,4229,4230],{"class":65},"(arr);\n",[51,4232,4233,4235,4238,4240],{"class":53,"line":185},[51,4234,543],{"class":69},[51,4236,4237],{"class":65},"(arr[",[51,4239,733],{"class":278},[51,4241,4242],{"class":65},"]);\n",[1549,4244,4245],{},[22,4246,4247],{},"2.可以获取数组在内存中的首地址:",[41,4249,4251],{"className":534,"code":4250,"language":536,"meta":46,"style":46},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[48,4252,4253,4258,4271,4276],{"__ignoreMap":46},[51,4254,4255],{"class":53,"line":54},[51,4256,4257],{"class":601},"\u002F\u002F查看16进制的首地址\n",[51,4259,4260,4262,4264,4267,4269],{"class":53,"line":185},[51,4261,1779],{"class":65},[51,4263,1586],{"class":69},[51,4265,4266],{"class":65},"arr",[51,4268,1586],{"class":69},[51,4270,1608],{"class":65},[51,4272,4273],{"class":53,"line":202},[51,4274,4275],{"class":601},"\u002F\u002F看10进制数\n",[51,4277,4278,4280,4282,4284,4286,4288,4290,4293,4295,4297,4299],{"class":53,"line":209},[51,4279,1779],{"class":65},[51,4281,1586],{"class":69},[51,4283,546],{"class":65},[51,4285,549],{"class":69},[51,4287,971],{"class":65},[51,4289,895],{"class":69},[51,4291,4292],{"class":65},"arr[",[51,4294,733],{"class":278},[51,4296,1482],{"class":65},[51,4298,1586],{"class":69},[51,4300,1608],{"class":65},[10,4302,4303],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1549,4305,4306],{},[22,4307,4308],{},"1️⃣五只小猪称体重",[41,4310,4312],{"className":534,"code":4311,"language":536,"meta":46,"style":46},"#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",[48,4313,4314,4320,4330,4338,4342,4382,4395,4421,4425,4437,4441,4451,4455,4459,4472,4482],{"__ignoreMap":46},[51,4315,4316,4318],{"class":53,"line":54},[51,4317,2340],{"class":69},[51,4319,2343],{"class":61},[51,4321,4322,4324,4326,4328],{"class":53,"line":185},[51,4323,2348],{"class":69},[51,4325,2351],{"class":69},[51,4327,2354],{"class":57},[51,4329,1703],{"class":65},[51,4331,4332,4334,4336],{"class":53,"line":202},[51,4333,549],{"class":69},[51,4335,2363],{"class":57},[51,4337,2366],{"class":65},[51,4339,4340],{"class":53,"line":209},[51,4341,1955],{"class":65},[51,4343,4344,4346,4349,4351,4353,4355,4357,4360,4362,4365,4367,4369,4371,4374,4376,4379],{"class":53,"line":223},[51,4345,2375],{"class":69},[51,4347,4348],{"class":65}," arr[",[51,4350,861],{"class":278},[51,4352,1482],{"class":65},[51,4354,70],{"class":69},[51,4356,1438],{"class":65},[51,4358,4359],{"class":278},"300",[51,4361,920],{"class":65},[51,4363,4364],{"class":278},"350",[51,4366,920],{"class":65},[51,4368,2120],{"class":278},[51,4370,920],{"class":65},[51,4372,4373],{"class":278},"400",[51,4375,920],{"class":65},[51,4377,4378],{"class":278},"250",[51,4380,4381],{"class":65},"};\n",[51,4383,4384,4386,4389,4391,4393],{"class":53,"line":237},[51,4385,2375],{"class":69},[51,4387,4388],{"class":65}," tmp",[51,4390,70],{"class":69},[51,4392,733],{"class":278},[51,4394,1703],{"class":65},[51,4396,4397,4399,4401,4403,4405,4407,4409,4411,4413,4415,4417,4419],{"class":53,"line":242},[51,4398,3588],{"class":69},[51,4400,2060],{"class":65},[51,4402,549],{"class":69},[51,4404,3419],{"class":65},[51,4406,70],{"class":69},[51,4408,733],{"class":278},[51,4410,3426],{"class":65},[51,4412,1452],{"class":69},[51,4414,861],{"class":278},[51,4416,3426],{"class":65},[51,4418,2682],{"class":69},[51,4420,282],{"class":65},[51,4422,4423],{"class":53,"line":257},[51,4424,2420],{"class":65},[51,4426,4427,4429,4432,4434],{"class":53,"line":262},[51,4428,369],{"class":69},[51,4430,4431],{"class":65},"(tmp",[51,4433,1452],{"class":69},[51,4435,4436],{"class":65},"arr[i])\n",[51,4438,4439],{"class":53,"line":285},[51,4440,2898],{"class":65},[51,4442,4443,4446,4448],{"class":53,"line":296},[51,4444,4445],{"class":65},"            tmp",[51,4447,70],{"class":69},[51,4449,4450],{"class":65},"arr[i];\n",[51,4452,4453],{"class":53,"line":307},[51,4454,2917],{"class":65},[51,4456,4457],{"class":53,"line":324},[51,4458,2577],{"class":65},[51,4460,4461,4463,4465,4468,4470],{"class":53,"line":329},[51,4462,1960],{"class":65},[51,4464,1586],{"class":69},[51,4466,4467],{"class":65},"tmp",[51,4469,1586],{"class":69},[51,4471,1608],{"class":65},[51,4473,4474,4477,4480],{"class":53,"line":334},[51,4475,4476],{"class":69},"    return",[51,4478,4479],{"class":278}," 0",[51,4481,1703],{"class":65},[51,4483,4484],{"class":53,"line":340},[51,4485,1974],{"class":65},[1549,4487,4488],{},[22,4489,4490],{},"2️⃣数组元素逆置",[41,4492,4494],{"className":534,"code":4493,"language":536,"meta":46,"style":46},"\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",[48,4495,4496,4501,4507,4517,4525,4529,4564,4580,4612,4625,4630,4635,4647,4657,4667,4672,4681,4691,4696,4701,4728,4732,4748,4752,4763,4772],{"__ignoreMap":46},[51,4497,4498],{"class":53,"line":54},[51,4499,4500],{"class":601},"\u002F\u002F元素逆置\n",[51,4502,4503,4505],{"class":53,"line":185},[51,4504,2340],{"class":69},[51,4506,2343],{"class":61},[51,4508,4509,4511,4513,4515],{"class":53,"line":202},[51,4510,2348],{"class":69},[51,4512,2351],{"class":69},[51,4514,2354],{"class":57},[51,4516,1703],{"class":65},[51,4518,4519,4521,4523],{"class":53,"line":209},[51,4520,549],{"class":69},[51,4522,2363],{"class":57},[51,4524,2366],{"class":65},[51,4526,4527],{"class":53,"line":223},[51,4528,1955],{"class":65},[51,4530,4531,4534,4536,4538,4540,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560,4562],{"class":53,"line":237},[51,4532,4533],{"class":69},"   int",[51,4535,4348],{"class":65},[51,4537,861],{"class":278},[51,4539,1482],{"class":65},[51,4541,70],{"class":69},[51,4543,1438],{"class":65},[51,4545,759],{"class":278},[51,4547,920],{"class":65},[51,4549,620],{"class":278},[51,4551,920],{"class":65},[51,4553,614],{"class":278},[51,4555,920],{"class":65},[51,4557,835],{"class":278},[51,4559,920],{"class":65},[51,4561,861],{"class":278},[51,4563,4381],{"class":65},[51,4565,4566,4568,4571,4573,4575,4577],{"class":53,"line":242},[51,4567,4533],{"class":69},[51,4569,4570],{"class":65}," start",[51,4572,70],{"class":69},[51,4574,733],{"class":278},[51,4576,598],{"class":65},[51,4578,4579],{"class":601},"\u002F\u002F起始下标\n",[51,4581,4582,4584,4587,4590,4593,4596,4598,4600,4603,4605,4607,4609],{"class":53,"line":257},[51,4583,4533],{"class":69},[51,4585,4586],{"class":65}," end",[51,4588,4589],{"class":69},"=sizeof",[51,4591,4592],{"class":65},"(arr)",[51,4594,4595],{"class":69},"\u002Fsizeof",[51,4597,4237],{"class":65},[51,4599,733],{"class":278},[51,4601,4602],{"class":65},"])",[51,4604,1074],{"class":69},[51,4606,759],{"class":278},[51,4608,598],{"class":65},[51,4610,4611],{"class":601},"\u002F\u002F结束下标\n",[51,4613,4614,4617,4620,4622],{"class":53,"line":262},[51,4615,4616],{"class":69},"   while",[51,4618,4619],{"class":65}," (start",[51,4621,1452],{"class":69},[51,4623,4624],{"class":65},"end)\n",[51,4626,4627],{"class":53,"line":285},[51,4628,4629],{"class":65},"   {\n",[51,4631,4632],{"class":53,"line":296},[51,4633,4634],{"class":601},"    \u002F\u002F实现元素互换代码\n",[51,4636,4637,4639,4642,4644],{"class":53,"line":307},[51,4638,2375],{"class":69},[51,4640,4641],{"class":65}," temp",[51,4643,70],{"class":69},[51,4645,4646],{"class":65},"arr[start];\n",[51,4648,4649,4652,4654],{"class":53,"line":324},[51,4650,4651],{"class":65},"    arr[start]",[51,4653,70],{"class":69},[51,4655,4656],{"class":65},"arr[end];\n",[51,4658,4659,4662,4664],{"class":53,"line":329},[51,4660,4661],{"class":65},"    arr[end]",[51,4663,70],{"class":69},[51,4665,4666],{"class":65},"temp;\n",[51,4668,4669],{"class":53,"line":334},[51,4670,4671],{"class":601},"    \u002F\u002F下标更新\n",[51,4673,4674,4677,4679],{"class":53,"line":340},[51,4675,4676],{"class":65},"    start",[51,4678,2682],{"class":69},[51,4680,1703],{"class":65},[51,4682,4683,4686,4689],{"class":53,"line":345},[51,4684,4685],{"class":65},"    end",[51,4687,4688],{"class":69},"--",[51,4690,1703],{"class":65},[51,4692,4693],{"class":53,"line":357},[51,4694,4695],{"class":65},"   }\n",[51,4697,4698],{"class":53,"line":366},[51,4699,4700],{"class":601},"   \u002F\u002F输出逆置后的数组\n",[51,4702,4703,4706,4708,4710,4712,4714,4716,4718,4720,4722,4724,4726],{"class":53,"line":383},[51,4704,4705],{"class":69},"   for",[51,4707,2060],{"class":65},[51,4709,549],{"class":69},[51,4711,3419],{"class":65},[51,4713,70],{"class":69},[51,4715,733],{"class":278},[51,4717,3426],{"class":65},[51,4719,1452],{"class":69},[51,4721,861],{"class":278},[51,4723,3426],{"class":65},[51,4725,2682],{"class":69},[51,4727,282],{"class":65},[51,4729,4730],{"class":53,"line":392},[51,4731,4629],{"class":65},[51,4733,4734,4736,4738,4741,4743,4746],{"class":53,"line":403},[51,4735,1960],{"class":65},[51,4737,1586],{"class":69},[51,4739,4740],{"class":65},"arr[i]",[51,4742,1586],{"class":69},[51,4744,4745],{"class":61},"\" \"",[51,4747,1703],{"class":65},[51,4749,4750],{"class":53,"line":409},[51,4751,4695],{"class":65},[51,4753,4754,4757,4759,4761],{"class":53,"line":414},[51,4755,4756],{"class":57},"   system",[51,4758,546],{"class":65},[51,4760,2698],{"class":61},[51,4762,3107],{"class":65},[51,4764,4765,4768,4770],{"class":53,"line":433},[51,4766,4767],{"class":69},"   return",[51,4769,4479],{"class":278},[51,4771,1703],{"class":65},[51,4773,4774],{"class":53,"line":439},[51,4775,1974],{"class":65},[1549,4777,4778],{},[22,4779,4780],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[41,4782,4784],{"className":534,"code":4783,"language":536,"meta":46,"style":46},"\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",[48,4785,4786,4791,4797,4807,4815,4819,4870,4883,4909,4913,4927,4931,4936,4941,4971,4975,4980,5014,5018,5023,5043,5048,5060,5076,5091,5096,5100,5104,5117,5143,5147,5161,5165,5173],{"__ignoreMap":46},[51,4787,4788],{"class":53,"line":54},[51,4789,4790],{"class":601},"\u002F\u002F冒泡排序,升序\n",[51,4792,4793,4795],{"class":53,"line":185},[51,4794,2340],{"class":69},[51,4796,2343],{"class":61},[51,4798,4799,4801,4803,4805],{"class":53,"line":202},[51,4800,2348],{"class":69},[51,4802,2351],{"class":69},[51,4804,2354],{"class":57},[51,4806,1703],{"class":65},[51,4808,4809,4811,4813],{"class":53,"line":209},[51,4810,549],{"class":69},[51,4812,2363],{"class":57},[51,4814,2366],{"class":65},[51,4816,4817],{"class":53,"line":223},[51,4818,1955],{"class":65},[51,4820,4821,4823,4825,4827,4829,4831,4834,4836,4838,4840,4842,4844,4846,4848,4850,4852,4854,4856,4858,4860,4862,4864,4866,4868],{"class":53,"line":237},[51,4822,2375],{"class":69},[51,4824,4348],{"class":65},[51,4826,962],{"class":278},[51,4828,194],{"class":65},[51,4830,70],{"class":69},[51,4832,4833],{"class":65}," {",[51,4835,835],{"class":278},[51,4837,920],{"class":65},[51,4839,620],{"class":278},[51,4841,920],{"class":65},[51,4843,937],{"class":278},[51,4845,920],{"class":65},[51,4847,733],{"class":278},[51,4849,920],{"class":65},[51,4851,861],{"class":278},[51,4853,920],{"class":65},[51,4855,911],{"class":278},[51,4857,920],{"class":65},[51,4859,759],{"class":278},[51,4861,920],{"class":65},[51,4863,614],{"class":278},[51,4865,920],{"class":65},[51,4867,962],{"class":278},[51,4869,4381],{"class":65},[51,4871,4872,4874,4876,4879,4881],{"class":53,"line":242},[51,4873,1960],{"class":65},[51,4875,1586],{"class":69},[51,4877,4878],{"class":61},"\"排序前：\"",[51,4880,1586],{"class":69},[51,4882,1608],{"class":65},[51,4884,4885,4887,4889,4891,4893,4895,4897,4899,4901,4903,4905,4907],{"class":53,"line":257},[51,4886,3588],{"class":69},[51,4888,2060],{"class":65},[51,4890,549],{"class":69},[51,4892,3419],{"class":65},[51,4894,70],{"class":69},[51,4896,733],{"class":278},[51,4898,3426],{"class":65},[51,4900,1452],{"class":69},[51,4902,962],{"class":278},[51,4904,3426],{"class":65},[51,4906,2682],{"class":69},[51,4908,282],{"class":65},[51,4910,4911],{"class":53,"line":262},[51,4912,2420],{"class":65},[51,4914,4915,4917,4919,4921,4923,4925],{"class":53,"line":285},[51,4916,3838],{"class":65},[51,4918,1586],{"class":69},[51,4920,4740],{"class":65},[51,4922,1586],{"class":69},[51,4924,4745],{"class":61},[51,4926,1703],{"class":65},[51,4928,4929],{"class":53,"line":296},[51,4930,2577],{"class":65},[51,4932,4933],{"class":53,"line":307},[51,4934,4935],{"class":601},"    \u002F\u002F开始冒泡排序\n",[51,4937,4938],{"class":53,"line":324},[51,4939,4940],{"class":601},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[51,4942,4943,4945,4947,4949,4951,4953,4955,4957,4959,4961,4963,4965,4967,4969],{"class":53,"line":329},[51,4944,3588],{"class":69},[51,4946,2060],{"class":65},[51,4948,549],{"class":69},[51,4950,3419],{"class":65},[51,4952,70],{"class":69},[51,4954,733],{"class":278},[51,4956,3426],{"class":65},[51,4958,1452],{"class":69},[51,4960,962],{"class":278},[51,4962,1074],{"class":69},[51,4964,759],{"class":278},[51,4966,3426],{"class":65},[51,4968,2682],{"class":69},[51,4970,282],{"class":65},[51,4972,4973],{"class":53,"line":334},[51,4974,2420],{"class":65},[51,4976,4977],{"class":53,"line":340},[51,4978,4979],{"class":601},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[51,4981,4982,4984,4986,4988,4990,4992,4994,4996,4998,5000,5002,5004,5006,5008,5010,5012],{"class":53,"line":345},[51,4983,3790],{"class":69},[51,4985,2060],{"class":65},[51,4987,549],{"class":69},[51,4989,3797],{"class":65},[51,4991,70],{"class":69},[51,4993,733],{"class":278},[51,4995,3804],{"class":65},[51,4997,1452],{"class":69},[51,4999,962],{"class":278},[51,5001,1074],{"class":69},[51,5003,983],{"class":65},[51,5005,1074],{"class":69},[51,5007,759],{"class":278},[51,5009,3804],{"class":65},[51,5011,2682],{"class":69},[51,5013,282],{"class":65},[51,5015,5016],{"class":53,"line":357},[51,5017,2898],{"class":65},[51,5019,5020],{"class":53,"line":366},[51,5021,5022],{"class":601},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[51,5024,5025,5028,5031,5033,5036,5038,5040],{"class":53,"line":383},[51,5026,5027],{"class":69},"            if",[51,5029,5030],{"class":65},"(arr[j]",[51,5032,1502],{"class":69},[51,5034,5035],{"class":65},"arr[j",[51,5037,1023],{"class":69},[51,5039,759],{"class":278},[51,5041,5042],{"class":65},"])\n",[51,5044,5045],{"class":53,"line":392},[51,5046,5047],{"class":65},"            {\n",[51,5049,5050,5053,5055,5057],{"class":53,"line":403},[51,5051,5052],{"class":69},"                int",[51,5054,4641],{"class":65},[51,5056,70],{"class":69},[51,5058,5059],{"class":65},"arr[j];\n",[51,5061,5062,5065,5067,5069,5071,5073],{"class":53,"line":409},[51,5063,5064],{"class":65},"                arr[j]",[51,5066,70],{"class":69},[51,5068,5035],{"class":65},[51,5070,1023],{"class":69},[51,5072,759],{"class":278},[51,5074,5075],{"class":65},"];\n",[51,5077,5078,5081,5083,5085,5087,5089],{"class":53,"line":414},[51,5079,5080],{"class":65},"                arr[j",[51,5082,1023],{"class":69},[51,5084,759],{"class":278},[51,5086,1482],{"class":65},[51,5088,70],{"class":69},[51,5090,4666],{"class":65},[51,5092,5093],{"class":53,"line":433},[51,5094,5095],{"class":65},"            }\n",[51,5097,5098],{"class":53,"line":439},[51,5099,2917],{"class":65},[51,5101,5102],{"class":53,"line":444},[51,5103,2577],{"class":65},[51,5105,5106,5108,5110,5113,5115],{"class":53,"line":453},[51,5107,1960],{"class":65},[51,5109,1586],{"class":69},[51,5111,5112],{"class":61},"\"排序后：\"",[51,5114,1586],{"class":69},[51,5116,1608],{"class":65},[51,5118,5119,5121,5123,5125,5127,5129,5131,5133,5135,5137,5139,5141],{"class":53,"line":2174},[51,5120,3588],{"class":69},[51,5122,2060],{"class":65},[51,5124,549],{"class":69},[51,5126,3419],{"class":65},[51,5128,70],{"class":69},[51,5130,733],{"class":278},[51,5132,3426],{"class":65},[51,5134,1452],{"class":69},[51,5136,962],{"class":278},[51,5138,3426],{"class":65},[51,5140,2682],{"class":69},[51,5142,282],{"class":65},[51,5144,5145],{"class":53,"line":2965},[51,5146,2420],{"class":65},[51,5148,5149,5151,5153,5155,5157,5159],{"class":53,"line":2979},[51,5150,3838],{"class":65},[51,5152,1586],{"class":69},[51,5154,4740],{"class":65},[51,5156,1586],{"class":69},[51,5158,4745],{"class":61},[51,5160,1703],{"class":65},[51,5162,5163],{"class":53,"line":2987},[51,5164,2577],{"class":65},[51,5166,5167,5169,5171],{"class":53,"line":2992},[51,5168,4476],{"class":69},[51,5170,4479],{"class":278},[51,5172,1703],{"class":65},[51,5174,5175],{"class":53,"line":2998},[51,5176,1974],{"class":65},[513,5178,5180],{"id":5179},"_172二维数组","1.7.2二维数组",[19,5182,5183],{},[22,5184,5185],{},"二维数组的四种定义方式",[679,5187,5188,5197],{},[682,5189,5190],{},[685,5191,5192,5195],{},[688,5193,5194],{},"序号",[688,5196,4167],{},[726,5198,5199,5209,5218,5227,5236],{},[685,5200,5201,5203],{},[731,5202,759],{},[731,5204,5205,5206,598],{},"数据类型 数组名[行数]",[51,5207,5208],{},"列数",[685,5210,5211,5213],{},[731,5212,620],{},[731,5214,5205,5215,5217],{},[51,5216,5208],{},"={ {数据1,数据2}，{数据3，数据4}... }",[685,5219,5220,5222],{},[731,5221,614],{},[731,5223,5205,5224,5226],{},[51,5225,5208],{},"={数据1,数据2,数据3...}",[685,5228,5229,5231],{},[731,5230,835],{},[731,5232,5233,5234,5226],{},"数据类型 数组名[]",[51,5235,5208],{},[685,5237,5238,5241],{},[731,5239,5240],{},"注意：不能只省略列数",[731,5242],{},[19,5244,5245],{"start":185},[22,5246,5247],{},"二维数组数组名",[1549,5249,5250,5253],{},[22,5251,5252],{},"1.查看二维数组所占内存空间",[22,5254,5255],{},"2.获取二维数组首地址",[10,5257,5258],{},"已知二维数组，求二维数组的行数与列数",[41,5260,5262],{"className":534,"code":5261,"language":536,"meta":46,"style":46},"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",[48,5263,5264,5272,5276,5294,5298,5316,5332,5337,5362,5395],{"__ignoreMap":46},[51,5265,5266,5268,5270],{"class":53,"line":54},[51,5267,549],{"class":69},[51,5269,2363],{"class":57},[51,5271,2366],{"class":65},[51,5273,5274],{"class":53,"line":185},[51,5275,1955],{"class":65},[51,5277,5278,5280,5282,5284,5287,5289,5291],{"class":53,"line":202},[51,5279,2375],{"class":69},[51,5281,4348],{"class":65},[51,5283,620],{"class":278},[51,5285,5286],{"class":65},"][",[51,5288,614],{"class":278},[51,5290,1482],{"class":65},[51,5292,5293],{"class":69},"=\n",[51,5295,5296],{"class":53,"line":209},[51,5297,2420],{"class":65},[51,5299,5300,5303,5305,5307,5309,5311,5313],{"class":53,"line":223},[51,5301,5302],{"class":65},"        {",[51,5304,759],{"class":278},[51,5306,920],{"class":65},[51,5308,620],{"class":278},[51,5310,920],{"class":65},[51,5312,614],{"class":278},[51,5314,5315],{"class":65},"},\n",[51,5317,5318,5320,5322,5324,5326,5328,5330],{"class":53,"line":237},[51,5319,5302],{"class":65},[51,5321,835],{"class":278},[51,5323,920],{"class":65},[51,5325,861],{"class":278},[51,5327,920],{"class":65},[51,5329,886],{"class":278},[51,5331,1974],{"class":65},[51,5333,5334],{"class":53,"line":242},[51,5335,5336],{"class":65},"    };\n",[51,5338,5339,5341,5343,5346,5348,5350,5352,5354,5356,5358,5360],{"class":53,"line":257},[51,5340,1960],{"class":65},[51,5342,1586],{"class":69},[51,5344,5345],{"class":61},"\"二维数组的行数\"",[51,5347,1782],{"class":69},[51,5349,4592],{"class":65},[51,5351,4595],{"class":69},[51,5353,4237],{"class":65},[51,5355,733],{"class":278},[51,5357,4602],{"class":65},[51,5359,1586],{"class":69},[51,5361,1608],{"class":65},[51,5363,5364,5366,5368,5371,5373,5375,5377,5379,5381,5383,5385,5387,5389,5391,5393],{"class":53,"line":262},[51,5365,1960],{"class":65},[51,5367,1586],{"class":69},[51,5369,5370],{"class":61},"\"二维数组的列数\"",[51,5372,1782],{"class":69},[51,5374,4237],{"class":65},[51,5376,733],{"class":278},[51,5378,4602],{"class":65},[51,5380,4595],{"class":69},[51,5382,4237],{"class":65},[51,5384,733],{"class":278},[51,5386,5286],{"class":65},[51,5388,733],{"class":278},[51,5390,4602],{"class":65},[51,5392,1586],{"class":69},[51,5394,1608],{"class":65},[51,5396,5397],{"class":53,"line":285},[51,5398,1974],{"class":65},[10,5400,5401],{},"查看二维数组首地址",[41,5403,5405],{"className":534,"code":5404,"language":536,"meta":46,"style":46},"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",[48,5406,5407,5424,5450,5475],{"__ignoreMap":46},[51,5408,5409,5411,5413,5416,5418,5420,5422],{"class":53,"line":54},[51,5410,1779],{"class":65},[51,5412,1586],{"class":69},[51,5414,5415],{"class":61},"\"二维数组首地址：\"",[51,5417,1586],{"class":69},[51,5419,4266],{"class":65},[51,5421,1586],{"class":69},[51,5423,1608],{"class":65},[51,5425,5426,5428,5430,5433,5435,5437,5439,5442,5444,5446,5448],{"class":53,"line":185},[51,5427,1779],{"class":65},[51,5429,1586],{"class":69},[51,5431,5432],{"class":61},"\"二维数组第一行的首地址：\"",[51,5434,1586],{"class":69},[51,5436,546],{"class":65},[51,5438,549],{"class":69},[51,5440,5441],{"class":65},")arr[",[51,5443,733],{"class":278},[51,5445,1482],{"class":65},[51,5447,1586],{"class":69},[51,5449,1608],{"class":65},[51,5451,5452,5454,5456,5459,5461,5463,5465,5467,5469,5471,5473],{"class":53,"line":202},[51,5453,1779],{"class":65},[51,5455,1586],{"class":69},[51,5457,5458],{"class":61},"\"二维数组第二行的首地址：\"",[51,5460,1586],{"class":69},[51,5462,546],{"class":65},[51,5464,549],{"class":69},[51,5466,5441],{"class":65},[51,5468,759],{"class":278},[51,5470,1482],{"class":65},[51,5472,1586],{"class":69},[51,5474,1608],{"class":65},[51,5476,5477,5479,5481,5484,5486,5488,5490,5492,5494,5496,5498,5500,5502,5504,5506,5508],{"class":53,"line":209},[51,5478,1779],{"class":65},[51,5480,1586],{"class":69},[51,5482,5483],{"class":61},"\"二维数组第一个元素的首地址:\"",[51,5485,1586],{"class":69},[51,5487,546],{"class":65},[51,5489,549],{"class":69},[51,5491,971],{"class":65},[51,5493,895],{"class":69},[51,5495,4292],{"class":65},[51,5497,733],{"class":278},[51,5499,5286],{"class":65},[51,5501,733],{"class":278},[51,5503,1482],{"class":65},[51,5505,1586],{"class":69},[51,5507,1651],{"class":65},[51,5509,5510],{"class":601},"\u002F\u002F对于数，要加取址符\n",[464,5512,5513],{},"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":46,"searchDepth":185,"depth":185,"links":5515},[5516,5517,5518,5526,5527,5533,5538],{"id":488,"depth":185,"text":489},{"id":495,"depth":185,"text":496},{"id":510,"depth":185,"text":511,"children":5519},[5520,5521,5522,5523,5524,5525],{"id":515,"depth":202,"text":516},{"id":561,"depth":202,"text":562},{"id":628,"depth":202,"text":629},{"id":1567,"depth":202,"text":1568},{"id":1657,"depth":202,"text":1658},{"id":1753,"depth":202,"text":1754},{"id":1795,"depth":185,"text":1796},{"id":1863,"depth":185,"text":1864,"children":5528},[5529,5530,5531,5532],{"id":1867,"depth":202,"text":1868},{"id":1888,"depth":202,"text":1889},{"id":1897,"depth":202,"text":1898},{"id":1906,"depth":202,"text":1907},{"id":1915,"depth":185,"text":1916,"children":5534},[5535,5536,5537],{"id":1919,"depth":202,"text":1920},{"id":2595,"depth":202,"text":2596},{"id":4008,"depth":202,"text":4009},{"id":4148,"depth":185,"text":4149,"children":5539},[5540,5541],{"id":4152,"depth":202,"text":4153},{"id":5179,"depth":202,"text":5180},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":479,"description":46},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5548,"title":5549,"body":5550,"description":46,"extension":469,"meta":6649,"navigation":205,"path":6650,"seo":6651,"stem":6652,"__hash__":6653},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5551,"toc":6641},[5552,5555,5559,5567,5575,5578,5643,5647,5650,5726,5730,5733,5736,5739,5952,5956,5961,6025,6030,6097,6102,6193,6196,6301,6305,6308,6314,6458,6462,6465,6479,6482,6527,6530,6638],[14,5553,5549],{"id":5554},"_2函数",[486,5556,5558],{"id":5557},"_21函数概述","2.1函数概述",[19,5560,5561,5564],{},[22,5562,5563],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[22,5565,5566],{},"语法：",[41,5568,5573],{"className":5569,"code":5571,"language":5572,"meta":46},[5570],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[48,5574,5571],{"__ignoreMap":46},[10,5576,5577],{},"小案例",[41,5579,5581],{"className":534,"code":5580,"language":536,"meta":46,"style":46},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[48,5582,5583,5588,5611,5615,5632,5639],{"__ignoreMap":46},[51,5584,5585],{"class":53,"line":54},[51,5586,5587],{"class":601},"\u002F\u002Fnum1,num2形参\n",[51,5589,5590,5592,5595,5597,5599,5602,5604,5606,5609],{"class":53,"line":185},[51,5591,549],{"class":69},[51,5593,5594],{"class":57}," add",[51,5596,546],{"class":65},[51,5598,549],{"class":69},[51,5600,5601],{"class":248}," num1",[51,5603,920],{"class":65},[51,5605,549],{"class":69},[51,5607,5608],{"class":248}," num2",[51,5610,282],{"class":65},[51,5612,5613],{"class":53,"line":202},[51,5614,1955],{"class":65},[51,5616,5617,5619,5622,5624,5627,5629],{"class":53,"line":209},[51,5618,2375],{"class":69},[51,5620,5621],{"class":65}," sum",[51,5623,70],{"class":69},[51,5625,5626],{"class":65},"num1",[51,5628,1023],{"class":69},[51,5630,5631],{"class":65},"num2;\n",[51,5633,5634,5636],{"class":53,"line":223},[51,5635,4476],{"class":69},[51,5637,5638],{"class":65}," sum;\n",[51,5640,5641],{"class":53,"line":237},[51,5642,1974],{"class":65},[486,5644,5646],{"id":5645},"_22函数调用","2.2函数调用",[10,5648,5649],{},"调用刚刚写的求和函数",[41,5651,5653],{"className":534,"code":5652,"language":536,"meta":46,"style":46},"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",[48,5654,5655,5663,5667,5672,5684,5696,5705,5710,5722],{"__ignoreMap":46},[51,5656,5657,5659,5661],{"class":53,"line":54},[51,5658,549],{"class":69},[51,5660,2363],{"class":57},[51,5662,2366],{"class":65},[51,5664,5665],{"class":53,"line":185},[51,5666,1955],{"class":65},[51,5668,5669],{"class":53,"line":202},[51,5670,5671],{"class":601},"    \u002F\u002Fa,b实参\n",[51,5673,5674,5676,5678,5680,5682],{"class":53,"line":209},[51,5675,2375],{"class":69},[51,5677,1808],{"class":65},[51,5679,70],{"class":69},[51,5681,733],{"class":278},[51,5683,1703],{"class":65},[51,5685,5686,5688,5690,5692,5694],{"class":53,"line":223},[51,5687,2375],{"class":69},[51,5689,3221],{"class":65},[51,5691,70],{"class":69},[51,5693,733],{"class":278},[51,5695,1703],{"class":65},[51,5697,5698,5700,5702],{"class":53,"line":237},[51,5699,2402],{"class":65},[51,5701,1839],{"class":69},[51,5703,5704],{"class":65},"a,b;\n",[51,5706,5707],{"class":53,"line":242},[51,5708,5709],{"class":601},"    \u002F\u002F调用函数时，实参值传给了形参\n",[51,5711,5712,5714,5716,5719],{"class":53,"line":257},[51,5713,1960],{"class":65},[51,5715,1586],{"class":69},[51,5717,5718],{"class":57},"add",[51,5720,5721],{"class":65},"(a,b);\n",[51,5723,5724],{"class":53,"line":262},[51,5725,1974],{"class":65},[486,5727,5729],{"id":5728},"_23值传递","2.3值传递",[10,5731,5732],{},"值传递就是函数调用时实参将数值传给形参",[10,5734,5735],{},"值传递时，如果形参发生任何改变，不会影响实参",[10,5737,5738],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[41,5740,5742],{"className":534,"code":5741,"language":536,"meta":46,"style":46},"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",[48,5743,5744,5766,5770,5783,5800,5818,5829,5838,5847,5860,5876,5892,5901,5905,5913,5917,5929,5941,5948],{"__ignoreMap":46},[51,5745,5746,5749,5752,5754,5756,5758,5760,5762,5764],{"class":53,"line":54},[51,5747,5748],{"class":69},"void",[51,5750,5751],{"class":57}," swap",[51,5753,546],{"class":65},[51,5755,549],{"class":69},[51,5757,5601],{"class":248},[51,5759,920],{"class":65},[51,5761,549],{"class":69},[51,5763,5608],{"class":248},[51,5765,282],{"class":65},[51,5767,5768],{"class":53,"line":185},[51,5769,1955],{"class":65},[51,5771,5772,5774,5776,5779,5781],{"class":53,"line":202},[51,5773,1960],{"class":65},[51,5775,1586],{"class":69},[51,5777,5778],{"class":61},"\"交换前：\"",[51,5780,1586],{"class":69},[51,5782,1608],{"class":65},[51,5784,5785,5787,5789,5792,5794,5796,5798],{"class":53,"line":209},[51,5786,1960],{"class":65},[51,5788,1586],{"class":69},[51,5790,5791],{"class":61},"\"num1=\"",[51,5793,1586],{"class":69},[51,5795,5626],{"class":65},[51,5797,1586],{"class":69},[51,5799,1608],{"class":65},[51,5801,5802,5804,5806,5809,5811,5814,5816],{"class":53,"line":223},[51,5803,1960],{"class":65},[51,5805,1586],{"class":69},[51,5807,5808],{"class":61},"\"num2=\"",[51,5810,1586],{"class":69},[51,5812,5813],{"class":65},"num2",[51,5815,1586],{"class":69},[51,5817,1608],{"class":65},[51,5819,5820,5822,5824,5826],{"class":53,"line":237},[51,5821,2375],{"class":69},[51,5823,4641],{"class":65},[51,5825,70],{"class":69},[51,5827,5828],{"class":65},"num1;\n",[51,5830,5831,5834,5836],{"class":53,"line":242},[51,5832,5833],{"class":65},"    num1",[51,5835,70],{"class":69},[51,5837,5631],{"class":65},[51,5839,5840,5843,5845],{"class":53,"line":257},[51,5841,5842],{"class":65},"    num2",[51,5844,70],{"class":69},[51,5846,4666],{"class":65},[51,5848,5849,5851,5853,5856,5858],{"class":53,"line":262},[51,5850,1960],{"class":65},[51,5852,1586],{"class":69},[51,5854,5855],{"class":61},"\"交换后：\"",[51,5857,1586],{"class":69},[51,5859,1608],{"class":65},[51,5861,5862,5864,5866,5868,5870,5872,5874],{"class":53,"line":285},[51,5863,1960],{"class":65},[51,5865,1586],{"class":69},[51,5867,5791],{"class":61},[51,5869,1586],{"class":69},[51,5871,5626],{"class":65},[51,5873,1586],{"class":69},[51,5875,1608],{"class":65},[51,5877,5878,5880,5882,5884,5886,5888,5890],{"class":53,"line":296},[51,5879,1960],{"class":65},[51,5881,1586],{"class":69},[51,5883,5808],{"class":61},[51,5885,1586],{"class":69},[51,5887,5813],{"class":65},[51,5889,1586],{"class":69},[51,5891,1608],{"class":65},[51,5893,5894,5896,5898],{"class":53,"line":307},[51,5895,4476],{"class":69},[51,5897,598],{"class":65},[51,5899,5900],{"class":601},"\u002F\u002F或者不写\n",[51,5902,5903],{"class":53,"line":324},[51,5904,1974],{"class":65},[51,5906,5907,5909,5911],{"class":53,"line":329},[51,5908,549],{"class":69},[51,5910,2363],{"class":57},[51,5912,2366],{"class":65},[51,5914,5915],{"class":53,"line":334},[51,5916,1955],{"class":65},[51,5918,5919,5921,5923,5925,5927],{"class":53,"line":340},[51,5920,2375],{"class":69},[51,5922,1808],{"class":65},[51,5924,70],{"class":69},[51,5926,988],{"class":278},[51,5928,1703],{"class":65},[51,5930,5931,5933,5935,5937,5939],{"class":53,"line":345},[51,5932,2375],{"class":69},[51,5934,3221],{"class":65},[51,5936,70],{"class":69},[51,5938,1242],{"class":278},[51,5940,1703],{"class":65},[51,5942,5943,5946],{"class":53,"line":357},[51,5944,5945],{"class":57},"    swap",[51,5947,5721],{"class":65},[51,5949,5950],{"class":53,"line":366},[51,5951,1974],{"class":65},[486,5953,5955],{"id":5954},"_24函数的常见形式","2.4函数的常见形式",[19,5957,5958],{},[22,5959,5960],{},"无参无返",[41,5962,5964],{"className":534,"code":5963,"language":536,"meta":46,"style":46},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[48,5965,5966,5975,5979,5992,5996,6004,6008,6013,6021],{"__ignoreMap":46},[51,5967,5968,5970,5973],{"class":53,"line":54},[51,5969,5748],{"class":69},[51,5971,5972],{"class":57}," test01",[51,5974,2366],{"class":65},[51,5976,5977],{"class":53,"line":185},[51,5978,1955],{"class":65},[51,5980,5981,5983,5985,5988,5990],{"class":53,"line":202},[51,5982,1960],{"class":65},[51,5984,1586],{"class":69},[51,5986,5987],{"class":61},"\"你好\"",[51,5989,1586],{"class":69},[51,5991,1608],{"class":65},[51,5993,5994],{"class":53,"line":209},[51,5995,1974],{"class":65},[51,5997,5998,6000,6002],{"class":53,"line":223},[51,5999,549],{"class":69},[51,6001,2363],{"class":57},[51,6003,2366],{"class":65},[51,6005,6006],{"class":53,"line":237},[51,6007,1955],{"class":65},[51,6009,6010],{"class":53,"line":242},[51,6011,6012],{"class":601},"    \u002F\u002F函数调用\n",[51,6014,6015,6018],{"class":53,"line":257},[51,6016,6017],{"class":57},"    test01",[51,6019,6020],{"class":65},"();\n",[51,6022,6023],{"class":53,"line":262},[51,6024,1974],{"class":65},[19,6026,6027],{"start":185},[22,6028,6029],{},"有参无返",[41,6031,6033],{"className":534,"code":6032,"language":536,"meta":46,"style":46},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[48,6034,6035,6050,6054,6066,6070,6078,6082,6093],{"__ignoreMap":46},[51,6036,6037,6039,6042,6044,6046,6048],{"class":53,"line":54},[51,6038,5748],{"class":69},[51,6040,6041],{"class":57}," test02",[51,6043,546],{"class":65},[51,6045,549],{"class":69},[51,6047,1808],{"class":248},[51,6049,282],{"class":65},[51,6051,6052],{"class":53,"line":185},[51,6053,1955],{"class":65},[51,6055,6056,6058,6060,6062,6064],{"class":53,"line":202},[51,6057,1960],{"class":65},[51,6059,1586],{"class":69},[51,6061,5987],{"class":61},[51,6063,1586],{"class":69},[51,6065,1608],{"class":65},[51,6067,6068],{"class":53,"line":209},[51,6069,1974],{"class":65},[51,6071,6072,6074,6076],{"class":53,"line":223},[51,6073,549],{"class":69},[51,6075,2363],{"class":57},[51,6077,2366],{"class":65},[51,6079,6080],{"class":53,"line":237},[51,6081,1955],{"class":65},[51,6083,6084,6087,6089,6091],{"class":53,"line":242},[51,6085,6086],{"class":57},"    test02",[51,6088,546],{"class":65},[51,6090,853],{"class":278},[51,6092,3107],{"class":65},[51,6094,6095],{"class":53,"line":257},[51,6096,1974],{"class":65},[19,6098,6099],{"start":202},[22,6100,6101],{},"无参有返",[41,6103,6105],{"className":534,"code":6104,"language":536,"meta":46,"style":46},"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",[48,6106,6107,6116,6120,6132,6141,6145,6153,6157,6170,6189],{"__ignoreMap":46},[51,6108,6109,6111,6114],{"class":53,"line":54},[51,6110,549],{"class":69},[51,6112,6113],{"class":57}," test03",[51,6115,2366],{"class":65},[51,6117,6118],{"class":53,"line":185},[51,6119,1955],{"class":65},[51,6121,6122,6124,6126,6128,6130],{"class":53,"line":202},[51,6123,1960],{"class":65},[51,6125,1586],{"class":69},[51,6127,5987],{"class":61},[51,6129,1586],{"class":69},[51,6131,1608],{"class":65},[51,6133,6134,6136,6139],{"class":53,"line":209},[51,6135,4476],{"class":69},[51,6137,6138],{"class":278}," 100",[51,6140,1703],{"class":65},[51,6142,6143],{"class":53,"line":223},[51,6144,1974],{"class":65},[51,6146,6147,6149,6151],{"class":53,"line":237},[51,6148,549],{"class":69},[51,6150,2363],{"class":57},[51,6152,2366],{"class":65},[51,6154,6155],{"class":53,"line":242},[51,6156,1955],{"class":65},[51,6158,6159,6161,6163,6165,6168],{"class":53,"line":257},[51,6160,2375],{"class":69},[51,6162,5601],{"class":65},[51,6164,70],{"class":69},[51,6166,6167],{"class":57},"test03",[51,6169,6020],{"class":65},[51,6171,6172,6174,6176,6178,6180,6182,6184,6186],{"class":53,"line":262},[51,6173,1960],{"class":65},[51,6175,1586],{"class":69},[51,6177,5791],{"class":61},[51,6179,1586],{"class":69},[51,6181,5626],{"class":65},[51,6183,1586],{"class":69},[51,6185,1651],{"class":65},[51,6187,6188],{"class":601}," \u002F\u002F100\n",[51,6190,6191],{"class":53,"line":285},[51,6192,1974],{"class":65},[10,6194,6195],{},"4.有参有返",[41,6197,6199],{"className":534,"code":6198,"language":536,"meta":46,"style":46},"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",[48,6200,6201,6216,6220,6233,6239,6243,6252,6256,6268,6282,6297],{"__ignoreMap":46},[51,6202,6203,6205,6208,6210,6212,6214],{"class":53,"line":54},[51,6204,549],{"class":69},[51,6206,6207],{"class":57}," test04",[51,6209,546],{"class":65},[51,6211,549],{"class":69},[51,6213,1808],{"class":248},[51,6215,282],{"class":65},[51,6217,6218],{"class":53,"line":185},[51,6219,1955],{"class":65},[51,6221,6222,6224,6226,6229,6231],{"class":53,"line":202},[51,6223,1960],{"class":65},[51,6225,1586],{"class":69},[51,6227,6228],{"class":61},"\"hello\"",[51,6230,1586],{"class":69},[51,6232,1608],{"class":65},[51,6234,6235,6237],{"class":53,"line":209},[51,6236,4476],{"class":69},[51,6238,1842],{"class":65},[51,6240,6241],{"class":53,"line":223},[51,6242,1974],{"class":65},[51,6244,6245,6247,6250],{"class":53,"line":237},[51,6246,549],{"class":69},[51,6248,6249],{"class":57}," mian",[51,6251,2366],{"class":65},[51,6253,6254],{"class":53,"line":242},[51,6255,1955],{"class":65},[51,6257,6258,6260,6262,6264,6266],{"class":53,"line":257},[51,6259,2375],{"class":69},[51,6261,3221],{"class":65},[51,6263,70],{"class":69},[51,6265,759],{"class":278},[51,6267,1703],{"class":65},[51,6269,6270,6272,6274,6276,6279],{"class":53,"line":262},[51,6271,2375],{"class":69},[51,6273,3237],{"class":65},[51,6275,70],{"class":69},[51,6277,6278],{"class":57},"test04",[51,6280,6281],{"class":65},"(b);\n",[51,6283,6284,6286,6288,6290,6292,6294],{"class":53,"line":285},[51,6285,1960],{"class":65},[51,6287,1586],{"class":69},[51,6289,830],{"class":65},[51,6291,1586],{"class":69},[51,6293,1651],{"class":65},[51,6295,6296],{"class":601}," \u002F\u002F1\n",[51,6298,6299],{"class":53,"line":296},[51,6300,1974],{"class":65},[486,6302,6304],{"id":6303},"_25函数的声明","2.5函数的声明",[10,6306,6307],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[10,6309,6310,6311],{},"函数的",[691,6312,6313],{},"声明可以多次，但是函数的定义只能有一次",[41,6315,6317],{"className":534,"code":6316,"language":536,"meta":46,"style":46},"\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",[48,6318,6319,6324,6329,6354,6363,6367,6379,6391,6407,6411,6431,6435,6454],{"__ignoreMap":46},[51,6320,6321],{"class":53,"line":54},[51,6322,6323],{"class":601},"\u002F\u002F函数声明\n",[51,6325,6326],{"class":53,"line":185},[51,6327,6328],{"class":601},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[51,6330,6331,6333,6336,6338,6340,6342,6344,6346,6348,6351],{"class":53,"line":202},[51,6332,549],{"class":69},[51,6334,6335],{"class":57}," max",[51,6337,546],{"class":65},[51,6339,549],{"class":69},[51,6341,1808],{"class":248},[51,6343,920],{"class":65},[51,6345,549],{"class":69},[51,6347,3221],{"class":248},[51,6349,6350],{"class":65},");",[51,6352,6353],{"class":601},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[51,6355,6356,6358,6360],{"class":53,"line":209},[51,6357,549],{"class":69},[51,6359,2363],{"class":57},[51,6361,6362],{"class":65},"() \n",[51,6364,6365],{"class":53,"line":223},[51,6366,1955],{"class":65},[51,6368,6369,6371,6373,6375,6377],{"class":53,"line":237},[51,6370,2375],{"class":69},[51,6372,1808],{"class":65},[51,6374,70],{"class":69},[51,6376,988],{"class":278},[51,6378,1703],{"class":65},[51,6380,6381,6383,6385,6387,6389],{"class":53,"line":242},[51,6382,2375],{"class":69},[51,6384,3221],{"class":65},[51,6386,70],{"class":69},[51,6388,1242],{"class":278},[51,6390,1703],{"class":65},[51,6392,6393,6395,6397,6400,6403,6405],{"class":53,"line":257},[51,6394,1960],{"class":65},[51,6396,1586],{"class":69},[51,6398,6399],{"class":57},"max",[51,6401,6402],{"class":65},"(a,b)",[51,6404,1586],{"class":69},[51,6406,1608],{"class":65},[51,6408,6409],{"class":53,"line":262},[51,6410,1974],{"class":65},[51,6412,6413,6415,6417,6419,6421,6423,6425,6427,6429],{"class":53,"line":285},[51,6414,549],{"class":69},[51,6416,6335],{"class":57},[51,6418,546],{"class":65},[51,6420,549],{"class":69},[51,6422,1808],{"class":248},[51,6424,920],{"class":65},[51,6426,549],{"class":69},[51,6428,3221],{"class":248},[51,6430,282],{"class":65},[51,6432,6433],{"class":53,"line":296},[51,6434,1955],{"class":65},[51,6436,6437,6439,6441,6443,6445,6447,6449,6451],{"class":53,"line":307},[51,6438,4476],{"class":69},[51,6440,1808],{"class":65},[51,6442,1502],{"class":69},[51,6444,805],{"class":65},[51,6446,1528],{"class":69},[51,6448,780],{"class":65},[51,6450,1401],{"class":69},[51,6452,6453],{"class":65},"b;\n",[51,6455,6456],{"class":53,"line":324},[51,6457,1974],{"class":65},[486,6459,6461],{"id":6460},"_26函数的分文件编写","2.6函数的分文件编写",[10,6463,6464],{},"4个步骤：",[1549,6466,6467,6470,6473,6476],{},[22,6468,6469],{},"1.创建后缀名为.h的头文件",[22,6471,6472],{},"2.创建后缀名为.cpp的源文件",[22,6474,6475],{},"3.在头文件中写函数的定义",[22,6477,6478],{},"4.在源文件中写函数的定义\n示例：",[10,6480,6481],{},"头文件：swap.h",[41,6483,6485],{"className":534,"code":6484,"language":536,"meta":46,"style":46},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[48,6486,6487,6493,6503,6507],{"__ignoreMap":46},[51,6488,6489,6491],{"class":53,"line":54},[51,6490,2340],{"class":69},[51,6492,2343],{"class":61},[51,6494,6495,6497,6499,6501],{"class":53,"line":185},[51,6496,2348],{"class":69},[51,6498,2351],{"class":69},[51,6500,2354],{"class":57},[51,6502,1703],{"class":65},[51,6504,6505],{"class":53,"line":202},[51,6506,6323],{"class":601},[51,6508,6509,6511,6513,6515,6517,6519,6521,6523,6525],{"class":53,"line":209},[51,6510,5748],{"class":69},[51,6512,5751],{"class":57},[51,6514,546],{"class":65},[51,6516,549],{"class":69},[51,6518,1808],{"class":248},[51,6520,920],{"class":65},[51,6522,549],{"class":69},[51,6524,3221],{"class":248},[51,6526,3107],{"class":65},[10,6528,6529],{},"源文件：swap.cpp",[41,6531,6533],{"className":534,"code":6532,"language":536,"meta":46,"style":46},"#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",[48,6534,6535,6542,6547,6567,6571,6582,6591,6600,6617,6634],{"__ignoreMap":46},[51,6536,6537,6539],{"class":53,"line":54},[51,6538,2340],{"class":69},[51,6540,6541],{"class":61}," \"swap.h\"\n",[51,6543,6544],{"class":53,"line":185},[51,6545,6546],{"class":601},"\u002F\u002F函数的定义\n",[51,6548,6549,6551,6553,6555,6557,6559,6561,6563,6565],{"class":53,"line":202},[51,6550,5748],{"class":69},[51,6552,5751],{"class":57},[51,6554,546],{"class":65},[51,6556,549],{"class":69},[51,6558,1808],{"class":248},[51,6560,920],{"class":65},[51,6562,549],{"class":69},[51,6564,3221],{"class":248},[51,6566,282],{"class":65},[51,6568,6569],{"class":53,"line":209},[51,6570,1955],{"class":65},[51,6572,6573,6575,6577,6579],{"class":53,"line":223},[51,6574,2375],{"class":69},[51,6576,4641],{"class":65},[51,6578,70],{"class":69},[51,6580,6581],{"class":65},"a;\n",[51,6583,6584,6587,6589],{"class":53,"line":237},[51,6585,6586],{"class":65},"    a",[51,6588,70],{"class":69},[51,6590,6453],{"class":65},[51,6592,6593,6596,6598],{"class":53,"line":242},[51,6594,6595],{"class":65},"    b",[51,6597,70],{"class":69},[51,6599,4666],{"class":65},[51,6601,6602,6604,6606,6609,6611,6613,6615],{"class":53,"line":257},[51,6603,1960],{"class":65},[51,6605,1586],{"class":69},[51,6607,6608],{"class":61},"\"a=\"",[51,6610,1586],{"class":69},[51,6612,780],{"class":65},[51,6614,1586],{"class":69},[51,6616,1608],{"class":65},[51,6618,6619,6621,6623,6626,6628,6630,6632],{"class":53,"line":262},[51,6620,1960],{"class":65},[51,6622,1586],{"class":69},[51,6624,6625],{"class":61},"\"b=\"",[51,6627,1586],{"class":69},[51,6629,805],{"class":65},[51,6631,1586],{"class":69},[51,6633,1608],{"class":65},[51,6635,6636],{"class":53,"line":285},[51,6637,1974],{"class":65},[464,6639,6640],{},"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":46,"searchDepth":185,"depth":185,"links":6642},[6643,6644,6645,6646,6647,6648],{"id":5557,"depth":185,"text":5558},{"id":5645,"depth":185,"text":5646},{"id":5728,"depth":185,"text":5729},{"id":5954,"depth":185,"text":5955},{"id":6303,"depth":185,"text":6304},{"id":6460,"depth":185,"text":6461},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5549,"description":46},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6655,"title":6656,"body":6657,"description":6664,"extension":469,"meta":8069,"navigation":205,"path":8070,"seo":8071,"stem":8072,"__hash__":8073},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6658,"toc":8059},[6659,6662,6665,6669,6831,6835,6838,6841,6844,6847,6987,6991,6994,6997,7000,7065,7069,7074,7141,7144,7148,7151,7162,7167,7187,7190,7195,7214,7217,7221,7240,7243,7247,7482,7486,7489,7492,7495,7657,7660,7664,7667,7673,8056],[14,6660,6656],{"id":6661},"_3指针",[10,6663,6664],{},"通过指针保存一个地址，指针就是个地址",[486,6666,6668],{"id":6667},"_31定义指针","3.1定义指针",[41,6670,6672],{"className":534,"code":6671,"language":536,"meta":46,"style":46},"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",[48,6673,6674,6682,6686,6691,6703,6708,6716,6726,6744,6764,6768,6773,6778,6783,6797,6813,6827],{"__ignoreMap":46},[51,6675,6676,6678,6680],{"class":53,"line":54},[51,6677,549],{"class":69},[51,6679,2363],{"class":57},[51,6681,2366],{"class":65},[51,6683,6684],{"class":53,"line":185},[51,6685,1955],{"class":65},[51,6687,6688],{"class":53,"line":202},[51,6689,6690],{"class":601},"    \u002F\u002F1.定义指针\n",[51,6692,6693,6695,6697,6699,6701],{"class":53,"line":209},[51,6694,2375],{"class":69},[51,6696,1808],{"class":65},[51,6698,70],{"class":69},[51,6700,988],{"class":278},[51,6702,1703],{"class":65},[51,6704,6705],{"class":53,"line":223},[51,6706,6707],{"class":601},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[51,6709,6710,6713],{"class":53,"line":237},[51,6711,6712],{"class":69},"    int*",[51,6714,6715],{"class":65},"p;\n",[51,6717,6718,6721,6724],{"class":53,"line":242},[51,6719,6720],{"class":65},"    p",[51,6722,6723],{"class":69},"=&",[51,6725,6581],{"class":65},[51,6727,6728,6730,6732,6735,6738,6740,6742],{"class":53,"line":257},[51,6729,1960],{"class":65},[51,6731,1586],{"class":69},[51,6733,6734],{"class":61},"\"a的地址为：\"",[51,6736,6737],{"class":69},"\u003C\u003C&",[51,6739,780],{"class":65},[51,6741,1586],{"class":69},[51,6743,1608],{"class":65},[51,6745,6746,6748,6750,6753,6755,6757,6759,6761],{"class":53,"line":262},[51,6747,1960],{"class":65},[51,6749,1586],{"class":69},[51,6751,6752],{"class":61},"\"指针p为：\"",[51,6754,1586],{"class":69},[51,6756,10],{"class":65},[51,6758,1586],{"class":69},[51,6760,1651],{"class":65},[51,6762,6763],{"class":601},"\u002F\u002F指针p表示的就是a的地址\n",[51,6765,6766],{"class":53,"line":285},[51,6767,206],{"emptyLinePlaceholder":205},[51,6769,6770],{"class":53,"line":296},[51,6771,6772],{"class":601},"    \u002F\u002F2.使用指针\n",[51,6774,6775],{"class":53,"line":307},[51,6776,6777],{"class":601},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[51,6779,6780],{"class":53,"line":324},[51,6781,6782],{"class":601},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[51,6784,6785,6788,6790,6792,6795],{"class":53,"line":329},[51,6786,6787],{"class":69},"    *",[51,6789,10],{"class":65},[51,6791,70],{"class":69},[51,6793,6794],{"class":278},"1000",[51,6796,1703],{"class":65},[51,6798,6799,6801,6804,6806,6808,6810],{"class":53,"line":334},[51,6800,1960],{"class":65},[51,6802,6803],{"class":69},"\u003C\u003C*",[51,6805,10],{"class":65},[51,6807,1586],{"class":69},[51,6809,1651],{"class":65},[51,6811,6812],{"class":601},"\u002F\u002F1000\n",[51,6814,6815,6817,6819,6821,6823,6825],{"class":53,"line":340},[51,6816,1960],{"class":65},[51,6818,1586],{"class":69},[51,6820,780],{"class":65},[51,6822,1586],{"class":69},[51,6824,1651],{"class":65},[51,6826,6812],{"class":601},[51,6828,6829],{"class":53,"line":345},[51,6830,1974],{"class":65},[486,6832,6834],{"id":6833},"_32指针所占的内存空间","3.2指针所占的内存空间",[10,6836,6837],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[10,6839,6840],{},"在32位操作系统下：占用4个字节空间",[10,6842,6843],{},"在64位操作系统下：占用8个字节空间",[10,6845,6846],{},"上方是不管啥数据类型的",[41,6848,6850],{"className":534,"code":6849,"language":536,"meta":46,"style":46},"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",[48,6851,6852,6860,6864,6869,6881,6886,6891,6896,6909,6931,6957,6983],{"__ignoreMap":46},[51,6853,6854,6856,6858],{"class":53,"line":54},[51,6855,549],{"class":69},[51,6857,2363],{"class":57},[51,6859,2366],{"class":65},[51,6861,6862],{"class":53,"line":185},[51,6863,1955],{"class":65},[51,6865,6866],{"class":53,"line":202},[51,6867,6868],{"class":601},"    \u002F\u002F指针所占内存空间\n",[51,6870,6871,6873,6875,6877,6879],{"class":53,"line":209},[51,6872,2375],{"class":69},[51,6874,1808],{"class":65},[51,6876,70],{"class":69},[51,6878,988],{"class":278},[51,6880,1703],{"class":65},[51,6882,6883],{"class":53,"line":223},[51,6884,6885],{"class":601},"    \u002F\u002Fint *p;\n",[51,6887,6888],{"class":53,"line":237},[51,6889,6890],{"class":601},"    \u002F\u002Fp=&a;\n",[51,6892,6893],{"class":53,"line":242},[51,6894,6895],{"class":601},"    \u002F\u002F上述可以写为以下：\n",[51,6897,6898,6900,6903,6905,6907],{"class":53,"line":257},[51,6899,2375],{"class":69},[51,6901,6902],{"class":69}," *",[51,6904,10],{"class":65},[51,6906,6723],{"class":69},[51,6908,6581],{"class":65},[51,6910,6911,6914,6916,6919,6921,6924,6926,6928],{"class":53,"line":262},[51,6912,6913],{"class":65},"    cout ",[51,6915,1586],{"class":69},[51,6917,6918],{"class":61},"\"sizeof(int *)\"",[51,6920,1782],{"class":69},[51,6922,6923],{"class":65},"(p)",[51,6925,1586],{"class":69},[51,6927,1651],{"class":65},[51,6929,6930],{"class":601},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[51,6932,6933,6935,6937,6939,6941,6943,6945,6947,6949,6951,6954],{"class":53,"line":285},[51,6934,6913],{"class":65},[51,6936,1586],{"class":69},[51,6938,6918],{"class":61},[51,6940,1782],{"class":69},[51,6942,546],{"class":65},[51,6944,549],{"class":69},[51,6946,6902],{"class":69},[51,6948,971],{"class":65},[51,6950,1586],{"class":69},[51,6952,6953],{"class":65},"endl",[51,6955,6956],{"class":601},"  \u002F\u002F4字节(32位的话)\n",[51,6958,6959,6961,6963,6966,6968,6970,6972,6974,6976,6978,6980],{"class":53,"line":296},[51,6960,6913],{"class":65},[51,6962,1586],{"class":69},[51,6964,6965],{"class":61},"\"sizeof(char *)\"",[51,6967,1782],{"class":69},[51,6969,546],{"class":65},[51,6971,639],{"class":69},[51,6973,6902],{"class":69},[51,6975,971],{"class":65},[51,6977,1586],{"class":69},[51,6979,1651],{"class":65},[51,6981,6982],{"class":601}," \u002F\u002F4字节(32位的话)\n",[51,6984,6985],{"class":53,"line":307},[51,6986,1974],{"class":65},[486,6988,6990],{"id":6989},"_33空指针","3.3空指针",[10,6992,6993],{},"空指针：指针变量指向内存中编号为0的空间",[10,6995,6996],{},"用途：初始化指针变量",[10,6998,6999],{},"注意：空指针指向的内存是不可以访问的",[41,7001,7003],{"className":534,"code":7002,"language":536,"meta":46,"style":46},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[48,7004,7005,7013,7017,7022,7036,7041,7056,7061],{"__ignoreMap":46},[51,7006,7007,7009,7011],{"class":53,"line":54},[51,7008,549],{"class":69},[51,7010,2363],{"class":57},[51,7012,2366],{"class":65},[51,7014,7015],{"class":53,"line":185},[51,7016,1955],{"class":65},[51,7018,7019],{"class":53,"line":202},[51,7020,7021],{"class":601},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[51,7023,7024,7026,7028,7030,7032,7034],{"class":53,"line":209},[51,7025,2375],{"class":69},[51,7027,6902],{"class":69},[51,7029,10],{"class":65},[51,7031,70],{"class":69},[51,7033,2782],{"class":278},[51,7035,1703],{"class":65},[51,7037,7038],{"class":53,"line":223},[51,7039,7040],{"class":601},"    \u002F\u002F2.空指针不能进行访问\n",[51,7042,7043,7045,7047,7049,7051,7053],{"class":53,"line":237},[51,7044,6787],{"class":69},[51,7046,10],{"class":65},[51,7048,70],{"class":69},[51,7050,853],{"class":278},[51,7052,598],{"class":65},[51,7054,7055],{"class":601},"\u002F\u002F直接报错，压根不能访问\n",[51,7057,7058],{"class":53,"line":242},[51,7059,7060],{"class":601},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[51,7062,7063],{"class":53,"line":257},[51,7064,1974],{"class":65},[486,7066,7068],{"id":7067},"_34野指针","3.4野指针",[10,7070,7071],{},[691,7072,7073],{},"指针变量指向非法的内存空间",[41,7075,7077],{"className":534,"code":7076,"language":536,"meta":46,"style":46},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[48,7078,7079,7087,7091,7120,7125,7137],{"__ignoreMap":46},[51,7080,7081,7083,7085],{"class":53,"line":54},[51,7082,549],{"class":69},[51,7084,2363],{"class":57},[51,7086,2366],{"class":65},[51,7088,7089],{"class":53,"line":185},[51,7090,1955],{"class":65},[51,7092,7093,7095,7097,7099,7101,7103,7105,7107,7109,7112,7115,7117],{"class":53,"line":202},[51,7094,2375],{"class":69},[51,7096,6902],{"class":69},[51,7098,10],{"class":65},[51,7100,70],{"class":69},[51,7102,546],{"class":65},[51,7104,549],{"class":69},[51,7106,6902],{"class":69},[51,7108,971],{"class":65},[51,7110,7111],{"class":69},"0x",[51,7113,7114],{"class":278},"1100",[51,7116,598],{"class":65},[51,7118,7119],{"class":601}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[51,7121,7122],{"class":53,"line":209},[51,7123,7124],{"class":601},"    \u002F\u002F访问野指针报错\n",[51,7126,7127,7129,7131,7133,7135],{"class":53,"line":223},[51,7128,1960],{"class":65},[51,7130,6803],{"class":69},[51,7132,10],{"class":65},[51,7134,1586],{"class":69},[51,7136,1608],{"class":65},[51,7138,7139],{"class":53,"line":237},[51,7140,1974],{"class":65},[10,7142,7143],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[486,7145,7147],{"id":7146},"_35const修饰指针","3.5const修饰指针",[10,7149,7150],{},"三种情况：",[1549,7152,7153,7156,7159],{},[22,7154,7155],{},"const修饰指针 常量指针",[22,7157,7158],{},"const修饰常量 指针常量",[22,7160,7161],{},"const即修饰指针，又修饰常量",[19,7163,7164],{},[22,7165,7166],{},"常量指针",[41,7168,7170],{"className":534,"code":7169,"language":536,"meta":46,"style":46},"const int *p=&a;\n",[48,7171,7172],{"__ignoreMap":46},[51,7173,7174,7177,7179,7181,7183,7185],{"class":53,"line":54},[51,7175,7176],{"class":69},"const",[51,7178,2772],{"class":69},[51,7180,6902],{"class":69},[51,7182,10],{"class":65},[51,7184,6723],{"class":69},[51,7186,6581],{"class":65},[10,7188,7189],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[19,7191,7192],{"start":185},[22,7193,7194],{},"指针常量",[41,7196,7198],{"className":534,"code":7197,"language":536,"meta":46,"style":46},"int *const p=&a;\n",[48,7199,7200],{"__ignoreMap":46},[51,7201,7202,7204,7207,7210,7212],{"class":53,"line":54},[51,7203,549],{"class":69},[51,7205,7206],{"class":69}," *const",[51,7208,7209],{"class":65}," p",[51,7211,6723],{"class":69},[51,7213,6581],{"class":65},[10,7215,7216],{},"指针的指向不可以改，指针指向的值可以改",[19,7218,7219],{"start":202},[22,7220,7161],{},[41,7222,7224],{"className":534,"code":7223,"language":536,"meta":46,"style":46},"const int *const p=&a;\n",[48,7225,7226],{"__ignoreMap":46},[51,7227,7228,7230,7232,7234,7236,7238],{"class":53,"line":54},[51,7229,7176],{"class":69},[51,7231,2772],{"class":69},[51,7233,7206],{"class":69},[51,7235,7209],{"class":65},[51,7237,6723],{"class":69},[51,7239,6581],{"class":65},[10,7241,7242],{},"指针的指向和指针指向的值都不可以改变",[486,7244,7246],{"id":7245},"_36指针和数组","3.6指针和数组",[41,7248,7250],{"className":534,"code":7249,"language":536,"meta":46,"style":46},"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",[48,7251,7252,7260,7264,7269,7323,7344,7360,7376,7387,7404,7409,7423,7449,7453,7465,7474,7478],{"__ignoreMap":46},[51,7253,7254,7256,7258],{"class":53,"line":54},[51,7255,549],{"class":69},[51,7257,2363],{"class":57},[51,7259,2366],{"class":65},[51,7261,7262],{"class":53,"line":185},[51,7263,1955],{"class":65},[51,7265,7266],{"class":53,"line":202},[51,7267,7268],{"class":601},"    \u002F\u002F利用指针访问数组中的元素\n",[51,7270,7271,7273,7275,7277,7279,7281,7283,7285,7287,7289,7291,7293,7295,7297,7299,7301,7303,7305,7307,7309,7311,7313,7315,7317,7319,7321],{"class":53,"line":209},[51,7272,2375],{"class":69},[51,7274,4348],{"class":65},[51,7276,988],{"class":278},[51,7278,1482],{"class":65},[51,7280,70],{"class":69},[51,7282,1438],{"class":65},[51,7284,759],{"class":278},[51,7286,920],{"class":65},[51,7288,620],{"class":278},[51,7290,920],{"class":65},[51,7292,614],{"class":278},[51,7294,920],{"class":65},[51,7296,835],{"class":278},[51,7298,920],{"class":65},[51,7300,861],{"class":278},[51,7302,920],{"class":65},[51,7304,886],{"class":278},[51,7306,920],{"class":65},[51,7308,911],{"class":278},[51,7310,920],{"class":65},[51,7312,937],{"class":278},[51,7314,920],{"class":65},[51,7316,962],{"class":278},[51,7318,920],{"class":65},[51,7320,988],{"class":278},[51,7322,4381],{"class":65},[51,7324,7325,7327,7329,7332,7334,7336,7338,7340,7342],{"class":53,"line":223},[51,7326,1960],{"class":65},[51,7328,1586],{"class":69},[51,7330,7331],{"class":61},"\"数组的第一个元素为：\"",[51,7333,1586],{"class":69},[51,7335,4292],{"class":65},[51,7337,733],{"class":278},[51,7339,1482],{"class":65},[51,7341,1586],{"class":69},[51,7343,1608],{"class":65},[51,7345,7346,7348,7350,7352,7354,7357],{"class":53,"line":237},[51,7347,2375],{"class":69},[51,7349,6902],{"class":69},[51,7351,10],{"class":65},[51,7353,70],{"class":69},[51,7355,7356],{"class":65},"arr;",[51,7358,7359],{"class":601},"\u002F\u002F注意数才要加取地址符号&\n",[51,7361,7362,7364,7366,7368,7370,7372,7374],{"class":53,"line":242},[51,7363,1960],{"class":65},[51,7365,1586],{"class":69},[51,7367,7331],{"class":61},[51,7369,6803],{"class":69},[51,7371,10],{"class":65},[51,7373,1586],{"class":69},[51,7375,1608],{"class":65},[51,7377,7378,7380,7382,7384],{"class":53,"line":257},[51,7379,6720],{"class":65},[51,7381,2682],{"class":69},[51,7383,598],{"class":65},[51,7385,7386],{"class":601}," \u002F\u002F让指针向后偏移4个字节\n",[51,7388,7389,7391,7393,7396,7398,7400,7402],{"class":53,"line":262},[51,7390,1960],{"class":65},[51,7392,1586],{"class":69},[51,7394,7395],{"class":61},"\"数组的第二个元素为：\"",[51,7397,6803],{"class":69},[51,7399,10],{"class":65},[51,7401,1586],{"class":69},[51,7403,1608],{"class":65},[51,7405,7406],{"class":53,"line":285},[51,7407,7408],{"class":601},"    \u002F\u002F利用指针遍历数组\n",[51,7410,7411,7413,7415,7418,7420],{"class":53,"line":296},[51,7412,2375],{"class":69},[51,7414,6902],{"class":69},[51,7416,7417],{"class":65},"p2",[51,7419,70],{"class":69},[51,7421,7422],{"class":65},"arr;\n",[51,7424,7425,7427,7429,7431,7433,7435,7437,7439,7441,7443,7445,7447],{"class":53,"line":307},[51,7426,3588],{"class":69},[51,7428,2060],{"class":65},[51,7430,549],{"class":69},[51,7432,3419],{"class":65},[51,7434,70],{"class":69},[51,7436,733],{"class":278},[51,7438,3426],{"class":65},[51,7440,1452],{"class":69},[51,7442,988],{"class":278},[51,7444,3426],{"class":65},[51,7446,2682],{"class":69},[51,7448,282],{"class":65},[51,7450,7451],{"class":53,"line":324},[51,7452,2420],{"class":65},[51,7454,7455,7457,7459,7461,7463],{"class":53,"line":329},[51,7456,3838],{"class":65},[51,7458,6803],{"class":69},[51,7460,7417],{"class":65},[51,7462,1586],{"class":69},[51,7464,1608],{"class":65},[51,7466,7467,7470,7472],{"class":53,"line":334},[51,7468,7469],{"class":65},"        p2",[51,7471,2682],{"class":69},[51,7473,1703],{"class":65},[51,7475,7476],{"class":53,"line":340},[51,7477,2577],{"class":65},[51,7479,7480],{"class":53,"line":345},[51,7481,1974],{"class":65},[486,7483,7485],{"id":7484},"_37指针和函数","3.7指针和函数",[10,7487,7488],{},"利用指针做函数参数，可以修改实参的值",[10,7490,7491],{},"值传递：只改变形参，不改变实参",[10,7493,7494],{},"地址传递：",[41,7496,7498],{"className":534,"code":7497,"language":536,"meta":46,"style":46},"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",[48,7499,7500,7525,7529,7541,7552,7562,7566,7574,7578,7590,7602,7607,7623,7638,7653],{"__ignoreMap":46},[51,7501,7502,7504,7506,7508,7510,7512,7515,7517,7519,7521,7523],{"class":53,"line":54},[51,7503,5748],{"class":69},[51,7505,5751],{"class":57},[51,7507,546],{"class":65},[51,7509,549],{"class":69},[51,7511,6902],{"class":69},[51,7513,7514],{"class":248},"p1",[51,7516,920],{"class":65},[51,7518,549],{"class":69},[51,7520,6902],{"class":69},[51,7522,7417],{"class":248},[51,7524,282],{"class":65},[51,7526,7527],{"class":53,"line":185},[51,7528,1955],{"class":65},[51,7530,7531,7533,7535,7538],{"class":53,"line":202},[51,7532,2375],{"class":69},[51,7534,4641],{"class":65},[51,7536,7537],{"class":69},"=*",[51,7539,7540],{"class":65},"p1;\n",[51,7542,7543,7545,7547,7549],{"class":53,"line":209},[51,7544,6787],{"class":69},[51,7546,7514],{"class":65},[51,7548,7537],{"class":69},[51,7550,7551],{"class":65},"p2;\n",[51,7553,7554,7556,7558,7560],{"class":53,"line":223},[51,7555,6787],{"class":69},[51,7557,7417],{"class":65},[51,7559,70],{"class":69},[51,7561,4666],{"class":65},[51,7563,7564],{"class":53,"line":237},[51,7565,1974],{"class":65},[51,7567,7568,7570,7572],{"class":53,"line":242},[51,7569,549],{"class":69},[51,7571,2363],{"class":57},[51,7573,2366],{"class":65},[51,7575,7576],{"class":53,"line":257},[51,7577,1955],{"class":65},[51,7579,7580,7582,7584,7586,7588],{"class":53,"line":262},[51,7581,2375],{"class":69},[51,7583,1808],{"class":65},[51,7585,70],{"class":69},[51,7587,988],{"class":278},[51,7589,1703],{"class":65},[51,7591,7592,7594,7596,7598,7600],{"class":53,"line":285},[51,7593,2375],{"class":69},[51,7595,3221],{"class":65},[51,7597,70],{"class":69},[51,7599,1242],{"class":278},[51,7601,1703],{"class":65},[51,7603,7604],{"class":53,"line":296},[51,7605,7606],{"class":601},"    \u002F\u002F地址传递\n",[51,7608,7609,7611,7613,7615,7618,7620],{"class":53,"line":307},[51,7610,5945],{"class":57},[51,7612,546],{"class":65},[51,7614,895],{"class":69},[51,7616,7617],{"class":65},"a,",[51,7619,895],{"class":69},[51,7621,7622],{"class":65},"b);\n",[51,7624,7625,7627,7629,7631,7633,7635],{"class":53,"line":324},[51,7626,1960],{"class":65},[51,7628,1586],{"class":69},[51,7630,780],{"class":65},[51,7632,1586],{"class":69},[51,7634,1651],{"class":65},[51,7636,7637],{"class":601},"\u002F\u002F20\n",[51,7639,7640,7642,7644,7646,7648,7650],{"class":53,"line":329},[51,7641,1960],{"class":65},[51,7643,1586],{"class":69},[51,7645,805],{"class":65},[51,7647,1586],{"class":69},[51,7649,1651],{"class":65},[51,7651,7652],{"class":601},"\u002F\u002F10\n",[51,7654,7655],{"class":53,"line":334},[51,7656,1974],{"class":65},[10,7658,7659],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[486,7661,7663],{"id":7662},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[10,7665,7666],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[10,7668,7669,7670,7672],{},"例如数组：int arr",[51,7671,988],{},"={4,3,6,9,1,2,10,8,7,5}",[41,7674,7676],{"className":534,"code":7675,"language":536,"meta":46,"style":46},"#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",[48,7677,7678,7684,7694,7718,7722,7753,7757,7791,7795,7813,7817,7828,7843,7858,7862,7866,7870,7874,7878,7886,7890,7895,7949,7961,7973,7978,7986,7990,7995,8020,8024,8039,8048,8052],{"__ignoreMap":46},[51,7679,7680,7682],{"class":53,"line":54},[51,7681,2340],{"class":69},[51,7683,2343],{"class":61},[51,7685,7686,7688,7690,7692],{"class":53,"line":185},[51,7687,2348],{"class":69},[51,7689,2351],{"class":69},[51,7691,2354],{"class":57},[51,7693,1703],{"class":65},[51,7695,7696,7698,7701,7703,7705,7707,7709,7711,7713,7716],{"class":53,"line":202},[51,7697,5748],{"class":69},[51,7699,7700],{"class":57}," bubbleSort",[51,7702,546],{"class":65},[51,7704,549],{"class":69},[51,7706,6902],{"class":69},[51,7708,10],{"class":248},[51,7710,920],{"class":65},[51,7712,549],{"class":69},[51,7714,7715],{"class":248}," len",[51,7717,282],{"class":65},[51,7719,7720],{"class":53,"line":209},[51,7721,1955],{"class":65},[51,7723,7724,7726,7728,7730,7732,7734,7736,7738,7740,7743,7745,7747,7749,7751],{"class":53,"line":223},[51,7725,3588],{"class":69},[51,7727,546],{"class":65},[51,7729,549],{"class":69},[51,7731,3419],{"class":65},[51,7733,70],{"class":69},[51,7735,733],{"class":278},[51,7737,3426],{"class":65},[51,7739,1452],{"class":69},[51,7741,7742],{"class":65},"len",[51,7744,1074],{"class":69},[51,7746,759],{"class":278},[51,7748,3426],{"class":65},[51,7750,2682],{"class":69},[51,7752,282],{"class":65},[51,7754,7755],{"class":53,"line":237},[51,7756,2420],{"class":65},[51,7758,7759,7761,7763,7765,7767,7769,7771,7773,7775,7777,7779,7781,7783,7785,7787,7789],{"class":53,"line":242},[51,7760,3790],{"class":69},[51,7762,546],{"class":65},[51,7764,549],{"class":69},[51,7766,3797],{"class":65},[51,7768,70],{"class":69},[51,7770,733],{"class":278},[51,7772,3804],{"class":65},[51,7774,1452],{"class":69},[51,7776,7742],{"class":65},[51,7778,1074],{"class":69},[51,7780,983],{"class":65},[51,7782,1074],{"class":69},[51,7784,759],{"class":278},[51,7786,3804],{"class":65},[51,7788,2682],{"class":69},[51,7790,282],{"class":65},[51,7792,7793],{"class":53,"line":257},[51,7794,2898],{"class":65},[51,7796,7797,7799,7802,7804,7807,7809,7811],{"class":53,"line":262},[51,7798,5027],{"class":69},[51,7800,7801],{"class":65},"(p[j]",[51,7803,1502],{"class":69},[51,7805,7806],{"class":65},"p[j",[51,7808,1023],{"class":69},[51,7810,759],{"class":278},[51,7812,5042],{"class":65},[51,7814,7815],{"class":53,"line":285},[51,7816,5047],{"class":65},[51,7818,7819,7821,7823,7825],{"class":53,"line":296},[51,7820,5052],{"class":69},[51,7822,4641],{"class":65},[51,7824,70],{"class":69},[51,7826,7827],{"class":65},"p[j];\n",[51,7829,7830,7833,7835,7837,7839,7841],{"class":53,"line":307},[51,7831,7832],{"class":65},"                p[j]",[51,7834,70],{"class":69},[51,7836,7806],{"class":65},[51,7838,1023],{"class":69},[51,7840,759],{"class":278},[51,7842,5075],{"class":65},[51,7844,7845,7848,7850,7852,7854,7856],{"class":53,"line":324},[51,7846,7847],{"class":65},"                p[j",[51,7849,1023],{"class":69},[51,7851,759],{"class":278},[51,7853,1482],{"class":65},[51,7855,70],{"class":69},[51,7857,4666],{"class":65},[51,7859,7860],{"class":53,"line":329},[51,7861,5095],{"class":65},[51,7863,7864],{"class":53,"line":334},[51,7865,2917],{"class":65},[51,7867,7868],{"class":53,"line":340},[51,7869,2577],{"class":65},[51,7871,7872],{"class":53,"line":345},[51,7873,1974],{"class":65},[51,7875,7876],{"class":53,"line":357},[51,7877,206],{"emptyLinePlaceholder":205},[51,7879,7880,7882,7884],{"class":53,"line":366},[51,7881,549],{"class":69},[51,7883,2363],{"class":57},[51,7885,2366],{"class":65},[51,7887,7888],{"class":53,"line":383},[51,7889,1955],{"class":65},[51,7891,7892],{"class":53,"line":392},[51,7893,7894],{"class":601},"    \u002F\u002F 1.创建数组\n",[51,7896,7897,7899,7901,7903,7905,7907,7909,7911,7913,7915,7917,7919,7921,7923,7925,7927,7929,7931,7933,7935,7937,7939,7941,7943,7945,7947],{"class":53,"line":403},[51,7898,2375],{"class":69},[51,7900,4348],{"class":65},[51,7902,988],{"class":278},[51,7904,1482],{"class":65},[51,7906,70],{"class":69},[51,7908,1438],{"class":65},[51,7910,835],{"class":278},[51,7912,920],{"class":65},[51,7914,614],{"class":278},[51,7916,920],{"class":65},[51,7918,886],{"class":278},[51,7920,920],{"class":65},[51,7922,962],{"class":278},[51,7924,920],{"class":65},[51,7926,759],{"class":278},[51,7928,920],{"class":65},[51,7930,620],{"class":278},[51,7932,920],{"class":65},[51,7934,988],{"class":278},[51,7936,920],{"class":65},[51,7938,937],{"class":278},[51,7940,920],{"class":65},[51,7942,911],{"class":278},[51,7944,920],{"class":65},[51,7946,861],{"class":278},[51,7948,4381],{"class":65},[51,7950,7951,7953,7955,7957,7959],{"class":53,"line":409},[51,7952,2375],{"class":69},[51,7954,7715],{"class":65},[51,7956,70],{"class":69},[51,7958,988],{"class":278},[51,7960,1703],{"class":65},[51,7962,7963,7965,7967,7969,7971],{"class":53,"line":414},[51,7964,2375],{"class":69},[51,7966,6902],{"class":69},[51,7968,10],{"class":65},[51,7970,70],{"class":69},[51,7972,7422],{"class":65},[51,7974,7975],{"class":53,"line":433},[51,7976,7977],{"class":601},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[51,7979,7980,7983],{"class":53,"line":439},[51,7981,7982],{"class":57},"    bubbleSort",[51,7984,7985],{"class":65},"(p,len);\n",[51,7987,7988],{"class":53,"line":444},[51,7989,206],{"emptyLinePlaceholder":205},[51,7991,7992],{"class":53,"line":453},[51,7993,7994],{"class":601},"    \u002F\u002F 3.打印排序后的数组\n",[51,7996,7997,7999,8001,8003,8005,8007,8009,8011,8013,8016,8018],{"class":53,"line":2174},[51,7998,3588],{"class":69},[51,8000,2060],{"class":65},[51,8002,549],{"class":69},[51,8004,3419],{"class":65},[51,8006,70],{"class":69},[51,8008,733],{"class":278},[51,8010,3601],{"class":65},[51,8012,1452],{"class":69},[51,8014,8015],{"class":65},"len; i",[51,8017,2682],{"class":69},[51,8019,282],{"class":65},[51,8021,8022],{"class":53,"line":2965},[51,8023,2420],{"class":65},[51,8025,8026,8028,8030,8032,8034,8037],{"class":53,"line":2979},[51,8027,3838],{"class":65},[51,8029,6803],{"class":69},[51,8031,10],{"class":65},[51,8033,1586],{"class":69},[51,8035,8036],{"class":61},"\"\"",[51,8038,1703],{"class":65},[51,8040,8041,8044,8046],{"class":53,"line":2987},[51,8042,8043],{"class":65},"        p",[51,8045,2682],{"class":69},[51,8047,1703],{"class":65},[51,8049,8050],{"class":53,"line":2992},[51,8051,2577],{"class":65},[51,8053,8054],{"class":53,"line":2998},[51,8055,1974],{"class":65},[464,8057,8058],{},"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":46,"searchDepth":185,"depth":185,"links":8060},[8061,8062,8063,8064,8065,8066,8067,8068],{"id":6667,"depth":185,"text":6668},{"id":6833,"depth":185,"text":6834},{"id":6989,"depth":185,"text":6990},{"id":7067,"depth":185,"text":7068},{"id":7146,"depth":185,"text":7147},{"id":7245,"depth":185,"text":7246},{"id":7484,"depth":185,"text":7485},{"id":7662,"depth":185,"text":7663},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6656,"description":6664},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8075,"title":8076,"body":8077,"description":8084,"extension":469,"meta":11058,"navigation":205,"path":11059,"seo":11060,"stem":11061,"__hash__":11062},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8078,"toc":11049},[8079,8082,8085,8089,8092,8095,8106,8444,8447,8451,8454,8461,8716,8720,8723,8726,8881,8885,8888,8891,9097,9101,9104,9407,9410,9418,9422,9425,9576,9578,9589,9646,9650,9655,10312,10320,10323,10417,10420,11040,11046],[14,8080,8076],{"id":8081},"_4结构体",[10,8083,8084],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[486,8086,8088],{"id":8087},"_41结构体定义与使用","4.1结构体定义与使用",[10,8090,8091],{},"语法：struct 结构体名 {结构体成员列表}；",[10,8093,8094],{},"通过结构体创建变量的方式：",[1549,8096,8097,8100,8103],{},[22,8098,8099],{},"struct 结构体名 变量名",[22,8101,8102],{},"struct 结构体名 变量名={成员1值，成员2值...}",[22,8104,8105],{},"定义结构体时顺便创建变量",[41,8107,8109],{"className":534,"code":8108,"language":536,"meta":46,"style":46},"#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",[48,8110,8111,8117,8127,8134,8139,8147,8151,8156,8160,8165,8170,8175,8182,8187,8194,8198,8205,8209,8213,8217,8221,8225,8229,8235,8239,8245,8253,8261,8265,8270,8275,8286,8291,8303,8314,8325,8330,8354,8359,8365,8392,8397,8403,8415,8427,8439],{"__ignoreMap":46},[51,8112,8113,8115],{"class":53,"line":54},[51,8114,2340],{"class":69},[51,8116,2343],{"class":61},[51,8118,8119,8121,8123,8125],{"class":53,"line":185},[51,8120,2348],{"class":69},[51,8122,2351],{"class":69},[51,8124,2354],{"class":57},[51,8126,1703],{"class":65},[51,8128,8129,8131],{"class":53,"line":202},[51,8130,2340],{"class":69},[51,8132,8133],{"class":61},"\u003Cstring>\n",[51,8135,8136],{"class":53,"line":209},[51,8137,8138],{"class":601},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[51,8140,8141,8144],{"class":53,"line":223},[51,8142,8143],{"class":69},"struct",[51,8145,8146],{"class":57}," Student\n",[51,8148,8149],{"class":53,"line":237},[51,8150,1955],{"class":65},[51,8152,8153],{"class":53,"line":242},[51,8154,8155],{"class":601},"    \u002F\u002F成员列表\n",[51,8157,8158],{"class":53,"line":257},[51,8159,206],{"emptyLinePlaceholder":205},[51,8161,8162],{"class":53,"line":262},[51,8163,8164],{"class":601},"    \u002F\u002F姓名\n",[51,8166,8167],{"class":53,"line":285},[51,8168,8169],{"class":65},"    string name;\n",[51,8171,8172],{"class":53,"line":296},[51,8173,8174],{"class":601},"    \u002F\u002F年龄\n",[51,8176,8177,8179],{"class":53,"line":307},[51,8178,2375],{"class":69},[51,8180,8181],{"class":65}," age;\n",[51,8183,8184],{"class":53,"line":324},[51,8185,8186],{"class":601},"    \u002F\u002F分数\n",[51,8188,8189,8191],{"class":53,"line":329},[51,8190,2375],{"class":69},[51,8192,8193],{"class":65}," score;\n",[51,8195,8196],{"class":53,"line":334},[51,8197,4381],{"class":65},[51,8199,8200,8202],{"class":53,"line":340},[51,8201,8143],{"class":69},[51,8203,8204],{"class":57}," School\n",[51,8206,8207],{"class":53,"line":345},[51,8208,1955],{"class":65},[51,8210,8211],{"class":53,"line":357},[51,8212,8155],{"class":601},[51,8214,8215],{"class":53,"line":366},[51,8216,206],{"emptyLinePlaceholder":205},[51,8218,8219],{"class":53,"line":383},[51,8220,8164],{"class":601},[51,8222,8223],{"class":53,"line":392},[51,8224,8169],{"class":65},[51,8226,8227],{"class":53,"line":403},[51,8228,8174],{"class":601},[51,8230,8231,8233],{"class":53,"line":409},[51,8232,2375],{"class":69},[51,8234,8181],{"class":65},[51,8236,8237],{"class":53,"line":414},[51,8238,8186],{"class":601},[51,8240,8241,8243],{"class":53,"line":433},[51,8242,2375],{"class":69},[51,8244,8193],{"class":65},[51,8246,8247,8250],{"class":53,"line":439},[51,8248,8249],{"class":65},"} s3;",[51,8251,8252],{"class":601}," \u002F\u002F创建结构体时就创建了变量\n",[51,8254,8255,8257,8259],{"class":53,"line":444},[51,8256,549],{"class":69},[51,8258,2363],{"class":57},[51,8260,2366],{"class":65},[51,8262,8263],{"class":53,"line":453},[51,8264,1955],{"class":65},[51,8266,8267],{"class":53,"line":2174},[51,8268,8269],{"class":601},"    \u002F\u002F2.通过学生类型创建具体学生\n",[51,8271,8272],{"class":53,"line":2965},[51,8273,8274],{"class":601},"    \u002F\u002F2.1 struct Student s1;\n",[51,8276,8277,8280,8283],{"class":53,"line":2979},[51,8278,8279],{"class":69},"    struct",[51,8281,8282],{"class":57}," Student",[51,8284,8285],{"class":65}," s1;\n",[51,8287,8288],{"class":53,"line":2987},[51,8289,8290],{"class":601},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[51,8292,8293,8296,8298,8301],{"class":53,"line":2992},[51,8294,8295],{"class":65},"    s1.name",[51,8297,70],{"class":69},[51,8299,8300],{"class":61},"\"张三\"",[51,8302,1703],{"class":65},[51,8304,8305,8308,8310,8312],{"class":53,"line":2998},[51,8306,8307],{"class":65},"    s1.age",[51,8309,70],{"class":69},[51,8311,1192],{"class":278},[51,8313,1703],{"class":65},[51,8315,8316,8319,8321,8323],{"class":53,"line":3004},[51,8317,8318],{"class":65},"    s1.score",[51,8320,70],{"class":69},[51,8322,796],{"class":278},[51,8324,1703],{"class":65},[51,8326,8327],{"class":53,"line":3009},[51,8328,8329],{"class":601},"    \u002F\u002F输出结果\n",[51,8331,8333,8335,8337,8340,8342,8345,8347,8350,8352],{"class":53,"line":8332},37,[51,8334,1960],{"class":65},[51,8336,1586],{"class":69},[51,8338,8339],{"class":65},"s1.name",[51,8341,1586],{"class":69},[51,8343,8344],{"class":65},"s1.age",[51,8346,1586],{"class":69},[51,8348,8349],{"class":65},"s1.score",[51,8351,1586],{"class":69},[51,8353,1608],{"class":65},[51,8355,8357],{"class":53,"line":8356},38,[51,8358,206],{"emptyLinePlaceholder":205},[51,8360,8362],{"class":53,"line":8361},39,[51,8363,8364],{"class":601},"    \u002F\u002F2.2 struct Student s2={...}\n",[51,8366,8368,8370,8372,8375,8377,8379,8382,8384,8386,8388,8390],{"class":53,"line":8367},40,[51,8369,8279],{"class":69},[51,8371,8282],{"class":57},[51,8373,8374],{"class":65}," s2",[51,8376,70],{"class":69},[51,8378,1438],{"class":65},[51,8380,8381],{"class":61},"\"王五\"",[51,8383,920],{"class":65},[51,8385,1192],{"class":278},[51,8387,920],{"class":65},[51,8389,796],{"class":278},[51,8391,4381],{"class":65},[51,8393,8395],{"class":53,"line":8394},41,[51,8396,206],{"emptyLinePlaceholder":205},[51,8398,8400],{"class":53,"line":8399},42,[51,8401,8402],{"class":601},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[51,8404,8406,8409,8411,8413],{"class":53,"line":8405},43,[51,8407,8408],{"class":65},"    s3.name",[51,8410,70],{"class":69},[51,8412,4065],{"class":61},[51,8414,1703],{"class":65},[51,8416,8418,8421,8423,8425],{"class":53,"line":8417},44,[51,8419,8420],{"class":65},"    s3.age",[51,8422,70],{"class":69},[51,8424,1192],{"class":278},[51,8426,1703],{"class":65},[51,8428,8430,8433,8435,8437],{"class":53,"line":8429},45,[51,8431,8432],{"class":65},"    s3.score",[51,8434,70],{"class":69},[51,8436,1242],{"class":278},[51,8438,1703],{"class":65},[51,8440,8442],{"class":53,"line":8441},46,[51,8443,1974],{"class":65},[10,8445,8446],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[486,8448,8450],{"id":8449},"_42结构体数组","4.2结构体数组",[10,8452,8453],{},"将自定义的结构体放入到数组中方便维护",[10,8455,8456,8457,8460],{},"语法：struct 结构体名 数组名",[51,8458,8459],{},"元素个数","={ {}，{},...{} };",[41,8462,8464],{"className":534,"code":8463,"language":536,"meta":46,"style":46},"#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",[48,8465,8466,8472,8482,8488,8493,8499,8503,8507,8513,8519,8523,8527,8535,8539,8544,8559,8563,8579,8595,8599,8604,8620,8635,8650,8655,8681,8685,8708,8712],{"__ignoreMap":46},[51,8467,8468,8470],{"class":53,"line":54},[51,8469,2340],{"class":69},[51,8471,2343],{"class":61},[51,8473,8474,8476,8478,8480],{"class":53,"line":185},[51,8475,2348],{"class":69},[51,8477,2351],{"class":69},[51,8479,2354],{"class":57},[51,8481,1703],{"class":65},[51,8483,8484,8486],{"class":53,"line":202},[51,8485,2340],{"class":69},[51,8487,8133],{"class":61},[51,8489,8490],{"class":53,"line":209},[51,8491,8492],{"class":601},"\u002F\u002F1.定义结构体\n",[51,8494,8495,8497],{"class":53,"line":223},[51,8496,8143],{"class":69},[51,8498,8146],{"class":57},[51,8500,8501],{"class":53,"line":237},[51,8502,1955],{"class":65},[51,8504,8505],{"class":53,"line":242},[51,8506,8169],{"class":65},[51,8508,8509,8511],{"class":53,"line":257},[51,8510,2375],{"class":69},[51,8512,8181],{"class":65},[51,8514,8515,8517],{"class":53,"line":262},[51,8516,2375],{"class":69},[51,8518,8193],{"class":65},[51,8520,8521],{"class":53,"line":285},[51,8522,206],{"emptyLinePlaceholder":205},[51,8524,8525],{"class":53,"line":296},[51,8526,4381],{"class":65},[51,8528,8529,8531,8533],{"class":53,"line":307},[51,8530,549],{"class":69},[51,8532,2363],{"class":57},[51,8534,2366],{"class":65},[51,8536,8537],{"class":53,"line":324},[51,8538,1955],{"class":65},[51,8540,8541],{"class":53,"line":329},[51,8542,8543],{"class":601},"    \u002F\u002F2.创建结构体数组\n",[51,8545,8546,8548,8550,8553,8555,8557],{"class":53,"line":334},[51,8547,8279],{"class":69},[51,8549,8282],{"class":57},[51,8551,8552],{"class":65}," stuArray[",[51,8554,620],{"class":278},[51,8556,1482],{"class":65},[51,8558,5293],{"class":69},[51,8560,8561],{"class":53,"line":340},[51,8562,2420],{"class":65},[51,8564,8565,8567,8569,8571,8573,8575,8577],{"class":53,"line":345},[51,8566,5302],{"class":65},[51,8568,8300],{"class":61},[51,8570,920],{"class":65},[51,8572,1192],{"class":278},[51,8574,920],{"class":65},[51,8576,853],{"class":278},[51,8578,5315],{"class":65},[51,8580,8581,8583,8585,8587,8589,8591,8593],{"class":53,"line":357},[51,8582,5302],{"class":65},[51,8584,4065],{"class":61},[51,8586,920],{"class":65},[51,8588,1117],{"class":278},[51,8590,920],{"class":65},[51,8592,1117],{"class":278},[51,8594,1974],{"class":65},[51,8596,8597],{"class":53,"line":366},[51,8598,2577],{"class":65},[51,8600,8601],{"class":53,"line":383},[51,8602,8603],{"class":601},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[51,8605,8606,8609,8611,8614,8616,8618],{"class":53,"line":392},[51,8607,8608],{"class":65},"    stuArray[",[51,8610,759],{"class":278},[51,8612,8613],{"class":65},"].name",[51,8615,70],{"class":69},[51,8617,4088],{"class":61},[51,8619,1703],{"class":65},[51,8621,8622,8624,8626,8629,8631,8633],{"class":53,"line":403},[51,8623,8608],{"class":65},[51,8625,759],{"class":278},[51,8627,8628],{"class":65},"].age",[51,8630,70],{"class":69},[51,8632,620],{"class":278},[51,8634,1703],{"class":65},[51,8636,8637,8639,8641,8644,8646,8648],{"class":53,"line":409},[51,8638,8608],{"class":65},[51,8640,759],{"class":278},[51,8642,8643],{"class":65},"].score",[51,8645,70],{"class":69},[51,8647,620],{"class":278},[51,8649,1703],{"class":65},[51,8651,8652],{"class":53,"line":414},[51,8653,8654],{"class":601},"    \u002F\u002F4.遍历结构体数组\n",[51,8656,8657,8659,8661,8663,8665,8667,8669,8671,8673,8675,8677,8679],{"class":53,"line":433},[51,8658,3588],{"class":69},[51,8660,2060],{"class":65},[51,8662,549],{"class":69},[51,8664,3419],{"class":65},[51,8666,70],{"class":69},[51,8668,733],{"class":278},[51,8670,3426],{"class":65},[51,8672,1452],{"class":69},[51,8674,620],{"class":278},[51,8676,3426],{"class":65},[51,8678,2682],{"class":69},[51,8680,282],{"class":65},[51,8682,8683],{"class":53,"line":439},[51,8684,2420],{"class":65},[51,8686,8687,8689,8691,8694,8696,8699,8701,8704,8706],{"class":53,"line":444},[51,8688,3838],{"class":65},[51,8690,1586],{"class":69},[51,8692,8693],{"class":65},"stuArray[i].name",[51,8695,1586],{"class":69},[51,8697,8698],{"class":65},"stuArray[i].age",[51,8700,1586],{"class":69},[51,8702,8703],{"class":65},"stuArray[i].score",[51,8705,1586],{"class":69},[51,8707,1608],{"class":65},[51,8709,8710],{"class":53,"line":453},[51,8711,2577],{"class":65},[51,8713,8714],{"class":53,"line":2174},[51,8715,1974],{"class":65},[486,8717,8719],{"id":8718},"_43结构体指针","4.3结构体指针",[10,8721,8722],{},"作用：通过指针访问结构体中的成员",[10,8724,8725],{},"利用操作符->可以通过结构体指针访问结构体属性",[41,8727,8729],{"className":534,"code":8728,"language":536,"meta":46,"style":46},"#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",[48,8730,8731,8737,8747,8753,8757,8763,8767,8771,8777,8783,8787,8795,8799,8804,8829,8834,8849,8854,8877],{"__ignoreMap":46},[51,8732,8733,8735],{"class":53,"line":54},[51,8734,2340],{"class":69},[51,8736,2343],{"class":61},[51,8738,8739,8741,8743,8745],{"class":53,"line":185},[51,8740,2348],{"class":69},[51,8742,2351],{"class":69},[51,8744,2354],{"class":57},[51,8746,1703],{"class":65},[51,8748,8749,8751],{"class":53,"line":202},[51,8750,2340],{"class":69},[51,8752,8133],{"class":61},[51,8754,8755],{"class":53,"line":209},[51,8756,8492],{"class":601},[51,8758,8759,8761],{"class":53,"line":223},[51,8760,8143],{"class":69},[51,8762,8146],{"class":57},[51,8764,8765],{"class":53,"line":237},[51,8766,1955],{"class":65},[51,8768,8769],{"class":53,"line":242},[51,8770,8169],{"class":65},[51,8772,8773,8775],{"class":53,"line":257},[51,8774,2375],{"class":69},[51,8776,8181],{"class":65},[51,8778,8779,8781],{"class":53,"line":262},[51,8780,2375],{"class":69},[51,8782,8193],{"class":65},[51,8784,8785],{"class":53,"line":285},[51,8786,4381],{"class":65},[51,8788,8789,8791,8793],{"class":53,"line":296},[51,8790,549],{"class":69},[51,8792,2363],{"class":57},[51,8794,2366],{"class":65},[51,8796,8797],{"class":53,"line":307},[51,8798,1955],{"class":65},[51,8800,8801],{"class":53,"line":324},[51,8802,8803],{"class":601},"    \u002F\u002F创建学生结构体变量\n",[51,8805,8806,8808,8810,8813,8815,8817,8819,8821,8823,8825,8827],{"class":53,"line":329},[51,8807,8279],{"class":69},[51,8809,8282],{"class":57},[51,8811,8812],{"class":65}," s",[51,8814,70],{"class":69},[51,8816,1438],{"class":65},[51,8818,8300],{"class":61},[51,8820,920],{"class":65},[51,8822,1192],{"class":278},[51,8824,920],{"class":65},[51,8826,2120],{"class":278},[51,8828,4381],{"class":65},[51,8830,8831],{"class":53,"line":334},[51,8832,8833],{"class":601},"    \u002F\u002F通过指针指向结构体变量\n",[51,8835,8836,8838,8840,8842,8844,8846],{"class":53,"line":340},[51,8837,8279],{"class":69},[51,8839,8282],{"class":57},[51,8841,6902],{"class":69},[51,8843,10],{"class":65},[51,8845,6723],{"class":69},[51,8847,8848],{"class":65},"s\n",[51,8850,8851],{"class":53,"line":345},[51,8852,8853],{"class":601},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[51,8855,8856,8858,8860,8863,8865,8868,8870,8873,8875],{"class":53,"line":357},[51,8857,1960],{"class":65},[51,8859,1586],{"class":69},[51,8861,8862],{"class":65},"p->name",[51,8864,1586],{"class":69},[51,8866,8867],{"class":65},"p->age",[51,8869,1586],{"class":69},[51,8871,8872],{"class":65},"p->score",[51,8874,1586],{"class":69},[51,8876,1608],{"class":65},[51,8878,8879],{"class":53,"line":366},[51,8880,1974],{"class":65},[486,8882,8884],{"id":8883},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[10,8886,8887],{},"作用：结构体中的成员可以是另一个结构体",[10,8889,8890],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[41,8892,8894],{"className":534,"code":8893,"language":536,"meta":46,"style":46},"#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",[48,8895,8896,8902,8912,8918,8923,8931,8935,8939,8945,8951,8955,8960,8967,8971,8978,8982,8988,8993,8997,9005,9009,9014,9019,9024,9035,9047,9058,9071,9082,9093],{"__ignoreMap":46},[51,8897,8898,8900],{"class":53,"line":54},[51,8899,2340],{"class":69},[51,8901,2343],{"class":61},[51,8903,8904,8906,8908,8910],{"class":53,"line":185},[51,8905,2348],{"class":69},[51,8907,2351],{"class":69},[51,8909,2354],{"class":57},[51,8911,1703],{"class":65},[51,8913,8914,8916],{"class":53,"line":202},[51,8915,2340],{"class":69},[51,8917,8133],{"class":61},[51,8919,8920],{"class":53,"line":209},[51,8921,8922],{"class":601},"\u002F\u002F定义学生结构体\n",[51,8924,8925,8927,8929],{"class":53,"line":223},[51,8926,8143],{"class":69},[51,8928,8282],{"class":57},[51,8930,3062],{"class":65},[51,8932,8933],{"class":53,"line":237},[51,8934,1955],{"class":65},[51,8936,8937],{"class":53,"line":242},[51,8938,8169],{"class":65},[51,8940,8941,8943],{"class":53,"line":257},[51,8942,2375],{"class":69},[51,8944,8181],{"class":65},[51,8946,8947,8949],{"class":53,"line":262},[51,8948,2375],{"class":69},[51,8950,8193],{"class":65},[51,8952,8953],{"class":53,"line":285},[51,8954,1974],{"class":65},[51,8956,8957],{"class":53,"line":296},[51,8958,8959],{"class":601},"\u002F\u002F定义老师结构体\n",[51,8961,8962,8964],{"class":53,"line":307},[51,8963,8143],{"class":69},[51,8965,8966],{"class":57}," Teacher\n",[51,8968,8969],{"class":53,"line":324},[51,8970,1955],{"class":65},[51,8972,8973,8975],{"class":53,"line":329},[51,8974,2375],{"class":69},[51,8976,8977],{"class":65}," id;\n",[51,8979,8980],{"class":53,"line":334},[51,8981,8169],{"class":65},[51,8983,8984,8986],{"class":53,"line":340},[51,8985,2375],{"class":69},[51,8987,8181],{"class":65},[51,8989,8990],{"class":53,"line":345},[51,8991,8992],{"class":65},"    Student stu;\n",[51,8994,8995],{"class":53,"line":357},[51,8996,1974],{"class":65},[51,8998,8999,9001,9003],{"class":53,"line":366},[51,9000,549],{"class":69},[51,9002,2363],{"class":57},[51,9004,6362],{"class":65},[51,9006,9007],{"class":53,"line":383},[51,9008,1955],{"class":65},[51,9010,9011],{"class":53,"line":392},[51,9012,9013],{"class":601},"    \u002F\u002F结构体嵌套结构体\n",[51,9015,9016],{"class":53,"line":403},[51,9017,9018],{"class":601},"    \u002F\u002F创建老师\n",[51,9020,9021],{"class":53,"line":409},[51,9022,9023],{"class":65},"    Teacher t;\n",[51,9025,9026,9029,9031,9033],{"class":53,"line":414},[51,9027,9028],{"class":65},"    t.id",[51,9030,70],{"class":69},[51,9032,853],{"class":278},[51,9034,1703],{"class":65},[51,9036,9037,9040,9042,9045],{"class":53,"line":433},[51,9038,9039],{"class":65},"    t.name",[51,9041,70],{"class":69},[51,9043,9044],{"class":61},"\"老王\"",[51,9046,1703],{"class":65},[51,9048,9049,9052,9054,9056],{"class":53,"line":439},[51,9050,9051],{"class":65},"    t.age",[51,9053,70],{"class":69},[51,9055,1192],{"class":278},[51,9057,1703],{"class":65},[51,9059,9060,9063,9065,9068],{"class":53,"line":444},[51,9061,9062],{"class":65},"    t.stu.name",[51,9064,70],{"class":69},[51,9066,9067],{"class":61},"\"小王\"",[51,9069,9070],{"class":65},"；\n",[51,9072,9073,9076,9078,9080],{"class":53,"line":453},[51,9074,9075],{"class":65},"    t.stu.age",[51,9077,70],{"class":69},[51,9079,1242],{"class":278},[51,9081,1703],{"class":65},[51,9083,9084,9087,9089,9091],{"class":53,"line":2174},[51,9085,9086],{"class":65},"    t.stu.score",[51,9088,70],{"class":69},[51,9090,886],{"class":278},[51,9092,1703],{"class":65},[51,9094,9095],{"class":53,"line":2965},[51,9096,1974],{"class":65},[486,9098,9100],{"id":9099},"_45结构体做函数参数","4.5结构体做函数参数",[10,9102,9103],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[41,9105,9107],{"className":534,"code":9106,"language":536,"meta":46,"style":46},"#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",[48,9108,9109,9115,9125,9131,9137,9141,9145,9151,9157,9161,9166,9171,9188,9192,9225,9229,9234,9253,9257,9288,9292,9300,9304,9313,9325,9337,9349,9362,9370,9383,9395,9403],{"__ignoreMap":46},[51,9110,9111,9113],{"class":53,"line":54},[51,9112,2340],{"class":69},[51,9114,2343],{"class":61},[51,9116,9117,9119,9121,9123],{"class":53,"line":185},[51,9118,2348],{"class":69},[51,9120,2351],{"class":69},[51,9122,2354],{"class":57},[51,9124,1703],{"class":65},[51,9126,9127,9129],{"class":53,"line":202},[51,9128,2340],{"class":69},[51,9130,8133],{"class":61},[51,9132,9133,9135],{"class":53,"line":209},[51,9134,8143],{"class":69},[51,9136,8146],{"class":57},[51,9138,9139],{"class":53,"line":223},[51,9140,1955],{"class":65},[51,9142,9143],{"class":53,"line":237},[51,9144,8169],{"class":65},[51,9146,9147,9149],{"class":53,"line":242},[51,9148,2375],{"class":69},[51,9150,8181],{"class":65},[51,9152,9153,9155],{"class":53,"line":257},[51,9154,2375],{"class":69},[51,9156,8193],{"class":65},[51,9158,9159],{"class":53,"line":262},[51,9160,4381],{"class":65},[51,9162,9163],{"class":53,"line":285},[51,9164,9165],{"class":601},"\u002F\u002F打印学生信息的函数\n",[51,9167,9168],{"class":53,"line":296},[51,9169,9170],{"class":601},"\u002F\u002F值传递\n",[51,9172,9173,9175,9178,9180,9182,9184,9186],{"class":53,"line":307},[51,9174,5748],{"class":69},[51,9176,9177],{"class":57}," printStudent1",[51,9179,546],{"class":65},[51,9181,8143],{"class":69},[51,9183,8282],{"class":57},[51,9185,8812],{"class":248},[51,9187,282],{"class":65},[51,9189,9190],{"class":53,"line":324},[51,9191,1955],{"class":65},[51,9193,9194,9196,9198,9201,9203,9206,9208,9211,9213,9215,9217,9220,9222],{"class":53,"line":329},[51,9195,6913],{"class":65},[51,9197,1586],{"class":69},[51,9199,9200],{"class":65}," s.name ",[51,9202,1586],{"class":69},[51,9204,9205],{"class":61}," \" \"",[51,9207,1854],{"class":69},[51,9209,9210],{"class":65}," s.age ",[51,9212,1586],{"class":69},[51,9214,9205],{"class":61},[51,9216,1854],{"class":69},[51,9218,9219],{"class":65}," s.score ",[51,9221,1586],{"class":69},[51,9223,9224],{"class":65}," endl;\n",[51,9226,9227],{"class":53,"line":334},[51,9228,1974],{"class":65},[51,9230,9231],{"class":53,"line":340},[51,9232,9233],{"class":601},"\u002F\u002F地址传递\n",[51,9235,9236,9238,9241,9243,9245,9247,9249,9251],{"class":53,"line":345},[51,9237,5748],{"class":69},[51,9239,9240],{"class":57}," printStudent2",[51,9242,546],{"class":65},[51,9244,8143],{"class":69},[51,9246,8282],{"class":57},[51,9248,6902],{"class":69},[51,9250,1237],{"class":248},[51,9252,282],{"class":65},[51,9254,9255],{"class":53,"line":357},[51,9256,1955],{"class":65},[51,9258,9259,9261,9263,9266,9268,9270,9272,9275,9277,9279,9281,9284,9286],{"class":53,"line":366},[51,9260,6913],{"class":65},[51,9262,1586],{"class":69},[51,9264,9265],{"class":65}," s->name ",[51,9267,1586],{"class":69},[51,9269,9205],{"class":61},[51,9271,1854],{"class":69},[51,9273,9274],{"class":65}," s->age ",[51,9276,1586],{"class":69},[51,9278,9205],{"class":61},[51,9280,1854],{"class":69},[51,9282,9283],{"class":65}," s->score ",[51,9285,1586],{"class":69},[51,9287,9224],{"class":65},[51,9289,9290],{"class":53,"line":383},[51,9291,1974],{"class":65},[51,9293,9294,9296,9298],{"class":53,"line":392},[51,9295,549],{"class":69},[51,9297,2363],{"class":57},[51,9299,2366],{"class":65},[51,9301,9302],{"class":53,"line":403},[51,9303,1955],{"class":65},[51,9305,9306,9308,9310],{"class":53,"line":409},[51,9307,8279],{"class":69},[51,9309,8282],{"class":57},[51,9311,9312],{"class":65}," s;\n",[51,9314,9315,9318,9320,9323],{"class":53,"line":414},[51,9316,9317],{"class":65},"    s.name ",[51,9319,70],{"class":69},[51,9321,9322],{"class":61}," \"张三\"",[51,9324,1703],{"class":65},[51,9326,9327,9330,9332,9335],{"class":53,"line":433},[51,9328,9329],{"class":65},"    s.age ",[51,9331,70],{"class":69},[51,9333,9334],{"class":278}," 20",[51,9336,1703],{"class":65},[51,9338,9339,9342,9344,9347],{"class":53,"line":439},[51,9340,9341],{"class":65},"    s.score ",[51,9343,70],{"class":69},[51,9345,9346],{"class":278}," 85",[51,9348,1703],{"class":65},[51,9350,9351,9353,9355,9358,9360],{"class":53,"line":444},[51,9352,1960],{"class":65},[51,9354,1586],{"class":69},[51,9356,9357],{"class":61},"\"值传递:\"",[51,9359,1586],{"class":69},[51,9361,1608],{"class":65},[51,9363,9364,9367],{"class":53,"line":453},[51,9365,9366],{"class":57},"    printStudent1",[51,9368,9369],{"class":65},"(s);\n",[51,9371,9372,9374,9376,9379,9381],{"class":53,"line":2174},[51,9373,1960],{"class":65},[51,9375,1586],{"class":69},[51,9377,9378],{"class":61},"\"地址传递:\"",[51,9380,1586],{"class":69},[51,9382,1608],{"class":65},[51,9384,9385,9388,9390,9392],{"class":53,"line":2965},[51,9386,9387],{"class":57},"    printStudent2",[51,9389,546],{"class":65},[51,9391,895],{"class":69},[51,9393,9394],{"class":65},"s); \n",[51,9396,9397,9399,9401],{"class":53,"line":2979},[51,9398,4476],{"class":69},[51,9400,4479],{"class":278},[51,9402,1703],{"class":65},[51,9404,9405],{"class":53,"line":2987},[51,9406,1974],{"class":65},[10,9408,9409],{},"注意：",[1549,9411,9412,9415],{},[22,9413,9414],{},"1.先定义结构体，不要在函数中写结构体的定义",[22,9416,9417],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[486,9419,9421],{"id":9420},"_46结构体中const使用场景","4.6结构体中const使用场景",[10,9423,9424],{},"用const防止误操作",[41,9426,9428],{"className":534,"code":9427,"language":536,"meta":46,"style":46},"#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",[48,9429,9430,9436,9446,9452,9457,9461,9465,9471,9477,9481,9497,9501,9524,9528,9536,9540,9561,9568,9572],{"__ignoreMap":46},[51,9431,9432,9434],{"class":53,"line":54},[51,9433,2340],{"class":69},[51,9435,2343],{"class":61},[51,9437,9438,9440,9442,9444],{"class":53,"line":185},[51,9439,2348],{"class":69},[51,9441,2351],{"class":69},[51,9443,2354],{"class":57},[51,9445,1703],{"class":65},[51,9447,9448,9450],{"class":53,"line":202},[51,9449,2340],{"class":69},[51,9451,8133],{"class":61},[51,9453,9454],{"class":53,"line":209},[51,9455,9456],{"class":65},"sctuct Student\n",[51,9458,9459],{"class":53,"line":223},[51,9460,1955],{"class":65},[51,9462,9463],{"class":53,"line":237},[51,9464,8169],{"class":65},[51,9466,9467,9469],{"class":53,"line":242},[51,9468,2375],{"class":69},[51,9470,8181],{"class":65},[51,9472,9473,9475],{"class":53,"line":257},[51,9474,2375],{"class":69},[51,9476,8193],{"class":65},[51,9478,9479],{"class":53,"line":262},[51,9480,4381],{"class":65},[51,9482,9483,9485,9488,9490,9493,9495],{"class":53,"line":285},[51,9484,5748],{"class":69},[51,9486,9487],{"class":57}," printStudents",[51,9489,546],{"class":65},[51,9491,9492],{"class":57},"student",[51,9494,8812],{"class":248},[51,9496,282],{"class":65},[51,9498,9499],{"class":53,"line":296},[51,9500,1955],{"class":65},[51,9502,9503,9505,9507,9510,9512,9515,9517,9520,9522],{"class":53,"line":307},[51,9504,1960],{"class":65},[51,9506,1586],{"class":69},[51,9508,9509],{"class":65},"s.name",[51,9511,1586],{"class":69},[51,9513,9514],{"class":65},"s.age",[51,9516,1586],{"class":69},[51,9518,9519],{"class":65},"s.score",[51,9521,1586],{"class":69},[51,9523,1608],{"class":65},[51,9525,9526],{"class":53,"line":324},[51,9527,1974],{"class":65},[51,9529,9530,9532,9534],{"class":53,"line":329},[51,9531,549],{"class":69},[51,9533,2363],{"class":57},[51,9535,6362],{"class":65},[51,9537,9538],{"class":53,"line":334},[51,9539,1955],{"class":65},[51,9541,9542,9545,9547,9549,9551,9553,9555,9557,9559],{"class":53,"line":340},[51,9543,9544],{"class":65},"    Student s",[51,9546,70],{"class":69},[51,9548,1438],{"class":65},[51,9550,8300],{"class":61},[51,9552,920],{"class":65},[51,9554,1192],{"class":278},[51,9556,920],{"class":65},[51,9558,1192],{"class":278},[51,9560,4381],{"class":65},[51,9562,9563,9566],{"class":53,"line":345},[51,9564,9565],{"class":57},"    printStudent",[51,9567,9369],{"class":65},[51,9569,9570],{"class":53,"line":357},[51,9571,206],{"emptyLinePlaceholder":205},[51,9573,9574],{"class":53,"line":366},[51,9575,1974],{"class":65},[10,9577,9409],{},[1549,9579,9580,9583,9586],{},[22,9581,9582],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[22,9584,9585],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[22,9587,9588],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[41,9590,9592],{"className":534,"code":9591,"language":536,"meta":46,"style":46},"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",[48,9593,9594,9613,9617,9622,9642],{"__ignoreMap":46},[51,9595,9596,9598,9600,9602,9604,9607,9609,9611],{"class":53,"line":54},[51,9597,5748],{"class":69},[51,9599,9487],{"class":57},[51,9601,546],{"class":65},[51,9603,7176],{"class":69},[51,9605,9606],{"class":57}," student",[51,9608,6902],{"class":69},[51,9610,1237],{"class":248},[51,9612,282],{"class":65},[51,9614,9615],{"class":53,"line":185},[51,9616,1955],{"class":65},[51,9618,9619],{"class":53,"line":202},[51,9620,9621],{"class":601},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[51,9623,9624,9626,9628,9630,9632,9634,9636,9638,9640],{"class":53,"line":209},[51,9625,1960],{"class":65},[51,9627,1586],{"class":69},[51,9629,9509],{"class":65},[51,9631,1586],{"class":69},[51,9633,9514],{"class":65},[51,9635,1586],{"class":69},[51,9637,9519],{"class":65},[51,9639,1586],{"class":69},[51,9641,1608],{"class":65},[51,9643,9644],{"class":53,"line":223},[51,9645,1974],{"class":65},[486,9647,9649],{"id":9648},"_47案例","4.7案例",[19,9651,9652],{},[22,9653,9654],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[41,9656,9658],{"className":534,"code":9657,"language":536,"meta":46,"style":46},"#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",[48,9659,9660,9666,9676,9682,9689,9693,9699,9703,9708,9714,9720,9724,9728,9734,9738,9743,9748,9761,9765,9770,9796,9800,9812,9839,9843,9855,9865,9869,9874,9903,9907,9919,9928,9955,9966,9976,9980,9984,9988,9993,10017,10021,10045,10049,10068,10094,10098,10123,10146,10170,10175,10180,10185,10194,10199,10205,10226,10232,10246,10252,10279,10288,10294,10302,10307],{"__ignoreMap":46},[51,9661,9662,9664],{"class":53,"line":54},[51,9663,2340],{"class":69},[51,9665,2343],{"class":61},[51,9667,9668,9670,9672,9674],{"class":53,"line":185},[51,9669,2348],{"class":69},[51,9671,2351],{"class":69},[51,9673,2354],{"class":57},[51,9675,1703],{"class":65},[51,9677,9678,9680],{"class":53,"line":202},[51,9679,2340],{"class":69},[51,9681,8133],{"class":61},[51,9683,9684,9686],{"class":53,"line":209},[51,9685,2340],{"class":69},[51,9687,9688],{"class":61},"\u003Cctime>\n",[51,9690,9691],{"class":53,"line":223},[51,9692,8922],{"class":601},[51,9694,9695,9697],{"class":53,"line":237},[51,9696,8143],{"class":69},[51,9698,8146],{"class":57},[51,9700,9701],{"class":53,"line":242},[51,9702,1955],{"class":65},[51,9704,9705],{"class":53,"line":257},[51,9706,9707],{"class":65},"    string sName;\n",[51,9709,9710,9712],{"class":53,"line":262},[51,9711,2375],{"class":69},[51,9713,8181],{"class":65},[51,9715,9716,9718],{"class":53,"line":285},[51,9717,2375],{"class":69},[51,9719,8193],{"class":65},[51,9721,9722],{"class":53,"line":296},[51,9723,4381],{"class":65},[51,9725,9726],{"class":53,"line":307},[51,9727,8959],{"class":601},[51,9729,9730,9732],{"class":53,"line":324},[51,9731,8143],{"class":69},[51,9733,8966],{"class":57},[51,9735,9736],{"class":53,"line":329},[51,9737,1955],{"class":65},[51,9739,9740],{"class":53,"line":334},[51,9741,9742],{"class":65},"    string tName;\n",[51,9744,9745],{"class":53,"line":340},[51,9746,9747],{"class":601},"    \u002F\u002F学生数组\n",[51,9749,9750,9752,9754,9757,9759],{"class":53,"line":345},[51,9751,8279],{"class":69},[51,9753,8282],{"class":57},[51,9755,9756],{"class":65}," sArray[",[51,9758,861],{"class":278},[51,9760,5075],{"class":65},[51,9762,9763],{"class":53,"line":357},[51,9764,4381],{"class":65},[51,9766,9767],{"class":53,"line":366},[51,9768,9769],{"class":601},"\u002F\u002F给老师和学生赋值的函数\n",[51,9771,9772,9774,9777,9779,9781,9784,9787,9790,9792,9794],{"class":53,"line":383},[51,9773,5748],{"class":69},[51,9775,9776],{"class":57}," allocateSpace",[51,9778,546],{"class":65},[51,9780,8143],{"class":69},[51,9782,9783],{"class":57}," Teacher",[51,9785,9786],{"class":248}," tArray",[51,9788,9789],{"class":65},"[],",[51,9791,549],{"class":69},[51,9793,7715],{"class":248},[51,9795,282],{"class":65},[51,9797,9798],{"class":53,"line":392},[51,9799,1955],{"class":65},[51,9801,9802,9805,9807,9810],{"class":53,"line":403},[51,9803,9804],{"class":65},"    string nameSeed",[51,9806,70],{"class":69},[51,9808,9809],{"class":61},"\"ABCDE\"",[51,9811,1703],{"class":65},[51,9813,9814,9816,9818,9820,9823,9825,9827,9830,9832,9835,9837],{"class":53,"line":409},[51,9815,3588],{"class":69},[51,9817,2060],{"class":65},[51,9819,549],{"class":69},[51,9821,9822],{"class":65}," i ",[51,9824,70],{"class":69},[51,9826,4479],{"class":278},[51,9828,9829],{"class":65},"; i ",[51,9831,1452],{"class":69},[51,9833,9834],{"class":65}," len; i",[51,9836,2682],{"class":69},[51,9838,282],{"class":65},[51,9840,9841],{"class":53,"line":414},[51,9842,2420],{"class":65},[51,9844,9845,9848,9850,9853],{"class":53,"line":433},[51,9846,9847],{"class":65},"        tArray[i].tName ",[51,9849,70],{"class":69},[51,9851,9852],{"class":61}," \"Teacher_\"",[51,9854,1703],{"class":65},[51,9856,9857,9859,9862],{"class":53,"line":439},[51,9858,9847],{"class":65},[51,9860,9861],{"class":69},"+=",[51,9863,9864],{"class":65},"nameSeed[i];\n",[51,9866,9867],{"class":53,"line":444},[51,9868,206],{"emptyLinePlaceholder":205},[51,9870,9871],{"class":53,"line":453},[51,9872,9873],{"class":601},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[51,9875,9876,9878,9880,9882,9885,9887,9889,9892,9894,9896,9899,9901],{"class":53,"line":2174},[51,9877,3790],{"class":69},[51,9879,2060],{"class":65},[51,9881,549],{"class":69},[51,9883,9884],{"class":65}," j ",[51,9886,70],{"class":69},[51,9888,4479],{"class":278},[51,9890,9891],{"class":65},"; j ",[51,9893,1452],{"class":69},[51,9895,2538],{"class":278},[51,9897,9898],{"class":65},"; j",[51,9900,2682],{"class":69},[51,9902,282],{"class":65},[51,9904,9905],{"class":53,"line":2965},[51,9906,2898],{"class":65},[51,9908,9909,9912,9914,9917],{"class":53,"line":2979},[51,9910,9911],{"class":65},"            tArray[i].sArray[j].sName ",[51,9913,70],{"class":69},[51,9915,9916],{"class":61}," \"Student_\"",[51,9918,1703],{"class":65},[51,9920,9921,9923,9925],{"class":53,"line":2987},[51,9922,9911],{"class":65},[51,9924,9861],{"class":69},[51,9926,9927],{"class":65}," nameSeed[j];\n",[51,9929,9930,9933,9936,9938,9940,9942,9944,9946,9948,9950,9952],{"class":53,"line":2992},[51,9931,9932],{"class":69},"            int",[51,9934,9935],{"class":65}," random",[51,9937,70],{"class":69},[51,9939,2813],{"class":57},[51,9941,2816],{"class":65},[51,9943,870],{"class":69},[51,9945,1449],{"class":278},[51,9947,1023],{"class":69},[51,9949,943],{"class":278},[51,9951,598],{"class":65},[51,9953,9954],{"class":601},"\u002F\u002F40~99\n",[51,9956,9957,9960,9962,9964],{"class":53,"line":2998},[51,9958,9959],{"class":65},"            tArray[i].sArray[j].age ",[51,9961,70],{"class":69},[51,9963,9334],{"class":278},[51,9965,1703],{"class":65},[51,9967,9968,9971,9973],{"class":53,"line":3004},[51,9969,9970],{"class":65},"            tArray[i].sArray[j].score ",[51,9972,70],{"class":69},[51,9974,9975],{"class":65}," random;\n",[51,9977,9978],{"class":53,"line":3009},[51,9979,2917],{"class":65},[51,9981,9982],{"class":53,"line":8332},[51,9983,2577],{"class":65},[51,9985,9986],{"class":53,"line":8356},[51,9987,1974],{"class":65},[51,9989,9990],{"class":53,"line":8361},[51,9991,9992],{"class":601},"\u002F\u002F打印所有信息的函数\n",[51,9994,9995,9997,10000,10002,10004,10006,10008,10011,10013,10015],{"class":53,"line":8367},[51,9996,5748],{"class":69},[51,9998,9999],{"class":57}," printInfo",[51,10001,546],{"class":65},[51,10003,8143],{"class":69},[51,10005,9783],{"class":57},[51,10007,9786],{"class":248},[51,10009,10010],{"class":65},"[], ",[51,10012,549],{"class":69},[51,10014,7715],{"class":248},[51,10016,282],{"class":65},[51,10018,10019],{"class":53,"line":8394},[51,10020,1955],{"class":65},[51,10022,10023,10025,10027,10029,10031,10033,10035,10037,10039,10041,10043],{"class":53,"line":8399},[51,10024,3588],{"class":69},[51,10026,2060],{"class":65},[51,10028,549],{"class":69},[51,10030,9822],{"class":65},[51,10032,70],{"class":69},[51,10034,4479],{"class":278},[51,10036,9829],{"class":65},[51,10038,1452],{"class":69},[51,10040,9834],{"class":65},[51,10042,2682],{"class":69},[51,10044,282],{"class":65},[51,10046,10047],{"class":53,"line":8405},[51,10048,2420],{"class":65},[51,10050,10051,10054,10056,10059,10061,10064,10066],{"class":53,"line":8417},[51,10052,10053],{"class":65},"        cout ",[51,10055,1586],{"class":69},[51,10057,10058],{"class":61}," \"Teacher: \"",[51,10060,1854],{"class":69},[51,10062,10063],{"class":65}," tArray[i].tName ",[51,10065,1586],{"class":69},[51,10067,9224],{"class":65},[51,10069,10070,10072,10074,10076,10078,10080,10082,10084,10086,10088,10090,10092],{"class":53,"line":8429},[51,10071,3790],{"class":69},[51,10073,2060],{"class":65},[51,10075,549],{"class":69},[51,10077,9884],{"class":65},[51,10079,70],{"class":69},[51,10081,4479],{"class":278},[51,10083,9891],{"class":65},[51,10085,1452],{"class":69},[51,10087,2538],{"class":278},[51,10089,9898],{"class":65},[51,10091,2682],{"class":69},[51,10093,282],{"class":65},[51,10095,10096],{"class":53,"line":8441},[51,10097,2898],{"class":65},[51,10099,10101,10104,10106,10109,10111,10114,10116,10119,10121],{"class":53,"line":10100},47,[51,10102,10103],{"class":65},"            cout ",[51,10105,1586],{"class":69},[51,10107,10108],{"class":61}," \"",[51,10110,1643],{"class":278},[51,10112,10113],{"class":61},"Student: \"",[51,10115,1854],{"class":69},[51,10117,10118],{"class":65}," tArray[i].sArray[j].sName",[51,10120,1586],{"class":69},[51,10122,1608],{"class":65},[51,10124,10126,10128,10130,10132,10134,10137,10139,10142,10144],{"class":53,"line":10125},48,[51,10127,10103],{"class":65},[51,10129,1586],{"class":69},[51,10131,10108],{"class":61},[51,10133,1643],{"class":278},[51,10135,10136],{"class":61},"Age: \"",[51,10138,1854],{"class":69},[51,10140,10141],{"class":65}," tArray[i].sArray[j].age ",[51,10143,1586],{"class":69},[51,10145,9224],{"class":65},[51,10147,10149,10151,10153,10155,10157,10160,10162,10165,10167],{"class":53,"line":10148},49,[51,10150,10103],{"class":65},[51,10152,1586],{"class":69},[51,10154,10108],{"class":61},[51,10156,1643],{"class":278},[51,10158,10159],{"class":61},"Score: \"",[51,10161,1854],{"class":69},[51,10163,10164],{"class":65}," tArray[i].sArray[j].score ",[51,10166,1586],{"class":69},[51,10168,10169],{"class":65}," endl;   \n",[51,10171,10173],{"class":53,"line":10172},50,[51,10174,2917],{"class":65},[51,10176,10178],{"class":53,"line":10177},51,[51,10179,2577],{"class":65},[51,10181,10183],{"class":53,"line":10182},52,[51,10184,1974],{"class":65},[51,10186,10188,10190,10192],{"class":53,"line":10187},53,[51,10189,549],{"class":69},[51,10191,2363],{"class":57},[51,10193,2366],{"class":65},[51,10195,10197],{"class":53,"line":10196},54,[51,10198,1955],{"class":65},[51,10200,10202],{"class":53,"line":10201},55,[51,10203,10204],{"class":601},"    \u002F\u002F随机数种子\n",[51,10206,10208,10210,10212,10214,10216,10218,10220,10222,10224],{"class":53,"line":10207},56,[51,10209,2763],{"class":57},[51,10211,2766],{"class":65},[51,10213,2769],{"class":69},[51,10215,2772],{"class":69},[51,10217,971],{"class":65},[51,10219,2777],{"class":57},[51,10221,546],{"class":65},[51,10223,2782],{"class":278},[51,10225,2785],{"class":65},[51,10227,10229],{"class":53,"line":10228},57,[51,10230,10231],{"class":601},"    \u002F\u002F1.创建3名老师的数组\n",[51,10233,10235,10237,10239,10242,10244],{"class":53,"line":10234},58,[51,10236,8279],{"class":69},[51,10238,9783],{"class":57},[51,10240,10241],{"class":65}," tArray[",[51,10243,614],{"class":278},[51,10245,5075],{"class":65},[51,10247,10249],{"class":53,"line":10248},59,[51,10250,10251],{"class":601},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[51,10253,10255,10257,10260,10262,10265,10268,10270,10272,10275,10277],{"class":53,"line":10254},60,[51,10256,2375],{"class":69},[51,10258,10259],{"class":65}," len ",[51,10261,70],{"class":69},[51,10263,10264],{"class":69}," sizeof",[51,10266,10267],{"class":65},"(tArray) ",[51,10269,1126],{"class":69},[51,10271,10264],{"class":69},[51,10273,10274],{"class":65},"(tArray[",[51,10276,733],{"class":278},[51,10278,4242],{"class":65},[51,10280,10282,10285],{"class":53,"line":10281},61,[51,10283,10284],{"class":57},"    allocateSpace",[51,10286,10287],{"class":65},"(tArray, len);\n",[51,10289,10291],{"class":53,"line":10290},62,[51,10292,10293],{"class":601},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[51,10295,10297,10300],{"class":53,"line":10296},63,[51,10298,10299],{"class":57},"    printInfo",[51,10301,10287],{"class":65},[51,10303,10305],{"class":53,"line":10304},64,[51,10306,206],{"emptyLinePlaceholder":205},[51,10308,10310],{"class":53,"line":10309},65,[51,10311,1974],{"class":65},[19,10313,10314],{"start":185},[22,10315,10316,10319],{},[691,10317,10318],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[10,10321,10322],{},"五名英雄信息如下：",[41,10324,10328],{"className":10325,"code":10326,"language":10327,"meta":46,"style":46},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[48,10329,10330,10348,10365,10382,10399],{"__ignoreMap":46},[51,10331,10332,10334,10337,10339,10341,10343,10346],{"class":53,"line":54},[51,10333,5302],{"class":65},[51,10335,10336],{"class":61},"\"刘备\"",[51,10338,920],{"class":65},[51,10340,1317],{"class":278},[51,10342,920],{"class":65},[51,10344,10345],{"class":61},"\"男\"",[51,10347,5315],{"class":65},[51,10349,10350,10352,10355,10357,10359,10361,10363],{"class":53,"line":185},[51,10351,5302],{"class":65},[51,10353,10354],{"class":61},"\"关羽\"",[51,10356,920],{"class":65},[51,10358,1292],{"class":278},[51,10360,920],{"class":65},[51,10362,10345],{"class":61},[51,10364,5315],{"class":65},[51,10366,10367,10369,10372,10374,10376,10378,10380],{"class":53,"line":202},[51,10368,5302],{"class":65},[51,10370,10371],{"class":61},"\"张飞\"",[51,10373,920],{"class":65},[51,10375,1242],{"class":278},[51,10377,920],{"class":65},[51,10379,10345],{"class":61},[51,10381,5315],{"class":65},[51,10383,10384,10386,10389,10391,10393,10395,10397],{"class":53,"line":209},[51,10385,5302],{"class":65},[51,10387,10388],{"class":61},"\"赵云\"",[51,10390,920],{"class":65},[51,10392,1267],{"class":278},[51,10394,920],{"class":65},[51,10396,10345],{"class":61},[51,10398,5315],{"class":65},[51,10400,10401,10403,10406,10408,10410,10412,10415],{"class":53,"line":223},[51,10402,5302],{"class":65},[51,10404,10405],{"class":61},"\"貂蝉\"",[51,10407,920],{"class":65},[51,10409,1217],{"class":278},[51,10411,920],{"class":65},[51,10413,10414],{"class":61},"\"女\"",[51,10416,5315],{"class":65},[10,10418,10419],{},"代码：",[41,10421,10423],{"className":534,"code":10422,"language":536,"meta":46,"style":46},"#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",[48,10424,10425,10431,10441,10447,10454,10458,10462,10468,10473,10477,10482,10505,10509,10534,10538,10571,10576,10605,10610,10625,10651,10671,10676,10681,10685,10689,10694,10716,10720,10744,10748,10810,10814,10818,10826,10830,10835,10846,10850,10866,10882,10898,10914,10930,10934,10954,10976,10981,10994,11001,11006,11012,11017,11030,11036],{"__ignoreMap":46},[51,10426,10427,10429],{"class":53,"line":54},[51,10428,2340],{"class":69},[51,10430,2343],{"class":61},[51,10432,10433,10435,10437,10439],{"class":53,"line":185},[51,10434,2348],{"class":69},[51,10436,2351],{"class":69},[51,10438,2354],{"class":57},[51,10440,1703],{"class":65},[51,10442,10443,10445],{"class":53,"line":202},[51,10444,2340],{"class":69},[51,10446,8133],{"class":61},[51,10448,10449,10451],{"class":53,"line":209},[51,10450,8143],{"class":69},[51,10452,10453],{"class":57}," Sanguo\n",[51,10455,10456],{"class":53,"line":223},[51,10457,1955],{"class":65},[51,10459,10460],{"class":53,"line":237},[51,10461,8169],{"class":65},[51,10463,10464,10466],{"class":53,"line":242},[51,10465,2375],{"class":69},[51,10467,8181],{"class":65},[51,10469,10470],{"class":53,"line":257},[51,10471,10472],{"class":65},"    string gender;\n",[51,10474,10475],{"class":53,"line":262},[51,10476,4381],{"class":65},[51,10478,10479],{"class":53,"line":285},[51,10480,10481],{"class":601},"\u002F\u002F定义排序函数\n",[51,10483,10484,10486,10488,10490,10493,10495,10497,10499,10501,10503],{"class":53,"line":296},[51,10485,5748],{"class":69},[51,10487,7700],{"class":57},[51,10489,546],{"class":65},[51,10491,10492],{"class":57},"Sanguo",[51,10494,6902],{"class":69},[51,10496,1237],{"class":248},[51,10498,920],{"class":65},[51,10500,549],{"class":69},[51,10502,7715],{"class":248},[51,10504,282],{"class":65},[51,10506,10507],{"class":53,"line":307},[51,10508,1955],{"class":65},[51,10510,10511,10513,10515,10517,10519,10521,10523,10525,10527,10530,10532],{"class":53,"line":324},[51,10512,3588],{"class":69},[51,10514,546],{"class":65},[51,10516,549],{"class":69},[51,10518,3419],{"class":65},[51,10520,70],{"class":69},[51,10522,733],{"class":278},[51,10524,3426],{"class":65},[51,10526,1452],{"class":69},[51,10528,10529],{"class":65},"len;i",[51,10531,2682],{"class":69},[51,10533,282],{"class":65},[51,10535,10536],{"class":53,"line":329},[51,10537,2420],{"class":65},[51,10539,10540,10543,10545,10547,10549,10551,10553,10555,10557,10559,10561,10563,10565,10567,10569],{"class":53,"line":334},[51,10541,10542],{"class":69},"     for",[51,10544,2060],{"class":65},[51,10546,549],{"class":69},[51,10548,3797],{"class":65},[51,10550,70],{"class":69},[51,10552,733],{"class":278},[51,10554,3804],{"class":65},[51,10556,1452],{"class":69},[51,10558,7742],{"class":65},[51,10560,1074],{"class":69},[51,10562,759],{"class":278},[51,10564,1074],{"class":69},[51,10566,3937],{"class":65},[51,10568,2682],{"class":69},[51,10570,282],{"class":65},[51,10572,10573],{"class":53,"line":340},[51,10574,10575],{"class":65},"     {\n",[51,10577,10578,10581,10584,10586,10589,10591,10594,10596,10598,10600,10602],{"class":53,"line":345},[51,10579,10580],{"class":69},"         if",[51,10582,10583],{"class":65}," ((s",[51,10585,1023],{"class":69},[51,10587,10588],{"class":65},"j)->age ",[51,10590,1502],{"class":69},[51,10592,10593],{"class":65}," (s",[51,10595,1023],{"class":69},[51,10597,1009],{"class":65},[51,10599,1023],{"class":69},[51,10601,759],{"class":278},[51,10603,10604],{"class":65},")->age)\n",[51,10606,10607],{"class":53,"line":357},[51,10608,10609],{"class":65},"         {\n",[51,10611,10612,10615,10617,10620,10622],{"class":53,"line":366},[51,10613,10614],{"class":65},"             Sanguo temp",[51,10616,7537],{"class":69},[51,10618,10619],{"class":65},"(s",[51,10621,1023],{"class":69},[51,10623,10624],{"class":65},"j);\n",[51,10626,10627,10630,10632,10634,10637,10639,10641,10643,10645,10647,10649],{"class":53,"line":383},[51,10628,10629],{"class":69},"             *",[51,10631,10619],{"class":65},[51,10633,1023],{"class":69},[51,10635,10636],{"class":65},"j)",[51,10638,7537],{"class":69},[51,10640,10619],{"class":65},[51,10642,1023],{"class":69},[51,10644,1009],{"class":65},[51,10646,1023],{"class":69},[51,10648,759],{"class":278},[51,10650,3107],{"class":65},[51,10652,10653,10655,10657,10659,10661,10663,10665,10667,10669],{"class":53,"line":392},[51,10654,10629],{"class":69},[51,10656,10619],{"class":65},[51,10658,1023],{"class":69},[51,10660,1009],{"class":65},[51,10662,1023],{"class":69},[51,10664,759],{"class":278},[51,10666,971],{"class":65},[51,10668,70],{"class":69},[51,10670,4666],{"class":65},[51,10672,10673],{"class":53,"line":403},[51,10674,10675],{"class":65},"         }\n",[51,10677,10678],{"class":53,"line":409},[51,10679,10680],{"class":65},"     }\n",[51,10682,10683],{"class":53,"line":414},[51,10684,2577],{"class":65},[51,10686,10687],{"class":53,"line":433},[51,10688,1974],{"class":65},[51,10690,10691],{"class":53,"line":439},[51,10692,10693],{"class":601},"\u002F\u002F定义打印函数\n",[51,10695,10696,10698,10700,10702,10704,10706,10708,10710,10712,10714],{"class":53,"line":444},[51,10697,5748],{"class":69},[51,10699,9999],{"class":57},[51,10701,546],{"class":65},[51,10703,10492],{"class":57},[51,10705,6902],{"class":69},[51,10707,1237],{"class":248},[51,10709,920],{"class":65},[51,10711,549],{"class":69},[51,10713,7715],{"class":248},[51,10715,282],{"class":65},[51,10717,10718],{"class":53,"line":453},[51,10719,1955],{"class":65},[51,10721,10722,10724,10726,10728,10730,10732,10734,10736,10738,10740,10742],{"class":53,"line":2174},[51,10723,3588],{"class":69},[51,10725,2060],{"class":65},[51,10727,549],{"class":69},[51,10729,3419],{"class":65},[51,10731,70],{"class":69},[51,10733,733],{"class":278},[51,10735,3426],{"class":65},[51,10737,1452],{"class":69},[51,10739,10529],{"class":65},[51,10741,2682],{"class":69},[51,10743,282],{"class":65},[51,10745,10746],{"class":53,"line":2965},[51,10747,2420],{"class":65},[51,10749,10750,10752,10754,10756,10758,10761,10763,10765,10767,10770,10772,10774,10776,10779,10781,10783,10785,10788,10790,10792,10794,10797,10799,10801,10803,10806,10808],{"class":53,"line":2979},[51,10751,3838],{"class":65},[51,10753,1586],{"class":69},[51,10755,793],{"class":61},[51,10757,1643],{"class":278},[51,10759,10760],{"class":61},"姓名：\"",[51,10762,1586],{"class":69},[51,10764,10619],{"class":65},[51,10766,1023],{"class":69},[51,10768,10769],{"class":65},"i)->name",[51,10771,1586],{"class":69},[51,10773,793],{"class":61},[51,10775,1643],{"class":278},[51,10777,10778],{"class":61},"年龄：\"",[51,10780,1586],{"class":69},[51,10782,10619],{"class":65},[51,10784,1023],{"class":69},[51,10786,10787],{"class":65},"i)->age",[51,10789,1586],{"class":69},[51,10791,793],{"class":61},[51,10793,1643],{"class":278},[51,10795,10796],{"class":61},"性别：\"",[51,10798,1586],{"class":69},[51,10800,10619],{"class":65},[51,10802,1023],{"class":69},[51,10804,10805],{"class":65},"i)->gender",[51,10807,1586],{"class":69},[51,10809,1608],{"class":65},[51,10811,10812],{"class":53,"line":2987},[51,10813,2577],{"class":65},[51,10815,10816],{"class":53,"line":2992},[51,10817,1974],{"class":65},[51,10819,10820,10822,10824],{"class":53,"line":2998},[51,10821,549],{"class":69},[51,10823,2363],{"class":57},[51,10825,2366],{"class":65},[51,10827,10828],{"class":53,"line":3004},[51,10829,1955],{"class":65},[51,10831,10832],{"class":53,"line":3009},[51,10833,10834],{"class":601},"    \u002F\u002F定义结构体变量\n",[51,10836,10837,10840,10842,10844],{"class":53,"line":8332},[51,10838,10839],{"class":65},"    Sanguo s1[",[51,10841,861],{"class":278},[51,10843,1482],{"class":65},[51,10845,5293],{"class":69},[51,10847,10848],{"class":53,"line":8356},[51,10849,2420],{"class":65},[51,10851,10852,10854,10856,10858,10860,10862,10864],{"class":53,"line":8361},[51,10853,5302],{"class":65},[51,10855,10336],{"class":61},[51,10857,920],{"class":65},[51,10859,1317],{"class":278},[51,10861,920],{"class":65},[51,10863,10345],{"class":61},[51,10865,5315],{"class":65},[51,10867,10868,10870,10872,10874,10876,10878,10880],{"class":53,"line":8367},[51,10869,5302],{"class":65},[51,10871,10354],{"class":61},[51,10873,920],{"class":65},[51,10875,1292],{"class":278},[51,10877,920],{"class":65},[51,10879,10345],{"class":61},[51,10881,5315],{"class":65},[51,10883,10884,10886,10888,10890,10892,10894,10896],{"class":53,"line":8394},[51,10885,5302],{"class":65},[51,10887,10371],{"class":61},[51,10889,920],{"class":65},[51,10891,1242],{"class":278},[51,10893,920],{"class":65},[51,10895,10345],{"class":61},[51,10897,5315],{"class":65},[51,10899,10900,10902,10904,10906,10908,10910,10912],{"class":53,"line":8399},[51,10901,5302],{"class":65},[51,10903,10388],{"class":61},[51,10905,920],{"class":65},[51,10907,1267],{"class":278},[51,10909,920],{"class":65},[51,10911,10345],{"class":61},[51,10913,5315],{"class":65},[51,10915,10916,10918,10920,10922,10924,10926,10928],{"class":53,"line":8405},[51,10917,5302],{"class":65},[51,10919,10405],{"class":61},[51,10921,920],{"class":65},[51,10923,1217],{"class":278},[51,10925,920],{"class":65},[51,10927,10414],{"class":61},[51,10929,5315],{"class":65},[51,10931,10932],{"class":53,"line":8417},[51,10933,5336],{"class":65},[51,10935,10936,10938,10940,10942,10945,10947,10950,10952],{"class":53,"line":8429},[51,10937,2375],{"class":69},[51,10939,7715],{"class":65},[51,10941,4589],{"class":69},[51,10943,10944],{"class":65},"(s1)",[51,10946,4595],{"class":69},[51,10948,10949],{"class":65},"(s1[",[51,10951,733],{"class":278},[51,10953,4242],{"class":65},[51,10955,10956,10959,10961,10964,10966,10969,10972,10974],{"class":53,"line":8441},[51,10957,10958],{"class":65},"    Sanguo ",[51,10960,997],{"class":69},[51,10962,10963],{"class":65},"s ",[51,10965,70],{"class":69},[51,10967,10968],{"class":69}," &",[51,10970,10971],{"class":65},"s1[",[51,10973,733],{"class":278},[51,10975,5075],{"class":65},[51,10977,10978],{"class":53,"line":10100},[51,10979,10980],{"class":601},"    \u002F\u002F排序前：\n",[51,10982,10983,10985,10987,10990,10992],{"class":53,"line":10125},[51,10984,6913],{"class":65},[51,10986,1586],{"class":69},[51,10988,10989],{"class":61}," \"排序前：\"",[51,10991,1854],{"class":69},[51,10993,9224],{"class":65},[51,10995,10996,10998],{"class":53,"line":10148},[51,10997,10299],{"class":57},[51,10999,11000],{"class":65},"(s,len);\n",[51,11002,11003],{"class":53,"line":10172},[51,11004,11005],{"class":601},"    \u002F\u002F调用排序函数\n",[51,11007,11008,11010],{"class":53,"line":10177},[51,11009,7982],{"class":57},[51,11011,11000],{"class":65},[51,11013,11014],{"class":53,"line":10182},[51,11015,11016],{"class":601},"    \u002F\u002F排序后\n",[51,11018,11019,11021,11023,11026,11028],{"class":53,"line":10187},[51,11020,6913],{"class":65},[51,11022,1586],{"class":69},[51,11024,11025],{"class":61}," \"排序后：\"",[51,11027,1854],{"class":69},[51,11029,9224],{"class":65},[51,11031,11032,11034],{"class":53,"line":10196},[51,11033,10299],{"class":57},[51,11035,11000],{"class":65},[51,11037,11038],{"class":53,"line":10201},[51,11039,1974],{"class":65},[10,11041,11042,11043,11045],{},"注意：使用指针时直接用传首地址**&s",[51,11044,733],{},"**",[464,11047,11048],{},"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":46,"searchDepth":185,"depth":185,"links":11050},[11051,11052,11053,11054,11055,11056,11057],{"id":8087,"depth":185,"text":8088},{"id":8449,"depth":185,"text":8450},{"id":8718,"depth":185,"text":8719},{"id":8883,"depth":185,"text":8884},{"id":9099,"depth":185,"text":9100},{"id":9420,"depth":185,"text":9421},{"id":9648,"depth":185,"text":9649},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8076,"description":8084},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11064,"title":11065,"body":11066,"description":46,"extension":469,"meta":12409,"navigation":205,"path":12410,"seo":12411,"stem":12412,"__hash__":12413},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11067,"toc":12403},[11068,11071,11075,11081,11095,11100,11103,11107,11114,11120,11123,11130,11136,11141,11144,11147,11150,11714,11717,11731,11735,11740,11756,11896,11899,11905,11908,11913,11921,12029,12032,12037,12040,12045,12048,12054,12057,12400],[14,11069,11065],{"id":11070},"_5程序内存模型",[486,11072,11074],{"id":11073},"_51内存分区模型","5.1内存分区模型",[10,11076,11077,11078],{},"C++程序在执行时，将内存大方向划分为",[691,11079,11080],{},"4个区域",[1549,11082,11083,11086,11089,11092],{},[22,11084,11085],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[22,11087,11088],{},"全局区：存放全局变量和静态变量以及常量",[22,11090,11091],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[22,11093,11094],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[10,11096,11097],{},[691,11098,11099],{},"内存四区意义：",[10,11101,11102],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[513,11104,11106],{"id":11105},"_511程序运行前","5.1.1程序运行前",[10,11108,11109,11110,11113],{},"​\t在程序编译后，生成了exe可执行程序，",[691,11111,11112],{},"未执行该程序前","分为两个区域",[10,11115,11116,11117],{},"​\t",[691,11118,11119],{},"代码区：",[10,11121,11122],{},"​\t\t存放 CPU 执行的机器指令",[10,11124,11125,11126,11129],{},"​\t\t代码区是",[691,11127,11128],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[10,11131,11125,11132,11135],{},[691,11133,11134],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[10,11137,11116,11138],{},[691,11139,11140],{},"全局区：",[10,11142,11143],{},"​\t\t全局变量和静态变量存放在此.",[10,11145,11146],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[10,11148,11149],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[41,11151,11153],{"className":534,"code":11152,"language":536,"meta":46,"style":46},"\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",[48,11154,11155,11160,11173,11186,11190,11195,11210,11225,11229,11238,11242,11247,11260,11273,11277,11282,11308,11334,11338,11365,11391,11395,11400,11416,11431,11435,11461,11487,11491,11516,11541,11545,11571,11597,11601,11617,11632,11658,11684,11688,11698,11702,11710],{"__ignoreMap":46},[51,11156,11157],{"class":53,"line":54},[51,11158,11159],{"class":601},"\u002F\u002F全局变量\n",[51,11161,11162,11164,11167,11169,11171],{"class":53,"line":185},[51,11163,549],{"class":69},[51,11165,11166],{"class":65}," g_a ",[51,11168,70],{"class":69},[51,11170,2428],{"class":278},[51,11172,1703],{"class":65},[51,11174,11175,11177,11180,11182,11184],{"class":53,"line":202},[51,11176,549],{"class":69},[51,11178,11179],{"class":65}," g_b ",[51,11181,70],{"class":69},[51,11183,2428],{"class":278},[51,11185,1703],{"class":65},[51,11187,11188],{"class":53,"line":209},[51,11189,206],{"emptyLinePlaceholder":205},[51,11191,11192],{"class":53,"line":223},[51,11193,11194],{"class":601},"\u002F\u002F全局常量\n",[51,11196,11197,11199,11201,11204,11206,11208],{"class":53,"line":237},[51,11198,7176],{"class":69},[51,11200,2772],{"class":69},[51,11202,11203],{"class":65}," c_g_a ",[51,11205,70],{"class":69},[51,11207,2428],{"class":278},[51,11209,1703],{"class":65},[51,11211,11212,11214,11216,11219,11221,11223],{"class":53,"line":242},[51,11213,7176],{"class":69},[51,11215,2772],{"class":69},[51,11217,11218],{"class":65}," c_g_b ",[51,11220,70],{"class":69},[51,11222,2428],{"class":278},[51,11224,1703],{"class":65},[51,11226,11227],{"class":53,"line":257},[51,11228,206],{"emptyLinePlaceholder":205},[51,11230,11231,11233,11235],{"class":53,"line":262},[51,11232,549],{"class":69},[51,11234,2363],{"class":57},[51,11236,11237],{"class":65},"() {\n",[51,11239,11240],{"class":53,"line":285},[51,11241,206],{"emptyLinePlaceholder":205},[51,11243,11244],{"class":53,"line":296},[51,11245,11246],{"class":601},"    \u002F\u002F局部变量\n",[51,11248,11249,11251,11254,11256,11258],{"class":53,"line":307},[51,11250,2375],{"class":69},[51,11252,11253],{"class":65}," a ",[51,11255,70],{"class":69},[51,11257,2428],{"class":278},[51,11259,1703],{"class":65},[51,11261,11262,11264,11267,11269,11271],{"class":53,"line":324},[51,11263,2375],{"class":69},[51,11265,11266],{"class":65}," b ",[51,11268,70],{"class":69},[51,11270,2428],{"class":278},[51,11272,1703],{"class":65},[51,11274,11275],{"class":53,"line":329},[51,11276,206],{"emptyLinePlaceholder":205},[51,11278,11279],{"class":53,"line":334},[51,11280,11281],{"class":601},"    \u002F\u002F打印地址\n",[51,11283,11284,11286,11288,11291,11293,11295,11297,11299,11301,11304,11306],{"class":53,"line":340},[51,11285,6913],{"class":65},[51,11287,1586],{"class":69},[51,11289,11290],{"class":61}," \"局部变量a地址为： \"",[51,11292,1854],{"class":69},[51,11294,2060],{"class":65},[51,11296,549],{"class":69},[51,11298,971],{"class":65},[51,11300,895],{"class":69},[51,11302,11303],{"class":65},"a ",[51,11305,1586],{"class":69},[51,11307,9224],{"class":65},[51,11309,11310,11312,11314,11317,11319,11321,11323,11325,11327,11330,11332],{"class":53,"line":345},[51,11311,6913],{"class":65},[51,11313,1586],{"class":69},[51,11315,11316],{"class":61}," \"局部变量b地址为： \"",[51,11318,1854],{"class":69},[51,11320,2060],{"class":65},[51,11322,549],{"class":69},[51,11324,971],{"class":65},[51,11326,895],{"class":69},[51,11328,11329],{"class":65},"b ",[51,11331,1586],{"class":69},[51,11333,9224],{"class":65},[51,11335,11336],{"class":53,"line":357},[51,11337,206],{"emptyLinePlaceholder":205},[51,11339,11340,11342,11344,11347,11349,11352,11354,11356,11358,11361,11363],{"class":53,"line":366},[51,11341,6913],{"class":65},[51,11343,1586],{"class":69},[51,11345,11346],{"class":61}," \"全局变量g_a地址为： \"",[51,11348,1854],{"class":69},[51,11350,11351],{"class":65},"  (",[51,11353,549],{"class":69},[51,11355,971],{"class":65},[51,11357,895],{"class":69},[51,11359,11360],{"class":65},"g_a ",[51,11362,1586],{"class":69},[51,11364,9224],{"class":65},[51,11366,11367,11369,11371,11374,11376,11378,11380,11382,11384,11387,11389],{"class":53,"line":383},[51,11368,6913],{"class":65},[51,11370,1586],{"class":69},[51,11372,11373],{"class":61}," \"全局变量g_b地址为： \"",[51,11375,1854],{"class":69},[51,11377,11351],{"class":65},[51,11379,549],{"class":69},[51,11381,971],{"class":65},[51,11383,895],{"class":69},[51,11385,11386],{"class":65},"g_b ",[51,11388,1586],{"class":69},[51,11390,9224],{"class":65},[51,11392,11393],{"class":53,"line":392},[51,11394,206],{"emptyLinePlaceholder":205},[51,11396,11397],{"class":53,"line":403},[51,11398,11399],{"class":601},"    \u002F\u002F静态变量\n",[51,11401,11402,11405,11407,11410,11412,11414],{"class":53,"line":409},[51,11403,11404],{"class":69},"    static",[51,11406,2772],{"class":69},[51,11408,11409],{"class":65}," s_a ",[51,11411,70],{"class":69},[51,11413,2428],{"class":278},[51,11415,1703],{"class":65},[51,11417,11418,11420,11422,11425,11427,11429],{"class":53,"line":414},[51,11419,11404],{"class":69},[51,11421,2772],{"class":69},[51,11423,11424],{"class":65}," s_b ",[51,11426,70],{"class":69},[51,11428,2428],{"class":278},[51,11430,1703],{"class":65},[51,11432,11433],{"class":53,"line":433},[51,11434,206],{"emptyLinePlaceholder":205},[51,11436,11437,11439,11441,11444,11446,11448,11450,11452,11454,11457,11459],{"class":53,"line":439},[51,11438,6913],{"class":65},[51,11440,1586],{"class":69},[51,11442,11443],{"class":61}," \"静态变量s_a地址为： \"",[51,11445,1854],{"class":69},[51,11447,2060],{"class":65},[51,11449,549],{"class":69},[51,11451,971],{"class":65},[51,11453,895],{"class":69},[51,11455,11456],{"class":65},"s_a ",[51,11458,1586],{"class":69},[51,11460,9224],{"class":65},[51,11462,11463,11465,11467,11470,11472,11474,11476,11478,11480,11483,11485],{"class":53,"line":444},[51,11464,6913],{"class":65},[51,11466,1586],{"class":69},[51,11468,11469],{"class":61}," \"静态变量s_b地址为： \"",[51,11471,1854],{"class":69},[51,11473,2060],{"class":65},[51,11475,549],{"class":69},[51,11477,971],{"class":65},[51,11479,895],{"class":69},[51,11481,11482],{"class":65},"s_b ",[51,11484,1586],{"class":69},[51,11486,9224],{"class":65},[51,11488,11489],{"class":53,"line":453},[51,11490,206],{"emptyLinePlaceholder":205},[51,11492,11493,11495,11497,11500,11502,11504,11506,11508,11510,11512,11514],{"class":53,"line":2174},[51,11494,6913],{"class":65},[51,11496,1586],{"class":69},[51,11498,11499],{"class":61}," \"字符串常量地址为： \"",[51,11501,1854],{"class":69},[51,11503,2060],{"class":65},[51,11505,549],{"class":69},[51,11507,971],{"class":65},[51,11509,895],{"class":69},[51,11511,1603],{"class":61},[51,11513,1854],{"class":69},[51,11515,9224],{"class":65},[51,11517,11518,11520,11522,11524,11526,11528,11530,11532,11534,11537,11539],{"class":53,"line":2965},[51,11519,6913],{"class":65},[51,11521,1586],{"class":69},[51,11523,11499],{"class":61},[51,11525,1854],{"class":69},[51,11527,2060],{"class":65},[51,11529,549],{"class":69},[51,11531,971],{"class":65},[51,11533,895],{"class":69},[51,11535,11536],{"class":61},"\"hello world1\"",[51,11538,1854],{"class":69},[51,11540,9224],{"class":65},[51,11542,11543],{"class":53,"line":2979},[51,11544,206],{"emptyLinePlaceholder":205},[51,11546,11547,11549,11551,11554,11556,11558,11560,11562,11564,11567,11569],{"class":53,"line":2987},[51,11548,6913],{"class":65},[51,11550,1586],{"class":69},[51,11552,11553],{"class":61}," \"全局常量c_g_a地址为： \"",[51,11555,1854],{"class":69},[51,11557,2060],{"class":65},[51,11559,549],{"class":69},[51,11561,971],{"class":65},[51,11563,895],{"class":69},[51,11565,11566],{"class":65},"c_g_a ",[51,11568,1586],{"class":69},[51,11570,9224],{"class":65},[51,11572,11573,11575,11577,11580,11582,11584,11586,11588,11590,11593,11595],{"class":53,"line":2992},[51,11574,6913],{"class":65},[51,11576,1586],{"class":69},[51,11578,11579],{"class":61}," \"全局常量c_g_b地址为： \"",[51,11581,1854],{"class":69},[51,11583,2060],{"class":65},[51,11585,549],{"class":69},[51,11587,971],{"class":65},[51,11589,895],{"class":69},[51,11591,11592],{"class":65},"c_g_b ",[51,11594,1586],{"class":69},[51,11596,9224],{"class":65},[51,11598,11599],{"class":53,"line":2998},[51,11600,206],{"emptyLinePlaceholder":205},[51,11602,11603,11606,11608,11611,11613,11615],{"class":53,"line":3004},[51,11604,11605],{"class":69},"    const",[51,11607,2772],{"class":69},[51,11609,11610],{"class":65}," c_l_a ",[51,11612,70],{"class":69},[51,11614,2428],{"class":278},[51,11616,1703],{"class":65},[51,11618,11619,11621,11623,11626,11628,11630],{"class":53,"line":3009},[51,11620,11605],{"class":69},[51,11622,2772],{"class":69},[51,11624,11625],{"class":65}," c_l_b ",[51,11627,70],{"class":69},[51,11629,2428],{"class":278},[51,11631,1703],{"class":65},[51,11633,11634,11636,11638,11641,11643,11645,11647,11649,11651,11654,11656],{"class":53,"line":8332},[51,11635,6913],{"class":65},[51,11637,1586],{"class":69},[51,11639,11640],{"class":61}," \"局部常量c_l_a地址为： \"",[51,11642,1854],{"class":69},[51,11644,2060],{"class":65},[51,11646,549],{"class":69},[51,11648,971],{"class":65},[51,11650,895],{"class":69},[51,11652,11653],{"class":65},"c_l_a ",[51,11655,1586],{"class":69},[51,11657,9224],{"class":65},[51,11659,11660,11662,11664,11667,11669,11671,11673,11675,11677,11680,11682],{"class":53,"line":8356},[51,11661,6913],{"class":65},[51,11663,1586],{"class":69},[51,11665,11666],{"class":61}," \"局部常量c_l_b地址为： \"",[51,11668,1854],{"class":69},[51,11670,2060],{"class":65},[51,11672,549],{"class":69},[51,11674,971],{"class":65},[51,11676,895],{"class":69},[51,11678,11679],{"class":65},"c_l_b ",[51,11681,1586],{"class":69},[51,11683,9224],{"class":65},[51,11685,11686],{"class":53,"line":8361},[51,11687,206],{"emptyLinePlaceholder":205},[51,11689,11690,11692,11694,11696],{"class":53,"line":8367},[51,11691,2693],{"class":57},[51,11693,546],{"class":65},[51,11695,2698],{"class":61},[51,11697,3107],{"class":65},[51,11699,11700],{"class":53,"line":8394},[51,11701,206],{"emptyLinePlaceholder":205},[51,11703,11704,11706,11708],{"class":53,"line":8399},[51,11705,4476],{"class":69},[51,11707,4479],{"class":278},[51,11709,1703],{"class":65},[51,11711,11712],{"class":53,"line":8405},[51,11713,1974],{"class":65},[10,11715,11716],{},"总结：",[1549,11718,11719,11722,11725,11728],{},[22,11720,11721],{},"c++中程序运行前分为全局区和代码区",[22,11723,11724],{},"代码区特点是共享和只读",[22,11726,11727],{},"全局区中存放全局变量、静态变量、常量",[22,11729,11730],{},"常量区中存放const修饰的全局常量和字符串常量",[513,11732,11734],{"id":11733},"_512程序运行后","5.1.2程序运行后",[19,11736,11737],{},[22,11738,11739],{},"栈区：",[1549,11741,11742,11749],{},[22,11743,11744,11745,11748],{},"由编译器自动分配释放, 存放",[691,11746,11747],{},"函数的参数值,局部变量","等",[22,11750,11751,11752,11755],{},"注意事项：",[691,11753,11754],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[41,11757,11759],{"className":534,"code":11758,"language":536,"meta":46,"style":46},"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",[48,11760,11761,11772,11776,11791,11803,11807,11811,11819,11824,11839,11857,11874,11884,11892],{"__ignoreMap":46},[51,11762,11763,11765,11767,11770],{"class":53,"line":54},[51,11764,549],{"class":69},[51,11766,6902],{"class":69},[51,11768,11769],{"class":57}," func",[51,11771,2366],{"class":65},[51,11773,11774],{"class":53,"line":185},[51,11775,1955],{"class":65},[51,11777,11778,11780,11782,11784,11786,11788],{"class":53,"line":202},[51,11779,2375],{"class":69},[51,11781,11253],{"class":65},[51,11783,70],{"class":69},[51,11785,2428],{"class":278},[51,11787,598],{"class":65},[51,11789,11790],{"class":601}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[51,11792,11793,11795,11797,11800],{"class":53,"line":209},[51,11794,4476],{"class":69},[51,11796,10968],{"class":69},[51,11798,11799],{"class":65},"a;",[51,11801,11802],{"class":601}," \u002F\u002F放回局部变量的地址\n",[51,11804,11805],{"class":53,"line":223},[51,11806,1974],{"class":65},[51,11808,11809],{"class":53,"line":237},[51,11810,206],{"emptyLinePlaceholder":205},[51,11812,11813,11815,11817],{"class":53,"line":242},[51,11814,549],{"class":69},[51,11816,2363],{"class":57},[51,11818,11237],{"class":65},[51,11820,11821],{"class":53,"line":257},[51,11822,11823],{"class":601},"    \u002F\u002F接受func的返回值\n",[51,11825,11826,11828,11830,11833,11835,11837],{"class":53,"line":262},[51,11827,2375],{"class":69},[51,11829,6902],{"class":69},[51,11831,11832],{"class":65},"p ",[51,11834,70],{"class":69},[51,11836,11769],{"class":57},[51,11838,6020],{"class":65},[51,11840,11841,11843,11845,11847,11849,11851,11854],{"class":53,"line":285},[51,11842,6913],{"class":65},[51,11844,1586],{"class":69},[51,11846,6902],{"class":69},[51,11848,11832],{"class":65},[51,11850,1586],{"class":69},[51,11852,11853],{"class":65}," endl;",[51,11855,11856],{"class":601}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[51,11858,11859,11861,11863,11865,11867,11869,11871],{"class":53,"line":296},[51,11860,6913],{"class":65},[51,11862,1586],{"class":69},[51,11864,6902],{"class":69},[51,11866,11832],{"class":65},[51,11868,1586],{"class":69},[51,11870,11853],{"class":65},[51,11872,11873],{"class":601}," \u002F\u002F第二次这个数据不再保留\n",[51,11875,11876,11878,11880,11882],{"class":53,"line":307},[51,11877,2693],{"class":57},[51,11879,546],{"class":65},[51,11881,2698],{"class":61},[51,11883,3107],{"class":65},[51,11885,11886,11888,11890],{"class":53,"line":324},[51,11887,4476],{"class":69},[51,11889,4479],{"class":278},[51,11891,1703],{"class":65},[51,11893,11894],{"class":53,"line":329},[51,11895,1974],{"class":65},[10,11897,11898],{},"输出结果：",[10,11900,11901],{},[460,11902],{"alt":11903,"src":11904},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[10,11906,11907],{},"总结：不要返回局部变量的地址",[19,11909,11910],{"start":185},[22,11911,11912],{},"堆区",[1549,11914,11915,11918],{},[22,11916,11917],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[22,11919,11920],{},"在c++中主要利用new在堆区开辟内存",[41,11922,11924],{"className":534,"code":11923,"language":536,"meta":46,"style":46},"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",[48,11925,11926,11941,11945,11950,11971,11978,11982,11990,11994,11999,12013,12025],{"__ignoreMap":46},[51,11927,11928,11930,11933,11936,11938],{"class":53,"line":54},[51,11929,549],{"class":69},[51,11931,11932],{"class":69},"  *",[51,11934,11935],{"class":57},"func",[51,11937,2816],{"class":65},[51,11939,11940],{"class":601},"  \u002F\u002F函数返回指针\n",[51,11942,11943],{"class":53,"line":185},[51,11944,1955],{"class":65},[51,11946,11947],{"class":53,"line":202},[51,11948,11949],{"class":601},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[51,11951,11952,11954,11956,11958,11960,11963,11965,11967,11969],{"class":53,"line":209},[51,11953,4533],{"class":69},[51,11955,6902],{"class":69},[51,11957,10],{"class":65},[51,11959,70],{"class":69},[51,11961,11962],{"class":69}," new",[51,11964,2772],{"class":69},[51,11966,546],{"class":65},[51,11968,988],{"class":278},[51,11970,3107],{"class":65},[51,11972,11973,11975],{"class":53,"line":223},[51,11974,4767],{"class":69},[51,11976,11977],{"class":65}," p;\n",[51,11979,11980],{"class":53,"line":237},[51,11981,1974],{"class":65},[51,11983,11984,11986,11988],{"class":53,"line":242},[51,11985,549],{"class":69},[51,11987,2363],{"class":57},[51,11989,2366],{"class":65},[51,11991,11992],{"class":53,"line":257},[51,11993,1955],{"class":65},[51,11995,11996],{"class":53,"line":262},[51,11997,11998],{"class":601},"    \u002F\u002F在堆区开辟数据\n",[51,12000,12001,12003,12005,12007,12009,12011],{"class":53,"line":285},[51,12002,2375],{"class":69},[51,12004,6902],{"class":69},[51,12006,10],{"class":65},[51,12008,70],{"class":69},[51,12010,11935],{"class":57},[51,12012,6020],{"class":65},[51,12014,12015,12017,12019,12021,12023],{"class":53,"line":296},[51,12016,1960],{"class":65},[51,12018,6803],{"class":69},[51,12020,10],{"class":65},[51,12022,1586],{"class":69},[51,12024,1608],{"class":65},[51,12026,12027],{"class":53,"line":307},[51,12028,1974],{"class":65},[10,12030,12031],{},"图片展示：",[10,12033,12034],{},[460,12035],{"alt":11903,"src":12036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[10,12038,12039],{},"堆区内存由程序员管生死！！！",[19,12041,12042],{"start":202},[22,12043,12044],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[10,12046,12047],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[10,12049,12050,12051],{},"​语法：",[48,12052,12053],{}," new 数据类型",[10,12055,12056],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[41,12058,12060],{"className":534,"code":12059,"language":536,"meta":46,"style":46},"\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",[48,12061,12062,12067,12077,12081,12086,12091,12113,12117,12125,12129,12143,12155,12167,12179,12184,12189,12200,12204,12209,12217,12221,12226,12248,12274,12278,12296,12300,12326,12330,12342,12346,12351,12356,12364,12368,12372,12380,12384,12390,12396],{"__ignoreMap":46},[51,12063,12064],{"class":53,"line":54},[51,12065,12066],{"class":601},"\u002F\u002F1.new的基本语法\n",[51,12068,12069,12071,12073,12075],{"class":53,"line":185},[51,12070,549],{"class":69},[51,12072,6902],{"class":69},[51,12074,11935],{"class":57},[51,12076,2366],{"class":65},[51,12078,12079],{"class":53,"line":202},[51,12080,1955],{"class":65},[51,12082,12083],{"class":53,"line":209},[51,12084,12085],{"class":601},"    \u002F\u002F在堆区创建整型数据\n",[51,12087,12088],{"class":53,"line":223},[51,12089,12090],{"class":601},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[51,12092,12093,12095,12097,12099,12102,12104,12106,12108,12110],{"class":53,"line":237},[51,12094,2375],{"class":69},[51,12096,6902],{"class":69},[51,12098,10],{"class":65},[51,12100,12101],{"class":69},"=new",[51,12103,2772],{"class":69},[51,12105,546],{"class":65},[51,12107,988],{"class":278},[51,12109,6350],{"class":65},[51,12111,12112],{"class":601},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[51,12114,12115],{"class":53,"line":242},[51,12116,1974],{"class":65},[51,12118,12119,12121,12123],{"class":53,"line":257},[51,12120,5748],{"class":69},[51,12122,5972],{"class":57},[51,12124,2366],{"class":65},[51,12126,12127],{"class":53,"line":262},[51,12128,1955],{"class":65},[51,12130,12131,12133,12135,12137,12139,12141],{"class":53,"line":285},[51,12132,2375],{"class":69},[51,12134,6902],{"class":69},[51,12136,10],{"class":65},[51,12138,70],{"class":69},[51,12140,11935],{"class":57},[51,12142,6020],{"class":65},[51,12144,12145,12147,12149,12151,12153],{"class":53,"line":296},[51,12146,1960],{"class":65},[51,12148,6803],{"class":69},[51,12150,10],{"class":65},[51,12152,1586],{"class":69},[51,12154,1608],{"class":65},[51,12156,12157,12159,12161,12163,12165],{"class":53,"line":307},[51,12158,1960],{"class":65},[51,12160,6803],{"class":69},[51,12162,10],{"class":65},[51,12164,1586],{"class":69},[51,12166,1608],{"class":65},[51,12168,12169,12171,12173,12175,12177],{"class":53,"line":324},[51,12170,1960],{"class":65},[51,12172,6803],{"class":69},[51,12174,10],{"class":65},[51,12176,1586],{"class":69},[51,12178,1608],{"class":65},[51,12180,12181],{"class":53,"line":329},[51,12182,12183],{"class":601},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[51,12185,12186],{"class":53,"line":334},[51,12187,12188],{"class":601},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[51,12190,12191,12194,12197],{"class":53,"line":340},[51,12192,12193],{"class":69},"    delete",[51,12195,12196],{"class":65}," p;",[51,12198,12199],{"class":601},"\u002F\u002F删除这块地址\n",[51,12201,12202],{"class":53,"line":345},[51,12203,1974],{"class":65},[51,12205,12206],{"class":53,"line":357},[51,12207,12208],{"class":601},"\u002F\u002F2.在堆区利用new开辟数组\n",[51,12210,12211,12213,12215],{"class":53,"line":366},[51,12212,5748],{"class":69},[51,12214,6041],{"class":57},[51,12216,2366],{"class":65},[51,12218,12219],{"class":53,"line":383},[51,12220,1955],{"class":65},[51,12222,12223],{"class":53,"line":392},[51,12224,12225],{"class":601},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[51,12227,12228,12230,12232,12234,12236,12238,12240,12242,12245],{"class":53,"line":403},[51,12229,2375],{"class":69},[51,12231,6902],{"class":69},[51,12233,4266],{"class":65},[51,12235,12101],{"class":69},[51,12237,2772],{"class":69},[51,12239,1432],{"class":65},[51,12241,988],{"class":278},[51,12243,12244],{"class":65},"];",[51,12246,12247],{"class":601},"\u002F\u002F10代表数组有10个元素\n",[51,12249,12250,12252,12254,12256,12258,12260,12262,12264,12266,12268,12270,12272],{"class":53,"line":409},[51,12251,3588],{"class":69},[51,12253,2060],{"class":65},[51,12255,549],{"class":69},[51,12257,3419],{"class":65},[51,12259,70],{"class":69},[51,12261,733],{"class":278},[51,12263,3426],{"class":65},[51,12265,1452],{"class":69},[51,12267,988],{"class":278},[51,12269,3426],{"class":65},[51,12271,2682],{"class":69},[51,12273,282],{"class":65},[51,12275,12276],{"class":53,"line":414},[51,12277,2420],{"class":65},[51,12279,12280,12283,12285,12287,12289,12291,12293],{"class":53,"line":433},[51,12281,12282],{"class":65},"        arr[i]",[51,12284,70],{"class":69},[51,12286,983],{"class":65},[51,12288,1023],{"class":69},[51,12290,853],{"class":278},[51,12292,598],{"class":65},[51,12294,12295],{"class":601},"\u002F\u002F给10个元素赋值100～109\n",[51,12297,12298],{"class":53,"line":439},[51,12299,2577],{"class":65},[51,12301,12302,12304,12306,12308,12310,12312,12314,12316,12318,12320,12322,12324],{"class":53,"line":444},[51,12303,3588],{"class":69},[51,12305,2060],{"class":65},[51,12307,549],{"class":69},[51,12309,3419],{"class":65},[51,12311,70],{"class":69},[51,12313,733],{"class":278},[51,12315,3426],{"class":65},[51,12317,1452],{"class":69},[51,12319,988],{"class":278},[51,12321,3426],{"class":65},[51,12323,2682],{"class":69},[51,12325,282],{"class":65},[51,12327,12328],{"class":53,"line":453},[51,12329,2420],{"class":65},[51,12331,12332,12334,12336,12338,12340],{"class":53,"line":2174},[51,12333,3838],{"class":65},[51,12335,1586],{"class":69},[51,12337,4740],{"class":65},[51,12339,1586],{"class":69},[51,12341,1608],{"class":65},[51,12343,12344],{"class":53,"line":2965},[51,12345,2577],{"class":65},[51,12347,12348],{"class":53,"line":2979},[51,12349,12350],{"class":601},"    \u002F\u002F释放堆区数组\n",[51,12352,12353],{"class":53,"line":2987},[51,12354,12355],{"class":601},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[51,12357,12358,12361],{"class":53,"line":2992},[51,12359,12360],{"class":69},"    delete[]",[51,12362,12363],{"class":65}," arr;\n",[51,12365,12366],{"class":53,"line":2998},[51,12367,1974],{"class":65},[51,12369,12370],{"class":53,"line":3004},[51,12371,206],{"emptyLinePlaceholder":205},[51,12373,12374,12376,12378],{"class":53,"line":3009},[51,12375,549],{"class":69},[51,12377,2363],{"class":57},[51,12379,2366],{"class":65},[51,12381,12382],{"class":53,"line":8332},[51,12383,1955],{"class":65},[51,12385,12386,12388],{"class":53,"line":8356},[51,12387,6017],{"class":57},[51,12389,6020],{"class":65},[51,12391,12392,12394],{"class":53,"line":8361},[51,12393,6086],{"class":57},[51,12395,6020],{"class":65},[51,12397,12398],{"class":53,"line":8367},[51,12399,1974],{"class":65},[464,12401,12402],{},"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":46,"searchDepth":185,"depth":185,"links":12404},[12405],{"id":11073,"depth":185,"text":11074,"children":12406},[12407,12408],{"id":11105,"depth":202,"text":11106},{"id":11733,"depth":202,"text":11734},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11065,"description":46},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12415,"title":12416,"body":12417,"description":46,"extension":469,"meta":13898,"navigation":205,"path":13899,"seo":13900,"stem":13901,"__hash__":13902},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12418,"toc":13890},[12419,12422,12426,12429,12432,12601,12605,12610,12627,12632,12784,12788,12791,12794,13188,13192,13195,13200,13203,13515,13519,13525,13685,13687,13695,13699,13702,13709,13887],[14,12420,12416],{"id":12421},"_6引用",[486,12423,12425],{"id":12424},"_61引用基本用法","6.1引用基本用法",[10,12427,12428],{},"引用的本质：给变量起别名",[10,12430,12431],{},"语法：数据类型 &别名=原名",[41,12433,12435],{"className":534,"code":12434,"language":536,"meta":46,"style":46},"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",[48,12436,12437,12445,12449,12461,12473,12477,12496,12515,12519,12530,12534,12553,12571,12575,12585,12589,12597],{"__ignoreMap":46},[51,12438,12439,12441,12443],{"class":53,"line":54},[51,12440,549],{"class":69},[51,12442,2363],{"class":57},[51,12444,11237],{"class":65},[51,12446,12447],{"class":53,"line":185},[51,12448,206],{"emptyLinePlaceholder":205},[51,12450,12451,12453,12455,12457,12459],{"class":53,"line":202},[51,12452,2375],{"class":69},[51,12454,11253],{"class":65},[51,12456,70],{"class":69},[51,12458,2428],{"class":278},[51,12460,1703],{"class":65},[51,12462,12463,12465,12467,12469,12471],{"class":53,"line":209},[51,12464,2375],{"class":69},[51,12466,10968],{"class":69},[51,12468,11329],{"class":65},[51,12470,70],{"class":69},[51,12472,1842],{"class":65},[51,12474,12475],{"class":53,"line":223},[51,12476,206],{"emptyLinePlaceholder":205},[51,12478,12479,12481,12483,12486,12488,12490,12492,12494],{"class":53,"line":237},[51,12480,6913],{"class":65},[51,12482,1586],{"class":69},[51,12484,12485],{"class":61}," \"a = \"",[51,12487,1854],{"class":69},[51,12489,11253],{"class":65},[51,12491,1586],{"class":69},[51,12493,11853],{"class":65},[51,12495,7652],{"class":601},[51,12497,12498,12500,12502,12505,12507,12509,12511,12513],{"class":53,"line":242},[51,12499,6913],{"class":65},[51,12501,1586],{"class":69},[51,12503,12504],{"class":61}," \"b = \"",[51,12506,1854],{"class":69},[51,12508,11266],{"class":65},[51,12510,1586],{"class":69},[51,12512,11853],{"class":65},[51,12514,7652],{"class":601},[51,12516,12517],{"class":53,"line":257},[51,12518,206],{"emptyLinePlaceholder":205},[51,12520,12521,12524,12526,12528],{"class":53,"line":262},[51,12522,12523],{"class":65},"    b ",[51,12525,70],{"class":69},[51,12527,6138],{"class":278},[51,12529,1703],{"class":65},[51,12531,12532],{"class":53,"line":285},[51,12533,206],{"emptyLinePlaceholder":205},[51,12535,12536,12538,12540,12542,12544,12546,12548,12550],{"class":53,"line":296},[51,12537,6913],{"class":65},[51,12539,1586],{"class":69},[51,12541,12485],{"class":61},[51,12543,1854],{"class":69},[51,12545,11253],{"class":65},[51,12547,1586],{"class":69},[51,12549,11853],{"class":65},[51,12551,12552],{"class":601},"\u002F\u002F100\n",[51,12554,12555,12557,12559,12561,12563,12565,12567,12569],{"class":53,"line":307},[51,12556,6913],{"class":65},[51,12558,1586],{"class":69},[51,12560,12504],{"class":61},[51,12562,1854],{"class":69},[51,12564,11266],{"class":65},[51,12566,1586],{"class":69},[51,12568,11853],{"class":65},[51,12570,12552],{"class":601},[51,12572,12573],{"class":53,"line":324},[51,12574,206],{"emptyLinePlaceholder":205},[51,12576,12577,12579,12581,12583],{"class":53,"line":329},[51,12578,2693],{"class":57},[51,12580,546],{"class":65},[51,12582,2698],{"class":61},[51,12584,3107],{"class":65},[51,12586,12587],{"class":53,"line":334},[51,12588,206],{"emptyLinePlaceholder":205},[51,12590,12591,12593,12595],{"class":53,"line":340},[51,12592,4476],{"class":69},[51,12594,4479],{"class":278},[51,12596,1703],{"class":65},[51,12598,12599],{"class":53,"line":345},[51,12600,1974],{"class":65},[486,12602,12604],{"id":12603},"_62引用的注意事项","6.2引用的注意事项",[19,12606,12607],{},[22,12608,12609],{},"引用必须要初始化",[41,12611,12613],{"className":534,"code":12612,"language":536,"meta":46,"style":46},"int &b;\u002F\u002F非常错误！\n",[48,12614,12615],{"__ignoreMap":46},[51,12616,12617,12619,12621,12624],{"class":53,"line":54},[51,12618,549],{"class":69},[51,12620,10968],{"class":69},[51,12622,12623],{"class":65},"b;",[51,12625,12626],{"class":601},"\u002F\u002F非常错误！\n",[19,12628,12629],{"start":185},[22,12630,12631],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[41,12633,12635],{"className":534,"code":12634,"language":536,"meta":46,"style":46},"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",[48,12636,12637,12645,12657,12669,12677,12693,12706,12724,12742,12762,12772,12780],{"__ignoreMap":46},[51,12638,12639,12641,12643],{"class":53,"line":54},[51,12640,549],{"class":69},[51,12642,2363],{"class":57},[51,12644,11237],{"class":65},[51,12646,12647,12649,12651,12653,12655],{"class":53,"line":185},[51,12648,2375],{"class":69},[51,12650,11253],{"class":65},[51,12652,70],{"class":69},[51,12654,2428],{"class":278},[51,12656,1703],{"class":65},[51,12658,12659,12661,12663,12665,12667],{"class":53,"line":202},[51,12660,2375],{"class":69},[51,12662,11266],{"class":65},[51,12664,70],{"class":69},[51,12666,9334],{"class":278},[51,12668,1703],{"class":65},[51,12670,12671,12674],{"class":53,"line":209},[51,12672,12673],{"class":601},"    \u002F\u002Fint &c;",[51,12675,12676],{"class":601}," \u002F\u002F错误，引用必须初始化\n",[51,12678,12679,12681,12683,12685,12687,12690],{"class":53,"line":223},[51,12680,2375],{"class":69},[51,12682,10968],{"class":69},[51,12684,3334],{"class":65},[51,12686,70],{"class":69},[51,12688,12689],{"class":65}," a;",[51,12691,12692],{"class":601}," \u002F\u002F一旦初始化后，就不可以更改\n",[51,12694,12695,12698,12700,12703],{"class":53,"line":237},[51,12696,12697],{"class":65},"    c ",[51,12699,70],{"class":69},[51,12701,12702],{"class":65}," b;",[51,12704,12705],{"class":601}," \u002F\u002F这是赋值操作，不是更改引用\n",[51,12707,12708,12710,12712,12714,12716,12718,12720,12722],{"class":53,"line":242},[51,12709,6913],{"class":65},[51,12711,1586],{"class":69},[51,12713,12485],{"class":61},[51,12715,1854],{"class":69},[51,12717,11253],{"class":65},[51,12719,1586],{"class":69},[51,12721,11853],{"class":65},[51,12723,7637],{"class":601},[51,12725,12726,12728,12730,12732,12734,12736,12738,12740],{"class":53,"line":257},[51,12727,6913],{"class":65},[51,12729,1586],{"class":69},[51,12731,12504],{"class":61},[51,12733,1854],{"class":69},[51,12735,11266],{"class":65},[51,12737,1586],{"class":69},[51,12739,11853],{"class":65},[51,12741,7637],{"class":601},[51,12743,12744,12746,12748,12751,12753,12756,12758,12760],{"class":53,"line":262},[51,12745,6913],{"class":65},[51,12747,1586],{"class":69},[51,12749,12750],{"class":61}," \"c = \"",[51,12752,1854],{"class":69},[51,12754,12755],{"class":65}," c ",[51,12757,1586],{"class":69},[51,12759,11853],{"class":65},[51,12761,7637],{"class":601},[51,12763,12764,12766,12768,12770],{"class":53,"line":285},[51,12765,2693],{"class":57},[51,12767,546],{"class":65},[51,12769,2698],{"class":61},[51,12771,3107],{"class":65},[51,12773,12774,12776,12778],{"class":53,"line":296},[51,12775,4476],{"class":69},[51,12777,4479],{"class":278},[51,12779,1703],{"class":65},[51,12781,12782],{"class":53,"line":307},[51,12783,1974],{"class":65},[486,12785,12787],{"id":12786},"_63引用做函数参数","6.3引用做函数参数",[10,12789,12790],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[10,12792,12793],{},"优点：可以简化指针修改实参",[41,12795,12797],{"className":534,"code":12796,"language":536,"meta":46,"style":46},"\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",[48,12798,12799,12804,12827,12838,12848,12857,12861,12865,12870,12892,12904,12916,12926,12930,12934,12939,12961,12971,12979,12987,12991,12995,13003,13007,13019,13031,13035,13046,13072,13076,13096,13120,13124,13134,13158,13162,13172,13176,13184],{"__ignoreMap":46},[51,12800,12801],{"class":53,"line":54},[51,12802,12803],{"class":601},"\u002F\u002F1. 值传递\n",[51,12805,12806,12808,12811,12813,12815,12817,12820,12822,12824],{"class":53,"line":185},[51,12807,5748],{"class":69},[51,12809,12810],{"class":57}," mySwap01",[51,12812,546],{"class":65},[51,12814,549],{"class":69},[51,12816,1808],{"class":248},[51,12818,12819],{"class":65},", ",[51,12821,549],{"class":69},[51,12823,3221],{"class":248},[51,12825,12826],{"class":65},") {\n",[51,12828,12829,12831,12834,12836],{"class":53,"line":202},[51,12830,2375],{"class":69},[51,12832,12833],{"class":65}," temp ",[51,12835,70],{"class":69},[51,12837,1842],{"class":65},[51,12839,12840,12843,12845],{"class":53,"line":209},[51,12841,12842],{"class":65},"    a ",[51,12844,70],{"class":69},[51,12846,12847],{"class":65}," b;\n",[51,12849,12850,12852,12854],{"class":53,"line":223},[51,12851,12523],{"class":65},[51,12853,70],{"class":69},[51,12855,12856],{"class":65}," temp;\n",[51,12858,12859],{"class":53,"line":237},[51,12860,1974],{"class":65},[51,12862,12863],{"class":53,"line":242},[51,12864,206],{"emptyLinePlaceholder":205},[51,12866,12867],{"class":53,"line":257},[51,12868,12869],{"class":601},"\u002F\u002F2. 地址传递\n",[51,12871,12872,12874,12877,12879,12882,12884,12886,12888,12890],{"class":53,"line":262},[51,12873,5748],{"class":69},[51,12875,12876],{"class":57}," mySwap02",[51,12878,546],{"class":65},[51,12880,12881],{"class":69},"int*",[51,12883,1808],{"class":248},[51,12885,12819],{"class":65},[51,12887,12881],{"class":69},[51,12889,3221],{"class":248},[51,12891,12826],{"class":65},[51,12893,12894,12896,12898,12900,12902],{"class":53,"line":285},[51,12895,2375],{"class":69},[51,12897,12833],{"class":65},[51,12899,70],{"class":69},[51,12901,6902],{"class":69},[51,12903,6581],{"class":65},[51,12905,12906,12908,12910,12912,12914],{"class":53,"line":296},[51,12907,6787],{"class":69},[51,12909,11303],{"class":65},[51,12911,70],{"class":69},[51,12913,6902],{"class":69},[51,12915,6453],{"class":65},[51,12917,12918,12920,12922,12924],{"class":53,"line":307},[51,12919,6787],{"class":69},[51,12921,11329],{"class":65},[51,12923,70],{"class":69},[51,12925,12856],{"class":65},[51,12927,12928],{"class":53,"line":324},[51,12929,1974],{"class":65},[51,12931,12932],{"class":53,"line":329},[51,12933,206],{"emptyLinePlaceholder":205},[51,12935,12936],{"class":53,"line":334},[51,12937,12938],{"class":601},"\u002F\u002F3. 引用传递\n",[51,12940,12941,12943,12946,12948,12951,12953,12955,12957,12959],{"class":53,"line":340},[51,12942,5748],{"class":69},[51,12944,12945],{"class":57}," mySwap03",[51,12947,546],{"class":65},[51,12949,12950],{"class":69},"int&",[51,12952,1808],{"class":248},[51,12954,12819],{"class":65},[51,12956,12950],{"class":69},[51,12958,3221],{"class":248},[51,12960,12826],{"class":65},[51,12962,12963,12965,12967,12969],{"class":53,"line":345},[51,12964,2375],{"class":69},[51,12966,12833],{"class":65},[51,12968,70],{"class":69},[51,12970,1842],{"class":65},[51,12972,12973,12975,12977],{"class":53,"line":357},[51,12974,12842],{"class":65},[51,12976,70],{"class":69},[51,12978,12847],{"class":65},[51,12980,12981,12983,12985],{"class":53,"line":366},[51,12982,12523],{"class":65},[51,12984,70],{"class":69},[51,12986,12856],{"class":65},[51,12988,12989],{"class":53,"line":383},[51,12990,1974],{"class":65},[51,12992,12993],{"class":53,"line":392},[51,12994,206],{"emptyLinePlaceholder":205},[51,12996,12997,12999,13001],{"class":53,"line":403},[51,12998,549],{"class":69},[51,13000,2363],{"class":57},[51,13002,11237],{"class":65},[51,13004,13005],{"class":53,"line":409},[51,13006,206],{"emptyLinePlaceholder":205},[51,13008,13009,13011,13013,13015,13017],{"class":53,"line":414},[51,13010,2375],{"class":69},[51,13012,11253],{"class":65},[51,13014,70],{"class":69},[51,13016,2428],{"class":278},[51,13018,1703],{"class":65},[51,13020,13021,13023,13025,13027,13029],{"class":53,"line":433},[51,13022,2375],{"class":69},[51,13024,11266],{"class":65},[51,13026,70],{"class":69},[51,13028,9334],{"class":278},[51,13030,1703],{"class":65},[51,13032,13033],{"class":53,"line":439},[51,13034,206],{"emptyLinePlaceholder":205},[51,13036,13037,13040,13043],{"class":53,"line":444},[51,13038,13039],{"class":57},"    mySwap01",[51,13041,13042],{"class":65},"(a, b);",[51,13044,13045],{"class":601},"\u002F\u002F值传递，形参不会修饰实参\n",[51,13047,13048,13050,13052,13055,13057,13059,13061,13064,13066,13068,13070],{"class":53,"line":453},[51,13049,6913],{"class":65},[51,13051,1586],{"class":69},[51,13053,13054],{"class":61}," \"a:\"",[51,13056,1854],{"class":69},[51,13058,11253],{"class":65},[51,13060,1586],{"class":69},[51,13062,13063],{"class":61}," \" b:\"",[51,13065,1854],{"class":69},[51,13067,11266],{"class":65},[51,13069,1586],{"class":69},[51,13071,9224],{"class":65},[51,13073,13074],{"class":53,"line":2174},[51,13075,206],{"emptyLinePlaceholder":205},[51,13077,13078,13081,13083,13085,13088,13090,13093],{"class":53,"line":2965},[51,13079,13080],{"class":57},"    mySwap02",[51,13082,546],{"class":65},[51,13084,895],{"class":69},[51,13086,13087],{"class":65},"a, ",[51,13089,895],{"class":69},[51,13091,13092],{"class":65},"b);",[51,13094,13095],{"class":601},"\u002F\u002F地址传递，形参会修饰实参\n",[51,13097,13098,13100,13102,13104,13106,13108,13110,13112,13114,13116,13118],{"class":53,"line":2979},[51,13099,6913],{"class":65},[51,13101,1586],{"class":69},[51,13103,13054],{"class":61},[51,13105,1854],{"class":69},[51,13107,11253],{"class":65},[51,13109,1586],{"class":69},[51,13111,13063],{"class":61},[51,13113,1854],{"class":69},[51,13115,11266],{"class":65},[51,13117,1586],{"class":69},[51,13119,9224],{"class":65},[51,13121,13122],{"class":53,"line":2987},[51,13123,206],{"emptyLinePlaceholder":205},[51,13125,13126,13129,13131],{"class":53,"line":2992},[51,13127,13128],{"class":57},"    mySwap03",[51,13130,13042],{"class":65},[51,13132,13133],{"class":601},"\u002F\u002F引用传递，形参会修饰实参\n",[51,13135,13136,13138,13140,13142,13144,13146,13148,13150,13152,13154,13156],{"class":53,"line":2998},[51,13137,6913],{"class":65},[51,13139,1586],{"class":69},[51,13141,13054],{"class":61},[51,13143,1854],{"class":69},[51,13145,11253],{"class":65},[51,13147,1586],{"class":69},[51,13149,13063],{"class":61},[51,13151,1854],{"class":69},[51,13153,11266],{"class":65},[51,13155,1586],{"class":69},[51,13157,9224],{"class":65},[51,13159,13160],{"class":53,"line":3004},[51,13161,206],{"emptyLinePlaceholder":205},[51,13163,13164,13166,13168,13170],{"class":53,"line":3009},[51,13165,2693],{"class":57},[51,13167,546],{"class":65},[51,13169,2698],{"class":61},[51,13171,3107],{"class":65},[51,13173,13174],{"class":53,"line":8332},[51,13175,206],{"emptyLinePlaceholder":205},[51,13177,13178,13180,13182],{"class":53,"line":8356},[51,13179,4476],{"class":69},[51,13181,4479],{"class":278},[51,13183,1703],{"class":65},[51,13185,13186],{"class":53,"line":8361},[51,13187,1974],{"class":65},[486,13189,13191],{"id":13190},"_64引用做函数的返回值","6.4引用做函数的返回值",[10,13193,13194],{},"作用：引用是可以作为函数的返回值存在的",[10,13196,9409,13197],{},[691,13198,13199],{},"不要返回局部变量引用",[10,13201,13202],{},"用法：函数调用作为左值",[41,13204,13206],{"className":10325,"code":13205,"language":10327,"meta":46,"style":46},"\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",[48,13207,13208,13213,13221,13236,13242,13246,13250,13255,13263,13280,13286,13290,13294,13302,13306,13311,13325,13345,13364,13368,13373,13386,13406,13424,13428,13444,13448,13467,13485,13489,13499,13503,13511],{"__ignoreMap":46},[51,13209,13210],{"class":53,"line":54},[51,13211,13212],{"class":601},"\u002F\u002F返回局部变量引用\n",[51,13214,13215,13217,13219],{"class":53,"line":185},[51,13216,12950],{"class":69},[51,13218,5972],{"class":57},[51,13220,11237],{"class":65},[51,13222,13223,13225,13227,13229,13231,13233],{"class":53,"line":202},[51,13224,2375],{"class":69},[51,13226,11253],{"class":65},[51,13228,70],{"class":69},[51,13230,2428],{"class":278},[51,13232,598],{"class":65},[51,13234,13235],{"class":601}," \u002F\u002F局部变量\n",[51,13237,13238,13240],{"class":53,"line":209},[51,13239,4476],{"class":69},[51,13241,1842],{"class":65},[51,13243,13244],{"class":53,"line":223},[51,13245,1974],{"class":65},[51,13247,13248],{"class":53,"line":237},[51,13249,206],{"emptyLinePlaceholder":205},[51,13251,13252],{"class":53,"line":242},[51,13253,13254],{"class":601},"\u002F\u002F返回静态变量引用\n",[51,13256,13257,13259,13261],{"class":53,"line":257},[51,13258,12950],{"class":69},[51,13260,6041],{"class":57},[51,13262,11237],{"class":65},[51,13264,13265,13267,13269,13271,13273,13275,13277],{"class":53,"line":262},[51,13266,11404],{"class":69},[51,13268,2772],{"class":69},[51,13270,11253],{"class":65},[51,13272,70],{"class":69},[51,13274,9334],{"class":278},[51,13276,598],{"class":65},[51,13278,13279],{"class":601},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[51,13281,13282,13284],{"class":53,"line":285},[51,13283,4476],{"class":69},[51,13285,1842],{"class":65},[51,13287,13288],{"class":53,"line":296},[51,13289,1974],{"class":65},[51,13291,13292],{"class":53,"line":307},[51,13293,206],{"emptyLinePlaceholder":205},[51,13295,13296,13298,13300],{"class":53,"line":324},[51,13297,549],{"class":69},[51,13299,2363],{"class":57},[51,13301,11237],{"class":65},[51,13303,13304],{"class":53,"line":329},[51,13305,206],{"emptyLinePlaceholder":205},[51,13307,13308],{"class":53,"line":334},[51,13309,13310],{"class":601},"    \u002F\u002F不能返回局部变量的引用\n",[51,13312,13313,13316,13319,13321,13323],{"class":53,"line":340},[51,13314,13315],{"class":69},"    int&",[51,13317,13318],{"class":65}," ref ",[51,13320,70],{"class":69},[51,13322,5972],{"class":57},[51,13324,6020],{"class":65},[51,13326,13327,13329,13331,13334,13336,13338,13340,13342],{"class":53,"line":345},[51,13328,6913],{"class":65},[51,13330,1586],{"class":69},[51,13332,13333],{"class":61}," \"ref = \"",[51,13335,1854],{"class":69},[51,13337,13318],{"class":65},[51,13339,1586],{"class":69},[51,13341,11853],{"class":65},[51,13343,13344],{"class":601},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[51,13346,13347,13349,13351,13353,13355,13357,13359,13361],{"class":53,"line":357},[51,13348,6913],{"class":65},[51,13350,1586],{"class":69},[51,13352,13333],{"class":61},[51,13354,1854],{"class":69},[51,13356,13318],{"class":65},[51,13358,1586],{"class":69},[51,13360,11853],{"class":65},[51,13362,13363],{"class":601},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[51,13365,13366],{"class":53,"line":366},[51,13367,206],{"emptyLinePlaceholder":205},[51,13369,13370],{"class":53,"line":383},[51,13371,13372],{"class":601},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[51,13374,13375,13377,13380,13382,13384],{"class":53,"line":392},[51,13376,13315],{"class":69},[51,13378,13379],{"class":65}," ref2 ",[51,13381,70],{"class":69},[51,13383,6041],{"class":57},[51,13385,6020],{"class":65},[51,13387,13388,13390,13392,13395,13397,13399,13401,13403],{"class":53,"line":403},[51,13389,6913],{"class":65},[51,13391,1586],{"class":69},[51,13393,13394],{"class":61}," \"ref2 = \"",[51,13396,1854],{"class":69},[51,13398,13379],{"class":65},[51,13400,1586],{"class":69},[51,13402,11853],{"class":65},[51,13404,13405],{"class":601}," \u002F\u002F20\n",[51,13407,13408,13410,13412,13414,13416,13418,13420,13422],{"class":53,"line":409},[51,13409,6913],{"class":65},[51,13411,1586],{"class":69},[51,13413,13394],{"class":61},[51,13415,1854],{"class":69},[51,13417,13379],{"class":65},[51,13419,1586],{"class":69},[51,13421,11853],{"class":65},[51,13423,13405],{"class":601},[51,13425,13426],{"class":53,"line":414},[51,13427,206],{"emptyLinePlaceholder":205},[51,13429,13430,13432,13435,13437,13439,13441],{"class":53,"line":433},[51,13431,6086],{"class":57},[51,13433,13434],{"class":65},"() ",[51,13436,70],{"class":69},[51,13438,3386],{"class":278},[51,13440,598],{"class":65},[51,13442,13443],{"class":601},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[51,13445,13446],{"class":53,"line":439},[51,13447,206],{"emptyLinePlaceholder":205},[51,13449,13450,13452,13454,13456,13458,13460,13462,13464],{"class":53,"line":444},[51,13451,6913],{"class":65},[51,13453,1586],{"class":69},[51,13455,13394],{"class":61},[51,13457,1854],{"class":69},[51,13459,13379],{"class":65},[51,13461,1586],{"class":69},[51,13463,11853],{"class":65},[51,13465,13466],{"class":601}," \u002F\u002F1000\n",[51,13468,13469,13471,13473,13475,13477,13479,13481,13483],{"class":53,"line":453},[51,13470,6913],{"class":65},[51,13472,1586],{"class":69},[51,13474,13394],{"class":61},[51,13476,1854],{"class":69},[51,13478,13379],{"class":65},[51,13480,1586],{"class":69},[51,13482,11853],{"class":65},[51,13484,13466],{"class":601},[51,13486,13487],{"class":53,"line":2174},[51,13488,206],{"emptyLinePlaceholder":205},[51,13490,13491,13493,13495,13497],{"class":53,"line":2965},[51,13492,2693],{"class":57},[51,13494,546],{"class":65},[51,13496,2698],{"class":61},[51,13498,3107],{"class":65},[51,13500,13501],{"class":53,"line":2979},[51,13502,206],{"emptyLinePlaceholder":205},[51,13504,13505,13507,13509],{"class":53,"line":2987},[51,13506,4476],{"class":69},[51,13508,4479],{"class":278},[51,13510,1703],{"class":65},[51,13512,13513],{"class":53,"line":2992},[51,13514,1974],{"class":65},[486,13516,13518],{"id":13517},"_65引用的本质","6.5引用的本质",[10,13520,13521,13522],{},"本质：",[691,13523,13524],{},"引用的本质在c++内部实现是一个指针常量.",[41,13526,13528],{"className":534,"code":13527,"language":536,"meta":46,"style":46},"\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",[48,13529,13530,13535,13551,13565,13569,13578,13590,13595,13600,13611,13624,13628,13644,13661,13665,13673,13681],{"__ignoreMap":46},[51,13531,13532],{"class":53,"line":54},[51,13533,13534],{"class":601},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[51,13536,13537,13539,13541,13543,13545,13548],{"class":53,"line":185},[51,13538,5748],{"class":69},[51,13540,11769],{"class":57},[51,13542,546],{"class":65},[51,13544,12950],{"class":69},[51,13546,13547],{"class":248}," ref",[51,13549,13550],{"class":65},"){\n",[51,13552,13553,13556,13558,13560,13562],{"class":53,"line":202},[51,13554,13555],{"class":65},"    ref ",[51,13557,70],{"class":69},[51,13559,6138],{"class":278},[51,13561,598],{"class":65},[51,13563,13564],{"class":601}," \u002F\u002F ref是引用，转换为*ref = 100\n",[51,13566,13567],{"class":53,"line":209},[51,13568,1974],{"class":65},[51,13570,13571,13573,13575],{"class":53,"line":223},[51,13572,549],{"class":69},[51,13574,2363],{"class":57},[51,13576,13577],{"class":65},"(){\n",[51,13579,13580,13582,13584,13586,13588],{"class":53,"line":237},[51,13581,2375],{"class":69},[51,13583,11253],{"class":65},[51,13585,70],{"class":69},[51,13587,2428],{"class":278},[51,13589,1703],{"class":65},[51,13591,13592],{"class":53,"line":242},[51,13593,13594],{"class":65},"    \n",[51,13596,13597],{"class":53,"line":257},[51,13598,13599],{"class":601},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[51,13601,13602,13604,13606,13608],{"class":53,"line":262},[51,13603,13315],{"class":69},[51,13605,13318],{"class":65},[51,13607,70],{"class":69},[51,13609,13610],{"class":65}," a; \n",[51,13612,13613,13615,13617,13619,13621],{"class":53,"line":285},[51,13614,13555],{"class":65},[51,13616,70],{"class":69},[51,13618,9334],{"class":278},[51,13620,598],{"class":65},[51,13622,13623],{"class":601}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[51,13625,13626],{"class":53,"line":296},[51,13627,13594],{"class":65},[51,13629,13630,13632,13634,13636,13638,13640,13642],{"class":53,"line":307},[51,13631,6913],{"class":65},[51,13633,1586],{"class":69},[51,13635,13054],{"class":61},[51,13637,1854],{"class":69},[51,13639,11253],{"class":65},[51,13641,1586],{"class":69},[51,13643,9224],{"class":65},[51,13645,13646,13648,13650,13653,13655,13657,13659],{"class":53,"line":324},[51,13647,6913],{"class":65},[51,13649,1586],{"class":69},[51,13651,13652],{"class":61}," \"ref:\"",[51,13654,1854],{"class":69},[51,13656,13318],{"class":65},[51,13658,1586],{"class":69},[51,13660,9224],{"class":65},[51,13662,13663],{"class":53,"line":329},[51,13664,13594],{"class":65},[51,13666,13667,13670],{"class":53,"line":334},[51,13668,13669],{"class":57},"    func",[51,13671,13672],{"class":65},"(a);\n",[51,13674,13675,13677,13679],{"class":53,"line":340},[51,13676,4476],{"class":69},[51,13678,4479],{"class":278},[51,13680,1703],{"class":65},[51,13682,13683],{"class":53,"line":345},[51,13684,1974],{"class":65},[10,13686,11716],{},[19,13688,13689,13692],{},[22,13690,13691],{},"引用的本质，就是一个指针常量",[22,13693,13694],{},"引用一旦初始化，就不可以发生改变",[486,13696,13698],{"id":13697},"_66常量引用","6.6常量引用",[10,13700,13701],{},"作用：常量引用主要用来修饰形参",[10,13703,13704,13705,13708],{},"在函数形参列表中，可以加",[691,13706,13707],{},"const修饰形参","，防止形参改变实参",[41,13710,13712],{"className":534,"code":13711,"language":536,"meta":46,"style":46},"\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",[48,13713,13714,13719,13724,13743,13748,13761,13765,13769,13777,13781,13786,13791,13805,13809,13817,13829,13833,13838,13850,13857,13861,13871,13875,13883],{"__ignoreMap":46},[51,13715,13716],{"class":53,"line":54},[51,13717,13718],{"class":601},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[51,13720,13721],{"class":53,"line":185},[51,13722,13723],{"class":601},"\u002F\u002F加上const就不能修改实参的\n",[51,13725,13726,13728,13731,13733,13735,13738,13741],{"class":53,"line":202},[51,13727,5748],{"class":69},[51,13729,13730],{"class":57}," showValue",[51,13732,546],{"class":65},[51,13734,7176],{"class":69},[51,13736,13737],{"class":69}," int&",[51,13739,13740],{"class":248}," v",[51,13742,12826],{"class":65},[51,13744,13745],{"class":53,"line":209},[51,13746,13747],{"class":601},"    \u002F\u002Fv += 100;\n",[51,13749,13750,13752,13754,13757,13759],{"class":53,"line":223},[51,13751,6913],{"class":65},[51,13753,1586],{"class":69},[51,13755,13756],{"class":65}," v ",[51,13758,1586],{"class":69},[51,13760,9224],{"class":65},[51,13762,13763],{"class":53,"line":237},[51,13764,1974],{"class":65},[51,13766,13767],{"class":53,"line":242},[51,13768,206],{"emptyLinePlaceholder":205},[51,13770,13771,13773,13775],{"class":53,"line":257},[51,13772,549],{"class":69},[51,13774,2363],{"class":57},[51,13776,11237],{"class":65},[51,13778,13779],{"class":53,"line":262},[51,13780,206],{"emptyLinePlaceholder":205},[51,13782,13783],{"class":53,"line":285},[51,13784,13785],{"class":601},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[51,13787,13788],{"class":53,"line":296},[51,13789,13790],{"class":601},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[51,13792,13793,13795,13797,13799,13801,13803],{"class":53,"line":307},[51,13794,11605],{"class":69},[51,13796,13737],{"class":69},[51,13798,13318],{"class":65},[51,13800,70],{"class":69},[51,13802,2428],{"class":278},[51,13804,1703],{"class":65},[51,13806,13807],{"class":53,"line":324},[51,13808,206],{"emptyLinePlaceholder":205},[51,13810,13811,13814],{"class":53,"line":329},[51,13812,13813],{"class":601},"    \u002F\u002Fref = 100;",[51,13815,13816],{"class":601},"  \u002F\u002F加入const后不可以修改变量\n",[51,13818,13819,13821,13823,13825,13827],{"class":53,"line":334},[51,13820,6913],{"class":65},[51,13822,1586],{"class":69},[51,13824,13318],{"class":65},[51,13826,1586],{"class":69},[51,13828,9224],{"class":65},[51,13830,13831],{"class":53,"line":340},[51,13832,206],{"emptyLinePlaceholder":205},[51,13834,13835],{"class":53,"line":345},[51,13836,13837],{"class":601},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[51,13839,13840,13842,13844,13846,13848],{"class":53,"line":357},[51,13841,2375],{"class":69},[51,13843,11253],{"class":65},[51,13845,70],{"class":69},[51,13847,2428],{"class":278},[51,13849,1703],{"class":65},[51,13851,13852,13855],{"class":53,"line":366},[51,13853,13854],{"class":57},"    showValue",[51,13856,13672],{"class":65},[51,13858,13859],{"class":53,"line":383},[51,13860,206],{"emptyLinePlaceholder":205},[51,13862,13863,13865,13867,13869],{"class":53,"line":392},[51,13864,2693],{"class":57},[51,13866,546],{"class":65},[51,13868,2698],{"class":61},[51,13870,3107],{"class":65},[51,13872,13873],{"class":53,"line":403},[51,13874,206],{"emptyLinePlaceholder":205},[51,13876,13877,13879,13881],{"class":53,"line":409},[51,13878,4476],{"class":69},[51,13880,4479],{"class":278},[51,13882,1703],{"class":65},[51,13884,13885],{"class":53,"line":414},[51,13886,1974],{"class":65},[464,13888,13889],{},"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":46,"searchDepth":185,"depth":185,"links":13891},[13892,13893,13894,13895,13896,13897],{"id":12424,"depth":185,"text":12425},{"id":12603,"depth":185,"text":12604},{"id":12786,"depth":185,"text":12787},{"id":13190,"depth":185,"text":13191},{"id":13517,"depth":185,"text":13518},{"id":13697,"depth":185,"text":13698},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12416,"description":46},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13904,"title":13905,"body":13906,"description":46,"extension":469,"meta":14987,"navigation":205,"path":14988,"seo":14989,"stem":14990,"__hash__":14991},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13907,"toc":14979},[13908,13911,13915,13918,13923,14155,14157,14168,14172,14175,14183,14287,14290,14294,14297,14301,14304,14309,14331,14337,14664,14667,14671,14679,14976],[14,13909,13905],{"id":13910},"_7函数高级部分",[486,13912,13914],{"id":13913},"_71函数默认参数","7.1函数默认参数",[10,13916,13917],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[10,13919,5566,13920],{},[48,13921,13922],{}," 返回值类型  函数名 （参数= 默认值）{}",[41,13924,13926],{"className":534,"code":13925,"language":536,"meta":46,"style":46},"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",[48,13927,13928,13963,13978,13982,13986,13991,13996,14025,14045,14055,14059,14063,14071,14075,14103,14125,14129,14139,14143,14151],{"__ignoreMap":46},[51,13929,13930,13932,13934,13936,13938,13940,13942,13944,13946,13949,13951,13953,13955,13957,13959,13961],{"class":53,"line":54},[51,13931,549],{"class":69},[51,13933,11769],{"class":57},[51,13935,546],{"class":65},[51,13937,549],{"class":69},[51,13939,1808],{"class":248},[51,13941,12819],{"class":65},[51,13943,549],{"class":69},[51,13945,3221],{"class":248},[51,13947,13948],{"class":69}," =",[51,13950,2428],{"class":278},[51,13952,12819],{"class":65},[51,13954,549],{"class":69},[51,13956,3237],{"class":248},[51,13958,13948],{"class":69},[51,13960,2428],{"class":278},[51,13962,12826],{"class":65},[51,13964,13965,13967,13969,13971,13973,13975],{"class":53,"line":185},[51,13966,4476],{"class":69},[51,13968,11253],{"class":65},[51,13970,1023],{"class":69},[51,13972,11266],{"class":65},[51,13974,1023],{"class":69},[51,13976,13977],{"class":65}," c;\n",[51,13979,13980],{"class":53,"line":202},[51,13981,1974],{"class":65},[51,13983,13984],{"class":53,"line":209},[51,13985,206],{"emptyLinePlaceholder":205},[51,13987,13988],{"class":53,"line":223},[51,13989,13990],{"class":601},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[51,13992,13993],{"class":53,"line":237},[51,13994,13995],{"class":601},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[51,13997,13998,14000,14003,14005,14007,14009,14011,14013,14015,14017,14019,14021,14023],{"class":53,"line":242},[51,13999,549],{"class":69},[51,14001,14002],{"class":57}," func2",[51,14004,546],{"class":65},[51,14006,549],{"class":69},[51,14008,1808],{"class":248},[51,14010,13948],{"class":69},[51,14012,2428],{"class":278},[51,14014,12819],{"class":65},[51,14016,549],{"class":69},[51,14018,3221],{"class":248},[51,14020,13948],{"class":69},[51,14022,2428],{"class":278},[51,14024,3107],{"class":65},[51,14026,14027,14029,14031,14033,14035,14037,14039,14041,14043],{"class":53,"line":257},[51,14028,549],{"class":69},[51,14030,14002],{"class":57},[51,14032,546],{"class":65},[51,14034,549],{"class":69},[51,14036,1808],{"class":248},[51,14038,12819],{"class":65},[51,14040,549],{"class":69},[51,14042,3221],{"class":248},[51,14044,12826],{"class":65},[51,14046,14047,14049,14051,14053],{"class":53,"line":262},[51,14048,4476],{"class":69},[51,14050,11253],{"class":65},[51,14052,1023],{"class":69},[51,14054,12847],{"class":65},[51,14056,14057],{"class":53,"line":285},[51,14058,1974],{"class":65},[51,14060,14061],{"class":53,"line":296},[51,14062,206],{"emptyLinePlaceholder":205},[51,14064,14065,14067,14069],{"class":53,"line":307},[51,14066,549],{"class":69},[51,14068,2363],{"class":57},[51,14070,11237],{"class":65},[51,14072,14073],{"class":53,"line":324},[51,14074,206],{"emptyLinePlaceholder":205},[51,14076,14077,14079,14081,14084,14086,14088,14090,14092,14094,14096,14099,14101],{"class":53,"line":329},[51,14078,6913],{"class":65},[51,14080,1586],{"class":69},[51,14082,14083],{"class":61}," \"ret = \"",[51,14085,1854],{"class":69},[51,14087,11769],{"class":57},[51,14089,546],{"class":65},[51,14091,1242],{"class":278},[51,14093,12819],{"class":65},[51,14095,1242],{"class":278},[51,14097,14098],{"class":65},") ",[51,14100,1586],{"class":69},[51,14102,9224],{"class":65},[51,14104,14105,14107,14109,14111,14113,14115,14117,14119,14121,14123],{"class":53,"line":334},[51,14106,6913],{"class":65},[51,14108,1586],{"class":69},[51,14110,14083],{"class":61},[51,14112,1854],{"class":69},[51,14114,11769],{"class":57},[51,14116,546],{"class":65},[51,14118,853],{"class":278},[51,14120,14098],{"class":65},[51,14122,1586],{"class":69},[51,14124,9224],{"class":65},[51,14126,14127],{"class":53,"line":340},[51,14128,206],{"emptyLinePlaceholder":205},[51,14130,14131,14133,14135,14137],{"class":53,"line":345},[51,14132,2693],{"class":57},[51,14134,546],{"class":65},[51,14136,2698],{"class":61},[51,14138,3107],{"class":65},[51,14140,14141],{"class":53,"line":357},[51,14142,206],{"emptyLinePlaceholder":205},[51,14144,14145,14147,14149],{"class":53,"line":366},[51,14146,4476],{"class":69},[51,14148,4479],{"class":278},[51,14150,1703],{"class":65},[51,14152,14153],{"class":53,"line":383},[51,14154,1974],{"class":65},[10,14156,11716],{},[19,14158,14159,14162,14165],{},[22,14160,14161],{},"我传就用我；没传就用你",[22,14163,14164],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[22,14166,14167],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[486,14169,14171],{"id":14170},"_72函数的占位参数","7.2函数的占位参数",[10,14173,14174],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[10,14176,14177,14179,14180],{},[691,14178,5566],{}," ",[48,14181,14182],{},"返回值类型 函数名 (数据类型){}",[41,14184,14186],{"className":534,"code":14185,"language":536,"meta":46,"style":46},"\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",[48,14187,14188,14193,14211,14224,14228,14236,14240,14257,14261,14271,14275,14283],{"__ignoreMap":46},[51,14189,14190],{"class":53,"line":54},[51,14191,14192],{"class":601},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[51,14194,14195,14197,14199,14201,14203,14205,14207,14209],{"class":53,"line":185},[51,14196,5748],{"class":69},[51,14198,11769],{"class":57},[51,14200,546],{"class":65},[51,14202,549],{"class":69},[51,14204,1808],{"class":248},[51,14206,12819],{"class":65},[51,14208,549],{"class":69},[51,14210,12826],{"class":65},[51,14212,14213,14215,14217,14220,14222],{"class":53,"line":202},[51,14214,6913],{"class":65},[51,14216,1586],{"class":69},[51,14218,14219],{"class":61}," \"this is func\"",[51,14221,1854],{"class":69},[51,14223,9224],{"class":65},[51,14225,14226],{"class":53,"line":209},[51,14227,1974],{"class":65},[51,14229,14230,14232,14234],{"class":53,"line":223},[51,14231,549],{"class":69},[51,14233,2363],{"class":57},[51,14235,11237],{"class":65},[51,14237,14238],{"class":53,"line":237},[51,14239,206],{"emptyLinePlaceholder":205},[51,14241,14242,14244,14246,14248,14250,14252,14254],{"class":53,"line":242},[51,14243,13669],{"class":57},[51,14245,546],{"class":65},[51,14247,988],{"class":278},[51,14249,920],{"class":65},[51,14251,988],{"class":278},[51,14253,6350],{"class":65},[51,14255,14256],{"class":601}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[51,14258,14259],{"class":53,"line":257},[51,14260,206],{"emptyLinePlaceholder":205},[51,14262,14263,14265,14267,14269],{"class":53,"line":262},[51,14264,2693],{"class":57},[51,14266,546],{"class":65},[51,14268,2698],{"class":61},[51,14270,3107],{"class":65},[51,14272,14273],{"class":53,"line":285},[51,14274,206],{"emptyLinePlaceholder":205},[51,14276,14277,14279,14281],{"class":53,"line":296},[51,14278,4476],{"class":69},[51,14280,4479],{"class":278},[51,14282,1703],{"class":65},[51,14284,14285],{"class":53,"line":307},[51,14286,1974],{"class":65},[10,14288,14289],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[486,14291,14293],{"id":14292},"_73函数重载","7.3函数重载",[10,14295,14296],{},"意思是函数名是可以相同的",[513,14298,14300],{"id":14299},"_731基本语法","7.3.1基本语法",[10,14302,14303],{},"作用：函数名可以相同，提高复用性",[10,14305,14306],{},[691,14307,14308],{},"函数重载满足条件：",[1549,14310,14311,14314,14317],{},[22,14312,14313],{},"同一个作用域下",[22,14315,14316],{},"函数名称相同",[22,14318,14319,14320,14323,14324,14327,14328],{},"函数参数",[691,14321,14322],{},"类型不同","  或者 ",[691,14325,14326],{},"个数不同"," 或者 ",[691,14329,14330],{},"顺序不同",[10,14332,14333,14336],{},[691,14334,14335],{},"注意:","  函数的返回值不可以作为函数重载的条件",[41,14338,14340],{"className":10325,"code":14339,"language":10327,"meta":46,"style":46},"\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",[48,14341,14342,14347,14355,14359,14372,14376,14390,14394,14407,14411,14426,14430,14443,14447,14468,14472,14485,14489,14509,14513,14526,14530,14534,14539,14544,14549,14554,14559,14563,14567,14575,14579,14585,14595,14605,14619,14634,14638,14648,14652,14660],{"__ignoreMap":46},[51,14343,14344],{"class":53,"line":54},[51,14345,14346],{"class":601},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[51,14348,14349,14351,14353],{"class":53,"line":185},[51,14350,5748],{"class":69},[51,14352,11769],{"class":57},[51,14354,2366],{"class":65},[51,14356,14357],{"class":53,"line":202},[51,14358,1955],{"class":65},[51,14360,14361,14363,14365,14368,14370],{"class":53,"line":209},[51,14362,6913],{"class":65},[51,14364,1586],{"class":69},[51,14366,14367],{"class":61}," \"func 的调用！\"",[51,14369,1854],{"class":69},[51,14371,9224],{"class":65},[51,14373,14374],{"class":53,"line":223},[51,14375,1974],{"class":65},[51,14377,14378,14380,14382,14384,14386,14388],{"class":53,"line":237},[51,14379,5748],{"class":69},[51,14381,11769],{"class":57},[51,14383,546],{"class":65},[51,14385,549],{"class":69},[51,14387,1808],{"class":248},[51,14389,282],{"class":65},[51,14391,14392],{"class":53,"line":242},[51,14393,1955],{"class":65},[51,14395,14396,14398,14400,14403,14405],{"class":53,"line":257},[51,14397,6913],{"class":65},[51,14399,1586],{"class":69},[51,14401,14402],{"class":61}," \"func (int a) 的调用！\"",[51,14404,1854],{"class":69},[51,14406,9224],{"class":65},[51,14408,14409],{"class":53,"line":262},[51,14410,1974],{"class":65},[51,14412,14413,14415,14417,14419,14422,14424],{"class":53,"line":285},[51,14414,5748],{"class":69},[51,14416,11769],{"class":57},[51,14418,546],{"class":65},[51,14420,14421],{"class":69},"double",[51,14423,1808],{"class":248},[51,14425,282],{"class":65},[51,14427,14428],{"class":53,"line":296},[51,14429,1955],{"class":65},[51,14431,14432,14434,14436,14439,14441],{"class":53,"line":307},[51,14433,6913],{"class":65},[51,14435,1586],{"class":69},[51,14437,14438],{"class":61}," \"func (double a)的调用！\"",[51,14440,1854],{"class":69},[51,14442,9224],{"class":65},[51,14444,14445],{"class":53,"line":324},[51,14446,1974],{"class":65},[51,14448,14449,14451,14453,14455,14457,14459,14462,14464,14466],{"class":53,"line":329},[51,14450,5748],{"class":69},[51,14452,11769],{"class":57},[51,14454,546],{"class":65},[51,14456,549],{"class":69},[51,14458,1808],{"class":248},[51,14460,14461],{"class":65}," ,",[51,14463,14421],{"class":69},[51,14465,3221],{"class":248},[51,14467,282],{"class":65},[51,14469,14470],{"class":53,"line":334},[51,14471,1955],{"class":65},[51,14473,14474,14476,14478,14481,14483],{"class":53,"line":340},[51,14475,6913],{"class":65},[51,14477,1586],{"class":69},[51,14479,14480],{"class":61}," \"func (int a ,double b) 的调用！\"",[51,14482,1854],{"class":69},[51,14484,9224],{"class":65},[51,14486,14487],{"class":53,"line":345},[51,14488,1974],{"class":65},[51,14490,14491,14493,14495,14497,14499,14501,14503,14505,14507],{"class":53,"line":357},[51,14492,5748],{"class":69},[51,14494,11769],{"class":57},[51,14496,546],{"class":65},[51,14498,14421],{"class":69},[51,14500,1808],{"class":248},[51,14502,14461],{"class":65},[51,14504,549],{"class":69},[51,14506,3221],{"class":248},[51,14508,282],{"class":65},[51,14510,14511],{"class":53,"line":366},[51,14512,1955],{"class":65},[51,14514,14515,14517,14519,14522,14524],{"class":53,"line":383},[51,14516,6913],{"class":65},[51,14518,1586],{"class":69},[51,14520,14521],{"class":61}," \"func (double a ,int b)的调用！\"",[51,14523,1854],{"class":69},[51,14525,9224],{"class":65},[51,14527,14528],{"class":53,"line":392},[51,14529,1974],{"class":65},[51,14531,14532],{"class":53,"line":403},[51,14533,206],{"emptyLinePlaceholder":205},[51,14535,14536],{"class":53,"line":409},[51,14537,14538],{"class":601},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[51,14540,14541],{"class":53,"line":414},[51,14542,14543],{"class":601},"\u002F\u002Fint func(double a, int b)\n",[51,14545,14546],{"class":53,"line":433},[51,14547,14548],{"class":601},"\u002F\u002F{\n",[51,14550,14551],{"class":53,"line":439},[51,14552,14553],{"class":601},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[51,14555,14556],{"class":53,"line":444},[51,14557,14558],{"class":601},"\u002F\u002F}\n",[51,14560,14561],{"class":53,"line":453},[51,14562,206],{"emptyLinePlaceholder":205},[51,14564,14565],{"class":53,"line":2174},[51,14566,206],{"emptyLinePlaceholder":205},[51,14568,14569,14571,14573],{"class":53,"line":2965},[51,14570,549],{"class":69},[51,14572,2363],{"class":57},[51,14574,11237],{"class":65},[51,14576,14577],{"class":53,"line":2979},[51,14578,206],{"emptyLinePlaceholder":205},[51,14580,14581,14583],{"class":53,"line":2987},[51,14582,13669],{"class":57},[51,14584,6020],{"class":65},[51,14586,14587,14589,14591,14593],{"class":53,"line":2992},[51,14588,13669],{"class":57},[51,14590,546],{"class":65},[51,14592,988],{"class":278},[51,14594,3107],{"class":65},[51,14596,14597,14599,14601,14603],{"class":53,"line":2998},[51,14598,13669],{"class":57},[51,14600,546],{"class":65},[51,14602,592],{"class":278},[51,14604,3107],{"class":65},[51,14606,14607,14609,14611,14613,14615,14617],{"class":53,"line":3004},[51,14608,13669],{"class":57},[51,14610,546],{"class":65},[51,14612,988],{"class":278},[51,14614,920],{"class":65},[51,14616,592],{"class":278},[51,14618,3107],{"class":65},[51,14620,14621,14623,14625,14627,14630,14632],{"class":53,"line":3009},[51,14622,13669],{"class":57},[51,14624,546],{"class":65},[51,14626,592],{"class":278},[51,14628,14629],{"class":65}," , ",[51,14631,988],{"class":278},[51,14633,3107],{"class":65},[51,14635,14636],{"class":53,"line":8332},[51,14637,13594],{"class":65},[51,14639,14640,14642,14644,14646],{"class":53,"line":8356},[51,14641,2693],{"class":57},[51,14643,546],{"class":65},[51,14645,2698],{"class":61},[51,14647,3107],{"class":65},[51,14649,14650],{"class":53,"line":8361},[51,14651,206],{"emptyLinePlaceholder":205},[51,14653,14654,14656,14658],{"class":53,"line":8367},[51,14655,4476],{"class":69},[51,14657,4479],{"class":278},[51,14659,1703],{"class":65},[51,14661,14662],{"class":53,"line":8394},[51,14663,1974],{"class":65},[10,14665,14666],{},"重点：函数返回值不可以作为函数重载条件！",[513,14668,14670],{"id":14669},"_732注意事项","7.3.2注意事项",[1549,14672,14673,14676],{},[22,14674,14675],{},"引用作为重载条件!!!",[22,14677,14678],{},"函数重载碰到函数默认参数",[41,14680,14682],{"className":534,"code":14681,"language":536,"meta":46,"style":46},"\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",[48,14683,14684,14689,14694,14698,14714,14718,14731,14735,14739,14757,14761,14774,14778,14782,14786,14791,14795,14819,14823,14836,14840,14844,14858,14862,14875,14879,14883,14891,14895,14907,14917,14930,14934,14938,14946,14950,14960,14964,14972],{"__ignoreMap":46},[51,14685,14686],{"class":53,"line":54},[51,14687,14688],{"class":601},"\u002F\u002F函数重载注意事项\n",[51,14690,14691],{"class":53,"line":185},[51,14692,14693],{"class":601},"\u002F\u002F1、引用作为重载条件\n",[51,14695,14696],{"class":53,"line":202},[51,14697,206],{"emptyLinePlaceholder":205},[51,14699,14700,14702,14704,14706,14708,14710,14712],{"class":53,"line":209},[51,14701,5748],{"class":69},[51,14703,11769],{"class":57},[51,14705,546],{"class":65},[51,14707,549],{"class":69},[51,14709,10968],{"class":69},[51,14711,780],{"class":248},[51,14713,282],{"class":65},[51,14715,14716],{"class":53,"line":223},[51,14717,1955],{"class":65},[51,14719,14720,14722,14724,14727,14729],{"class":53,"line":237},[51,14721,6913],{"class":65},[51,14723,1586],{"class":69},[51,14725,14726],{"class":61}," \"func (int &a) 调用 \"",[51,14728,1854],{"class":69},[51,14730,9224],{"class":65},[51,14732,14733],{"class":53,"line":242},[51,14734,1974],{"class":65},[51,14736,14737],{"class":53,"line":257},[51,14738,206],{"emptyLinePlaceholder":205},[51,14740,14741,14743,14745,14747,14749,14751,14753,14755],{"class":53,"line":262},[51,14742,5748],{"class":69},[51,14744,11769],{"class":57},[51,14746,546],{"class":65},[51,14748,7176],{"class":69},[51,14750,2772],{"class":69},[51,14752,10968],{"class":69},[51,14754,780],{"class":248},[51,14756,282],{"class":65},[51,14758,14759],{"class":53,"line":285},[51,14760,1955],{"class":65},[51,14762,14763,14765,14767,14770,14772],{"class":53,"line":296},[51,14764,6913],{"class":65},[51,14766,1586],{"class":69},[51,14768,14769],{"class":61}," \"func (const int &a) 调用 \"",[51,14771,1854],{"class":69},[51,14773,9224],{"class":65},[51,14775,14776],{"class":53,"line":307},[51,14777,1974],{"class":65},[51,14779,14780],{"class":53,"line":324},[51,14781,206],{"emptyLinePlaceholder":205},[51,14783,14784],{"class":53,"line":329},[51,14785,206],{"emptyLinePlaceholder":205},[51,14787,14788],{"class":53,"line":334},[51,14789,14790],{"class":601},"\u002F\u002F2、函数重载碰到函数默认参数\n",[51,14792,14793],{"class":53,"line":340},[51,14794,206],{"emptyLinePlaceholder":205},[51,14796,14797,14799,14801,14803,14805,14807,14809,14811,14813,14815,14817],{"class":53,"line":345},[51,14798,5748],{"class":69},[51,14800,14002],{"class":57},[51,14802,546],{"class":65},[51,14804,549],{"class":69},[51,14806,1808],{"class":248},[51,14808,12819],{"class":65},[51,14810,549],{"class":69},[51,14812,3221],{"class":248},[51,14814,13948],{"class":69},[51,14816,2428],{"class":278},[51,14818,282],{"class":65},[51,14820,14821],{"class":53,"line":357},[51,14822,1955],{"class":65},[51,14824,14825,14827,14829,14832,14834],{"class":53,"line":366},[51,14826,6913],{"class":65},[51,14828,1586],{"class":69},[51,14830,14831],{"class":61}," \"func2(int a, int b = 10) 调用\"",[51,14833,1854],{"class":69},[51,14835,9224],{"class":65},[51,14837,14838],{"class":53,"line":383},[51,14839,1974],{"class":65},[51,14841,14842],{"class":53,"line":392},[51,14843,206],{"emptyLinePlaceholder":205},[51,14845,14846,14848,14850,14852,14854,14856],{"class":53,"line":403},[51,14847,5748],{"class":69},[51,14849,14002],{"class":57},[51,14851,546],{"class":65},[51,14853,549],{"class":69},[51,14855,1808],{"class":248},[51,14857,282],{"class":65},[51,14859,14860],{"class":53,"line":409},[51,14861,1955],{"class":65},[51,14863,14864,14866,14868,14871,14873],{"class":53,"line":414},[51,14865,6913],{"class":65},[51,14867,1586],{"class":69},[51,14869,14870],{"class":61}," \"func2(int a) 调用\"",[51,14872,1854],{"class":69},[51,14874,9224],{"class":65},[51,14876,14877],{"class":53,"line":433},[51,14878,1974],{"class":65},[51,14880,14881],{"class":53,"line":439},[51,14882,206],{"emptyLinePlaceholder":205},[51,14884,14885,14887,14889],{"class":53,"line":444},[51,14886,549],{"class":69},[51,14888,2363],{"class":57},[51,14890,11237],{"class":65},[51,14892,14893],{"class":53,"line":453},[51,14894,13594],{"class":65},[51,14896,14897,14899,14901,14903,14905],{"class":53,"line":2174},[51,14898,2375],{"class":69},[51,14900,11253],{"class":65},[51,14902,70],{"class":69},[51,14904,2428],{"class":278},[51,14906,1703],{"class":65},[51,14908,14909,14911,14914],{"class":53,"line":2965},[51,14910,13669],{"class":57},[51,14912,14913],{"class":65},"(a);",[51,14915,14916],{"class":601}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[51,14918,14919,14921,14923,14925,14927],{"class":53,"line":2979},[51,14920,13669],{"class":57},[51,14922,546],{"class":65},[51,14924,988],{"class":278},[51,14926,6350],{"class":65},[51,14928,14929],{"class":601},"\u002F\u002F调用有const   10是个常量\n",[51,14931,14932],{"class":53,"line":2987},[51,14933,206],{"emptyLinePlaceholder":205},[51,14935,14936],{"class":53,"line":2992},[51,14937,206],{"emptyLinePlaceholder":205},[51,14939,14940,14943],{"class":53,"line":2998},[51,14941,14942],{"class":601},"    \u002F\u002Ffunc2(10);",[51,14944,14945],{"class":601}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[51,14947,14948],{"class":53,"line":3004},[51,14949,206],{"emptyLinePlaceholder":205},[51,14951,14952,14954,14956,14958],{"class":53,"line":3009},[51,14953,2693],{"class":57},[51,14955,546],{"class":65},[51,14957,2698],{"class":61},[51,14959,3107],{"class":65},[51,14961,14962],{"class":53,"line":8332},[51,14963,206],{"emptyLinePlaceholder":205},[51,14965,14966,14968,14970],{"class":53,"line":8356},[51,14967,4476],{"class":69},[51,14969,4479],{"class":278},[51,14971,1703],{"class":65},[51,14973,14974],{"class":53,"line":8361},[51,14975,1974],{"class":65},[464,14977,14978],{},"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":46,"searchDepth":185,"depth":185,"links":14980},[14981,14982,14983],{"id":13913,"depth":185,"text":13914},{"id":14170,"depth":185,"text":14171},{"id":14292,"depth":185,"text":14293,"children":14984},[14985,14986],{"id":14299,"depth":202,"text":14300},{"id":14669,"depth":202,"text":14670},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13905,"description":46},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14993,"title":14994,"body":14995,"description":23748,"extension":469,"meta":23749,"navigation":205,"path":23750,"seo":23751,"stem":23752,"__hash__":23753},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14996,"toc":23729},[14997,15000,15006,15013,15018,15021,15024,15027,15031,15035,15038,15041,15049,15054,15057,15064,15069,15228,15231,15484,15487,15490,15493,15498,15501,15504,15515,15520,15756,15760,15770,15773,15781,15928,15932,15935,15938,15942,16386,16390,16398,16406,17318,17325,17330,17958,17961,17964,17967,18086,18089,18176,18179,18305,18308,18402,18405,18758,18762,18770,18774,18781,18784,18787,18798,18804,18809,18821,18829,18849,18857,18874,19060,19063,19067,19070,19073,19076,19079,19082,19085,19088,19548,19554,19558,19561,19572,20159,20162,20651,20655,20658,20661,20664,20667,20670,20678,21074,21078,21081,21084,21531,21534,21537,21542,21545,21550,21553,21557,21560,21562,21568,21571,21877,21887,21928,21932,21935,21937,21970,21973,22280,22282,22297,22300,22323,22332,22338,22341,22345,22348,22351,22356,22367,22372,22380,22385,22515,22518,22521,22696,22701,22913,22917,22920,23034,23039,23278,23282,23286,23289,23292,23297,23402,23405,23408,23411,23415,23526,23529,23532,23537,23589,23592,23595,23600,23646,23649,23654,23722,23724,23727],[14,14998,14994],{"id":14999},"_8类和对象",[10,15001,15002,15003],{},"C++面向对象的三大特性为",[691,15004,15005],{},"封装、继承、多态",[10,15007,15008,15009,15012],{},"C++认为",[691,15010,15011],{},"万事万物都皆为对象","，对象上有其属性和行为",[10,15014,15015],{},[691,15016,15017],{},"例如：",[10,15019,15020],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[10,15022,15023],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[10,15025,15026],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[486,15028,15030],{"id":15029},"_81封装","8.1封装",[513,15032,15034],{"id":15033},"_811封装的意义","8.1.1封装的意义",[10,15036,15037],{},"封装是C++面向对象三大特性之一",[10,15039,15040],{},"封装的意义：",[1549,15042,15043,15046],{},[22,15044,15045],{},"将属性和行为作为一个整体，表现生活中的事物",[22,15047,15048],{},"将属性和行为加以权限控制",[10,15050,15051],{},[691,15052,15053],{},"封装意义一：",[10,15055,15056],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[10,15058,15059,14179,15061],{},[691,15060,5566],{},[48,15062,15063],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[19,15065,15066],{},[22,15067,15068],{},"**示例1：**设计一个圆类，求圆的周长",[41,15070,15072],{"className":534,"code":15071,"language":536,"meta":46,"style":46},"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",[48,15073,15074,15082,15086,15091,15096,15101,15106,15113,15118,15128,15132,15150,15154,15158,15166,15170,15175,15180,15185,15190,15201,15224],{"__ignoreMap":46},[51,15075,15076,15079],{"class":53,"line":54},[51,15077,15078],{"class":69},"class",[51,15080,15081],{"class":57}," Circle\n",[51,15083,15084],{"class":53,"line":185},[51,15085,1955],{"class":65},[51,15087,15088],{"class":53,"line":202},[51,15089,15090],{"class":601},"    \u002F\u002F访问权限\n",[51,15092,15093],{"class":53,"line":209},[51,15094,15095],{"class":601},"    \u002F\u002F公共权限\n",[51,15097,15098],{"class":53,"line":223},[51,15099,15100],{"class":69},"public:\n",[51,15102,15103],{"class":53,"line":237},[51,15104,15105],{"class":601},"    \u002F\u002F属性\n",[51,15107,15108,15110],{"class":53,"line":242},[51,15109,2375],{"class":69},[51,15111,15112],{"class":65}," m_r;\n",[51,15114,15115],{"class":53,"line":257},[51,15116,15117],{"class":601},"    \u002F\u002F行为\n",[51,15119,15120,15123,15126],{"class":53,"line":262},[51,15121,15122],{"class":69},"    double",[51,15124,15125],{"class":57}," calculateZC",[51,15127,2366],{"class":65},[51,15129,15130],{"class":53,"line":285},[51,15131,2420],{"class":65},[51,15133,15134,15137,15140,15142,15145,15147],{"class":53,"line":296},[51,15135,15136],{"class":69},"        return",[51,15138,15139],{"class":278}," 2",[51,15141,997],{"class":69},[51,15143,15144],{"class":65},"PI",[51,15146,997],{"class":69},[51,15148,15149],{"class":65},"m_r;\n",[51,15151,15152],{"class":53,"line":307},[51,15153,2577],{"class":65},[51,15155,15156],{"class":53,"line":324},[51,15157,4381],{"class":65},[51,15159,15160,15162,15164],{"class":53,"line":329},[51,15161,549],{"class":69},[51,15163,2363],{"class":57},[51,15165,2366],{"class":65},[51,15167,15168],{"class":53,"line":334},[51,15169,1955],{"class":65},[51,15171,15172],{"class":53,"line":340},[51,15173,15174],{"class":601},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[51,15176,15177],{"class":53,"line":345},[51,15178,15179],{"class":601},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[51,15181,15182],{"class":53,"line":357},[51,15183,15184],{"class":65},"    Circle c1;\n",[51,15186,15187],{"class":53,"line":366},[51,15188,15189],{"class":601},"    \u002F\u002F给圆对象 的属性进行赋值\n",[51,15191,15192,15195,15197,15199],{"class":53,"line":383},[51,15193,15194],{"class":65},"    c1.m_r",[51,15196,70],{"class":69},[51,15198,988],{"class":278},[51,15200,1703],{"class":65},[51,15202,15203,15205,15207,15210,15212,15215,15218,15220,15222],{"class":53,"line":392},[51,15204,1960],{"class":65},[51,15206,1586],{"class":69},[51,15208,15209],{"class":61},"\"圆的周长\"",[51,15211,1586],{"class":69},[51,15213,15214],{"class":65},"c1.",[51,15216,15217],{"class":57},"calculateZC",[51,15219,2816],{"class":65},[51,15221,1586],{"class":69},[51,15223,1608],{"class":65},[51,15225,15226],{"class":53,"line":403},[51,15227,1974],{"class":65},[10,15229,15230],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[41,15232,15234],{"className":534,"code":15233,"language":536,"meta":46,"style":46},"#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",[48,15235,15236,15242,15252,15258,15264,15268,15272,15277,15284,15289,15307,15311,15321,15325,15330,15346,15350,15360,15364,15369,15377,15381,15413,15417,15421,15429,15433,15438,15443,15457,15471,15480],{"__ignoreMap":46},[51,15237,15238,15240],{"class":53,"line":54},[51,15239,2340],{"class":69},[51,15241,2343],{"class":61},[51,15243,15244,15246,15248,15250],{"class":53,"line":185},[51,15245,2348],{"class":69},[51,15247,2351],{"class":69},[51,15249,2354],{"class":57},[51,15251,1703],{"class":65},[51,15253,15254,15256],{"class":53,"line":202},[51,15255,2340],{"class":69},[51,15257,8133],{"class":61},[51,15259,15260,15262],{"class":53,"line":209},[51,15261,15078],{"class":69},[51,15263,8146],{"class":57},[51,15265,15266],{"class":53,"line":223},[51,15267,1955],{"class":65},[51,15269,15270],{"class":53,"line":237},[51,15271,15100],{"class":69},[51,15273,15274],{"class":53,"line":242},[51,15275,15276],{"class":65},"    string m_name;\n",[51,15278,15279,15281],{"class":53,"line":257},[51,15280,2375],{"class":69},[51,15282,15283],{"class":65}," m_id;\n",[51,15285,15286],{"class":53,"line":262},[51,15287,15288],{"class":601},"    \u002F\u002F赋值姓名\n",[51,15290,15291,15294,15297,15299,15302,15305],{"class":53,"line":285},[51,15292,15293],{"class":69},"    void",[51,15295,15296],{"class":57}," setName",[51,15298,546],{"class":65},[51,15300,15301],{"class":57},"string",[51,15303,15304],{"class":248}," name",[51,15306,282],{"class":65},[51,15308,15309],{"class":53,"line":296},[51,15310,2420],{"class":65},[51,15312,15313,15316,15318],{"class":53,"line":307},[51,15314,15315],{"class":65},"        m_name",[51,15317,70],{"class":69},[51,15319,15320],{"class":65},"name;\n",[51,15322,15323],{"class":53,"line":324},[51,15324,2577],{"class":65},[51,15326,15327],{"class":53,"line":329},[51,15328,15329],{"class":601},"    \u002F\u002F赋值学号\n",[51,15331,15332,15334,15337,15339,15341,15344],{"class":53,"line":334},[51,15333,15293],{"class":69},[51,15335,15336],{"class":57}," setId",[51,15338,546],{"class":65},[51,15340,549],{"class":69},[51,15342,15343],{"class":248}," id",[51,15345,282],{"class":65},[51,15347,15348],{"class":53,"line":340},[51,15349,2420],{"class":65},[51,15351,15352,15355,15357],{"class":53,"line":345},[51,15353,15354],{"class":65},"        m_id",[51,15356,70],{"class":69},[51,15358,15359],{"class":65},"id;\n",[51,15361,15362],{"class":53,"line":357},[51,15363,2577],{"class":65},[51,15365,15366],{"class":53,"line":366},[51,15367,15368],{"class":601},"    \u002F\u002F打印学生信息\n",[51,15370,15371,15373,15375],{"class":53,"line":383},[51,15372,15293],{"class":69},[51,15374,9999],{"class":57},[51,15376,2366],{"class":65},[51,15378,15379],{"class":53,"line":392},[51,15380,2420],{"class":65},[51,15382,15383,15385,15387,15390,15392,15395,15397,15399,15401,15404,15406,15409,15411],{"class":53,"line":403},[51,15384,3838],{"class":65},[51,15386,1586],{"class":69},[51,15388,15389],{"class":61},"\"姓名：\"",[51,15391,1586],{"class":69},[51,15393,15394],{"class":65},"m_name",[51,15396,1586],{"class":69},[51,15398,4745],{"class":61},[51,15400,1586],{"class":69},[51,15402,15403],{"class":61},"\"学号：\"",[51,15405,1586],{"class":69},[51,15407,15408],{"class":65},"m_id",[51,15410,1586],{"class":69},[51,15412,1608],{"class":65},[51,15414,15415],{"class":53,"line":409},[51,15416,2577],{"class":65},[51,15418,15419],{"class":53,"line":414},[51,15420,4381],{"class":65},[51,15422,15423,15425,15427],{"class":53,"line":433},[51,15424,549],{"class":69},[51,15426,2363],{"class":57},[51,15428,2366],{"class":65},[51,15430,15431],{"class":53,"line":439},[51,15432,1955],{"class":65},[51,15434,15435],{"class":53,"line":444},[51,15436,15437],{"class":601},"    \u002F\u002F实例化\n",[51,15439,15440],{"class":53,"line":453},[51,15441,15442],{"class":65},"    Student s1;\n",[51,15444,15445,15448,15451,15453,15455],{"class":53,"line":2174},[51,15446,15447],{"class":65},"    s1.",[51,15449,15450],{"class":57},"setName",[51,15452,546],{"class":65},[51,15454,8300],{"class":61},[51,15456,3107],{"class":65},[51,15458,15459,15461,15464,15466,15469],{"class":53,"line":2965},[51,15460,15447],{"class":65},[51,15462,15463],{"class":57},"setId",[51,15465,546],{"class":65},[51,15467,15468],{"class":278},"123456",[51,15470,3107],{"class":65},[51,15472,15473,15475,15478],{"class":53,"line":2979},[51,15474,15447],{"class":65},[51,15476,15477],{"class":57},"printInfo",[51,15479,6020],{"class":65},[51,15481,15482],{"class":53,"line":2987},[51,15483,1974],{"class":65},[10,15485,15486],{},"类中的属性和行为统称为成员",[10,15488,15489],{},"属性：成员属性(成员变量)",[10,15491,15492],{},"方法：成员函数(成员方法)",[10,15494,15495],{},[691,15496,15497],{},"封装意义二：",[10,15499,15500],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[10,15502,15503],{},"访问权限有三种：",[19,15505,15506,15509,15512],{},[22,15507,15508],{},"public        公共权限",[22,15510,15511],{},"protected 保护权限",[22,15513,15514],{},"private      私有权限",[10,15516,15517],{},[691,15518,15519],{},"示例：",[41,15521,15523],{"className":10325,"code":15522,"language":10327,"meta":46,"style":46},"\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",[48,15524,15525,15530,15535,15540,15545,15549,15556,15560,15565,15569,15574,15578,15583,15588,15593,15597,15602,15607,15614,15618,15622,15630,15634,15645,15657,15669,15673,15677,15681,15689,15693,15698,15710,15718,15726,15730,15740,15744,15752],{"__ignoreMap":46},[51,15526,15527],{"class":53,"line":54},[51,15528,15529],{"class":601},"\u002F\u002F三种权限\n",[51,15531,15532],{"class":53,"line":185},[51,15533,15534],{"class":601},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[51,15536,15537],{"class":53,"line":202},[51,15538,15539],{"class":601},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[51,15541,15542],{"class":53,"line":209},[51,15543,15544],{"class":601},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[51,15546,15547],{"class":53,"line":223},[51,15548,206],{"emptyLinePlaceholder":205},[51,15550,15551,15553],{"class":53,"line":237},[51,15552,15078],{"class":69},[51,15554,15555],{"class":57}," Person\n",[51,15557,15558],{"class":53,"line":242},[51,15559,1955],{"class":65},[51,15561,15562],{"class":53,"line":257},[51,15563,15564],{"class":601},"    \u002F\u002F姓名  公共权限\n",[51,15566,15567],{"class":53,"line":262},[51,15568,15100],{"class":69},[51,15570,15571],{"class":53,"line":285},[51,15572,15573],{"class":65},"    string m_Name;\n",[51,15575,15576],{"class":53,"line":296},[51,15577,206],{"emptyLinePlaceholder":205},[51,15579,15580],{"class":53,"line":307},[51,15581,15582],{"class":601},"    \u002F\u002F汽车  保护权限\n",[51,15584,15585],{"class":53,"line":324},[51,15586,15587],{"class":69},"protected:\n",[51,15589,15590],{"class":53,"line":329},[51,15591,15592],{"class":65},"    string m_Car;\n",[51,15594,15595],{"class":53,"line":334},[51,15596,206],{"emptyLinePlaceholder":205},[51,15598,15599],{"class":53,"line":340},[51,15600,15601],{"class":601},"    \u002F\u002F银行卡密码  私有权限\n",[51,15603,15604],{"class":53,"line":345},[51,15605,15606],{"class":69},"private:\n",[51,15608,15609,15611],{"class":53,"line":357},[51,15610,2375],{"class":69},[51,15612,15613],{"class":65}," m_Password;\n",[51,15615,15616],{"class":53,"line":366},[51,15617,206],{"emptyLinePlaceholder":205},[51,15619,15620],{"class":53,"line":383},[51,15621,15100],{"class":69},[51,15623,15624,15626,15628],{"class":53,"line":392},[51,15625,15293],{"class":69},[51,15627,11769],{"class":57},[51,15629,2366],{"class":65},[51,15631,15632],{"class":53,"line":403},[51,15633,2420],{"class":65},[51,15635,15636,15639,15641,15643],{"class":53,"line":409},[51,15637,15638],{"class":65},"        m_Name ",[51,15640,70],{"class":69},[51,15642,9322],{"class":61},[51,15644,1703],{"class":65},[51,15646,15647,15650,15652,15655],{"class":53,"line":414},[51,15648,15649],{"class":65},"        m_Car ",[51,15651,70],{"class":69},[51,15653,15654],{"class":61}," \"拖拉机\"",[51,15656,1703],{"class":65},[51,15658,15659,15662,15664,15667],{"class":53,"line":433},[51,15660,15661],{"class":65},"        m_Password ",[51,15663,70],{"class":69},[51,15665,15666],{"class":278}," 123456",[51,15668,1703],{"class":65},[51,15670,15671],{"class":53,"line":439},[51,15672,2577],{"class":65},[51,15674,15675],{"class":53,"line":444},[51,15676,4381],{"class":65},[51,15678,15679],{"class":53,"line":453},[51,15680,206],{"emptyLinePlaceholder":205},[51,15682,15683,15685,15687],{"class":53,"line":2174},[51,15684,549],{"class":69},[51,15686,2363],{"class":57},[51,15688,11237],{"class":65},[51,15690,15691],{"class":53,"line":2965},[51,15692,206],{"emptyLinePlaceholder":205},[51,15694,15695],{"class":53,"line":2979},[51,15696,15697],{"class":65},"    Person p;\n",[51,15699,15700,15703,15705,15708],{"class":53,"line":2987},[51,15701,15702],{"class":65},"    p.m_Name ",[51,15704,70],{"class":69},[51,15706,15707],{"class":61}," \"李四\"",[51,15709,1703],{"class":65},[51,15711,15712,15715],{"class":53,"line":2992},[51,15713,15714],{"class":601},"    \u002F\u002Fp.m_Car = \"奔驰\";",[51,15716,15717],{"class":601},"  \u002F\u002F保护权限类外访问不到\n",[51,15719,15720,15723],{"class":53,"line":2998},[51,15721,15722],{"class":601},"    \u002F\u002Fp.m_Password = 123;",[51,15724,15725],{"class":601}," \u002F\u002F私有权限类外访问不到\n",[51,15727,15728],{"class":53,"line":3004},[51,15729,206],{"emptyLinePlaceholder":205},[51,15731,15732,15734,15736,15738],{"class":53,"line":3009},[51,15733,2693],{"class":57},[51,15735,546],{"class":65},[51,15737,2698],{"class":61},[51,15739,3107],{"class":65},[51,15741,15742],{"class":53,"line":8332},[51,15743,206],{"emptyLinePlaceholder":205},[51,15745,15746,15748,15750],{"class":53,"line":8356},[51,15747,4476],{"class":69},[51,15749,4479],{"class":278},[51,15751,1703],{"class":65},[51,15753,15754],{"class":53,"line":8361},[51,15755,1974],{"class":65},[513,15757,15759],{"id":15758},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[10,15761,15762,15763,15766,15767],{},"在C++中 struct和class唯一的",[691,15764,15765],{},"区别","就在于 ",[691,15768,15769],{},"默认的访问权限不同",[10,15771,15772],{},"区别：",[1549,15774,15775,15778],{},[22,15776,15777],{},"struct 默认权限为公共",[22,15779,15780],{},"class   默认权限为私有",[41,15782,15784],{"className":10325,"code":15783,"language":10327,"meta":46,"style":46},"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",[48,15785,15786,15793,15797,15807,15811,15815,15822,15826,15836,15840,15844,15852,15856,15861,15875,15879,15884,15898,15902,15912,15916,15924],{"__ignoreMap":46},[51,15787,15788,15790],{"class":53,"line":54},[51,15789,15078],{"class":69},[51,15791,15792],{"class":57}," C1\n",[51,15794,15795],{"class":53,"line":185},[51,15796,1955],{"class":65},[51,15798,15799,15801,15804],{"class":53,"line":202},[51,15800,2375],{"class":69},[51,15802,15803],{"class":65},"  m_A;",[51,15805,15806],{"class":601}," \u002F\u002F默认是私有权限\n",[51,15808,15809],{"class":53,"line":209},[51,15810,4381],{"class":65},[51,15812,15813],{"class":53,"line":223},[51,15814,206],{"emptyLinePlaceholder":205},[51,15816,15817,15819],{"class":53,"line":237},[51,15818,8143],{"class":69},[51,15820,15821],{"class":57}," C2\n",[51,15823,15824],{"class":53,"line":242},[51,15825,1955],{"class":65},[51,15827,15828,15830,15833],{"class":53,"line":257},[51,15829,2375],{"class":69},[51,15831,15832],{"class":65}," m_A;",[51,15834,15835],{"class":601},"  \u002F\u002F默认是公共权限\n",[51,15837,15838],{"class":53,"line":262},[51,15839,4381],{"class":65},[51,15841,15842],{"class":53,"line":285},[51,15843,206],{"emptyLinePlaceholder":205},[51,15845,15846,15848,15850],{"class":53,"line":296},[51,15847,549],{"class":69},[51,15849,2363],{"class":57},[51,15851,11237],{"class":65},[51,15853,15854],{"class":53,"line":307},[51,15855,206],{"emptyLinePlaceholder":205},[51,15857,15858],{"class":53,"line":324},[51,15859,15860],{"class":65},"    C1 c1;\n",[51,15862,15863,15866,15868,15870,15872],{"class":53,"line":329},[51,15864,15865],{"class":65},"    c1.m_A ",[51,15867,70],{"class":69},[51,15869,2428],{"class":278},[51,15871,598],{"class":65},[51,15873,15874],{"class":601}," \u002F\u002F错误，访问权限是私有\n",[51,15876,15877],{"class":53,"line":334},[51,15878,206],{"emptyLinePlaceholder":205},[51,15880,15881],{"class":53,"line":340},[51,15882,15883],{"class":65},"    C2 c2;\n",[51,15885,15886,15889,15891,15893,15895],{"class":53,"line":345},[51,15887,15888],{"class":65},"    c2.m_A ",[51,15890,70],{"class":69},[51,15892,2428],{"class":278},[51,15894,598],{"class":65},[51,15896,15897],{"class":601}," \u002F\u002F正确，访问权限是公共\n",[51,15899,15900],{"class":53,"line":357},[51,15901,206],{"emptyLinePlaceholder":205},[51,15903,15904,15906,15908,15910],{"class":53,"line":366},[51,15905,2693],{"class":57},[51,15907,546],{"class":65},[51,15909,2698],{"class":61},[51,15911,3107],{"class":65},[51,15913,15914],{"class":53,"line":383},[51,15915,206],{"emptyLinePlaceholder":205},[51,15917,15918,15920,15922],{"class":53,"line":392},[51,15919,4476],{"class":69},[51,15921,4479],{"class":278},[51,15923,1703],{"class":65},[51,15925,15926],{"class":53,"line":403},[51,15927,1974],{"class":65},[513,15929,15931],{"id":15930},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[10,15933,15934],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[10,15936,15937],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[10,15939,15940],{},[691,15941,15519],{},[41,15943,15945],{"className":10325,"code":15944,"language":10327,"meta":46,"style":46},"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",[48,15946,15947,15957,15961,15965,15970,15984,15993,15997,16007,16011,16018,16022,16026,16030,16035,16044,16051,16055,16060,16076,16099,16112,16118,16122,16131,16135,16139,16144,16160,16170,16174,16178,16182,16190,16194,16204,16208,16216,16220,16224,16232,16236,16240,16245,16258,16281,16285,16290,16303,16325,16329,16334,16348,16356,16360,16370,16374,16382],{"__ignoreMap":46},[51,15948,15949,15951,15954],{"class":53,"line":54},[51,15950,15078],{"class":69},[51,15952,15953],{"class":57}," Person",[51,15955,15956],{"class":65}," {\n",[51,15958,15959],{"class":53,"line":185},[51,15960,15100],{"class":69},[51,15962,15963],{"class":53,"line":202},[51,15964,206],{"emptyLinePlaceholder":205},[51,15966,15967],{"class":53,"line":209},[51,15968,15969],{"class":601},"    \u002F\u002F姓名设置可读可写\n",[51,15971,15972,15974,15976,15978,15980,15982],{"class":53,"line":223},[51,15973,15293],{"class":69},[51,15975,15296],{"class":57},[51,15977,546],{"class":65},[51,15979,15301],{"class":57},[51,15981,15304],{"class":248},[51,15983,12826],{"class":65},[51,15985,15986,15988,15990],{"class":53,"line":237},[51,15987,15638],{"class":65},[51,15989,70],{"class":69},[51,15991,15992],{"class":65}," name;\n",[51,15994,15995],{"class":53,"line":242},[51,15996,2577],{"class":65},[51,15998,15999,16002,16005],{"class":53,"line":257},[51,16000,16001],{"class":57},"    string",[51,16003,16004],{"class":57}," getName",[51,16006,2366],{"class":65},[51,16008,16009],{"class":53,"line":262},[51,16010,2420],{"class":65},[51,16012,16013,16015],{"class":53,"line":285},[51,16014,15136],{"class":69},[51,16016,16017],{"class":65}," m_Name;\n",[51,16019,16020],{"class":53,"line":296},[51,16021,2577],{"class":65},[51,16023,16024],{"class":53,"line":307},[51,16025,206],{"emptyLinePlaceholder":205},[51,16027,16028],{"class":53,"line":324},[51,16029,206],{"emptyLinePlaceholder":205},[51,16031,16032],{"class":53,"line":329},[51,16033,16034],{"class":601},"    \u002F\u002F获取年龄 \n",[51,16036,16037,16039,16042],{"class":53,"line":334},[51,16038,2375],{"class":69},[51,16040,16041],{"class":57}," getAge",[51,16043,11237],{"class":65},[51,16045,16046,16048],{"class":53,"line":340},[51,16047,15136],{"class":69},[51,16049,16050],{"class":65}," m_Age;\n",[51,16052,16053],{"class":53,"line":345},[51,16054,2577],{"class":65},[51,16056,16057],{"class":53,"line":357},[51,16058,16059],{"class":601},"    \u002F\u002F设置年龄\n",[51,16061,16062,16064,16067,16069,16071,16074],{"class":53,"line":366},[51,16063,15293],{"class":69},[51,16065,16066],{"class":57}," setAge",[51,16068,546],{"class":65},[51,16070,549],{"class":69},[51,16072,16073],{"class":248}," age",[51,16075,12826],{"class":65},[51,16077,16078,16080,16083,16085,16087,16089,16092,16094,16097],{"class":53,"line":383},[51,16079,369],{"class":69},[51,16081,16082],{"class":65}," (age ",[51,16084,1452],{"class":69},[51,16086,4479],{"class":278},[51,16088,3642],{"class":69},[51,16090,16091],{"class":65}," age ",[51,16093,1502],{"class":69},[51,16095,16096],{"class":278}," 150",[51,16098,12826],{"class":65},[51,16100,16101,16103,16105,16108,16110],{"class":53,"line":392},[51,16102,10103],{"class":65},[51,16104,1586],{"class":69},[51,16106,16107],{"class":61}," \"你个老妖精!\"",[51,16109,1854],{"class":69},[51,16111,9224],{"class":65},[51,16113,16114,16116],{"class":53,"line":403},[51,16115,386],{"class":69},[51,16117,1703],{"class":65},[51,16119,16120],{"class":53,"line":409},[51,16121,2917],{"class":65},[51,16123,16124,16127,16129],{"class":53,"line":414},[51,16125,16126],{"class":65},"        m_Age ",[51,16128,70],{"class":69},[51,16130,8181],{"class":65},[51,16132,16133],{"class":53,"line":433},[51,16134,2577],{"class":65},[51,16136,16137],{"class":53,"line":439},[51,16138,206],{"emptyLinePlaceholder":205},[51,16140,16141],{"class":53,"line":444},[51,16142,16143],{"class":601},"    \u002F\u002F情人设置为只写\n",[51,16145,16146,16148,16151,16153,16155,16158],{"class":53,"line":453},[51,16147,15293],{"class":69},[51,16149,16150],{"class":57}," setLover",[51,16152,546],{"class":65},[51,16154,15301],{"class":57},[51,16156,16157],{"class":248}," lover",[51,16159,12826],{"class":65},[51,16161,16162,16165,16167],{"class":53,"line":2174},[51,16163,16164],{"class":65},"        m_Lover ",[51,16166,70],{"class":69},[51,16168,16169],{"class":65}," lover;\n",[51,16171,16172],{"class":53,"line":2965},[51,16173,2577],{"class":65},[51,16175,16176],{"class":53,"line":2979},[51,16177,206],{"emptyLinePlaceholder":205},[51,16179,16180],{"class":53,"line":2987},[51,16181,15606],{"class":69},[51,16183,16184,16187],{"class":53,"line":2992},[51,16185,16186],{"class":65},"    string m_Name;",[51,16188,16189],{"class":601}," \u002F\u002F可读可写  姓名\n",[51,16191,16192],{"class":53,"line":2998},[51,16193,13594],{"class":65},[51,16195,16196,16198,16201],{"class":53,"line":3004},[51,16197,2375],{"class":69},[51,16199,16200],{"class":65}," m_Age;",[51,16202,16203],{"class":601}," \u002F\u002F只读  年龄\n",[51,16205,16206],{"class":53,"line":3009},[51,16207,206],{"emptyLinePlaceholder":205},[51,16209,16210,16213],{"class":53,"line":8332},[51,16211,16212],{"class":65},"    string m_Lover;",[51,16214,16215],{"class":601}," \u002F\u002F只写  情人\n",[51,16217,16218],{"class":53,"line":8356},[51,16219,4381],{"class":65},[51,16221,16222],{"class":53,"line":8361},[51,16223,206],{"emptyLinePlaceholder":205},[51,16225,16226,16228,16230],{"class":53,"line":8367},[51,16227,549],{"class":69},[51,16229,2363],{"class":57},[51,16231,11237],{"class":65},[51,16233,16234],{"class":53,"line":8394},[51,16235,206],{"emptyLinePlaceholder":205},[51,16237,16238],{"class":53,"line":8399},[51,16239,15697],{"class":65},[51,16241,16242],{"class":53,"line":8405},[51,16243,16244],{"class":601},"    \u002F\u002F姓名设置\n",[51,16246,16247,16250,16252,16254,16256],{"class":53,"line":8417},[51,16248,16249],{"class":65},"    p.",[51,16251,15450],{"class":57},[51,16253,546],{"class":65},[51,16255,8300],{"class":61},[51,16257,3107],{"class":65},[51,16259,16260,16262,16264,16267,16269,16272,16275,16277,16279],{"class":53,"line":8429},[51,16261,6913],{"class":65},[51,16263,1586],{"class":69},[51,16265,16266],{"class":61}," \"姓名： \"",[51,16268,1854],{"class":69},[51,16270,16271],{"class":65}," p.",[51,16273,16274],{"class":57},"getName",[51,16276,13434],{"class":65},[51,16278,1586],{"class":69},[51,16280,9224],{"class":65},[51,16282,16283],{"class":53,"line":8441},[51,16284,206],{"emptyLinePlaceholder":205},[51,16286,16287],{"class":53,"line":10100},[51,16288,16289],{"class":601},"    \u002F\u002F年龄设置\n",[51,16291,16292,16294,16297,16299,16301],{"class":53,"line":10125},[51,16293,16249],{"class":65},[51,16295,16296],{"class":57},"setAge",[51,16298,546],{"class":65},[51,16300,1198],{"class":278},[51,16302,3107],{"class":65},[51,16304,16305,16307,16309,16312,16314,16316,16319,16321,16323],{"class":53,"line":10148},[51,16306,6913],{"class":65},[51,16308,1586],{"class":69},[51,16310,16311],{"class":61}," \"年龄： \"",[51,16313,1854],{"class":69},[51,16315,16271],{"class":65},[51,16317,16318],{"class":57},"getAge",[51,16320,13434],{"class":65},[51,16322,1586],{"class":69},[51,16324,9224],{"class":65},[51,16326,16327],{"class":53,"line":10172},[51,16328,206],{"emptyLinePlaceholder":205},[51,16330,16331],{"class":53,"line":10177},[51,16332,16333],{"class":601},"    \u002F\u002F情人设置\n",[51,16335,16336,16338,16341,16343,16346],{"class":53,"line":10182},[51,16337,16249],{"class":65},[51,16339,16340],{"class":57},"setLover",[51,16342,546],{"class":65},[51,16344,16345],{"class":61},"\"苍井\"",[51,16347,3107],{"class":65},[51,16349,16350,16353],{"class":53,"line":10187},[51,16351,16352],{"class":601},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[51,16354,16355],{"class":601},"  \u002F\u002F只写属性，不可以读取\n",[51,16357,16358],{"class":53,"line":10196},[51,16359,206],{"emptyLinePlaceholder":205},[51,16361,16362,16364,16366,16368],{"class":53,"line":10201},[51,16363,2693],{"class":57},[51,16365,546],{"class":65},[51,16367,2698],{"class":61},[51,16369,3107],{"class":65},[51,16371,16372],{"class":53,"line":10207},[51,16373,206],{"emptyLinePlaceholder":205},[51,16375,16376,16378,16380],{"class":53,"line":10228},[51,16377,4476],{"class":69},[51,16379,4479],{"class":278},[51,16381,1703],{"class":65},[51,16383,16384],{"class":53,"line":10234},[51,16385,1974],{"class":65},[513,16387,16389],{"id":16388},"_814封装案例","8.1.4封装案例",[19,16391,16392],{},[22,16393,16394,16397],{},[691,16395,16396],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1549,16399,16400,16403],{},[22,16401,16402],{},"求出立方体的面积和体积",[22,16404,16405],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[41,16407,16409],{"className":534,"code":16408,"language":536,"meta":46,"style":46},"#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",[48,16410,16411,16417,16427,16434,16438,16442,16447,16477,16481,16491,16501,16511,16515,16524,16528,16564,16568,16577,16581,16597,16601,16606,16615,16619,16626,16630,16639,16643,16650,16654,16663,16667,16674,16678,16683,16700,16704,16750,16754,16763,16767,16771,16775,16784,16788,16792,16797,16801,16807,16813,16819,16823,16827,16832,16854,16858,16912,16916,16924,16928,16933,16938,16951,16958,16974,16985,16991,17014,17020,17043,17057,17077,17083,17094,17117,17139,17144,17150,17164,17177,17182,17196,17201,17207,17212,17226,17231,17236,17250,17262,17267,17280,17285,17290,17295,17308,17313],{"__ignoreMap":46},[51,16412,16413,16415],{"class":53,"line":54},[51,16414,2340],{"class":69},[51,16416,2343],{"class":61},[51,16418,16419,16421,16423,16425],{"class":53,"line":185},[51,16420,2348],{"class":69},[51,16422,2351],{"class":69},[51,16424,2354],{"class":57},[51,16426,1703],{"class":65},[51,16428,16429,16431],{"class":53,"line":202},[51,16430,15078],{"class":69},[51,16432,16433],{"class":57}," Cube\n",[51,16435,16436],{"class":53,"line":209},[51,16437,1955],{"class":65},[51,16439,16440],{"class":53,"line":223},[51,16441,15100],{"class":69},[51,16443,16444],{"class":53,"line":237},[51,16445,16446],{"class":601},"    \u002F\u002F输入长宽高\n",[51,16448,16449,16451,16454,16456,16458,16461,16463,16465,16468,16470,16472,16475],{"class":53,"line":242},[51,16450,15293],{"class":69},[51,16452,16453],{"class":57}," setLwh",[51,16455,546],{"class":65},[51,16457,549],{"class":69},[51,16459,16460],{"class":248}," l",[51,16462,920],{"class":65},[51,16464,549],{"class":69},[51,16466,16467],{"class":248}," w",[51,16469,920],{"class":65},[51,16471,549],{"class":69},[51,16473,16474],{"class":248}," h",[51,16476,282],{"class":65},[51,16478,16479],{"class":53,"line":257},[51,16480,2420],{"class":65},[51,16482,16483,16486,16488],{"class":53,"line":262},[51,16484,16485],{"class":65},"        m_L",[51,16487,70],{"class":69},[51,16489,16490],{"class":65},"l;\n",[51,16492,16493,16496,16498],{"class":53,"line":285},[51,16494,16495],{"class":65},"        m_W",[51,16497,70],{"class":69},[51,16499,16500],{"class":65},"w;\n",[51,16502,16503,16506,16508],{"class":53,"line":296},[51,16504,16505],{"class":65},"        m_H",[51,16507,70],{"class":69},[51,16509,16510],{"class":65},"h;\n",[51,16512,16513],{"class":53,"line":307},[51,16514,2577],{"class":65},[51,16516,16517,16519,16522],{"class":53,"line":324},[51,16518,2375],{"class":69},[51,16520,16521],{"class":57}," mianji",[51,16523,2366],{"class":65},[51,16525,16526],{"class":53,"line":329},[51,16527,2420],{"class":65},[51,16529,16530,16532,16534,16536,16539,16541,16544,16546,16549,16551,16554,16556,16559,16561],{"class":53,"line":334},[51,16531,15136],{"class":69},[51,16533,15139],{"class":278},[51,16535,997],{"class":69},[51,16537,16538],{"class":65},"(m_L",[51,16540,997],{"class":69},[51,16542,16543],{"class":65},"m_W ",[51,16545,1023],{"class":69},[51,16547,16548],{"class":65}," m_L",[51,16550,997],{"class":69},[51,16552,16553],{"class":65},"m_H ",[51,16555,1023],{"class":69},[51,16557,16558],{"class":65}," m_W",[51,16560,997],{"class":69},[51,16562,16563],{"class":65},"m_H);\n",[51,16565,16566],{"class":53,"line":340},[51,16567,2577],{"class":65},[51,16569,16570,16572,16575],{"class":53,"line":345},[51,16571,2375],{"class":69},[51,16573,16574],{"class":57}," tiji",[51,16576,2366],{"class":65},[51,16578,16579],{"class":53,"line":357},[51,16580,2420],{"class":65},[51,16582,16583,16585,16587,16589,16592,16594],{"class":53,"line":366},[51,16584,15136],{"class":69},[51,16586,16548],{"class":65},[51,16588,997],{"class":69},[51,16590,16591],{"class":65},"m_W",[51,16593,997],{"class":69},[51,16595,16596],{"class":65},"m_H;\n",[51,16598,16599],{"class":53,"line":383},[51,16600,2577],{"class":65},[51,16602,16603],{"class":53,"line":392},[51,16604,16605],{"class":601},"    \u002F\u002F获取长宽高\n",[51,16607,16608,16610,16613],{"class":53,"line":403},[51,16609,2375],{"class":69},[51,16611,16612],{"class":57}," getLength",[51,16614,2366],{"class":65},[51,16616,16617],{"class":53,"line":409},[51,16618,2420],{"class":65},[51,16620,16621,16623],{"class":53,"line":414},[51,16622,15136],{"class":69},[51,16624,16625],{"class":65}," m_L;\n",[51,16627,16628],{"class":53,"line":433},[51,16629,2577],{"class":65},[51,16631,16632,16634,16637],{"class":53,"line":439},[51,16633,2375],{"class":69},[51,16635,16636],{"class":57}," getWidth",[51,16638,2366],{"class":65},[51,16640,16641],{"class":53,"line":444},[51,16642,2420],{"class":65},[51,16644,16645,16647],{"class":53,"line":453},[51,16646,15136],{"class":69},[51,16648,16649],{"class":65}," m_W;\n",[51,16651,16652],{"class":53,"line":2174},[51,16653,2577],{"class":65},[51,16655,16656,16658,16661],{"class":53,"line":2965},[51,16657,2375],{"class":69},[51,16659,16660],{"class":57}," getHeight",[51,16662,2366],{"class":65},[51,16664,16665],{"class":53,"line":2979},[51,16666,2420],{"class":65},[51,16668,16669,16671],{"class":53,"line":2987},[51,16670,15136],{"class":69},[51,16672,16673],{"class":65}," m_H;\n",[51,16675,16676],{"class":53,"line":2992},[51,16677,2577],{"class":65},[51,16679,16680],{"class":53,"line":2998},[51,16681,16682],{"class":601},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[51,16684,16685,16688,16691,16693,16696,16698],{"class":53,"line":3004},[51,16686,16687],{"class":69},"    bool",[51,16689,16690],{"class":57}," isEqual",[51,16692,546],{"class":65},[51,16694,16695],{"class":57},"Cube",[51,16697,3237],{"class":248},[51,16699,282],{"class":65},[51,16701,16702],{"class":53,"line":3009},[51,16703,2420],{"class":65},[51,16705,16706,16708,16711,16714,16716,16718,16721,16723,16726,16729,16731,16733,16736,16738,16740,16743,16745,16747],{"class":53,"line":8332},[51,16707,369],{"class":69},[51,16709,16710],{"class":65}," (c.",[51,16712,16713],{"class":57},"getLength",[51,16715,13434],{"class":65},[51,16717,375],{"class":69},[51,16719,16720],{"class":65}," m_L ",[51,16722,2113],{"class":69},[51,16724,16725],{"class":65}," c.",[51,16727,16728],{"class":57},"getWidth",[51,16730,13434],{"class":65},[51,16732,375],{"class":69},[51,16734,16735],{"class":65}," m_W ",[51,16737,2113],{"class":69},[51,16739,16725],{"class":65},[51,16741,16742],{"class":57},"getHeight",[51,16744,13434],{"class":65},[51,16746,375],{"class":69},[51,16748,16749],{"class":65}," m_H)\n",[51,16751,16752],{"class":53,"line":8356},[51,16753,2898],{"class":65},[51,16755,16756,16758,16761],{"class":53,"line":8361},[51,16757,386],{"class":69},[51,16759,16760],{"class":278}," true",[51,16762,1703],{"class":65},[51,16764,16765],{"class":53,"line":8367},[51,16766,2917],{"class":65},[51,16768,16769],{"class":53,"line":8394},[51,16770,2958],{"class":69},[51,16772,16773],{"class":53,"line":8399},[51,16774,2898],{"class":65},[51,16776,16777,16779,16782],{"class":53,"line":8405},[51,16778,386],{"class":69},[51,16780,16781],{"class":278}," false",[51,16783,1703],{"class":65},[51,16785,16786],{"class":53,"line":8417},[51,16787,2917],{"class":65},[51,16789,16790],{"class":53,"line":8429},[51,16791,2577],{"class":65},[51,16793,16794],{"class":53,"line":8441},[51,16795,16796],{"class":601},"    \u002F\u002F私有属性\n",[51,16798,16799],{"class":53,"line":10100},[51,16800,15606],{"class":69},[51,16802,16803,16805],{"class":53,"line":10125},[51,16804,2375],{"class":69},[51,16806,16625],{"class":65},[51,16808,16809,16811],{"class":53,"line":10148},[51,16810,2375],{"class":69},[51,16812,16649],{"class":65},[51,16814,16815,16817],{"class":53,"line":10172},[51,16816,2375],{"class":69},[51,16818,16673],{"class":65},[51,16820,16821],{"class":53,"line":10177},[51,16822,206],{"emptyLinePlaceholder":205},[51,16824,16825],{"class":53,"line":10182},[51,16826,4381],{"class":65},[51,16828,16829],{"class":53,"line":10187},[51,16830,16831],{"class":601},"\u002F\u002F全局函数判断两个立方体是否相等\n",[51,16833,16834,16836,16838,16840,16842,16845,16847,16849,16852],{"class":53,"line":10196},[51,16835,1764],{"class":69},[51,16837,16690],{"class":57},[51,16839,546],{"class":65},[51,16841,16695],{"class":57},[51,16843,16844],{"class":248}," c1",[51,16846,920],{"class":65},[51,16848,16695],{"class":57},[51,16850,16851],{"class":248}," c2",[51,16853,282],{"class":65},[51,16855,16856],{"class":53,"line":10201},[51,16857,1955],{"class":65},[51,16859,16860,16862,16865,16867,16869,16871,16874,16876,16879,16881,16883,16885,16887,16889,16891,16893,16895,16897,16899,16901,16903,16905,16907,16909],{"class":53,"line":10207},[51,16861,4476],{"class":69},[51,16863,16864],{"class":65}," (c1.",[51,16866,16713],{"class":57},[51,16868,13434],{"class":65},[51,16870,375],{"class":69},[51,16872,16873],{"class":65}," c2.",[51,16875,16713],{"class":57},[51,16877,16878],{"class":65},"()) ",[51,16880,2113],{"class":69},[51,16882,16864],{"class":65},[51,16884,16728],{"class":57},[51,16886,13434],{"class":65},[51,16888,375],{"class":69},[51,16890,16873],{"class":65},[51,16892,16728],{"class":57},[51,16894,16878],{"class":65},[51,16896,2113],{"class":69},[51,16898,16864],{"class":65},[51,16900,16742],{"class":57},[51,16902,13434],{"class":65},[51,16904,375],{"class":69},[51,16906,16873],{"class":65},[51,16908,16742],{"class":57},[51,16910,16911],{"class":65},"());\n",[51,16913,16914],{"class":53,"line":10228},[51,16915,1974],{"class":65},[51,16917,16918,16920,16922],{"class":53,"line":10234},[51,16919,549],{"class":69},[51,16921,2363],{"class":57},[51,16923,2366],{"class":65},[51,16925,16926],{"class":53,"line":10248},[51,16927,1955],{"class":65},[51,16929,16930],{"class":53,"line":10254},[51,16931,16932],{"class":65},"    Cube c1;\n",[51,16934,16935],{"class":53,"line":10281},[51,16936,16937],{"class":601},"    \u002F\u002F输入立方体的长宽高\n",[51,16939,16940,16942,16944,16947,16949],{"class":53,"line":10290},[51,16941,1960],{"class":65},[51,16943,1586],{"class":69},[51,16945,16946],{"class":61},"\"请输入第一个立方体的长、宽、高：\"",[51,16948,1586],{"class":69},[51,16950,1608],{"class":65},[51,16952,16953,16955],{"class":53,"line":10296},[51,16954,2375],{"class":69},[51,16956,16957],{"class":65}," l,w,h,l1,w1,h1;\n",[51,16959,16960,16962,16964,16966,16968,16970,16972],{"class":53,"line":10304},[51,16961,2402],{"class":65},[51,16963,1839],{"class":69},[51,16965,1060],{"class":65},[51,16967,1839],{"class":69},[51,16969,1337],{"class":65},[51,16971,1839],{"class":69},[51,16973,16510],{"class":65},[51,16975,16976,16979,16982],{"class":53,"line":10309},[51,16977,16978],{"class":65},"    c1.",[51,16980,16981],{"class":57},"setLwh",[51,16983,16984],{"class":65},"(l,w,h);\n",[51,16986,16988],{"class":53,"line":16987},66,[51,16989,16990],{"class":601},"    \u002F\u002F面积\n",[51,16992,16994,16996,16998,17001,17003,17005,17008,17010,17012],{"class":53,"line":16993},67,[51,16995,1960],{"class":65},[51,16997,1586],{"class":69},[51,16999,17000],{"class":61},"\"立方体的表面积为：\"",[51,17002,1586],{"class":69},[51,17004,15214],{"class":65},[51,17006,17007],{"class":57},"mianji",[51,17009,2816],{"class":65},[51,17011,1586],{"class":69},[51,17013,1608],{"class":65},[51,17015,17017],{"class":53,"line":17016},68,[51,17018,17019],{"class":601},"    \u002F\u002F体积\n",[51,17021,17023,17025,17027,17030,17032,17034,17037,17039,17041],{"class":53,"line":17022},69,[51,17024,1960],{"class":65},[51,17026,1586],{"class":69},[51,17028,17029],{"class":61},"\"立方体的体积为：\"",[51,17031,1586],{"class":69},[51,17033,15214],{"class":65},[51,17035,17036],{"class":57},"tiji",[51,17038,2816],{"class":65},[51,17040,1586],{"class":69},[51,17042,1608],{"class":65},[51,17044,17046,17048,17050,17053,17055],{"class":53,"line":17045},70,[51,17047,1960],{"class":65},[51,17049,1586],{"class":69},[51,17051,17052],{"class":61},"\"请输入第二个立方体的长、宽、高：\"",[51,17054,1586],{"class":69},[51,17056,1608],{"class":65},[51,17058,17060,17062,17064,17067,17069,17072,17074],{"class":53,"line":17059},71,[51,17061,2402],{"class":65},[51,17063,1839],{"class":69},[51,17065,17066],{"class":65},"l1",[51,17068,1839],{"class":69},[51,17070,17071],{"class":65},"w1",[51,17073,1839],{"class":69},[51,17075,17076],{"class":65},"h1;\n",[51,17078,17080],{"class":53,"line":17079},72,[51,17081,17082],{"class":65},"    Cube c2;\n",[51,17084,17086,17089,17091],{"class":53,"line":17085},73,[51,17087,17088],{"class":65},"    c2.",[51,17090,16981],{"class":57},[51,17092,17093],{"class":65},"(l1,w1,h1);\n",[51,17095,17097,17099,17101,17104,17106,17109,17111,17113,17115],{"class":53,"line":17096},74,[51,17098,1960],{"class":65},[51,17100,1586],{"class":69},[51,17102,17103],{"class":61},"\"第二个立方体的表面积为：\"",[51,17105,1586],{"class":69},[51,17107,17108],{"class":65},"c2.",[51,17110,17007],{"class":57},[51,17112,2816],{"class":65},[51,17114,1586],{"class":69},[51,17116,1608],{"class":65},[51,17118,17120,17122,17124,17127,17129,17131,17133,17135,17137],{"class":53,"line":17119},75,[51,17121,1960],{"class":65},[51,17123,1586],{"class":69},[51,17125,17126],{"class":61},"\"第二个立方体的体积为：\"",[51,17128,1586],{"class":69},[51,17130,17108],{"class":65},[51,17132,17036],{"class":57},[51,17134,2816],{"class":65},[51,17136,1586],{"class":69},[51,17138,1608],{"class":65},[51,17140,17142],{"class":53,"line":17141},76,[51,17143,206],{"emptyLinePlaceholder":205},[51,17145,17147],{"class":53,"line":17146},77,[51,17148,17149],{"class":601},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[51,17151,17153,17155,17157,17160,17162],{"class":53,"line":17152},78,[51,17154,1960],{"class":65},[51,17156,1586],{"class":69},[51,17158,17159],{"class":61},"\"内部函数判断结果：\"",[51,17161,1586],{"class":69},[51,17163,1608],{"class":65},[51,17165,17167,17169,17171,17174],{"class":53,"line":17166},79,[51,17168,3488],{"class":69},[51,17170,16864],{"class":65},[51,17172,17173],{"class":57},"isEqual",[51,17175,17176],{"class":65},"(c2))\n",[51,17178,17180],{"class":53,"line":17179},80,[51,17181,2420],{"class":65},[51,17183,17185,17187,17189,17192,17194],{"class":53,"line":17184},81,[51,17186,3838],{"class":65},[51,17188,1586],{"class":69},[51,17190,17191],{"class":61},"\"两个立方体相等\"",[51,17193,1586],{"class":69},[51,17195,1608],{"class":65},[51,17197,17199],{"class":53,"line":17198},82,[51,17200,2577],{"class":65},[51,17202,17204],{"class":53,"line":17203},83,[51,17205,17206],{"class":69},"    else\n",[51,17208,17210],{"class":53,"line":17209},84,[51,17211,2420],{"class":65},[51,17213,17215,17217,17219,17222,17224],{"class":53,"line":17214},85,[51,17216,3838],{"class":65},[51,17218,1586],{"class":69},[51,17220,17221],{"class":61},"\"两个立方体不相等\"",[51,17223,1586],{"class":69},[51,17225,1608],{"class":65},[51,17227,17229],{"class":53,"line":17228},86,[51,17230,2577],{"class":65},[51,17232,17234],{"class":53,"line":17233},87,[51,17235,206],{"emptyLinePlaceholder":205},[51,17237,17239,17241,17243,17246,17248],{"class":53,"line":17238},88,[51,17240,1960],{"class":65},[51,17242,1586],{"class":69},[51,17244,17245],{"class":61},"\"全局函数判断结果：\"",[51,17247,1586],{"class":69},[51,17249,1608],{"class":65},[51,17251,17253,17255,17257,17259],{"class":53,"line":17252},89,[51,17254,3488],{"class":69},[51,17256,2060],{"class":65},[51,17258,17173],{"class":57},[51,17260,17261],{"class":65},"(c1, c2))\n",[51,17263,17265],{"class":53,"line":17264},90,[51,17266,2420],{"class":65},[51,17268,17270,17272,17274,17276,17278],{"class":53,"line":17269},91,[51,17271,3838],{"class":65},[51,17273,1586],{"class":69},[51,17275,17191],{"class":61},[51,17277,1586],{"class":69},[51,17279,1608],{"class":65},[51,17281,17283],{"class":53,"line":17282},92,[51,17284,2577],{"class":65},[51,17286,17288],{"class":53,"line":17287},93,[51,17289,17206],{"class":69},[51,17291,17293],{"class":53,"line":17292},94,[51,17294,2420],{"class":65},[51,17296,17298,17300,17302,17304,17306],{"class":53,"line":17297},95,[51,17299,3838],{"class":65},[51,17301,1586],{"class":69},[51,17303,17221],{"class":61},[51,17305,1586],{"class":69},[51,17307,1608],{"class":65},[51,17309,17311],{"class":53,"line":17310},96,[51,17312,2577],{"class":65},[51,17314,17316],{"class":53,"line":17315},97,[51,17317,1974],{"class":65},[19,17319,17320],{"start":185},[22,17321,17322],{},[691,17323,17324],{},"练习案例2：点和圆的关系",[1549,17326,17327],{},[22,17328,17329],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[41,17331,17333],{"className":534,"code":17332,"language":536,"meta":46,"style":46},"#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",[48,17334,17335,17341,17351,17358,17365,17369,17373,17378,17412,17417,17433,17447,17451,17455,17462,17469,17473,17479,17483,17487,17491,17513,17536,17541,17555,17570,17574,17578,17584,17589,17594,17598,17624,17628,17658,17686,17714,17731,17735,17748,17752,17756,17760,17773,17777,17781,17789,17793,17797,17801,17806,17810,17821,17828,17837,17847,17858,17865,17878,17889,17899,17910,17917,17931,17936,17946,17954],{"__ignoreMap":46},[51,17336,17337,17339],{"class":53,"line":54},[51,17338,2340],{"class":69},[51,17340,2343],{"class":61},[51,17342,17343,17345,17347,17349],{"class":53,"line":185},[51,17344,2348],{"class":69},[51,17346,2351],{"class":69},[51,17348,2354],{"class":57},[51,17350,1703],{"class":65},[51,17352,17353,17355],{"class":53,"line":202},[51,17354,2340],{"class":69},[51,17356,17357],{"class":61},"\u003Ccmath>\n",[51,17359,17360,17362],{"class":53,"line":209},[51,17361,15078],{"class":69},[51,17363,17364],{"class":57}," Point\n",[51,17366,17367],{"class":53,"line":223},[51,17368,1955],{"class":65},[51,17370,17371],{"class":53,"line":237},[51,17372,15100],{"class":69},[51,17374,17375],{"class":53,"line":242},[51,17376,17377],{"class":601},"    \u002F\u002F赋值\n",[51,17379,17380,17382,17385,17387,17389,17392,17394,17396,17399,17402,17404,17407,17409],{"class":53,"line":257},[51,17381,15293],{"class":69},[51,17383,17384],{"class":57}," setPoint",[51,17386,546],{"class":65},[51,17388,14421],{"class":69},[51,17390,17391],{"class":248}," x",[51,17393,12819],{"class":65},[51,17395,14421],{"class":69},[51,17397,17398],{"class":248}," y",[51,17400,17401],{"class":65},") { m_x ",[51,17403,70],{"class":69},[51,17405,17406],{"class":65}," x; m_y ",[51,17408,70],{"class":69},[51,17410,17411],{"class":65}," y; }\n",[51,17413,17414],{"class":53,"line":262},[51,17415,17416],{"class":601},"    \u002F\u002F获取坐标\n",[51,17418,17419,17421,17424,17427,17430],{"class":53,"line":285},[51,17420,15122],{"class":69},[51,17422,17423],{"class":57}," getX",[51,17425,17426],{"class":65},"() { ",[51,17428,17429],{"class":69},"return",[51,17431,17432],{"class":65}," m_x; }\n",[51,17434,17435,17437,17440,17442,17444],{"class":53,"line":296},[51,17436,15122],{"class":69},[51,17438,17439],{"class":57}," getY",[51,17441,17426],{"class":65},[51,17443,17429],{"class":69},[51,17445,17446],{"class":65}," m_y; }\n",[51,17448,17449],{"class":53,"line":307},[51,17450,206],{"emptyLinePlaceholder":205},[51,17452,17453],{"class":53,"line":324},[51,17454,15606],{"class":69},[51,17456,17457,17459],{"class":53,"line":329},[51,17458,15122],{"class":69},[51,17460,17461],{"class":65}," m_x;\n",[51,17463,17464,17466],{"class":53,"line":334},[51,17465,15122],{"class":69},[51,17467,17468],{"class":65}," m_y;\n",[51,17470,17471],{"class":53,"line":340},[51,17472,4381],{"class":65},[51,17474,17475,17477],{"class":53,"line":345},[51,17476,15078],{"class":69},[51,17478,15081],{"class":57},[51,17480,17481],{"class":53,"line":357},[51,17482,1955],{"class":65},[51,17484,17485],{"class":53,"line":366},[51,17486,15100],{"class":69},[51,17488,17489],{"class":53,"line":383},[51,17490,17377],{"class":601},[51,17492,17493,17495,17498,17500,17502,17505,17508,17510],{"class":53,"line":392},[51,17494,15293],{"class":69},[51,17496,17497],{"class":57}," setRadius",[51,17499,546],{"class":65},[51,17501,14421],{"class":69},[51,17503,17504],{"class":248}," r",[51,17506,17507],{"class":65},") { m_r ",[51,17509,70],{"class":69},[51,17511,17512],{"class":65}," r; }\n",[51,17514,17515,17517,17520,17522,17525,17528,17531,17533],{"class":53,"line":403},[51,17516,15293],{"class":69},[51,17518,17519],{"class":57}," setCenter",[51,17521,546],{"class":65},[51,17523,17524],{"class":57},"Point",[51,17526,17527],{"class":248}," center",[51,17529,17530],{"class":65},") { m_center ",[51,17532,70],{"class":69},[51,17534,17535],{"class":65}," center; }\n",[51,17537,17538],{"class":53,"line":409},[51,17539,17540],{"class":601},"    \u002F\u002F获取属性\n",[51,17542,17543,17545,17548,17550,17552],{"class":53,"line":414},[51,17544,15122],{"class":69},[51,17546,17547],{"class":57}," getRadius",[51,17549,17426],{"class":65},[51,17551,17429],{"class":69},[51,17553,17554],{"class":65}," m_r; }\n",[51,17556,17557,17560,17563,17565,17567],{"class":53,"line":433},[51,17558,17559],{"class":57},"    Point",[51,17561,17562],{"class":57}," getCenter",[51,17564,17426],{"class":65},[51,17566,17429],{"class":69},[51,17568,17569],{"class":65}," m_center; }\n",[51,17571,17572],{"class":53,"line":439},[51,17573,206],{"emptyLinePlaceholder":205},[51,17575,17576],{"class":53,"line":444},[51,17577,15606],{"class":69},[51,17579,17580,17582],{"class":53,"line":453},[51,17581,15122],{"class":69},[51,17583,15112],{"class":65},[51,17585,17586],{"class":53,"line":2174},[51,17587,17588],{"class":601},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[51,17590,17591],{"class":53,"line":2965},[51,17592,17593],{"class":65},"    Point m_center;\n",[51,17595,17596],{"class":53,"line":2979},[51,17597,4381],{"class":65},[51,17599,17600,17602,17605,17607,17610,17612,17614,17616,17618,17620,17622],{"class":53,"line":2987},[51,17601,5748],{"class":69},[51,17603,17604],{"class":57}," isInCircle",[51,17606,546],{"class":65},[51,17608,17609],{"class":57},"Circle",[51,17611,10968],{"class":69},[51,17613,830],{"class":248},[51,17615,920],{"class":65},[51,17617,17524],{"class":57},[51,17619,10968],{"class":69},[51,17621,10],{"class":248},[51,17623,282],{"class":65},[51,17625,17626],{"class":53,"line":2992},[51,17627,1955],{"class":65},[51,17629,17630,17632,17635,17637,17639,17642,17645,17648,17650,17652,17654,17656],{"class":53,"line":2998},[51,17631,15122],{"class":69},[51,17633,17634],{"class":65}," dx ",[51,17636,70],{"class":69},[51,17638,16725],{"class":65},[51,17640,17641],{"class":57},"getCenter",[51,17643,17644],{"class":65},"().",[51,17646,17647],{"class":57},"getX",[51,17649,13434],{"class":65},[51,17651,1074],{"class":69},[51,17653,16271],{"class":65},[51,17655,17647],{"class":57},[51,17657,6020],{"class":65},[51,17659,17660,17662,17665,17667,17669,17671,17673,17676,17678,17680,17682,17684],{"class":53,"line":3004},[51,17661,15122],{"class":69},[51,17663,17664],{"class":65}," dy ",[51,17666,70],{"class":69},[51,17668,16725],{"class":65},[51,17670,17641],{"class":57},[51,17672,17644],{"class":65},[51,17674,17675],{"class":57},"getY",[51,17677,13434],{"class":65},[51,17679,1074],{"class":69},[51,17681,16271],{"class":65},[51,17683,17675],{"class":57},[51,17685,6020],{"class":65},[51,17687,17688,17690,17693,17695,17698,17701,17703,17705,17707,17709,17711],{"class":53,"line":3009},[51,17689,15122],{"class":69},[51,17691,17692],{"class":65}," distance ",[51,17694,70],{"class":69},[51,17696,17697],{"class":57}," sqrt",[51,17699,17700],{"class":65},"(dx ",[51,17702,997],{"class":69},[51,17704,17634],{"class":65},[51,17706,1023],{"class":69},[51,17708,17664],{"class":65},[51,17710,997],{"class":69},[51,17712,17713],{"class":65}," dy);\n",[51,17715,17716,17718,17721,17723,17725,17728],{"class":53,"line":8332},[51,17717,3488],{"class":69},[51,17719,17720],{"class":65}," (distance ",[51,17722,1452],{"class":69},[51,17724,16725],{"class":65},[51,17726,17727],{"class":57},"getRadius",[51,17729,17730],{"class":65},"())\n",[51,17732,17733],{"class":53,"line":8356},[51,17734,2420],{"class":65},[51,17736,17737,17739,17741,17744,17746],{"class":53,"line":8361},[51,17738,10053],{"class":65},[51,17740,1586],{"class":69},[51,17742,17743],{"class":61}," \"点在圆内\"",[51,17745,1854],{"class":69},[51,17747,9224],{"class":65},[51,17749,17750],{"class":53,"line":8367},[51,17751,2577],{"class":65},[51,17753,17754],{"class":53,"line":8394},[51,17755,17206],{"class":69},[51,17757,17758],{"class":53,"line":8399},[51,17759,2420],{"class":65},[51,17761,17762,17764,17766,17769,17771],{"class":53,"line":8405},[51,17763,10053],{"class":65},[51,17765,1586],{"class":69},[51,17767,17768],{"class":61}," \"点在圆外\"",[51,17770,1854],{"class":69},[51,17772,9224],{"class":65},[51,17774,17775],{"class":53,"line":8417},[51,17776,2577],{"class":65},[51,17778,17779],{"class":53,"line":8429},[51,17780,1974],{"class":65},[51,17782,17783,17785,17787],{"class":53,"line":8441},[51,17784,549],{"class":69},[51,17786,2363],{"class":57},[51,17788,2366],{"class":65},[51,17790,17791],{"class":53,"line":10100},[51,17792,1955],{"class":65},[51,17794,17795],{"class":53,"line":10125},[51,17796,15437],{"class":601},[51,17798,17799],{"class":53,"line":10148},[51,17800,15184],{"class":65},[51,17802,17803],{"class":53,"line":10172},[51,17804,17805],{"class":65},"    Point p1;\n",[51,17807,17808],{"class":53,"line":10177},[51,17809,17377],{"class":601},[51,17811,17812,17814,17816,17819],{"class":53,"line":10182},[51,17813,1960],{"class":65},[51,17815,1586],{"class":69},[51,17817,17818],{"class":61},"\"请输入圆的半径：\"",[51,17820,1703],{"class":65},[51,17822,17823,17825],{"class":53,"line":10187},[51,17824,15122],{"class":69},[51,17826,17827],{"class":65}," r;\n",[51,17829,17830,17832,17834],{"class":53,"line":10196},[51,17831,2402],{"class":65},[51,17833,1839],{"class":69},[51,17835,17836],{"class":65},"r;\n",[51,17838,17839,17841,17844],{"class":53,"line":10201},[51,17840,16978],{"class":65},[51,17842,17843],{"class":57},"setRadius",[51,17845,17846],{"class":65},"(r);\n",[51,17848,17849,17851,17853,17856],{"class":53,"line":10207},[51,17850,1960],{"class":65},[51,17852,1586],{"class":69},[51,17854,17855],{"class":61},"\"请输入圆心坐标：\"",[51,17857,1703],{"class":65},[51,17859,17860,17862],{"class":53,"line":10228},[51,17861,15122],{"class":69},[51,17863,17864],{"class":65}," x, y;\n",[51,17866,17867,17869,17871,17873,17875],{"class":53,"line":10234},[51,17868,2402],{"class":65},[51,17870,1839],{"class":69},[51,17872,1362],{"class":65},[51,17874,1839],{"class":69},[51,17876,17877],{"class":65},"y;\n",[51,17879,17880,17883,17886],{"class":53,"line":10248},[51,17881,17882],{"class":65},"    p1.",[51,17884,17885],{"class":57},"setPoint",[51,17887,17888],{"class":65},"(x, y);\n",[51,17890,17891,17893,17896],{"class":53,"line":10254},[51,17892,16978],{"class":65},[51,17894,17895],{"class":57},"setCenter",[51,17897,17898],{"class":65},"(p1);\n",[51,17900,17901,17903,17905,17908],{"class":53,"line":10281},[51,17902,1960],{"class":65},[51,17904,1586],{"class":69},[51,17906,17907],{"class":61},"\"请输入测试点坐标：\"",[51,17909,1703],{"class":65},[51,17911,17912,17914],{"class":53,"line":10290},[51,17913,15122],{"class":69},[51,17915,17916],{"class":65}," x1, y1;\n",[51,17918,17919,17921,17923,17926,17928],{"class":53,"line":10296},[51,17920,2402],{"class":65},[51,17922,1839],{"class":69},[51,17924,17925],{"class":65},"x1",[51,17927,1839],{"class":69},[51,17929,17930],{"class":65},"y1;\n",[51,17932,17933],{"class":53,"line":10304},[51,17934,17935],{"class":65},"    Point p2;\n",[51,17937,17938,17941,17943],{"class":53,"line":10309},[51,17939,17940],{"class":65},"    p2.",[51,17942,17885],{"class":57},[51,17944,17945],{"class":65},"(x1, y1);\n",[51,17947,17948,17951],{"class":53,"line":16987},[51,17949,17950],{"class":57},"    isInCircle",[51,17952,17953],{"class":65},"(c1, p2);\n",[51,17955,17956],{"class":53,"line":16993},[51,17957,1974],{"class":65},[10,17959,17960],{},"在类中可以让另一个类作为本来的成员",[10,17962,17963],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[10,17965,17966],{},"创建point.h",[41,17968,17970],{"className":534,"code":17969,"language":536,"meta":46,"style":46},"#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",[48,17971,17972,17983,17989,17999,18005,18009,18014,18018,18022,18042,18046,18054,18062,18066,18070,18076,18082],{"__ignoreMap":46},[51,17973,17974,17977,17980],{"class":53,"line":54},[51,17975,17976],{"class":69},"#pragma",[51,17978,17979],{"class":57}," once",[51,17981,17982],{"class":601}," \u002F\u002F防止头文件重复包含\n",[51,17984,17985,17987],{"class":53,"line":185},[51,17986,2340],{"class":69},[51,17988,2343],{"class":61},[51,17990,17991,17993,17995,17997],{"class":53,"line":202},[51,17992,2348],{"class":69},[51,17994,2351],{"class":69},[51,17996,2354],{"class":57},[51,17998,1703],{"class":65},[51,18000,18001,18003],{"class":53,"line":209},[51,18002,15078],{"class":69},[51,18004,17364],{"class":57},[51,18006,18007],{"class":53,"line":223},[51,18008,1955],{"class":65},[51,18010,18011],{"class":53,"line":237},[51,18012,18013],{"class":601},"\u002F\u002F做好声明与变量定义就可以\n",[51,18015,18016],{"class":53,"line":242},[51,18017,15100],{"class":69},[51,18019,18020],{"class":53,"line":257},[51,18021,17377],{"class":601},[51,18023,18024,18026,18028,18030,18032,18034,18036,18038,18040],{"class":53,"line":262},[51,18025,15293],{"class":69},[51,18027,17384],{"class":57},[51,18029,546],{"class":65},[51,18031,14421],{"class":69},[51,18033,17391],{"class":248},[51,18035,12819],{"class":65},[51,18037,14421],{"class":69},[51,18039,17398],{"class":248},[51,18041,3107],{"class":65},[51,18043,18044],{"class":53,"line":285},[51,18045,17416],{"class":601},[51,18047,18048,18050,18052],{"class":53,"line":296},[51,18049,15122],{"class":69},[51,18051,17423],{"class":57},[51,18053,6020],{"class":65},[51,18055,18056,18058,18060],{"class":53,"line":307},[51,18057,15122],{"class":69},[51,18059,17439],{"class":57},[51,18061,6020],{"class":65},[51,18063,18064],{"class":53,"line":324},[51,18065,206],{"emptyLinePlaceholder":205},[51,18067,18068],{"class":53,"line":329},[51,18069,15606],{"class":69},[51,18071,18072,18074],{"class":53,"line":334},[51,18073,15122],{"class":69},[51,18075,17461],{"class":65},[51,18077,18078,18080],{"class":53,"line":340},[51,18079,15122],{"class":69},[51,18081,17468],{"class":65},[51,18083,18084],{"class":53,"line":345},[51,18085,4381],{"class":65},[10,18087,18088],{},"创建point.cpp",[41,18090,18092],{"className":534,"code":18091,"language":536,"meta":46,"style":46},"#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",[48,18093,18094,18101,18106,18140,18144,18160],{"__ignoreMap":46},[51,18095,18096,18098],{"class":53,"line":54},[51,18097,2340],{"class":69},[51,18099,18100],{"class":61},"\u003Cpoint.h>\n",[51,18102,18103],{"class":53,"line":185},[51,18104,18105],{"class":601},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[51,18107,18108,18110,18113,18116,18118,18120,18122,18124,18126,18128,18130,18132,18134,18136,18138],{"class":53,"line":202},[51,18109,15293],{"class":69},[51,18111,18112],{"class":57}," Point",[51,18114,18115],{"class":65},"::",[51,18117,17885],{"class":57},[51,18119,546],{"class":65},[51,18121,14421],{"class":69},[51,18123,17391],{"class":248},[51,18125,12819],{"class":65},[51,18127,14421],{"class":69},[51,18129,17398],{"class":248},[51,18131,17401],{"class":65},[51,18133,70],{"class":69},[51,18135,17406],{"class":65},[51,18137,70],{"class":69},[51,18139,17411],{"class":65},[51,18141,18142],{"class":53,"line":209},[51,18143,17416],{"class":601},[51,18145,18146,18148,18150,18152,18154,18156,18158],{"class":53,"line":223},[51,18147,15122],{"class":69},[51,18149,18112],{"class":57},[51,18151,18115],{"class":65},[51,18153,17647],{"class":57},[51,18155,17426],{"class":65},[51,18157,17429],{"class":69},[51,18159,17432],{"class":65},[51,18161,18162,18164,18166,18168,18170,18172,18174],{"class":53,"line":237},[51,18163,15122],{"class":69},[51,18165,18112],{"class":57},[51,18167,18115],{"class":65},[51,18169,17675],{"class":57},[51,18171,17426],{"class":65},[51,18173,17429],{"class":69},[51,18175,17446],{"class":65},[10,18177,18178],{},"创建circle.h",[41,18180,18182],{"className":534,"code":18181,"language":536,"meta":46,"style":46},"#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",[48,18183,18184,18191,18197,18207,18213,18219,18223,18227,18231,18245,18259,18263,18271,18279,18283,18287,18293,18297,18301],{"__ignoreMap":46},[51,18185,18186,18188],{"class":53,"line":54},[51,18187,17976],{"class":69},[51,18189,18190],{"class":57}," once\n",[51,18192,18193,18195],{"class":53,"line":185},[51,18194,2340],{"class":69},[51,18196,2343],{"class":61},[51,18198,18199,18201,18203,18205],{"class":53,"line":202},[51,18200,2348],{"class":69},[51,18202,2351],{"class":69},[51,18204,2354],{"class":57},[51,18206,1703],{"class":65},[51,18208,18209,18211],{"class":53,"line":209},[51,18210,2340],{"class":69},[51,18212,18100],{"class":61},[51,18214,18215,18217],{"class":53,"line":223},[51,18216,15078],{"class":69},[51,18218,15081],{"class":57},[51,18220,18221],{"class":53,"line":237},[51,18222,1955],{"class":65},[51,18224,18225],{"class":53,"line":242},[51,18226,15100],{"class":69},[51,18228,18229],{"class":53,"line":257},[51,18230,17377],{"class":601},[51,18232,18233,18235,18237,18239,18241,18243],{"class":53,"line":262},[51,18234,15293],{"class":69},[51,18236,17497],{"class":57},[51,18238,546],{"class":65},[51,18240,14421],{"class":69},[51,18242,17504],{"class":248},[51,18244,3107],{"class":65},[51,18246,18247,18249,18251,18253,18255,18257],{"class":53,"line":285},[51,18248,15293],{"class":69},[51,18250,17519],{"class":57},[51,18252,546],{"class":65},[51,18254,17524],{"class":57},[51,18256,17527],{"class":248},[51,18258,3107],{"class":65},[51,18260,18261],{"class":53,"line":296},[51,18262,17540],{"class":601},[51,18264,18265,18267,18269],{"class":53,"line":307},[51,18266,15122],{"class":69},[51,18268,17547],{"class":57},[51,18270,6020],{"class":65},[51,18272,18273,18275,18277],{"class":53,"line":324},[51,18274,17559],{"class":57},[51,18276,17562],{"class":57},[51,18278,6020],{"class":65},[51,18280,18281],{"class":53,"line":329},[51,18282,206],{"emptyLinePlaceholder":205},[51,18284,18285],{"class":53,"line":334},[51,18286,15606],{"class":69},[51,18288,18289,18291],{"class":53,"line":340},[51,18290,15122],{"class":69},[51,18292,15112],{"class":65},[51,18294,18295],{"class":53,"line":345},[51,18296,17588],{"class":601},[51,18298,18299],{"class":53,"line":357},[51,18300,17593],{"class":65},[51,18302,18303],{"class":53,"line":366},[51,18304,4381],{"class":65},[10,18306,18307],{},"创建circle.cpp",[41,18309,18311],{"className":534,"code":18310,"language":536,"meta":46,"style":46},"#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",[48,18312,18313,18320,18343,18365,18370,18386],{"__ignoreMap":46},[51,18314,18315,18317],{"class":53,"line":54},[51,18316,2340],{"class":69},[51,18318,18319],{"class":61},"\u003Ccircle.h>\n",[51,18321,18322,18324,18327,18329,18331,18333,18335,18337,18339,18341],{"class":53,"line":185},[51,18323,5748],{"class":69},[51,18325,18326],{"class":57}," Circle",[51,18328,18115],{"class":65},[51,18330,17843],{"class":57},[51,18332,546],{"class":65},[51,18334,14421],{"class":69},[51,18336,17504],{"class":248},[51,18338,17507],{"class":65},[51,18340,70],{"class":69},[51,18342,17512],{"class":65},[51,18344,18345,18347,18349,18351,18353,18355,18357,18359,18361,18363],{"class":53,"line":202},[51,18346,5748],{"class":69},[51,18348,18326],{"class":57},[51,18350,18115],{"class":65},[51,18352,17895],{"class":57},[51,18354,546],{"class":65},[51,18356,17524],{"class":57},[51,18358,17527],{"class":248},[51,18360,17530],{"class":65},[51,18362,70],{"class":69},[51,18364,17535],{"class":65},[51,18366,18367],{"class":53,"line":209},[51,18368,18369],{"class":601},"\u002F\u002F获取属性\n",[51,18371,18372,18374,18376,18378,18380,18382,18384],{"class":53,"line":223},[51,18373,14421],{"class":69},[51,18375,18326],{"class":57},[51,18377,18115],{"class":65},[51,18379,17727],{"class":57},[51,18381,17426],{"class":65},[51,18383,17429],{"class":69},[51,18385,17554],{"class":65},[51,18387,18388,18390,18392,18394,18396,18398,18400],{"class":53,"line":237},[51,18389,17524],{"class":57},[51,18391,18326],{"class":57},[51,18393,18115],{"class":65},[51,18395,17641],{"class":57},[51,18397,17426],{"class":65},[51,18399,17429],{"class":69},[51,18401,17569],{"class":65},[10,18403,18404],{},"使用封装的类",[41,18406,18408],{"className":534,"code":18407,"language":536,"meta":46,"style":46},"#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",[48,18409,18410,18416,18426,18432,18438,18462,18466,18492,18518,18542,18556,18560,18572,18576,18580,18584,18596,18600,18604,18612,18616,18620,18624,18628,18632,18642,18648,18656,18664,18674,18680,18692,18700,18708,18718,18724,18736,18740,18748,18754],{"__ignoreMap":46},[51,18411,18412,18414],{"class":53,"line":54},[51,18413,2340],{"class":69},[51,18415,2343],{"class":61},[51,18417,18418,18420,18422,18424],{"class":53,"line":185},[51,18419,2348],{"class":69},[51,18421,2351],{"class":69},[51,18423,2354],{"class":57},[51,18425,1703],{"class":65},[51,18427,18428,18430],{"class":53,"line":202},[51,18429,2340],{"class":69},[51,18431,18319],{"class":61},[51,18433,18434,18436],{"class":53,"line":209},[51,18435,2340],{"class":69},[51,18437,18100],{"class":61},[51,18439,18440,18442,18444,18446,18448,18450,18452,18454,18456,18458,18460],{"class":53,"line":223},[51,18441,5748],{"class":69},[51,18443,17604],{"class":57},[51,18445,546],{"class":65},[51,18447,17609],{"class":57},[51,18449,10968],{"class":69},[51,18451,830],{"class":248},[51,18453,920],{"class":65},[51,18455,17524],{"class":57},[51,18457,10968],{"class":69},[51,18459,10],{"class":248},[51,18461,282],{"class":65},[51,18463,18464],{"class":53,"line":237},[51,18465,1955],{"class":65},[51,18467,18468,18470,18472,18474,18476,18478,18480,18482,18484,18486,18488,18490],{"class":53,"line":242},[51,18469,15122],{"class":69},[51,18471,17634],{"class":65},[51,18473,70],{"class":69},[51,18475,16725],{"class":65},[51,18477,17641],{"class":57},[51,18479,17644],{"class":65},[51,18481,17647],{"class":57},[51,18483,13434],{"class":65},[51,18485,1074],{"class":69},[51,18487,16271],{"class":65},[51,18489,17647],{"class":57},[51,18491,6020],{"class":65},[51,18493,18494,18496,18498,18500,18502,18504,18506,18508,18510,18512,18514,18516],{"class":53,"line":257},[51,18495,15122],{"class":69},[51,18497,17664],{"class":65},[51,18499,70],{"class":69},[51,18501,16725],{"class":65},[51,18503,17641],{"class":57},[51,18505,17644],{"class":65},[51,18507,17675],{"class":57},[51,18509,13434],{"class":65},[51,18511,1074],{"class":69},[51,18513,16271],{"class":65},[51,18515,17675],{"class":57},[51,18517,6020],{"class":65},[51,18519,18520,18522,18524,18526,18528,18530,18532,18534,18536,18538,18540],{"class":53,"line":262},[51,18521,15122],{"class":69},[51,18523,17692],{"class":65},[51,18525,70],{"class":69},[51,18527,17697],{"class":57},[51,18529,17700],{"class":65},[51,18531,997],{"class":69},[51,18533,17634],{"class":65},[51,18535,1023],{"class":69},[51,18537,17664],{"class":65},[51,18539,997],{"class":69},[51,18541,17713],{"class":65},[51,18543,18544,18546,18548,18550,18552,18554],{"class":53,"line":285},[51,18545,3488],{"class":69},[51,18547,17720],{"class":65},[51,18549,1452],{"class":69},[51,18551,16725],{"class":65},[51,18553,17727],{"class":57},[51,18555,17730],{"class":65},[51,18557,18558],{"class":53,"line":296},[51,18559,2420],{"class":65},[51,18561,18562,18564,18566,18568,18570],{"class":53,"line":307},[51,18563,10053],{"class":65},[51,18565,1586],{"class":69},[51,18567,17743],{"class":61},[51,18569,1854],{"class":69},[51,18571,9224],{"class":65},[51,18573,18574],{"class":53,"line":324},[51,18575,2577],{"class":65},[51,18577,18578],{"class":53,"line":329},[51,18579,17206],{"class":69},[51,18581,18582],{"class":53,"line":334},[51,18583,2420],{"class":65},[51,18585,18586,18588,18590,18592,18594],{"class":53,"line":340},[51,18587,10053],{"class":65},[51,18589,1586],{"class":69},[51,18591,17768],{"class":61},[51,18593,1854],{"class":69},[51,18595,9224],{"class":65},[51,18597,18598],{"class":53,"line":345},[51,18599,2577],{"class":65},[51,18601,18602],{"class":53,"line":357},[51,18603,1974],{"class":65},[51,18605,18606,18608,18610],{"class":53,"line":366},[51,18607,549],{"class":69},[51,18609,2363],{"class":57},[51,18611,2366],{"class":65},[51,18613,18614],{"class":53,"line":383},[51,18615,1955],{"class":65},[51,18617,18618],{"class":53,"line":392},[51,18619,15437],{"class":601},[51,18621,18622],{"class":53,"line":403},[51,18623,15184],{"class":65},[51,18625,18626],{"class":53,"line":409},[51,18627,17805],{"class":65},[51,18629,18630],{"class":53,"line":414},[51,18631,17377],{"class":601},[51,18633,18634,18636,18638,18640],{"class":53,"line":433},[51,18635,1960],{"class":65},[51,18637,1586],{"class":69},[51,18639,17818],{"class":61},[51,18641,1703],{"class":65},[51,18643,18644,18646],{"class":53,"line":439},[51,18645,15122],{"class":69},[51,18647,17827],{"class":65},[51,18649,18650,18652,18654],{"class":53,"line":444},[51,18651,2402],{"class":65},[51,18653,1839],{"class":69},[51,18655,17836],{"class":65},[51,18657,18658,18660,18662],{"class":53,"line":453},[51,18659,16978],{"class":65},[51,18661,17843],{"class":57},[51,18663,17846],{"class":65},[51,18665,18666,18668,18670,18672],{"class":53,"line":2174},[51,18667,1960],{"class":65},[51,18669,1586],{"class":69},[51,18671,17855],{"class":61},[51,18673,1703],{"class":65},[51,18675,18676,18678],{"class":53,"line":2965},[51,18677,15122],{"class":69},[51,18679,17864],{"class":65},[51,18681,18682,18684,18686,18688,18690],{"class":53,"line":2979},[51,18683,2402],{"class":65},[51,18685,1839],{"class":69},[51,18687,1362],{"class":65},[51,18689,1839],{"class":69},[51,18691,17877],{"class":65},[51,18693,18694,18696,18698],{"class":53,"line":2987},[51,18695,17882],{"class":65},[51,18697,17885],{"class":57},[51,18699,17888],{"class":65},[51,18701,18702,18704,18706],{"class":53,"line":2992},[51,18703,16978],{"class":65},[51,18705,17895],{"class":57},[51,18707,17898],{"class":65},[51,18709,18710,18712,18714,18716],{"class":53,"line":2998},[51,18711,1960],{"class":65},[51,18713,1586],{"class":69},[51,18715,17907],{"class":61},[51,18717,1703],{"class":65},[51,18719,18720,18722],{"class":53,"line":3004},[51,18721,15122],{"class":69},[51,18723,17916],{"class":65},[51,18725,18726,18728,18730,18732,18734],{"class":53,"line":3009},[51,18727,2402],{"class":65},[51,18729,1839],{"class":69},[51,18731,17925],{"class":65},[51,18733,1839],{"class":69},[51,18735,17930],{"class":65},[51,18737,18738],{"class":53,"line":8332},[51,18739,17935],{"class":65},[51,18741,18742,18744,18746],{"class":53,"line":8356},[51,18743,17940],{"class":65},[51,18745,17885],{"class":57},[51,18747,17945],{"class":65},[51,18749,18750,18752],{"class":53,"line":8361},[51,18751,17950],{"class":57},[51,18753,17953],{"class":65},[51,18755,18756],{"class":53,"line":8367},[51,18757,1974],{"class":65},[486,18759,18761],{"id":18760},"_82对象的初始化清理","8.2对象的初始化清理",[1549,18763,18764,18767],{},[22,18765,18766],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[22,18768,18769],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[513,18771,18773],{"id":18772},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[10,18775,18776,18777,18780],{},"对象的",[691,18778,18779],{},"初始化和清理","也是两个非常重要的安全问题",[10,18782,18783],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[10,18785,18786],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[10,18788,18789,18790,18793,18794,18797],{},"c++利用了",[691,18791,18792],{},"构造函数","和",[691,18795,18796],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[10,18799,18800,18801],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[691,18802,18803],{},"我们不提供构造和析构，编译器会提供",[10,18805,18806],{},[691,18807,18808],{},"编译器提供的构造函数和析构函数是空实现。",[1549,18810,18811,18814],{},[22,18812,18813],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[22,18815,18816,18817,18820],{},"析构函数：主要作用在于对象",[691,18818,18819],{},"销毁前","系统自动调用，执行一些清理工作。",[10,18822,18823,18826],{},[691,18824,18825],{},"构造函数语法：",[48,18827,18828],{},"类名(){}",[19,18830,18831,18834,18837,18840,18843],{},[22,18832,18833],{},"构造函数，没有返回值也不写void",[22,18835,18836],{},"函数名称与类名相同",[22,18838,18839],{},"构造函数可以有参数，因此可以发生重载",[22,18841,18842],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[22,18844,18845,18846,971],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[48,18847,18848],{},"Person(){}",[10,18850,18851,14179,18854],{},[691,18852,18853],{},"析构函数语法：",[48,18855,18856],{},"~类名(){}",[19,18858,18859,18862,18865,18871],{},[22,18860,18861],{},"析构函数，没有返回值也不写void",[22,18863,18864],{},"函数名称与类名相同,在名称前加上符号  ~",[22,18866,18867,18868],{},"析构函数不可以有参数，因此",[691,18869,18870],{},"不可以发生重载",[22,18872,18873],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[41,18875,18877],{"className":534,"code":18876,"language":536,"meta":46,"style":46},"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",[48,18878,18879,18885,18889,18893,18898,18905,18909,18922,18926,18931,18938,18942,18955,18959,18963,18967,18971,18979,18983,18991,18995,18999,19007,19011,19016,19020,19027,19031,19044,19048,19056],{"__ignoreMap":46},[51,18880,18881,18883],{"class":53,"line":54},[51,18882,15078],{"class":69},[51,18884,15555],{"class":57},[51,18886,18887],{"class":53,"line":185},[51,18888,1955],{"class":65},[51,18890,18891],{"class":53,"line":202},[51,18892,15100],{"class":69},[51,18894,18895],{"class":53,"line":209},[51,18896,18897],{"class":601},"    \u002F\u002F构造函数\n",[51,18899,18900,18903],{"class":53,"line":223},[51,18901,18902],{"class":57},"    Person",[51,18904,2366],{"class":65},[51,18906,18907],{"class":53,"line":237},[51,18908,2420],{"class":65},[51,18910,18911,18913,18915,18918,18920],{"class":53,"line":242},[51,18912,10053],{"class":65},[51,18914,1586],{"class":69},[51,18916,18917],{"class":61}," \"Person的构造函数调用\"",[51,18919,1854],{"class":69},[51,18921,9224],{"class":65},[51,18923,18924],{"class":53,"line":257},[51,18925,2577],{"class":65},[51,18927,18928],{"class":53,"line":262},[51,18929,18930],{"class":601},"    \u002F\u002F析构函数\n",[51,18932,18933,18936],{"class":53,"line":285},[51,18934,18935],{"class":57},"    ~Person",[51,18937,2366],{"class":65},[51,18939,18940],{"class":53,"line":296},[51,18941,2420],{"class":65},[51,18943,18944,18946,18948,18951,18953],{"class":53,"line":307},[51,18945,10053],{"class":65},[51,18947,1586],{"class":69},[51,18949,18950],{"class":61}," \"Person的析构函数调用\"",[51,18952,1854],{"class":69},[51,18954,9224],{"class":65},[51,18956,18957],{"class":53,"line":324},[51,18958,2577],{"class":65},[51,18960,18961],{"class":53,"line":329},[51,18962,206],{"emptyLinePlaceholder":205},[51,18964,18965],{"class":53,"line":334},[51,18966,4381],{"class":65},[51,18968,18969],{"class":53,"line":340},[51,18970,206],{"emptyLinePlaceholder":205},[51,18972,18973,18975,18977],{"class":53,"line":345},[51,18974,5748],{"class":69},[51,18976,5972],{"class":57},[51,18978,2366],{"class":65},[51,18980,18981],{"class":53,"line":357},[51,18982,1955],{"class":65},[51,18984,18985,18988],{"class":53,"line":366},[51,18986,18987],{"class":65},"    Person p;",[51,18989,18990],{"class":601},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[51,18992,18993],{"class":53,"line":383},[51,18994,1974],{"class":65},[51,18996,18997],{"class":53,"line":392},[51,18998,206],{"emptyLinePlaceholder":205},[51,19000,19001,19003,19005],{"class":53,"line":403},[51,19002,549],{"class":69},[51,19004,2363],{"class":57},[51,19006,11237],{"class":65},[51,19008,19009],{"class":53,"line":409},[51,19010,13594],{"class":65},[51,19012,19013],{"class":53,"line":414},[51,19014,19015],{"class":601},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[51,19017,19018],{"class":53,"line":433},[51,19019,206],{"emptyLinePlaceholder":205},[51,19021,19022,19024],{"class":53,"line":439},[51,19023,18987],{"class":65},[51,19025,19026],{"class":601},"\u002F\u002F只有构造函数\n",[51,19028,19029],{"class":53,"line":444},[51,19030,206],{"emptyLinePlaceholder":205},[51,19032,19033,19035,19037,19039,19041],{"class":53,"line":453},[51,19034,2693],{"class":57},[51,19036,546],{"class":65},[51,19038,2698],{"class":61},[51,19040,6350],{"class":65},[51,19042,19043],{"class":601},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[51,19045,19046],{"class":53,"line":2174},[51,19047,206],{"emptyLinePlaceholder":205},[51,19049,19050,19052,19054],{"class":53,"line":2965},[51,19051,4476],{"class":69},[51,19053,4479],{"class":278},[51,19055,1703],{"class":65},[51,19057,19058],{"class":53,"line":2979},[51,19059,1974],{"class":65},[10,19061,19062],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[513,19064,19066],{"id":19065},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[10,19068,19069],{},"两种分类方式：",[10,19071,19072],{},"​\t按参数分为： 有参构造和无参构造",[10,19074,19075],{},"​\t按类型分为： 普通构造和拷贝构造",[10,19077,19078],{},"三种调用方式：",[10,19080,19081],{},"​\t括号法",[10,19083,19084],{},"​\t显示法",[10,19086,19087],{},"​\t隐式转换法",[41,19089,19091],{"className":534,"code":19090,"language":536,"meta":46,"style":46},"#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",[48,19092,19093,19099,19109,19114,19119,19124,19129,19133,19141,19145,19149,19153,19159,19163,19176,19180,19192,19196,19205,19218,19222,19226,19232,19236,19249,19253,19258,19274,19278,19283,19292,19305,19309,19315,19319,19324,19332,19336,19341,19345,19353,19357,19362,19367,19372,19377,19382,19386,19391,19396,19401,19406,19410,19415,19420,19436,19448,19453,19457,19462,19467,19472,19476,19481,19495,19508,19512,19520,19524,19530,19536,19544],{"__ignoreMap":46},[51,19094,19095,19097],{"class":53,"line":54},[51,19096,2340],{"class":69},[51,19098,2343],{"class":61},[51,19100,19101,19103,19105,19107],{"class":53,"line":185},[51,19102,2348],{"class":69},[51,19104,2351],{"class":69},[51,19106,2354],{"class":57},[51,19108,1703],{"class":65},[51,19110,19111],{"class":53,"line":202},[51,19112,19113],{"class":601},"\u002F\u002F1.构造函数的分类及调用\n",[51,19115,19116],{"class":53,"line":209},[51,19117,19118],{"class":601},"\u002F\u002F分类\n",[51,19120,19121],{"class":53,"line":223},[51,19122,19123],{"class":601},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[51,19125,19126],{"class":53,"line":237},[51,19127,19128],{"class":601},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[51,19130,19131],{"class":53,"line":242},[51,19132,206],{"emptyLinePlaceholder":205},[51,19134,19135,19137,19139],{"class":53,"line":257},[51,19136,15078],{"class":69},[51,19138,15953],{"class":57},[51,19140,3062],{"class":65},[51,19142,19143],{"class":53,"line":262},[51,19144,1955],{"class":65},[51,19146,19147],{"class":53,"line":285},[51,19148,15100],{"class":69},[51,19150,19151],{"class":53,"line":296},[51,19152,18897],{"class":601},[51,19154,19155,19157],{"class":53,"line":307},[51,19156,18902],{"class":57},[51,19158,2366],{"class":65},[51,19160,19161],{"class":53,"line":324},[51,19162,2420],{"class":65},[51,19164,19165,19167,19169,19172,19174],{"class":53,"line":329},[51,19166,3838],{"class":65},[51,19168,1586],{"class":69},[51,19170,19171],{"class":61},"\"Person构造函数无参构造\"",[51,19173,1586],{"class":69},[51,19175,1608],{"class":65},[51,19177,19178],{"class":53,"line":334},[51,19179,2577],{"class":65},[51,19181,19182,19184,19186,19188,19190],{"class":53,"line":340},[51,19183,18902],{"class":57},[51,19185,546],{"class":65},[51,19187,549],{"class":69},[51,19189,1808],{"class":248},[51,19191,282],{"class":65},[51,19193,19194],{"class":53,"line":345},[51,19195,2420],{"class":65},[51,19197,19198,19201,19203],{"class":53,"line":357},[51,19199,19200],{"class":65},"        age",[51,19202,70],{"class":69},[51,19204,6581],{"class":65},[51,19206,19207,19209,19211,19214,19216],{"class":53,"line":366},[51,19208,3838],{"class":65},[51,19210,1586],{"class":69},[51,19212,19213],{"class":61},"\"Person构造函数有参构造\"",[51,19215,1586],{"class":69},[51,19217,1608],{"class":65},[51,19219,19220],{"class":53,"line":383},[51,19221,2577],{"class":65},[51,19223,19224],{"class":53,"line":392},[51,19225,18930],{"class":601},[51,19227,19228,19230],{"class":53,"line":403},[51,19229,18935],{"class":57},[51,19231,2366],{"class":65},[51,19233,19234],{"class":53,"line":409},[51,19235,2420],{"class":65},[51,19237,19238,19240,19242,19245,19247],{"class":53,"line":414},[51,19239,3838],{"class":65},[51,19241,1586],{"class":69},[51,19243,19244],{"class":61},"\"Person析构函数被调用\"",[51,19246,1586],{"class":69},[51,19248,1608],{"class":65},[51,19250,19251],{"class":53,"line":433},[51,19252,2577],{"class":65},[51,19254,19255],{"class":53,"line":439},[51,19256,19257],{"class":601},"    \u002F\u002F拷贝构造函数\n",[51,19259,19260,19262,19264,19266,19268,19270,19272],{"class":53,"line":444},[51,19261,18902],{"class":57},[51,19263,546],{"class":65},[51,19265,7176],{"class":69},[51,19267,15953],{"class":57},[51,19269,10968],{"class":69},[51,19271,10],{"class":248},[51,19273,282],{"class":65},[51,19275,19276],{"class":53,"line":453},[51,19277,2420],{"class":65},[51,19279,19280],{"class":53,"line":2174},[51,19281,19282],{"class":601},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[51,19284,19285,19287,19289],{"class":53,"line":2965},[51,19286,19200],{"class":65},[51,19288,70],{"class":69},[51,19290,19291],{"class":65},"p.age;\n",[51,19293,19294,19296,19298,19301,19303],{"class":53,"line":2979},[51,19295,3838],{"class":65},[51,19297,1586],{"class":69},[51,19299,19300],{"class":61},"\"Person拷贝构造函数被调用\"",[51,19302,1586],{"class":69},[51,19304,1608],{"class":65},[51,19306,19307],{"class":53,"line":2987},[51,19308,2577],{"class":65},[51,19310,19311,19313],{"class":53,"line":2992},[51,19312,2375],{"class":69},[51,19314,8181],{"class":65},[51,19316,19317],{"class":53,"line":2998},[51,19318,4381],{"class":65},[51,19320,19321],{"class":53,"line":3004},[51,19322,19323],{"class":601},"\u002F\u002F调用\n",[51,19325,19326,19328,19330],{"class":53,"line":3009},[51,19327,5748],{"class":69},[51,19329,5972],{"class":57},[51,19331,2366],{"class":65},[51,19333,19334],{"class":53,"line":8332},[51,19335,1955],{"class":65},[51,19337,19338],{"class":53,"line":8356},[51,19339,19340],{"class":601},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[51,19342,19343],{"class":53,"line":8361},[51,19344,1974],{"class":65},[51,19346,19347,19349,19351],{"class":53,"line":8367},[51,19348,5748],{"class":69},[51,19350,6041],{"class":57},[51,19352,2366],{"class":65},[51,19354,19355],{"class":53,"line":8394},[51,19356,1955],{"class":65},[51,19358,19359],{"class":53,"line":8399},[51,19360,19361],{"class":601},"    \u002F\u002F1.括号法\n",[51,19363,19364],{"class":53,"line":8405},[51,19365,19366],{"class":601},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[51,19368,19369],{"class":53,"line":8417},[51,19370,19371],{"class":601},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[51,19373,19374],{"class":53,"line":8429},[51,19375,19376],{"class":601},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[51,19378,19379],{"class":53,"line":8441},[51,19380,19381],{"class":601},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[51,19383,19384],{"class":53,"line":10100},[51,19385,206],{"emptyLinePlaceholder":205},[51,19387,19388],{"class":53,"line":10125},[51,19389,19390],{"class":601},"    \u002F\u002F注意事项\n",[51,19392,19393],{"class":53,"line":10148},[51,19394,19395],{"class":601},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[51,19397,19398],{"class":53,"line":10172},[51,19399,19400],{"class":601},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[51,19402,19403],{"class":53,"line":10177},[51,19404,19405],{"class":601},"    \u002F\u002F Person p4();\n",[51,19407,19408],{"class":53,"line":10182},[51,19409,206],{"emptyLinePlaceholder":205},[51,19411,19412],{"class":53,"line":10187},[51,19413,19414],{"class":601},"    \u002F\u002F2.显示法\n",[51,19416,19417],{"class":53,"line":10196},[51,19418,19419],{"class":65},"    Person p1;\n",[51,19421,19422,19425,19427,19430,19432,19434],{"class":53,"line":10201},[51,19423,19424],{"class":65},"    Person p2",[51,19426,70],{"class":69},[51,19428,19429],{"class":57},"Person",[51,19431,546],{"class":65},[51,19433,988],{"class":278},[51,19435,3107],{"class":65},[51,19437,19438,19441,19443,19445],{"class":53,"line":10207},[51,19439,19440],{"class":65},"    Person p3",[51,19442,70],{"class":69},[51,19444,19429],{"class":57},[51,19446,19447],{"class":65},"(p2);\n",[51,19449,19450],{"class":53,"line":10228},[51,19451,19452],{"class":601},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[51,19454,19455],{"class":53,"line":10234},[51,19456,206],{"emptyLinePlaceholder":205},[51,19458,19459],{"class":53,"line":10248},[51,19460,19461],{"class":601},"    \u002F\u002F 注意事项2\n",[51,19463,19464],{"class":53,"line":10254},[51,19465,19466],{"class":601},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[51,19468,19469],{"class":53,"line":10281},[51,19470,19471],{"class":601},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[51,19473,19474],{"class":53,"line":10290},[51,19475,206],{"emptyLinePlaceholder":205},[51,19477,19478],{"class":53,"line":10296},[51,19479,19480],{"class":601},"    \u002F\u002F3.隐士转换法\n",[51,19482,19483,19486,19488,19490,19492],{"class":53,"line":10304},[51,19484,19485],{"class":65},"    Person p4",[51,19487,70],{"class":69},[51,19489,988],{"class":278},[51,19491,598],{"class":65},[51,19493,19494],{"class":601},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[51,19496,19497,19500,19502,19505],{"class":53,"line":10309},[51,19498,19499],{"class":65},"    Person p5",[51,19501,70],{"class":69},[51,19503,19504],{"class":65},"p4;",[51,19506,19507],{"class":601}," \u002F\u002F 这里会调用拷贝构造函数\n",[51,19509,19510],{"class":53,"line":16987},[51,19511,1974],{"class":65},[51,19513,19514,19516,19518],{"class":53,"line":16993},[51,19515,549],{"class":69},[51,19517,2363],{"class":57},[51,19519,2366],{"class":65},[51,19521,19522],{"class":53,"line":17016},[51,19523,1955],{"class":65},[51,19525,19526,19528],{"class":53,"line":17022},[51,19527,6017],{"class":57},[51,19529,6020],{"class":65},[51,19531,19532,19534],{"class":53,"line":17045},[51,19533,6086],{"class":57},[51,19535,6020],{"class":65},[51,19537,19538,19540,19542],{"class":53,"line":17059},[51,19539,4476],{"class":69},[51,19541,4479],{"class":278},[51,19543,1703],{"class":65},[51,19545,19546],{"class":53,"line":17079},[51,19547,1974],{"class":65},[10,19549,19550,19553],{},[691,19551,19552],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[513,19555,19557],{"id":19556},"_823拷贝构造函数","8.2.3拷贝构造函数",[10,19559,19560],{},"C++中拷贝构造函数调用时机通常有三种情况",[1549,19562,19563,19566,19569],{},[22,19564,19565],{},"使用一个已经创建完毕的对象来初始化一个新对象",[22,19567,19568],{},"值传递的方式给函数参数传值",[22,19570,19571],{},"以值方式返回局部对象",[41,19573,19575],{"className":534,"code":19574,"language":536,"meta":46,"style":46},"#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",[48,19576,19577,19583,19593,19597,19602,19606,19611,19616,19621,19627,19631,19635,19641,19645,19658,19662,19667,19679,19683,19691,19704,19708,19712,19728,19732,19741,19754,19758,19764,19768,19780,19784,19790,19794,19798,19806,19810,19823,19831,19849,19853,19858,19863,19878,19882,19895,19899,19907,19911,19915,19923,19927,19932,19941,19945,19949,19974,19984,19988,19996,20000,20011,20036,20040,20044,20048,20056,20060,20065,20070,20077,20082,20087,20092,20097,20101,20106,20110,20115,20119,20124,20129,20133,20137,20142,20147,20155],{"__ignoreMap":46},[51,19578,19579,19581],{"class":53,"line":54},[51,19580,2340],{"class":69},[51,19582,2343],{"class":61},[51,19584,19585,19587,19589,19591],{"class":53,"line":185},[51,19586,2348],{"class":69},[51,19588,2351],{"class":69},[51,19590,2354],{"class":57},[51,19592,1703],{"class":65},[51,19594,19595],{"class":53,"line":202},[51,19596,206],{"emptyLinePlaceholder":205},[51,19598,19599],{"class":53,"line":209},[51,19600,19601],{"class":601},"\u002F\u002F拷贝构造函数调用时机\n",[51,19603,19604],{"class":53,"line":223},[51,19605,206],{"emptyLinePlaceholder":205},[51,19607,19608],{"class":53,"line":237},[51,19609,19610],{"class":601},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[51,19612,19613],{"class":53,"line":242},[51,19614,19615],{"class":601},"\u002F\u002F2.值传递的方式给函数参数传值\n",[51,19617,19618],{"class":53,"line":257},[51,19619,19620],{"class":601},"\u002F\u002F3.以值方式返回局部对象\n",[51,19622,19623,19625],{"class":53,"line":262},[51,19624,15078],{"class":69},[51,19626,15555],{"class":57},[51,19628,19629],{"class":53,"line":285},[51,19630,1955],{"class":65},[51,19632,19633],{"class":53,"line":296},[51,19634,15100],{"class":69},[51,19636,19637,19639],{"class":53,"line":307},[51,19638,18902],{"class":57},[51,19640,2366],{"class":65},[51,19642,19643],{"class":53,"line":324},[51,19644,2420],{"class":65},[51,19646,19647,19649,19651,19654,19656],{"class":53,"line":329},[51,19648,10053],{"class":65},[51,19650,1586],{"class":69},[51,19652,19653],{"class":61}," \"Person的默认构造函数调用\"",[51,19655,1854],{"class":69},[51,19657,9224],{"class":65},[51,19659,19660],{"class":53,"line":334},[51,19661,2577],{"class":65},[51,19663,19664],{"class":53,"line":340},[51,19665,19666],{"class":601},"    \u002F\u002F有参构造\n",[51,19668,19669,19671,19673,19675,19677],{"class":53,"line":345},[51,19670,18902],{"class":57},[51,19672,546],{"class":65},[51,19674,549],{"class":69},[51,19676,16073],{"class":248},[51,19678,282],{"class":65},[51,19680,19681],{"class":53,"line":357},[51,19682,2420],{"class":65},[51,19684,19685,19687,19689],{"class":53,"line":366},[51,19686,16126],{"class":65},[51,19688,70],{"class":69},[51,19690,8181],{"class":65},[51,19692,19693,19695,19697,19700,19702],{"class":53,"line":383},[51,19694,10053],{"class":65},[51,19696,1586],{"class":69},[51,19698,19699],{"class":61}," \"Person的有参构造函数调用\"",[51,19701,1854],{"class":69},[51,19703,9224],{"class":65},[51,19705,19706],{"class":53,"line":392},[51,19707,2577],{"class":65},[51,19709,19710],{"class":53,"line":403},[51,19711,19257],{"class":601},[51,19713,19714,19716,19718,19720,19722,19724,19726],{"class":53,"line":409},[51,19715,18902],{"class":57},[51,19717,546],{"class":65},[51,19719,7176],{"class":69},[51,19721,15953],{"class":57},[51,19723,10968],{"class":69},[51,19725,10],{"class":248},[51,19727,282],{"class":65},[51,19729,19730],{"class":53,"line":414},[51,19731,2420],{"class":65},[51,19733,19734,19736,19738],{"class":53,"line":433},[51,19735,16126],{"class":65},[51,19737,70],{"class":69},[51,19739,19740],{"class":65}," p.m_Age;\n",[51,19742,19743,19745,19747,19750,19752],{"class":53,"line":439},[51,19744,10053],{"class":65},[51,19746,1586],{"class":69},[51,19748,19749],{"class":61}," \"Person的拷贝构造函数调用\"",[51,19751,1854],{"class":69},[51,19753,9224],{"class":65},[51,19755,19756],{"class":53,"line":444},[51,19757,2577],{"class":65},[51,19759,19760,19762],{"class":53,"line":453},[51,19761,18935],{"class":57},[51,19763,2366],{"class":65},[51,19765,19766],{"class":53,"line":2174},[51,19767,2420],{"class":65},[51,19769,19770,19772,19774,19776,19778],{"class":53,"line":2965},[51,19771,10053],{"class":65},[51,19773,1586],{"class":69},[51,19775,18950],{"class":61},[51,19777,1854],{"class":69},[51,19779,9224],{"class":65},[51,19781,19782],{"class":53,"line":2979},[51,19783,2577],{"class":65},[51,19785,19786,19788],{"class":53,"line":2987},[51,19787,2375],{"class":69},[51,19789,16050],{"class":65},[51,19791,19792],{"class":53,"line":2992},[51,19793,4381],{"class":65},[51,19795,19796],{"class":53,"line":2998},[51,19797,19610],{"class":601},[51,19799,19800,19802,19804],{"class":53,"line":3004},[51,19801,5748],{"class":69},[51,19803,5972],{"class":57},[51,19805,2366],{"class":65},[51,19807,19808],{"class":53,"line":3009},[51,19809,1955],{"class":65},[51,19811,19812,19815,19817,19819,19821],{"class":53,"line":8332},[51,19813,19814],{"class":65},"    Person ",[51,19816,7514],{"class":57},[51,19818,546],{"class":65},[51,19820,1242],{"class":278},[51,19822,3107],{"class":65},[51,19824,19825,19827,19829],{"class":53,"line":8356},[51,19826,19814],{"class":65},[51,19828,7417],{"class":57},[51,19830,17898],{"class":65},[51,19832,19833,19835,19837,19840,19842,19845,19847],{"class":53,"line":8361},[51,19834,1960],{"class":65},[51,19836,1586],{"class":69},[51,19838,19839],{"class":61},"\"P2的年龄为：\"",[51,19841,1586],{"class":69},[51,19843,19844],{"class":65},"p2.m_Age",[51,19846,1586],{"class":69},[51,19848,1608],{"class":65},[51,19850,19851],{"class":53,"line":8367},[51,19852,1974],{"class":65},[51,19854,19855],{"class":53,"line":8394},[51,19856,19857],{"class":601},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[51,19859,19860],{"class":53,"line":8399},[51,19861,19862],{"class":601},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[51,19864,19865,19867,19870,19872,19874,19876],{"class":53,"line":8405},[51,19866,5748],{"class":69},[51,19868,19869],{"class":57}," doWork",[51,19871,546],{"class":65},[51,19873,19429],{"class":57},[51,19875,7209],{"class":248},[51,19877,282],{"class":65},[51,19879,19880],{"class":53,"line":8417},[51,19881,1955],{"class":65},[51,19883,19884,19886,19888,19891,19893],{"class":53,"line":8429},[51,19885,6913],{"class":65},[51,19887,1586],{"class":69},[51,19889,19890],{"class":61}," \"doWork函数调用\"",[51,19892,1854],{"class":69},[51,19894,9224],{"class":65},[51,19896,19897],{"class":53,"line":8441},[51,19898,1974],{"class":65},[51,19900,19901,19903,19905],{"class":53,"line":10100},[51,19902,5748],{"class":69},[51,19904,6041],{"class":57},[51,19906,2366],{"class":65},[51,19908,19909],{"class":53,"line":10125},[51,19910,1955],{"class":65},[51,19912,19913],{"class":53,"line":10148},[51,19914,15697],{"class":65},[51,19916,19917,19920],{"class":53,"line":10172},[51,19918,19919],{"class":57},"    doWork",[51,19921,19922],{"class":65},"(p);\n",[51,19924,19925],{"class":53,"line":10177},[51,19926,1974],{"class":65},[51,19928,19929],{"class":53,"line":10182},[51,19930,19931],{"class":601},"\u002F\u002F 3.以值方式返回局部对象\n",[51,19933,19934,19936,19939],{"class":53,"line":10187},[51,19935,19429],{"class":57},[51,19937,19938],{"class":57}," doWork2",[51,19940,2366],{"class":65},[51,19942,19943],{"class":53,"line":10196},[51,19944,1955],{"class":65},[51,19946,19947],{"class":53,"line":10201},[51,19948,19419],{"class":65},[51,19950,19951,19953,19955,19957,19959,19961,19963,19965,19967,19969,19971],{"class":53,"line":10207},[51,19952,1960],{"class":65},[51,19954,1586],{"class":69},[51,19956,546],{"class":65},[51,19958,549],{"class":69},[51,19960,6902],{"class":69},[51,19962,971],{"class":65},[51,19964,895],{"class":69},[51,19966,7514],{"class":65},[51,19968,1586],{"class":69},[51,19970,1651],{"class":65},[51,19972,19973],{"class":601},"\u002F\u002F打印p1的地址\n",[51,19975,19976,19978,19981],{"class":53,"line":10228},[51,19977,4476],{"class":69},[51,19979,19980],{"class":65}," p1;",[51,19982,19983],{"class":601},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[51,19985,19986],{"class":53,"line":10234},[51,19987,1974],{"class":65},[51,19989,19990,19992,19994],{"class":53,"line":10248},[51,19991,5748],{"class":69},[51,19993,6113],{"class":57},[51,19995,2366],{"class":65},[51,19997,19998],{"class":53,"line":10254},[51,19999,1955],{"class":65},[51,20001,20002,20005,20007,20009],{"class":53,"line":10281},[51,20003,20004],{"class":65},"    Person p ",[51,20006,70],{"class":69},[51,20008,19938],{"class":57},[51,20010,6020],{"class":65},[51,20012,20013,20015,20017,20019,20021,20023,20025,20027,20029,20031,20033],{"class":53,"line":10290},[51,20014,1960],{"class":65},[51,20016,1586],{"class":69},[51,20018,546],{"class":65},[51,20020,549],{"class":69},[51,20022,6902],{"class":69},[51,20024,971],{"class":65},[51,20026,895],{"class":69},[51,20028,10],{"class":65},[51,20030,1586],{"class":69},[51,20032,1651],{"class":65},[51,20034,20035],{"class":601},"\u002F\u002F打印p的地址\n",[51,20037,20038],{"class":53,"line":10296},[51,20039,1974],{"class":65},[51,20041,20042],{"class":53,"line":10304},[51,20043,206],{"emptyLinePlaceholder":205},[51,20045,20046],{"class":53,"line":10309},[51,20047,206],{"emptyLinePlaceholder":205},[51,20049,20050,20052,20054],{"class":53,"line":16987},[51,20051,549],{"class":69},[51,20053,2363],{"class":57},[51,20055,2366],{"class":65},[51,20057,20058],{"class":53,"line":16993},[51,20059,1955],{"class":65},[51,20061,20062],{"class":53,"line":17016},[51,20063,20064],{"class":601},"    \u002F\u002F test01();\n",[51,20066,20067],{"class":53,"line":17022},[51,20068,20069],{"class":601},"    \u002F\u002F test02();\n",[51,20071,20072,20075],{"class":53,"line":17045},[51,20073,20074],{"class":57},"    test03",[51,20076,6020],{"class":65},[51,20078,20079],{"class":53,"line":17059},[51,20080,20081],{"class":601},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[51,20083,20084],{"class":53,"line":17079},[51,20085,20086],{"class":601},"\u002F\u002F 输出结果如下：\n",[51,20088,20089],{"class":53,"line":17085},[51,20090,20091],{"class":601},"\u002F\u002F Person的默认构造函数调用\n",[51,20093,20094],{"class":53,"line":17096},[51,20095,20096],{"class":601},"\u002F\u002F 0x7fffffffceec\n",[51,20098,20099],{"class":53,"line":17119},[51,20100,20096],{"class":601},[51,20102,20103],{"class":53,"line":17141},[51,20104,20105],{"class":601},"\u002F\u002F Person的析构函数调用\n",[51,20107,20108],{"class":53,"line":17146},[51,20109,206],{"emptyLinePlaceholder":205},[51,20111,20112],{"class":53,"line":17152},[51,20113,20114],{"class":601},"\u002F\u002F 之前的输出结果如下：\n",[51,20116,20117],{"class":53,"line":17166},[51,20118,20091],{"class":601},[51,20120,20121],{"class":53,"line":17179},[51,20122,20123],{"class":601},"\u002F\u002F 地址\n",[51,20125,20126],{"class":53,"line":17184},[51,20127,20128],{"class":601},"\u002F\u002F Person的拷贝构造函数调用\n",[51,20130,20131],{"class":53,"line":17198},[51,20132,20105],{"class":601},[51,20134,20135],{"class":53,"line":17203},[51,20136,20123],{"class":601},[51,20138,20139],{"class":53,"line":17209},[51,20140,20141],{"class":601},"\u002F\u002F (这两次输出的地址也是不同的) \n",[51,20143,20144],{"class":53,"line":17214},[51,20145,20146],{"class":601},"\u002F\u002F Person的析构函数调用     \n",[51,20148,20149,20151,20153],{"class":53,"line":17228},[51,20150,4476],{"class":69},[51,20152,4479],{"class":278},[51,20154,1703],{"class":65},[51,20156,20157],{"class":53,"line":17233},[51,20158,1974],{"class":65},[10,20160,20161],{},"简化版理解",[41,20163,20165],{"className":534,"code":20164,"language":536,"meta":46,"style":46},"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",[48,20166,20167,20175,20179,20185,20198,20209,20213,20225,20238,20246,20250,20266,20279,20288,20292,20297,20303,20316,20320,20324,20331,20335,20339,20344,20352,20356,20372,20385,20398,20402,20407,20415,20419,20423,20428,20433,20449,20457,20464,20470,20474,20478,20483,20491,20495,20499,20522,20529,20533,20537,20545,20549,20559,20581,20585,20589,20593,20601,20605,20610,20615,20621,20625,20635,20639,20647],{"__ignoreMap":46},[51,20168,20169,20171,20173],{"class":53,"line":54},[51,20170,15078],{"class":69},[51,20172,15953],{"class":57},[51,20174,15956],{"class":65},[51,20176,20177],{"class":53,"line":185},[51,20178,15100],{"class":69},[51,20180,20181,20183],{"class":53,"line":202},[51,20182,18902],{"class":57},[51,20184,11237],{"class":65},[51,20186,20187,20189,20191,20194,20196],{"class":53,"line":209},[51,20188,10053],{"class":65},[51,20190,1586],{"class":69},[51,20192,20193],{"class":61}," \"无参构造函数!\"",[51,20195,1854],{"class":69},[51,20197,9224],{"class":65},[51,20199,20200,20203,20205,20207],{"class":53,"line":223},[51,20201,20202],{"class":65},"        mAge ",[51,20204,70],{"class":69},[51,20206,4479],{"class":278},[51,20208,1703],{"class":65},[51,20210,20211],{"class":53,"line":237},[51,20212,2577],{"class":65},[51,20214,20215,20217,20219,20221,20223],{"class":53,"line":242},[51,20216,18902],{"class":57},[51,20218,546],{"class":65},[51,20220,549],{"class":69},[51,20222,16073],{"class":248},[51,20224,12826],{"class":65},[51,20226,20227,20229,20231,20234,20236],{"class":53,"line":257},[51,20228,10053],{"class":65},[51,20230,1586],{"class":69},[51,20232,20233],{"class":61}," \"有参构造函数!\"",[51,20235,1854],{"class":69},[51,20237,9224],{"class":65},[51,20239,20240,20242,20244],{"class":53,"line":262},[51,20241,20202],{"class":65},[51,20243,70],{"class":69},[51,20245,8181],{"class":65},[51,20247,20248],{"class":53,"line":285},[51,20249,2577],{"class":65},[51,20251,20252,20254,20256,20258,20260,20262,20264],{"class":53,"line":296},[51,20253,18902],{"class":57},[51,20255,546],{"class":65},[51,20257,7176],{"class":69},[51,20259,15953],{"class":57},[51,20261,895],{"class":69},[51,20263,7209],{"class":248},[51,20265,12826],{"class":65},[51,20267,20268,20270,20272,20275,20277],{"class":53,"line":307},[51,20269,10053],{"class":65},[51,20271,1586],{"class":69},[51,20273,20274],{"class":61}," \"拷贝构造函数!\"",[51,20276,1854],{"class":69},[51,20278,9224],{"class":65},[51,20280,20281,20283,20285],{"class":53,"line":324},[51,20282,20202],{"class":65},[51,20284,70],{"class":69},[51,20286,20287],{"class":65}," p.mAge;\n",[51,20289,20290],{"class":53,"line":329},[51,20291,2577],{"class":65},[51,20293,20294],{"class":53,"line":334},[51,20295,20296],{"class":601},"    \u002F\u002F析构函数在释放内存之前调用\n",[51,20298,20299,20301],{"class":53,"line":340},[51,20300,18935],{"class":57},[51,20302,11237],{"class":65},[51,20304,20305,20307,20309,20312,20314],{"class":53,"line":345},[51,20306,10053],{"class":65},[51,20308,1586],{"class":69},[51,20310,20311],{"class":61}," \"析构函数!\"",[51,20313,1854],{"class":69},[51,20315,9224],{"class":65},[51,20317,20318],{"class":53,"line":357},[51,20319,2577],{"class":65},[51,20321,20322],{"class":53,"line":366},[51,20323,15100],{"class":69},[51,20325,20326,20328],{"class":53,"line":383},[51,20327,2375],{"class":69},[51,20329,20330],{"class":65}," mAge;\n",[51,20332,20333],{"class":53,"line":392},[51,20334,4381],{"class":65},[51,20336,20337],{"class":53,"line":403},[51,20338,206],{"emptyLinePlaceholder":205},[51,20340,20341],{"class":53,"line":409},[51,20342,20343],{"class":601},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[51,20345,20346,20348,20350],{"class":53,"line":414},[51,20347,5748],{"class":69},[51,20349,5972],{"class":57},[51,20351,11237],{"class":65},[51,20353,20354],{"class":53,"line":433},[51,20355,206],{"emptyLinePlaceholder":205},[51,20357,20358,20360,20363,20365,20367,20369],{"class":53,"line":439},[51,20359,19814],{"class":65},[51,20361,20362],{"class":57},"man",[51,20364,546],{"class":65},[51,20366,853],{"class":278},[51,20368,6350],{"class":65},[51,20370,20371],{"class":601}," \u002F\u002Fp对象已经创建完毕\n",[51,20373,20374,20376,20379,20382],{"class":53,"line":444},[51,20375,19814],{"class":65},[51,20377,20378],{"class":57},"newman",[51,20380,20381],{"class":65},"(man);",[51,20383,20384],{"class":601}," \u002F\u002F调用拷贝构造函数\n",[51,20386,20387,20390,20392,20395],{"class":53,"line":453},[51,20388,20389],{"class":65},"    Person newman2 ",[51,20391,70],{"class":69},[51,20393,20394],{"class":65}," man;",[51,20396,20397],{"class":601}," \u002F\u002F拷贝构造\n",[51,20399,20400],{"class":53,"line":2174},[51,20401,206],{"emptyLinePlaceholder":205},[51,20403,20404],{"class":53,"line":2965},[51,20405,20406],{"class":601},"    \u002F\u002FPerson newman3;\n",[51,20408,20409,20412],{"class":53,"line":2979},[51,20410,20411],{"class":601},"    \u002F\u002Fnewman3 = man;",[51,20413,20414],{"class":601}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[51,20416,20417],{"class":53,"line":2987},[51,20418,1974],{"class":65},[51,20420,20421],{"class":53,"line":2992},[51,20422,206],{"emptyLinePlaceholder":205},[51,20424,20425],{"class":53,"line":2998},[51,20426,20427],{"class":601},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[51,20429,20430],{"class":53,"line":3004},[51,20431,20432],{"class":601},"\u002F\u002F相当于Person p1 = p;\n",[51,20434,20435,20437,20439,20441,20443,20446],{"class":53,"line":3009},[51,20436,5748],{"class":69},[51,20438,19869],{"class":57},[51,20440,546],{"class":65},[51,20442,19429],{"class":57},[51,20444,20445],{"class":248}," p1",[51,20447,20448],{"class":65},") {}\n",[51,20450,20451,20453,20455],{"class":53,"line":8332},[51,20452,5748],{"class":69},[51,20454,6041],{"class":57},[51,20456,11237],{"class":65},[51,20458,20459,20461],{"class":53,"line":8356},[51,20460,18987],{"class":65},[51,20462,20463],{"class":601}," \u002F\u002F无参构造函数\n",[51,20465,20466,20468],{"class":53,"line":8361},[51,20467,19919],{"class":57},[51,20469,19922],{"class":65},[51,20471,20472],{"class":53,"line":8367},[51,20473,1974],{"class":65},[51,20475,20476],{"class":53,"line":8394},[51,20477,206],{"emptyLinePlaceholder":205},[51,20479,20480],{"class":53,"line":8399},[51,20481,20482],{"class":601},"\u002F\u002F3. 以值方式返回局部对象\n",[51,20484,20485,20487,20489],{"class":53,"line":8405},[51,20486,19429],{"class":57},[51,20488,19938],{"class":57},[51,20490,2366],{"class":65},[51,20492,20493],{"class":53,"line":8417},[51,20494,1955],{"class":65},[51,20496,20497],{"class":53,"line":8429},[51,20498,19419],{"class":65},[51,20500,20501,20503,20505,20507,20509,20511,20513,20515,20518,20520],{"class":53,"line":8441},[51,20502,6913],{"class":65},[51,20504,1586],{"class":69},[51,20506,2060],{"class":65},[51,20508,549],{"class":69},[51,20510,6902],{"class":69},[51,20512,971],{"class":65},[51,20514,895],{"class":69},[51,20516,20517],{"class":65},"p1 ",[51,20519,1586],{"class":69},[51,20521,9224],{"class":65},[51,20523,20524,20526],{"class":53,"line":10100},[51,20525,4476],{"class":69},[51,20527,20528],{"class":65}," p1;\n",[51,20530,20531],{"class":53,"line":10125},[51,20532,1974],{"class":65},[51,20534,20535],{"class":53,"line":10148},[51,20536,206],{"emptyLinePlaceholder":205},[51,20538,20539,20541,20543],{"class":53,"line":10172},[51,20540,5748],{"class":69},[51,20542,6113],{"class":57},[51,20544,2366],{"class":65},[51,20546,20547],{"class":53,"line":10177},[51,20548,1955],{"class":65},[51,20550,20551,20553,20555,20557],{"class":53,"line":10182},[51,20552,20004],{"class":65},[51,20554,70],{"class":69},[51,20556,19938],{"class":57},[51,20558,6020],{"class":65},[51,20560,20561,20563,20565,20567,20569,20571,20573,20575,20577,20579],{"class":53,"line":10187},[51,20562,6913],{"class":65},[51,20564,1586],{"class":69},[51,20566,2060],{"class":65},[51,20568,549],{"class":69},[51,20570,6902],{"class":69},[51,20572,971],{"class":65},[51,20574,895],{"class":69},[51,20576,11832],{"class":65},[51,20578,1586],{"class":69},[51,20580,9224],{"class":65},[51,20582,20583],{"class":53,"line":10196},[51,20584,1974],{"class":65},[51,20586,20587],{"class":53,"line":10201},[51,20588,206],{"emptyLinePlaceholder":205},[51,20590,20591],{"class":53,"line":10207},[51,20592,206],{"emptyLinePlaceholder":205},[51,20594,20595,20597,20599],{"class":53,"line":10228},[51,20596,549],{"class":69},[51,20598,2363],{"class":57},[51,20600,11237],{"class":65},[51,20602,20603],{"class":53,"line":10234},[51,20604,206],{"emptyLinePlaceholder":205},[51,20606,20607],{"class":53,"line":10248},[51,20608,20609],{"class":601},"    \u002F\u002Ftest01();\n",[51,20611,20612],{"class":53,"line":10254},[51,20613,20614],{"class":601},"    \u002F\u002Ftest02();\n",[51,20616,20617,20619],{"class":53,"line":10281},[51,20618,20074],{"class":57},[51,20620,6020],{"class":65},[51,20622,20623],{"class":53,"line":10290},[51,20624,206],{"emptyLinePlaceholder":205},[51,20626,20627,20629,20631,20633],{"class":53,"line":10296},[51,20628,2693],{"class":57},[51,20630,546],{"class":65},[51,20632,2698],{"class":61},[51,20634,3107],{"class":65},[51,20636,20637],{"class":53,"line":10304},[51,20638,206],{"emptyLinePlaceholder":205},[51,20640,20641,20643,20645],{"class":53,"line":10309},[51,20642,4476],{"class":69},[51,20644,4479],{"class":278},[51,20646,1703],{"class":65},[51,20648,20649],{"class":53,"line":16987},[51,20650,1974],{"class":65},[513,20652,20654],{"id":20653},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[10,20656,20657],{},"默认情况下，c++编译器至少给一个类添加3个函数",[10,20659,20660],{},"1．默认构造函数(无参，函数体为空)",[10,20662,20663],{},"2．默认析构函数(无参，函数体为空)",[10,20665,20666],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[10,20668,20669],{},"构造函数调用规则如下：",[1549,20671,20672,20675],{},[22,20673,20674],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[22,20676,20677],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[41,20679,20681],{"className":534,"code":20680,"language":536,"meta":46,"style":46},"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",[48,20682,20683,20691,20695,20700,20706,20718,20722,20727,20739,20748,20760,20764,20768,20784,20793,20805,20809,20813,20819,20831,20835,20839,20845,20849,20853,20861,20865,20877,20882,20890,20894,20912,20916,20920,20928,20932,20937,20945,20960,20973,20977,20982,20989,21005,21018,21022,21026,21034,21038,21044,21048,21058,21062,21070],{"__ignoreMap":46},[51,20684,20685,20687,20689],{"class":53,"line":54},[51,20686,15078],{"class":69},[51,20688,15953],{"class":57},[51,20690,15956],{"class":65},[51,20692,20693],{"class":53,"line":185},[51,20694,15100],{"class":69},[51,20696,20697],{"class":53,"line":202},[51,20698,20699],{"class":601},"    \u002F\u002F无参（默认）构造函数\n",[51,20701,20702,20704],{"class":53,"line":209},[51,20703,18902],{"class":57},[51,20705,11237],{"class":65},[51,20707,20708,20710,20712,20714,20716],{"class":53,"line":223},[51,20709,10053],{"class":65},[51,20711,1586],{"class":69},[51,20713,20193],{"class":61},[51,20715,1854],{"class":69},[51,20717,9224],{"class":65},[51,20719,20720],{"class":53,"line":237},[51,20721,2577],{"class":65},[51,20723,20724],{"class":53,"line":242},[51,20725,20726],{"class":601},"    \u002F\u002F有参构造函数\n",[51,20728,20729,20731,20733,20735,20737],{"class":53,"line":257},[51,20730,18902],{"class":57},[51,20732,546],{"class":65},[51,20734,549],{"class":69},[51,20736,1808],{"class":248},[51,20738,12826],{"class":65},[51,20740,20741,20744,20746],{"class":53,"line":262},[51,20742,20743],{"class":65},"        age ",[51,20745,70],{"class":69},[51,20747,1842],{"class":65},[51,20749,20750,20752,20754,20756,20758],{"class":53,"line":285},[51,20751,10053],{"class":65},[51,20753,1586],{"class":69},[51,20755,20233],{"class":61},[51,20757,1854],{"class":69},[51,20759,9224],{"class":65},[51,20761,20762],{"class":53,"line":296},[51,20763,2577],{"class":65},[51,20765,20766],{"class":53,"line":307},[51,20767,19257],{"class":601},[51,20769,20770,20772,20774,20776,20778,20780,20782],{"class":53,"line":324},[51,20771,18902],{"class":57},[51,20773,546],{"class":65},[51,20775,7176],{"class":69},[51,20777,15953],{"class":57},[51,20779,895],{"class":69},[51,20781,7209],{"class":248},[51,20783,12826],{"class":65},[51,20785,20786,20788,20790],{"class":53,"line":329},[51,20787,20743],{"class":65},[51,20789,70],{"class":69},[51,20791,20792],{"class":65}," p.age;\n",[51,20794,20795,20797,20799,20801,20803],{"class":53,"line":334},[51,20796,10053],{"class":65},[51,20798,1586],{"class":69},[51,20800,20274],{"class":61},[51,20802,1854],{"class":69},[51,20804,9224],{"class":65},[51,20806,20807],{"class":53,"line":340},[51,20808,2577],{"class":65},[51,20810,20811],{"class":53,"line":345},[51,20812,18930],{"class":601},[51,20814,20815,20817],{"class":53,"line":357},[51,20816,18935],{"class":57},[51,20818,11237],{"class":65},[51,20820,20821,20823,20825,20827,20829],{"class":53,"line":366},[51,20822,10053],{"class":65},[51,20824,1586],{"class":69},[51,20826,20311],{"class":61},[51,20828,1854],{"class":69},[51,20830,9224],{"class":65},[51,20832,20833],{"class":53,"line":383},[51,20834,2577],{"class":65},[51,20836,20837],{"class":53,"line":392},[51,20838,15100],{"class":69},[51,20840,20841,20843],{"class":53,"line":403},[51,20842,2375],{"class":69},[51,20844,8181],{"class":65},[51,20846,20847],{"class":53,"line":409},[51,20848,4381],{"class":65},[51,20850,20851],{"class":53,"line":414},[51,20852,206],{"emptyLinePlaceholder":205},[51,20854,20855,20857,20859],{"class":53,"line":433},[51,20856,5748],{"class":69},[51,20858,5972],{"class":57},[51,20860,2366],{"class":65},[51,20862,20863],{"class":53,"line":439},[51,20864,1955],{"class":65},[51,20866,20867,20869,20871,20873,20875],{"class":53,"line":444},[51,20868,19814],{"class":65},[51,20870,7514],{"class":57},[51,20872,546],{"class":65},[51,20874,1192],{"class":278},[51,20876,3107],{"class":65},[51,20878,20879],{"class":53,"line":453},[51,20880,20881],{"class":601},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[51,20883,20884,20886,20888],{"class":53,"line":2174},[51,20885,19814],{"class":65},[51,20887,7417],{"class":57},[51,20889,17898],{"class":65},[51,20891,20892],{"class":53,"line":2965},[51,20893,206],{"emptyLinePlaceholder":205},[51,20895,20896,20898,20900,20903,20905,20908,20910],{"class":53,"line":2979},[51,20897,6913],{"class":65},[51,20899,1586],{"class":69},[51,20901,20902],{"class":61}," \"p2的年龄为： \"",[51,20904,1854],{"class":69},[51,20906,20907],{"class":65}," p2.age ",[51,20909,1586],{"class":69},[51,20911,9224],{"class":65},[51,20913,20914],{"class":53,"line":2987},[51,20915,1974],{"class":65},[51,20917,20918],{"class":53,"line":2992},[51,20919,206],{"emptyLinePlaceholder":205},[51,20921,20922,20924,20926],{"class":53,"line":2998},[51,20923,5748],{"class":69},[51,20925,6041],{"class":57},[51,20927,2366],{"class":65},[51,20929,20930],{"class":53,"line":3004},[51,20931,1955],{"class":65},[51,20933,20934],{"class":53,"line":3009},[51,20935,20936],{"class":601},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[51,20938,20939,20942],{"class":53,"line":8332},[51,20940,20941],{"class":65},"    Person p1;",[51,20943,20944],{"class":601}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[51,20946,20947,20949,20951,20953,20955,20957],{"class":53,"line":8356},[51,20948,19814],{"class":65},[51,20950,7417],{"class":57},[51,20952,546],{"class":65},[51,20954,988],{"class":278},[51,20956,6350],{"class":65},[51,20958,20959],{"class":601}," \u002F\u002F用户提供的有参\n",[51,20961,20962,20964,20967,20970],{"class":53,"line":8361},[51,20963,19814],{"class":65},[51,20965,20966],{"class":57},"p3",[51,20968,20969],{"class":65},"(p2);",[51,20971,20972],{"class":601}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[51,20974,20975],{"class":53,"line":8367},[51,20976,206],{"emptyLinePlaceholder":205},[51,20978,20979],{"class":53,"line":8394},[51,20980,20981],{"class":601},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[51,20983,20984,20987],{"class":53,"line":8399},[51,20985,20986],{"class":65},"    Person p4;",[51,20988,20944],{"class":601},[51,20990,20991,20993,20996,20998,21000,21002],{"class":53,"line":8405},[51,20992,19814],{"class":65},[51,20994,20995],{"class":57},"p5",[51,20997,546],{"class":65},[51,20999,988],{"class":278},[51,21001,6350],{"class":65},[51,21003,21004],{"class":601}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[51,21006,21007,21009,21012,21015],{"class":53,"line":8417},[51,21008,19814],{"class":65},[51,21010,21011],{"class":57},"p6",[51,21013,21014],{"class":65},"(p5);",[51,21016,21017],{"class":601}," \u002F\u002F用户自己提供拷贝构造\n",[51,21019,21020],{"class":53,"line":8429},[51,21021,1974],{"class":65},[51,21023,21024],{"class":53,"line":8441},[51,21025,206],{"emptyLinePlaceholder":205},[51,21027,21028,21030,21032],{"class":53,"line":10100},[51,21029,549],{"class":69},[51,21031,2363],{"class":57},[51,21033,11237],{"class":65},[51,21035,21036],{"class":53,"line":10125},[51,21037,206],{"emptyLinePlaceholder":205},[51,21039,21040,21042],{"class":53,"line":10148},[51,21041,6017],{"class":57},[51,21043,6020],{"class":65},[51,21045,21046],{"class":53,"line":10172},[51,21047,206],{"emptyLinePlaceholder":205},[51,21049,21050,21052,21054,21056],{"class":53,"line":10177},[51,21051,2693],{"class":57},[51,21053,546],{"class":65},[51,21055,2698],{"class":61},[51,21057,3107],{"class":65},[51,21059,21060],{"class":53,"line":10182},[51,21061,206],{"emptyLinePlaceholder":205},[51,21063,21064,21066,21068],{"class":53,"line":10187},[51,21065,4476],{"class":69},[51,21067,4479],{"class":278},[51,21069,1703],{"class":65},[51,21071,21072],{"class":53,"line":10196},[51,21073,1974],{"class":65},[513,21075,21077],{"id":21076},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[10,21079,21080],{},"浅拷贝：简单的赋值拷贝操作",[10,21082,21083],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[41,21085,21087],{"className":534,"code":21086,"language":536,"meta":46,"style":46},"#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",[48,21088,21089,21095,21105,21111,21115,21119,21124,21130,21134,21147,21151,21155,21162,21166,21176,21191,21204,21208,21213,21218,21234,21238,21251,21256,21261,21266,21275,21280,21295,21299,21303,21307,21313,21317,21322,21337,21341,21352,21366,21370,21379,21383,21389,21401,21405,21413,21417,21434,21465,21473,21501,21505,21509,21517,21521,21527],{"__ignoreMap":46},[51,21090,21091,21093],{"class":53,"line":54},[51,21092,2340],{"class":69},[51,21094,2343],{"class":61},[51,21096,21097,21099,21101,21103],{"class":53,"line":185},[51,21098,2348],{"class":69},[51,21100,2351],{"class":69},[51,21102,2354],{"class":57},[51,21104,1703],{"class":65},[51,21106,21107,21109],{"class":53,"line":202},[51,21108,15078],{"class":69},[51,21110,15555],{"class":57},[51,21112,21113],{"class":53,"line":209},[51,21114,1955],{"class":65},[51,21116,21117],{"class":53,"line":223},[51,21118,15100],{"class":69},[51,21120,21121],{"class":53,"line":237},[51,21122,21123],{"class":601},"    \u002F\u002F默认构造函数\n",[51,21125,21126,21128],{"class":53,"line":242},[51,21127,18902],{"class":57},[51,21129,2366],{"class":65},[51,21131,21132],{"class":53,"line":257},[51,21133,2420],{"class":65},[51,21135,21136,21138,21140,21143,21145],{"class":53,"line":262},[51,21137,3838],{"class":65},[51,21139,1586],{"class":69},[51,21141,21142],{"class":61},"\"默认构造函数\"",[51,21144,1586],{"class":69},[51,21146,1608],{"class":65},[51,21148,21149],{"class":53,"line":285},[51,21150,2577],{"class":65},[51,21152,21153],{"class":53,"line":296},[51,21154,20726],{"class":601},[51,21156,21157,21159],{"class":53,"line":307},[51,21158,18935],{"class":57},[51,21160,21161],{"class":65},"(int age,int height)\n",[51,21163,21164],{"class":53,"line":324},[51,21165,2420],{"class":65},[51,21167,21168,21171,21173],{"class":53,"line":329},[51,21169,21170],{"class":65},"        m_Age",[51,21172,70],{"class":69},[51,21174,21175],{"class":65},"age;\n",[51,21177,21178,21181,21183,21185,21188],{"class":53,"line":334},[51,21179,21180],{"class":65},"        m_Height",[51,21182,12101],{"class":69},[51,21184,2772],{"class":69},[51,21186,21187],{"class":65},"(height);",[51,21189,21190],{"class":601},"\u002F\u002F放到堆区\n",[51,21192,21193,21195,21197,21200,21202],{"class":53,"line":340},[51,21194,3838],{"class":65},[51,21196,1586],{"class":69},[51,21198,21199],{"class":61},"\"有参构造函数\"",[51,21201,1586],{"class":69},[51,21203,1608],{"class":65},[51,21205,21206],{"class":53,"line":345},[51,21207,2577],{"class":65},[51,21209,21210],{"class":53,"line":357},[51,21211,21212],{"class":601},"    \u002F\u002F深拷贝解决上述问题\n",[51,21214,21215],{"class":53,"line":366},[51,21216,21217],{"class":601},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[51,21219,21220,21222,21224,21226,21228,21230,21232],{"class":53,"line":383},[51,21221,18902],{"class":57},[51,21223,546],{"class":65},[51,21225,7176],{"class":69},[51,21227,15953],{"class":57},[51,21229,10968],{"class":69},[51,21231,10],{"class":248},[51,21233,282],{"class":65},[51,21235,21236],{"class":53,"line":392},[51,21237,2420],{"class":65},[51,21239,21240,21242,21244,21247,21249],{"class":53,"line":403},[51,21241,3838],{"class":65},[51,21243,1586],{"class":69},[51,21245,21246],{"class":61},"\"拷贝构造函数\"",[51,21248,1586],{"class":69},[51,21250,1608],{"class":65},[51,21252,21253],{"class":53,"line":409},[51,21254,21255],{"class":601},"        \u002F\u002F编译器默认的写如下注释部分\n",[51,21257,21258],{"class":53,"line":414},[51,21259,21260],{"class":601},"        \u002F\u002Fm_Age=p.m_Age;\n",[51,21262,21263],{"class":53,"line":433},[51,21264,21265],{"class":601},"        \u002F\u002Fm_Height=p.m_Height;\n",[51,21267,21268,21270,21272],{"class":53,"line":439},[51,21269,21170],{"class":65},[51,21271,70],{"class":69},[51,21273,21274],{"class":65},"p.m_Age;\n",[51,21276,21277],{"class":53,"line":444},[51,21278,21279],{"class":601},"        \u002F\u002F深拷贝操作\n",[51,21281,21282,21284,21286,21288,21290,21292],{"class":53,"line":453},[51,21283,21180],{"class":65},[51,21285,12101],{"class":69},[51,21287,2772],{"class":69},[51,21289,546],{"class":65},[51,21291,997],{"class":69},[51,21293,21294],{"class":65},"p.m_Height);\n",[51,21296,21297],{"class":53,"line":2174},[51,21298,2577],{"class":65},[51,21300,21301],{"class":53,"line":2965},[51,21302,206],{"emptyLinePlaceholder":205},[51,21304,21305],{"class":53,"line":2979},[51,21306,18930],{"class":601},[51,21308,21309,21311],{"class":53,"line":2987},[51,21310,18935],{"class":57},[51,21312,2366],{"class":65},[51,21314,21315],{"class":53,"line":2992},[51,21316,2420],{"class":65},[51,21318,21319],{"class":53,"line":2998},[51,21320,21321],{"class":601},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[51,21323,21324,21326,21329,21332,21335],{"class":53,"line":3004},[51,21325,369],{"class":69},[51,21327,21328],{"class":65},"(m_Height ",[51,21330,21331],{"class":69},"!=",[51,21333,21334],{"class":278}," NULL",[51,21336,282],{"class":65},[51,21338,21339],{"class":53,"line":3009},[51,21340,2898],{"class":65},[51,21342,21343,21346,21349],{"class":53,"line":8332},[51,21344,21345],{"class":69},"            delete",[51,21347,21348],{"class":65}," m_Height;",[51,21350,21351],{"class":601}," \u002F\u002F释放堆区内存\n",[51,21353,21354,21357,21359,21361,21363],{"class":53,"line":8356},[51,21355,21356],{"class":65},"            m_Height",[51,21358,70],{"class":69},[51,21360,2782],{"class":278},[51,21362,598],{"class":65},[51,21364,21365],{"class":601}," \u002F\u002F防止野指针\n",[51,21367,21368],{"class":53,"line":8361},[51,21369,2917],{"class":65},[51,21371,21372,21374,21376],{"class":53,"line":8367},[51,21373,3838],{"class":65},[51,21375,1586],{"class":69},[51,21377,21378],{"class":61},"\"Person的析构函数调用\"\n",[51,21380,21381],{"class":53,"line":8394},[51,21382,2577],{"class":65},[51,21384,21385,21387],{"class":53,"line":8399},[51,21386,2375],{"class":69},[51,21388,16050],{"class":65},[51,21390,21391,21393,21395,21398],{"class":53,"line":8405},[51,21392,2375],{"class":69},[51,21394,6902],{"class":69},[51,21396,21397],{"class":65},"m_Height;",[51,21399,21400],{"class":601}," \u002F\u002F定义一个指针，指向身高\n",[51,21402,21403],{"class":53,"line":8417},[51,21404,4381],{"class":65},[51,21406,21407,21409,21411],{"class":53,"line":8429},[51,21408,5748],{"class":69},[51,21410,5972],{"class":57},[51,21412,2366],{"class":65},[51,21414,21415],{"class":53,"line":8441},[51,21416,1955],{"class":65},[51,21418,21419,21421,21423,21425,21427,21429,21432],{"class":53,"line":10100},[51,21420,19814],{"class":65},[51,21422,7514],{"class":57},[51,21424,546],{"class":65},[51,21426,1192],{"class":278},[51,21428,920],{"class":65},[51,21430,21431],{"class":278},"160",[51,21433,3107],{"class":65},[51,21435,21436,21438,21440,21443,21445,21448,21450,21453,21455,21458,21460,21462],{"class":53,"line":10125},[51,21437,1960],{"class":65},[51,21439,1586],{"class":69},[51,21441,21442],{"class":61},"\"p1的年龄为:\"",[51,21444,1586],{"class":69},[51,21446,21447],{"class":65},"p1.m_Age",[51,21449,1586],{"class":69},[51,21451,21452],{"class":61},"\"身高为：\"",[51,21454,6803],{"class":69},[51,21456,21457],{"class":65},"p1.m_Height",[51,21459,1586],{"class":69},[51,21461,1651],{"class":65},[51,21463,21464],{"class":601},"  \u002F\u002F18\n",[51,21466,21467,21469,21471],{"class":53,"line":10148},[51,21468,19814],{"class":65},[51,21470,7417],{"class":57},[51,21472,17898],{"class":65},[51,21474,21475,21477,21479,21482,21484,21486,21488,21490,21492,21495,21497,21499],{"class":53,"line":10172},[51,21476,1960],{"class":65},[51,21478,1586],{"class":69},[51,21480,21481],{"class":61},"\"p2的年龄为：\"",[51,21483,1586],{"class":69},[51,21485,19844],{"class":65},[51,21487,1586],{"class":69},[51,21489,21452],{"class":61},[51,21491,6803],{"class":69},[51,21493,21494],{"class":65},"p2.m_Height",[51,21496,1586],{"class":69},[51,21498,1651],{"class":65},[51,21500,21464],{"class":601},[51,21502,21503],{"class":53,"line":10177},[51,21504,13594],{"class":65},[51,21506,21507],{"class":53,"line":10182},[51,21508,1974],{"class":65},[51,21510,21511,21513,21515],{"class":53,"line":10187},[51,21512,549],{"class":69},[51,21514,2363],{"class":57},[51,21516,2366],{"class":65},[51,21518,21519],{"class":53,"line":10196},[51,21520,1955],{"class":65},[51,21522,21523,21525],{"class":53,"line":10201},[51,21524,6017],{"class":57},[51,21526,6020],{"class":65},[51,21528,21529],{"class":53,"line":10207},[51,21530,1974],{"class":65},[10,21532,21533],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[10,21535,21536],{},"浅拷贝带来的问题是堆区的内存重复释放",[10,21538,21539],{},[460,21540],{"alt":46,"src":21541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[10,21543,21544],{},"浅拷贝问题要使用深拷贝来解决",[10,21546,21547],{},[460,21548],{"alt":46,"src":21549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[10,21551,21552],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[513,21554,21556],{"id":21555},"_826初始化列表","8.2.6初始化列表",[10,21558,21559],{},"作用：初始化属性",[10,21561,5566],{},[41,21563,21566],{"className":21564,"code":21565,"language":5572},[5570],"构造函数():属性1(值1),属性2(值2).....{}\n",[48,21567,21565],{"__ignoreMap":46},[10,21569,21570],{},"例子",[41,21572,21574],{"className":534,"code":21573,"language":536,"meta":46,"style":46},"#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",[48,21575,21576,21582,21592,21598,21602,21607,21611,21616,21621,21626,21631,21636,21641,21645,21650,21655,21698,21707,21725,21743,21761,21765,21769,21776,21783,21790,21794,21798,21806,21810,21814,21834,21843,21847,21851,21861,21865,21873],{"__ignoreMap":46},[51,21577,21578,21580],{"class":53,"line":54},[51,21579,2340],{"class":69},[51,21581,2343],{"class":61},[51,21583,21584,21586,21588,21590],{"class":53,"line":185},[51,21585,2348],{"class":69},[51,21587,2351],{"class":69},[51,21589,2354],{"class":57},[51,21591,1703],{"class":65},[51,21593,21594,21596],{"class":53,"line":202},[51,21595,15078],{"class":69},[51,21597,15555],{"class":57},[51,21599,21600],{"class":53,"line":209},[51,21601,1955],{"class":65},[51,21603,21604],{"class":53,"line":223},[51,21605,21606],{"class":69},"    public:\n",[51,21608,21609],{"class":53,"line":237},[51,21610,206],{"emptyLinePlaceholder":205},[51,21612,21613],{"class":53,"line":242},[51,21614,21615],{"class":601},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[51,21617,21618],{"class":53,"line":257},[51,21619,21620],{"class":601},"    \u002F\u002FPerson(int a, int b, int c) {\n",[51,21622,21623],{"class":53,"line":262},[51,21624,21625],{"class":601},"    \u002F\u002F  m_A = a;\n",[51,21627,21628],{"class":53,"line":285},[51,21629,21630],{"class":601},"    \u002F\u002F  m_B = b;\n",[51,21632,21633],{"class":53,"line":296},[51,21634,21635],{"class":601},"    \u002F\u002F  m_C = c;\n",[51,21637,21638],{"class":53,"line":307},[51,21639,21640],{"class":601},"    \u002F\u002F}\n",[51,21642,21643],{"class":53,"line":324},[51,21644,206],{"emptyLinePlaceholder":205},[51,21646,21647],{"class":53,"line":329},[51,21648,21649],{"class":601},"    \u002F\u002F初始化列表方式初始化\n",[51,21651,21652],{"class":53,"line":334},[51,21653,21654],{"class":601},"    \u002F\u002F使用有参构造函数\n",[51,21656,21657,21659,21661,21663,21665,21667,21669,21671,21673,21675,21677,21680,21683,21686,21689,21692,21695],{"class":53,"line":340},[51,21658,18902],{"class":57},[51,21660,546],{"class":65},[51,21662,549],{"class":69},[51,21664,1808],{"class":248},[51,21666,12819],{"class":65},[51,21668,549],{"class":69},[51,21670,3221],{"class":248},[51,21672,12819],{"class":65},[51,21674,549],{"class":69},[51,21676,3237],{"class":248},[51,21678,21679],{"class":65},") :",[51,21681,21682],{"class":57},"m_A",[51,21684,21685],{"class":65},"(a), ",[51,21687,21688],{"class":57},"m_B",[51,21690,21691],{"class":65},"(b), ",[51,21693,21694],{"class":57},"m_C",[51,21696,21697],{"class":65},"(c) {}\n",[51,21699,21700,21702,21705],{"class":53,"line":345},[51,21701,15293],{"class":69},[51,21703,21704],{"class":57}," PrintPerson",[51,21706,11237],{"class":65},[51,21708,21709,21711,21713,21716,21718,21721,21723],{"class":53,"line":357},[51,21710,10053],{"class":65},[51,21712,1586],{"class":69},[51,21714,21715],{"class":61}," \"mA:\"",[51,21717,1854],{"class":69},[51,21719,21720],{"class":65}," m_A ",[51,21722,1586],{"class":69},[51,21724,9224],{"class":65},[51,21726,21727,21729,21731,21734,21736,21739,21741],{"class":53,"line":366},[51,21728,10053],{"class":65},[51,21730,1586],{"class":69},[51,21732,21733],{"class":61}," \"mB:\"",[51,21735,1854],{"class":69},[51,21737,21738],{"class":65}," m_B ",[51,21740,1586],{"class":69},[51,21742,9224],{"class":65},[51,21744,21745,21747,21749,21752,21754,21757,21759],{"class":53,"line":383},[51,21746,10053],{"class":65},[51,21748,1586],{"class":69},[51,21750,21751],{"class":61}," \"mC:\"",[51,21753,1854],{"class":69},[51,21755,21756],{"class":65}," m_C ",[51,21758,1586],{"class":69},[51,21760,9224],{"class":65},[51,21762,21763],{"class":53,"line":392},[51,21764,2577],{"class":65},[51,21766,21767],{"class":53,"line":403},[51,21768,15606],{"class":69},[51,21770,21771,21773],{"class":53,"line":409},[51,21772,2375],{"class":69},[51,21774,21775],{"class":65}," m_A;\n",[51,21777,21778,21780],{"class":53,"line":414},[51,21779,2375],{"class":69},[51,21781,21782],{"class":65}," m_B;\n",[51,21784,21785,21787],{"class":53,"line":433},[51,21786,2375],{"class":69},[51,21788,21789],{"class":65}," m_C;\n",[51,21791,21792],{"class":53,"line":439},[51,21793,4381],{"class":65},[51,21795,21796],{"class":53,"line":444},[51,21797,206],{"emptyLinePlaceholder":205},[51,21799,21800,21802,21804],{"class":53,"line":453},[51,21801,549],{"class":69},[51,21803,2363],{"class":57},[51,21805,6362],{"class":65},[51,21807,21808],{"class":53,"line":2174},[51,21809,1955],{"class":65},[51,21811,21812],{"class":53,"line":2965},[51,21813,206],{"emptyLinePlaceholder":205},[51,21815,21816,21818,21820,21822,21824,21826,21828,21830,21832],{"class":53,"line":2979},[51,21817,19814],{"class":65},[51,21819,10],{"class":57},[51,21821,546],{"class":65},[51,21823,759],{"class":278},[51,21825,12819],{"class":65},[51,21827,620],{"class":278},[51,21829,12819],{"class":65},[51,21831,614],{"class":278},[51,21833,3107],{"class":65},[51,21835,21836,21838,21841],{"class":53,"line":2987},[51,21837,16249],{"class":65},[51,21839,21840],{"class":57},"PrintPerson",[51,21842,6020],{"class":65},[51,21844,21845],{"class":53,"line":2992},[51,21846,206],{"emptyLinePlaceholder":205},[51,21848,21849],{"class":53,"line":2998},[51,21850,206],{"emptyLinePlaceholder":205},[51,21852,21853,21855,21857,21859],{"class":53,"line":3004},[51,21854,2693],{"class":57},[51,21856,546],{"class":65},[51,21858,2698],{"class":61},[51,21860,3107],{"class":65},[51,21862,21863],{"class":53,"line":3009},[51,21864,206],{"emptyLinePlaceholder":205},[51,21866,21867,21869,21871],{"class":53,"line":8332},[51,21868,4476],{"class":69},[51,21870,4479],{"class":278},[51,21872,1703],{"class":65},[51,21874,21875],{"class":53,"line":8356},[51,21876,1974],{"class":65},[10,21878,21879,21880,21883,21884],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[691,21881,21882],{},"参数名就是定义的对象属性","，",[691,21885,21886],{},"属性后面的值为有参构造函数的形参",[41,21888,21890],{"className":534,"code":21889,"language":536,"meta":46,"style":46},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[48,21891,21892],{"__ignoreMap":46},[51,21893,21894,21896,21898,21900,21903,21905,21908,21910,21913,21915,21918,21920,21923,21925],{"class":53,"line":54},[51,21895,19429],{"class":57},[51,21897,546],{"class":65},[51,21899,549],{"class":69},[51,21901,21902],{"class":65}," a.",[51,21904,549],{"class":69},[51,21906,21907],{"class":65}," b,",[51,21909,549],{"class":69},[51,21911,21912],{"class":65}," b):",[51,21914,21682],{"class":57},[51,21916,21917],{"class":65},"(a),",[51,21919,21688],{"class":57},[51,21921,21922],{"class":65},"(c),",[51,21924,21694],{"class":57},[51,21926,21927],{"class":65},"(b) {}\n",[513,21929,21931],{"id":21930},"_827类对象作为类成员","8.2.7类对象作为类成员",[10,21933,21934],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[10,21936,15017],{},[41,21938,21940],{"className":534,"code":21939,"language":536,"meta":46,"style":46},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[48,21941,21942,21947,21952,21956,21961,21965],{"__ignoreMap":46},[51,21943,21944],{"class":53,"line":54},[51,21945,21946],{"class":65},"A{};\n",[51,21948,21949],{"class":53,"line":185},[51,21950,21951],{"class":65},"B\n",[51,21953,21954],{"class":53,"line":202},[51,21955,1955],{"class":65},[51,21957,21958],{"class":53,"line":209},[51,21959,21960],{"class":65},"    A a;\n",[51,21962,21963],{"class":53,"line":223},[51,21964,1974],{"class":65},[51,21966,21967],{"class":53,"line":237},[51,21968,21969],{"class":601},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[10,21971,21972],{},"案例",[41,21974,21976],{"className":534,"code":21975,"language":536,"meta":46,"style":46},"\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",[48,21977,21978,21983,21990,21994,21999,22004,22018,22022,22032,22043,22047,22054,22058,22071,22075,22080,22085,22089,22095,22099,22103,22107,22138,22142,22153,22157,22163,22167,22180,22184,22188,22192,22197,22202,22206,22214,22218,22235,22254,22258,22266,22270,22276],{"__ignoreMap":46},[51,21979,21980],{"class":53,"line":54},[51,21981,21982],{"class":601},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[51,21984,21985,21987],{"class":53,"line":185},[51,21986,15078],{"class":69},[51,21988,21989],{"class":57}," Phone\n",[51,21991,21992],{"class":53,"line":202},[51,21993,1955],{"class":65},[51,21995,21996],{"class":53,"line":209},[51,21997,21998],{"class":65},"public：\n",[51,22000,22001],{"class":53,"line":223},[51,22002,22003],{"class":601},"    \u002F\u002F 赋值(构造函数)\n",[51,22005,22006,22009,22011,22013,22016],{"class":53,"line":237},[51,22007,22008],{"class":57},"    Phone",[51,22010,546],{"class":65},[51,22012,15301],{"class":57},[51,22014,22015],{"class":248}," pName",[51,22017,282],{"class":65},[51,22019,22020],{"class":53,"line":242},[51,22021,2420],{"class":65},[51,22023,22024,22027,22029],{"class":53,"line":257},[51,22025,22026],{"class":65},"        m_pName",[51,22028,70],{"class":69},[51,22030,22031],{"class":65},"pName;\n",[51,22033,22034,22036,22038,22041],{"class":53,"line":262},[51,22035,3838],{"class":65},[51,22037,1586],{"class":69},[51,22039,22040],{"class":61},"\"Phone的构造函数调用\"",[51,22042,1703],{"class":65},[51,22044,22045],{"class":53,"line":285},[51,22046,2577],{"class":65},[51,22048,22049,22052],{"class":53,"line":296},[51,22050,22051],{"class":57},"    ~Phone",[51,22053,2366],{"class":65},[51,22055,22056],{"class":53,"line":307},[51,22057,2420],{"class":65},[51,22059,22060,22062,22064,22067,22069],{"class":53,"line":324},[51,22061,3838],{"class":65},[51,22063,1586],{"class":69},[51,22065,22066],{"class":61},"\"Phone析构函数调用\"",[51,22068,1586],{"class":69},[51,22070,1608],{"class":65},[51,22072,22073],{"class":53,"line":329},[51,22074,2577],{"class":65},[51,22076,22077],{"class":53,"line":334},[51,22078,22079],{"class":601},"    \u002F\u002F\n",[51,22081,22082],{"class":53,"line":340},[51,22083,22084],{"class":65},"    string m_PName;\n",[51,22086,22087],{"class":53,"line":345},[51,22088,4381],{"class":65},[51,22090,22091,22093],{"class":53,"line":357},[51,22092,15078],{"class":69},[51,22094,15555],{"class":57},[51,22096,22097],{"class":53,"line":366},[51,22098,1955],{"class":65},[51,22100,22101],{"class":53,"line":383},[51,22102,15100],{"class":69},[51,22104,22105],{"class":53,"line":392},[51,22106,17377],{"class":601},[51,22108,22109,22111,22113,22115,22117,22119,22121,22124,22127,22129,22132,22135],{"class":53,"line":403},[51,22110,18902],{"class":57},[51,22112,546],{"class":65},[51,22114,15301],{"class":57},[51,22116,15304],{"class":248},[51,22118,920],{"class":65},[51,22120,15301],{"class":57},[51,22122,22123],{"class":248}," pname",[51,22125,22126],{"class":65},"):",[51,22128,15394],{"class":57},[51,22130,22131],{"class":65},"(name),m_phone.",[51,22133,22134],{"class":57},"m_PName",[51,22136,22137],{"class":65},"(pname) \n",[51,22139,22140],{"class":53,"line":409},[51,22141,2420],{"class":65},[51,22143,22144,22146,22148,22151],{"class":53,"line":414},[51,22145,3838],{"class":65},[51,22147,1586],{"class":69},[51,22149,22150],{"class":61},"\"Person的构造函数调用\"",[51,22152,1703],{"class":65},[51,22154,22155],{"class":53,"line":433},[51,22156,2577],{"class":65},[51,22158,22159,22161],{"class":53,"line":439},[51,22160,18935],{"class":57},[51,22162,2366],{"class":65},[51,22164,22165],{"class":53,"line":444},[51,22166,2420],{"class":65},[51,22168,22169,22171,22173,22176,22178],{"class":53,"line":453},[51,22170,3838],{"class":65},[51,22172,1586],{"class":69},[51,22174,22175],{"class":61},"\"Person析构函数调用\"",[51,22177,1586],{"class":69},[51,22179,1608],{"class":65},[51,22181,22182],{"class":53,"line":2174},[51,22183,2577],{"class":65},[51,22185,22186],{"class":53,"line":2965},[51,22187,8164],{"class":601},[51,22189,22190],{"class":53,"line":2979},[51,22191,15276],{"class":65},[51,22193,22194],{"class":53,"line":2987},[51,22195,22196],{"class":601},"    \u002F\u002F手机\n",[51,22198,22199],{"class":53,"line":2992},[51,22200,22201],{"class":65},"    Phone m_Phone;\n",[51,22203,22204],{"class":53,"line":2998},[51,22205,4381],{"class":65},[51,22207,22208,22210,22212],{"class":53,"line":3004},[51,22209,5748],{"class":69},[51,22211,5972],{"class":57},[51,22213,2366],{"class":65},[51,22215,22216],{"class":53,"line":3009},[51,22217,1955],{"class":65},[51,22219,22220,22222,22224,22226,22228,22230,22233],{"class":53,"line":8332},[51,22221,19814],{"class":65},[51,22223,10],{"class":57},[51,22225,546],{"class":65},[51,22227,8300],{"class":61},[51,22229,920],{"class":65},[51,22231,22232],{"class":61},"\"安卓\"",[51,22234,3107],{"class":65},[51,22236,22237,22239,22241,22244,22246,22249,22251],{"class":53,"line":8356},[51,22238,1960],{"class":65},[51,22240,1586],{"class":69},[51,22242,22243],{"class":65},"p.Name",[51,22245,1586],{"class":69},[51,22247,22248],{"class":61},"\"拿着：\"",[51,22250,1586],{"class":69},[51,22252,22253],{"class":65},"p.m_phone.m_PName;\n",[51,22255,22256],{"class":53,"line":8361},[51,22257,1974],{"class":65},[51,22259,22260,22262,22264],{"class":53,"line":8367},[51,22261,549],{"class":69},[51,22263,2363],{"class":57},[51,22265,2366],{"class":65},[51,22267,22268],{"class":53,"line":8394},[51,22269,1955],{"class":65},[51,22271,22272,22274],{"class":53,"line":8399},[51,22273,6017],{"class":57},[51,22275,6020],{"class":65},[51,22277,22278],{"class":53,"line":8405},[51,22279,1974],{"class":65},[10,22281,9409],{},[41,22283,22285],{"className":534,"code":22284,"language":536,"meta":46,"style":46},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[48,22286,22287,22292],{"__ignoreMap":46},[51,22288,22289],{"class":53,"line":54},[51,22290,22291],{"class":601},"    \u002F\u002F不需要写这个：\n",[51,22293,22294],{"class":53,"line":185},[51,22295,22296],{"class":601},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[10,22298,22299],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[41,22301,22303],{"className":534,"code":22302,"language":536,"meta":46,"style":46},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[48,22304,22305],{"__ignoreMap":46},[51,22306,22307,22309,22312,22314,22317,22320],{"class":53,"line":54},[51,22308,19429],{"class":57},[51,22310,22311],{"class":65},"(string name.string pname):",[51,22313,15394],{"class":57},[51,22315,22316],{"class":65},"(name),",[51,22318,22319],{"class":57},"m_phone",[51,22321,22322],{"class":65},"(pname) {}\n",[10,22324,22325,22326,70,22329],{},"采用的是隐式转换法，实际为如下：\n",[48,22327,22328],{},"m_phone(pname)",[48,22330,22331],{},"Phone m_phone=pname",[10,22333,22334,22337],{},[691,22335,22336],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[10,22339,22340],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[513,22342,22344],{"id":22343},"_828静态对象","8.2.8静态对象",[10,22346,22347],{},"静态对象在成员对象前static，称为静态对象",[10,22349,22350],{},"静态对象分为两类：",[19,22352,22353],{},[22,22354,22355],{},"静态成员变量",[1549,22357,22358,22361,22364],{},[22,22359,22360],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[22,22362,22363],{},"②在编译阶段分配内存",[22,22365,22366],{},"③类内声明，类外初始化",[19,22368,22369],{"start":185},[22,22370,22371],{},"静态成员函数",[1549,22373,22374,22377],{},[22,22375,22376],{},"①所有对象共享同一个函数",[22,22378,22379],{},"②静态成员函数只能访问静态成员变量",[22381,22382,22384],"h4",{"id":22383},"_8281静态成员变量","8.2.8.1静态成员变量",[41,22386,22388],{"className":534,"code":22387,"language":536,"meta":46,"style":46},"#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",[48,22389,22390,22396,22406,22412,22416,22420,22425,22430,22435,22443,22447,22451,22455,22463,22467,22471,22476,22489,22493,22501,22505,22511],{"__ignoreMap":46},[51,22391,22392,22394],{"class":53,"line":54},[51,22393,2340],{"class":69},[51,22395,2343],{"class":61},[51,22397,22398,22400,22402,22404],{"class":53,"line":185},[51,22399,2348],{"class":69},[51,22401,2351],{"class":69},[51,22403,2354],{"class":57},[51,22405,1703],{"class":65},[51,22407,22408,22410],{"class":53,"line":202},[51,22409,15078],{"class":69},[51,22411,15555],{"class":57},[51,22413,22414],{"class":53,"line":209},[51,22415,1955],{"class":65},[51,22417,22418],{"class":53,"line":223},[51,22419,15100],{"class":69},[51,22421,22422],{"class":53,"line":237},[51,22423,22424],{"class":601},"    \u002F\u002F非静态成员变量\n",[51,22426,22427],{"class":53,"line":242},[51,22428,22429],{"class":601},"    \u002F\u002F int m_A;\n",[51,22431,22432],{"class":53,"line":257},[51,22433,22434],{"class":601},"    \u002F\u002F定义静态成员变量\n",[51,22436,22437,22439,22441],{"class":53,"line":262},[51,22438,11404],{"class":69},[51,22440,2772],{"class":69},[51,22442,21775],{"class":65},[51,22444,22445],{"class":53,"line":285},[51,22446,206],{"emptyLinePlaceholder":205},[51,22448,22449],{"class":53,"line":296},[51,22450,206],{"emptyLinePlaceholder":205},[51,22452,22453],{"class":53,"line":307},[51,22454,4381],{"class":65},[51,22456,22457,22459,22461],{"class":53,"line":324},[51,22458,5748],{"class":69},[51,22460,5972],{"class":57},[51,22462,2366],{"class":65},[51,22464,22465],{"class":53,"line":329},[51,22466,1955],{"class":65},[51,22468,22469],{"class":53,"line":334},[51,22470,15697],{"class":65},[51,22472,22473],{"class":53,"line":340},[51,22474,22475],{"class":601},"    \u002F\u002F输出类成员变量这块内存\n",[51,22477,22478,22480,22482,22485,22487],{"class":53,"line":345},[51,22479,1960],{"class":65},[51,22481,1586],{"class":69},[51,22483,22484],{"class":65},"p.m_A",[51,22486,1586],{"class":69},[51,22488,1608],{"class":65},[51,22490,22491],{"class":53,"line":357},[51,22492,1974],{"class":65},[51,22494,22495,22497,22499],{"class":53,"line":366},[51,22496,549],{"class":69},[51,22498,2363],{"class":57},[51,22500,2366],{"class":65},[51,22502,22503],{"class":53,"line":383},[51,22504,1955],{"class":65},[51,22506,22507,22509],{"class":53,"line":392},[51,22508,6017],{"class":57},[51,22510,2366],{"class":65},[51,22512,22513],{"class":53,"line":403},[51,22514,1974],{"class":65},[10,22516,22517],{},"此时输出是报错的：无法解析外部命令",[10,22519,22520],{},"解决这一问题：必须用到类内声明，类外初始化操作",[41,22522,22524],{"className":534,"code":22523,"language":536,"meta":46,"style":46},"#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",[48,22525,22526,22532,22542,22548,22552,22556,22561,22569,22573,22578,22593,22601,22605,22609,22614,22619,22631,22636,22647,22652,22657,22670,22674,22682,22686,22692],{"__ignoreMap":46},[51,22527,22528,22530],{"class":53,"line":54},[51,22529,2340],{"class":69},[51,22531,2343],{"class":61},[51,22533,22534,22536,22538,22540],{"class":53,"line":185},[51,22535,2348],{"class":69},[51,22537,2351],{"class":69},[51,22539,2354],{"class":57},[51,22541,1703],{"class":65},[51,22543,22544,22546],{"class":53,"line":202},[51,22545,15078],{"class":69},[51,22547,15555],{"class":57},[51,22549,22550],{"class":53,"line":209},[51,22551,1955],{"class":65},[51,22553,22554],{"class":53,"line":223},[51,22555,15100],{"class":69},[51,22557,22558],{"class":53,"line":237},[51,22559,22560],{"class":601},"    \u002F\u002F类内声明\n",[51,22562,22563,22565,22567],{"class":53,"line":242},[51,22564,11404],{"class":69},[51,22566,2772],{"class":69},[51,22568,21775],{"class":65},[51,22570,22571],{"class":53,"line":257},[51,22572,4381],{"class":65},[51,22574,22575],{"class":53,"line":262},[51,22576,22577],{"class":601},"\u002F\u002F类外初始化\n",[51,22579,22580,22582,22584,22587,22589,22591],{"class":53,"line":285},[51,22581,549],{"class":69},[51,22583,15953],{"class":57},[51,22585,22586],{"class":65},"::m_A",[51,22588,70],{"class":69},[51,22590,988],{"class":278},[51,22592,1703],{"class":65},[51,22594,22595,22597,22599],{"class":53,"line":296},[51,22596,5748],{"class":69},[51,22598,5972],{"class":57},[51,22600,2366],{"class":65},[51,22602,22603],{"class":53,"line":307},[51,22604,1955],{"class":65},[51,22606,22607],{"class":53,"line":324},[51,22608,15697],{"class":65},[51,22610,22611],{"class":53,"line":329},[51,22612,22613],{"class":601},"    \u002F\u002F访问变量的原内存空间\n",[51,22615,22616],{"class":53,"line":334},[51,22617,22618],{"class":601},"    \u002F\u002F100\n",[51,22620,22621,22623,22625,22627,22629],{"class":53,"line":340},[51,22622,1960],{"class":65},[51,22624,1586],{"class":69},[51,22626,22484],{"class":65},[51,22628,1586],{"class":69},[51,22630,1608],{"class":65},[51,22632,22633],{"class":53,"line":345},[51,22634,22635],{"class":65},"    Person p2;\n",[51,22637,22638,22641,22643,22645],{"class":53,"line":357},[51,22639,22640],{"class":65},"    p2.m_A",[51,22642,70],{"class":69},[51,22644,2120],{"class":278},[51,22646,1703],{"class":65},[51,22648,22649],{"class":53,"line":366},[51,22650,22651],{"class":601},"    \u002F\u002F继续访问这片空间\n",[51,22653,22654],{"class":53,"line":383},[51,22655,22656],{"class":601},"    \u002F\u002F200\n",[51,22658,22659,22661,22663,22666,22668],{"class":53,"line":392},[51,22660,1960],{"class":65},[51,22662,1586],{"class":69},[51,22664,22665],{"class":65},"p2.m_A",[51,22667,1586],{"class":69},[51,22669,1608],{"class":65},[51,22671,22672],{"class":53,"line":403},[51,22673,1974],{"class":65},[51,22675,22676,22678,22680],{"class":53,"line":409},[51,22677,549],{"class":69},[51,22679,2363],{"class":57},[51,22681,2366],{"class":65},[51,22683,22684],{"class":53,"line":414},[51,22685,1955],{"class":65},[51,22687,22688,22690],{"class":53,"line":433},[51,22689,6017],{"class":57},[51,22691,6020],{"class":65},[51,22693,22694],{"class":53,"line":439},[51,22695,1974],{"class":65},[10,22697,22698],{},[691,22699,22700],{},"静态变量的访问",[41,22702,22704],{"className":534,"code":22703,"language":536,"meta":46,"style":46},"#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",[48,22705,22706,22712,22722,22728,22732,22736,22740,22748,22752,22757,22765,22769,22773,22787,22802,22810,22814,22819,22824,22829,22834,22846,22851,22856,22870,22887,22891,22899,22903,22909],{"__ignoreMap":46},[51,22707,22708,22710],{"class":53,"line":54},[51,22709,2340],{"class":69},[51,22711,2343],{"class":61},[51,22713,22714,22716,22718,22720],{"class":53,"line":185},[51,22715,2348],{"class":69},[51,22717,2351],{"class":69},[51,22719,2354],{"class":57},[51,22721,1703],{"class":65},[51,22723,22724,22726],{"class":53,"line":202},[51,22725,15078],{"class":69},[51,22727,15555],{"class":57},[51,22729,22730],{"class":53,"line":209},[51,22731,1955],{"class":65},[51,22733,22734],{"class":53,"line":223},[51,22735,15100],{"class":69},[51,22737,22738],{"class":53,"line":237},[51,22739,22560],{"class":601},[51,22741,22742,22744,22746],{"class":53,"line":242},[51,22743,11404],{"class":69},[51,22745,2772],{"class":69},[51,22747,21775],{"class":65},[51,22749,22750],{"class":53,"line":257},[51,22751,15606],{"class":69},[51,22753,22754],{"class":53,"line":262},[51,22755,22756],{"class":601},"    \u002F\u002F静态成员变量也是有访问权限的\n",[51,22758,22759,22761,22763],{"class":53,"line":285},[51,22760,11404],{"class":69},[51,22762,2772],{"class":69},[51,22764,21782],{"class":65},[51,22766,22767],{"class":53,"line":296},[51,22768,4381],{"class":65},[51,22770,22771],{"class":53,"line":307},[51,22772,22577],{"class":601},[51,22774,22775,22777,22779,22781,22783,22785],{"class":53,"line":324},[51,22776,549],{"class":69},[51,22778,15953],{"class":57},[51,22780,22586],{"class":65},[51,22782,70],{"class":69},[51,22784,988],{"class":278},[51,22786,1703],{"class":65},[51,22788,22789,22791,22793,22796,22798,22800],{"class":53,"line":329},[51,22790,549],{"class":69},[51,22792,15953],{"class":57},[51,22794,22795],{"class":65},"::m_B",[51,22797,70],{"class":69},[51,22799,1242],{"class":278},[51,22801,1703],{"class":65},[51,22803,22804,22806,22808],{"class":53,"line":334},[51,22805,5748],{"class":69},[51,22807,6041],{"class":57},[51,22809,2366],{"class":65},[51,22811,22812],{"class":53,"line":340},[51,22813,1955],{"class":65},[51,22815,22816],{"class":53,"line":345},[51,22817,22818],{"class":601},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[51,22820,22821],{"class":53,"line":357},[51,22822,22823],{"class":601},"    \u002F\u002F静态成员变量有两种访问方式：\n",[51,22825,22826],{"class":53,"line":366},[51,22827,22828],{"class":601},"    \u002F\u002F1.通过对象进行访问\n",[51,22830,22831],{"class":53,"line":383},[51,22832,22833],{"class":65},"    Person p;  \n",[51,22835,22836,22838,22840,22842,22844],{"class":53,"line":392},[51,22837,1960],{"class":65},[51,22839,1586],{"class":69},[51,22841,22484],{"class":65},[51,22843,1586],{"class":69},[51,22845,1608],{"class":65},[51,22847,22848],{"class":53,"line":403},[51,22849,22850],{"class":601},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[51,22852,22853],{"class":53,"line":409},[51,22854,22855],{"class":601},"    \u002F\u002F2.通过类名进行访问\n",[51,22857,22858,22860,22862,22864,22866,22868],{"class":53,"line":414},[51,22859,1960],{"class":65},[51,22861,1586],{"class":69},[51,22863,19429],{"class":57},[51,22865,22586],{"class":65},[51,22867,1586],{"class":69},[51,22869,1608],{"class":65},[51,22871,22872,22874,22876,22878,22880,22882,22884],{"class":53,"line":433},[51,22873,1960],{"class":65},[51,22875,1586],{"class":69},[51,22877,19429],{"class":57},[51,22879,22795],{"class":65},[51,22881,1586],{"class":69},[51,22883,1651],{"class":65},[51,22885,22886],{"class":601}," \u002F\u002F没有访问权限，报错\n",[51,22888,22889],{"class":53,"line":439},[51,22890,1974],{"class":65},[51,22892,22893,22895,22897],{"class":53,"line":444},[51,22894,549],{"class":69},[51,22896,2363],{"class":57},[51,22898,2366],{"class":65},[51,22900,22901],{"class":53,"line":453},[51,22902,1955],{"class":65},[51,22904,22905,22907],{"class":53,"line":2174},[51,22906,6086],{"class":57},[51,22908,6020],{"class":65},[51,22910,22911],{"class":53,"line":2965},[51,22912,1974],{"class":65},[22381,22914,22916],{"id":22915},"_8282静态成员函数","8.2.8.2静态成员函数",[10,22918,22919],{},"1.静态成员函数定义与访问",[41,22921,22923],{"className":534,"code":22922,"language":536,"meta":46,"style":46},"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",[48,22924,22925,22931,22935,22939,22944,22955,22959,22973,22977,22981,22989,22993,22998,23003,23007,23015,23020,23030],{"__ignoreMap":46},[51,22926,22927,22929],{"class":53,"line":54},[51,22928,15078],{"class":69},[51,22930,15555],{"class":57},[51,22932,22933],{"class":53,"line":185},[51,22934,1955],{"class":65},[51,22936,22937],{"class":53,"line":202},[51,22938,15100],{"class":69},[51,22940,22941],{"class":53,"line":209},[51,22942,22943],{"class":601},"    \u002F\u002F在公共权限下定义静态成员函数\n",[51,22945,22946,22948,22951,22953],{"class":53,"line":223},[51,22947,11404],{"class":69},[51,22949,22950],{"class":69}," void",[51,22952,11769],{"class":57},[51,22954,2366],{"class":65},[51,22956,22957],{"class":53,"line":237},[51,22958,2420],{"class":65},[51,22960,22961,22964,22966,22969,22971],{"class":53,"line":242},[51,22962,22963],{"class":65},"        coout",[51,22965,1586],{"class":69},[51,22967,22968],{"class":61},"\"静态成员函数的调用\"",[51,22970,1586],{"class":69},[51,22972,1608],{"class":65},[51,22974,22975],{"class":53,"line":257},[51,22976,2577],{"class":65},[51,22978,22979],{"class":53,"line":262},[51,22980,4381],{"class":65},[51,22982,22983,22985,22987],{"class":53,"line":285},[51,22984,5748],{"class":69},[51,22986,5972],{"class":57},[51,22988,2366],{"class":65},[51,22990,22991],{"class":53,"line":296},[51,22992,1955],{"class":65},[51,22994,22995],{"class":53,"line":307},[51,22996,22997],{"class":601},"    \u002F\u002F静态成员函数的调用方式:\n",[51,22999,23000],{"class":53,"line":324},[51,23001,23002],{"class":601},"    \u002F\u002F1.通过对象访问\n",[51,23004,23005],{"class":53,"line":329},[51,23006,15697],{"class":65},[51,23008,23009,23011,23013],{"class":53,"line":334},[51,23010,16249],{"class":65},[51,23012,11935],{"class":57},[51,23014,6020],{"class":65},[51,23016,23017],{"class":53,"line":340},[51,23018,23019],{"class":601},"    \u002F\u002F2.通过类名访问\n",[51,23021,23022,23024,23026,23028],{"class":53,"line":345},[51,23023,18902],{"class":57},[51,23025,18115],{"class":65},[51,23027,11935],{"class":57},[51,23029,6020],{"class":65},[51,23031,23032],{"class":53,"line":357},[51,23033,1974],{"class":65},[19,23035,23036],{"start":185},[22,23037,23038],{},"静态成员函数只能访问静态成员变量",[41,23040,23042],{"className":534,"code":23041,"language":536,"meta":46,"style":46},"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",[48,23043,23044,23050,23054,23058,23062,23072,23076,23090,23095,23107,23111,23122,23132,23136,23140,23144,23154,23158,23171,23175,23179,23183,23187,23201,23209,23213,23217,23221,23225,23233,23237,23247,23252,23256,23264,23268,23274],{"__ignoreMap":46},[51,23045,23046,23048],{"class":53,"line":54},[51,23047,15078],{"class":69},[51,23049,15555],{"class":57},[51,23051,23052],{"class":53,"line":185},[51,23053,1955],{"class":65},[51,23055,23056],{"class":53,"line":202},[51,23057,15100],{"class":69},[51,23059,23060],{"class":53,"line":209},[51,23061,22943],{"class":601},[51,23063,23064,23066,23068,23070],{"class":53,"line":223},[51,23065,11404],{"class":69},[51,23067,22950],{"class":69},[51,23069,11769],{"class":57},[51,23071,2366],{"class":65},[51,23073,23074],{"class":53,"line":237},[51,23075,2420],{"class":65},[51,23077,23078,23081,23083,23085,23087],{"class":53,"line":242},[51,23079,23080],{"class":65},"        m_A",[51,23082,70],{"class":69},[51,23084,853],{"class":278},[51,23086,598],{"class":65},[51,23088,23089],{"class":601}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[51,23091,23092],{"class":53,"line":257},[51,23093,23094],{"class":601},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[51,23096,23097,23099,23101,23103,23105],{"class":53,"line":262},[51,23098,22963],{"class":65},[51,23100,1586],{"class":69},[51,23102,22968],{"class":61},[51,23104,1586],{"class":69},[51,23106,1608],{"class":65},[51,23108,23109],{"class":53,"line":285},[51,23110,2577],{"class":65},[51,23112,23113,23115,23117,23119],{"class":53,"line":296},[51,23114,11404],{"class":69},[51,23116,2772],{"class":69},[51,23118,15832],{"class":65},[51,23120,23121],{"class":601}," \u002F\u002F静态成员变量\n",[51,23123,23124,23126,23129],{"class":53,"line":307},[51,23125,2375],{"class":69},[51,23127,23128],{"class":65}," m_B;",[51,23130,23131],{"class":601}," \u002F\u002F非静态成员变量\n",[51,23133,23134],{"class":53,"line":324},[51,23135,206],{"emptyLinePlaceholder":205},[51,23137,23138],{"class":53,"line":329},[51,23139,15606],{"class":69},[51,23141,23142],{"class":53,"line":334},[51,23143,22756],{"class":601},[51,23145,23146,23148,23150,23152],{"class":53,"line":340},[51,23147,11404],{"class":69},[51,23149,22950],{"class":69},[51,23151,14002],{"class":57},[51,23153,2366],{"class":65},[51,23155,23156],{"class":53,"line":345},[51,23157,2420],{"class":65},[51,23159,23160,23162,23164,23167,23169],{"class":53,"line":357},[51,23161,3838],{"class":65},[51,23163,1586],{"class":69},[51,23165,23166],{"class":61},"\"这是私有权限下的静态函数调用\"",[51,23168,1586],{"class":69},[51,23170,1608],{"class":65},[51,23172,23173],{"class":53,"line":366},[51,23174,2577],{"class":65},[51,23176,23177],{"class":53,"line":383},[51,23178,206],{"emptyLinePlaceholder":205},[51,23180,23181],{"class":53,"line":392},[51,23182,206],{"emptyLinePlaceholder":205},[51,23184,23185],{"class":53,"line":403},[51,23186,4381],{"class":65},[51,23188,23189,23191,23193,23195,23197,23199],{"class":53,"line":409},[51,23190,549],{"class":69},[51,23192,15953],{"class":57},[51,23194,22586],{"class":65},[51,23196,70],{"class":69},[51,23198,733],{"class":278},[51,23200,1703],{"class":65},[51,23202,23203,23205,23207],{"class":53,"line":414},[51,23204,5748],{"class":69},[51,23206,5972],{"class":57},[51,23208,2366],{"class":65},[51,23210,23211],{"class":53,"line":433},[51,23212,1955],{"class":65},[51,23214,23215],{"class":53,"line":439},[51,23216,22997],{"class":601},[51,23218,23219],{"class":53,"line":444},[51,23220,23002],{"class":601},[51,23222,23223],{"class":53,"line":453},[51,23224,15697],{"class":65},[51,23226,23227,23229,23231],{"class":53,"line":2174},[51,23228,16249],{"class":65},[51,23230,11935],{"class":57},[51,23232,6020],{"class":65},[51,23234,23235],{"class":53,"line":2965},[51,23236,23019],{"class":601},[51,23238,23239,23241,23243,23245],{"class":53,"line":2979},[51,23240,18902],{"class":57},[51,23242,18115],{"class":65},[51,23244,11935],{"class":57},[51,23246,6020],{"class":65},[51,23248,23249],{"class":53,"line":2987},[51,23250,23251],{"class":601},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[51,23253,23254],{"class":53,"line":2992},[51,23255,1974],{"class":65},[51,23257,23258,23260,23262],{"class":53,"line":2998},[51,23259,549],{"class":69},[51,23261,2363],{"class":57},[51,23263,2366],{"class":65},[51,23265,23266],{"class":53,"line":3004},[51,23267,1955],{"class":65},[51,23269,23270,23272],{"class":53,"line":3009},[51,23271,6017],{"class":57},[51,23273,6020],{"class":65},[51,23275,23276],{"class":53,"line":8332},[51,23277,1974],{"class":65},[513,23279,23281],{"id":23280},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22381,23283,23285],{"id":23284},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[10,23287,23288],{},"在c++中，类内的成员变量和成员函数分开存储",[10,23290,23291],{},"只有非静态成员变量才属于类的对象上",[23293,23294,23296],"h5",{"id":23295},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[41,23298,23300],{"className":534,"code":23299,"language":536,"meta":46,"style":46},"#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",[48,23301,23302,23309,23319,23325,23329,23333,23337,23345,23349,23353,23376,23380,23388,23392,23398],{"__ignoreMap":46},[51,23303,23304,23306],{"class":53,"line":54},[51,23305,2340],{"class":69},[51,23307,23308],{"class":61},"\u003Ciostraem>\n",[51,23310,23311,23313,23315,23317],{"class":53,"line":185},[51,23312,2348],{"class":69},[51,23314,2351],{"class":69},[51,23316,2354],{"class":57},[51,23318,1703],{"class":65},[51,23320,23321,23323],{"class":53,"line":202},[51,23322,15078],{"class":69},[51,23324,15555],{"class":57},[51,23326,23327],{"class":53,"line":209},[51,23328,1955],{"class":65},[51,23330,23331],{"class":53,"line":223},[51,23332,206],{"emptyLinePlaceholder":205},[51,23334,23335],{"class":53,"line":237},[51,23336,4381],{"class":65},[51,23338,23339,23341,23343],{"class":53,"line":242},[51,23340,5748],{"class":69},[51,23342,5972],{"class":57},[51,23344,2366],{"class":65},[51,23346,23347],{"class":53,"line":257},[51,23348,1955],{"class":65},[51,23350,23351],{"class":53,"line":262},[51,23352,15697],{"class":65},[51,23354,23355,23357,23359,23362,23364,23367,23369,23371,23373],{"class":53,"line":285},[51,23356,1960],{"class":65},[51,23358,1586],{"class":69},[51,23360,23361],{"class":61},"\"size of p=\"",[51,23363,1586],{"class":69},[51,23365,23366],{"class":57},"sizeoif",[51,23368,6923],{"class":65},[51,23370,1586],{"class":69},[51,23372,1651],{"class":65},[51,23374,23375],{"class":601}," \u002F\u002F查看这个空类的占用的内存空间\n",[51,23377,23378],{"class":53,"line":296},[51,23379,1974],{"class":65},[51,23381,23382,23384,23386],{"class":53,"line":307},[51,23383,549],{"class":69},[51,23385,2363],{"class":57},[51,23387,2366],{"class":65},[51,23389,23390],{"class":53,"line":324},[51,23391,1955],{"class":65},[51,23393,23394,23396],{"class":53,"line":329},[51,23395,6017],{"class":57},[51,23397,6020],{"class":65},[51,23399,23400],{"class":53,"line":334},[51,23401,1974],{"class":65},[10,23403,23404],{},"输出结果为：size of p=1",[10,23406,23407],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[10,23409,23410],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23293,23412,23414],{"id":23413},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[41,23416,23418],{"className":534,"code":23417,"language":536,"meta":46,"style":46},"#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",[48,23419,23420,23426,23436,23444,23448,23457,23461,23469,23473,23477,23496,23500,23504,23512,23516,23522],{"__ignoreMap":46},[51,23421,23422,23424],{"class":53,"line":54},[51,23423,2340],{"class":69},[51,23425,2343],{"class":61},[51,23427,23428,23430,23432,23434],{"class":53,"line":185},[51,23429,2348],{"class":69},[51,23431,2351],{"class":69},[51,23433,2354],{"class":57},[51,23435,1703],{"class":65},[51,23437,23438,23440,23442],{"class":53,"line":202},[51,23439,15078],{"class":69},[51,23441,15953],{"class":57},[51,23443,3062],{"class":65},[51,23445,23446],{"class":53,"line":209},[51,23447,1955],{"class":65},[51,23449,23450,23452,23454],{"class":53,"line":223},[51,23451,2375],{"class":69},[51,23453,15832],{"class":65},[51,23455,23456],{"class":601},"\u002F\u002F非静态成员变量\n",[51,23458,23459],{"class":53,"line":237},[51,23460,4381],{"class":65},[51,23462,23463,23465,23467],{"class":53,"line":242},[51,23464,5748],{"class":69},[51,23466,5972],{"class":57},[51,23468,2366],{"class":65},[51,23470,23471],{"class":53,"line":257},[51,23472,1955],{"class":65},[51,23474,23475],{"class":53,"line":262},[51,23476,15697],{"class":65},[51,23478,23479,23481,23483,23485,23487,23489,23491,23493],{"class":53,"line":285},[51,23480,1960],{"class":65},[51,23482,1586],{"class":69},[51,23484,23361],{"class":61},[51,23486,1782],{"class":69},[51,23488,6923],{"class":65},[51,23490,1586],{"class":69},[51,23492,1651],{"class":65},[51,23494,23495],{"class":601}," \u002F\u002F查看不是空对象时占用多少内存\n",[51,23497,23498],{"class":53,"line":296},[51,23499,206],{"emptyLinePlaceholder":205},[51,23501,23502],{"class":53,"line":307},[51,23503,1974],{"class":65},[51,23505,23506,23508,23510],{"class":53,"line":324},[51,23507,549],{"class":69},[51,23509,2363],{"class":57},[51,23511,2366],{"class":65},[51,23513,23514],{"class":53,"line":329},[51,23515,1955],{"class":65},[51,23517,23518,23520],{"class":53,"line":334},[51,23519,6017],{"class":57},[51,23521,6020],{"class":65},[51,23523,23524],{"class":53,"line":340},[51,23525,1974],{"class":65},[10,23527,23528],{},"输出结果：size of p=4",[10,23530,23531],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[19,23533,23534],{},[22,23535,23536],{},"如果加上非静态成员变量，Person类修改如下",[41,23538,23540],{"className":534,"code":23539,"language":536,"meta":46,"style":46},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[48,23541,23542,23548,23552,23558,23566,23570,23575],{"__ignoreMap":46},[51,23543,23544,23546],{"class":53,"line":54},[51,23545,15078],{"class":69},[51,23547,15555],{"class":57},[51,23549,23550],{"class":53,"line":185},[51,23551,1955],{"class":65},[51,23553,23554,23556],{"class":53,"line":202},[51,23555,2375],{"class":69},[51,23557,21775],{"class":65},[51,23559,23560,23562,23564],{"class":53,"line":209},[51,23561,11404],{"class":69},[51,23563,2772],{"class":69},[51,23565,21782],{"class":65},[51,23567,23568],{"class":53,"line":223},[51,23569,4381],{"class":65},[51,23571,23572],{"class":53,"line":237},[51,23573,23574],{"class":601},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[51,23576,23577,23579,23581,23583,23585,23587],{"class":53,"line":242},[51,23578,549],{"class":69},[51,23580,15953],{"class":57},[51,23582,22795],{"class":65},[51,23584,70],{"class":69},[51,23586,733],{"class":278},[51,23588,1703],{"class":65},[10,23590,23591],{},"输出结果：4",[10,23593,23594],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[19,23596,23597],{"start":185},[22,23598,23599],{},"加上非静态成员函数",[41,23601,23603],{"className":534,"code":23602,"language":536,"meta":46,"style":46},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[48,23604,23605,23612,23616,23622,23630,23634,23638,23642],{"__ignoreMap":46},[51,23606,23607,23609],{"class":53,"line":54},[51,23608,15078],{"class":69},[51,23610,23611],{"class":57},"  Person\n",[51,23613,23614],{"class":53,"line":185},[51,23615,1955],{"class":65},[51,23617,23618,23620],{"class":53,"line":202},[51,23619,2375],{"class":69},[51,23621,21775],{"class":65},[51,23623,23624,23626,23628],{"class":53,"line":209},[51,23625,15293],{"class":69},[51,23627,11769],{"class":57},[51,23629,2366],{"class":65},[51,23631,23632],{"class":53,"line":223},[51,23633,2420],{"class":65},[51,23635,23636],{"class":53,"line":237},[51,23637,206],{"emptyLinePlaceholder":205},[51,23639,23640],{"class":53,"line":242},[51,23641,2577],{"class":65},[51,23643,23644],{"class":53,"line":257},[51,23645,4381],{"class":65},[10,23647,23648],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[19,23650,23651],{"start":202},[22,23652,23653],{},"加上静态成员函数",[41,23655,23657],{"className":534,"code":23656,"language":536,"meta":46,"style":46},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[48,23658,23659,23665,23669,23675,23683,23687,23691,23695,23706,23710,23714,23718],{"__ignoreMap":46},[51,23660,23661,23663],{"class":53,"line":54},[51,23662,15078],{"class":69},[51,23664,23611],{"class":57},[51,23666,23667],{"class":53,"line":185},[51,23668,1955],{"class":65},[51,23670,23671,23673],{"class":53,"line":202},[51,23672,2375],{"class":69},[51,23674,21775],{"class":65},[51,23676,23677,23679,23681],{"class":53,"line":209},[51,23678,15293],{"class":69},[51,23680,11769],{"class":57},[51,23682,2366],{"class":65},[51,23684,23685],{"class":53,"line":223},[51,23686,2420],{"class":65},[51,23688,23689],{"class":53,"line":237},[51,23690,206],{"emptyLinePlaceholder":205},[51,23692,23693],{"class":53,"line":242},[51,23694,2577],{"class":65},[51,23696,23697,23699,23701,23704],{"class":53,"line":257},[51,23698,11404],{"class":69},[51,23700,22950],{"class":69},[51,23702,23703],{"class":57}," func1",[51,23705,2366],{"class":65},[51,23707,23708],{"class":53,"line":262},[51,23709,2420],{"class":65},[51,23711,23712],{"class":53,"line":285},[51,23713,206],{"emptyLinePlaceholder":205},[51,23715,23716],{"class":53,"line":296},[51,23717,2577],{"class":65},[51,23719,23720],{"class":53,"line":307},[51,23721,4381],{"class":65},[10,23723,23591],{},[10,23725,23726],{},"解释：静态成员函数也不属于类上",[464,23728,8058],{},{"title":46,"searchDepth":185,"depth":185,"links":23730},[23731,23737],{"id":15029,"depth":185,"text":15030,"children":23732},[23733,23734,23735,23736],{"id":15033,"depth":202,"text":15034},{"id":15758,"depth":202,"text":15759},{"id":15930,"depth":202,"text":15931},{"id":16388,"depth":202,"text":16389},{"id":18760,"depth":185,"text":18761,"children":23738},[23739,23740,23741,23742,23743,23744,23745,23746,23747],{"id":18772,"depth":202,"text":18773},{"id":19065,"depth":202,"text":19066},{"id":19556,"depth":202,"text":19557},{"id":20653,"depth":202,"text":20654},{"id":21076,"depth":202,"text":21077},{"id":21555,"depth":202,"text":21556},{"id":21930,"depth":202,"text":21931},{"id":22343,"depth":202,"text":22344},{"id":23280,"depth":202,"text":23281},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14994,"description":23748},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23755,"title":536,"body":23756,"description":23760,"extension":469,"meta":23761,"navigation":205,"path":23762,"seo":23763,"stem":23764,"__hash__":23765},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23757,"toc":23758},[],{"title":46,"searchDepth":185,"depth":185,"links":23759},[],null,{"category":471},"\u002Fwiki\u002F2026-05-24-c++",{"title":536,"description":23760},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23767,"title":23768,"body":23769,"description":46,"extension":469,"meta":24358,"navigation":205,"path":24359,"seo":24360,"stem":24361,"__hash__":24362},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23770,"toc":24340},[23771,23774,23778,23781,23784,23787,23805,23810,23813,23816,23819,23822,23827,23830,23835,23838,23841,23845,23848,23851,23857,23860,23878,23882,23886,23889,23894,23897,23901,23904,23917,23920,23924,23927,23930,23933,23958,23961,23970,23981,23996,24028,24032,24039,24047,24051,24054,24057,24062,24066,24069,24072,24077,24080,24084,24087,24090,24095,24098,24102,24107,24111,24178,24182,24185,24188,24191,24194,24197,24203,24222,24225,24239,24248,24252,24255,24258,24263,24266,24271,24276,24279,24282,24287,24292,24295,24300,24305,24308,24313,24318,24321,24324,24329,24332,24337],[14,23772,23768],{"id":23773},"_1强化学习基本认识",[486,23775,23777],{"id":23776},"_11什么是强化学习","1.1.什么是强化学习",[10,23779,23780],{},"强化学习有两部分组成：智能体和环境；",[10,23782,23783],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[10,23785,23786],{},"强化学习与监督学习的区别:",[19,23788,23789,23792,23795,23798],{},[22,23790,23791],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[22,23793,23794],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[22,23796,23797],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[22,23799,23800,23801,23804],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[691,23802,23803],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[10,23806,23807],{},[460,23808],{"alt":46,"src":23809},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[10,23811,23812],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[10,23814,23815],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[10,23817,23818],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[10,23820,23821],{},"获取奖励",[10,23823,23824],{},[460,23825],{"alt":46,"src":23826},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[10,23828,23829],{},"强化学习可以分成标准强化学习和深度强化学习",[10,23831,23832],{},[460,23833],{"alt":46,"src":23834},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[10,23836,23837],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[10,23839,23840],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[486,23842,23844],{"id":23843},"_12强化学习应用场景","1.2.强化学习应用场景",[10,23846,23847],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[10,23849,23850],{},"具身智能中的应用",[10,23852,23853,23856],{},[691,23854,23855],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[10,23858,23859],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[10,23861,23862,23863,23866,23867,23870,23871,23874,23875],{},"机器人是",[691,23864,23865],{},"躯体","，深度学习是",[691,23868,23869],{},"神经元****网络","，VLA是",[691,23872,23873],{},"通用的行为逻辑","，而强化学习是",[691,23876,23877],{},"教练",[486,23879,23881],{"id":23880},"_13序列决策","1.3.序列决策",[513,23883,23885],{"id":23884},"_131智能体与环境","1.3.1.智能体与环境",[10,23887,23888],{},"强化学习研究的问题是智能体agent与环境交互的问题",[10,23890,23891],{},[460,23892],{"alt":46,"src":23893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[10,23895,23896],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[513,23898,23900],{"id":23899},"_132奖励","1.3.2.奖励",[10,23902,23903],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[10,23905,23906,23907,23916],{},"取某个策略的表现如何。强化学习的目的就是",[691,23908,23909,23910,23915],{},"最大化",[691,23911,23912],{},[691,23913,23914],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[10,23918,23919],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[513,23921,23923],{"id":23922},"_133序列决策","1.3.3.序列决策",[10,23925,23926],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[10,23928,23929],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[10,23931,23932],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[10,23934,23935,23939,23940,23942,23943,23945,23946,23948,23949,14179,23952,14179,23955],{},[23936,23937,23938],"em",{},"Ht"," = ",[23936,23941,1138],{},"1*, a",[23936,23944,759],{},", r",[23936,23947,759],{},", . . . ,* ",[23936,23950,23951],{},"ot",[23936,23953,23954],{},", at ,",[23936,23956,23957],{},"rt",[10,23959,23960],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[10,23962,23963,23939,23966,2060,23968,971],{},[23936,23964,23965],{},"st",[23936,23967,595],{},[23936,23969,23938],{},[10,23971,23972,23973,23976,23977,23980],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[691,23974,23975],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[691,23978,23979],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[10,23982,23983,23984,23987,23988,23991,23992,23995],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[691,23985,23986],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[691,23989,23990],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23936,23993,23994],{},"S, A, T, R, Ω, O, γ",")。",[10,23997,23998,23999,24001,24002,24004,24005,546,24007,24010,24011,24013,24014,546,24017,24020,24021,24023,24024,24027],{},"其中 ",[23936,24000,1231],{}," 表示状态空间，为隐变量，",[23936,24003,774],{}," 为动作空间，",[23936,24006,1256],{},[23936,24008,24009],{},"s ′ |s, a",") 为状态转移概率，",[23936,24012,1206],{}," 为奖励函数，",[23936,24015,24016],{},"Ω",[23936,24018,24019],{},"o|s, a",") 为观测概率，",[23936,24022,1132],{}," 为观测空间，",[23936,24025,24026],{},"γ"," 为折扣因子。",[486,24029,24031],{"id":24030},"_14动作空间","1.4.动作空间",[10,24033,24034,24035,24038],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[691,24036,24037],{},"动作空间"," ，动作空间分为:",[19,24040,24041,24044],{},[22,24042,24043],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[22,24045,24046],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[486,24048,24050],{"id":24049},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[10,24052,24053],{},"由策略、价值函数、模型三部分组成",[10,24055,24056],{},"这三者组成马尔可夫决策过程",[10,24058,24059],{},[460,24060],{"alt":46,"src":24061},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[513,24063,24065],{"id":24064},"_151策略","1.5.1.策略",[10,24067,24068],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[10,24070,24071],{},"策略可分为两种：",[10,24073,24074],{},[460,24075],{"alt":46,"src":24076},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[10,24078,24079],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[513,24081,24083],{"id":24082},"_152价值函数","1.5.2.价值函数",[10,24085,24086],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[10,24088,24089],{},"价值函数中有一个折扣因子，类似于存款利息",[10,24091,24092],{},[460,24093],{"alt":46,"src":24094},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[10,24096,24097],{},"进入某个状态采取的最优动作可以通过Q函数得到",[513,24099,24101],{"id":24100},"_153模型","1.5.3.模型",[10,24103,24104],{},[460,24105],{"alt":46,"src":24106},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[486,24108,24110],{"id":24109},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[679,24112,24113,24124],{},[682,24114,24115],{},[685,24116,24117,24121],{},[688,24118,24120],{"align":24119},"left","类型",[688,24122,24123],{"align":24119},"特点",[726,24125,24126,24136,24146,24156,24168],{},[685,24127,24128,24133],{},[731,24129,24130],{"align":24119},[691,24131,24132],{},"基于价值的智能体",[731,24134,24135],{"align":24119},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[685,24137,24138,24143],{},[731,24139,24140],{"align":24119},[691,24141,24142],{},"基于策略的智能体",[731,24144,24145],{"align":24119},"直接学习策略，没有学习价值函数",[685,24147,24148,24153],{},[731,24149,24150],{"align":24119},[691,24151,24152],{},"演员-评论员智能体",[731,24154,24155],{"align":24119},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[685,24157,24158,24163],{},[731,24159,24160],{"align":24119},[691,24161,24162],{},"有模型强化学习智能体",[731,24164,24165],{"align":24119},[460,24166],{"alt":46,"src":24167},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[685,24169,24170,24175],{},[731,24171,24172],{"align":24119},[691,24173,24174],{},"免模型强化学习智能体",[731,24176,24177],{"align":24119},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[486,24179,24181],{"id":24180},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[10,24183,24184],{},"学习和规划是序列决策的两个基本问题",[10,24186,24187],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[10,24189,24190],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[10,24192,24193],{},"强化学习用到的库：Gym",[10,24195,24196],{},"Gym可以检验强化学习算法的优劣",[10,24198,24199,24202],{},[691,24200,24201],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[41,24204,24206],{"className":43,"code":24205,"language":45,"meta":46,"style":46},"pip install gym==0.25.2\n",[48,24207,24208],{"__ignoreMap":46},[51,24209,24210,24213,24216,24219],{"class":53,"line":54},[51,24211,24212],{"class":57},"pip",[51,24214,24215],{"class":61}," install",[51,24217,24218],{"class":61}," gym==",[51,24220,24221],{"class":278},"0.25.2\n",[10,24223,24224],{},"显示图形界面需要",[41,24226,24228],{"className":43,"code":24227,"language":45,"meta":46,"style":46},"pip install pygame\n",[48,24229,24230],{"__ignoreMap":46},[51,24231,24232,24234,24236],{"class":53,"line":54},[51,24233,24212],{"class":57},[51,24235,24215],{"class":61},[51,24237,24238],{"class":61}," pygame\n",[10,24240,24241,24242],{},"有关Gym库的相关文档介绍：",[780,24243,24247],{"href":24244,"rel":24245},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24246],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[486,24249,24251],{"id":24250},"_18一些补充基础概念","1.8.一些补充基础概念",[10,24253,24254],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[10,24256,24257],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[10,24259,24260],{},[460,24261],{"alt":46,"src":24262},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[10,24264,24265],{},"折扣率需要自己来设定",[10,24267,24268],{},[460,24269],{"alt":46,"src":24270},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[19,24272,24273],{},[22,24274,24275],{},"状态转移函数：",[10,24277,24278],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[10,24280,24281],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[10,24283,24284],{},[460,24285],{"alt":46,"src":24286},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[19,24288,24289],{"start":185},[22,24290,24291],{},"动作价值函数：",[10,24293,24294],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[10,24296,24297],{},[460,24298],{"alt":46,"src":24299},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[19,24301,24302],{"start":202},[22,24303,24304],{},"最优动作价值函数：",[10,24306,24307],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[10,24309,24310],{},[460,24311],{"alt":46,"src":24312},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[19,24314,24315],{"start":209},[22,24316,24317],{},"状态价值函数:",[10,24319,24320],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[10,24322,24323],{},"它衡量的是“一个具体动作”的长期价值",[10,24325,24326],{},[460,24327],{"alt":46,"src":24328},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[10,24330,24331],{},"几个价值函数之间的比较：",[10,24333,24334],{},[460,24335],{"alt":46,"src":24336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[464,24338,24339],{},"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":46,"searchDepth":185,"depth":185,"links":24341},[24342,24343,24344,24349,24350,24355,24356,24357],{"id":23776,"depth":185,"text":23777},{"id":23843,"depth":185,"text":23844},{"id":23880,"depth":185,"text":23881,"children":24345},[24346,24347,24348],{"id":23884,"depth":202,"text":23885},{"id":23899,"depth":202,"text":23900},{"id":23922,"depth":202,"text":23923},{"id":24030,"depth":185,"text":24031},{"id":24049,"depth":185,"text":24050,"children":24351},[24352,24353,24354],{"id":24064,"depth":202,"text":24065},{"id":24082,"depth":202,"text":24083},{"id":24100,"depth":202,"text":24101},{"id":24109,"depth":185,"text":24110},{"id":24180,"depth":185,"text":24181},{"id":24250,"depth":185,"text":24251},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23768,"description":46},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24364,"title":24365,"body":24366,"description":24373,"extension":469,"meta":24384,"navigation":205,"path":24385,"seo":24386,"stem":24387,"__hash__":24388},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24367,"toc":24382},[24368,24371,24374,24379],[14,24369,24365],{"id":24370},"_2马尔可夫决策过程",[10,24372,24373],{},"这是强化学习的基本框架",[10,24375,24376],{},[460,24377],{"alt":46,"src":24378},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[10,24380,24381],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":46,"searchDepth":185,"depth":185,"links":24383},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24365,"description":24373},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24390,"title":24391,"body":24392,"description":46,"extension":469,"meta":24508,"navigation":205,"path":24509,"seo":24510,"stem":24511,"__hash__":24512},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24393,"toc":24503},[24394,24397,24401,24404,24409,24414,24417,24422,24425,24430,24433,24437,24442,24445,24450,24455,24460,24463,24467,24472,24475,24480,24485,24490,24495,24498],[14,24395,24391],{"id":24396},"_3动作价值函数",[486,24398,24400],{"id":24399},"_31dqn","3.1.DQN",[10,24402,24403],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[10,24405,24406],{},[460,24407],{"alt":46,"src":24408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[10,24410,24411],{},[460,24412],{"alt":46,"src":24413},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[10,24415,24416],{},"DQN算法的描述：",[10,24418,24419],{},[460,24420],{"alt":46,"src":24421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[10,24423,24424],{},"这里的Dense指的是全连接层",[10,24426,24427],{},[460,24428],{"alt":46,"src":24429},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[10,24431,24432],{},"当前观测的状态为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算法",[486,24434,24436],{"id":24435},"_32dqn的举例","3.2.DQN的举例",[10,24438,24439],{},[460,24440],{"alt":46,"src":24441},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[10,24443,24444],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[10,24446,24447],{},[460,24448],{"alt":46,"src":24449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[10,24451,24452],{},[460,24453],{"alt":46,"src":24454},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[10,24456,24457],{},[460,24458],{"alt":46,"src":24459},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[10,24461,24462],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[486,24464,24466],{"id":24465},"_33td算法","3.3.TD算法",[10,24468,24469],{},[460,24470],{"alt":46,"src":24471},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[10,24473,24474],{},"强化学习TD算法公式的粗略解释：",[10,24476,24477],{},[460,24478],{"alt":46,"src":24479},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[10,24481,24482],{},[460,24483],{"alt":46,"src":24484},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[10,24486,24487],{},[460,24488],{"alt":46,"src":24489},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[10,24491,24492],{},[460,24493],{"alt":46,"src":24494},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[10,24496,24497],{},"TD算法总结：",[10,24499,24500],{},[460,24501],{"alt":46,"src":24502},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":46,"searchDepth":185,"depth":185,"links":24504},[24505,24506,24507],{"id":24399,"depth":185,"text":24400},{"id":24435,"depth":185,"text":24436},{"id":24465,"depth":185,"text":24466},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24391,"description":46},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24514,"title":24515,"body":24516,"description":46,"extension":469,"meta":24749,"navigation":205,"path":24750,"seo":24751,"stem":24752,"__hash__":24753},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24517,"toc":24745},[24518,24521,24525,24528,24531,24536,24541,24544,24549,24554,24557,24562,24565,24570,24573,24578,24581,24586,24589,24594,24599,24602,24607,24610,24613,24618,24621,24626,24631,24635,24638,24641,24646,24651,24654,24659,24664,24667,24672,24675,24678,24683,24686,24691,24694,24699,24704,24707,24712,24717,24720,24725,24728,24733,24736],[14,24519,24515],{"id":24520},"_4策略学习",[486,24522,24524],{"id":24523},"_41概念描述","4.1.概念描述",[10,24526,24527],{},"用神经网络（策略网络）近似策略函数",[10,24529,24530],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[10,24532,24533],{},[460,24534],{"alt":46,"src":24535},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[10,24537,24538],{},[460,24539],{"alt":46,"src":24540},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[10,24542,24543],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[10,24545,24546],{},[460,24547],{"alt":46,"src":24548},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[10,24550,24551],{},[460,24552],{"alt":46,"src":24553},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[10,24555,24556],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[10,24558,24559],{},[460,24560],{"alt":46,"src":24561},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[10,24563,24564],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[10,24566,24567],{},[460,24568],{"alt":46,"src":24569},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[10,24571,24572],{},"改进theta要用到策略梯度算法",[10,24574,24575],{},[460,24576],{"alt":46,"src":24577},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[10,24579,24580],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[10,24582,24583],{},[460,24584],{"alt":46,"src":24585},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[10,24587,24588],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[10,24590,24591],{},[460,24592],{"alt":46,"src":24593},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[10,24595,24596],{},[460,24597],{"alt":46,"src":24598},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[10,24600,24601],{},"梯度公式总结：",[10,24603,24604],{},[460,24605],{"alt":46,"src":24606},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[10,24608,24609],{},"两个公式的分别应用场景：",[10,24611,24612],{},"对于离散的动作：",[10,24614,24615],{},[460,24616],{"alt":46,"src":24617},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[10,24619,24620],{},"对于连续的动作：",[10,24622,24623],{},[460,24624],{"alt":46,"src":24625},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[10,24627,24628],{},[460,24629],{"alt":46,"src":24630},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[486,24632,24634],{"id":24633},"_42概率梯度算法总结","4.2.概率梯度算法总结",[10,24636,24637],{},"使用蒙特卡洛来近似计算策略梯度",[10,24639,24640],{},"蒙特卡洛法的解释如下：",[10,24642,24643],{},[460,24644],{"alt":46,"src":24645},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[10,24647,24648],{},[460,24649],{"alt":46,"src":24650},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[10,24652,24653],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[19,24655,24656],{},[22,24657,24658],{},"方法一：reinforce算法",[10,24660,24661],{},[460,24662],{"alt":46,"src":24663},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[10,24665,24666],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[19,24668,24669],{"start":185},[22,24670,24671],{},"方法二：actor-critic算法",[10,24673,24674],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[10,24676,24677],{},"两个网络的构建：",[10,24679,24680],{},[460,24681],{"alt":46,"src":24682},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[10,24684,24685],{},"actor网路：",[10,24687,24688],{},[460,24689],{"alt":46,"src":24690},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[10,24692,24693],{},"critic网络",[10,24695,24696],{},[460,24697],{"alt":46,"src":24698},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[19,24700,24701],{"start":202},[22,24702,24703],{},"网络的训练",[10,24705,24706],{},"网络描述",[10,24708,24709],{},[460,24710],{"alt":46,"src":24711},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[10,24713,24714],{},[460,24715],{"alt":46,"src":24716},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[10,24718,24719],{},"TD算法更新梯度：",[10,24721,24722],{},[460,24723],{"alt":46,"src":24724},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[10,24726,24727],{},"策略网络更新梯度：",[10,24729,24730],{},[460,24731],{"alt":46,"src":24732},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[10,24734,24735],{},"训练整个流程的具体描述：",[10,24737,24738,24741,24742],{},[460,24739],{"alt":46,"src":24740},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[460,24743],{"alt":46,"src":24744},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":46,"searchDepth":185,"depth":185,"links":24746},[24747,24748],{"id":24523,"depth":185,"text":24524},{"id":24633,"depth":185,"text":24634},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24515,"description":46},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24755,"title":24756,"body":24757,"description":24764,"extension":469,"meta":24814,"navigation":205,"path":24815,"seo":24816,"stem":24817,"__hash__":24818},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24758,"toc":24810},[24759,24762,24765,24769,24772,24777,24781,24784,24789,24792,24797,24802,24805],[14,24760,24756],{"id":24761},"_5alphago算法",[10,24763,24764],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[486,24766,24768],{"id":24767},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[10,24770,24771],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[10,24773,24774],{},[460,24775],{"alt":46,"src":24776},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[486,24778,24780],{"id":24779},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[10,24782,24783],{},"采用强化学习的方式训练策略网络",[10,24785,24786],{},[460,24787],{"alt":46,"src":24788},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[10,24790,24791],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[10,24793,24794],{},[460,24795],{"alt":46,"src":24796},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[10,24798,24799],{},[460,24800],{"alt":46,"src":24801},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[10,24803,24804],{},"强化学习训练策略网络的总结：",[10,24806,24807],{},[460,24808],{"alt":46,"src":24809},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":46,"searchDepth":185,"depth":185,"links":24811},[24812,24813],{"id":24767,"depth":185,"text":24768},{"id":24779,"depth":185,"text":24780},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24756,"description":24764},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24820,"title":24821,"body":24822,"description":24829,"extension":469,"meta":24832,"navigation":205,"path":24833,"seo":24834,"stem":24835,"__hash__":24836},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24823,"toc":24830},[24824,24827],[14,24825,24821],{"id":24826},"_6价值网络",[10,24828,24829],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":46,"searchDepth":185,"depth":185,"links":24831},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24821,"description":24829},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24838,"title":24839,"body":24840,"description":24844,"extension":469,"meta":24845,"navigation":205,"path":24846,"seo":24847,"stem":24848,"__hash__":24849},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24841,"toc":24842},[],{"title":46,"searchDepth":185,"depth":185,"links":24843},[],"记录自己的强化学习笔记。",{"category":471},"\u002Fwiki\u002F2025-12-04",{"title":24839,"description":24844},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24851,"title":24852,"body":24853,"description":23760,"extension":469,"meta":24892,"navigation":205,"path":24893,"seo":24894,"stem":24895,"__hash__":24896},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24854,"toc":24890},[24855,24858,24861,24867,24870,24876,24879,24884,24887],[14,24856,24852],{"id":24857},"_1-项目概览与官方资源",[10,24859,24860],{},"官方文档：",[10,24862,24863],{},[780,24864,24865],{"href":24865,"rel":24866},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24246],[10,24868,24869],{},"官方代码仓库：",[10,24871,24872],{},[780,24873,24874],{"href":24874,"rel":24875},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24246],[10,24877,24878],{},"复现大体流程：",[10,24880,24881],{},[460,24882],{"alt":46,"src":24883},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[10,24885,24886],{},"本教程的目标是打通这条链路：",[10,24888,24889],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":46,"searchDepth":185,"depth":185,"links":24891},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24852,"description":23760},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24898,"title":24899,"body":24900,"description":23760,"extension":469,"meta":25016,"navigation":205,"path":25017,"seo":25018,"stem":25019,"__hash__":25020},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24901,"toc":25011},[24902,24905,24909,24912,24919,24923,24926,24935,24945,24949,24979,24982,25008],[14,24903,24899],{"id":24904},"_2-环境准备与设备连接",[486,24906,24908],{"id":24907},"_21-系统与环境","2.1 系统与环境",[10,24910,24911],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[10,24913,24914,24915,24918],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[48,24916,24917],{},"lerobot"," 依赖。",[486,24920,24922],{"id":24921},"_22-机械臂串口识别","2.2 机械臂串口识别",[10,24924,24925],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[41,24927,24929],{"className":43,"code":24928,"language":45,"meta":46,"style":46},"lerobot-find-out\n",[48,24930,24931],{"__ignoreMap":46},[51,24932,24933],{"class":53,"line":54},[51,24934,24928],{"class":57},[10,24936,24937,24938,754,24941,24944],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[48,24939,24940],{},"\u002Fdev\u002FttyACM0",[48,24942,24943],{},"\u002Fdev\u002FttyACM1","）。",[486,24946,24948],{"id":24947},"_23-串口授权","2.3 串口授权",[41,24950,24952],{"className":43,"code":24951,"language":45,"meta":46,"style":46},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[48,24953,24954,24968],{"__ignoreMap":46},[51,24955,24956,24959,24962,24965],{"class":53,"line":54},[51,24957,24958],{"class":57},"sudo",[51,24960,24961],{"class":61}," chmod",[51,24963,24964],{"class":278}," 666",[51,24966,24967],{"class":61}," \u002Fdev\u002FttyACM0\n",[51,24969,24970,24972,24974,24976],{"class":53,"line":185},[51,24971,24958],{"class":57},[51,24973,24961],{"class":61},[51,24975,24964],{"class":278},[51,24977,24978],{"class":61}," \u002Fdev\u002FttyACM1\n",[10,24980,24981],{},"说明：",[1549,24983,24984,24989,24995,25005],{},[22,24985,24986,24988],{},[48,24987,24958],{},"：以 root 权限执行命令。",[22,24990,24991,24994],{},[48,24992,24993],{},"chmod","：修改设备节点权限。",[22,24996,24997,25000,25001,25004],{},[48,24998,24999],{},"666","：",[48,25002,25003],{},"rw-rw-rw-","，所有用户可读写。",[22,25006,25007],{},"串口号必须替换为你机器上的真实端口。",[464,25009,25010],{},"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":46,"searchDepth":185,"depth":185,"links":25012},[25013,25014,25015],{"id":24907,"depth":185,"text":24908},{"id":24921,"depth":185,"text":24922},{"id":24947,"depth":185,"text":24948},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24899,"description":23760},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25022,"title":25023,"body":25024,"description":23760,"extension":469,"meta":25185,"navigation":205,"path":25186,"seo":25187,"stem":25188,"__hash__":25189},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25025,"toc":25181},[25026,25030,25034,25040,25043,25100,25103,25107,25110,25178],[14,25027,25029],{"id":25028},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[486,25031,25033],{"id":25032},"_31-配置电机-id","3.1 配置电机 ID",[10,25035,25036,25037,25039],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[48,25038,759],{},"，需要改成机械臂链路里不冲突的编号。",[10,25041,25042],{},"方式一：用 LeRobot 命令逐步写入。",[41,25044,25046],{"className":43,"code":25045,"language":45,"meta":46,"style":46},"# 主臂舵机配置 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",[48,25047,25048,25053,25061,25068,25073,25077,25082,25088,25095],{"__ignoreMap":46},[51,25049,25050],{"class":53,"line":54},[51,25051,25052],{"class":601},"# 主臂舵机配置 ID\n",[51,25054,25055,25058],{"class":53,"line":185},[51,25056,25057],{"class":57},"lerobot-setup-motors",[51,25059,25060],{"class":278}," \\\n",[51,25062,25063,25066],{"class":53,"line":202},[51,25064,25065],{"class":278},"  --teleop.type=so101_leader",[51,25067,25060],{"class":278},[51,25069,25070],{"class":53,"line":209},[51,25071,25072],{"class":278},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[51,25074,25075],{"class":53,"line":223},[51,25076,206],{"emptyLinePlaceholder":205},[51,25078,25079],{"class":53,"line":237},[51,25080,25081],{"class":601},"# 从臂舵机配置 ID\n",[51,25083,25084,25086],{"class":53,"line":242},[51,25085,25057],{"class":57},[51,25087,25060],{"class":278},[51,25089,25090,25093],{"class":53,"line":257},[51,25091,25092],{"class":278},"  --robot.type=so101_follower",[51,25094,25060],{"class":278},[51,25096,25097],{"class":53,"line":262},[51,25098,25099],{"class":278},"  --robot.port=\u002Fdev\u002FttyACM1\n",[10,25101,25102],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[486,25104,25106],{"id":25105},"_32-机械臂校准","3.2 机械臂校准",[10,25108,25109],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[41,25111,25113],{"className":43,"code":25112,"language":45,"meta":46,"style":46},"# 主臂校准\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",[48,25114,25115,25120,25127,25133,25140,25145,25149,25154,25160,25166,25173],{"__ignoreMap":46},[51,25116,25117],{"class":53,"line":54},[51,25118,25119],{"class":601},"# 主臂校准\n",[51,25121,25122,25125],{"class":53,"line":185},[51,25123,25124],{"class":57},"lerobot-calibrate",[51,25126,25060],{"class":278},[51,25128,25129,25131],{"class":53,"line":202},[51,25130,25065],{"class":278},[51,25132,25060],{"class":278},[51,25134,25135,25138],{"class":53,"line":209},[51,25136,25137],{"class":278},"  --teleop.port=\u002Fdev\u002FttyACM0",[51,25139,25060],{"class":278},[51,25141,25142],{"class":53,"line":223},[51,25143,25144],{"class":278},"  --teleop.id=my_awesome_leader_arm\n",[51,25146,25147],{"class":53,"line":237},[51,25148,206],{"emptyLinePlaceholder":205},[51,25150,25151],{"class":53,"line":242},[51,25152,25153],{"class":601},"# 从臂校准\n",[51,25155,25156,25158],{"class":53,"line":257},[51,25157,25124],{"class":57},[51,25159,25060],{"class":278},[51,25161,25162,25164],{"class":53,"line":262},[51,25163,25092],{"class":278},[51,25165,25060],{"class":278},[51,25167,25168,25171],{"class":53,"line":285},[51,25169,25170],{"class":278},"  --robot.port=\u002Fdev\u002FttyACM1",[51,25172,25060],{"class":278},[51,25174,25175],{"class":53,"line":296},[51,25176,25177],{"class":278},"  --robot.id=my_awesome_follower_arm\n",[464,25179,25180],{},"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":46,"searchDepth":185,"depth":185,"links":25182},[25183,25184],{"id":25032,"depth":185,"text":25033},{"id":25105,"depth":185,"text":25106},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25023,"description":23760},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25191,"title":25192,"body":25193,"description":23760,"extension":469,"meta":25384,"navigation":205,"path":25385,"seo":25386,"stem":25387,"__hash__":25388},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25194,"toc":25380},[25195,25198,25202,25249,25253,25266,25329,25332,25377],[14,25196,25192],{"id":25197},"_4-遥操与相机接入",[486,25199,25201],{"id":25200},"_41-不带相机遥操","4.1 不带相机遥操",[41,25203,25205],{"className":43,"code":25204,"language":45,"meta":46,"style":46},"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",[48,25206,25207,25214,25220,25226,25233,25239,25245],{"__ignoreMap":46},[51,25208,25209,25212],{"class":53,"line":54},[51,25210,25211],{"class":57},"lerobot-teleoperate",[51,25213,25060],{"class":278},[51,25215,25216,25218],{"class":53,"line":185},[51,25217,25092],{"class":278},[51,25219,25060],{"class":278},[51,25221,25222,25224],{"class":53,"line":202},[51,25223,25170],{"class":278},[51,25225,25060],{"class":278},[51,25227,25228,25231],{"class":53,"line":209},[51,25229,25230],{"class":278},"  --robot.id=my_awesome_follower_arm",[51,25232,25060],{"class":278},[51,25234,25235,25237],{"class":53,"line":223},[51,25236,25065],{"class":278},[51,25238,25060],{"class":278},[51,25240,25241,25243],{"class":53,"line":237},[51,25242,25137],{"class":278},[51,25244,25060],{"class":278},[51,25246,25247],{"class":53,"line":242},[51,25248,25144],{"class":278},[486,25250,25252],{"id":25251},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[41,25254,25256],{"className":43,"code":25255,"language":45,"meta":46,"style":46},"lerobot-find-cameras opencv\n",[48,25257,25258],{"__ignoreMap":46},[51,25259,25260,25263],{"class":53,"line":54},[51,25261,25262],{"class":57},"lerobot-find-cameras",[51,25264,25265],{"class":61}," opencv\n",[41,25267,25269],{"className":43,"code":25268,"language":45,"meta":46,"style":46},"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",[48,25270,25271,25277,25283,25289,25295,25305,25311,25317,25324],{"__ignoreMap":46},[51,25272,25273,25275],{"class":53,"line":54},[51,25274,25211],{"class":57},[51,25276,25060],{"class":278},[51,25278,25279,25281],{"class":53,"line":185},[51,25280,25092],{"class":278},[51,25282,25060],{"class":278},[51,25284,25285,25287],{"class":53,"line":202},[51,25286,25170],{"class":278},[51,25288,25060],{"class":278},[51,25290,25291,25293],{"class":53,"line":209},[51,25292,25230],{"class":278},[51,25294,25060],{"class":278},[51,25296,25297,25300,25303],{"class":53,"line":223},[51,25298,25299],{"class":278},"  --robot.cameras=",[51,25301,25302],{"class":61},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[51,25304,25060],{"class":278},[51,25306,25307,25309],{"class":53,"line":237},[51,25308,25065],{"class":278},[51,25310,25060],{"class":278},[51,25312,25313,25315],{"class":53,"line":242},[51,25314,25137],{"class":278},[51,25316,25060],{"class":278},[51,25318,25319,25322],{"class":53,"line":257},[51,25320,25321],{"class":278},"  --teleop.id=my_awesome_leader_arm",[51,25323,25060],{"class":278},[51,25325,25326],{"class":53,"line":262},[51,25327,25328],{"class":278},"  --display_data=true\n",[10,25330,25331],{},"相机参数说明：",[1549,25333,25334,25340,25346,25355,25365,25371],{},[22,25335,25336,25339],{},[48,25337,25338],{},"front","：相机名称。",[22,25341,25342,25345],{},[48,25343,25344],{},"type: opencv","：相机驱动类型。",[22,25347,25348,25351,25352,24944],{},[48,25349,25350],{},"index_or_path","：设备编号或设备路径（如 ",[48,25353,25354],{},"\u002Fdev\u002Fvideo4",[22,25356,25357,25360,25361,25364],{},[48,25358,25359],{},"width"," \u002F ",[48,25362,25363],{},"height","：图像分辨率。",[22,25366,25367,25370],{},[48,25368,25369],{},"fps","：采样帧率。",[22,25372,25373,25376],{},[48,25374,25375],{},"--display_data=true","：启用实时可视化。",[464,25378,25379],{},"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":46,"searchDepth":185,"depth":185,"links":25381},[25382,25383],{"id":25200,"depth":185,"text":25201},{"id":25251,"depth":185,"text":25252},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25192,"description":23760},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25390,"title":25391,"body":25392,"description":23760,"extension":469,"meta":25564,"navigation":205,"path":25565,"seo":25566,"stem":25567,"__hash__":25568},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25393,"toc":25559},[25394,25398,25402,25407,25412,25415,25457,25463,25467,25516,25521,25525,25528,25536,25541,25546,25551,25556],[14,25395,25397],{"id":25396},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[486,25399,25401],{"id":25400},"_51-生成访问令牌","5.1 生成访问令牌",[10,25403,25404],{},[460,25405],{"alt":46,"src":25406},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[10,25408,25409],{},[460,25410],{"alt":46,"src":25411},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[10,25413,25414],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[41,25416,25418],{"className":43,"code":25417,"language":45,"meta":46,"style":46},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[48,25419,25420,25433],{"__ignoreMap":46},[51,25421,25422,25425,25428,25430],{"class":53,"line":54},[51,25423,25424],{"class":69},"export",[51,25426,25427],{"class":65}," HF_TOKEN",[51,25429,70],{"class":69},[51,25431,25432],{"class":61},"\"your_huggingface_token\"\n",[51,25434,25435,25438,25441,25444,25447,25449,25452,25454],{"class":53,"line":185},[51,25436,25437],{"class":57},"hf",[51,25439,25440],{"class":61}," auth",[51,25442,25443],{"class":61}," login",[51,25445,25446],{"class":278}," --token",[51,25448,10108],{"class":61},[51,25450,25451],{"class":65},"$HF_TOKEN",[51,25453,793],{"class":61},[51,25455,25456],{"class":278}," --add-to-git-credential\n",[10,25458,25459,25462],{},[48,25460,25461],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[486,25464,25466],{"id":25465},"_52-验证登录","5.2 验证登录",[41,25468,25470],{"className":43,"code":25469,"language":45,"meta":46,"style":46},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[48,25471,25472,25503],{"__ignoreMap":46},[51,25473,25474,25477,25479,25482,25484,25486,25489,25492,25495,25498,25501],{"class":53,"line":54},[51,25475,25476],{"class":65},"HF_USER",[51,25478,70],{"class":69},[51,25480,25481],{"class":65},"$(",[51,25483,25437],{"class":57},[51,25485,25440],{"class":61},[51,25487,25488],{"class":61}," whoami",[51,25490,25491],{"class":69}," |",[51,25493,25494],{"class":57}," head",[51,25496,25497],{"class":278}," -n",[51,25499,25500],{"class":278}," 1",[51,25502,282],{"class":65},[51,25504,25505,25508,25510,25513],{"class":53,"line":185},[51,25506,25507],{"class":278},"echo",[51,25509,10108],{"class":61},[51,25511,25512],{"class":65},"$HF_USER",[51,25514,25515],{"class":61},"\"\n",[10,25517,25518],{},[460,25519],{"alt":46,"src":25520},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[486,25522,25524],{"id":25523},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[10,25526,25527],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1549,25529,25530,25533],{},[22,25531,25532],{},"Dataset Repo（用于上传演示数据）",[22,25534,25535],{},"Model Repo（用于上传训练后的 ACT 权重）",[10,25537,25538],{},[460,25539],{"alt":46,"src":25540},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[10,25542,25543],{},[460,25544],{"alt":46,"src":25545},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[10,25547,25548],{},[460,25549],{"alt":46,"src":25550},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[10,25552,25553],{},[460,25554],{"alt":46,"src":25555},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[464,25557,25558],{},"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":46,"searchDepth":185,"depth":185,"links":25560},[25561,25562,25563],{"id":25400,"depth":185,"text":25401},{"id":25465,"depth":185,"text":25466},{"id":25523,"depth":185,"text":25524},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25391,"description":23760},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25570,"title":25571,"body":25572,"description":23760,"extension":469,"meta":25769,"navigation":205,"path":25770,"seo":25771,"stem":25772,"__hash__":25773},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25573,"toc":25764},[25574,25578,25582,25678,25686,25691,25695,25711,25714,25718,25761],[14,25575,25577],{"id":25576},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[486,25579,25581],{"id":25580},"_61-录制示教数据","6.1 录制示教数据",[41,25583,25585],{"className":43,"code":25584,"language":45,"meta":46,"style":46},"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",[48,25586,25587,25594,25600,25606,25612,25621,25627,25633,25639,25646,25656,25663,25673],{"__ignoreMap":46},[51,25588,25589,25592],{"class":53,"line":54},[51,25590,25591],{"class":57},"lerobot-record",[51,25593,25060],{"class":278},[51,25595,25596,25598],{"class":53,"line":185},[51,25597,25092],{"class":278},[51,25599,25060],{"class":278},[51,25601,25602,25604],{"class":53,"line":202},[51,25603,25170],{"class":278},[51,25605,25060],{"class":278},[51,25607,25608,25610],{"class":53,"line":209},[51,25609,25230],{"class":278},[51,25611,25060],{"class":278},[51,25613,25614,25616,25619],{"class":53,"line":223},[51,25615,25299],{"class":278},[51,25617,25618],{"class":61},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[51,25620,25060],{"class":278},[51,25622,25623,25625],{"class":53,"line":237},[51,25624,25065],{"class":278},[51,25626,25060],{"class":278},[51,25628,25629,25631],{"class":53,"line":242},[51,25630,25137],{"class":278},[51,25632,25060],{"class":278},[51,25634,25635,25637],{"class":53,"line":257},[51,25636,25321],{"class":278},[51,25638,25060],{"class":278},[51,25640,25641,25644],{"class":53,"line":262},[51,25642,25643],{"class":278},"  --display_data=true",[51,25645,25060],{"class":278},[51,25647,25648,25651,25654],{"class":53,"line":285},[51,25649,25650],{"class":278},"  --dataset.repo_id=",[51,25652,25653],{"class":61},"\"Embodied-AI-6\u002Fso101_test\"",[51,25655,25060],{"class":278},[51,25657,25658,25661],{"class":53,"line":296},[51,25659,25660],{"class":278},"  --dataset.num_episodes=10",[51,25662,25060],{"class":278},[51,25664,25665,25668,25671],{"class":53,"line":307},[51,25666,25667],{"class":278},"  --dataset.single_task=",[51,25669,25670],{"class":61},"\"Grab the green cube\"",[51,25672,25060],{"class":278},[51,25674,25675],{"class":53,"line":324},[51,25676,25677],{"class":278},"  --resume=true\n",[1549,25679,25680],{},[22,25681,25682,25685],{},[48,25683,25684],{},"--resume=true","：已有同一数据集时继续追加 episode。",[10,25687,25688],{},[460,25689],{"alt":46,"src":25690},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[486,25692,25694],{"id":25693},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[41,25696,25698],{"className":43,"code":25697,"language":45,"meta":46,"style":46},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[48,25699,25700],{"__ignoreMap":46},[51,25701,25702,25705,25708],{"class":53,"line":54},[51,25703,25704],{"class":57},"rm",[51,25706,25707],{"class":278}," -rf",[51,25709,25710],{"class":61}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[10,25712,25713],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[486,25715,25717],{"id":25716},"_63-回放指定-episode","6.3 回放指定 episode",[41,25719,25721],{"className":43,"code":25720,"language":45,"meta":46,"style":46},"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",[48,25722,25723,25730,25736,25742,25748,25756],{"__ignoreMap":46},[51,25724,25725,25728],{"class":53,"line":54},[51,25726,25727],{"class":57},"lerobot-replay",[51,25729,25060],{"class":278},[51,25731,25732,25734],{"class":53,"line":185},[51,25733,25092],{"class":278},[51,25735,25060],{"class":278},[51,25737,25738,25740],{"class":53,"line":202},[51,25739,25170],{"class":278},[51,25741,25060],{"class":278},[51,25743,25744,25746],{"class":53,"line":209},[51,25745,25230],{"class":278},[51,25747,25060],{"class":278},[51,25749,25750,25752,25754],{"class":53,"line":223},[51,25751,25650],{"class":278},[51,25753,25653],{"class":61},[51,25755,25060],{"class":278},[51,25757,25758],{"class":53,"line":237},[51,25759,25760],{"class":278},"  --dataset.episode=0\n",[464,25762,25763],{},"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":46,"searchDepth":185,"depth":185,"links":25765},[25766,25767,25768],{"id":25580,"depth":185,"text":25581},{"id":25693,"depth":185,"text":25694},{"id":25716,"depth":185,"text":25717},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25571,"description":23760},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25775,"title":25776,"body":25777,"description":23760,"extension":469,"meta":25905,"navigation":205,"path":25906,"seo":25907,"stem":25908,"__hash__":25909},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25778,"toc":25903},[25779,25783,25846,25849,25896,25901],[14,25780,25782],{"id":25781},"_7-act-模型训练","7. ACT 模型训练",[41,25784,25786],{"className":43,"code":25785,"language":45,"meta":46,"style":46},"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",[48,25787,25788,25795,25803,25810,25817,25824,25831,25838],{"__ignoreMap":46},[51,25789,25790,25793],{"class":53,"line":54},[51,25791,25792],{"class":57},"lerobot-train",[51,25794,25060],{"class":278},[51,25796,25797,25799,25801],{"class":53,"line":185},[51,25798,25650],{"class":278},[51,25800,25653],{"class":61},[51,25802,25060],{"class":278},[51,25804,25805,25808],{"class":53,"line":202},[51,25806,25807],{"class":278},"  --policy.type=act",[51,25809,25060],{"class":278},[51,25811,25812,25815],{"class":53,"line":209},[51,25813,25814],{"class":278},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[51,25816,25060],{"class":278},[51,25818,25819,25822],{"class":53,"line":223},[51,25820,25821],{"class":278},"  --job_name=act_so101_test",[51,25823,25060],{"class":278},[51,25825,25826,25829],{"class":53,"line":237},[51,25827,25828],{"class":278},"  --policy.device=cuda",[51,25830,25060],{"class":278},[51,25832,25833,25836],{"class":53,"line":242},[51,25834,25835],{"class":278},"  --wandb.enable=false",[51,25837,25060],{"class":278},[51,25839,25840,25843],{"class":53,"line":257},[51,25841,25842],{"class":278},"  --policy.repo_id=",[51,25844,25845],{"class":61},"\"Embodied-AI-6\u002Flerobot_new\"\n",[10,25847,25848],{},"参数说明：",[1549,25850,25851,25857,25863,25869,25875,25884,25890],{},[22,25852,25853,25856],{},[48,25854,25855],{},"--dataset.repo_id","：训练数据集仓库。",[22,25858,25859,25862],{},[48,25860,25861],{},"--policy.type=act","：策略模型类型为 ACT。",[22,25864,25865,25868],{},[48,25866,25867],{},"--output_dir","：本地训练输出目录。",[22,25870,25871,25874],{},[48,25872,25873],{},"--job_name","：训练任务名称。",[22,25876,25877,25880,25881,24944],{},[48,25878,25879],{},"--policy.device","：训练设备（如 ",[48,25882,25883],{},"cuda",[22,25885,25886,25889],{},[48,25887,25888],{},"--wandb.enable","：是否启用 WandB 可视化。",[22,25891,25892,25895],{},[48,25893,25894],{},"--policy.repo_id","：训练后模型推送目标仓库。",[10,25897,25898],{},[460,25899],{"alt":46,"src":25900},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[464,25902,25763],{},{"title":46,"searchDepth":185,"depth":185,"links":25904},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25776,"description":23760},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25911,"title":25912,"body":25913,"description":23760,"extension":469,"meta":26000,"navigation":205,"path":26001,"seo":26002,"stem":26003,"__hash__":26004},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25914,"toc":25998},[25915,25918,25921,25988,25996],[14,25916,25912],{"id":25917},"_8-策略部署与自动采集",[10,25919,25920],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[41,25922,25924],{"className":43,"code":25923,"language":45,"meta":46,"style":46},"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",[48,25925,25926,25932,25938,25944,25952,25958,25965,25973,25981],{"__ignoreMap":46},[51,25927,25928,25930],{"class":53,"line":54},[51,25929,25591],{"class":57},[51,25931,25060],{"class":278},[51,25933,25934,25936],{"class":53,"line":185},[51,25935,25092],{"class":278},[51,25937,25060],{"class":278},[51,25939,25940,25942],{"class":53,"line":202},[51,25941,25170],{"class":278},[51,25943,25060],{"class":278},[51,25945,25946,25948,25950],{"class":53,"line":209},[51,25947,25299],{"class":278},[51,25949,25618],{"class":61},[51,25951,25060],{"class":278},[51,25953,25954,25956],{"class":53,"line":223},[51,25955,25230],{"class":278},[51,25957,25060],{"class":278},[51,25959,25960,25963],{"class":53,"line":237},[51,25961,25962],{"class":278},"  --display_data=false",[51,25964,25060],{"class":278},[51,25966,25967,25969,25971],{"class":53,"line":242},[51,25968,25650],{"class":278},[51,25970,25653],{"class":61},[51,25972,25060],{"class":278},[51,25974,25975,25977,25979],{"class":53,"line":257},[51,25976,25667],{"class":278},[51,25978,25670],{"class":61},[51,25980,25060],{"class":278},[51,25982,25983,25986],{"class":53,"line":262},[51,25984,25985],{"class":278},"  --policy.path=",[51,25987,25845],{"class":61},[1549,25989,25990],{},[22,25991,25992,25995],{},[48,25993,25994],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[464,25997,25763],{},{"title":46,"searchDepth":185,"depth":185,"links":25999},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25912,"description":23760},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26006,"title":26007,"body":26008,"description":23760,"extension":469,"meta":26037,"navigation":205,"path":26038,"seo":26039,"stem":26040,"__hash__":26041},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26009,"toc":26035},[26010,26014,26017,26023,26026,26032],[14,26011,26013],{"id":26012},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[10,26015,26016],{},"项目地址：",[10,26018,26019],{},[780,26020,26021],{"href":26021,"rel":26022},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24246],[10,26024,26025],{},"参考教程：",[10,26027,26028],{},[780,26029,26030],{"href":26030,"rel":26031},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24246],[10,26033,26034],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":46,"searchDepth":185,"depth":185,"links":26036},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26007,"description":23760},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26043,"title":26044,"body":26045,"description":26049,"extension":469,"meta":26050,"navigation":205,"path":26051,"seo":26052,"stem":26053,"__hash__":26054},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26046,"toc":26047},[],{"title":46,"searchDepth":185,"depth":185,"links":26048},[],"act复现",{"category":471},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26044,"description":26049},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26056,"title":26057,"body":26058,"description":46,"extension":469,"meta":26360,"navigation":205,"path":26361,"seo":26362,"stem":26363,"__hash__":26364},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26059,"toc":26352},[26060,26063,26067,26077,26084,26091,26094,26101,26104,26107,26111,26123,26127,26173,26176,26179,26182,26185,26188,26192,26230,26236,26240,26294,26299,26302,26305,26310,26313,26318,26321,26324,26328,26331,26334,26338],[14,26061,26057],{"id":26062},"_1简介",[513,26064,26066],{"id":26065},"_11什么是-docker","1.1什么是 Docker？",[10,26068,26069,26070,26073,26074],{},"Docker 是一个开源的 ",[691,26071,26072],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[691,26075,26076],{},"一次构建，到处运行。",[10,26078,26079,26080,26083],{},"“ ",[691,26081,26082],{},"一次构建，到处运行"," ”也就是说：",[19,26085,26086],{},[22,26087,26088],{},[691,26089,26090],{},"之前：",[10,26092,26093],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[19,26095,26096],{},[22,26097,26098],{},[691,26099,26100],{},"使用docker后：",[10,26102,26103],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[10,26105,26106],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[513,26108,26110],{"id":26109},"_12它是怎么工作的","1.2.它是怎么工作的？",[1549,26112,26113,26116],{},[22,26114,26115],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[22,26117,26118,26119,26122],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[691,26120,26121],{},"无论在哪运行都一样稳定"," 。",[513,26124,26126],{"id":26125},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[679,26128,26129,26139],{},[682,26130,26131],{},[685,26132,26133,26136],{},[688,26134,26135],{"align":24119},"概念",[688,26137,26138],{"align":24119},"解释",[726,26140,26141,26149,26157,26165],{},[685,26142,26143,26146],{},[731,26144,26145],{"align":24119},"镜像",[731,26147,26148],{"align":24119},"Image，运行容器的模板，像是一个应用快照",[685,26150,26151,26154],{},[731,26152,26153],{"align":24119},"容器",[731,26155,26156],{"align":24119},"Container，运行中的镜像实例，有自己的文件系统、网络等",[685,26158,26159,26162],{},[731,26160,26161],{"align":24119},"Dockerfile",[731,26163,26164],{"align":24119},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[685,26166,26167,26170],{},[731,26168,26169],{"align":24119},"仓库",[731,26171,26172],{"align":24119},"Registry，存放镜像的地方，比如 Docker Hub",[10,26174,26175],{},"抽象化理解:",[10,26177,26178],{},"Docker镜像≈C++类",[10,26180,26181],{},"Docker容器≈C++类实例(即对象)",[10,26183,26184],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[10,26186,26187],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[513,26189,26191],{"id":26190},"_14类比理解","1.4.类比理解",[679,26193,26194,26204],{},[682,26195,26196],{},[685,26197,26198,26201],{},[688,26199,26200],{"align":24119},"传统部署",[688,26202,26203],{"align":24119},"Docker部署",[726,26205,26206,26214,26222],{},[685,26207,26208,26211],{},[731,26209,26210],{"align":24119},"手动安装依赖、调试版本不一致问题",[731,26212,26213],{"align":24119},"一次打包环境和代码",[685,26215,26216,26219],{},[731,26217,26218],{"align":24119},"程序“裸奔”跑在系统上",[731,26220,26221],{"align":24119},"程序“穿着容器”隔离运行",[685,26223,26224,26227],{},[731,26225,26226],{"align":24119},"容易“在我电脑上能跑”",[731,26228,26229],{"align":24119},"保证“无论在哪都能跑”",[10,26231,26232,26233],{},"就像快递包裹： ",[691,26234,26235],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[513,26237,26239],{"id":26238},"_15docker-的核心优势","1.5.Docker 的核心优势",[679,26241,26242,26252],{},[682,26243,26244],{},[685,26245,26246,26249],{},[688,26247,26248],{"align":24119},"优势",[688,26250,26251],{"align":24119},"说明",[726,26253,26254,26262,26270,26278,26286],{},[685,26255,26256,26259],{},[731,26257,26258],{"align":24119},"轻量级",[731,26260,26261],{"align":24119},"基于系统内核共享，启动速度快，占资源少",[685,26263,26264,26267],{},[731,26265,26266],{"align":24119},"跨平台",[731,26268,26269],{"align":24119},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[685,26271,26272,26275],{},[731,26273,26274],{"align":24119},"易于迁移部署",[731,26276,26277],{"align":24119},"应用和环境一起封装，不怕依赖不一致",[685,26279,26280,26283],{},[731,26281,26282],{"align":24119},"易于版本控制",[731,26284,26285],{"align":24119},"镜像版本可控，支持回滚",[685,26287,26288,26291],{},[731,26289,26290],{"align":24119},"生态丰富",[731,26292,26293],{"align":24119},"Docker Hub 上有成千上万的现成镜像可用",[19,26295,26296],{},[22,26297,26298],{},"在Linux上可以几乎实现无性能损失。",[10,26300,26301],{},"docker里的发行版和本机共用Linux内核。",[10,26303,26304],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[19,26306,26307],{},[22,26308,26309],{},"可以快速部署在绝大多数Linux发行版",[10,26311,26312],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[19,26314,26315],{},[22,26316,26317],{},"配置环境简单",[10,26319,26320],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[10,26322,26323],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[19,26325,26326],{},[22,26327,26290],{},[10,26329,26330],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[10,26332,26333],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[513,26335,26337],{"id":26336},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1549,26339,26340,26343,26346,26349],{},[22,26341,26342],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[22,26344,26345],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[22,26347,26348],{},"微服务架构：每个服务一个容器，灵活组合",[22,26350,26351],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":46,"searchDepth":185,"depth":185,"links":26353},[26354,26355,26356,26357,26358,26359],{"id":26065,"depth":202,"text":26066},{"id":26109,"depth":202,"text":26110},{"id":26125,"depth":202,"text":26126},{"id":26190,"depth":202,"text":26191},{"id":26238,"depth":202,"text":26239},{"id":26336,"depth":202,"text":26337},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26057,"description":46},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26366,"title":26367,"body":26368,"description":46,"extension":469,"meta":27101,"navigation":205,"path":27102,"seo":27103,"stem":27104,"__hash__":27105},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26369,"toc":27096},[26370,26373,26377,26380,26383,26389,26395,26399,26408,26411,26468,26471,26522,26525,26608,26611,26648,26652,26663,26676,26683,26686,26766,26769,26819,26822,26845,26849,26856,26859,26875,26881,26884,26900,26906,26909,26925,26939,26945,26965,26971,26974,26986,26992,26995,27009,27015,27018,27038,27043,27046,27049,27053,27056,27059,27062,27069,27072,27075,27078,27083,27088,27093],[14,26371,26367],{"id":26372},"_2安装docker",[513,26374,26376],{"id":26375},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[10,26378,26379],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[10,26381,26382],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[10,26384,26385],{},[780,26386,26387],{"href":26387,"rel":26388},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24246],[10,26390,26391],{},[780,26392,26393],{"href":26393,"rel":26394},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24246],[22381,26396,26398],{"id":26397},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[10,26400,26401,26402,26407],{},"以下内容根据 ",[780,26403,26406],{"href":26404,"rel":26405},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24246],"官方文档"," 修改而来。",[10,26409,26410],{},"如果你过去安装过 docker，先删掉：",[41,26412,26414],{"className":43,"code":26413,"language":45,"meta":46,"style":46},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[48,26415,26416],{"__ignoreMap":46},[51,26417,26418,26420,26423,26426,26429,26432,26435,26438,26441,26444,26447,26450,26453,26456,26459,26462,26465],{"class":53,"line":54},[51,26419,3412],{"class":69},[51,26421,26422],{"class":65}," pkg ",[51,26424,26425],{"class":69},"in",[51,26427,26428],{"class":61}," docker.io",[51,26430,26431],{"class":61}," docker-doc",[51,26433,26434],{"class":61}," docker-compose",[51,26436,26437],{"class":61}," docker-compose-v2",[51,26439,26440],{"class":61}," podman-docker",[51,26442,26443],{"class":61}," containerd",[51,26445,26446],{"class":61}," runc",[51,26448,26449],{"class":65},"; ",[51,26451,26452],{"class":69},"do",[51,26454,26455],{"class":57}," sudo",[51,26457,26458],{"class":61}," apt-get",[51,26460,26461],{"class":61}," remove",[51,26463,26464],{"class":65}," $pkg; ",[51,26466,26467],{"class":69},"done\n",[10,26469,26470],{},"首先安装依赖和GPG：",[41,26472,26476],{"className":26473,"code":26474,"language":26475,"meta":46,"style":46},"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",[48,26477,26478,26483,26488,26493,26498,26503,26508,26512,26517],{"__ignoreMap":46},[51,26479,26480],{"class":53,"line":54},[51,26481,26482],{},"# Add Docker's official GPG key:\n",[51,26484,26485],{"class":53,"line":185},[51,26486,26487],{},"sudo apt-get update\n",[51,26489,26490],{"class":53,"line":202},[51,26491,26492],{},"sudo apt-get install ca-certificates curl\n",[51,26494,26495],{"class":53,"line":209},[51,26496,26497],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[51,26499,26500],{"class":53,"line":223},[51,26501,26502],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[51,26504,26505],{"class":53,"line":237},[51,26506,26507],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[51,26509,26510],{"class":53,"line":242},[51,26511,206],{"emptyLinePlaceholder":205},[51,26513,26514],{"class":53,"line":257},[51,26515,26516],{},"# 如果上面这行报错就弄下面这行\n",[51,26518,26519],{"class":53,"line":262},[51,26520,26521],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[10,26523,26524],{},"信任 Docker 的 GPG 公钥并添加仓库：",[41,26526,26528],{"className":43,"code":26527,"language":45,"meta":46,"style":46},"# 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",[48,26529,26530,26535,26541,26558,26591],{"__ignoreMap":46},[51,26531,26532],{"class":53,"line":54},[51,26533,26534],{"class":601},"# Add the repository to Apt sources:\n",[51,26536,26537,26539],{"class":53,"line":185},[51,26538,25507],{"class":278},[51,26540,25060],{"class":278},[51,26542,26543,26546,26549,26552,26555],{"class":53,"line":202},[51,26544,26545],{"class":61},"  \"deb [arch=$(",[51,26547,26548],{"class":57},"dpkg",[51,26550,26551],{"class":278}," --print-architecture",[51,26553,26554],{"class":61},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[51,26556,26557],{"class":278},"\\\n",[51,26559,26560,26563,26565,26567,26570,26573,26575,26577,26580,26582,26584,26587,26589],{"class":53,"line":209},[51,26561,26562],{"class":61},"  \"",[51,26564,25481],{"class":65},[51,26566,1100],{"class":278},[51,26568,26569],{"class":61}," \u002Fetc\u002Fos-release",[51,26571,26572],{"class":65}," && ",[51,26574,25507],{"class":278},[51,26576,10108],{"class":61},[51,26578,26579],{"class":65},"$VERSION_CODENAME",[51,26581,793],{"class":61},[51,26583,971],{"class":65},[51,26585,26586],{"class":61},"\" stable\"",[51,26588,25491],{"class":69},[51,26590,25060],{"class":278},[51,26592,26593,26596,26599,26602,26605],{"class":53,"line":223},[51,26594,26595],{"class":57},"  sudo",[51,26597,26598],{"class":61}," tee",[51,26600,26601],{"class":61}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[51,26603,26604],{"class":69}," >",[51,26606,26607],{"class":61}," \u002Fdev\u002Fnull\n",[10,26609,26610],{},"最后安装",[41,26612,26614],{"className":43,"code":26613,"language":45,"meta":46,"style":46},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[48,26615,26616,26625],{"__ignoreMap":46},[51,26617,26618,26620,26622],{"class":53,"line":54},[51,26619,24958],{"class":57},[51,26621,26458],{"class":61},[51,26623,26624],{"class":61}," update\n",[51,26626,26627,26629,26631,26633,26636,26639,26642,26645],{"class":53,"line":185},[51,26628,24958],{"class":57},[51,26630,26458],{"class":61},[51,26632,24215],{"class":61},[51,26634,26635],{"class":61}," docker-ce",[51,26637,26638],{"class":61}," docker-ce-cli",[51,26640,26641],{"class":61}," containerd.io",[51,26643,26644],{"class":61}," docker-buildx-plugin",[51,26646,26647],{"class":61}," docker-compose-plugin\n",[22381,26649,26651],{"id":26650},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[10,26653,26654,26655,26658,26659,26662],{},"查看自己自己包管理工具版本（dnf是 ",[691,26656,26657],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[691,26660,26661],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[41,26664,26666],{"className":43,"code":26665,"language":45,"meta":46,"style":46},"dnf --version\n",[48,26667,26668],{"__ignoreMap":46},[51,26669,26670,26673],{"class":53,"line":54},[51,26671,26672],{"class":57},"dnf",[51,26674,26675],{"class":278}," --version\n",[10,26677,26401,26678,26682],{},[780,26679,26406],{"href":26680,"rel":26681},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24246]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[10,26684,26685],{},"如果你之前安装过 docker，请先删掉",[41,26687,26689],{"className":43,"code":26688,"language":45,"meta":46,"style":46},"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",[48,26690,26691,26705,26712,26719,26726,26733,26740,26747,26754,26761],{"__ignoreMap":46},[51,26692,26693,26695,26698,26700,26703],{"class":53,"line":54},[51,26694,24958],{"class":57},[51,26696,26697],{"class":61}," dnf",[51,26699,26461],{"class":61},[51,26701,26702],{"class":61}," docker",[51,26704,25060],{"class":278},[51,26706,26707,26710],{"class":53,"line":185},[51,26708,26709],{"class":61},"                  docker-client",[51,26711,25060],{"class":278},[51,26713,26714,26717],{"class":53,"line":202},[51,26715,26716],{"class":61},"                  docker-client-latest",[51,26718,25060],{"class":278},[51,26720,26721,26724],{"class":53,"line":209},[51,26722,26723],{"class":61},"                  docker-common",[51,26725,25060],{"class":278},[51,26727,26728,26731],{"class":53,"line":223},[51,26729,26730],{"class":61},"                  docker-latest",[51,26732,25060],{"class":278},[51,26734,26735,26738],{"class":53,"line":237},[51,26736,26737],{"class":61},"                  docker-latest-logrotate",[51,26739,25060],{"class":278},[51,26741,26742,26745],{"class":53,"line":242},[51,26743,26744],{"class":61},"                  docker-logrotate",[51,26746,25060],{"class":278},[51,26748,26749,26752],{"class":53,"line":257},[51,26750,26751],{"class":61},"                  docker-selinux",[51,26753,25060],{"class":278},[51,26755,26756,26759],{"class":53,"line":262},[51,26757,26758],{"class":61},"                  docker-engine-selinux",[51,26760,25060],{"class":278},[51,26762,26763],{"class":53,"line":285},[51,26764,26765],{"class":61},"                  docker-engine\n",[10,26767,26768],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[41,26770,26772],{"className":43,"code":26771,"language":45,"meta":46,"style":46},"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",[48,26773,26774,26788,26803],{"__ignoreMap":46},[51,26775,26776,26778,26780,26783,26785],{"class":53,"line":54},[51,26777,24958],{"class":57},[51,26779,26697],{"class":61},[51,26781,26782],{"class":278}," -y",[51,26784,24215],{"class":61},[51,26786,26787],{"class":61}," dnf-plugins-core\n",[51,26789,26790,26792,26794,26797,26800],{"class":53,"line":185},[51,26791,24958],{"class":57},[51,26793,26697],{"class":61},[51,26795,26796],{"class":61}," config-manager",[51,26798,26799],{"class":61}," addrepo",[51,26801,26802],{"class":278}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[51,26804,26805,26807,26810,26813,26816],{"class":53,"line":202},[51,26806,24958],{"class":57},[51,26808,26809],{"class":61}," sed",[51,26811,26812],{"class":278}," -i",[51,26814,26815],{"class":61}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[51,26817,26818],{"class":61}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[10,26820,26821],{},"最后安装：",[41,26823,26825],{"className":43,"code":26824,"language":45,"meta":46,"style":46},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[48,26826,26827],{"__ignoreMap":46},[51,26828,26829,26831,26833,26835,26837,26839,26841,26843],{"class":53,"line":54},[51,26830,24958],{"class":57},[51,26832,26697],{"class":61},[51,26834,24215],{"class":61},[51,26836,26635],{"class":61},[51,26838,26638],{"class":61},[51,26840,26641],{"class":61},[51,26842,26644],{"class":61},[51,26844,26647],{"class":61},[513,26846,26848],{"id":26847},"_22配置环境","2.2.配置环境",[22381,26850,26852,26855],{"id":26851},"_221检查-docker-服务状态",[691,26853,26854],{},"2.2.1.检查 Docker 服务状态"," ：",[10,26857,26858],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[41,26860,26862],{"className":43,"code":26861,"language":45,"meta":46,"style":46},"systemctl status docker\n",[48,26863,26864],{"__ignoreMap":46},[51,26865,26866,26869,26872],{"class":53,"line":54},[51,26867,26868],{"class":57},"systemctl",[51,26870,26871],{"class":61}," status",[51,26873,26874],{"class":61}," docker\n",[22381,26876,26878,26855],{"id":26877},"_222启动-docker-服务",[691,26879,26880],{},"2.2.2.启动 Docker 服务",[10,26882,26883],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[41,26885,26887],{"className":43,"code":26886,"language":45,"meta":46,"style":46},"sudo systemctl start docker\n",[48,26888,26889],{"__ignoreMap":46},[51,26890,26891,26893,26896,26898],{"class":53,"line":54},[51,26892,24958],{"class":57},[51,26894,26895],{"class":61}," systemctl",[51,26897,4570],{"class":61},[51,26899,26874],{"class":61},[22381,26901,26903,26855],{"id":26902},"_223设置-docker-开机自启",[691,26904,26905],{},"2.2.3.设置 Docker 开机自启",[10,26907,26908],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[41,26910,26912],{"className":43,"code":26911,"language":45,"meta":46,"style":46},"sudo systemctl enable docker\n",[48,26913,26914],{"__ignoreMap":46},[51,26915,26916,26918,26920,26923],{"class":53,"line":54},[51,26917,24958],{"class":57},[51,26919,26895],{"class":61},[51,26921,26922],{"class":61}," enable",[51,26924,26874],{"class":61},[22381,26926,26928,14179,26931,14179,26936,26855],{"id":26927},"_224将用户添加到-docker-组",[691,26929,26930],{},"2.2.4.将用户添加到",[691,26932,26933],{},[48,26934,26935],{},"docker",[691,26937,26938],{},"组",[10,26940,26941,26942,26944],{},"使用以下命令将当前用户添加到 ",[48,26943,26935],{}," 组：",[41,26946,26948],{"className":43,"code":26947,"language":45,"meta":46,"style":46},"sudo usermod -aG docker $USER\n",[48,26949,26950],{"__ignoreMap":46},[51,26951,26952,26954,26957,26960,26962],{"class":53,"line":54},[51,26953,24958],{"class":57},[51,26955,26956],{"class":61}," usermod",[51,26958,26959],{"class":278}," -aG",[51,26961,26702],{"class":61},[51,26963,26964],{"class":65}," $USER\n",[22381,26966,26968,26855],{"id":26967},"_225退出并重新登录",[691,26969,26970],{},"2.2.5.退出并重新登录",[10,26972,26973],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[41,26975,26977],{"className":43,"code":26976,"language":45,"meta":46,"style":46},"newgrp docker\n",[48,26978,26979],{"__ignoreMap":46},[51,26980,26981,26984],{"class":53,"line":54},[51,26982,26983],{"class":57},"newgrp",[51,26985,26874],{"class":61},[22381,26987,26989,26855],{"id":26988},"_226重新启动-docker-服务如果需要",[691,26990,26991],{},"2.2.6.重新启动 Docker 服务（如果需要）",[10,26993,26994],{},"确保 Docker 服务正在运行，可以使用以下命令：",[41,26996,26997],{"className":43,"code":26886,"language":45,"meta":46,"style":46},[48,26998,26999],{"__ignoreMap":46},[51,27000,27001,27003,27005,27007],{"class":53,"line":54},[51,27002,24958],{"class":57},[51,27004,26895],{"class":61},[51,27006,4570],{"class":61},[51,27008,26874],{"class":61},[22381,27010,27012,26855],{"id":27011},"_227重启电脑后检查-docker-服务状态",[691,27013,27014],{},"2.2.7.重启电脑后检查 Docker 服务状态",[10,27016,27017],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[41,27019,27021],{"className":43,"code":27020,"language":45,"meta":46,"style":46},"sudo reboot\nsystemctl status docker\n",[48,27022,27023,27030],{"__ignoreMap":46},[51,27024,27025,27027],{"class":53,"line":54},[51,27026,24958],{"class":57},[51,27028,27029],{"class":61}," reboot\n",[51,27031,27032,27034,27036],{"class":53,"line":185},[51,27033,26868],{"class":57},[51,27035,26871],{"class":61},[51,27037,26874],{"class":61},[10,27039,27040],{},[460,27041],{"alt":46,"src":27042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[10,27044,27045],{},"第三行显示enabled说明开机自启动成功",[10,27047,27048],{},"按q退出",[513,27050,27052],{"id":27051},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[10,27054,27055],{},"优先使用linux来使用docker是比较好的",[10,27057,27058],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[10,27060,27061],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[10,27063,27064,27065],{},"官方下载安装:",[780,27066,27067],{"href":27067,"rel":27068},"https:\u002F\u002Fwww.docker.com\u002F",[24246],[10,27070,27071],{},"Windows的Docker显卡直通与USB直通:",[10,27073,27074],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[10,27076,27077],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[10,27079,27080],{},[460,27081],{"alt":46,"src":27082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[10,27084,27085],{},[460,27086],{"alt":46,"src":27087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[10,27089,27090],{},[460,27091],{"alt":46,"src":27092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[464,27094,27095],{},"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":46,"searchDepth":185,"depth":185,"links":27097},[27098,27099,27100],{"id":26375,"depth":202,"text":26376},{"id":26847,"depth":202,"text":26848},{"id":27051,"depth":202,"text":27052},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26367,"description":46},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27107,"title":27108,"body":27109,"description":27116,"extension":469,"meta":27809,"navigation":205,"path":27810,"seo":27811,"stem":27812,"__hash__":27813},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27110,"toc":27803},[27111,27114,27117,27121,27126,27131,27134,27162,27167,27176,27179,27184,27188,27195,27200,27206,27210,27213,27217,27222,27314,27319,27337,27342,27363,27368,27384,27388,27393,27422,27427,27473,27478,27522,27530,27547,27552,27568,27573,27587,27590,27593,27596,27599,27628,27631,27636,27640,27643,27646,27652,27655,27658,27661,27723,27730,27735,27738,27756,27760,27763,27780,27783,27786,27800],[14,27112,27108],{"id":27113},"_3docker直通",[10,27115,27116],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[513,27118,27120],{"id":27119},"_31usb直通","3.1.USB直通",[10,27122,27123],{},[460,27124],{"alt":46,"src":27125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[19,27127,27128],{},[22,27129,27130],{},"方法一(不是很推荐新手)：",[10,27132,27133],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[41,27135,27137],{"className":43,"code":27136,"language":45,"meta":46,"style":46},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[48,27138,27139,27147,27152],{"__ignoreMap":46},[51,27140,27141,27144],{"class":53,"line":54},[51,27142,27143],{"class":57},"ls",[51,27145,27146],{"class":61}," \u002Fdev\n",[51,27148,27149],{"class":53,"line":185},[51,27150,27151],{"class":601},"#例如\n",[51,27153,27154,27157,27159],{"class":53,"line":202},[51,27155,27156],{"class":65},"--device",[51,27158,70],{"class":69},[51,27160,27161],{"class":61},"\u002Fdev\u002Ftty_USB0\n",[19,27163,27164],{"start":185},[22,27165,27166],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[41,27168,27170],{"className":43,"code":27169,"language":45,"meta":46,"style":46},"--privileged\n",[48,27171,27172],{"__ignoreMap":46},[51,27173,27174],{"class":53,"line":54},[51,27175,27169],{"class":57},[10,27177,27178],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[10,27180,27181],{},[460,27182],{"alt":46,"src":27183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[513,27185,27187],{"id":27186},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[10,27189,27190,27191,27194],{},"NVIDIA Container Toolkit使用户 ",[691,27192,27193],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[10,27196,27197],{},[460,27198],{"alt":46,"src":27199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[10,27201,27202],{},[780,27203,27204],{"href":27204,"rel":27205},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24246],[22381,27207,27209],{"id":27208},"_321安装","3.2.1.安装",[10,27211,27212],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23293,27214,27216],{"id":27215},"_3211ubuntu","3.2.1.1.Ubuntu",[19,27218,27219],{},[22,27220,27221],{},"配置存储库 并更新",[41,27223,27225],{"className":43,"code":27224,"language":45,"meta":46,"style":46},"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",[48,27226,27227,27256,27276,27288,27300,27306],{"__ignoreMap":46},[51,27228,27229,27232,27235,27238,27240,27242,27245,27248,27251,27254],{"class":53,"line":54},[51,27230,27231],{"class":57},"curl",[51,27233,27234],{"class":278}," -fsSL",[51,27236,27237],{"class":61}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[51,27239,25491],{"class":69},[51,27241,26455],{"class":57},[51,27243,27244],{"class":61}," gpg",[51,27246,27247],{"class":278}," --dearmor",[51,27249,27250],{"class":278}," -o",[51,27252,27253],{"class":61}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[51,27255,25060],{"class":278},[51,27257,27258,27261,27263,27266,27269,27272,27274],{"class":53,"line":185},[51,27259,27260],{"class":65},"  && ",[51,27262,27231],{"class":57},[51,27264,27265],{"class":278}," -s",[51,27267,27268],{"class":278}," -L",[51,27270,27271],{"class":61}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[51,27273,25491],{"class":69},[51,27275,25060],{"class":278},[51,27277,27278,27281,27284,27286],{"class":53,"line":202},[51,27279,27280],{"class":57},"    sed",[51,27282,27283],{"class":61}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[51,27285,25491],{"class":69},[51,27287,25060],{"class":278},[51,27289,27290,27293,27295,27298],{"class":53,"line":209},[51,27291,27292],{"class":57},"    sudo",[51,27294,26598],{"class":61},[51,27296,27297],{"class":61}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[51,27299,25060],{"class":278},[51,27301,27302,27304],{"class":53,"line":223},[51,27303,27260],{"class":65},[51,27305,26557],{"class":278},[51,27307,27308,27310,27312],{"class":53,"line":237},[51,27309,27292],{"class":57},[51,27311,26458],{"class":61},[51,27313,26624],{"class":61},[19,27315,27316],{"start":185},[22,27317,27318],{},"安装nvidia-docker2",[41,27320,27322],{"className":43,"code":27321,"language":45,"meta":46,"style":46},"sudo apt-get install -y nvidia-docker2\n",[48,27323,27324],{"__ignoreMap":46},[51,27325,27326,27328,27330,27332,27334],{"class":53,"line":54},[51,27327,24958],{"class":57},[51,27329,26458],{"class":61},[51,27331,24215],{"class":61},[51,27333,26782],{"class":278},[51,27335,27336],{"class":61}," nvidia-docker2\n",[19,27338,27339],{"start":202},[22,27340,27341],{},"使用nvidia-ctk命令配置container runtime",[41,27343,27345],{"className":43,"code":27344,"language":45,"meta":46,"style":46},"sudo nvidia-ctk runtime configure --runtime=docker\n",[48,27346,27347],{"__ignoreMap":46},[51,27348,27349,27351,27354,27357,27360],{"class":53,"line":54},[51,27350,24958],{"class":57},[51,27352,27353],{"class":61}," nvidia-ctk",[51,27355,27356],{"class":61}," runtime",[51,27358,27359],{"class":61}," configure",[51,27361,27362],{"class":278}," --runtime=docker\n",[19,27364,27365],{"start":209},[22,27366,27367],{},"重启docker服务:",[41,27369,27371],{"className":43,"code":27370,"language":45,"meta":46,"style":46},"sudo systemctl restart docker\n",[48,27372,27373],{"__ignoreMap":46},[51,27374,27375,27377,27379,27382],{"class":53,"line":54},[51,27376,24958],{"class":57},[51,27378,26895],{"class":61},[51,27380,27381],{"class":61}," restart",[51,27383,26874],{"class":61},[23293,27385,27387],{"id":27386},"_3212fedora","3.2.1.2.Fedora",[19,27389,27390],{},[22,27391,27392],{},"配置存储库",[41,27394,27396],{"className":43,"code":27395,"language":45,"meta":46,"style":46},"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",[48,27397,27398,27413],{"__ignoreMap":46},[51,27399,27400,27402,27404,27406,27409,27411],{"class":53,"line":54},[51,27401,27231],{"class":57},[51,27403,27265],{"class":278},[51,27405,27268],{"class":278},[51,27407,27408],{"class":61}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[51,27410,25491],{"class":69},[51,27412,25060],{"class":278},[51,27414,27415,27417,27419],{"class":53,"line":185},[51,27416,24958],{"class":57},[51,27418,26598],{"class":61},[51,27420,27421],{"class":61}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[19,27423,27424],{"start":185},[22,27425,27426],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[41,27428,27430],{"className":43,"code":27429,"language":45,"meta":46,"style":46},"# 如果是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",[48,27431,27432,27437,27451,27455,27460],{"__ignoreMap":46},[51,27433,27434],{"class":53,"line":54},[51,27435,27436],{"class":601},"# 如果是RHEL或者Rocky（DNF4）\n",[51,27438,27439,27441,27443,27445,27448],{"class":53,"line":185},[51,27440,24958],{"class":57},[51,27442,26697],{"class":61},[51,27444,26796],{"class":61},[51,27446,27447],{"class":278}," --add-repo",[51,27449,27450],{"class":61}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[51,27452,27453],{"class":53,"line":202},[51,27454,206],{"emptyLinePlaceholder":205},[51,27456,27457],{"class":53,"line":209},[51,27458,27459],{"class":601},"# 如果是Feodra41+（DNF5）\n",[51,27461,27462,27464,27466,27468,27470],{"class":53,"line":223},[51,27463,24958],{"class":57},[51,27465,26697],{"class":61},[51,27467,26796],{"class":61},[51,27469,26799],{"class":61},[51,27471,27472],{"class":278}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[19,27474,27475],{"start":202},[22,27476,27477],{},"安装NVIDIA Container Toolki包",[41,27479,27481],{"className":43,"code":27480,"language":45,"meta":46,"style":46},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[48,27482,27483,27488,27501,27505,27510],{"__ignoreMap":46},[51,27484,27485],{"class":53,"line":54},[51,27486,27487],{"class":601},"# 如果是RHEL或者Rocky\n",[51,27489,27490,27492,27494,27496,27498],{"class":53,"line":185},[51,27491,24958],{"class":57},[51,27493,26697],{"class":61},[51,27495,24215],{"class":61},[51,27497,26782],{"class":278},[51,27499,27500],{"class":61}," nvidia-container-toolkit\n",[51,27502,27503],{"class":53,"line":202},[51,27504,206],{"emptyLinePlaceholder":205},[51,27506,27507],{"class":53,"line":209},[51,27508,27509],{"class":601},"# 如果是Fedora\n",[51,27511,27512,27514,27516,27518,27520],{"class":53,"line":223},[51,27513,24958],{"class":57},[51,27515,26697],{"class":61},[51,27517,24215],{"class":61},[51,27519,26782],{"class":278},[51,27521,27500],{"class":61},[19,27523,27524],{"start":209},[22,27525,27526,27527,27529],{},"安装nvidia-docker2 ： 在Fedora上使用",[48,27528,26672],{},"进行安装",[41,27531,27533],{"className":43,"code":27532,"language":45,"meta":46,"style":46},"sudo dnf install -y nvidia-docker2\n",[48,27534,27535],{"__ignoreMap":46},[51,27536,27537,27539,27541,27543,27545],{"class":53,"line":54},[51,27538,24958],{"class":57},[51,27540,26697],{"class":61},[51,27542,24215],{"class":61},[51,27544,26782],{"class":278},[51,27546,27336],{"class":61},[19,27548,27549],{"start":223},[22,27550,27551],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[41,27553,27554],{"className":43,"code":27344,"language":45,"meta":46,"style":46},[48,27555,27556],{"__ignoreMap":46},[51,27557,27558,27560,27562,27564,27566],{"class":53,"line":54},[51,27559,24958],{"class":57},[51,27561,27353],{"class":61},[51,27563,27356],{"class":61},[51,27565,27359],{"class":61},[51,27567,27362],{"class":278},[19,27569,27570],{"start":237},[22,27571,27572],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[41,27574,27575],{"className":43,"code":27370,"language":45,"meta":46,"style":46},[48,27576,27577],{"__ignoreMap":46},[51,27578,27579,27581,27583,27585],{"class":53,"line":54},[51,27580,24958],{"class":57},[51,27582,26895],{"class":61},[51,27584,27381],{"class":61},[51,27586,26874],{"class":61},[10,27588,27589],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[10,27591,27592],{},"方法：",[10,27594,27595],{},"1️⃣nvidia-smi",[10,27597,27598],{},"2️⃣运行nvidia cuda 容器进行测试",[41,27600,27602],{"className":43,"code":27601,"language":45,"meta":46,"style":46},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[48,27603,27604],{"__ignoreMap":46},[51,27605,27606,27608,27610,27613,27616,27619,27622,27625],{"class":53,"line":54},[51,27607,24958],{"class":57},[51,27609,26702],{"class":61},[51,27611,27612],{"class":61}," run",[51,27614,27615],{"class":278}," --rm",[51,27617,27618],{"class":278}," --gpus",[51,27620,27621],{"class":61}," all",[51,27623,27624],{"class":61}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[51,27626,27627],{"class":61}," nvidia-smi\n",[10,27629,27630],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[10,27632,27633],{},[460,27634],{"alt":46,"src":27635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[513,27637,27639],{"id":27638},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[10,27641,27642],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[10,27644,27645],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[10,27647,27648],{},[780,27649,27650],{"href":27650,"rel":27651},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24246],[10,27653,27654],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[10,27656,27657],{},"我们只需要找到对应的Docker镜像当底包即可。",[10,27659,27660],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[679,27662,27663,27679],{},[682,27664,27665],{},[685,27666,27667,27670,27673,27676],{},[688,27668,27669],{"align":24119},"镜像类型",[688,27671,27672],{"align":24119},"适用场景",[688,27674,27675],{"align":24119},"示例标签",[688,27677,27678],{"align":24119},"大小",[726,27680,27681,27695,27709],{},[685,27682,27683,27686,27689,27692],{},[731,27684,27685],{"align":24119},"base",[731,27687,27688],{"align":24119},"仅需 CUDA 运行时库",[731,27690,27691],{"align":24119},"12.4.0-base-ubuntu22.04",[731,27693,27694],{"align":24119},"~240MB",[685,27696,27697,27700,27703,27706],{},[731,27698,27699],{"align":24119},"runtime",[731,27701,27702],{"align":24119},"部署编译后的应用（含数学库）",[731,27704,27705],{"align":24119},"12.4.0-runtime-ubuntu22.04",[731,27707,27708],{"align":24119},"~2GB",[685,27710,27711,27714,27717,27720],{},[731,27712,27713],{"align":24119},"devel",[731,27715,27716],{"align":24119},"开发环境（含编译工具）",[731,27718,27719],{"align":24119},"12.4.0-devel-ubuntu22.04",[731,27721,27722],{"align":24119},"~3GB",[10,27724,27725,27726,27729],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[48,27727,27728],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[10,27731,27732],{},[460,27733],{"alt":46,"src":27734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[10,27736,27737],{},"在dockerfile里就可以开头这么写：",[41,27739,27741],{"className":43,"code":27740,"language":45,"meta":46,"style":46},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[48,27742,27743,27748],{"__ignoreMap":46},[51,27744,27745],{"class":53,"line":54},[51,27746,27747],{"class":601},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[51,27749,27750,27753],{"class":53,"line":185},[51,27751,27752],{"class":57},"FROM",[51,27754,27755],{"class":61}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[513,27757,27759],{"id":27758},"_34配置以太网","3.4.配置以太网",[10,27761,27762],{},"指定网络模式",[41,27764,27766],{"className":43,"code":27765,"language":45,"meta":46,"style":46},"--net=host \\\n",[48,27767,27768],{"__ignoreMap":46},[51,27769,27770,27773,27775,27778],{"class":53,"line":54},[51,27771,27772],{"class":65},"--net",[51,27774,70],{"class":69},[51,27776,27777],{"class":61},"host",[51,27779,25060],{"class":57},[10,27781,27782],{},"启动参数里加上这行即可。具体在下方",[10,27784,27785],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1549,27787,27788,27791,27794,27797],{},[22,27789,27790],{},"--net=bridge:默认选项，表示连接到默认的网桥",[22,27792,27793],{},"--net=host:容器使用宿主机的网络",[22,27795,27796],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[22,27798,27799],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[464,27801,27802],{},"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":46,"searchDepth":185,"depth":185,"links":27804},[27805,27806,27807,27808],{"id":27119,"depth":202,"text":27120},{"id":27186,"depth":202,"text":27187},{"id":27638,"depth":202,"text":27639},{"id":27758,"depth":202,"text":27759},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27108,"description":27116},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27815,"title":27816,"body":27817,"description":27824,"extension":469,"meta":27830,"navigation":205,"path":27831,"seo":27832,"stem":27833,"__hash__":27834},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27818,"toc":27828},[27819,27822,27825],[14,27820,27816],{"id":27821},"_4dockerhub换源",[10,27823,27824],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[10,27826,27827],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":46,"searchDepth":185,"depth":185,"links":27829},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27816,"description":27824},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27836,"title":27837,"body":27838,"description":46,"extension":469,"meta":28850,"navigation":205,"path":28851,"seo":28852,"stem":28853,"__hash__":28854},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27839,"toc":28845},[27840,27843,27847,27853,27857,27860,28200,28203,28206,28209,28214,28219,28222,28225,28228,28231,28250,28253,28264,28270,28452,28462,28478,28741,28743,28768,28783,28792,28842],[14,27841,27837],{"id":27842},"_5docker命令学习",[513,27844,27846],{"id":27845},"_51参考文档","5.1.参考文档",[10,27848,27849],{},[780,27850,27851],{"href":27851,"rel":27852},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24246],[513,27854,27856],{"id":27855},"_52常用命令","5.2.常用命令",[10,27858,27859],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[679,27861,27862,27875],{},[682,27863,27864],{},[685,27865,27866,27869,27872],{},[688,27867,27868],{"align":24119},"命令",[688,27870,27871],{"align":24119},"描述",[688,27873,27874],{"align":24119},"示例",[726,27876,27877,27888,27899,27910,27921,27932,27943,27954,27964,27975,27986,27997,28007,28018,28029,28040,28050,28060,28070,28080,28091,28102,28113,28124,28135,28146,28156,28167,28178,28189],{},[685,27878,27879,27882,27885],{},[731,27880,27881],{"align":24119},"docker run",[731,27883,27884],{"align":24119},"创建并启动一个新的容器。",[731,27886,27887],{"align":24119},"docker run -it ubuntu bash",[685,27889,27890,27893,27896],{},[731,27891,27892],{"align":24119},"docker build",[731,27894,27895],{"align":24119},"通过指定的 Dockerfile 创建一个新的镜像。",[731,27897,27898],{"align":24119},"docker build -t myimage .",[685,27900,27901,27904,27907],{},[731,27902,27903],{"align":24119},"docker pull",[731,27905,27906],{"align":24119},"从 Docker 仓库拉取镜像。",[731,27908,27909],{"align":24119},"docker pull ubuntu",[685,27911,27912,27915,27918],{},[731,27913,27914],{"align":24119},"docker push",[731,27916,27917],{"align":24119},"将本地镜像推送到 Docker 仓库。",[731,27919,27920],{"align":24119},"docker push myimage",[685,27922,27923,27926,27929],{},[731,27924,27925],{"align":24119},"docker stop",[731,27927,27928],{"align":24119},"停止一个正在运行的容器。",[731,27930,27931],{"align":24119},"docker stop container_id",[685,27933,27934,27937,27940],{},[731,27935,27936],{"align":24119},"docker start",[731,27938,27939],{"align":24119},"启动一个已经存在的容器。",[731,27941,27942],{"align":24119},"docker start container_id",[685,27944,27945,27948,27951],{},[731,27946,27947],{"align":24119},"docker restart",[731,27949,27950],{"align":24119},"重新启动容器。",[731,27952,27953],{"align":24119},"docker restart container_id",[685,27955,27956,27959,27962],{},[731,27957,27958],{"align":24119},"docker ps",[731,27960,27961],{"align":24119},"列出当前正在运行的容器。",[731,27963,27958],{"align":24119},[685,27965,27966,27969,27972],{},[731,27967,27968],{"align":24119},"docker rm",[731,27970,27971],{"align":24119},"删除一个或多个停止的容器。",[731,27973,27974],{"align":24119},"docker rm container_id",[685,27976,27977,27980,27983],{},[731,27978,27979],{"align":24119},"docker exec",[731,27981,27982],{"align":24119},"在一个正在运行的容器中执行命令。",[731,27984,27985],{"align":24119},"docker exec -it container_id bash",[685,27987,27988,27991,27994],{},[731,27989,27990],{"align":24119},"docker logs",[731,27992,27993],{"align":24119},"查看容器的日志输出。",[731,27995,27996],{"align":24119},"docker logs container_id",[685,27998,27999,28002,28005],{},[731,28000,28001],{"align":24119},"docker images",[731,28003,28004],{"align":24119},"列出本地所有镜像。",[731,28006,28001],{"align":24119},[685,28008,28009,28012,28015],{},[731,28010,28011],{"align":24119},"docker rmi",[731,28013,28014],{"align":24119},"删除一个或多个镜像。",[731,28016,28017],{"align":24119},"docker rmi myimage",[685,28019,28020,28023,28026],{},[731,28021,28022],{"align":24119},"docker network",[731,28024,28025],{"align":24119},"管理 Docker 网络。",[731,28027,28028],{"align":24119},"docker network ls",[685,28030,28031,28034,28037],{},[731,28032,28033],{"align":24119},"docker volume",[731,28035,28036],{"align":24119},"管理 Docker 数据卷。",[731,28038,28039],{"align":24119},"docker volume ls",[685,28041,28042,28045,28048],{},[731,28043,28044],{"align":24119},"docker-compose up",[731,28046,28047],{"align":24119},"启动 docker-compose.yml 中定义的所有服务。",[731,28049,28044],{"align":24119},[685,28051,28052,28055,28058],{},[731,28053,28054],{"align":24119},"docker-compose down",[731,28056,28057],{"align":24119},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[731,28059,28054],{"align":24119},[685,28061,28062,28065,28068],{},[731,28063,28064],{"align":24119},"docker info",[731,28066,28067],{"align":24119},"显示 Docker 系统的详细信息。",[731,28069,28064],{"align":24119},[685,28071,28072,28075,28078],{},[731,28073,28074],{"align":24119},"docker stats",[731,28076,28077],{"align":24119},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[731,28079,28074],{"align":24119},[685,28081,28082,28085,28088],{},[731,28083,28084],{"align":24119},"docker inspect",[731,28086,28087],{"align":24119},"查看容器或镜像的详细信息（JSON 格式）。",[731,28089,28090],{"align":24119},"docker inspect container_id",[685,28092,28093,28096,28099],{},[731,28094,28095],{"align":24119},"docker save",[731,28097,28098],{"align":24119},"将一个镜像保存为 tar 文件。",[731,28100,28101],{"align":24119},"docker save -o myimage.tar myimage",[685,28103,28104,28107,28110],{},[731,28105,28106],{"align":24119},"docker load",[731,28108,28109],{"align":24119},"从 tar 文件中加载镜像。",[731,28111,28112],{"align":24119},"docker load -i myimage.tar",[685,28114,28115,28118,28121],{},[731,28116,28117],{"align":24119},"docker tag",[731,28119,28120],{"align":24119},"为镜像添加标签（tag）。",[731,28122,28123],{"align":24119},"docker tag myimage myimage:v1",[685,28125,28126,28129,28132],{},[731,28127,28128],{"align":24119},"docker buildx build",[731,28130,28131],{"align":24119},"使用 Buildx 构建多架构镜像。",[731,28133,28134],{"align":24119},"docker buildx build -t myimage .",[685,28136,28137,28140,28143],{},[731,28138,28139],{"align":24119},"docker buildx create",[731,28141,28142],{"align":24119},"创建一个新的 Buildx 构建实例。",[731,28144,28145],{"align":24119},"docker buildx create –use",[685,28147,28148,28151,28154],{},[731,28149,28150],{"align":24119},"docker buildx ls",[731,28152,28153],{"align":24119},"列出所有可用的 Buildx 构建实例。",[731,28155,28150],{"align":24119},[685,28157,28158,28161,28164],{},[731,28159,28160],{"align":24119},"docker buildx use",[731,28162,28163],{"align":24119},"设置当前的 Buildx 构建实例。",[731,28165,28166],{"align":24119},"docker buildx use mybuilder",[685,28168,28169,28172,28175],{},[731,28170,28171],{"align":24119},"docker buildx bake",[731,28173,28174],{"align":24119},"使用 Bake 文件批量构建镜像。",[731,28176,28177],{"align":24119},"docker buildx bake -f bake.hcl",[685,28179,28180,28183,28186],{},[731,28181,28182],{"align":24119},"docker buildx build –push",[731,28184,28185],{"align":24119},"构建镜像并推送到镜像仓库。",[731,28187,28188],{"align":24119},"docker buildx build –push -t myimage .",[685,28190,28191,28194,28197],{},[731,28192,28193],{"align":24119},"docker buildx build –platform",[731,28195,28196],{"align":24119},"构建镜像并为多个平台生成支持。",[731,28198,28199],{"align":24119},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[10,28201,28202],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[10,28204,28205],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[10,28207,28208],{},"docker images 可以查看已经下载的镜像",[10,28210,28211],{},[460,28212],{"alt":46,"src":28213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[10,28215,28216],{},[691,28217,28218],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[10,28220,28221],{},"docker rmi $(docker images -q) 删除所有的镜像",[10,28223,28224],{},"docker container logs 查看容器日志",[10,28226,28227],{},"docker top 查看容器里的进程",[10,28229,28230],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[41,28232,28234],{"className":43,"code":28233,"language":45,"meta":46,"style":46},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[48,28235,28236],{"__ignoreMap":46},[51,28237,28238,28241,28244,28247],{"class":53,"line":54},[51,28239,28240],{"class":57},"如：docker",[51,28242,28243],{"class":61}," cp",[51,28245,28246],{"class":61}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[51,28248,28249],{"class":61}," \u002Fmydata\u002Fnginx\n",[10,28251,28252],{},"docker run时在启动容器的时候会有几个常用的选项：",[1549,28254,28255,28258,28261],{},[22,28256,28257],{},"-d选项：表示后台运行",[22,28259,28260],{},"-P选项：随机端口映射",[22,28262,28263],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[513,28265,28267],{"id":28266},"_53run命令的参数非常重要",[691,28268,28269],{},"5.3.run命令的参数（非常重要）",[679,28271,28272,28285],{},[682,28273,28274],{},[685,28275,28276,28279,28282],{},[688,28277,28278],{"align":24119},"参数\u002F配置",[688,28280,28281],{"align":24119},"功能说明",[688,28283,28284],{"align":24119},"重要性与参考依据",[726,28286,28287,28298,28309,28320,28331,28342,28353,28364,28375,28386,28397,28408,28419,28430,28441],{},[685,28288,28289,28292,28295],{},[731,28290,28291],{"align":24119},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[731,28293,28294],{"align":24119},"指定容器名称，便于后续管理",[731,28296,28297],{"align":24119},"替代随机生成的容器名。",[685,28299,28300,28303,28306],{},[731,28301,28302],{"align":24119},"–gpus all",[731,28304,28305],{"align":24119},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[731,28307,28308],{"align":24119},"用于CUDA加速等GPU依赖任务。",[685,28310,28311,28314,28317],{},[731,28312,28313],{"align":24119},"-e NVIDIA_DRIVER_CAPABILITIES=all",[731,28315,28316],{"align":24119},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[731,28318,28319],{"align":24119},"确保容器内GPU功能完整67。",[685,28321,28322,28325,28328],{},[731,28323,28324],{"align":24119},"-dit",[731,28326,28327],{"align":24119},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[731,28329,28330],{"align":24119},"允许容器在后台运行并支持交互操作。",[685,28332,28333,28336,28339],{},[731,28334,28335],{"align":24119},"–privileged",[731,28337,28338],{"align":24119},"赋予容器完全主机权限（可访问设备、内核模块等）",[731,28340,28341],{"align":24119},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[685,28343,28344,28347,28350],{},[731,28345,28346],{"align":24119},"–net=host",[731,28348,28349],{"align":24119},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[731,28351,28352],{"align":24119},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[685,28354,28355,28358,28361],{},[731,28356,28357],{"align":24119},"–group-add audio–group-add video–group-add dialout",[731,28359,28360],{"align":24119},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[731,28362,28363],{"align":24119},"避免权限问题（如避免无法调用摄像头、麦克风）。",[685,28365,28366,28369,28372],{},[731,28367,28368],{"align":24119},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[731,28370,28371],{"align":24119},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[731,28373,28374],{"align":24119},"支持容器内运行图形界面应用（如OpenCV可视化）。",[685,28376,28377,28380,28383],{},[731,28378,28379],{"align":24119},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[731,28381,28382],{"align":24119},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[731,28384,28385],{"align":24119},"实现容器内图形显示。",[685,28387,28388,28391,28394],{},[731,28389,28390],{"align":24119},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[731,28392,28393],{"align":24119},"挂载X11认证文件（只读）",[731,28395,28396],{"align":24119},"确保容器有权连接宿主机显示服务。",[685,28398,28399,28402,28405],{},[731,28400,28401],{"align":24119},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[731,28403,28404],{"align":24119},"挂载Wayland显示协议相关目录",[731,28406,28407],{"align":24119},"支持Wayland协议的图形显示。",[685,28409,28410,28413,28416],{},[731,28411,28412],{"align":24119},"–ulimit nofile=1024:524288",[731,28414,28415],{"align":24119},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[731,28417,28418],{"align":24119},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[685,28420,28421,28424,28427],{},[731,28422,28423],{"align":24119},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[731,28425,28426],{"align":24119},"挂载宿主机用户目录到容器内同名路径",[731,28428,28429],{"align":24119},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[685,28431,28432,28435,28438],{},[731,28433,28434],{"align":24119},"-w \u002Fhome\u002Ftungchiahui",[731,28436,28437],{"align":24119},"设置容器启动后的默认工作目录",[731,28439,28440],{"align":24119},"直接进入项目路径，方便执行命令2324。",[685,28442,28443,28446,28449],{},[731,28444,28445],{"align":24119},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[731,28447,28448],{"align":24119},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[731,28450,28451],{"align":24119},"提供预配置的深度学习与机器人开发环境。",[10,28453,28454,28455,28457,28458,28461],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[48,28456,24958],{},"加不加",[48,28459,28460],{},"sudo -E","都无所谓。",[10,28463,28464,28465,28467,28468,28470,28471,28474,28475,28477],{},"用户已经被加到docker组了，不用",[48,28466,24958],{},"也行跑，其次，",[48,28469,24958],{},"运行的话，你的",[48,28472,28473],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[48,28476,28473],{},"更不可能变了。",[41,28479,28481],{"className":43,"code":28480,"language":45,"meta":46,"style":46},"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",[48,28482,28483,28496,28506,28516,28528,28535,28542,28549,28559,28568,28577,28591,28603,28615,28624,28634,28643,28658,28691,28718,28729,28736],{"__ignoreMap":46},[51,28484,28485,28487,28489,28491,28494],{"class":53,"line":54},[51,28486,24958],{"class":57},[51,28488,26702],{"class":61},[51,28490,27612],{"class":61},[51,28492,28493],{"class":278}," --name=ros_opencv_cuda",[51,28495,25060],{"class":278},[51,28497,28498,28501,28504],{"class":53,"line":185},[51,28499,28500],{"class":65},"--gpus ",[51,28502,28503],{"class":61},"all",[51,28505,25060],{"class":278},[51,28507,28508,28511,28514],{"class":53,"line":202},[51,28509,28510],{"class":65},"-e ",[51,28512,28513],{"class":61},"NVIDIA_DRIVER_CAPABILITIES=all",[51,28515,25060],{"class":278},[51,28517,28518,28520,28523,28526],{"class":53,"line":209},[51,28519,28510],{"class":65},[51,28521,28522],{"class":61},"DISPLAY=",[51,28524,28525],{"class":65},"$DISPLAY ",[51,28527,26557],{"class":278},[51,28529,28530,28533],{"class":53,"line":223},[51,28531,28532],{"class":65},"-dit ",[51,28534,26557],{"class":278},[51,28536,28537,28540],{"class":53,"line":237},[51,28538,28539],{"class":65},"--privileged ",[51,28541,26557],{"class":278},[51,28543,28544,28547],{"class":53,"line":242},[51,28545,28546],{"class":65},"--net=host ",[51,28548,26557],{"class":278},[51,28550,28551,28554,28557],{"class":53,"line":257},[51,28552,28553],{"class":65},"--group-add ",[51,28555,28556],{"class":61},"audio",[51,28558,25060],{"class":278},[51,28560,28561,28563,28566],{"class":53,"line":262},[51,28562,28553],{"class":65},[51,28564,28565],{"class":61},"video",[51,28567,25060],{"class":278},[51,28569,28570,28572,28575],{"class":53,"line":285},[51,28571,28553],{"class":65},[51,28573,28574],{"class":61},"dialout",[51,28576,25060],{"class":278},[51,28578,28579,28581,28584,28586,28589],{"class":53,"line":296},[51,28580,28510],{"class":65},[51,28582,28583],{"class":61},"XAUTHORITY=",[51,28585,28473],{"class":65},[51,28587,28588],{"class":61},"\u002F.Xauthority",[51,28590,25060],{"class":278},[51,28592,28593,28595,28598,28601],{"class":53,"line":307},[51,28594,28510],{"class":65},[51,28596,28597],{"class":61},"WAYLAND_DISPLAY=",[51,28599,28600],{"class":65},"$WAYLAND_DISPLAY ",[51,28602,26557],{"class":278},[51,28604,28605,28607,28610,28613],{"class":53,"line":324},[51,28606,28510],{"class":65},[51,28608,28609],{"class":61},"XDG_RUNTIME_DIR=",[51,28611,28612],{"class":65},"$XDG_RUNTIME_DIR ",[51,28614,26557],{"class":278},[51,28616,28617,28619,28622],{"class":53,"line":329},[51,28618,28510],{"class":65},[51,28620,28621],{"class":61},"QT_QPA_PLATFORM=xcb",[51,28623,25060],{"class":278},[51,28625,28626,28629,28632],{"class":53,"line":334},[51,28627,28628],{"class":65},"-v ",[51,28630,28631],{"class":61},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[51,28633,25060],{"class":278},[51,28635,28636,28638,28641],{"class":53,"line":340},[51,28637,28628],{"class":65},[51,28639,28640],{"class":61},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[51,28642,25060],{"class":278},[51,28644,28645,28648,28651,28653,28656],{"class":53,"line":345},[51,28646,28647],{"class":65},"-v $HOME",[51,28649,28650],{"class":61},"\u002F.Xauthority:",[51,28652,28473],{"class":65},[51,28654,28655],{"class":61},"\u002F.Xauthority:ro",[51,28657,25060],{"class":278},[51,28659,28660,28662,28665,28667,28670,28673,28675,28678,28680,28682,28684,28686,28689],{"class":53,"line":357},[51,28661,28628],{"class":65},[51,28663,28664],{"class":61},"\u002Frun\u002Fuser\u002F",[51,28666,25481],{"class":65},[51,28668,28669],{"class":57},"id",[51,28671,28672],{"class":278}," -u",[51,28674,971],{"class":65},[51,28676,28677],{"class":61},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[51,28679,25481],{"class":65},[51,28681,28669],{"class":57},[51,28683,28672],{"class":278},[51,28685,971],{"class":65},[51,28687,28688],{"class":61},"\u002Fwayland-0",[51,28690,25060],{"class":278},[51,28692,28693,28695,28697,28699,28701,28703,28705,28708,28710,28712,28714,28716],{"class":53,"line":366},[51,28694,28628],{"class":65},[51,28696,28664],{"class":61},[51,28698,25481],{"class":65},[51,28700,28669],{"class":57},[51,28702,28672],{"class":278},[51,28704,971],{"class":65},[51,28706,28707],{"class":61},":\u002Frun\u002Fuser\u002F",[51,28709,25481],{"class":65},[51,28711,28669],{"class":57},[51,28713,28672],{"class":278},[51,28715,14098],{"class":65},[51,28717,26557],{"class":278},[51,28719,28720,28722,28724,28727],{"class":53,"line":383},[51,28721,28647],{"class":65},[51,28723,1401],{"class":61},[51,28725,28726],{"class":65},"$HOME ",[51,28728,26557],{"class":278},[51,28730,28731,28734],{"class":53,"line":392},[51,28732,28733],{"class":65},"-w $HOME ",[51,28735,26557],{"class":278},[51,28737,28738],{"class":53,"line":403},[51,28739,28740],{"class":65},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[10,28742,9409],{},[19,28744,28745,28753,28756,28759],{},[22,28746,28747,14179,28749,28752],{},[48,28748,28513],{},[48,28750,28751],{},"--gpus all","没有英伟达显卡请注释。",[22,28754,28755],{},"--name后面请自己为容器起名。",[22,28757,28758],{},"最后一行仓库名称请你自己找对应的镜像填上。",[22,28760,28761,28762,28767],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23936,28763,28764],{},[691,28765,28766],{},"请不要加","。",[41,28769,28771],{"className":43,"code":28770,"language":45,"meta":46,"style":46},"--ulimit nofile=1024:524288 \\\n",[48,28772,28773],{"__ignoreMap":46},[51,28774,28775,28778,28781],{"class":53,"line":54},[51,28776,28777],{"class":57},"--ulimit",[51,28779,28780],{"class":61}," nofile=1024:524288",[51,28782,25060],{"class":278},[10,28784,28785,28786,28791],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23936,28787,28788],{},[691,28789,28790],{},"不建议","**.**",[41,28793,28795],{"className":43,"code":28794,"language":45,"meta":46,"style":46},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[48,28796,28797,28824,28833],{"__ignoreMap":46},[51,28798,28799,28802,28805,28807,28809,28811,28813,28815,28817,28820,28822],{"class":53,"line":54},[51,28800,28801],{"class":57},"--user",[51,28803,28804],{"class":65}," $(",[51,28806,28669],{"class":57},[51,28808,28672],{"class":278},[51,28810,971],{"class":65},[51,28812,1401],{"class":61},[51,28814,25481],{"class":65},[51,28816,28669],{"class":57},[51,28818,28819],{"class":278}," -g",[51,28821,14098],{"class":65},[51,28823,26557],{"class":278},[51,28825,28826,28828,28831],{"class":53,"line":185},[51,28827,28628],{"class":65},[51,28829,28830],{"class":61},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[51,28832,25060],{"class":278},[51,28834,28835,28837,28840],{"class":53,"line":202},[51,28836,28628],{"class":65},[51,28838,28839],{"class":61},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[51,28841,25060],{"class":278},[464,28843,28844],{},"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":46,"searchDepth":185,"depth":185,"links":28846},[28847,28848,28849],{"id":27845,"depth":202,"text":27846},{"id":27855,"depth":202,"text":27856},{"id":28266,"depth":202,"text":28269},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27837,"description":46},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28856,"title":28857,"body":28858,"description":46,"extension":469,"meta":30481,"navigation":205,"path":30482,"seo":30483,"stem":30484,"__hash__":30485},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28859,"toc":30476},[28860,28863,28867,28870,29092,29096,29100,29103,29209,29214,29217,29222,29225,29230,29233,29238,29241,29253,29256,29261,29268,29296,29303,29379,29384,29387,29410,29412,29487,29492,29495,29499,29507,29512,29517,29521,29532,29538,29541,29544,29568,29571,29574,29602,29605,29608,30073,30076,30081,30086,30090,30113,30118,30122,30126,30129,30132,30135,30162,30165,30168,30186,30189,30192,30214,30222,30227,30232,30236,30239,30242,30245,30248,30293,30296,30314,30317,30322,30325,30346,30349,30405,30408,30413,30417,30420,30427,30430,30433,30438,30441,30457,30460,30473],[14,28861,28857],{"id":28862},"_6手动创建docker镜像",[513,28864,28866],{"id":28865},"_61dockerfile","6.1.DockerFile",[10,28868,28869],{},"常用命令：",[679,28871,28872,28883],{},[682,28873,28874],{},[685,28875,28876,28879,28881],{},[688,28877,28878],{"align":24119},"指令",[688,28880,26251],{"align":24119},[688,28882,27874],{"align":24119},[726,28884,28885,28895,28911,28922,28933,28944,28955,28966,28977,28991,29005,29016,29030,29041,29052,29066,29081],{},[685,28886,28887,28889,28892],{},[731,28888,27752],{"align":24119},[731,28890,28891],{"align":24119},"指定基础镜像，是 Dockerfile 的起点",[731,28893,28894],{"align":24119},"FROM ubuntu:22.04",[685,28896,28897,28900,28903],{},[731,28898,28899],{"align":24119},"LABEL",[731,28901,28902],{"align":24119},"添加元数据（如作者、版本等）",[731,28904,28905,28906,28910],{"align":24119},"LABEL maintainer=”",[780,28907,28909],{"href":28908},"mailto:you@example.com","you@example.com","”",[685,28912,28913,28916,28919],{},[731,28914,28915],{"align":24119},"ENV",[731,28917,28918],{"align":24119},"设置环境变量",[731,28920,28921],{"align":24119},"ENV PORT=8080",[685,28923,28924,28927,28930],{},[731,28925,28926],{"align":24119},"ARG",[731,28928,28929],{"align":24119},"构建参数，只在构建期间可用",[731,28931,28932],{"align":24119},"ARG VERSION=1.0",[685,28934,28935,28938,28941],{},[731,28936,28937],{"align":24119},"RUN",[731,28939,28940],{"align":24119},"构建镜像时运行命令",[731,28942,28943],{"align":24119},"RUN apt-get update && apt-get install -y curl",[685,28945,28946,28949,28952],{},[731,28947,28948],{"align":24119},"COPY",[731,28950,28951],{"align":24119},"复制文件到镜像中",[731,28953,28954],{"align":24119},"COPY . \u002Fapp",[685,28956,28957,28960,28963],{},[731,28958,28959],{"align":24119},"ADD",[731,28961,28962],{"align":24119},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[731,28964,28965],{"align":24119},"ADD archive.tar.gz \u002Fdata\u002F",[685,28967,28968,28971,28974],{},[731,28969,28970],{"align":24119},"WORKDIR",[731,28972,28973],{"align":24119},"设置工作目录",[731,28975,28976],{"align":24119},"WORKDIR \u002Fopt",[685,28978,28979,28982,28985],{},[731,28980,28981],{"align":24119},"CMD",[731,28983,28984],{"align":24119},"设置容器启动时默认命令（可被 docker run 覆盖）",[731,28986,28987,28988],{"align":24119},"CMD ",[51,28989,28990],{},"“node”, “index.js”",[685,28992,28993,28996,28999],{},[731,28994,28995],{"align":24119},"ENTRYPOINT",[731,28997,28998],{"align":24119},"设置容器启动时固定命令（通常用于 CLI 工具等）",[731,29000,29001,29002],{"align":24119},"ENTRYPOINT ",[51,29003,29004],{},"“python3”",[685,29006,29007,29010,29013],{},[731,29008,29009],{"align":24119},"EXPOSE",[731,29011,29012],{"align":24119},"声明镜像内服务监听的端口（不会自动映射）",[731,29014,29015],{"align":24119},"EXPOSE 80",[685,29017,29018,29021,29024],{},[731,29019,29020],{"align":24119},"VOLUME",[731,29022,29023],{"align":24119},"声明数据卷挂载点",[731,29025,29026,29027],{"align":24119},"VOLUME ",[51,29028,29029],{},"“\u002Fdata”",[685,29031,29032,29035,29038],{},[731,29033,29034],{"align":24119},"USER",[731,29036,29037],{"align":24119},"设置后续命令执行的用户",[731,29039,29040],{"align":24119},"USER appuser",[685,29042,29043,29046,29049],{},[731,29044,29045],{"align":24119},"ONBUILD",[731,29047,29048],{"align":24119},"当镜像作为其他镜像基础镜像时触发的构建指令",[731,29050,29051],{"align":24119},"ONBUILD COPY . \u002Fsrc",[685,29053,29054,29057,29060],{},[731,29055,29056],{"align":24119},"SHELL",[731,29058,29059],{"align":24119},"更改默认 shell，比如将 sh -c 改为 bash -c",[731,29061,29062,29063],{"align":24119},"SHELL ",[51,29064,29065],{},"“\u002Fbin\u002Fbash”, “-c”",[685,29067,29068,29071,29074],{},[731,29069,29070],{"align":24119},"HEALTHCHECK",[731,29072,29073],{"align":24119},"定义容器运行时的健康检查命令",[731,29075,29076,29077],{"align":24119},"`HEALTHCHECK CMD curl –fail ",[780,29078,29079],{"href":29079,"rel":29080},"http:\u002F\u002Flocalhost:8080",[24246],[685,29082,29083,29086,29089],{},[731,29084,29085],{"align":24119},"STOPSIGNAL",[731,29087,29088],{"align":24119},"容器停止时发送的信号",[731,29090,29091],{"align":24119},"STOPSIGNAL SIGKILL",[513,29093,29095],{"id":29094},"_62自己创建容器","6.2.自己创建容器",[22381,29097,29099],{"id":29098},"_621手动创建","6.2.1.手动创建",[10,29101,29102],{},"在x86电脑上编译x86的：",[41,29104,29106],{"className":43,"code":29105,"language":45,"meta":46,"style":46},"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",[48,29107,29108,29124,29128,29141,29145,29158,29162,29175,29179,29192,29196],{"__ignoreMap":46},[51,29109,29110,29112,29115,29118,29121],{"class":53,"line":54},[51,29111,26935],{"class":57},[51,29113,29114],{"class":61}," build",[51,29116,29117],{"class":278}," -t",[51,29119,29120],{"class":61}," ros-melodic-cuda118-cudnn8-bionic:latest",[51,29122,29123],{"class":61}," .\n",[51,29125,29126],{"class":53,"line":185},[51,29127,206],{"emptyLinePlaceholder":205},[51,29129,29130,29132,29134,29136,29139],{"class":53,"line":202},[51,29131,26935],{"class":57},[51,29133,29114],{"class":61},[51,29135,29117],{"class":278},[51,29137,29138],{"class":61}," ros-noetic-focal:latest",[51,29140,29123],{"class":61},[51,29142,29143],{"class":53,"line":209},[51,29144,206],{"emptyLinePlaceholder":205},[51,29146,29147,29149,29151,29153,29156],{"class":53,"line":223},[51,29148,26935],{"class":57},[51,29150,29114],{"class":61},[51,29152,29117],{"class":278},[51,29154,29155],{"class":61}," ros-humble-jammy:latest",[51,29157,29123],{"class":61},[51,29159,29160],{"class":53,"line":237},[51,29161,206],{"emptyLinePlaceholder":205},[51,29163,29164,29166,29168,29170,29173],{"class":53,"line":242},[51,29165,26935],{"class":57},[51,29167,29114],{"class":61},[51,29169,29117],{"class":278},[51,29171,29172],{"class":61}," ros-jazzy-noble:latest",[51,29174,29123],{"class":61},[51,29176,29177],{"class":53,"line":257},[51,29178,206],{"emptyLinePlaceholder":205},[51,29180,29181,29183,29185,29187,29190],{"class":53,"line":262},[51,29182,26935],{"class":57},[51,29184,29114],{"class":61},[51,29186,29117],{"class":278},[51,29188,29189],{"class":61}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[51,29191,29123],{"class":61},[51,29193,29194],{"class":53,"line":285},[51,29195,206],{"emptyLinePlaceholder":205},[51,29197,29198,29200,29202,29204,29207],{"class":53,"line":296},[51,29199,26935],{"class":57},[51,29201,29114],{"class":61},[51,29203,29117],{"class":278},[51,29205,29206],{"class":61}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[51,29208,29123],{"class":61},[10,29210,29211],{},[460,29212],{"alt":46,"src":29213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[10,29215,29216],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[10,29218,29219],{},[460,29220],{"alt":46,"src":29221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[10,29223,29224],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[19,29226,29227],{},[22,29228,29229],{},"创建 Docker Hub 账户",[10,29231,29232],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[19,29234,29235],{"start":185},[22,29236,29237],{},"登录 Docker Hub",[10,29239,29240],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[41,29242,29244],{"className":43,"code":29243,"language":45,"meta":46,"style":46},"docker login\n",[48,29245,29246],{"__ignoreMap":46},[51,29247,29248,29250],{"class":53,"line":54},[51,29249,26935],{"class":57},[51,29251,29252],{"class":61}," login\n",[10,29254,29255],{},"输入你的 Docker Hub 用户名和密码进行验证。",[19,29257,29258],{},[22,29259,29260],{},"为你的镜像打标签",[10,29262,29263,29264,29267],{},"Docker Hub 使用 ",[48,29265,29266],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[41,29269,29271],{"className":43,"code":29270,"language":45,"meta":46,"style":46},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[48,29272,29273],{"__ignoreMap":46},[51,29274,29275,29277,29280,29282,29285,29288,29291,29293],{"class":53,"line":54},[51,29276,26935],{"class":57},[51,29278,29279],{"class":61}," tag",[51,29281,29172],{"class":61},[51,29283,29284],{"class":69}," \u003C",[51,29286,29287],{"class":61},"你的用户",[51,29289,29290],{"class":65},"名",[51,29292,1502],{"class":69},[51,29294,29295],{"class":61},"\u002Fros-jazzy-noble:latest\n",[10,29297,29298,29299,29302],{},"例如，如果你的 Docker Hub 用户名是 ",[48,29300,29301],{},"tungchiahui","，你应该执行：",[41,29304,29306],{"className":43,"code":29305,"language":45,"meta":46,"style":46},"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",[48,29307,29308,29319,29323,29334,29338,29349,29353,29364,29368],{"__ignoreMap":46},[51,29309,29310,29312,29314,29316],{"class":53,"line":54},[51,29311,26935],{"class":57},[51,29313,29279],{"class":61},[51,29315,29138],{"class":61},[51,29317,29318],{"class":61}," tungchiahui\u002Fros-noetic-focal:latest\n",[51,29320,29321],{"class":53,"line":185},[51,29322,206],{"emptyLinePlaceholder":205},[51,29324,29325,29327,29329,29331],{"class":53,"line":202},[51,29326,26935],{"class":57},[51,29328,29279],{"class":61},[51,29330,29155],{"class":61},[51,29332,29333],{"class":61}," tungchiahui\u002Fros-humble-jammy:latest\n",[51,29335,29336],{"class":53,"line":209},[51,29337,206],{"emptyLinePlaceholder":205},[51,29339,29340,29342,29344,29346],{"class":53,"line":223},[51,29341,26935],{"class":57},[51,29343,29279],{"class":61},[51,29345,29172],{"class":61},[51,29347,29348],{"class":61}," tungchiahui\u002Fros-jazzy-noble:latest\n",[51,29350,29351],{"class":53,"line":237},[51,29352,206],{"emptyLinePlaceholder":205},[51,29354,29355,29357,29359,29361],{"class":53,"line":242},[51,29356,26935],{"class":57},[51,29358,29279],{"class":61},[51,29360,29189],{"class":61},[51,29362,29363],{"class":61}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[51,29365,29366],{"class":53,"line":257},[51,29367,206],{"emptyLinePlaceholder":205},[51,29369,29370,29372,29374,29376],{"class":53,"line":262},[51,29371,26935],{"class":57},[51,29373,29279],{"class":61},[51,29375,29206],{"class":61},[51,29377,29378],{"class":61}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[19,29380,29381],{"start":185},[22,29382,29383],{},"推送镜像到 Docker Hub",[10,29385,29386],{},"使用以下命令将镜像推送到 Docker Hub：",[41,29388,29390],{"className":43,"code":29389,"language":45,"meta":46,"style":46},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[48,29391,29392],{"__ignoreMap":46},[51,29393,29394,29396,29399,29401,29403,29405,29407],{"class":53,"line":54},[51,29395,26935],{"class":57},[51,29397,29398],{"class":61}," push",[51,29400,29284],{"class":69},[51,29402,29287],{"class":61},[51,29404,29290],{"class":65},[51,29406,1502],{"class":69},[51,29408,29409],{"class":61},"\u002Fros-noetic-jazzy-noble:latest\n",[10,29411,15017],{},[41,29413,29415],{"className":43,"code":29414,"language":45,"meta":46,"style":46},"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",[48,29416,29417,29425,29429,29437,29441,29449,29453,29462,29466,29474,29478],{"__ignoreMap":46},[51,29418,29419,29421,29423],{"class":53,"line":54},[51,29420,26935],{"class":57},[51,29422,29398],{"class":61},[51,29424,29318],{"class":61},[51,29426,29427],{"class":53,"line":185},[51,29428,206],{"emptyLinePlaceholder":205},[51,29430,29431,29433,29435],{"class":53,"line":202},[51,29432,26935],{"class":57},[51,29434,29398],{"class":61},[51,29436,29333],{"class":61},[51,29438,29439],{"class":53,"line":209},[51,29440,206],{"emptyLinePlaceholder":205},[51,29442,29443,29445,29447],{"class":53,"line":223},[51,29444,26935],{"class":57},[51,29446,29398],{"class":61},[51,29448,29348],{"class":61},[51,29450,29451],{"class":53,"line":237},[51,29452,206],{"emptyLinePlaceholder":205},[51,29454,29455,29457,29459],{"class":53,"line":242},[51,29456,26935],{"class":57},[51,29458,29398],{"class":61},[51,29460,29461],{"class":61}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[51,29463,29464],{"class":53,"line":257},[51,29465,206],{"emptyLinePlaceholder":205},[51,29467,29468,29470,29472],{"class":53,"line":262},[51,29469,26935],{"class":57},[51,29471,29398],{"class":61},[51,29473,29378],{"class":61},[51,29475,29476],{"class":53,"line":285},[51,29477,206],{"emptyLinePlaceholder":205},[51,29479,29480,29482,29484],{"class":53,"line":296},[51,29481,26935],{"class":57},[51,29483,29398],{"class":61},[51,29485,29486],{"class":61}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[19,29488,29489],{"start":202},[22,29490,29491],{},"验证推送成功",[10,29493,29494],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[10,29496,29497],{},[691,29498,4170],{},[1549,29500,29501,29504],{},[22,29502,29503],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[22,29505,29506],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[10,29508,29509],{},[460,29510],{"alt":46,"src":29511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[10,29513,29514],{},[460,29515],{"alt":46,"src":29516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22381,29518,29520],{"id":29519},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[10,29522,29523,29524,29527,29528,29531],{},"如果您想在 ",[691,29525,29526],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[691,29529,29530],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[10,29533,29534,29535],{},"1. ",[691,29536,29537],{},"启用 Docker 跨平台构建",[10,29539,29540],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[10,29542,29543],{},"第一步：启用 buildx（只需执行一次）",[41,29545,29547],{"className":43,"code":29546,"language":45,"meta":46,"style":46},"docker buildx create --name multiarch_builder --use\n",[48,29548,29549],{"__ignoreMap":46},[51,29550,29551,29553,29556,29559,29562,29565],{"class":53,"line":54},[51,29552,26935],{"class":57},[51,29554,29555],{"class":61}," buildx",[51,29557,29558],{"class":61}," create",[51,29560,29561],{"class":278}," --name",[51,29563,29564],{"class":61}," multiarch_builder",[51,29566,29567],{"class":278}," --use\n",[10,29569,29570],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[10,29572,29573],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[41,29575,29577],{"className":43,"code":29576,"language":45,"meta":46,"style":46},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[48,29578,29579],{"__ignoreMap":46},[51,29580,29581,29583,29585,29587,29590,29593,29596,29599],{"class":53,"line":54},[51,29582,26935],{"class":57},[51,29584,27612],{"class":61},[51,29586,27615],{"class":278},[51,29588,29589],{"class":278}," --privileged",[51,29591,29592],{"class":61}," multiarch\u002Fqemu-user-static",[51,29594,29595],{"class":278}," --reset",[51,29597,29598],{"class":278}," -p",[51,29600,29601],{"class":61}," yes\n",[10,29603,29604],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[10,29606,29607],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[41,29609,29611],{"className":43,"code":29610,"language":45,"meta":46,"style":46},"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",[48,29612,29613,29655,29659,29664,29674,29684,29693,29699,29703,29707,29717,29725,29734,29740,29744,29748,29758,29766,29775,29781,29785,29789,29799,29807,29816,29822,29826,29830,29840,29848,29857,29863,29867,29871,29881,29889,29898,29904,29908,29912,29922,29930,29939,29945,29949,29953,29963,29971,29980,29986,29990,29994,30004,30012,30021,30027,30031,30035,30046,30054,30063,30069],{"__ignoreMap":46},[51,29614,29615,29617,29619,29621,29624,29627,29629,29631,29634,29636,29638,29640,29642,29645,29648,29650,29653],{"class":53,"line":54},[51,29616,26935],{"class":57},[51,29618,29555],{"class":61},[51,29620,29114],{"class":61},[51,29622,29623],{"class":278}," --platform",[51,29625,29626],{"class":61}," linux\u002Famd64,linux\u002Farm64",[51,29628,29117],{"class":278},[51,29630,29284],{"class":69},[51,29632,29633],{"class":61},"你的镜像",[51,29635,29290],{"class":65},[51,29637,1502],{"class":69},[51,29639,1401],{"class":61},[51,29641,1452],{"class":69},[51,29643,29644],{"class":61},"标",[51,29646,29647],{"class":65},"签",[51,29649,1502],{"class":69},[51,29651,29652],{"class":278}," --push",[51,29654,29123],{"class":61},[51,29656,29657],{"class":53,"line":185},[51,29658,206],{"emptyLinePlaceholder":205},[51,29660,29661],{"class":53,"line":202},[51,29662,29663],{"class":601},"# 例子：\n",[51,29665,29666,29668,29670,29672],{"class":53,"line":209},[51,29667,26935],{"class":57},[51,29669,29555],{"class":61},[51,29671,29114],{"class":61},[51,29673,25060],{"class":278},[51,29675,29676,29679,29682],{"class":53,"line":223},[51,29677,29678],{"class":65},"--platform ",[51,29680,29681],{"class":61},"linux\u002Famd64,linux\u002Farm64",[51,29683,25060],{"class":278},[51,29685,29686,29688,29691],{"class":53,"line":237},[51,29687,29117],{"class":278},[51,29689,29690],{"class":61}," tungchiahui\u002Fros:noetic-focal",[51,29692,25060],{"class":278},[51,29694,29695,29697],{"class":53,"line":242},[51,29696,29652],{"class":278},[51,29698,25060],{"class":278},[51,29700,29701],{"class":53,"line":257},[51,29702,29123],{"class":61},[51,29704,29705],{"class":53,"line":262},[51,29706,206],{"emptyLinePlaceholder":205},[51,29708,29709,29711,29713,29715],{"class":53,"line":285},[51,29710,26935],{"class":57},[51,29712,29555],{"class":61},[51,29714,29114],{"class":61},[51,29716,25060],{"class":278},[51,29718,29719,29721,29723],{"class":53,"line":296},[51,29720,29678],{"class":65},[51,29722,29681],{"class":61},[51,29724,25060],{"class":278},[51,29726,29727,29729,29732],{"class":53,"line":307},[51,29728,29117],{"class":278},[51,29730,29731],{"class":61}," tungchiahui\u002Fros:humble-jammy",[51,29733,25060],{"class":278},[51,29735,29736,29738],{"class":53,"line":324},[51,29737,29652],{"class":278},[51,29739,25060],{"class":278},[51,29741,29742],{"class":53,"line":329},[51,29743,29123],{"class":61},[51,29745,29746],{"class":53,"line":334},[51,29747,206],{"emptyLinePlaceholder":205},[51,29749,29750,29752,29754,29756],{"class":53,"line":340},[51,29751,26935],{"class":57},[51,29753,29555],{"class":61},[51,29755,29114],{"class":61},[51,29757,25060],{"class":278},[51,29759,29760,29762,29764],{"class":53,"line":345},[51,29761,29678],{"class":65},[51,29763,29681],{"class":61},[51,29765,25060],{"class":278},[51,29767,29768,29770,29773],{"class":53,"line":357},[51,29769,29117],{"class":278},[51,29771,29772],{"class":61}," tungchiahui\u002Fros:jazzy-noble",[51,29774,25060],{"class":278},[51,29776,29777,29779],{"class":53,"line":366},[51,29778,29652],{"class":278},[51,29780,25060],{"class":278},[51,29782,29783],{"class":53,"line":383},[51,29784,29123],{"class":61},[51,29786,29787],{"class":53,"line":392},[51,29788,206],{"emptyLinePlaceholder":205},[51,29790,29791,29793,29795,29797],{"class":53,"line":403},[51,29792,26702],{"class":57},[51,29794,29555],{"class":61},[51,29796,29114],{"class":61},[51,29798,25060],{"class":278},[51,29800,29801,29803,29805],{"class":53,"line":409},[51,29802,29678],{"class":65},[51,29804,29681],{"class":61},[51,29806,25060],{"class":278},[51,29808,29809,29811,29814],{"class":53,"line":414},[51,29810,29117],{"class":278},[51,29812,29813],{"class":61}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[51,29815,25060],{"class":278},[51,29817,29818,29820],{"class":53,"line":433},[51,29819,29652],{"class":278},[51,29821,25060],{"class":278},[51,29823,29824],{"class":53,"line":439},[51,29825,29123],{"class":61},[51,29827,29828],{"class":53,"line":444},[51,29829,206],{"emptyLinePlaceholder":205},[51,29831,29832,29834,29836,29838],{"class":53,"line":453},[51,29833,26935],{"class":57},[51,29835,29555],{"class":61},[51,29837,29114],{"class":61},[51,29839,25060],{"class":278},[51,29841,29842,29844,29846],{"class":53,"line":2174},[51,29843,29678],{"class":65},[51,29845,29681],{"class":61},[51,29847,25060],{"class":278},[51,29849,29850,29852,29855],{"class":53,"line":2965},[51,29851,29117],{"class":278},[51,29853,29854],{"class":61}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[51,29856,25060],{"class":278},[51,29858,29859,29861],{"class":53,"line":2979},[51,29860,29652],{"class":278},[51,29862,25060],{"class":278},[51,29864,29865],{"class":53,"line":2987},[51,29866,29123],{"class":61},[51,29868,29869],{"class":53,"line":2992},[51,29870,206],{"emptyLinePlaceholder":205},[51,29872,29873,29875,29877,29879],{"class":53,"line":2998},[51,29874,26702],{"class":57},[51,29876,29555],{"class":61},[51,29878,29114],{"class":61},[51,29880,25060],{"class":278},[51,29882,29883,29885,29887],{"class":53,"line":3004},[51,29884,29678],{"class":65},[51,29886,29681],{"class":61},[51,29888,25060],{"class":278},[51,29890,29891,29893,29896],{"class":53,"line":3009},[51,29892,29117],{"class":278},[51,29894,29895],{"class":61}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[51,29897,25060],{"class":278},[51,29899,29900,29902],{"class":53,"line":8332},[51,29901,29652],{"class":278},[51,29903,25060],{"class":278},[51,29905,29906],{"class":53,"line":8356},[51,29907,29123],{"class":61},[51,29909,29910],{"class":53,"line":8361},[51,29911,206],{"emptyLinePlaceholder":205},[51,29913,29914,29916,29918,29920],{"class":53,"line":8367},[51,29915,26935],{"class":57},[51,29917,29555],{"class":61},[51,29919,29114],{"class":61},[51,29921,25060],{"class":278},[51,29923,29924,29926,29928],{"class":53,"line":8394},[51,29925,29678],{"class":65},[51,29927,29681],{"class":61},[51,29929,25060],{"class":278},[51,29931,29932,29934,29937],{"class":53,"line":8399},[51,29933,29117],{"class":278},[51,29935,29936],{"class":61}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[51,29938,25060],{"class":278},[51,29940,29941,29943],{"class":53,"line":8405},[51,29942,29652],{"class":278},[51,29944,25060],{"class":278},[51,29946,29947],{"class":53,"line":8417},[51,29948,29123],{"class":61},[51,29950,29951],{"class":53,"line":8429},[51,29952,206],{"emptyLinePlaceholder":205},[51,29954,29955,29957,29959,29961],{"class":53,"line":8441},[51,29956,26935],{"class":57},[51,29958,29555],{"class":61},[51,29960,29114],{"class":61},[51,29962,25060],{"class":278},[51,29964,29965,29967,29969],{"class":53,"line":10100},[51,29966,29678],{"class":65},[51,29968,29681],{"class":61},[51,29970,25060],{"class":278},[51,29972,29973,29975,29978],{"class":53,"line":10125},[51,29974,29117],{"class":278},[51,29976,29977],{"class":61}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[51,29979,25060],{"class":278},[51,29981,29982,29984],{"class":53,"line":10148},[51,29983,29652],{"class":278},[51,29985,25060],{"class":278},[51,29987,29988],{"class":53,"line":10172},[51,29989,29123],{"class":61},[51,29991,29992],{"class":53,"line":10177},[51,29993,206],{"emptyLinePlaceholder":205},[51,29995,29996,29998,30000,30002],{"class":53,"line":10182},[51,29997,26702],{"class":57},[51,29999,29555],{"class":61},[51,30001,29114],{"class":61},[51,30003,25060],{"class":278},[51,30005,30006,30008,30010],{"class":53,"line":10187},[51,30007,29678],{"class":65},[51,30009,29681],{"class":61},[51,30011,25060],{"class":278},[51,30013,30014,30016,30019],{"class":53,"line":10196},[51,30015,29117],{"class":278},[51,30017,30018],{"class":61}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[51,30020,25060],{"class":278},[51,30022,30023,30025],{"class":53,"line":10201},[51,30024,29652],{"class":278},[51,30026,25060],{"class":278},[51,30028,30029],{"class":53,"line":10207},[51,30030,29123],{"class":61},[51,30032,30033],{"class":53,"line":10228},[51,30034,206],{"emptyLinePlaceholder":205},[51,30036,30037,30040,30042,30044],{"class":53,"line":10234},[51,30038,30039],{"class":57},"  docker",[51,30041,29555],{"class":61},[51,30043,29114],{"class":61},[51,30045,25060],{"class":278},[51,30047,30048,30050,30052],{"class":53,"line":10248},[51,30049,29678],{"class":65},[51,30051,29681],{"class":61},[51,30053,25060],{"class":278},[51,30055,30056,30058,30061],{"class":53,"line":10254},[51,30057,29117],{"class":278},[51,30059,30060],{"class":61}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[51,30062,25060],{"class":278},[51,30064,30065,30067],{"class":53,"line":10281},[51,30066,29652],{"class":278},[51,30068,25060],{"class":278},[51,30070,30071],{"class":53,"line":10290},[51,30072,29123],{"class":61},[10,30074,30075],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[10,30077,30078],{},[460,30079],{"alt":46,"src":30080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[10,30082,30083],{},[460,30084],{"alt":46,"src":30085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22381,30087,30089],{"id":30088},"_623清除构建缓存","6.2.3.清除构建缓存",[41,30091,30093],{"className":43,"code":30092,"language":45,"meta":46,"style":46},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[48,30094,30095,30100],{"__ignoreMap":46},[51,30096,30097],{"class":53,"line":54},[51,30098,30099],{"class":601},"# 清理BuildKit构建缓存\n",[51,30101,30102,30104,30107,30110],{"class":53,"line":185},[51,30103,26935],{"class":57},[51,30105,30106],{"class":61}," builder",[51,30108,30109],{"class":61}," prune",[51,30111,30112],{"class":278}," -f\n",[10,30114,30115],{},[460,30116],{"alt":46,"src":30117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[513,30119,30121],{"id":30120},"_63补充","6.3.补充",[22381,30123,30125],{"id":30124},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[10,30127,30128],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[10,30130,30131],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[10,30133,30134],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[41,30136,30138],{"className":43,"code":30137,"language":45,"meta":46,"style":46},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[48,30139,30140,30147],{"__ignoreMap":46},[51,30141,30142,30144],{"class":53,"line":54},[51,30143,27752],{"class":57},[51,30145,30146],{"class":61}," nginx\n",[51,30148,30149,30151,30154,30157,30159],{"class":53,"line":185},[51,30150,28937],{"class":57},[51,30152,30153],{"class":61}," echo",[51,30155,30156],{"class":61}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[51,30158,26604],{"class":69},[51,30160,30161],{"class":61}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[10,30163,30164],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[10,30166,30167],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[41,30169,30171],{"className":43,"code":30170,"language":45,"meta":46,"style":46},"docker build -t nginx:tuling .\n",[48,30172,30173],{"__ignoreMap":46},[51,30174,30175,30177,30179,30181,30184],{"class":53,"line":54},[51,30176,26935],{"class":57},[51,30178,29114],{"class":61},[51,30180,29117],{"class":278},[51,30182,30183],{"class":61}," nginx:tuling",[51,30185,29123],{"class":61},[10,30187,30188],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[10,30190,30191],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[41,30193,30195],{"className":43,"code":30194,"language":45,"meta":46,"style":46},"docker run -d -p 92:80 nginx:tuling\n",[48,30196,30197],{"__ignoreMap":46},[51,30198,30199,30201,30203,30206,30208,30211],{"class":53,"line":54},[51,30200,26935],{"class":57},[51,30202,27612],{"class":61},[51,30204,30205],{"class":278}," -d",[51,30207,29598],{"class":278},[51,30209,30210],{"class":61}," 92:80",[51,30212,30213],{"class":61}," nginx:tuling\n",[10,30215,30216,30217],{},"4、访问 ",[780,30218,30221],{"href":30219,"rel":30220},"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",[24246],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[10,30223,30224],{},[460,30225],{"alt":46,"src":30226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[10,30228,30229],{},[460,30230],{"alt":46,"src":30231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22381,30233,30235],{"id":30234},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[10,30237,30238],{},"只需要知道大体流程即可",[10,30240,30241],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[10,30243,30244],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[10,30246,30247],{},"2、在Dockerfile中添加以下内容",[41,30249,30251],{"className":26473,"code":30250,"language":26475,"meta":46,"style":46},"# 基于哪个镜像\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",[48,30252,30253,30258,30263,30268,30273,30278,30283,30288],{"__ignoreMap":46},[51,30254,30255],{"class":53,"line":54},[51,30256,30257],{},"# 基于哪个镜像\n",[51,30259,30260],{"class":53,"line":185},[51,30261,30262],{},"From java:8\n",[51,30264,30265],{"class":53,"line":202},[51,30266,30267],{},"# 复制文件到容器\n",[51,30269,30270],{"class":53,"line":209},[51,30271,30272],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[51,30274,30275],{"class":53,"line":223},[51,30276,30277],{},"# 声明需要暴露的端口\n",[51,30279,30280],{"class":53,"line":237},[51,30281,30282],{},"EXPOSE 8877\n",[51,30284,30285],{"class":53,"line":242},[51,30286,30287],{},"# 配置容器启动后执行的命令\n",[51,30289,30290],{"class":53,"line":257},[51,30291,30292],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[10,30294,30295],{},"3、使用docker build命令构建镜像",[41,30297,30299],{"className":43,"code":30298,"language":45,"meta":46,"style":46},"docker build -t tulingmall-member:0.0.5 .\n",[48,30300,30301],{"__ignoreMap":46},[51,30302,30303,30305,30307,30309,30312],{"class":53,"line":54},[51,30304,26935],{"class":57},[51,30306,29114],{"class":61},[51,30308,29117],{"class":278},[51,30310,30311],{"class":61}," tulingmall-member:0.0.5",[51,30313,29123],{"class":61},[10,30315,30316],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[10,30318,30319],{},[460,30320],{"alt":46,"src":30321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[10,30323,30324],{},"4、启动镜像，加-d可在后台启动",[41,30326,30328],{"className":43,"code":30327,"language":45,"meta":46,"style":46},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[48,30329,30330],{"__ignoreMap":46},[51,30331,30332,30334,30336,30338,30340,30343],{"class":53,"line":54},[51,30333,26935],{"class":57},[51,30335,27612],{"class":61},[51,30337,30205],{"class":278},[51,30339,29598],{"class":278},[51,30341,30342],{"class":61}," 8877:8877",[51,30344,30345],{"class":61}," tulingmall-member:0.0.5\n",[10,30347,30348],{},"加上JVM参数：",[41,30350,30352],{"className":43,"code":30351,"language":45,"meta":46,"style":46},"# --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",[48,30353,30354,30359,30374,30384,30393,30400],{"__ignoreMap":46},[51,30355,30356],{"class":53,"line":54},[51,30357,30358],{"class":601},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[51,30360,30361,30363,30365,30368,30370,30372],{"class":53,"line":185},[51,30362,26935],{"class":57},[51,30364,27612],{"class":61},[51,30366,30367],{"class":278},"  -d",[51,30369,29598],{"class":278},[51,30371,30342],{"class":61},[51,30373,25060],{"class":278},[51,30375,30376,30378,30381],{"class":53,"line":202},[51,30377,28510],{"class":65},[51,30379,30380],{"class":61},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[51,30382,30383],{"class":278},"  \\\n",[51,30385,30386,30388,30391],{"class":53,"line":209},[51,30387,28510],{"class":65},[51,30389,30390],{"class":61},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[51,30392,30383],{"class":278},[51,30394,30395,30398],{"class":53,"line":223},[51,30396,30397],{"class":65},"--cap-add=SYS_PTRACE  ",[51,30399,26557],{"class":278},[51,30401,30402],{"class":53,"line":237},[51,30403,30404],{"class":65},"tulingmall-member:0.0.5\n",[10,30406,30407],{},"5、访问会员服务接口",[10,30409,30410],{},[460,30411],{"alt":46,"src":30412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22381,30414,30416],{"id":30415},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[10,30418,30419],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[10,30421,30422,30423],{},"阿里云docker镜像仓库：",[780,30424,30425],{"href":30425,"rel":30426},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24246],[10,30428,30429],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[10,30431,30432],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[10,30434,30435],{},[460,30436],{"alt":46,"src":30437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[10,30439,30440],{},"要把镜像推送到镜像仓库",[41,30442,30444],{"className":43,"code":30443,"language":45,"meta":46,"style":46},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[48,30445,30446],{"__ignoreMap":46},[51,30447,30448,30450,30452,30454],{"class":53,"line":54},[51,30449,26935],{"class":57},[51,30451,29279],{"class":61},[51,30453,30311],{"class":61},[51,30455,30456],{"class":61}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[10,30458,30459],{},"最后将镜像推送到远程仓库",[41,30461,30463],{"className":43,"code":30462,"language":45,"meta":46,"style":46},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[48,30464,30465],{"__ignoreMap":46},[51,30466,30467,30469,30471],{"class":53,"line":54},[51,30468,26935],{"class":57},[51,30470,29398],{"class":61},[51,30472,30456],{"class":61},[464,30474,30475],{},"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":46,"searchDepth":185,"depth":185,"links":30477},[30478,30479,30480],{"id":28865,"depth":202,"text":28866},{"id":29094,"depth":202,"text":29095},{"id":30120,"depth":202,"text":30121},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28857,"description":46},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30487,"title":30488,"body":30489,"description":46,"extension":469,"meta":30632,"navigation":205,"path":30633,"seo":30634,"stem":30635,"__hash__":30636},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30490,"toc":30630},[30491,30494,30499,30504,30507,30512,30517,30520,30525,30530,30533,30538,30541,30544,30547,30550,30553,30556,30576,30598,30601,30604,30624,30627],[14,30492,30488],{"id":30493},"_7vscode远程开发",[19,30495,30496],{},[22,30497,30498],{},"插件1：微软Docker工具",[10,30500,30501],{},[460,30502],{"alt":46,"src":30503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[10,30505,30506],{},"docker扩展插件已经进化为container tools了，请安装container tools",[10,30508,30509],{},[460,30510],{"alt":46,"src":30511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[19,30513,30514],{"start":185},[22,30515,30516],{},"插件2：微软Docker远程开发工具",[10,30518,30519],{},"下面这是远程开发的插件。",[10,30521,30522],{},[460,30523],{"alt":46,"src":30524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[10,30526,30527],{},[460,30528],{"alt":46,"src":30529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[10,30531,30532],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[10,30534,30535],{},[460,30536],{"alt":46,"src":30537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[10,30539,30540],{},"安装完拓展之后，vscode进行链接：",[10,30542,30543],{},"1.按ctrl+shift+p",[10,30545,30546],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[10,30548,30549],{},"3.选择目前运行的容器",[10,30551,30552],{},"4.VS Code 会在新窗口中打开并连接到容器",[10,30554,30555],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[41,30557,30559],{"className":43,"code":30558,"language":45,"meta":46,"style":46},"docker run -v 主机目录:容器目录 image-name\n",[48,30560,30561],{"__ignoreMap":46},[51,30562,30563,30565,30567,30570,30573],{"class":53,"line":54},[51,30564,26935],{"class":57},[51,30566,27612],{"class":61},[51,30568,30569],{"class":278}," -v",[51,30571,30572],{"class":61}," 主机目录:容器目录",[51,30574,30575],{"class":61}," image-name\n",[41,30577,30579],{"className":43,"code":30578,"language":45,"meta":46,"style":46},"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",[48,30580,30581],{"__ignoreMap":46},[51,30582,30583,30585,30587,30590,30592,30595],{"class":53,"line":54},[51,30584,26935],{"class":57},[51,30586,27612],{"class":61},[51,30588,30589],{"class":278}," -it",[51,30591,30569],{"class":278},[51,30593,30594],{"class":61}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[51,30596,30597],{"class":61}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[10,30599,30600],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[10,30602,30603],{},"查看挂载情况：",[41,30605,30607],{"className":43,"code":30606,"language":45,"meta":46,"style":46},"mount | grep -i project\n",[48,30608,30609],{"__ignoreMap":46},[51,30610,30611,30614,30616,30619,30621],{"class":53,"line":54},[51,30612,30613],{"class":57},"mount",[51,30615,25491],{"class":69},[51,30617,30618],{"class":57}," grep",[51,30620,26812],{"class":278},[51,30622,30623],{"class":61}," project\n",[10,30625,30626],{},"也可以通过ls来进行查看",[464,30628,30629],{},"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":46,"searchDepth":185,"depth":185,"links":30631},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30488,"description":46},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30638,"title":30639,"body":30640,"description":23760,"extension":469,"meta":30644,"navigation":205,"path":30646,"seo":30647,"stem":30648,"__hash__":30649},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30641,"toc":30642},[],{"title":46,"searchDepth":185,"depth":185,"links":30643},[],{"category":30645},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30639,"description":23760},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30651,"title":30652,"body":30653,"description":23760,"extension":469,"meta":30657,"navigation":205,"path":30658,"seo":30659,"stem":30660,"__hash__":30661},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30654,"toc":30655},[],{"title":46,"searchDepth":185,"depth":185,"links":30656},[],{"category":30645},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30652,"description":23760},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30663,"title":30664,"body":30665,"description":23760,"extension":469,"meta":30955,"navigation":205,"path":30956,"seo":30957,"stem":30958,"__hash__":30959},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30666,"toc":30953},[30667,30670,30678,30693,30698,30749,30752,30758,30942,30947,30950],[14,30668,30664],{"id":30669},"_1验证深度学习环境",[10,30671,30672,30673],{},"关于环境的安装，看",[780,30674,30677],{"href":30675,"rel":30676},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24246],"Pytorch-->深度学习",[10,30679,30680,30681,30684,30685,30688,30689,30692],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[48,30682,30683],{},"pytorch-cuda=12.4"," 是一个“ ",[691,30686,30687],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[691,30690,30691],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[10,30694,30695],{},[460,30696],{"alt":46,"src":30697},"\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",[41,30699,30701],{"className":43,"code":30700,"language":45,"meta":46,"style":46},"# 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",[48,30702,30703,30708],{"__ignoreMap":46},[51,30704,30705],{"class":53,"line":54},[51,30706,30707],{"class":601},"# CUDA 12.4\n",[51,30709,30710,30713,30715,30718,30721,30724,30727,30730,30732,30735,30738,30741,30744,30746],{"class":53,"line":185},[51,30711,30712],{"class":57},"conda",[51,30714,24215],{"class":61},[51,30716,30717],{"class":61}," pytorch==",[51,30719,30720],{"class":278},"2.5.1",[51,30722,30723],{"class":61}," torchvision==",[51,30725,30726],{"class":278},"0.20.1",[51,30728,30729],{"class":61}," torchaudio==",[51,30731,30720],{"class":278},[51,30733,30734],{"class":61}," pytorch-cuda=",[51,30736,30737],{"class":278},"12.4",[51,30739,30740],{"class":278}," -c",[51,30742,30743],{"class":61}," pytorch",[51,30745,30740],{"class":278},[51,30747,30748],{"class":61}," nvidia\n",[10,30750,30751],{},"）：",[10,30753,30754],{},[780,30755,30756],{"href":30756,"rel":30757},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24246],[41,30759,30761],{"className":170,"code":30760,"language":172,"meta":46,"style":46},"# 对深度学习环境进行测试\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",[48,30762,30763,30768,30775,30780,30790,30806,30811,30821,30858,30865,30877,30893,30898,30908,30920,30930],{"__ignoreMap":46},[51,30764,30765],{"class":53,"line":54},[51,30766,30767],{"class":601},"# 对深度学习环境进行测试\n",[51,30769,30770,30772],{"class":53,"line":185},[51,30771,179],{"class":69},[51,30773,30774],{"class":65}," torch\n",[51,30776,30777],{"class":53,"line":202},[51,30778,30779],{"class":601},"# 查看cuda是否被激活\n",[51,30781,30782,30785,30787],{"class":53,"line":209},[51,30783,30784],{"class":65},"flag",[51,30786,70],{"class":69},[51,30788,30789],{"class":65},"torch.cuda.is_available()\n",[51,30791,30792,30795,30797,30800,30803],{"class":53,"line":223},[51,30793,30794],{"class":278},"print",[51,30796,546],{"class":65},[51,30798,30799],{"class":61},"\"cuda:\"",[51,30801,30802],{"class":65},", flag)   ",[51,30804,30805],{"class":601},"#返回true的话说明被激活\n",[51,30807,30808],{"class":53,"line":237},[51,30809,30810],{"class":601},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[51,30812,30813,30816,30818],{"class":53,"line":242},[51,30814,30815],{"class":65},"ngpu",[51,30817,70],{"class":69},[51,30819,30820],{"class":278},"1\n",[51,30822,30823,30826,30828,30831,30834,30836,30839,30842,30845,30847,30849,30851,30853,30856],{"class":53,"line":257},[51,30824,30825],{"class":65},"device",[51,30827,70],{"class":69},[51,30829,30830],{"class":65},"torch.device(",[51,30832,30833],{"class":61},"\"cuda:0\"",[51,30835,2102],{"class":69},[51,30837,30838],{"class":65},"(torch.cuda.is_available() ",[51,30840,30841],{"class":69},"and",[51,30843,30844],{"class":65}," ngpu",[51,30846,1502],{"class":69},[51,30848,733],{"class":278},[51,30850,14098],{"class":65},[51,30852,2099],{"class":69},[51,30854,30855],{"class":61}," \"cpu\"",[51,30857,282],{"class":65},[51,30859,30860,30862],{"class":53,"line":262},[51,30861,30794],{"class":278},[51,30863,30864],{"class":65},"(device)\n",[51,30866,30867,30869,30872,30874],{"class":53,"line":285},[51,30868,30794],{"class":278},[51,30870,30871],{"class":65},"(torch.cuda.get_device_name(",[51,30873,733],{"class":278},[51,30875,30876],{"class":65},"))\n",[51,30878,30879,30881,30884,30886,30888,30890],{"class":53,"line":296},[51,30880,30794],{"class":278},[51,30882,30883],{"class":65},"(torch.rand(",[51,30885,614],{"class":278},[51,30887,920],{"class":65},[51,30889,614],{"class":278},[51,30891,30892],{"class":65},").cuda())\n",[51,30894,30895],{"class":53,"line":307},[51,30896,30897],{"class":601},"# 查看cuda和cudnn的版本\n",[51,30899,30900,30903,30905],{"class":53,"line":324},[51,30901,30902],{"class":65},"cuda_version",[51,30904,70],{"class":69},[51,30906,30907],{"class":65},"torch.version.cuda\n",[51,30909,30910,30912,30914,30917],{"class":53,"line":329},[51,30911,30794],{"class":278},[51,30913,546],{"class":65},[51,30915,30916],{"class":61},"\"cuda version\"",[51,30918,30919],{"class":65},",cuda_version)\n",[51,30921,30922,30925,30927],{"class":53,"line":334},[51,30923,30924],{"class":65},"cudnn_version",[51,30926,70],{"class":69},[51,30928,30929],{"class":65},"torch.backends.cudnn.version()\n",[51,30931,30932,30934,30936,30939],{"class":53,"line":340},[51,30933,30794],{"class":278},[51,30935,546],{"class":65},[51,30937,30938],{"class":61},"\"cudnn version\"",[51,30940,30941],{"class":65},",cudnn_version)\n",[10,30943,30944],{},[460,30945],{"alt":46,"src":30946},"\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",[10,30948,30949],{},"cuda:0 指的是一块显卡",[464,30951,30952],{},"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":46,"searchDepth":185,"depth":185,"links":30954},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30664,"description":23760},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30961,"title":30962,"body":30963,"description":23760,"extension":469,"meta":50760,"navigation":205,"path":50761,"seo":50762,"stem":50763,"__hash__":50764},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30964,"toc":50754},[30965,30968,30972,30976,30979,30984,30989,30992,30997,31002,31007,31010,31014,31019,31023,31028,31031,31036,31039,31042,31045,31048,31053,31056,31061,31066,31071,31076,31079,31083,31086,31091,31694,31699,31702,31707,31710,31713,32175,32178,32181,32184,32187,34237,34240,34245,34250,35045,35048,35053,35831,35835,37494,37498,38212,38216,38220,38225,38230,38235,38238,38243,38248,38253,38258,38263,38267,38272,39553,39558,39561,39564,39567,39722,39725,39728,40944,40949,41644,41648,41652,41657,41662,41665,41670,41675,41680,41685,41690,41695,41700,41705,41710,41715,41720,41725,41730,41735,41740,41745,41750,41755,41760,41765,41770,41775,41780,41785,41790,41795,41800,41805,41810,41815,41819,41823,41826,43304,43308,44955,44959,45653,45657,45660,45663,46205,46208,46212,46215,47612,47616,47619,48197,49984,49988,49991,50751],[14,30966,30962],{"id":30967},"_2经典神经网络",[513,30969,30971],{"id":30970},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22381,30973,30975],{"id":30974},"_211原理介绍","2.1.1.原理介绍",[10,30977,30978],{},"LeNet-5",[19,30980,30981],{},[22,30982,30983],{},"原理",[10,30985,30986],{},[460,30987],{"alt":46,"src":30988},"\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",[10,30990,30991],{},"B是batch批次；C是channel通道",[19,30993,30994],{"start":185},[22,30995,30996],{},"网络参数详细",[10,30998,30999],{},[460,31000],{"alt":46,"src":31001},"\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",[10,31003,31004],{},[460,31005],{"alt":46,"src":31006},"\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",[10,31008,31009],{},"AlexNet",[19,31011,31012],{},[22,31013,30983],{},[10,31015,31016],{},[460,31017],{"alt":46,"src":31018},"\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",[19,31020,31021],{"start":185},[22,31022,30996],{},[10,31024,31025],{},[460,31026],{"alt":46,"src":31027},"\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",[10,31029,31030],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[10,31032,31033],{},[460,31034],{"alt":46,"src":31035},"\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",[10,31037,31038],{},"数据处理中的图像增强操作:",[10,31040,31041],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[10,31043,31044],{},"①增加数据量，保证训练数据充足；②防止过拟合",[10,31046,31047],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[10,31049,31050],{},[460,31051],{"alt":46,"src":31052},"\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",[10,31054,31055],{},"提升网络精确度的方法：LRN正则化",[10,31057,31058],{},[460,31059],{"alt":46,"src":31060},"\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",[10,31062,31063],{},[460,31064],{"alt":46,"src":31065},"\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",[19,31067,31068],{"start":202},[22,31069,31070],{},"AlexNet的总结",[10,31072,31073],{},[460,31074],{"alt":46,"src":31075},"\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",[10,31077,31078],{},"比LeNet模型要深一丢丢",[22381,31080,31082],{"id":31081},"_212代码实现","2.1.2.代码实现",[10,31084,31085],{},"（1）LeNet",[19,31087,31088],{},[22,31089,31090],{},"模型搭建",[41,31092,31094],{"className":170,"code":31093,"language":172,"meta":46,"style":46},"# 导入库\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",[48,31095,31096,31101,31107,31112,31124,31129,31141,31145,31165,31170,31175,31186,31191,31210,31214,31219,31268,31280,31285,31314,31349,31376,31381,31393,31398,31418,31437,31456,31460,31465,31475,31492,31503,31518,31529,31540,31555,31570,31581,31588,31592,31606,31611,31634,31639,31644,31649,31653,31658,31663,31673],{"__ignoreMap":46},[51,31097,31098],{"class":53,"line":54},[51,31099,31100],{"class":601},"# 导入库\n",[51,31102,31103,31105],{"class":53,"line":185},[51,31104,179],{"class":69},[51,31106,30774],{"class":65},[51,31108,31109],{"class":53,"line":202},[51,31110,31111],{"class":601},"# 导入神经网络层\n",[51,31113,31114,31116,31119,31121],{"class":53,"line":209},[51,31115,226],{"class":69},[51,31117,31118],{"class":65}," torch ",[51,31120,179],{"class":69},[51,31122,31123],{"class":65}," nn\n",[51,31125,31126],{"class":53,"line":223},[51,31127,31128],{"class":601},"# 导入展示神经网络参数的包\n",[51,31130,31131,31133,31136,31138],{"class":53,"line":237},[51,31132,226],{"class":69},[51,31134,31135],{"class":65}," torchsummary ",[51,31137,179],{"class":69},[51,31139,31140],{"class":65}," summary\n",[51,31142,31143],{"class":53,"line":242},[51,31144,206],{"emptyLinePlaceholder":205},[51,31146,31147,31149,31152,31154,31157,31159,31162],{"class":53,"line":257},[51,31148,15078],{"class":69},[51,31150,31151],{"class":57}," LeNet",[51,31153,546],{"class":65},[51,31155,31156],{"class":57},"nn",[51,31158,1100],{"class":65},[51,31160,31161],{"class":57},"Module",[51,31163,31164],{"class":65},"):\n",[51,31166,31167],{"class":53,"line":262},[51,31168,31169],{"class":601},"    # 模型初始化:\n",[51,31171,31172],{"class":53,"line":285},[51,31173,31174],{"class":601},"    # 定义一些网络层和激活函数\n",[51,31176,31177,31180,31183],{"class":53,"line":296},[51,31178,31179],{"class":69},"    def",[51,31181,31182],{"class":278}," __init__",[51,31184,31185],{"class":65},"(self):\n",[51,31187,31188],{"class":53,"line":307},[51,31189,31190],{"class":601},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[51,31192,31193,31196,31199,31202,31205,31208],{"class":53,"line":324},[51,31194,31195],{"class":278},"        super",[51,31197,31198],{"class":65},"(LeNet,",[51,31200,31201],{"class":278},"self",[51,31203,31204],{"class":65},").",[51,31206,31207],{"class":278},"__init__",[51,31209,2366],{"class":65},[51,31211,31212],{"class":53,"line":329},[51,31213,206],{"emptyLinePlaceholder":205},[51,31215,31216],{"class":53,"line":334},[51,31217,31218],{"class":601},"        # 定义网络层\n",[51,31220,31221,31224,31227,31229,31232,31235,31237,31239,31241,31244,31246,31248,31250,31253,31255,31257,31259,31262,31264,31266],{"class":53,"line":340},[51,31222,31223],{"class":278},"        self",[51,31225,31226],{"class":65},".c1",[51,31228,70],{"class":69},[51,31230,31231],{"class":65},"nn.Conv2d(",[51,31233,31234],{"class":248},"in_channels",[51,31236,70],{"class":69},[51,31238,759],{"class":278},[51,31240,920],{"class":65},[51,31242,31243],{"class":248},"out_channels",[51,31245,70],{"class":69},[51,31247,886],{"class":278},[51,31249,920],{"class":65},[51,31251,31252],{"class":248},"kernel_size",[51,31254,70],{"class":69},[51,31256,861],{"class":278},[51,31258,920],{"class":65},[51,31260,31261],{"class":248},"padding",[51,31263,70],{"class":69},[51,31265,620],{"class":278},[51,31267,282],{"class":65},[51,31269,31270,31272,31275,31277],{"class":53,"line":345},[51,31271,31223],{"class":278},[51,31273,31274],{"class":65},".sig",[51,31276,70],{"class":69},[51,31278,31279],{"class":65},"nn.Sigmoid()\n",[51,31281,31282],{"class":53,"line":357},[51,31283,31284],{"class":601},"        # 定义池化\n",[51,31286,31287,31289,31292,31294,31297,31299,31301,31303,31305,31308,31310,31312],{"class":53,"line":366},[51,31288,31223],{"class":278},[51,31290,31291],{"class":65},".s2",[51,31293,70],{"class":69},[51,31295,31296],{"class":65},"nn.AvgPool2d(",[51,31298,31252],{"class":248},[51,31300,70],{"class":69},[51,31302,620],{"class":278},[51,31304,920],{"class":65},[51,31306,31307],{"class":248},"stride",[51,31309,70],{"class":69},[51,31311,620],{"class":278},[51,31313,282],{"class":65},[51,31315,31316,31318,31321,31323,31325,31327,31329,31331,31333,31335,31337,31339,31341,31343,31345,31347],{"class":53,"line":383},[51,31317,31223],{"class":278},[51,31319,31320],{"class":65},".c3",[51,31322,70],{"class":69},[51,31324,31231],{"class":65},[51,31326,31234],{"class":248},[51,31328,70],{"class":69},[51,31330,886],{"class":278},[51,31332,920],{"class":65},[51,31334,31243],{"class":248},[51,31336,70],{"class":69},[51,31338,1143],{"class":278},[51,31340,920],{"class":65},[51,31342,31252],{"class":248},[51,31344,70],{"class":69},[51,31346,861],{"class":278},[51,31348,282],{"class":65},[51,31350,31351,31353,31356,31358,31360,31362,31364,31366,31368,31370,31372,31374],{"class":53,"line":392},[51,31352,31223],{"class":278},[51,31354,31355],{"class":65},".s4",[51,31357,70],{"class":69},[51,31359,31296],{"class":65},[51,31361,31252],{"class":248},[51,31363,70],{"class":69},[51,31365,620],{"class":278},[51,31367,920],{"class":65},[51,31369,31307],{"class":248},[51,31371,70],{"class":69},[51,31373,620],{"class":278},[51,31375,282],{"class":65},[51,31377,31378],{"class":53,"line":403},[51,31379,31380],{"class":601},"        # 定义平展层\n",[51,31382,31383,31385,31388,31390],{"class":53,"line":409},[51,31384,31223],{"class":278},[51,31386,31387],{"class":65},".flatten",[51,31389,70],{"class":69},[51,31391,31392],{"class":65},"nn.Flatten()\n",[51,31394,31395],{"class":53,"line":414},[51,31396,31397],{"class":601},"        # 定义全连接层\n",[51,31399,31400,31402,31405,31407,31410,31412,31414,31416],{"class":53,"line":433},[51,31401,31223],{"class":278},[51,31403,31404],{"class":65},".f5",[51,31406,70],{"class":69},[51,31408,31409],{"class":65},"nn.Linear(",[51,31411,4373],{"class":278},[51,31413,920],{"class":65},[51,31415,1359],{"class":278},[51,31417,282],{"class":65},[51,31419,31420,31422,31425,31427,31429,31431,31433,31435],{"class":53,"line":439},[51,31421,31223],{"class":278},[51,31423,31424],{"class":65},".f6",[51,31426,70],{"class":69},[51,31428,31409],{"class":65},[51,31430,1359],{"class":278},[51,31432,920],{"class":65},[51,31434,1253],{"class":278},[51,31436,282],{"class":65},[51,31438,31439,31441,31444,31446,31448,31450,31452,31454],{"class":53,"line":444},[51,31440,31223],{"class":278},[51,31442,31443],{"class":65},".f7",[51,31445,70],{"class":69},[51,31447,31409],{"class":65},[51,31449,1253],{"class":278},[51,31451,920],{"class":65},[51,31453,988],{"class":278},[51,31455,282],{"class":65},[51,31457,31458],{"class":53,"line":453},[51,31459,206],{"emptyLinePlaceholder":205},[51,31461,31462],{"class":53,"line":2174},[51,31463,31464],{"class":601},"    # 写工具->写前向传播\n",[51,31466,31467,31469,31472],{"class":53,"line":2965},[51,31468,31179],{"class":69},[51,31470,31471],{"class":57}," forward",[51,31473,31474],{"class":65},"(self,x):\n",[51,31476,31477,31480,31482,31484,31487,31489],{"class":53,"line":2979},[51,31478,31479],{"class":65},"        x",[51,31481,70],{"class":69},[51,31483,31201],{"class":278},[51,31485,31486],{"class":65},".sig(",[51,31488,31201],{"class":278},[51,31490,31491],{"class":65},".c1(x))\n",[51,31493,31494,31496,31498,31500],{"class":53,"line":2987},[51,31495,31479],{"class":65},[51,31497,70],{"class":69},[51,31499,31201],{"class":278},[51,31501,31502],{"class":65},".s2(x)\n",[51,31504,31505,31507,31509,31511,31513,31515],{"class":53,"line":2992},[51,31506,31479],{"class":65},[51,31508,70],{"class":69},[51,31510,31201],{"class":278},[51,31512,31486],{"class":65},[51,31514,31201],{"class":278},[51,31516,31517],{"class":65},".c3(x))\n",[51,31519,31520,31522,31524,31526],{"class":53,"line":2998},[51,31521,31479],{"class":65},[51,31523,70],{"class":69},[51,31525,31201],{"class":278},[51,31527,31528],{"class":65},".s4(x)\n",[51,31530,31531,31533,31535,31537],{"class":53,"line":3004},[51,31532,31479],{"class":65},[51,31534,70],{"class":69},[51,31536,31201],{"class":278},[51,31538,31539],{"class":65},".flatten(x)\n",[51,31541,31542,31544,31546,31548,31550,31552],{"class":53,"line":3009},[51,31543,31479],{"class":65},[51,31545,70],{"class":69},[51,31547,31201],{"class":278},[51,31549,31486],{"class":65},[51,31551,31201],{"class":278},[51,31553,31554],{"class":65},".f5(x))\n",[51,31556,31557,31559,31561,31563,31565,31567],{"class":53,"line":8332},[51,31558,31479],{"class":65},[51,31560,70],{"class":69},[51,31562,31201],{"class":278},[51,31564,31486],{"class":65},[51,31566,31201],{"class":278},[51,31568,31569],{"class":65},".f6(x))\n",[51,31571,31572,31574,31576,31578],{"class":53,"line":8356},[51,31573,31479],{"class":65},[51,31575,70],{"class":69},[51,31577,31201],{"class":278},[51,31579,31580],{"class":65},".f7(x)\n",[51,31582,31583,31585],{"class":53,"line":8361},[51,31584,15136],{"class":69},[51,31586,31587],{"class":65}," x\n",[51,31589,31590],{"class":53,"line":8367},[51,31591,206],{"emptyLinePlaceholder":205},[51,31593,31594,31596,31599,31601,31604],{"class":53,"line":8394},[51,31595,1940],{"class":69},[51,31597,31598],{"class":278}," __name__",[51,31600,375],{"class":69},[51,31602,31603],{"class":61},"\"__main__\"",[51,31605,363],{"class":65},[51,31607,31608],{"class":53,"line":8399},[51,31609,31610],{"class":601},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[51,31612,31613,31616,31618,31620,31623,31625,31628,31630,31632],{"class":53,"line":8405},[51,31614,31615],{"class":65},"    device",[51,31617,70],{"class":69},[51,31619,30830],{"class":65},[51,31621,31622],{"class":61},"\"cuda\"",[51,31624,2102],{"class":69},[51,31626,31627],{"class":65}," torch.cuda.is_available() ",[51,31629,2099],{"class":69},[51,31631,30855],{"class":61},[51,31633,282],{"class":65},[51,31635,31636],{"class":53,"line":8417},[51,31637,31638],{"class":601},"    # 如果就是想指定用cpu用下方代码:\n",[51,31640,31641],{"class":53,"line":8429},[51,31642,31643],{"class":601},"    # device=\"cpu\"\n",[51,31645,31646],{"class":53,"line":8441},[51,31647,31648],{"class":601},"    # print(device)\n",[51,31650,31651],{"class":53,"line":10100},[51,31652,206],{"emptyLinePlaceholder":205},[51,31654,31655],{"class":53,"line":10125},[51,31656,31657],{"class":601},"    # 实例化模型\n",[51,31659,31660],{"class":53,"line":10148},[51,31661,31662],{"class":601},"    # 将模型放到设备中去运行\n",[51,31664,31665,31668,31670],{"class":53,"line":10172},[51,31666,31667],{"class":65},"    model",[51,31669,70],{"class":69},[51,31671,31672],{"class":65},"LeNet().to(device)\n",[51,31674,31675,31678,31681,31683,31685,31687,31689,31691],{"class":53,"line":10177},[51,31676,31677],{"class":278},"    print",[51,31679,31680],{"class":65},"(summary(model,(",[51,31682,759],{"class":278},[51,31684,920],{"class":65},[51,31686,1443],{"class":278},[51,31688,920],{"class":65},[51,31690,1443],{"class":278},[51,31692,31693],{"class":65},")))\n",[10,31695,31696],{},[460,31697],{"alt":46,"src":31698},"\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",[10,31700,31701],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[19,31703,31704],{"start":185},[22,31705,31706],{},"训练",[10,31708,31709],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[10,31711,31712],{},"在训练之前可以将数据展示看一下",[41,31714,31716],{"className":170,"code":31715,"language":172,"meta":46,"style":46},"# 建立画图的函数，用于展示数据\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",[48,31717,31718,31723,31728,31740,31752,31764,31769,31781,31786,31798,31803,31815,31819,31823,31844,31855,31860,31881,31892,31896,31901,31919,31930,31935,31946,31951,31962,31966,31971,31986,31999,32004,32009,32022,32035,32048,32053,32057,32062,32082,32099,32119,32132,32145,32155,32170],{"__ignoreMap":46},[51,31719,31720],{"class":53,"line":54},[51,31721,31722],{"class":601},"# 建立画图的函数，用于展示数据\n",[51,31724,31725],{"class":53,"line":185},[51,31726,31727],{"class":601},"# torchvision中包含很多内置的数据集\n",[51,31729,31730,31732,31735,31737],{"class":53,"line":202},[51,31731,226],{"class":69},[51,31733,31734],{"class":65}," sklearn.externals.array_api_compat.torch ",[51,31736,179],{"class":69},[51,31738,31739],{"class":65}," squeeze\n",[51,31741,31742,31744,31747,31749],{"class":53,"line":209},[51,31743,226],{"class":69},[51,31745,31746],{"class":65}," torchvision.datasets ",[51,31748,179],{"class":69},[51,31750,31751],{"class":65}," FashionMNIST\n",[51,31753,31754,31756,31759,31761],{"class":53,"line":223},[51,31755,179],{"class":69},[51,31757,31758],{"class":65}," numpy ",[51,31760,217],{"class":69},[51,31762,31763],{"class":65}," np\n",[51,31765,31766],{"class":53,"line":237},[51,31767,31768],{"class":601},"# 引入处理数据集的包\n",[51,31770,31771,31773,31776,31778],{"class":53,"line":242},[51,31772,226],{"class":69},[51,31774,31775],{"class":65}," torchvision ",[51,31777,179],{"class":69},[51,31779,31780],{"class":65}," transforms\n",[51,31782,31783],{"class":53,"line":257},[51,31784,31785],{"class":601},"# 从torch库中引入数据处理的包\n",[51,31787,31788,31790,31793,31795],{"class":53,"line":262},[51,31789,179],{"class":69},[51,31791,31792],{"class":65}," torch.utils.data ",[51,31794,217],{"class":69},[51,31796,31797],{"class":65}," Data\n",[51,31799,31800],{"class":53,"line":285},[51,31801,31802],{"class":601},"# 导入画图的库\n",[51,31804,31805,31807,31810,31812],{"class":53,"line":296},[51,31806,179],{"class":69},[51,31808,31809],{"class":65}," matplotlib.pyplot ",[51,31811,217],{"class":69},[51,31813,31814],{"class":65}," plt\n",[51,31816,31817],{"class":53,"line":307},[51,31818,206],{"emptyLinePlaceholder":205},[51,31820,31821],{"class":53,"line":324},[51,31822,206],{"emptyLinePlaceholder":205},[51,31824,31825,31828,31830,31833,31836,31838,31841],{"class":53,"line":329},[51,31826,31827],{"class":65},"train_data",[51,31829,70],{"class":69},[51,31831,31832],{"class":65},"FashionMNIST(",[51,31834,31835],{"class":248},"root",[51,31837,70],{"class":69},[51,31839,31840],{"class":61},"'.\u002Fdata'",[51,31842,31843],{"class":65},",\n",[51,31845,31846,31849,31851,31853],{"class":53,"line":334},[51,31847,31848],{"class":248},"                        train",[51,31850,70],{"class":69},[51,31852,279],{"class":278},[51,31854,31843],{"class":65},[51,31856,31857],{"class":53,"line":340},[51,31858,31859],{"class":601},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[51,31861,31862,31865,31867,31870,31873,31875,31878],{"class":53,"line":345},[51,31863,31864],{"class":248},"                        transform",[51,31866,70],{"class":69},[51,31868,31869],{"class":65},"transforms.Compose([transforms.Resize(",[51,31871,31872],{"class":248},"size",[51,31874,70],{"class":69},[51,31876,31877],{"class":278},"224",[51,31879,31880],{"class":65},"),transforms.ToTensor()]),\n",[51,31882,31883,31886,31888,31890],{"class":53,"line":357},[51,31884,31885],{"class":248},"                        download",[51,31887,70],{"class":69},[51,31889,279],{"class":278},[51,31891,282],{"class":65},[51,31893,31894],{"class":53,"line":366},[51,31895,206],{"emptyLinePlaceholder":205},[51,31897,31898],{"class":53,"line":383},[51,31899,31900],{"class":601},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[51,31902,31903,31906,31908,31911,31914,31916],{"class":53,"line":392},[51,31904,31905],{"class":65},"train_loader",[51,31907,70],{"class":69},[51,31909,31910],{"class":65},"Data.DataLoader(",[51,31912,31913],{"class":248},"dataset",[51,31915,70],{"class":69},[51,31917,31918],{"class":65},"train_data,\n",[51,31920,31921,31924,31926,31928],{"class":53,"line":403},[51,31922,31923],{"class":248},"                             batch_size",[51,31925,70],{"class":69},[51,31927,745],{"class":278},[51,31929,31843],{"class":65},[51,31931,31932],{"class":53,"line":409},[51,31933,31934],{"class":601},"                             # 数据是否打乱\n",[51,31936,31937,31940,31942,31944],{"class":53,"line":414},[51,31938,31939],{"class":248},"                             shuffle",[51,31941,70],{"class":69},[51,31943,279],{"class":278},[51,31945,31843],{"class":65},[51,31947,31948],{"class":53,"line":433},[51,31949,31950],{"class":601},"                             # 规定加载数据的进程\n",[51,31952,31953,31956,31958,31960],{"class":53,"line":439},[51,31954,31955],{"class":248},"                             num_workers",[51,31957,70],{"class":69},[51,31959,733],{"class":278},[51,31961,282],{"class":65},[51,31963,31964],{"class":53,"line":444},[51,31965,206],{"emptyLinePlaceholder":205},[51,31967,31968],{"class":53,"line":453},[51,31969,31970],{"class":601},"# 获得一个batch的数据\n",[51,31972,31973,31975,31978,31980,31983],{"class":53,"line":2174},[51,31974,3412],{"class":69},[51,31976,31977],{"class":65}," step,(b_x,b_y) ",[51,31979,26425],{"class":69},[51,31981,31982],{"class":278}," enumerate",[51,31984,31985],{"class":65},"(train_loader):\n",[51,31987,31988,31990,31993,31995,31997],{"class":53,"line":2965},[51,31989,3488],{"class":69},[51,31991,31992],{"class":65}," step ",[51,31994,1502],{"class":69},[51,31996,4479],{"class":278},[51,31998,363],{"class":65},[51,32000,32001],{"class":53,"line":2979},[51,32002,32003],{"class":69},"        break\n",[51,32005,32006],{"class":53,"line":2987},[51,32007,32008],{"class":601},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[51,32010,32011,32014,32016,32019],{"class":53,"line":2992},[51,32012,32013],{"class":65},"batch_x",[51,32015,70],{"class":69},[51,32017,32018],{"class":65},"b_x.squeeze().numpy()  ",[51,32020,32021],{"class":601},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[51,32023,32024,32027,32029,32032],{"class":53,"line":2998},[51,32025,32026],{"class":65},"batch_y",[51,32028,70],{"class":69},[51,32030,32031],{"class":65},"b_y.numpy()   ",[51,32033,32034],{"class":601},"#将张量转换成功numpy数组\n",[51,32036,32037,32040,32042,32045],{"class":53,"line":3004},[51,32038,32039],{"class":65},"class_label",[51,32041,70],{"class":69},[51,32043,32044],{"class":65},"train_data.classes  ",[51,32046,32047],{"class":601},"#训练集标签\n",[51,32049,32050],{"class":53,"line":3009},[51,32051,32052],{"class":601},"# print(class_label)\n",[51,32054,32055],{"class":53,"line":8332},[51,32056,206],{"emptyLinePlaceholder":205},[51,32058,32059],{"class":53,"line":8356},[51,32060,32061],{"class":601},"# 可视化一个batch的图像\n",[51,32063,32064,32067,32070,32072,32074,32076,32078,32080],{"class":53,"line":8361},[51,32065,32066],{"class":65},"plt.figure(",[51,32068,32069],{"class":248},"figsize",[51,32071,70],{"class":69},[51,32073,546],{"class":65},[51,32075,1040],{"class":278},[51,32077,920],{"class":65},[51,32079,861],{"class":278},[51,32081,30876],{"class":65},[51,32083,32084,32086,32089,32091,32094,32096],{"class":53,"line":8367},[51,32085,3412],{"class":69},[51,32087,32088],{"class":65}," ii ",[51,32090,26425],{"class":69},[51,32092,32093],{"class":65}," np.arange(",[51,32095,7742],{"class":278},[51,32097,32098],{"class":65},"(batch_y)):\n",[51,32100,32101,32104,32106,32108,32110,32113,32115,32117],{"class":53,"line":8394},[51,32102,32103],{"class":65},"    plt.subplot(",[51,32105,835],{"class":278},[51,32107,920],{"class":65},[51,32109,1143],{"class":278},[51,32111,32112],{"class":65},",ii ",[51,32114,1023],{"class":69},[51,32116,25500],{"class":278},[51,32118,282],{"class":65},[51,32120,32121,32124,32127,32129],{"class":53,"line":8399},[51,32122,32123],{"class":65},"    plt.imshow(batch_x[ii,:,:],",[51,32125,32126],{"class":248},"cmap",[51,32128,70],{"class":69},[51,32130,32131],{"class":65},"plt.cm.gray)\n",[51,32133,32134,32137,32139,32141,32143],{"class":53,"line":8405},[51,32135,32136],{"class":65},"    plt.title(class_label[batch_y[ii]],",[51,32138,31872],{"class":248},[51,32140,70],{"class":69},[51,32142,988],{"class":278},[51,32144,282],{"class":65},[51,32146,32147,32150,32153],{"class":53,"line":8417},[51,32148,32149],{"class":65},"    plt.axis(",[51,32151,32152],{"class":61},"\"off\"",[51,32154,282],{"class":65},[51,32156,32157,32160,32163,32165,32168],{"class":53,"line":8429},[51,32158,32159],{"class":65},"    plt.subplots_adjust(",[51,32161,32162],{"class":248},"wspace",[51,32164,70],{"class":69},[51,32166,32167],{"class":278},"0.05",[51,32169,282],{"class":65},[51,32171,32172],{"class":53,"line":8441},[51,32173,32174],{"class":65},"plt.show()\n",[10,32176,32177],{},"用matplotlib进行展示的过程可以后续再补",[10,32179,32180],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[10,32182,32183],{},"训练次数就是按照批次过整个训练集数据的次数",[10,32185,32186],{},"模型训练：",[41,32188,32190],{"className":170,"code":32189,"language":172,"meta":46,"style":46},"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",[48,32191,32192,32199,32206,32210,32222,32228,32239,32249,32259,32269,32279,32284,32296,32306,32310,32314,32319,32329,32342,32353,32370,32381,32420,32436,32448,32459,32464,32475,32491,32502,32513,32524,32531,32535,32540,32545,32549,32554,32564,32585,32589,32593,32598,32603,32608,32628,32632,32637,32647,32651,32656,32665,32670,32675,32680,32690,32694,32698,32703,32708,32718,32723,32733,32738,32747,32752,32761,32766,32775,32779,32784,32794,32798,32802,32807,32822,32850,32865,32869,32874,32879,32888,32893,32902,32907,32916,32921,32930,32935,32944,32949,32958,32963,32976,32981,32991,32996,33006,33012,33018,33024,33030,33041,33047,33067,33073,33084,33090,33096,33102,33108,33114,33120,33126,33146,33152,33168,33174,33188,33194,33209,33215,33224,33230,33239,33245,33251,33260,33266,33277,33283,33302,33308,33319,33325,33345,33361,33367,33381,33387,33393,33404,33410,33416,33426,33432,33443,33449,33459,33464,33470,33519,33566,33571,33577,33596,33602,33622,33628,33634,33644,33649,33655,33671,33716,33722,33728,33734,33745,33751,33757,33763,33781,33795,33804,33813,33822,33831,33837,33843,33851,33856,33862,33873,33879,33899,33905,33911,33917,33934,33940,33946,33952,33958,33964,33991,34015,34021,34027,34033,34044,34055,34061,34078,34101,34124,34130,34135,34144,34154,34160,34165,34171,34184,34190,34201,34212,34231],{"__ignoreMap":46},[51,32193,32194,32196],{"class":53,"line":54},[51,32195,179],{"class":69},[51,32197,32198],{"class":65}," copy\n",[51,32200,32201,32203],{"class":53,"line":185},[51,32202,179],{"class":69},[51,32204,32205],{"class":65}," time\n",[51,32207,32208],{"class":53,"line":202},[51,32209,206],{"emptyLinePlaceholder":205},[51,32211,32212,32214,32217,32219],{"class":53,"line":209},[51,32213,179],{"class":69},[51,32215,32216],{"class":65}," pandas ",[51,32218,217],{"class":69},[51,32220,32221],{"class":65}," pd\n",[51,32223,32224,32226],{"class":53,"line":223},[51,32225,179],{"class":69},[51,32227,30774],{"class":65},[51,32229,32230,32232,32234,32236],{"class":53,"line":237},[51,32231,226],{"class":69},[51,32233,31792],{"class":65},[51,32235,179],{"class":69},[51,32237,32238],{"class":65}," Dataset\n",[51,32240,32241,32243,32245,32247],{"class":53,"line":242},[51,32242,226],{"class":69},[51,32244,31746],{"class":65},[51,32246,179],{"class":69},[51,32248,31751],{"class":65},[51,32250,32251,32253,32255,32257],{"class":53,"line":257},[51,32252,226],{"class":69},[51,32254,31775],{"class":65},[51,32256,179],{"class":69},[51,32258,31780],{"class":65},[51,32260,32261,32263,32265,32267],{"class":53,"line":262},[51,32262,179],{"class":69},[51,32264,31792],{"class":65},[51,32266,217],{"class":69},[51,32268,31797],{"class":65},[51,32270,32271,32273,32275,32277],{"class":53,"line":285},[51,32272,179],{"class":69},[51,32274,31809],{"class":65},[51,32276,217],{"class":69},[51,32278,31814],{"class":65},[51,32280,32281],{"class":53,"line":296},[51,32282,32283],{"class":601},"# 导入模型\n",[51,32285,32286,32288,32291,32293],{"class":53,"line":307},[51,32287,226],{"class":69},[51,32289,32290],{"class":65}," model ",[51,32292,179],{"class":69},[51,32294,32295],{"class":65}," LeNet\n",[51,32297,32298,32300,32302,32304],{"class":53,"line":324},[51,32299,226],{"class":69},[51,32301,31118],{"class":65},[51,32303,179],{"class":69},[51,32305,31123],{"class":65},[51,32307,32308],{"class":53,"line":329},[51,32309,206],{"emptyLinePlaceholder":205},[51,32311,32312],{"class":53,"line":334},[51,32313,206],{"emptyLinePlaceholder":205},[51,32315,32316],{"class":53,"line":340},[51,32317,32318],{"class":601},"# 处理训练集与验证集函数--->划分数据集\n",[51,32320,32321,32323,32326],{"class":53,"line":345},[51,32322,348],{"class":69},[51,32324,32325],{"class":57}," train_val_data_process",[51,32327,32328],{"class":65},"():\n",[51,32330,32331,32334,32336,32338,32340],{"class":53,"line":357},[51,32332,32333],{"class":65},"    train_data",[51,32335,70],{"class":69},[51,32337,31832],{"class":65},[51,32339,31840],{"class":61},[51,32341,31843],{"class":65},[51,32343,32344,32347,32349,32351],{"class":53,"line":366},[51,32345,32346],{"class":248},"                            train",[51,32348,70],{"class":69},[51,32350,279],{"class":278},[51,32352,31843],{"class":65},[51,32354,32355,32358,32360,32362,32364,32366,32368],{"class":53,"line":383},[51,32356,32357],{"class":248},"                            transform",[51,32359,70],{"class":69},[51,32361,31869],{"class":65},[51,32363,31872],{"class":248},[51,32365,70],{"class":69},[51,32367,1443],{"class":278},[51,32369,31880],{"class":65},[51,32371,32372,32375,32377,32379],{"class":53,"line":392},[51,32373,32374],{"class":248},"                            download",[51,32376,70],{"class":69},[51,32378,279],{"class":278},[51,32380,282],{"class":65},[51,32382,32383,32386,32388,32391,32394,32396,32399,32401,32403,32406,32408,32410,32413,32415,32417],{"class":53,"line":403},[51,32384,32385],{"class":65},"    train_data,val_data",[51,32387,70],{"class":69},[51,32389,32390],{"class":65},"Data.random_split(train_data,[",[51,32392,32393],{"class":278},"round",[51,32395,546],{"class":65},[51,32397,32398],{"class":278},"0.8",[51,32400,997],{"class":69},[51,32402,7742],{"class":278},[51,32404,32405],{"class":65},"(train_data)),",[51,32407,32393],{"class":278},[51,32409,546],{"class":65},[51,32411,32412],{"class":278},"0.2",[51,32414,997],{"class":69},[51,32416,7742],{"class":278},[51,32418,32419],{"class":65},"(train_data))])\n",[51,32421,32422,32425,32427,32430,32432,32434],{"class":53,"line":409},[51,32423,32424],{"class":65},"    train_dataloader ",[51,32426,70],{"class":69},[51,32428,32429],{"class":65}," Data.DataLoader(",[51,32431,31913],{"class":248},[51,32433,70],{"class":69},[51,32435,31918],{"class":65},[51,32437,32438,32441,32443,32446],{"class":53,"line":414},[51,32439,32440],{"class":248},"                                       batch_size",[51,32442,70],{"class":69},[51,32444,32445],{"class":278},"128",[51,32447,31843],{"class":65},[51,32449,32450,32453,32455,32457],{"class":53,"line":433},[51,32451,32452],{"class":248},"                                       shuffle",[51,32454,70],{"class":69},[51,32456,279],{"class":278},[51,32458,31843],{"class":65},[51,32460,32461],{"class":53,"line":439},[51,32462,32463],{"class":601},"                                       # 规定8个进程\n",[51,32465,32466,32469,32471,32473],{"class":53,"line":444},[51,32467,32468],{"class":248},"                                       num_workers",[51,32470,70],{"class":69},[51,32472,937],{"class":278},[51,32474,282],{"class":65},[51,32476,32477,32480,32482,32484,32486,32488],{"class":53,"line":453},[51,32478,32479],{"class":65},"    val_dataloader",[51,32481,70],{"class":69},[51,32483,31910],{"class":65},[51,32485,31913],{"class":248},[51,32487,70],{"class":69},[51,32489,32490],{"class":65},"val_data,\n",[51,32492,32493,32496,32498,32500],{"class":53,"line":2174},[51,32494,32495],{"class":248},"                                   batch_size",[51,32497,70],{"class":69},[51,32499,32445],{"class":278},[51,32501,31843],{"class":65},[51,32503,32504,32507,32509,32511],{"class":53,"line":2965},[51,32505,32506],{"class":248},"                                   shuffle",[51,32508,70],{"class":69},[51,32510,279],{"class":278},[51,32512,31843],{"class":65},[51,32514,32515,32518,32520,32522],{"class":53,"line":2979},[51,32516,32517],{"class":248},"                                   num_workers",[51,32519,70],{"class":69},[51,32521,937],{"class":278},[51,32523,282],{"class":65},[51,32525,32526,32528],{"class":53,"line":2987},[51,32527,4476],{"class":69},[51,32529,32530],{"class":65}," train_dataloader,val_dataloader\n",[51,32532,32533],{"class":53,"line":2992},[51,32534,206],{"emptyLinePlaceholder":205},[51,32536,32537],{"class":53,"line":2998},[51,32538,32539],{"class":601},"# 验证是否出错\n",[51,32541,32542],{"class":53,"line":3004},[51,32543,32544],{"class":601},"# train_val_data_process()\n",[51,32546,32547],{"class":53,"line":3009},[51,32548,206],{"emptyLinePlaceholder":205},[51,32550,32551],{"class":53,"line":8332},[51,32552,32553],{"class":601},"# 定义模型训练函数\n",[51,32555,32556,32558,32561],{"class":53,"line":8356},[51,32557,348],{"class":69},[51,32559,32560],{"class":57}," train_model_process",[51,32562,32563],{"class":65},"(model,train_dataloader,val_dataloader,num_epochs):\n",[51,32565,32566,32568,32570,32572,32574,32576,32578,32580,32583],{"class":53,"line":8361},[51,32567,31615],{"class":65},[51,32569,70],{"class":69},[51,32571,30830],{"class":65},[51,32573,31622],{"class":61},[51,32575,2102],{"class":69},[51,32577,31627],{"class":65},[51,32579,2099],{"class":69},[51,32581,32582],{"class":61}," 'cpu'",[51,32584,282],{"class":65},[51,32586,32587],{"class":53,"line":8367},[51,32588,206],{"emptyLinePlaceholder":205},[51,32590,32591],{"class":53,"line":8394},[51,32592,206],{"emptyLinePlaceholder":205},[51,32594,32595],{"class":53,"line":8399},[51,32596,32597],{"class":601},"    # 定义优化器\n",[51,32599,32600],{"class":53,"line":8405},[51,32601,32602],{"class":601},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[51,32604,32605],{"class":53,"line":8417},[51,32606,32607],{"class":601},"    # lr为学习率\n",[51,32609,32610,32613,32615,32618,32621,32623,32626],{"class":53,"line":8429},[51,32611,32612],{"class":65},"    optimizer",[51,32614,70],{"class":69},[51,32616,32617],{"class":65},"torch.optim.Adam(model.parameters(),",[51,32619,32620],{"class":248},"lr",[51,32622,70],{"class":69},[51,32624,32625],{"class":278},"0.001",[51,32627,282],{"class":65},[51,32629,32630],{"class":53,"line":8441},[51,32631,206],{"emptyLinePlaceholder":205},[51,32633,32634],{"class":53,"line":10100},[51,32635,32636],{"class":601},"    # 定义损失函数使用交叉熵损失函数\n",[51,32638,32639,32642,32644],{"class":53,"line":10125},[51,32640,32641],{"class":65},"    criterion",[51,32643,70],{"class":69},[51,32645,32646],{"class":65},"nn.CrossEntropyLoss()\n",[51,32648,32649],{"class":53,"line":10148},[51,32650,206],{"emptyLinePlaceholder":205},[51,32652,32653],{"class":53,"line":10172},[51,32654,32655],{"class":601},"    # 将模型放到GPU中进行训练\n",[51,32657,32658,32660,32662],{"class":53,"line":10177},[51,32659,31667],{"class":65},[51,32661,70],{"class":69},[51,32663,32664],{"class":65},"model.to(device)\n",[51,32666,32667],{"class":53,"line":10182},[51,32668,32669],{"class":601},"    # 复制当前模型的参数\n",[51,32671,32672],{"class":53,"line":10187},[51,32673,32674],{"class":601},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[51,32676,32677],{"class":53,"line":10196},[51,32678,32679],{"class":601},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[51,32681,32682,32685,32687],{"class":53,"line":10201},[51,32683,32684],{"class":65},"    best_model_wts",[51,32686,70],{"class":69},[51,32688,32689],{"class":65},"copy.deepcopy(model.state_dict())\n",[51,32691,32692],{"class":53,"line":10207},[51,32693,206],{"emptyLinePlaceholder":205},[51,32695,32696],{"class":53,"line":10228},[51,32697,206],{"emptyLinePlaceholder":205},[51,32699,32700],{"class":53,"line":10234},[51,32701,32702],{"class":601},"    # 初始化参数\n",[51,32704,32705],{"class":53,"line":10248},[51,32706,32707],{"class":601},"    # 最高准确度\n",[51,32709,32710,32713,32715],{"class":53,"line":10254},[51,32711,32712],{"class":65},"    best_acc",[51,32714,70],{"class":69},[51,32716,32717],{"class":278},"0.0\n",[51,32719,32720],{"class":53,"line":10281},[51,32721,32722],{"class":601},"    # 训练集损失列表\n",[51,32724,32725,32728,32730],{"class":53,"line":10290},[51,32726,32727],{"class":65},"    train_loss_all",[51,32729,70],{"class":69},[51,32731,32732],{"class":65},"[]\n",[51,32734,32735],{"class":53,"line":10296},[51,32736,32737],{"class":601},"    # 验证集函数列表\n",[51,32739,32740,32743,32745],{"class":53,"line":10304},[51,32741,32742],{"class":65},"    val_loss_all",[51,32744,70],{"class":69},[51,32746,32732],{"class":65},[51,32748,32749],{"class":53,"line":10309},[51,32750,32751],{"class":601},"    # 训练集准确度列表\n",[51,32753,32754,32757,32759],{"class":53,"line":16987},[51,32755,32756],{"class":65},"    train_acc_all",[51,32758,70],{"class":69},[51,32760,32732],{"class":65},[51,32762,32763],{"class":53,"line":16993},[51,32764,32765],{"class":601},"    # 验证集准确度列表\n",[51,32767,32768,32771,32773],{"class":53,"line":17016},[51,32769,32770],{"class":65},"    val_acc_all",[51,32772,70],{"class":69},[51,32774,32732],{"class":65},[51,32776,32777],{"class":53,"line":17022},[51,32778,206],{"emptyLinePlaceholder":205},[51,32780,32781],{"class":53,"line":17045},[51,32782,32783],{"class":601},"    # 保存当前时间--->方便看每轮训练的时间\n",[51,32785,32786,32789,32791],{"class":53,"line":17059},[51,32787,32788],{"class":65},"    since",[51,32790,70],{"class":69},[51,32792,32793],{"class":65},"time.time()\n",[51,32795,32796],{"class":53,"line":17079},[51,32797,206],{"emptyLinePlaceholder":205},[51,32799,32800],{"class":53,"line":17085},[51,32801,206],{"emptyLinePlaceholder":205},[51,32803,32804],{"class":53,"line":17096},[51,32805,32806],{"class":601},"    # 准备工作完成--->开始训练模型\n",[51,32808,32809,32811,32814,32816,32819],{"class":53,"line":17119},[51,32810,3588],{"class":69},[51,32812,32813],{"class":65}," epoch ",[51,32815,26425],{"class":69},[51,32817,32818],{"class":278}," range",[51,32820,32821],{"class":65},"(num_epochs):\n",[51,32823,32824,32827,32829,32832,32835,32837,32839,32841,32844,32846,32848],{"class":53,"line":17141},[51,32825,32826],{"class":278},"        print",[51,32828,546],{"class":65},[51,32830,32831],{"class":61},"\"Epoch ",[51,32833,32834],{"class":278},"{}",[51,32836,1126],{"class":61},[51,32838,32834],{"class":278},[51,32840,793],{"class":61},[51,32842,32843],{"class":65},".format(epoch,num_epochs",[51,32845,1074],{"class":69},[51,32847,759],{"class":278},[51,32849,30876],{"class":65},[51,32851,32852,32854,32856,32859,32861,32863],{"class":53,"line":17146},[51,32853,32826],{"class":278},[51,32855,546],{"class":65},[51,32857,32858],{"class":61},"\"-\"",[51,32860,997],{"class":69},[51,32862,988],{"class":278},[51,32864,282],{"class":65},[51,32866,32867],{"class":53,"line":17152},[51,32868,206],{"emptyLinePlaceholder":205},[51,32870,32871],{"class":53,"line":17166},[51,32872,32873],{"class":601},"        # 初始化参数\n",[51,32875,32876],{"class":53,"line":17179},[51,32877,32878],{"class":601},"        # 训练集损失函数\n",[51,32880,32881,32884,32886],{"class":53,"line":17184},[51,32882,32883],{"class":65},"        train_loss",[51,32885,70],{"class":69},[51,32887,32717],{"class":278},[51,32889,32890],{"class":53,"line":17198},[51,32891,32892],{"class":601},"        # 训练集准确度\n",[51,32894,32895,32898,32900],{"class":53,"line":17203},[51,32896,32897],{"class":65},"        train_corrects",[51,32899,70],{"class":69},[51,32901,3472],{"class":278},[51,32903,32904],{"class":53,"line":17209},[51,32905,32906],{"class":601},"        # 验证集损失函数\n",[51,32908,32909,32912,32914],{"class":53,"line":17214},[51,32910,32911],{"class":65},"        val_loss",[51,32913,70],{"class":69},[51,32915,32717],{"class":278},[51,32917,32918],{"class":53,"line":17228},[51,32919,32920],{"class":601},"        # 验证集准确度\n",[51,32922,32923,32926,32928],{"class":53,"line":17233},[51,32924,32925],{"class":65},"        val_corrects",[51,32927,70],{"class":69},[51,32929,3472],{"class":278},[51,32931,32932],{"class":53,"line":17238},[51,32933,32934],{"class":601},"        # 训练集样本数量\n",[51,32936,32937,32940,32942],{"class":53,"line":17252},[51,32938,32939],{"class":65},"        train_num",[51,32941,70],{"class":69},[51,32943,3472],{"class":278},[51,32945,32946],{"class":53,"line":17264},[51,32947,32948],{"class":601},"        # 验证集样本数量\n",[51,32950,32951,32954,32956],{"class":53,"line":17269},[51,32952,32953],{"class":65},"        val_num",[51,32955,70],{"class":69},[51,32957,3472],{"class":278},[51,32959,32960],{"class":53,"line":17282},[51,32961,32962],{"class":601},"        # 将数据放到设备,并开始训练\n",[51,32964,32965,32967,32969,32971,32973],{"class":53,"line":17287},[51,32966,3790],{"class":69},[51,32968,31977],{"class":65},[51,32970,26425],{"class":69},[51,32972,31982],{"class":278},[51,32974,32975],{"class":65},"(train_dataloader):\n",[51,32977,32978],{"class":53,"line":17292},[51,32979,32980],{"class":601},"            # 将特征放入到训练设备\n",[51,32982,32983,32986,32988],{"class":53,"line":17297},[51,32984,32985],{"class":65},"            b_x",[51,32987,70],{"class":69},[51,32989,32990],{"class":65},"b_x.to(device)\n",[51,32992,32993],{"class":53,"line":17310},[51,32994,32995],{"class":601},"            # 将标签放入到训练设备当中\n",[51,32997,32998,33001,33003],{"class":53,"line":17315},[51,32999,33000],{"class":65},"            b_y",[51,33002,70],{"class":69},[51,33004,33005],{"class":65},"b_y.to(device)\n",[51,33007,33009],{"class":53,"line":33008},98,[51,33010,33011],{"class":601},"            # 设置模型为训练模式\n",[51,33013,33015],{"class":53,"line":33014},99,[51,33016,33017],{"class":65},"            model.train()\n",[51,33019,33021],{"class":53,"line":33020},100,[51,33022,33023],{"class":601},"            # 将数据放到模型当中,开始前向传播\n",[51,33025,33027],{"class":53,"line":33026},101,[51,33028,33029],{"class":601},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[51,33031,33033,33036,33038],{"class":53,"line":33032},102,[51,33034,33035],{"class":65},"            output",[51,33037,70],{"class":69},[51,33039,33040],{"class":65},"model(b_x)\n",[51,33042,33044],{"class":53,"line":33043},103,[51,33045,33046],{"class":601},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[51,33048,33050,33053,33055,33058,33061,33063,33065],{"class":53,"line":33049},104,[51,33051,33052],{"class":65},"            pre_lab",[51,33054,70],{"class":69},[51,33056,33057],{"class":65},"torch.argmax(output,",[51,33059,33060],{"class":248},"dim",[51,33062,70],{"class":69},[51,33064,759],{"class":278},[51,33066,282],{"class":65},[51,33068,33070],{"class":53,"line":33069},105,[51,33071,33072],{"class":601},"            # 计算每一个batch的损失函数\n",[51,33074,33076,33079,33081],{"class":53,"line":33075},106,[51,33077,33078],{"class":65},"            loss",[51,33080,70],{"class":69},[51,33082,33083],{"class":65},"criterion(output,b_y)\n",[51,33085,33087],{"class":53,"line":33086},107,[51,33088,33089],{"class":601},"            # 将梯度初始化为0\n",[51,33091,33093],{"class":53,"line":33092},108,[51,33094,33095],{"class":65},"            optimizer.zero_grad()\n",[51,33097,33099],{"class":53,"line":33098},109,[51,33100,33101],{"class":601},"            # 梯度置为0后再进行反向传播\n",[51,33103,33105],{"class":53,"line":33104},110,[51,33106,33107],{"class":65},"            loss.backward()\n",[51,33109,33111],{"class":53,"line":33110},111,[51,33112,33113],{"class":601},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[51,33115,33117],{"class":53,"line":33116},112,[51,33118,33119],{"class":65},"            optimizer.step()\n",[51,33121,33123],{"class":53,"line":33122},113,[51,33124,33125],{"class":601},"            # loss.item()指的是batch的平均损失\n",[51,33127,33129,33132,33134,33137,33139,33142,33144],{"class":53,"line":33128},114,[51,33130,33131],{"class":65},"            train_loss",[51,33133,9861],{"class":69},[51,33135,33136],{"class":65},"loss.item()",[51,33138,997],{"class":69},[51,33140,33141],{"class":65},"b_x.size(",[51,33143,733],{"class":278},[51,33145,282],{"class":65},[51,33147,33149],{"class":53,"line":33148},115,[51,33150,33151],{"class":601},"            # 计算每个批次中正确预测的数量\n",[51,33153,33155,33158,33160,33163,33165],{"class":53,"line":33154},116,[51,33156,33157],{"class":65},"            train_corrects",[51,33159,9861],{"class":69},[51,33161,33162],{"class":65},"torch.sum(pre_lab",[51,33164,375],{"class":69},[51,33166,33167],{"class":65},"b_y.data)\n",[51,33169,33171],{"class":53,"line":33170},117,[51,33172,33173],{"class":601},"            # 计算目前为止一共处理了多少样本\n",[51,33175,33177,33180,33182,33184,33186],{"class":53,"line":33176},118,[51,33178,33179],{"class":65},"            train_num",[51,33181,9861],{"class":69},[51,33183,33141],{"class":65},[51,33185,733],{"class":278},[51,33187,282],{"class":65},[51,33189,33191],{"class":53,"line":33190},119,[51,33192,33193],{"class":601},"        # 验证数据\n",[51,33195,33197,33199,33202,33204,33206],{"class":53,"line":33196},120,[51,33198,3790],{"class":69},[51,33200,33201],{"class":65}," step ,(b_x,b_y) ",[51,33203,26425],{"class":69},[51,33205,31982],{"class":278},[51,33207,33208],{"class":65},"(val_dataloader):\n",[51,33210,33212],{"class":53,"line":33211},121,[51,33213,33214],{"class":601},"            # 将特征放到验证设备当中\n",[51,33216,33218,33220,33222],{"class":53,"line":33217},122,[51,33219,32985],{"class":65},[51,33221,70],{"class":69},[51,33223,32990],{"class":65},[51,33225,33227],{"class":53,"line":33226},123,[51,33228,33229],{"class":601},"            # 将标签放到放到训练设备当中\n",[51,33231,33233,33235,33237],{"class":53,"line":33232},124,[51,33234,33000],{"class":65},[51,33236,70],{"class":69},[51,33238,33005],{"class":65},[51,33240,33242],{"class":53,"line":33241},125,[51,33243,33244],{"class":601},"            # 开启验证模式，设置模型为评估模式\n",[51,33246,33248],{"class":53,"line":33247},126,[51,33249,33250],{"class":65},"            model.eval()\n",[51,33252,33254,33257],{"class":53,"line":33253},127,[51,33255,33256],{"class":69},"            with",[51,33258,33259],{"class":65}," torch.no_grad():\n",[51,33261,33263],{"class":53,"line":33262},128,[51,33264,33265],{"class":601},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[51,33267,33269,33272,33274],{"class":53,"line":33268},129,[51,33270,33271],{"class":65},"                output ",[51,33273,70],{"class":69},[51,33275,33276],{"class":65}," model(b_x)\n",[51,33278,33280],{"class":53,"line":33279},130,[51,33281,33282],{"class":601},"                # 查找每一行中最大值对应的下标\n",[51,33284,33286,33289,33291,33294,33296,33298,33300],{"class":53,"line":33285},131,[51,33287,33288],{"class":65},"                pre_lab ",[51,33290,70],{"class":69},[51,33292,33293],{"class":65}," torch.argmax(output, ",[51,33295,33060],{"class":248},[51,33297,70],{"class":69},[51,33299,759],{"class":278},[51,33301,282],{"class":65},[51,33303,33305],{"class":53,"line":33304},132,[51,33306,33307],{"class":601},"                # 计算验证集上的当前 batch 损失\n",[51,33309,33311,33314,33316],{"class":53,"line":33310},133,[51,33312,33313],{"class":65},"                val_batch_loss ",[51,33315,70],{"class":69},[51,33317,33318],{"class":65}," criterion(output, b_y)\n",[51,33320,33322],{"class":53,"line":33321},134,[51,33323,33324],{"class":601},"                # 对损失函数进行累加（按样本数加权）\n",[51,33326,33328,33331,33333,33336,33338,33341,33343],{"class":53,"line":33327},135,[51,33329,33330],{"class":65},"                val_loss ",[51,33332,9861],{"class":69},[51,33334,33335],{"class":65}," val_batch_loss.item() ",[51,33337,997],{"class":69},[51,33339,33340],{"class":65}," b_x.size(",[51,33342,733],{"class":278},[51,33344,282],{"class":65},[51,33346,33348,33351,33353,33356,33358],{"class":53,"line":33347},136,[51,33349,33350],{"class":65},"                val_corrects ",[51,33352,9861],{"class":69},[51,33354,33355],{"class":65}," torch.sum(pre_lab ",[51,33357,375],{"class":69},[51,33359,33360],{"class":65}," b_y.data)\n",[51,33362,33364],{"class":53,"line":33363},137,[51,33365,33366],{"class":601},"                # 当前用于验证的样本数量\n",[51,33368,33370,33373,33375,33377,33379],{"class":53,"line":33369},138,[51,33371,33372],{"class":65},"            val_num ",[51,33374,9861],{"class":69},[51,33376,33340],{"class":65},[51,33378,733],{"class":278},[51,33380,282],{"class":65},[51,33382,33384],{"class":53,"line":33383},139,[51,33385,33386],{"class":601},"        # 计算并保存每一次迭代的loss值和准确率\n",[51,33388,33390],{"class":53,"line":33389},140,[51,33391,33392],{"class":601},"        # 计算并保存训练集的loss值\n",[51,33394,33396,33399,33401],{"class":53,"line":33395},141,[51,33397,33398],{"class":65},"        train_loss_all.append(train_loss",[51,33400,1126],{"class":69},[51,33402,33403],{"class":65},"train_num)\n",[51,33405,33407],{"class":53,"line":33406},142,[51,33408,33409],{"class":601},"        # 取双精度\n",[51,33411,33413],{"class":53,"line":33412},143,[51,33414,33415],{"class":601},"        # 计算并保存训练集的准确率\n",[51,33417,33419,33422,33424],{"class":53,"line":33418},144,[51,33420,33421],{"class":65},"        train_acc_all.append(train_corrects.double().item()",[51,33423,1126],{"class":69},[51,33425,33403],{"class":65},[51,33427,33429],{"class":53,"line":33428},145,[51,33430,33431],{"class":601},"        # 计算并保存验证集的loss值\n",[51,33433,33435,33438,33440],{"class":53,"line":33434},146,[51,33436,33437],{"class":65},"        val_loss_all.append(val_loss",[51,33439,1126],{"class":69},[51,33441,33442],{"class":65},"val_num)\n",[51,33444,33446],{"class":53,"line":33445},147,[51,33447,33448],{"class":601},"        # 计算并保存验证集的准确率\n",[51,33450,33452,33455,33457],{"class":53,"line":33451},148,[51,33453,33454],{"class":65},"        val_acc_all.append(val_corrects.double().item()",[51,33456,1126],{"class":69},[51,33458,33442],{"class":65},[51,33460,33462],{"class":53,"line":33461},149,[51,33463,206],{"emptyLinePlaceholder":205},[51,33465,33467],{"class":53,"line":33466},150,[51,33468,33469],{"class":601},"        # 打印训练一轮的loss值和准确率\n",[51,33471,33473,33475,33477,33479,33481,33484,33486,33489,33491,33494,33496,33498,33500,33502,33505,33507,33509,33512,33514,33516],{"class":53,"line":33472},151,[51,33474,32826],{"class":278},[51,33476,546],{"class":65},[51,33478,3979],{"class":61},[51,33480,32834],{"class":278},[51,33482,33483],{"class":61},"train loss:",[51,33485,1438],{"class":278},[51,33487,33488],{"class":69},":.4f",[51,33490,1488],{"class":278},[51,33492,33493],{"class":61}," train acc:",[51,33495,1438],{"class":278},[51,33497,33488],{"class":69},[51,33499,1488],{"class":278},[51,33501,3979],{"class":61},[51,33503,33504],{"class":65},".format(epoch,train_loss_all[",[51,33506,1074],{"class":69},[51,33508,759],{"class":278},[51,33510,33511],{"class":65},"],train_acc_all[",[51,33513,1074],{"class":69},[51,33515,759],{"class":278},[51,33517,33518],{"class":65},"]))\n",[51,33520,33522,33524,33526,33528,33530,33533,33535,33537,33539,33542,33544,33546,33548,33550,33553,33555,33557,33560,33562,33564],{"class":53,"line":33521},152,[51,33523,32826],{"class":278},[51,33525,546],{"class":65},[51,33527,3979],{"class":61},[51,33529,32834],{"class":278},[51,33531,33532],{"class":61},"val loss:",[51,33534,1438],{"class":278},[51,33536,33488],{"class":69},[51,33538,1488],{"class":278},[51,33540,33541],{"class":61}," val acc:",[51,33543,1438],{"class":278},[51,33545,33488],{"class":69},[51,33547,1488],{"class":278},[51,33549,3979],{"class":61},[51,33551,33552],{"class":65},".format(epoch,val_loss_all[",[51,33554,1074],{"class":69},[51,33556,759],{"class":278},[51,33558,33559],{"class":65},"],val_acc_all[",[51,33561,1074],{"class":69},[51,33563,759],{"class":278},[51,33565,33518],{"class":65},[51,33567,33569],{"class":53,"line":33568},153,[51,33570,206],{"emptyLinePlaceholder":205},[51,33572,33574],{"class":53,"line":33573},154,[51,33575,33576],{"class":601},"        # 判断准确度--->保存最优模型\n",[51,33578,33580,33582,33585,33587,33589,33591,33593],{"class":53,"line":33579},155,[51,33581,369],{"class":69},[51,33583,33584],{"class":65}," val_acc_all[",[51,33586,1074],{"class":69},[51,33588,759],{"class":278},[51,33590,1482],{"class":65},[51,33592,1502],{"class":69},[51,33594,33595],{"class":65},"best_acc:\n",[51,33597,33599],{"class":53,"line":33598},156,[51,33600,33601],{"class":601},"            # 保存当前模型准确度\n",[51,33603,33605,33608,33610,33612,33615,33617,33619],{"class":53,"line":33604},157,[51,33606,33607],{"class":65},"            best_acc:",[51,33609,584],{"class":278},[51,33611,70],{"class":69},[51,33613,33614],{"class":65},"val_acc_all[",[51,33616,1074],{"class":69},[51,33618,759],{"class":278},[51,33620,33621],{"class":65},"]\n",[51,33623,33625],{"class":53,"line":33624},158,[51,33626,33627],{"class":601},"            # 保存当前的准确度\n",[51,33629,33631],{"class":53,"line":33630},159,[51,33632,33633],{"class":601},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[51,33635,33637,33640,33642],{"class":53,"line":33636},160,[51,33638,33639],{"class":65},"            best_model_wts",[51,33641,70],{"class":69},[51,33643,32689],{"class":65},[51,33645,33647],{"class":53,"line":33646},161,[51,33648,206],{"emptyLinePlaceholder":205},[51,33650,33652],{"class":53,"line":33651},162,[51,33653,33654],{"class":601},"        # 计算耗时\n",[51,33656,33658,33661,33663,33666,33668],{"class":53,"line":33657},163,[51,33659,33660],{"class":65},"        time_use",[51,33662,70],{"class":69},[51,33664,33665],{"class":65},"time.time()",[51,33667,1074],{"class":69},[51,33669,33670],{"class":65},"since\n",[51,33672,33674,33676,33678,33681,33683,33686,33688,33690,33692,33694,33696,33699,33702,33705,33707,33710,33712,33714],{"class":53,"line":33673},164,[51,33675,32826],{"class":278},[51,33677,546],{"class":65},[51,33679,33680],{"class":61},"'训练和验证耗费的时间",[51,33682,1438],{"class":278},[51,33684,33685],{"class":69},":.0f",[51,33687,1488],{"class":278},[51,33689,1086],{"class":61},[51,33691,1438],{"class":278},[51,33693,33685],{"class":69},[51,33695,1488],{"class":278},[51,33697,33698],{"class":61},"s'",[51,33700,33701],{"class":65},".format(time_use",[51,33703,33704],{"class":69},"\u002F\u002F",[51,33706,1449],{"class":278},[51,33708,33709],{"class":65},",time_use",[51,33711,870],{"class":69},[51,33713,1449],{"class":278},[51,33715,30876],{"class":65},[51,33717,33719],{"class":53,"line":33718},165,[51,33720,33721],{"class":601},"    # 选择最优参数\n",[51,33723,33725],{"class":53,"line":33724},166,[51,33726,33727],{"class":601},"    # 加载最高准确率下的模型参数\n",[51,33729,33731],{"class":53,"line":33730},167,[51,33732,33733],{"class":601},"    # model.load_state_dict(best_model_wts)\n",[51,33735,33737,33740,33743],{"class":53,"line":33736},168,[51,33738,33739],{"class":65},"    torch.save(model.state_dict(best_model_wts), ",[51,33741,33742],{"class":61},"'.\u002Fbest_model.pth'",[51,33744,282],{"class":65},[51,33746,33748],{"class":53,"line":33747},169,[51,33749,33750],{"class":601},"    # 或者写成\n",[51,33752,33754],{"class":53,"line":33753},170,[51,33755,33756],{"class":601},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[51,33758,33760],{"class":53,"line":33759},171,[51,33761,33762],{"class":601},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[51,33764,33766,33769,33771,33774,33777,33779],{"class":53,"line":33765},172,[51,33767,33768],{"class":65},"    train_process",[51,33770,70],{"class":69},[51,33772,33773],{"class":65},"pd.DataFrame(",[51,33775,33776],{"class":248},"data",[51,33778,70],{"class":69},[51,33780,1955],{"class":65},[51,33782,33784,33787,33789,33792],{"class":53,"line":33783},173,[51,33785,33786],{"class":61},"        \"epoch\"",[51,33788,1401],{"class":65},[51,33790,33791],{"class":278},"range",[51,33793,33794],{"class":65},"(num_epochs),\n",[51,33796,33798,33801],{"class":53,"line":33797},174,[51,33799,33800],{"class":61},"        \"train_loss_all\"",[51,33802,33803],{"class":65},":train_loss_all,\n",[51,33805,33807,33810],{"class":53,"line":33806},175,[51,33808,33809],{"class":61},"        \"val_loss_all\"",[51,33811,33812],{"class":65},":val_loss_all,\n",[51,33814,33816,33819],{"class":53,"line":33815},176,[51,33817,33818],{"class":61},"        \"train_acc_all\"",[51,33820,33821],{"class":65},":train_acc_all,\n",[51,33823,33825,33828],{"class":53,"line":33824},177,[51,33826,33827],{"class":61},"        \"val_acc_all\"",[51,33829,33830],{"class":65},":val_acc_all\n",[51,33832,33834],{"class":53,"line":33833},178,[51,33835,33836],{"class":65},"    })\n",[51,33838,33840],{"class":53,"line":33839},179,[51,33841,33842],{"class":601},"    # 返回训练保存的过程\n",[51,33844,33846,33848],{"class":53,"line":33845},180,[51,33847,4476],{"class":69},[51,33849,33850],{"class":65}," train_process\n",[51,33852,33854],{"class":53,"line":33853},181,[51,33855,206],{"emptyLinePlaceholder":205},[51,33857,33859],{"class":53,"line":33858},182,[51,33860,33861],{"class":601},"# 将loss值和精度按照图片的形式展示出来\n",[51,33863,33865,33867,33870],{"class":53,"line":33864},183,[51,33866,348],{"class":69},[51,33868,33869],{"class":57}," matplot_acc_loss",[51,33871,33872],{"class":65},"(train_process):\n",[51,33874,33876],{"class":53,"line":33875},184,[51,33877,33878],{"class":601},"    # 设置图的大小\n",[51,33880,33882,33885,33887,33889,33891,33893,33895,33897],{"class":53,"line":33881},185,[51,33883,33884],{"class":65},"    plt.figure(",[51,33886,32069],{"class":248},[51,33888,70],{"class":69},[51,33890,546],{"class":65},[51,33892,1040],{"class":278},[51,33894,920],{"class":65},[51,33896,835],{"class":278},[51,33898,30876],{"class":65},[51,33900,33902],{"class":53,"line":33901},186,[51,33903,33904],{"class":601},"    # 设置图中有几张图\n",[51,33906,33908],{"class":53,"line":33907},187,[51,33909,33910],{"class":601},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[51,33912,33914],{"class":53,"line":33913},188,[51,33915,33916],{"class":601},"    # ①loss图\n",[51,33918,33920,33922,33924,33926,33928,33930,33932],{"class":53,"line":33919},189,[51,33921,32103],{"class":65},[51,33923,759],{"class":278},[51,33925,920],{"class":65},[51,33927,620],{"class":278},[51,33929,920],{"class":65},[51,33931,759],{"class":278},[51,33933,282],{"class":65},[51,33935,33937],{"class":53,"line":33936},190,[51,33938,33939],{"class":601},"    # 补充:\n",[51,33941,33943],{"class":53,"line":33942},191,[51,33944,33945],{"class":601},"    # plt.subplot(nrows, ncols, index)\n",[51,33947,33949],{"class":53,"line":33948},192,[51,33950,33951],{"class":601},"    # nrows：行数\n",[51,33953,33955],{"class":53,"line":33954},193,[51,33956,33957],{"class":601},"    # ncols：列数\n",[51,33959,33961],{"class":53,"line":33960},194,[51,33962,33963],{"class":601},"    # index：目前选中第几个子图（从1开始）\n",[51,33965,33967,33970,33973,33976,33979,33981,33984,33986,33989],{"class":53,"line":33966},195,[51,33968,33969],{"class":65},"    plt.plot(train_process[",[51,33971,33972],{"class":61},"\"epoch\"",[51,33974,33975],{"class":65},"],train_process.train_loss_all,",[51,33977,33978],{"class":61},"'ro-'",[51,33980,920],{"class":65},[51,33982,33983],{"class":248},"label",[51,33985,70],{"class":69},[51,33987,33988],{"class":61},"'train loss'",[51,33990,282],{"class":65},[51,33992,33994,33996,33998,34001,34004,34006,34008,34010,34013],{"class":53,"line":33993},196,[51,33995,33969],{"class":65},[51,33997,33972],{"class":61},[51,33999,34000],{"class":65},"],train_process.val_loss_all,",[51,34002,34003],{"class":61},"'bs--'",[51,34005,920],{"class":65},[51,34007,33983],{"class":248},[51,34009,70],{"class":69},[51,34011,34012],{"class":61},"'val loss'",[51,34014,282],{"class":65},[51,34016,34018],{"class":53,"line":34017},197,[51,34019,34020],{"class":601},"    # 添加一个图例\n",[51,34022,34024],{"class":53,"line":34023},198,[51,34025,34026],{"class":65},"    plt.legend()\n",[51,34028,34030],{"class":53,"line":34029},199,[51,34031,34032],{"class":601},"    # 给轴添加标签\n",[51,34034,34036,34039,34042],{"class":53,"line":34035},200,[51,34037,34038],{"class":65},"    plt.xlabel(",[51,34040,34041],{"class":61},"'epoch'",[51,34043,282],{"class":65},[51,34045,34047,34050,34053],{"class":53,"line":34046},201,[51,34048,34049],{"class":65},"    plt.ylabel(",[51,34051,34052],{"class":61},"'loss'",[51,34054,282],{"class":65},[51,34056,34058],{"class":53,"line":34057},202,[51,34059,34060],{"class":601},"    # ②准确度图\n",[51,34062,34064,34066,34068,34070,34072,34074,34076],{"class":53,"line":34063},203,[51,34065,32103],{"class":65},[51,34067,759],{"class":278},[51,34069,920],{"class":65},[51,34071,620],{"class":278},[51,34073,920],{"class":65},[51,34075,620],{"class":278},[51,34077,282],{"class":65},[51,34079,34081,34083,34085,34088,34090,34092,34094,34096,34099],{"class":53,"line":34080},204,[51,34082,33969],{"class":65},[51,34084,33972],{"class":61},[51,34086,34087],{"class":65},"],train_process.train_acc_all,",[51,34089,33978],{"class":61},[51,34091,920],{"class":65},[51,34093,33983],{"class":248},[51,34095,70],{"class":69},[51,34097,34098],{"class":61},"'train acc'",[51,34100,282],{"class":65},[51,34102,34104,34106,34108,34111,34113,34115,34117,34119,34122],{"class":53,"line":34103},205,[51,34105,33969],{"class":65},[51,34107,33972],{"class":61},[51,34109,34110],{"class":65},"],train_process.val_acc_all,",[51,34112,34003],{"class":61},[51,34114,920],{"class":65},[51,34116,33983],{"class":248},[51,34118,70],{"class":69},[51,34120,34121],{"class":61},"'val acc'",[51,34123,282],{"class":65},[51,34125,34127],{"class":53,"line":34126},206,[51,34128,34129],{"class":601},"    # 添加图例\n",[51,34131,34133],{"class":53,"line":34132},207,[51,34134,34026],{"class":65},[51,34136,34138,34140,34142],{"class":53,"line":34137},208,[51,34139,34038],{"class":65},[51,34141,33972],{"class":61},[51,34143,282],{"class":65},[51,34145,34147,34149,34152],{"class":53,"line":34146},209,[51,34148,34049],{"class":65},[51,34150,34151],{"class":61},"\"acc\"",[51,34153,282],{"class":65},[51,34155,34157],{"class":53,"line":34156},210,[51,34158,34159],{"class":65},"    plt.show()\n",[51,34161,34163],{"class":53,"line":34162},211,[51,34164,206],{"emptyLinePlaceholder":205},[51,34166,34168],{"class":53,"line":34167},212,[51,34169,34170],{"class":601},"# 正式开始训练:\n",[51,34172,34174,34176,34178,34180,34182],{"class":53,"line":34173},213,[51,34175,1940],{"class":69},[51,34177,31598],{"class":278},[51,34179,375],{"class":69},[51,34181,31603],{"class":61},[51,34183,363],{"class":65},[51,34185,34187],{"class":53,"line":34186},214,[51,34188,34189],{"class":601},"    # 将模型实例化\n",[51,34191,34193,34196,34198],{"class":53,"line":34192},215,[51,34194,34195],{"class":65},"    LeNet",[51,34197,70],{"class":69},[51,34199,34200],{"class":65},"LeNet()\n",[51,34202,34204,34207,34209],{"class":53,"line":34203},216,[51,34205,34206],{"class":65},"    train_dataloader,val_dataloader",[51,34208,70],{"class":69},[51,34210,34211],{"class":65},"train_val_data_process()\n",[51,34213,34215,34217,34219,34222,34225,34227,34229],{"class":53,"line":34214},217,[51,34216,33768],{"class":65},[51,34218,70],{"class":69},[51,34220,34221],{"class":65},"train_model_process(LeNet,train_dataloader,val_dataloader,",[51,34223,34224],{"class":248},"num_epochs",[51,34226,70],{"class":69},[51,34228,1242],{"class":278},[51,34230,282],{"class":65},[51,34232,34234],{"class":53,"line":34233},218,[51,34235,34236],{"class":65},"    matplot_acc_loss(train_process)\n",[10,34238,34239],{},"画图的补充点学习：",[10,34241,34242],{},[460,34243],{"alt":46,"src":34244},"\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",[19,34246,34247],{"start":202},[22,34248,34249],{},"测试",[41,34251,34253],{"className":170,"code":34252,"language":172,"meta":46,"style":46},"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",[48,34254,34255,34261,34271,34283,34293,34298,34308,34318,34322,34327,34336,34353,34365,34382,34393,34409,34414,34425,34436,34447,34454,34458,34463,34473,34478,34495,34503,34507,34512,34521,34530,34534,34539,34544,34549,34556,34561,34573,34583,34593,34598,34602,34607,34616,34621,34637,34642,34647,34652,34666,34671,34685,34689,34694,34709,34714,34726,34730,34735,34747,34752,34760,34765,34770,34780,34785,34794,34799,34804,34808,34813,34818,34834,34842,34847,34852,34911,34917,34922,34933,34941,34949,34953,34958,34962,34967,34975,34980,34996,35001,35011,35021],{"__ignoreMap":46},[51,34256,34257,34259],{"class":53,"line":54},[51,34258,179],{"class":69},[51,34260,30774],{"class":65},[51,34262,34263,34265,34267,34269],{"class":53,"line":185},[51,34264,179],{"class":69},[51,34266,31792],{"class":65},[51,34268,217],{"class":69},[51,34270,31797],{"class":65},[51,34272,34273,34275,34278,34280],{"class":53,"line":202},[51,34274,226],{"class":69},[51,34276,34277],{"class":65}," jupyter_client.consoleapp ",[51,34279,179],{"class":69},[51,34281,34282],{"class":65}," classes\n",[51,34284,34285,34287,34289,34291],{"class":53,"line":209},[51,34286,226],{"class":69},[51,34288,31775],{"class":65},[51,34290,179],{"class":69},[51,34292,31780],{"class":65},[51,34294,34295],{"class":53,"line":223},[51,34296,34297],{"class":601},"# 导入数据集\n",[51,34299,34300,34302,34304,34306],{"class":53,"line":237},[51,34301,226],{"class":69},[51,34303,31746],{"class":65},[51,34305,179],{"class":69},[51,34307,31751],{"class":65},[51,34309,34310,34312,34314,34316],{"class":53,"line":242},[51,34311,226],{"class":69},[51,34313,32290],{"class":65},[51,34315,179],{"class":69},[51,34317,32295],{"class":65},[51,34319,34320],{"class":53,"line":257},[51,34321,206],{"emptyLinePlaceholder":205},[51,34323,34324],{"class":53,"line":262},[51,34325,34326],{"class":601},"# 测试数据处理\n",[51,34328,34329,34331,34334],{"class":53,"line":285},[51,34330,348],{"class":69},[51,34332,34333],{"class":57}," test_data_process",[51,34335,32328],{"class":65},[51,34337,34338,34341,34343,34345,34347,34349,34351],{"class":53,"line":296},[51,34339,34340],{"class":65},"    test_data",[51,34342,70],{"class":69},[51,34344,31832],{"class":65},[51,34346,31835],{"class":248},[51,34348,70],{"class":69},[51,34350,31840],{"class":61},[51,34352,31843],{"class":65},[51,34354,34355,34358,34360,34363],{"class":53,"line":307},[51,34356,34357],{"class":248},"                           train",[51,34359,70],{"class":69},[51,34361,34362],{"class":278},"False",[51,34364,31843],{"class":65},[51,34366,34367,34370,34372,34374,34376,34378,34380],{"class":53,"line":324},[51,34368,34369],{"class":248},"                           transform",[51,34371,70],{"class":69},[51,34373,31869],{"class":65},[51,34375,31872],{"class":248},[51,34377,70],{"class":69},[51,34379,1443],{"class":278},[51,34381,31880],{"class":65},[51,34383,34384,34387,34389,34391],{"class":53,"line":329},[51,34385,34386],{"class":248},"                           download",[51,34388,70],{"class":69},[51,34390,279],{"class":278},[51,34392,282],{"class":65},[51,34394,34395,34398,34400,34402,34404,34406],{"class":53,"line":334},[51,34396,34397],{"class":65},"    test_dataloader",[51,34399,70],{"class":69},[51,34401,31910],{"class":65},[51,34403,31913],{"class":248},[51,34405,70],{"class":69},[51,34407,34408],{"class":65},"test_data,\n",[51,34410,34411],{"class":53,"line":340},[51,34412,34413],{"class":601},"                                    # 这里是一张一张进行测试\n",[51,34415,34416,34419,34421,34423],{"class":53,"line":345},[51,34417,34418],{"class":248},"                                    batch_size",[51,34420,70],{"class":69},[51,34422,759],{"class":278},[51,34424,31843],{"class":65},[51,34426,34427,34430,34432,34434],{"class":53,"line":357},[51,34428,34429],{"class":248},"                                    shuffle",[51,34431,70],{"class":69},[51,34433,279],{"class":278},[51,34435,31843],{"class":65},[51,34437,34438,34441,34443,34445],{"class":53,"line":366},[51,34439,34440],{"class":248},"                                    num_workers",[51,34442,70],{"class":69},[51,34444,733],{"class":278},[51,34446,282],{"class":65},[51,34448,34449,34451],{"class":53,"line":383},[51,34450,4476],{"class":69},[51,34452,34453],{"class":65}," test_dataloader\n",[51,34455,34456],{"class":53,"line":392},[51,34457,206],{"emptyLinePlaceholder":205},[51,34459,34460],{"class":53,"line":403},[51,34461,34462],{"class":601},"# 定义模型测试函数\n",[51,34464,34465,34467,34470],{"class":53,"line":409},[51,34466,348],{"class":69},[51,34468,34469],{"class":57}," test_model_process",[51,34471,34472],{"class":65},"(model,test_dataloader):\n",[51,34474,34475],{"class":53,"line":414},[51,34476,34477],{"class":601},"    # 将模型放到设备当中，先进行判断\n",[51,34479,34480,34482,34484,34486,34488,34490,34492],{"class":53,"line":433},[51,34481,31615],{"class":65},[51,34483,70],{"class":69},[51,34485,31622],{"class":61},[51,34487,2102],{"class":69},[51,34489,31627],{"class":65},[51,34491,2099],{"class":69},[51,34493,34494],{"class":61}," \"cpu\"\n",[51,34496,34497,34499,34501],{"class":53,"line":439},[51,34498,31667],{"class":65},[51,34500,70],{"class":69},[51,34502,32664],{"class":65},[51,34504,34505],{"class":53,"line":444},[51,34506,206],{"emptyLinePlaceholder":205},[51,34508,34509],{"class":53,"line":453},[51,34510,34511],{"class":601},"    # 设置初始化参数\n",[51,34513,34514,34517,34519],{"class":53,"line":2174},[51,34515,34516],{"class":65},"    test_corrects",[51,34518,70],{"class":69},[51,34520,32717],{"class":278},[51,34522,34523,34526,34528],{"class":53,"line":2965},[51,34524,34525],{"class":65},"    test_num",[51,34527,70],{"class":69},[51,34529,3472],{"class":278},[51,34531,34532],{"class":53,"line":2979},[51,34533,206],{"emptyLinePlaceholder":205},[51,34535,34536],{"class":53,"line":2987},[51,34537,34538],{"class":601},"    # 进行模型测试\n",[51,34540,34541],{"class":53,"line":2992},[51,34542,34543],{"class":601},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[51,34545,34546],{"class":53,"line":2998},[51,34547,34548],{"class":601},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[51,34550,34551,34554],{"class":53,"line":3004},[51,34552,34553],{"class":69},"    with",[51,34555,33259],{"class":65},[51,34557,34558],{"class":53,"line":3009},[51,34559,34560],{"class":601},"        # 从数据中进行\n",[51,34562,34563,34565,34568,34570],{"class":53,"line":8332},[51,34564,3790],{"class":69},[51,34566,34567],{"class":65}," test_data_x,test_data_y ",[51,34569,26425],{"class":69},[51,34571,34572],{"class":65}," test_dataloader:\n",[51,34574,34575,34578,34580],{"class":53,"line":8356},[51,34576,34577],{"class":65},"            test_data_x",[51,34579,70],{"class":69},[51,34581,34582],{"class":65},"test_data_x.to(device)\n",[51,34584,34585,34588,34590],{"class":53,"line":8361},[51,34586,34587],{"class":65},"            test_data_y",[51,34589,70],{"class":69},[51,34591,34592],{"class":65},"test_data_y.to(device)\n",[51,34594,34595],{"class":53,"line":8367},[51,34596,34597],{"class":601},"            # 设置为验证模式\n",[51,34599,34600],{"class":53,"line":8394},[51,34601,33250],{"class":65},[51,34603,34604],{"class":53,"line":8399},[51,34605,34606],{"class":601},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[51,34608,34609,34611,34613],{"class":53,"line":8405},[51,34610,33035],{"class":65},[51,34612,70],{"class":69},[51,34614,34615],{"class":65},"model(test_data_x)\n",[51,34617,34618],{"class":53,"line":8417},[51,34619,34620],{"class":601},"            # 查找每一行中最大值对应的下标\n",[51,34622,34623,34625,34627,34629,34631,34633,34635],{"class":53,"line":8429},[51,34624,33052],{"class":65},[51,34626,70],{"class":69},[51,34628,33057],{"class":65},[51,34630,33060],{"class":248},[51,34632,70],{"class":69},[51,34634,759],{"class":278},[51,34636,282],{"class":65},[51,34638,34639],{"class":53,"line":8441},[51,34640,34641],{"class":601},"            # 计算正确率\n",[51,34643,34644],{"class":53,"line":10100},[51,34645,34646],{"class":601},"            # .data表示是一个不带梯度信息的tensor\n",[51,34648,34649],{"class":53,"line":10125},[51,34650,34651],{"class":601},"            # 如果预测正确，则准确度test_corrects加1\n",[51,34653,34654,34657,34659,34661,34663],{"class":53,"line":10148},[51,34655,34656],{"class":65},"            test_corrects",[51,34658,9861],{"class":69},[51,34660,33162],{"class":65},[51,34662,375],{"class":69},[51,34664,34665],{"class":65},"test_data_y.data)\n",[51,34667,34668],{"class":53,"line":10172},[51,34669,34670],{"class":601},"            # 将所有的测试样本进行累计\n",[51,34672,34673,34676,34678,34681,34683],{"class":53,"line":10177},[51,34674,34675],{"class":65},"            test_num",[51,34677,9861],{"class":69},[51,34679,34680],{"class":65},"test_data_x.size(",[51,34682,733],{"class":278},[51,34684,282],{"class":65},[51,34686,34687],{"class":53,"line":10182},[51,34688,206],{"emptyLinePlaceholder":205},[51,34690,34691],{"class":53,"line":10187},[51,34692,34693],{"class":601},"        # 计算准确度\n",[51,34695,34696,34699,34701,34704,34706],{"class":53,"line":10196},[51,34697,34698],{"class":65},"        test_acc",[51,34700,70],{"class":69},[51,34702,34703],{"class":65},"test_corrects.double().item()",[51,34705,1126],{"class":69},[51,34707,34708],{"class":65},"test_num\n",[51,34710,34711],{"class":53,"line":10201},[51,34712,34713],{"class":601},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[51,34715,34716,34718,34720,34723],{"class":53,"line":10207},[51,34717,32826],{"class":278},[51,34719,546],{"class":65},[51,34721,34722],{"class":61},"\"测试的准确率：\"",[51,34724,34725],{"class":65},",test_acc)\n",[51,34727,34728],{"class":53,"line":10228},[51,34729,206],{"emptyLinePlaceholder":205},[51,34731,34732],{"class":53,"line":10234},[51,34733,34734],{"class":601},"# 实现模型的测试功能\n",[51,34736,34737,34739,34741,34743,34745],{"class":53,"line":10248},[51,34738,1940],{"class":69},[51,34740,31598],{"class":278},[51,34742,375],{"class":69},[51,34744,31603],{"class":61},[51,34746,363],{"class":65},[51,34748,34749],{"class":53,"line":10254},[51,34750,34751],{"class":601},"    # 加载模型\n",[51,34753,34754,34756,34758],{"class":53,"line":10281},[51,34755,31667],{"class":65},[51,34757,70],{"class":69},[51,34759,34200],{"class":65},[51,34761,34762],{"class":53,"line":10290},[51,34763,34764],{"class":601},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[51,34766,34767],{"class":53,"line":10296},[51,34768,34769],{"class":601},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[51,34771,34772,34775,34778],{"class":53,"line":10304},[51,34773,34774],{"class":65},"    model.load_state_dict(torch.load(",[51,34776,34777],{"class":61},"'best_model.pth'",[51,34779,30876],{"class":65},[51,34781,34782],{"class":53,"line":10309},[51,34783,34784],{"class":601},"    # 数据加载\n",[51,34786,34787,34789,34791],{"class":53,"line":16987},[51,34788,34397],{"class":65},[51,34790,70],{"class":69},[51,34792,34793],{"class":65},"test_data_process()\n",[51,34795,34796],{"class":53,"line":16993},[51,34797,34798],{"class":601},"    # 加载模型测试的函数\n",[51,34800,34801],{"class":53,"line":17016},[51,34802,34803],{"class":65},"    test_model_process(model,test_dataloader)\n",[51,34805,34806],{"class":53,"line":17022},[51,34807,206],{"emptyLinePlaceholder":205},[51,34809,34810],{"class":53,"line":17045},[51,34811,34812],{"class":601},"    # 验证集推理实现：\n",[51,34814,34815],{"class":53,"line":17059},[51,34816,34817],{"class":601},"    # 加载数据加载的更详细一些\n",[51,34819,34820,34822,34824,34826,34828,34830,34832],{"class":53,"line":17079},[51,34821,31615],{"class":65},[51,34823,70],{"class":69},[51,34825,31622],{"class":61},[51,34827,2102],{"class":69},[51,34829,31627],{"class":65},[51,34831,2099],{"class":69},[51,34833,34494],{"class":61},[51,34835,34836,34838,34840],{"class":53,"line":17085},[51,34837,31667],{"class":65},[51,34839,70],{"class":69},[51,34841,32664],{"class":65},[51,34843,34844],{"class":53,"line":17096},[51,34845,34846],{"class":601},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[51,34848,34849],{"class":53,"line":17119},[51,34850,34851],{"class":601},"    # 顺序不可改变\n",[51,34853,34854,34857,34859,34861,34864,34866,34869,34871,34874,34876,34879,34881,34884,34886,34889,34891,34894,34896,34899,34901,34904,34906,34909],{"class":53,"line":17141},[51,34855,34856],{"class":65},"    classes",[51,34858,70],{"class":69},[51,34860,1432],{"class":65},[51,34862,34863],{"class":61},"'T-shirt\u002Ftop'",[51,34865,920],{"class":65},[51,34867,34868],{"class":61},"'Trouser'",[51,34870,920],{"class":65},[51,34872,34873],{"class":61},"'Pullover'",[51,34875,920],{"class":65},[51,34877,34878],{"class":61},"'Dress'",[51,34880,920],{"class":65},[51,34882,34883],{"class":61},"'Coat'",[51,34885,920],{"class":65},[51,34887,34888],{"class":61},"'Sandal'",[51,34890,920],{"class":65},[51,34892,34893],{"class":61},"'Shirt'",[51,34895,920],{"class":65},[51,34897,34898],{"class":61},"'Sneaker'",[51,34900,920],{"class":65},[51,34902,34903],{"class":61},"'Bag'",[51,34905,920],{"class":65},[51,34907,34908],{"class":61},"'Ankle boot'",[51,34910,33621],{"class":65},[51,34912,34913,34915],{"class":53,"line":17146},[51,34914,34553],{"class":69},[51,34916,33259],{"class":65},[51,34918,34919],{"class":53,"line":17152},[51,34920,34921],{"class":601},"        # 将数据和标签都放到设备当中\n",[51,34923,34924,34926,34929,34931],{"class":53,"line":17166},[51,34925,3790],{"class":69},[51,34927,34928],{"class":65}," b_x,b_y ",[51,34930,26425],{"class":69},[51,34932,34572],{"class":65},[51,34934,34935,34937,34939],{"class":53,"line":17179},[51,34936,32985],{"class":65},[51,34938,70],{"class":69},[51,34940,32990],{"class":65},[51,34942,34943,34945,34947],{"class":53,"line":17184},[51,34944,33000],{"class":65},[51,34946,70],{"class":69},[51,34948,33005],{"class":65},[51,34950,34951],{"class":53,"line":17198},[51,34952,206],{"emptyLinePlaceholder":205},[51,34954,34955],{"class":53,"line":17203},[51,34956,34957],{"class":601},"            # 设置模型为验证模式\n",[51,34959,34960],{"class":53,"line":17209},[51,34961,33250],{"class":65},[51,34963,34964],{"class":53,"line":17214},[51,34965,34966],{"class":601},"            # 模型推理结果\n",[51,34968,34969,34971,34973],{"class":53,"line":17228},[51,34970,33035],{"class":65},[51,34972,70],{"class":69},[51,34974,33040],{"class":65},[51,34976,34977],{"class":53,"line":17233},[51,34978,34979],{"class":601},"            # 获取最大下标，最大下标就是类别号\n",[51,34981,34982,34984,34986,34988,34990,34992,34994],{"class":53,"line":17238},[51,34983,33052],{"class":65},[51,34985,70],{"class":69},[51,34987,33057],{"class":65},[51,34989,33060],{"class":248},[51,34991,70],{"class":69},[51,34993,759],{"class":278},[51,34995,282],{"class":65},[51,34997,34998],{"class":53,"line":17252},[51,34999,35000],{"class":601},"            # 取出张量中的数值\n",[51,35002,35003,35006,35008],{"class":53,"line":17264},[51,35004,35005],{"class":65},"            result",[51,35007,70],{"class":69},[51,35009,35010],{"class":65},"pre_lab.item()\n",[51,35012,35013,35016,35018],{"class":53,"line":17269},[51,35014,35015],{"class":65},"            label",[51,35017,70],{"class":69},[51,35019,35020],{"class":65},"b_y.item()\n",[51,35022,35023,35026,35028,35031,35034,35037,35039,35042],{"class":53,"line":17282},[51,35024,35025],{"class":278},"            print",[51,35027,546],{"class":65},[51,35029,35030],{"class":61},"\"预测值：\"",[51,35032,35033],{"class":65},",classes[result],",[51,35035,35036],{"class":61},"\"------\"",[51,35038,920],{"class":65},[51,35040,35041],{"class":61},"\"真实值：\"",[51,35043,35044],{"class":65},",classes[label])\n",[10,35046,35047],{},"（2）AlexNet",[19,35049,35050],{},[22,35051,35052],{},"神经网络构建",[41,35054,35056],{"className":170,"code":35055,"language":172,"meta":46,"style":46},"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",[48,35057,35058,35064,35074,35084,35096,35100,35117,35125,35140,35152,35194,35221,35264,35290,35334,35377,35420,35447,35451,35461,35466,35494,35513,35532,35536,35541,35549,35564,35574,35588,35598,35613,35628,35643,35654,35658,35663,35673,35688,35693,35707,35722,35734,35739,35750,35755,35761,35766,35778,35798,35803,35812],{"__ignoreMap":46},[51,35059,35060,35062],{"class":53,"line":54},[51,35061,179],{"class":69},[51,35063,30774],{"class":65},[51,35065,35066,35068,35070,35072],{"class":53,"line":185},[51,35067,226],{"class":69},[51,35069,31118],{"class":65},[51,35071,179],{"class":69},[51,35073,31123],{"class":65},[51,35075,35076,35078,35080,35082],{"class":53,"line":202},[51,35077,226],{"class":69},[51,35079,31135],{"class":65},[51,35081,179],{"class":69},[51,35083,31140],{"class":65},[51,35085,35086,35088,35091,35093],{"class":53,"line":209},[51,35087,179],{"class":69},[51,35089,35090],{"class":65}," torch.nn.functional ",[51,35092,217],{"class":69},[51,35094,35095],{"class":65}," F\n",[51,35097,35098],{"class":53,"line":223},[51,35099,206],{"emptyLinePlaceholder":205},[51,35101,35102,35104,35107,35109,35111,35113,35115],{"class":53,"line":237},[51,35103,15078],{"class":69},[51,35105,35106],{"class":57}," AlexNet",[51,35108,546],{"class":65},[51,35110,31156],{"class":57},[51,35112,1100],{"class":65},[51,35114,31161],{"class":57},[51,35116,31164],{"class":65},[51,35118,35119,35121,35123],{"class":53,"line":242},[51,35120,31179],{"class":69},[51,35122,31182],{"class":278},[51,35124,31185],{"class":65},[51,35126,35127,35129,35132,35134,35136,35138],{"class":53,"line":257},[51,35128,31195],{"class":278},[51,35130,35131],{"class":65},"(AlexNet,",[51,35133,31201],{"class":278},[51,35135,31204],{"class":65},[51,35137,31207],{"class":278},[51,35139,2366],{"class":65},[51,35141,35142,35144,35147,35149],{"class":53,"line":262},[51,35143,31223],{"class":278},[51,35145,35146],{"class":65},".ReLu",[51,35148,70],{"class":69},[51,35150,35151],{"class":65},"nn.ReLU()\n",[51,35153,35154,35156,35158,35160,35162,35164,35166,35168,35170,35172,35174,35176,35178,35180,35182,35184,35186,35188,35190,35192],{"class":53,"line":285},[51,35155,31223],{"class":278},[51,35157,31226],{"class":65},[51,35159,70],{"class":69},[51,35161,31231],{"class":65},[51,35163,31234],{"class":248},[51,35165,70],{"class":69},[51,35167,759],{"class":278},[51,35169,920],{"class":65},[51,35171,31243],{"class":248},[51,35173,70],{"class":69},[51,35175,751],{"class":278},[51,35177,920],{"class":65},[51,35179,31252],{"class":248},[51,35181,70],{"class":69},[51,35183,1014],{"class":278},[51,35185,920],{"class":65},[51,35187,31307],{"class":248},[51,35189,70],{"class":69},[51,35191,835],{"class":278},[51,35193,282],{"class":65},[51,35195,35196,35198,35200,35202,35205,35207,35209,35211,35213,35215,35217,35219],{"class":53,"line":296},[51,35197,31223],{"class":278},[51,35199,31291],{"class":65},[51,35201,70],{"class":69},[51,35203,35204],{"class":65},"nn.MaxPool2d(",[51,35206,31252],{"class":248},[51,35208,70],{"class":69},[51,35210,614],{"class":278},[51,35212,920],{"class":65},[51,35214,31307],{"class":248},[51,35216,70],{"class":69},[51,35218,620],{"class":278},[51,35220,282],{"class":65},[51,35222,35223,35225,35227,35229,35231,35233,35235,35237,35239,35241,35243,35246,35248,35250,35252,35254,35256,35258,35260,35262],{"class":53,"line":307},[51,35224,31223],{"class":278},[51,35226,31320],{"class":65},[51,35228,70],{"class":69},[51,35230,31231],{"class":65},[51,35232,31234],{"class":248},[51,35234,70],{"class":69},[51,35236,751],{"class":278},[51,35238,920],{"class":65},[51,35240,31243],{"class":248},[51,35242,70],{"class":69},[51,35244,35245],{"class":278},"256",[51,35247,920],{"class":65},[51,35249,31252],{"class":248},[51,35251,70],{"class":69},[51,35253,861],{"class":278},[51,35255,920],{"class":65},[51,35257,31261],{"class":248},[51,35259,70],{"class":69},[51,35261,620],{"class":278},[51,35263,282],{"class":65},[51,35265,35266,35268,35270,35272,35274,35276,35278,35280,35282,35284,35286,35288],{"class":53,"line":324},[51,35267,31223],{"class":278},[51,35269,31355],{"class":65},[51,35271,70],{"class":69},[51,35273,35204],{"class":65},[51,35275,31252],{"class":248},[51,35277,70],{"class":69},[51,35279,614],{"class":278},[51,35281,920],{"class":65},[51,35283,31307],{"class":248},[51,35285,70],{"class":69},[51,35287,620],{"class":278},[51,35289,282],{"class":65},[51,35291,35292,35294,35297,35299,35301,35303,35305,35307,35309,35311,35313,35316,35318,35320,35322,35324,35326,35328,35330,35332],{"class":53,"line":329},[51,35293,31223],{"class":278},[51,35295,35296],{"class":65},".c5",[51,35298,70],{"class":69},[51,35300,31231],{"class":65},[51,35302,31234],{"class":248},[51,35304,70],{"class":69},[51,35306,35245],{"class":278},[51,35308,920],{"class":65},[51,35310,31243],{"class":248},[51,35312,70],{"class":69},[51,35314,35315],{"class":278},"384",[51,35317,920],{"class":65},[51,35319,31252],{"class":248},[51,35321,70],{"class":69},[51,35323,614],{"class":278},[51,35325,920],{"class":65},[51,35327,31261],{"class":248},[51,35329,70],{"class":69},[51,35331,759],{"class":278},[51,35333,282],{"class":65},[51,35335,35336,35338,35341,35343,35345,35347,35349,35351,35353,35355,35357,35359,35361,35363,35365,35367,35369,35371,35373,35375],{"class":53,"line":334},[51,35337,31223],{"class":278},[51,35339,35340],{"class":65},".c6",[51,35342,70],{"class":69},[51,35344,31231],{"class":65},[51,35346,31234],{"class":248},[51,35348,70],{"class":69},[51,35350,35315],{"class":278},[51,35352,920],{"class":65},[51,35354,31243],{"class":248},[51,35356,70],{"class":69},[51,35358,35315],{"class":278},[51,35360,920],{"class":65},[51,35362,31252],{"class":248},[51,35364,70],{"class":69},[51,35366,614],{"class":278},[51,35368,920],{"class":65},[51,35370,31261],{"class":248},[51,35372,70],{"class":69},[51,35374,759],{"class":278},[51,35376,282],{"class":65},[51,35378,35379,35381,35384,35386,35388,35390,35392,35394,35396,35398,35400,35402,35404,35406,35408,35410,35412,35414,35416,35418],{"class":53,"line":340},[51,35380,31223],{"class":278},[51,35382,35383],{"class":65},".c7",[51,35385,70],{"class":69},[51,35387,31231],{"class":65},[51,35389,31234],{"class":248},[51,35391,70],{"class":69},[51,35393,35315],{"class":278},[51,35395,920],{"class":65},[51,35397,31243],{"class":248},[51,35399,70],{"class":69},[51,35401,35245],{"class":278},[51,35403,920],{"class":65},[51,35405,31252],{"class":248},[51,35407,70],{"class":69},[51,35409,614],{"class":278},[51,35411,920],{"class":65},[51,35413,31261],{"class":248},[51,35415,70],{"class":69},[51,35417,759],{"class":278},[51,35419,282],{"class":65},[51,35421,35422,35424,35427,35429,35431,35433,35435,35437,35439,35441,35443,35445],{"class":53,"line":345},[51,35423,31223],{"class":278},[51,35425,35426],{"class":65},".s8",[51,35428,70],{"class":69},[51,35430,35204],{"class":65},[51,35432,31252],{"class":248},[51,35434,70],{"class":69},[51,35436,614],{"class":278},[51,35438,920],{"class":65},[51,35440,31307],{"class":248},[51,35442,70],{"class":69},[51,35444,620],{"class":278},[51,35446,282],{"class":65},[51,35448,35449],{"class":53,"line":357},[51,35450,31380],{"class":601},[51,35452,35453,35455,35457,35459],{"class":53,"line":366},[51,35454,31223],{"class":278},[51,35456,31387],{"class":65},[51,35458,70],{"class":69},[51,35460,31392],{"class":65},[51,35462,35463],{"class":53,"line":383},[51,35464,35465],{"class":601},"       # 定义全连接层\n",[51,35467,35468,35470,35473,35475,35477,35479,35481,35483,35485,35487,35489,35492],{"class":53,"line":392},[51,35469,31223],{"class":278},[51,35471,35472],{"class":65},".f1",[51,35474,70],{"class":69},[51,35476,31409],{"class":65},[51,35478,886],{"class":278},[51,35480,997],{"class":69},[51,35482,886],{"class":278},[51,35484,997],{"class":69},[51,35486,35245],{"class":278},[51,35488,920],{"class":65},[51,35490,35491],{"class":278},"4096",[51,35493,282],{"class":65},[51,35495,35496,35498,35501,35503,35505,35507,35509,35511],{"class":53,"line":403},[51,35497,31223],{"class":278},[51,35499,35500],{"class":65},".f2",[51,35502,70],{"class":69},[51,35504,31409],{"class":65},[51,35506,35491],{"class":278},[51,35508,920],{"class":65},[51,35510,35491],{"class":278},[51,35512,282],{"class":65},[51,35514,35515,35517,35520,35522,35524,35526,35528,35530],{"class":53,"line":409},[51,35516,31223],{"class":278},[51,35518,35519],{"class":65},".f3",[51,35521,70],{"class":69},[51,35523,31409],{"class":65},[51,35525,35491],{"class":278},[51,35527,920],{"class":65},[51,35529,988],{"class":278},[51,35531,282],{"class":65},[51,35533,35534],{"class":53,"line":414},[51,35535,206],{"emptyLinePlaceholder":205},[51,35537,35538],{"class":53,"line":433},[51,35539,35540],{"class":601},"    # 定义前向传播\n",[51,35542,35543,35545,35547],{"class":53,"line":439},[51,35544,31179],{"class":69},[51,35546,31471],{"class":57},[51,35548,31474],{"class":65},[51,35550,35551,35553,35555,35557,35560,35562],{"class":53,"line":444},[51,35552,31479],{"class":65},[51,35554,70],{"class":69},[51,35556,31201],{"class":278},[51,35558,35559],{"class":65},".ReLu(",[51,35561,31201],{"class":278},[51,35563,31491],{"class":65},[51,35565,35566,35568,35570,35572],{"class":53,"line":453},[51,35567,31479],{"class":65},[51,35569,70],{"class":69},[51,35571,31201],{"class":278},[51,35573,31502],{"class":65},[51,35575,35576,35578,35580,35582,35584,35586],{"class":53,"line":2174},[51,35577,31479],{"class":65},[51,35579,70],{"class":69},[51,35581,31201],{"class":278},[51,35583,35559],{"class":65},[51,35585,31201],{"class":278},[51,35587,31517],{"class":65},[51,35589,35590,35592,35594,35596],{"class":53,"line":2965},[51,35591,31479],{"class":65},[51,35593,70],{"class":69},[51,35595,31201],{"class":278},[51,35597,31528],{"class":65},[51,35599,35600,35602,35604,35606,35608,35610],{"class":53,"line":2979},[51,35601,31479],{"class":65},[51,35603,70],{"class":69},[51,35605,31201],{"class":278},[51,35607,35559],{"class":65},[51,35609,31201],{"class":278},[51,35611,35612],{"class":65},".c5(x))\n",[51,35614,35615,35617,35619,35621,35623,35625],{"class":53,"line":2987},[51,35616,31479],{"class":65},[51,35618,70],{"class":69},[51,35620,31201],{"class":278},[51,35622,35559],{"class":65},[51,35624,31201],{"class":278},[51,35626,35627],{"class":65},".c6(x))\n",[51,35629,35630,35632,35634,35636,35638,35640],{"class":53,"line":2992},[51,35631,31479],{"class":65},[51,35633,70],{"class":69},[51,35635,31201],{"class":278},[51,35637,35559],{"class":65},[51,35639,31201],{"class":278},[51,35641,35642],{"class":65},".c7(x))\n",[51,35644,35645,35647,35649,35651],{"class":53,"line":2998},[51,35646,31479],{"class":65},[51,35648,70],{"class":69},[51,35650,31201],{"class":278},[51,35652,35653],{"class":65},".s8(x)\n",[51,35655,35656],{"class":53,"line":3004},[51,35657,206],{"emptyLinePlaceholder":205},[51,35659,35660],{"class":53,"line":3009},[51,35661,35662],{"class":601},"        # 展平加线性全连接层\n",[51,35664,35665,35667,35669,35671],{"class":53,"line":8332},[51,35666,31479],{"class":65},[51,35668,70],{"class":69},[51,35670,31201],{"class":278},[51,35672,31539],{"class":65},[51,35674,35675,35677,35679,35681,35683,35685],{"class":53,"line":8356},[51,35676,31479],{"class":65},[51,35678,70],{"class":69},[51,35680,31201],{"class":278},[51,35682,35559],{"class":65},[51,35684,31201],{"class":278},[51,35686,35687],{"class":65},".f1(x))\n",[51,35689,35690],{"class":53,"line":8361},[51,35691,35692],{"class":601},"        # 还需要dropout对神经元随机进行失活\n",[51,35694,35695,35697,35699,35702,35705],{"class":53,"line":8367},[51,35696,31479],{"class":65},[51,35698,70],{"class":69},[51,35700,35701],{"class":65},"F.dropout(x,",[51,35703,35704],{"class":278},"0.5",[51,35706,282],{"class":65},[51,35708,35709,35711,35713,35715,35717,35719],{"class":53,"line":8394},[51,35710,31479],{"class":65},[51,35712,70],{"class":69},[51,35714,31201],{"class":278},[51,35716,35559],{"class":65},[51,35718,31201],{"class":278},[51,35720,35721],{"class":65},".f2(x))\n",[51,35723,35724,35726,35728,35730,35732],{"class":53,"line":8399},[51,35725,31479],{"class":65},[51,35727,70],{"class":69},[51,35729,35701],{"class":65},[51,35731,35704],{"class":278},[51,35733,282],{"class":65},[51,35735,35736],{"class":53,"line":8405},[51,35737,35738],{"class":601},"        # 直接输出\n",[51,35740,35741,35743,35745,35747],{"class":53,"line":8417},[51,35742,31479],{"class":65},[51,35744,70],{"class":69},[51,35746,31201],{"class":278},[51,35748,35749],{"class":65},".f3(x)\n",[51,35751,35752],{"class":53,"line":8429},[51,35753,35754],{"class":601},"        # 前向传播输出\n",[51,35756,35757,35759],{"class":53,"line":8441},[51,35758,15136],{"class":69},[51,35760,31587],{"class":65},[51,35762,35763],{"class":53,"line":10100},[51,35764,35765],{"class":601},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[51,35767,35768,35770,35772,35774,35776],{"class":53,"line":10125},[51,35769,1940],{"class":69},[51,35771,31598],{"class":278},[51,35773,375],{"class":69},[51,35775,31603],{"class":61},[51,35777,363],{"class":65},[51,35779,35780,35782,35784,35786,35788,35790,35792,35794,35796],{"class":53,"line":10148},[51,35781,31615],{"class":65},[51,35783,70],{"class":69},[51,35785,30830],{"class":65},[51,35787,31622],{"class":61},[51,35789,2102],{"class":69},[51,35791,31627],{"class":65},[51,35793,2099],{"class":69},[51,35795,30855],{"class":61},[51,35797,282],{"class":65},[51,35799,35800],{"class":53,"line":10172},[51,35801,35802],{"class":601},"    # 模型实例化，然后将实例化的模型放到设备中\n",[51,35804,35805,35807,35809],{"class":53,"line":10177},[51,35806,31667],{"class":65},[51,35808,70],{"class":69},[51,35810,35811],{"class":65},"AlexNet().to(device)\n",[51,35813,35814,35816,35818,35820,35822,35825,35827,35829],{"class":53,"line":10182},[51,35815,31677],{"class":278},[51,35817,31680],{"class":65},[51,35819,759],{"class":278},[51,35821,920],{"class":65},[51,35823,35824],{"class":278},"227",[51,35826,920],{"class":65},[51,35828,35824],{"class":278},[51,35830,31693],{"class":65},[19,35832,35833],{"start":185},[22,35834,31706],{},[41,35836,35838],{"className":170,"code":35837,"language":172,"meta":46,"style":46},"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",[48,35839,35840,35846,35852,35862,35868,35878,35888,35898,35908,35918,35922,35933,35943,35947,35951,35955,35963,35975,35985,36001,36011,36043,36057,36067,36077,36081,36091,36105,36115,36125,36135,36141,36145,36149,36153,36157,36161,36169,36189,36193,36197,36201,36205,36209,36225,36229,36233,36241,36245,36249,36257,36261,36265,36269,36277,36281,36285,36289,36293,36301,36305,36313,36317,36325,36329,36337,36341,36349,36353,36357,36365,36369,36373,36377,36389,36413,36427,36431,36435,36439,36447,36451,36459,36463,36471,36475,36483,36487,36495,36499,36507,36511,36523,36527,36535,36539,36547,36551,36555,36559,36563,36571,36575,36591,36595,36603,36607,36611,36615,36619,36623,36627,36631,36647,36651,36663,36667,36679,36683,36695,36699,36707,36711,36719,36723,36727,36732,36738,36742,36751,36755,36772,36776,36785,36789,36807,36820,36825,36838,36842,36846,36854,36858,36862,36870,36874,36882,36886,36894,36898,36902,36944,36986,36990,36994,37010,37014,37030,37034,37038,37046,37050,37054,37066,37104,37109,37114,37123,37127,37141,37151,37157,37163,37169,37175,37179,37183,37189,37193,37197,37205,37209,37227,37231,37235,37239,37255,37259,37263,37267,37271,37275,37295,37315,37319,37323,37327,37335,37343,37347,37363,37383,37403,37407,37411,37419,37427,37431,37435,37439,37451,37455,37465,37473,37490],{"__ignoreMap":46},[51,35841,35842,35844],{"class":53,"line":54},[51,35843,179],{"class":69},[51,35845,32198],{"class":65},[51,35847,35848,35850],{"class":53,"line":185},[51,35849,179],{"class":69},[51,35851,32205],{"class":65},[51,35853,35854,35856,35858,35860],{"class":53,"line":202},[51,35855,179],{"class":69},[51,35857,32216],{"class":65},[51,35859,217],{"class":69},[51,35861,32221],{"class":65},[51,35863,35864,35866],{"class":53,"line":209},[51,35865,179],{"class":69},[51,35867,30774],{"class":65},[51,35869,35870,35872,35874,35876],{"class":53,"line":223},[51,35871,226],{"class":69},[51,35873,31792],{"class":65},[51,35875,179],{"class":69},[51,35877,32238],{"class":65},[51,35879,35880,35882,35884,35886],{"class":53,"line":237},[51,35881,226],{"class":69},[51,35883,31746],{"class":65},[51,35885,179],{"class":69},[51,35887,31751],{"class":65},[51,35889,35890,35892,35894,35896],{"class":53,"line":242},[51,35891,226],{"class":69},[51,35893,31775],{"class":65},[51,35895,179],{"class":69},[51,35897,31780],{"class":65},[51,35899,35900,35902,35904,35906],{"class":53,"line":257},[51,35901,179],{"class":69},[51,35903,31792],{"class":65},[51,35905,217],{"class":69},[51,35907,31797],{"class":65},[51,35909,35910,35912,35914,35916],{"class":53,"line":262},[51,35911,179],{"class":69},[51,35913,31809],{"class":65},[51,35915,217],{"class":69},[51,35917,31814],{"class":65},[51,35919,35920],{"class":53,"line":285},[51,35921,32283],{"class":601},[51,35923,35924,35926,35928,35930],{"class":53,"line":296},[51,35925,226],{"class":69},[51,35927,32290],{"class":65},[51,35929,179],{"class":69},[51,35931,35932],{"class":65}," AlexNet\n",[51,35934,35935,35937,35939,35941],{"class":53,"line":307},[51,35936,226],{"class":69},[51,35938,31118],{"class":65},[51,35940,179],{"class":69},[51,35942,31123],{"class":65},[51,35944,35945],{"class":53,"line":324},[51,35946,206],{"emptyLinePlaceholder":205},[51,35948,35949],{"class":53,"line":329},[51,35950,206],{"emptyLinePlaceholder":205},[51,35952,35953],{"class":53,"line":334},[51,35954,32318],{"class":601},[51,35956,35957,35959,35961],{"class":53,"line":340},[51,35958,348],{"class":69},[51,35960,32325],{"class":57},[51,35962,32328],{"class":65},[51,35964,35965,35967,35969,35971,35973],{"class":53,"line":345},[51,35966,32333],{"class":65},[51,35968,70],{"class":69},[51,35970,31832],{"class":65},[51,35972,31840],{"class":61},[51,35974,31843],{"class":65},[51,35976,35977,35979,35981,35983],{"class":53,"line":357},[51,35978,32346],{"class":248},[51,35980,70],{"class":69},[51,35982,279],{"class":278},[51,35984,31843],{"class":65},[51,35986,35987,35989,35991,35993,35995,35997,35999],{"class":53,"line":366},[51,35988,32357],{"class":248},[51,35990,70],{"class":69},[51,35992,31869],{"class":65},[51,35994,31872],{"class":248},[51,35996,70],{"class":69},[51,35998,35824],{"class":278},[51,36000,31880],{"class":65},[51,36002,36003,36005,36007,36009],{"class":53,"line":383},[51,36004,32374],{"class":248},[51,36006,70],{"class":69},[51,36008,279],{"class":278},[51,36010,282],{"class":65},[51,36012,36013,36015,36017,36019,36021,36023,36025,36027,36029,36031,36033,36035,36037,36039,36041],{"class":53,"line":392},[51,36014,32385],{"class":65},[51,36016,70],{"class":69},[51,36018,32390],{"class":65},[51,36020,32393],{"class":278},[51,36022,546],{"class":65},[51,36024,32398],{"class":278},[51,36026,997],{"class":69},[51,36028,7742],{"class":278},[51,36030,32405],{"class":65},[51,36032,32393],{"class":278},[51,36034,546],{"class":65},[51,36036,32412],{"class":278},[51,36038,997],{"class":69},[51,36040,7742],{"class":278},[51,36042,32419],{"class":65},[51,36044,36045,36047,36049,36051,36053,36055],{"class":53,"line":403},[51,36046,32424],{"class":65},[51,36048,70],{"class":69},[51,36050,32429],{"class":65},[51,36052,31913],{"class":248},[51,36054,70],{"class":69},[51,36056,31918],{"class":65},[51,36058,36059,36061,36063,36065],{"class":53,"line":409},[51,36060,32440],{"class":248},[51,36062,70],{"class":69},[51,36064,32445],{"class":278},[51,36066,31843],{"class":65},[51,36068,36069,36071,36073,36075],{"class":53,"line":414},[51,36070,32452],{"class":248},[51,36072,70],{"class":69},[51,36074,279],{"class":278},[51,36076,31843],{"class":65},[51,36078,36079],{"class":53,"line":433},[51,36080,32463],{"class":601},[51,36082,36083,36085,36087,36089],{"class":53,"line":439},[51,36084,32468],{"class":248},[51,36086,70],{"class":69},[51,36088,937],{"class":278},[51,36090,282],{"class":65},[51,36092,36093,36095,36097,36099,36101,36103],{"class":53,"line":444},[51,36094,32479],{"class":65},[51,36096,70],{"class":69},[51,36098,31910],{"class":65},[51,36100,31913],{"class":248},[51,36102,70],{"class":69},[51,36104,32490],{"class":65},[51,36106,36107,36109,36111,36113],{"class":53,"line":453},[51,36108,32495],{"class":248},[51,36110,70],{"class":69},[51,36112,32445],{"class":278},[51,36114,31843],{"class":65},[51,36116,36117,36119,36121,36123],{"class":53,"line":2174},[51,36118,32506],{"class":248},[51,36120,70],{"class":69},[51,36122,279],{"class":278},[51,36124,31843],{"class":65},[51,36126,36127,36129,36131,36133],{"class":53,"line":2965},[51,36128,32517],{"class":248},[51,36130,70],{"class":69},[51,36132,937],{"class":278},[51,36134,282],{"class":65},[51,36136,36137,36139],{"class":53,"line":2979},[51,36138,4476],{"class":69},[51,36140,32530],{"class":65},[51,36142,36143],{"class":53,"line":2987},[51,36144,206],{"emptyLinePlaceholder":205},[51,36146,36147],{"class":53,"line":2992},[51,36148,32539],{"class":601},[51,36150,36151],{"class":53,"line":2998},[51,36152,32544],{"class":601},[51,36154,36155],{"class":53,"line":3004},[51,36156,206],{"emptyLinePlaceholder":205},[51,36158,36159],{"class":53,"line":3009},[51,36160,32553],{"class":601},[51,36162,36163,36165,36167],{"class":53,"line":8332},[51,36164,348],{"class":69},[51,36166,32560],{"class":57},[51,36168,32563],{"class":65},[51,36170,36171,36173,36175,36177,36179,36181,36183,36185,36187],{"class":53,"line":8356},[51,36172,31615],{"class":65},[51,36174,70],{"class":69},[51,36176,30830],{"class":65},[51,36178,31622],{"class":61},[51,36180,2102],{"class":69},[51,36182,31627],{"class":65},[51,36184,2099],{"class":69},[51,36186,32582],{"class":61},[51,36188,282],{"class":65},[51,36190,36191],{"class":53,"line":8361},[51,36192,206],{"emptyLinePlaceholder":205},[51,36194,36195],{"class":53,"line":8367},[51,36196,206],{"emptyLinePlaceholder":205},[51,36198,36199],{"class":53,"line":8394},[51,36200,32597],{"class":601},[51,36202,36203],{"class":53,"line":8399},[51,36204,32602],{"class":601},[51,36206,36207],{"class":53,"line":8405},[51,36208,32607],{"class":601},[51,36210,36211,36213,36215,36217,36219,36221,36223],{"class":53,"line":8417},[51,36212,32612],{"class":65},[51,36214,70],{"class":69},[51,36216,32617],{"class":65},[51,36218,32620],{"class":248},[51,36220,70],{"class":69},[51,36222,32625],{"class":278},[51,36224,282],{"class":65},[51,36226,36227],{"class":53,"line":8429},[51,36228,206],{"emptyLinePlaceholder":205},[51,36230,36231],{"class":53,"line":8441},[51,36232,32636],{"class":601},[51,36234,36235,36237,36239],{"class":53,"line":10100},[51,36236,32641],{"class":65},[51,36238,70],{"class":69},[51,36240,32646],{"class":65},[51,36242,36243],{"class":53,"line":10125},[51,36244,206],{"emptyLinePlaceholder":205},[51,36246,36247],{"class":53,"line":10148},[51,36248,32655],{"class":601},[51,36250,36251,36253,36255],{"class":53,"line":10172},[51,36252,31667],{"class":65},[51,36254,70],{"class":69},[51,36256,32664],{"class":65},[51,36258,36259],{"class":53,"line":10177},[51,36260,32669],{"class":601},[51,36262,36263],{"class":53,"line":10182},[51,36264,32674],{"class":601},[51,36266,36267],{"class":53,"line":10187},[51,36268,32679],{"class":601},[51,36270,36271,36273,36275],{"class":53,"line":10196},[51,36272,32684],{"class":65},[51,36274,70],{"class":69},[51,36276,32689],{"class":65},[51,36278,36279],{"class":53,"line":10201},[51,36280,206],{"emptyLinePlaceholder":205},[51,36282,36283],{"class":53,"line":10207},[51,36284,206],{"emptyLinePlaceholder":205},[51,36286,36287],{"class":53,"line":10228},[51,36288,32702],{"class":601},[51,36290,36291],{"class":53,"line":10234},[51,36292,32707],{"class":601},[51,36294,36295,36297,36299],{"class":53,"line":10248},[51,36296,32712],{"class":65},[51,36298,70],{"class":69},[51,36300,32717],{"class":278},[51,36302,36303],{"class":53,"line":10254},[51,36304,32722],{"class":601},[51,36306,36307,36309,36311],{"class":53,"line":10281},[51,36308,32727],{"class":65},[51,36310,70],{"class":69},[51,36312,32732],{"class":65},[51,36314,36315],{"class":53,"line":10290},[51,36316,32737],{"class":601},[51,36318,36319,36321,36323],{"class":53,"line":10296},[51,36320,32742],{"class":65},[51,36322,70],{"class":69},[51,36324,32732],{"class":65},[51,36326,36327],{"class":53,"line":10304},[51,36328,32751],{"class":601},[51,36330,36331,36333,36335],{"class":53,"line":10309},[51,36332,32756],{"class":65},[51,36334,70],{"class":69},[51,36336,32732],{"class":65},[51,36338,36339],{"class":53,"line":16987},[51,36340,32765],{"class":601},[51,36342,36343,36345,36347],{"class":53,"line":16993},[51,36344,32770],{"class":65},[51,36346,70],{"class":69},[51,36348,32732],{"class":65},[51,36350,36351],{"class":53,"line":17016},[51,36352,206],{"emptyLinePlaceholder":205},[51,36354,36355],{"class":53,"line":17022},[51,36356,32783],{"class":601},[51,36358,36359,36361,36363],{"class":53,"line":17045},[51,36360,32788],{"class":65},[51,36362,70],{"class":69},[51,36364,32793],{"class":65},[51,36366,36367],{"class":53,"line":17059},[51,36368,206],{"emptyLinePlaceholder":205},[51,36370,36371],{"class":53,"line":17079},[51,36372,206],{"emptyLinePlaceholder":205},[51,36374,36375],{"class":53,"line":17085},[51,36376,32806],{"class":601},[51,36378,36379,36381,36383,36385,36387],{"class":53,"line":17096},[51,36380,3588],{"class":69},[51,36382,32813],{"class":65},[51,36384,26425],{"class":69},[51,36386,32818],{"class":278},[51,36388,32821],{"class":65},[51,36390,36391,36393,36395,36397,36399,36401,36403,36405,36407,36409,36411],{"class":53,"line":17119},[51,36392,32826],{"class":278},[51,36394,546],{"class":65},[51,36396,32831],{"class":61},[51,36398,32834],{"class":278},[51,36400,1126],{"class":61},[51,36402,32834],{"class":278},[51,36404,793],{"class":61},[51,36406,32843],{"class":65},[51,36408,1074],{"class":69},[51,36410,759],{"class":278},[51,36412,30876],{"class":65},[51,36414,36415,36417,36419,36421,36423,36425],{"class":53,"line":17141},[51,36416,32826],{"class":278},[51,36418,546],{"class":65},[51,36420,32858],{"class":61},[51,36422,997],{"class":69},[51,36424,988],{"class":278},[51,36426,282],{"class":65},[51,36428,36429],{"class":53,"line":17146},[51,36430,206],{"emptyLinePlaceholder":205},[51,36432,36433],{"class":53,"line":17152},[51,36434,32873],{"class":601},[51,36436,36437],{"class":53,"line":17166},[51,36438,32878],{"class":601},[51,36440,36441,36443,36445],{"class":53,"line":17179},[51,36442,32883],{"class":65},[51,36444,70],{"class":69},[51,36446,32717],{"class":278},[51,36448,36449],{"class":53,"line":17184},[51,36450,32892],{"class":601},[51,36452,36453,36455,36457],{"class":53,"line":17198},[51,36454,32897],{"class":65},[51,36456,70],{"class":69},[51,36458,3472],{"class":278},[51,36460,36461],{"class":53,"line":17203},[51,36462,32906],{"class":601},[51,36464,36465,36467,36469],{"class":53,"line":17209},[51,36466,32911],{"class":65},[51,36468,70],{"class":69},[51,36470,32717],{"class":278},[51,36472,36473],{"class":53,"line":17214},[51,36474,32920],{"class":601},[51,36476,36477,36479,36481],{"class":53,"line":17228},[51,36478,32925],{"class":65},[51,36480,70],{"class":69},[51,36482,3472],{"class":278},[51,36484,36485],{"class":53,"line":17233},[51,36486,32934],{"class":601},[51,36488,36489,36491,36493],{"class":53,"line":17238},[51,36490,32939],{"class":65},[51,36492,70],{"class":69},[51,36494,3472],{"class":278},[51,36496,36497],{"class":53,"line":17252},[51,36498,32948],{"class":601},[51,36500,36501,36503,36505],{"class":53,"line":17264},[51,36502,32953],{"class":65},[51,36504,70],{"class":69},[51,36506,3472],{"class":278},[51,36508,36509],{"class":53,"line":17269},[51,36510,32962],{"class":601},[51,36512,36513,36515,36517,36519,36521],{"class":53,"line":17282},[51,36514,3790],{"class":69},[51,36516,31977],{"class":65},[51,36518,26425],{"class":69},[51,36520,31982],{"class":278},[51,36522,32975],{"class":65},[51,36524,36525],{"class":53,"line":17287},[51,36526,32980],{"class":601},[51,36528,36529,36531,36533],{"class":53,"line":17292},[51,36530,32985],{"class":65},[51,36532,70],{"class":69},[51,36534,32990],{"class":65},[51,36536,36537],{"class":53,"line":17297},[51,36538,32995],{"class":601},[51,36540,36541,36543,36545],{"class":53,"line":17310},[51,36542,33000],{"class":65},[51,36544,70],{"class":69},[51,36546,33005],{"class":65},[51,36548,36549],{"class":53,"line":17315},[51,36550,33011],{"class":601},[51,36552,36553],{"class":53,"line":33008},[51,36554,33017],{"class":65},[51,36556,36557],{"class":53,"line":33014},[51,36558,33023],{"class":601},[51,36560,36561],{"class":53,"line":33020},[51,36562,33029],{"class":601},[51,36564,36565,36567,36569],{"class":53,"line":33026},[51,36566,33035],{"class":65},[51,36568,70],{"class":69},[51,36570,33040],{"class":65},[51,36572,36573],{"class":53,"line":33032},[51,36574,33046],{"class":601},[51,36576,36577,36579,36581,36583,36585,36587,36589],{"class":53,"line":33043},[51,36578,33052],{"class":65},[51,36580,70],{"class":69},[51,36582,33057],{"class":65},[51,36584,33060],{"class":248},[51,36586,70],{"class":69},[51,36588,759],{"class":278},[51,36590,282],{"class":65},[51,36592,36593],{"class":53,"line":33049},[51,36594,33072],{"class":601},[51,36596,36597,36599,36601],{"class":53,"line":33069},[51,36598,33078],{"class":65},[51,36600,70],{"class":69},[51,36602,33083],{"class":65},[51,36604,36605],{"class":53,"line":33075},[51,36606,33089],{"class":601},[51,36608,36609],{"class":53,"line":33086},[51,36610,33095],{"class":65},[51,36612,36613],{"class":53,"line":33092},[51,36614,33101],{"class":601},[51,36616,36617],{"class":53,"line":33098},[51,36618,33107],{"class":65},[51,36620,36621],{"class":53,"line":33104},[51,36622,33113],{"class":601},[51,36624,36625],{"class":53,"line":33110},[51,36626,33119],{"class":65},[51,36628,36629],{"class":53,"line":33116},[51,36630,33125],{"class":601},[51,36632,36633,36635,36637,36639,36641,36643,36645],{"class":53,"line":33122},[51,36634,33131],{"class":65},[51,36636,9861],{"class":69},[51,36638,33136],{"class":65},[51,36640,997],{"class":69},[51,36642,33141],{"class":65},[51,36644,733],{"class":278},[51,36646,282],{"class":65},[51,36648,36649],{"class":53,"line":33128},[51,36650,33151],{"class":601},[51,36652,36653,36655,36657,36659,36661],{"class":53,"line":33148},[51,36654,33157],{"class":65},[51,36656,9861],{"class":69},[51,36658,33162],{"class":65},[51,36660,375],{"class":69},[51,36662,33167],{"class":65},[51,36664,36665],{"class":53,"line":33154},[51,36666,33173],{"class":601},[51,36668,36669,36671,36673,36675,36677],{"class":53,"line":33170},[51,36670,33179],{"class":65},[51,36672,9861],{"class":69},[51,36674,33141],{"class":65},[51,36676,733],{"class":278},[51,36678,282],{"class":65},[51,36680,36681],{"class":53,"line":33176},[51,36682,33193],{"class":601},[51,36684,36685,36687,36689,36691,36693],{"class":53,"line":33190},[51,36686,3790],{"class":69},[51,36688,33201],{"class":65},[51,36690,26425],{"class":69},[51,36692,31982],{"class":278},[51,36694,33208],{"class":65},[51,36696,36697],{"class":53,"line":33196},[51,36698,33214],{"class":601},[51,36700,36701,36703,36705],{"class":53,"line":33211},[51,36702,32985],{"class":65},[51,36704,70],{"class":69},[51,36706,32990],{"class":65},[51,36708,36709],{"class":53,"line":33217},[51,36710,33229],{"class":601},[51,36712,36713,36715,36717],{"class":53,"line":33226},[51,36714,33000],{"class":65},[51,36716,70],{"class":69},[51,36718,33005],{"class":65},[51,36720,36721],{"class":53,"line":33232},[51,36722,33244],{"class":601},[51,36724,36725],{"class":53,"line":33241},[51,36726,33250],{"class":65},[51,36728,36729],{"class":53,"line":33247},[51,36730,36731],{"class":601},"            # 验证时不计算梯度以节省内存\u002F计算\n",[51,36733,36734,36736],{"class":53,"line":33253},[51,36735,33256],{"class":69},[51,36737,33259],{"class":65},[51,36739,36740],{"class":53,"line":33262},[51,36741,33265],{"class":601},[51,36743,36744,36747,36749],{"class":53,"line":33268},[51,36745,36746],{"class":65},"                output",[51,36748,70],{"class":69},[51,36750,33040],{"class":65},[51,36752,36753],{"class":53,"line":33279},[51,36754,33282],{"class":601},[51,36756,36757,36760,36762,36764,36766,36768,36770],{"class":53,"line":33285},[51,36758,36759],{"class":65},"                pre_lab",[51,36761,70],{"class":69},[51,36763,33057],{"class":65},[51,36765,33060],{"class":248},[51,36767,70],{"class":69},[51,36769,759],{"class":278},[51,36771,282],{"class":65},[51,36773,36774],{"class":53,"line":33304},[51,36775,33307],{"class":601},[51,36777,36778,36781,36783],{"class":53,"line":33310},[51,36779,36780],{"class":65},"                val_batch_loss",[51,36782,70],{"class":69},[51,36784,33083],{"class":65},[51,36786,36787],{"class":53,"line":33321},[51,36788,33324],{"class":601},[51,36790,36791,36794,36796,36799,36801,36803,36805],{"class":53,"line":33327},[51,36792,36793],{"class":65},"                val_loss",[51,36795,9861],{"class":69},[51,36797,36798],{"class":65},"val_batch_loss.item()",[51,36800,997],{"class":69},[51,36802,33141],{"class":65},[51,36804,733],{"class":278},[51,36806,282],{"class":65},[51,36808,36809,36812,36814,36816,36818],{"class":53,"line":33347},[51,36810,36811],{"class":65},"                val_corrects",[51,36813,9861],{"class":69},[51,36815,33162],{"class":65},[51,36817,375],{"class":69},[51,36819,33167],{"class":65},[51,36821,36822],{"class":53,"line":33363},[51,36823,36824],{"class":601},"            # 当前用于验证的样本数量\n",[51,36826,36827,36830,36832,36834,36836],{"class":53,"line":33369},[51,36828,36829],{"class":65},"            val_num",[51,36831,9861],{"class":69},[51,36833,33141],{"class":65},[51,36835,733],{"class":278},[51,36837,282],{"class":65},[51,36839,36840],{"class":53,"line":33383},[51,36841,33386],{"class":601},[51,36843,36844],{"class":53,"line":33389},[51,36845,33392],{"class":601},[51,36847,36848,36850,36852],{"class":53,"line":33395},[51,36849,33398],{"class":65},[51,36851,1126],{"class":69},[51,36853,33403],{"class":65},[51,36855,36856],{"class":53,"line":33406},[51,36857,33409],{"class":601},[51,36859,36860],{"class":53,"line":33412},[51,36861,33415],{"class":601},[51,36863,36864,36866,36868],{"class":53,"line":33418},[51,36865,33421],{"class":65},[51,36867,1126],{"class":69},[51,36869,33403],{"class":65},[51,36871,36872],{"class":53,"line":33428},[51,36873,33431],{"class":601},[51,36875,36876,36878,36880],{"class":53,"line":33434},[51,36877,33437],{"class":65},[51,36879,1126],{"class":69},[51,36881,33442],{"class":65},[51,36883,36884],{"class":53,"line":33445},[51,36885,33448],{"class":601},[51,36887,36888,36890,36892],{"class":53,"line":33451},[51,36889,33454],{"class":65},[51,36891,1126],{"class":69},[51,36893,33442],{"class":65},[51,36895,36896],{"class":53,"line":33461},[51,36897,206],{"emptyLinePlaceholder":205},[51,36899,36900],{"class":53,"line":33466},[51,36901,33469],{"class":601},[51,36903,36904,36906,36908,36910,36912,36914,36916,36918,36920,36922,36924,36926,36928,36930,36932,36934,36936,36938,36940,36942],{"class":53,"line":33472},[51,36905,32826],{"class":278},[51,36907,546],{"class":65},[51,36909,3979],{"class":61},[51,36911,32834],{"class":278},[51,36913,33483],{"class":61},[51,36915,1438],{"class":278},[51,36917,33488],{"class":69},[51,36919,1488],{"class":278},[51,36921,33493],{"class":61},[51,36923,1438],{"class":278},[51,36925,33488],{"class":69},[51,36927,1488],{"class":278},[51,36929,3979],{"class":61},[51,36931,33504],{"class":65},[51,36933,1074],{"class":69},[51,36935,759],{"class":278},[51,36937,33511],{"class":65},[51,36939,1074],{"class":69},[51,36941,759],{"class":278},[51,36943,33518],{"class":65},[51,36945,36946,36948,36950,36952,36954,36956,36958,36960,36962,36964,36966,36968,36970,36972,36974,36976,36978,36980,36982,36984],{"class":53,"line":33521},[51,36947,32826],{"class":278},[51,36949,546],{"class":65},[51,36951,3979],{"class":61},[51,36953,32834],{"class":278},[51,36955,33532],{"class":61},[51,36957,1438],{"class":278},[51,36959,33488],{"class":69},[51,36961,1488],{"class":278},[51,36963,33541],{"class":61},[51,36965,1438],{"class":278},[51,36967,33488],{"class":69},[51,36969,1488],{"class":278},[51,36971,3979],{"class":61},[51,36973,33552],{"class":65},[51,36975,1074],{"class":69},[51,36977,759],{"class":278},[51,36979,33559],{"class":65},[51,36981,1074],{"class":69},[51,36983,759],{"class":278},[51,36985,33518],{"class":65},[51,36987,36988],{"class":53,"line":33568},[51,36989,206],{"emptyLinePlaceholder":205},[51,36991,36992],{"class":53,"line":33573},[51,36993,33576],{"class":601},[51,36995,36996,36998,37000,37002,37004,37006,37008],{"class":53,"line":33579},[51,36997,369],{"class":69},[51,36999,33584],{"class":65},[51,37001,1074],{"class":69},[51,37003,759],{"class":278},[51,37005,1482],{"class":65},[51,37007,1502],{"class":69},[51,37009,33595],{"class":65},[51,37011,37012],{"class":53,"line":33598},[51,37013,33601],{"class":601},[51,37015,37016,37018,37020,37022,37024,37026,37028],{"class":53,"line":33604},[51,37017,33607],{"class":65},[51,37019,584],{"class":278},[51,37021,70],{"class":69},[51,37023,33614],{"class":65},[51,37025,1074],{"class":69},[51,37027,759],{"class":278},[51,37029,33621],{"class":65},[51,37031,37032],{"class":53,"line":33624},[51,37033,33627],{"class":601},[51,37035,37036],{"class":53,"line":33630},[51,37037,33633],{"class":601},[51,37039,37040,37042,37044],{"class":53,"line":33636},[51,37041,33639],{"class":65},[51,37043,70],{"class":69},[51,37045,32689],{"class":65},[51,37047,37048],{"class":53,"line":33646},[51,37049,206],{"emptyLinePlaceholder":205},[51,37051,37052],{"class":53,"line":33651},[51,37053,33654],{"class":601},[51,37055,37056,37058,37060,37062,37064],{"class":53,"line":33657},[51,37057,33660],{"class":65},[51,37059,70],{"class":69},[51,37061,33665],{"class":65},[51,37063,1074],{"class":69},[51,37065,33670],{"class":65},[51,37067,37068,37070,37072,37074,37076,37078,37080,37082,37084,37086,37088,37090,37092,37094,37096,37098,37100,37102],{"class":53,"line":33673},[51,37069,32826],{"class":278},[51,37071,546],{"class":65},[51,37073,33680],{"class":61},[51,37075,1438],{"class":278},[51,37077,33685],{"class":69},[51,37079,1488],{"class":278},[51,37081,1086],{"class":61},[51,37083,1438],{"class":278},[51,37085,33685],{"class":69},[51,37087,1488],{"class":278},[51,37089,33698],{"class":61},[51,37091,33701],{"class":65},[51,37093,33704],{"class":69},[51,37095,1449],{"class":278},[51,37097,33709],{"class":65},[51,37099,870],{"class":69},[51,37101,1449],{"class":278},[51,37103,30876],{"class":65},[51,37105,37106],{"class":53,"line":33718},[51,37107,37108],{"class":601},"    # 选择最优参数并保存\n",[51,37110,37111],{"class":53,"line":33724},[51,37112,37113],{"class":601},"    # 保存最佳模型权重字典\n",[51,37115,37116,37119,37121],{"class":53,"line":33730},[51,37117,37118],{"class":65},"    torch.save(best_model_wts,",[51,37120,33742],{"class":61},[51,37122,282],{"class":65},[51,37124,37125],{"class":53,"line":33736},[51,37126,33762],{"class":601},[51,37128,37129,37131,37133,37135,37137,37139],{"class":53,"line":33747},[51,37130,33768],{"class":65},[51,37132,70],{"class":69},[51,37134,33773],{"class":65},[51,37136,33776],{"class":248},[51,37138,70],{"class":69},[51,37140,1955],{"class":65},[51,37142,37143,37145,37147,37149],{"class":53,"line":33753},[51,37144,33786],{"class":61},[51,37146,1401],{"class":65},[51,37148,33791],{"class":278},[51,37150,33794],{"class":65},[51,37152,37153,37155],{"class":53,"line":33759},[51,37154,33800],{"class":61},[51,37156,33803],{"class":65},[51,37158,37159,37161],{"class":53,"line":33765},[51,37160,33809],{"class":61},[51,37162,33812],{"class":65},[51,37164,37165,37167],{"class":53,"line":33783},[51,37166,33818],{"class":61},[51,37168,33821],{"class":65},[51,37170,37171,37173],{"class":53,"line":33797},[51,37172,33827],{"class":61},[51,37174,33830],{"class":65},[51,37176,37177],{"class":53,"line":33806},[51,37178,33836],{"class":65},[51,37180,37181],{"class":53,"line":33815},[51,37182,33842],{"class":601},[51,37184,37185,37187],{"class":53,"line":33824},[51,37186,4476],{"class":69},[51,37188,33850],{"class":65},[51,37190,37191],{"class":53,"line":33833},[51,37192,206],{"emptyLinePlaceholder":205},[51,37194,37195],{"class":53,"line":33839},[51,37196,33861],{"class":601},[51,37198,37199,37201,37203],{"class":53,"line":33845},[51,37200,348],{"class":69},[51,37202,33869],{"class":57},[51,37204,33872],{"class":65},[51,37206,37207],{"class":53,"line":33853},[51,37208,33878],{"class":601},[51,37210,37211,37213,37215,37217,37219,37221,37223,37225],{"class":53,"line":33858},[51,37212,33884],{"class":65},[51,37214,32069],{"class":248},[51,37216,70],{"class":69},[51,37218,546],{"class":65},[51,37220,1040],{"class":278},[51,37222,920],{"class":65},[51,37224,835],{"class":278},[51,37226,30876],{"class":65},[51,37228,37229],{"class":53,"line":33864},[51,37230,33904],{"class":601},[51,37232,37233],{"class":53,"line":33875},[51,37234,33910],{"class":601},[51,37236,37237],{"class":53,"line":33881},[51,37238,33916],{"class":601},[51,37240,37241,37243,37245,37247,37249,37251,37253],{"class":53,"line":33901},[51,37242,32103],{"class":65},[51,37244,759],{"class":278},[51,37246,920],{"class":65},[51,37248,620],{"class":278},[51,37250,920],{"class":65},[51,37252,759],{"class":278},[51,37254,282],{"class":65},[51,37256,37257],{"class":53,"line":33907},[51,37258,33939],{"class":601},[51,37260,37261],{"class":53,"line":33913},[51,37262,33945],{"class":601},[51,37264,37265],{"class":53,"line":33919},[51,37266,33951],{"class":601},[51,37268,37269],{"class":53,"line":33936},[51,37270,33957],{"class":601},[51,37272,37273],{"class":53,"line":33942},[51,37274,33963],{"class":601},[51,37276,37277,37279,37281,37283,37285,37287,37289,37291,37293],{"class":53,"line":33948},[51,37278,33969],{"class":65},[51,37280,33972],{"class":61},[51,37282,33975],{"class":65},[51,37284,33978],{"class":61},[51,37286,920],{"class":65},[51,37288,33983],{"class":248},[51,37290,70],{"class":69},[51,37292,33988],{"class":61},[51,37294,282],{"class":65},[51,37296,37297,37299,37301,37303,37305,37307,37309,37311,37313],{"class":53,"line":33954},[51,37298,33969],{"class":65},[51,37300,33972],{"class":61},[51,37302,34000],{"class":65},[51,37304,34003],{"class":61},[51,37306,920],{"class":65},[51,37308,33983],{"class":248},[51,37310,70],{"class":69},[51,37312,34012],{"class":61},[51,37314,282],{"class":65},[51,37316,37317],{"class":53,"line":33960},[51,37318,34020],{"class":601},[51,37320,37321],{"class":53,"line":33966},[51,37322,34026],{"class":65},[51,37324,37325],{"class":53,"line":33993},[51,37326,34032],{"class":601},[51,37328,37329,37331,37333],{"class":53,"line":34017},[51,37330,34038],{"class":65},[51,37332,34041],{"class":61},[51,37334,282],{"class":65},[51,37336,37337,37339,37341],{"class":53,"line":34023},[51,37338,34049],{"class":65},[51,37340,34052],{"class":61},[51,37342,282],{"class":65},[51,37344,37345],{"class":53,"line":34029},[51,37346,34060],{"class":601},[51,37348,37349,37351,37353,37355,37357,37359,37361],{"class":53,"line":34035},[51,37350,32103],{"class":65},[51,37352,759],{"class":278},[51,37354,920],{"class":65},[51,37356,620],{"class":278},[51,37358,920],{"class":65},[51,37360,620],{"class":278},[51,37362,282],{"class":65},[51,37364,37365,37367,37369,37371,37373,37375,37377,37379,37381],{"class":53,"line":34046},[51,37366,33969],{"class":65},[51,37368,33972],{"class":61},[51,37370,34087],{"class":65},[51,37372,33978],{"class":61},[51,37374,920],{"class":65},[51,37376,33983],{"class":248},[51,37378,70],{"class":69},[51,37380,34098],{"class":61},[51,37382,282],{"class":65},[51,37384,37385,37387,37389,37391,37393,37395,37397,37399,37401],{"class":53,"line":34057},[51,37386,33969],{"class":65},[51,37388,33972],{"class":61},[51,37390,34110],{"class":65},[51,37392,34003],{"class":61},[51,37394,920],{"class":65},[51,37396,33983],{"class":248},[51,37398,70],{"class":69},[51,37400,34121],{"class":61},[51,37402,282],{"class":65},[51,37404,37405],{"class":53,"line":34063},[51,37406,34129],{"class":601},[51,37408,37409],{"class":53,"line":34080},[51,37410,34026],{"class":65},[51,37412,37413,37415,37417],{"class":53,"line":34103},[51,37414,34038],{"class":65},[51,37416,33972],{"class":61},[51,37418,282],{"class":65},[51,37420,37421,37423,37425],{"class":53,"line":34126},[51,37422,34049],{"class":65},[51,37424,34151],{"class":61},[51,37426,282],{"class":65},[51,37428,37429],{"class":53,"line":34132},[51,37430,34159],{"class":65},[51,37432,37433],{"class":53,"line":34137},[51,37434,206],{"emptyLinePlaceholder":205},[51,37436,37437],{"class":53,"line":34146},[51,37438,34170],{"class":601},[51,37440,37441,37443,37445,37447,37449],{"class":53,"line":34156},[51,37442,1940],{"class":69},[51,37444,31598],{"class":278},[51,37446,375],{"class":69},[51,37448,31603],{"class":61},[51,37450,363],{"class":65},[51,37452,37453],{"class":53,"line":34162},[51,37454,34189],{"class":601},[51,37456,37457,37460,37462],{"class":53,"line":34167},[51,37458,37459],{"class":65},"    AlexNet",[51,37461,70],{"class":69},[51,37463,37464],{"class":65},"AlexNet()\n",[51,37466,37467,37469,37471],{"class":53,"line":34173},[51,37468,34206],{"class":65},[51,37470,70],{"class":69},[51,37472,34211],{"class":65},[51,37474,37475,37477,37479,37482,37484,37486,37488],{"class":53,"line":34186},[51,37476,33768],{"class":65},[51,37478,70],{"class":69},[51,37480,37481],{"class":65},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[51,37483,34224],{"class":248},[51,37485,70],{"class":69},[51,37487,1242],{"class":278},[51,37489,282],{"class":65},[51,37491,37492],{"class":53,"line":34192},[51,37493,34236],{"class":65},[19,37495,37496],{"start":202},[22,37497,34249],{},[41,37499,37501],{"className":170,"code":37500,"language":172,"meta":46,"style":46},"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",[48,37502,37503,37509,37519,37529,37539,37543,37553,37563,37574,37578,37582,37586,37594,37610,37620,37636,37646,37660,37664,37674,37684,37694,37700,37704,37708,37716,37720,37736,37744,37748,37752,37760,37768,37772,37776,37780,37784,37790,37794,37804,37812,37820,37824,37828,37832,37840,37844,37860,37864,37868,37872,37884,37888,37900,37904,37908,37920,37924,37934,37938,37942,37954,37958,37966,37970,37974,37982,37986,37994,37998,38002,38006,38010,38014,38030,38038,38042,38046,38094,38100,38104,38114,38122,38130,38134,38138,38142,38146,38154,38158,38174,38178,38186,38194],{"__ignoreMap":46},[51,37504,37505,37507],{"class":53,"line":54},[51,37506,179],{"class":69},[51,37508,30774],{"class":65},[51,37510,37511,37513,37515,37517],{"class":53,"line":185},[51,37512,179],{"class":69},[51,37514,31792],{"class":65},[51,37516,217],{"class":69},[51,37518,31797],{"class":65},[51,37520,37521,37523,37525,37527],{"class":53,"line":202},[51,37522,226],{"class":69},[51,37524,34277],{"class":65},[51,37526,179],{"class":69},[51,37528,34282],{"class":65},[51,37530,37531,37533,37535,37537],{"class":53,"line":209},[51,37532,226],{"class":69},[51,37534,31775],{"class":65},[51,37536,179],{"class":69},[51,37538,31780],{"class":65},[51,37540,37541],{"class":53,"line":223},[51,37542,34297],{"class":601},[51,37544,37545,37547,37549,37551],{"class":53,"line":237},[51,37546,226],{"class":69},[51,37548,31746],{"class":65},[51,37550,179],{"class":69},[51,37552,31751],{"class":65},[51,37554,37555,37557,37559,37561],{"class":53,"line":242},[51,37556,226],{"class":69},[51,37558,32290],{"class":65},[51,37560,179],{"class":69},[51,37562,35932],{"class":65},[51,37564,37565,37567,37570,37572],{"class":53,"line":257},[51,37566,226],{"class":69},[51,37568,37569],{"class":65}," 练习.AlexNet.model ",[51,37571,179],{"class":69},[51,37573,35932],{"class":65},[51,37575,37576],{"class":53,"line":262},[51,37577,206],{"emptyLinePlaceholder":205},[51,37579,37580],{"class":53,"line":285},[51,37581,206],{"emptyLinePlaceholder":205},[51,37583,37584],{"class":53,"line":296},[51,37585,34326],{"class":601},[51,37587,37588,37590,37592],{"class":53,"line":307},[51,37589,348],{"class":69},[51,37591,34333],{"class":57},[51,37593,32328],{"class":65},[51,37595,37596,37598,37600,37602,37604,37606,37608],{"class":53,"line":324},[51,37597,34340],{"class":65},[51,37599,70],{"class":69},[51,37601,31832],{"class":65},[51,37603,31835],{"class":248},[51,37605,70],{"class":69},[51,37607,31840],{"class":61},[51,37609,31843],{"class":65},[51,37611,37612,37614,37616,37618],{"class":53,"line":329},[51,37613,34357],{"class":248},[51,37615,70],{"class":69},[51,37617,34362],{"class":278},[51,37619,31843],{"class":65},[51,37621,37622,37624,37626,37628,37630,37632,37634],{"class":53,"line":334},[51,37623,34369],{"class":248},[51,37625,70],{"class":69},[51,37627,31869],{"class":65},[51,37629,31872],{"class":248},[51,37631,70],{"class":69},[51,37633,35824],{"class":278},[51,37635,31880],{"class":65},[51,37637,37638,37640,37642,37644],{"class":53,"line":340},[51,37639,34386],{"class":248},[51,37641,70],{"class":69},[51,37643,279],{"class":278},[51,37645,282],{"class":65},[51,37647,37648,37650,37652,37654,37656,37658],{"class":53,"line":345},[51,37649,34397],{"class":65},[51,37651,70],{"class":69},[51,37653,31910],{"class":65},[51,37655,31913],{"class":248},[51,37657,70],{"class":69},[51,37659,34408],{"class":65},[51,37661,37662],{"class":53,"line":357},[51,37663,34413],{"class":601},[51,37665,37666,37668,37670,37672],{"class":53,"line":366},[51,37667,34418],{"class":248},[51,37669,70],{"class":69},[51,37671,759],{"class":278},[51,37673,31843],{"class":65},[51,37675,37676,37678,37680,37682],{"class":53,"line":383},[51,37677,34429],{"class":248},[51,37679,70],{"class":69},[51,37681,279],{"class":278},[51,37683,31843],{"class":65},[51,37685,37686,37688,37690,37692],{"class":53,"line":392},[51,37687,34440],{"class":248},[51,37689,70],{"class":69},[51,37691,733],{"class":278},[51,37693,282],{"class":65},[51,37695,37696,37698],{"class":53,"line":403},[51,37697,4476],{"class":69},[51,37699,34453],{"class":65},[51,37701,37702],{"class":53,"line":409},[51,37703,206],{"emptyLinePlaceholder":205},[51,37705,37706],{"class":53,"line":414},[51,37707,34462],{"class":601},[51,37709,37710,37712,37714],{"class":53,"line":433},[51,37711,348],{"class":69},[51,37713,34469],{"class":57},[51,37715,34472],{"class":65},[51,37717,37718],{"class":53,"line":439},[51,37719,34477],{"class":601},[51,37721,37722,37724,37726,37728,37730,37732,37734],{"class":53,"line":444},[51,37723,31615],{"class":65},[51,37725,70],{"class":69},[51,37727,31622],{"class":61},[51,37729,2102],{"class":69},[51,37731,31627],{"class":65},[51,37733,2099],{"class":69},[51,37735,34494],{"class":61},[51,37737,37738,37740,37742],{"class":53,"line":453},[51,37739,31667],{"class":65},[51,37741,70],{"class":69},[51,37743,32664],{"class":65},[51,37745,37746],{"class":53,"line":2174},[51,37747,206],{"emptyLinePlaceholder":205},[51,37749,37750],{"class":53,"line":2965},[51,37751,34511],{"class":601},[51,37753,37754,37756,37758],{"class":53,"line":2979},[51,37755,34516],{"class":65},[51,37757,70],{"class":69},[51,37759,32717],{"class":278},[51,37761,37762,37764,37766],{"class":53,"line":2987},[51,37763,34525],{"class":65},[51,37765,70],{"class":69},[51,37767,3472],{"class":278},[51,37769,37770],{"class":53,"line":2992},[51,37771,206],{"emptyLinePlaceholder":205},[51,37773,37774],{"class":53,"line":2998},[51,37775,34538],{"class":601},[51,37777,37778],{"class":53,"line":3004},[51,37779,34543],{"class":601},[51,37781,37782],{"class":53,"line":3009},[51,37783,34548],{"class":601},[51,37785,37786,37788],{"class":53,"line":8332},[51,37787,34553],{"class":69},[51,37789,33259],{"class":65},[51,37791,37792],{"class":53,"line":8356},[51,37793,34560],{"class":601},[51,37795,37796,37798,37800,37802],{"class":53,"line":8361},[51,37797,3790],{"class":69},[51,37799,34567],{"class":65},[51,37801,26425],{"class":69},[51,37803,34572],{"class":65},[51,37805,37806,37808,37810],{"class":53,"line":8367},[51,37807,34577],{"class":65},[51,37809,70],{"class":69},[51,37811,34582],{"class":65},[51,37813,37814,37816,37818],{"class":53,"line":8394},[51,37815,34587],{"class":65},[51,37817,70],{"class":69},[51,37819,34592],{"class":65},[51,37821,37822],{"class":53,"line":8399},[51,37823,34597],{"class":601},[51,37825,37826],{"class":53,"line":8405},[51,37827,33250],{"class":65},[51,37829,37830],{"class":53,"line":8417},[51,37831,34606],{"class":601},[51,37833,37834,37836,37838],{"class":53,"line":8429},[51,37835,33035],{"class":65},[51,37837,70],{"class":69},[51,37839,34615],{"class":65},[51,37841,37842],{"class":53,"line":8441},[51,37843,34620],{"class":601},[51,37845,37846,37848,37850,37852,37854,37856,37858],{"class":53,"line":10100},[51,37847,33052],{"class":65},[51,37849,70],{"class":69},[51,37851,33057],{"class":65},[51,37853,33060],{"class":248},[51,37855,70],{"class":69},[51,37857,759],{"class":278},[51,37859,282],{"class":65},[51,37861,37862],{"class":53,"line":10125},[51,37863,34641],{"class":601},[51,37865,37866],{"class":53,"line":10148},[51,37867,34646],{"class":601},[51,37869,37870],{"class":53,"line":10172},[51,37871,34651],{"class":601},[51,37873,37874,37876,37878,37880,37882],{"class":53,"line":10177},[51,37875,34656],{"class":65},[51,37877,9861],{"class":69},[51,37879,33162],{"class":65},[51,37881,375],{"class":69},[51,37883,34665],{"class":65},[51,37885,37886],{"class":53,"line":10182},[51,37887,34670],{"class":601},[51,37889,37890,37892,37894,37896,37898],{"class":53,"line":10187},[51,37891,34675],{"class":65},[51,37893,9861],{"class":69},[51,37895,34680],{"class":65},[51,37897,733],{"class":278},[51,37899,282],{"class":65},[51,37901,37902],{"class":53,"line":10196},[51,37903,206],{"emptyLinePlaceholder":205},[51,37905,37906],{"class":53,"line":10201},[51,37907,34693],{"class":601},[51,37909,37910,37912,37914,37916,37918],{"class":53,"line":10207},[51,37911,34698],{"class":65},[51,37913,70],{"class":69},[51,37915,34703],{"class":65},[51,37917,1126],{"class":69},[51,37919,34708],{"class":65},[51,37921,37922],{"class":53,"line":10228},[51,37923,34713],{"class":601},[51,37925,37926,37928,37930,37932],{"class":53,"line":10234},[51,37927,32826],{"class":278},[51,37929,546],{"class":65},[51,37931,34722],{"class":61},[51,37933,34725],{"class":65},[51,37935,37936],{"class":53,"line":10248},[51,37937,206],{"emptyLinePlaceholder":205},[51,37939,37940],{"class":53,"line":10254},[51,37941,34734],{"class":601},[51,37943,37944,37946,37948,37950,37952],{"class":53,"line":10281},[51,37945,1940],{"class":69},[51,37947,31598],{"class":278},[51,37949,375],{"class":69},[51,37951,31603],{"class":61},[51,37953,363],{"class":65},[51,37955,37956],{"class":53,"line":10290},[51,37957,34751],{"class":601},[51,37959,37960,37962,37964],{"class":53,"line":10296},[51,37961,31667],{"class":65},[51,37963,70],{"class":69},[51,37965,37464],{"class":65},[51,37967,37968],{"class":53,"line":10304},[51,37969,34764],{"class":601},[51,37971,37972],{"class":53,"line":10309},[51,37973,34769],{"class":601},[51,37975,37976,37978,37980],{"class":53,"line":16987},[51,37977,34774],{"class":65},[51,37979,34777],{"class":61},[51,37981,30876],{"class":65},[51,37983,37984],{"class":53,"line":16993},[51,37985,34784],{"class":601},[51,37987,37988,37990,37992],{"class":53,"line":17016},[51,37989,34397],{"class":65},[51,37991,70],{"class":69},[51,37993,34793],{"class":65},[51,37995,37996],{"class":53,"line":17022},[51,37997,34798],{"class":601},[51,37999,38000],{"class":53,"line":17045},[51,38001,34803],{"class":65},[51,38003,38004],{"class":53,"line":17059},[51,38005,206],{"emptyLinePlaceholder":205},[51,38007,38008],{"class":53,"line":17079},[51,38009,34812],{"class":601},[51,38011,38012],{"class":53,"line":17085},[51,38013,34817],{"class":601},[51,38015,38016,38018,38020,38022,38024,38026,38028],{"class":53,"line":17096},[51,38017,31615],{"class":65},[51,38019,70],{"class":69},[51,38021,31622],{"class":61},[51,38023,2102],{"class":69},[51,38025,31627],{"class":65},[51,38027,2099],{"class":69},[51,38029,34494],{"class":61},[51,38031,38032,38034,38036],{"class":53,"line":17119},[51,38033,31667],{"class":65},[51,38035,70],{"class":69},[51,38037,32664],{"class":65},[51,38039,38040],{"class":53,"line":17141},[51,38041,34846],{"class":601},[51,38043,38044],{"class":53,"line":17146},[51,38045,34851],{"class":601},[51,38047,38048,38050,38052,38054,38056,38058,38060,38062,38064,38066,38068,38070,38072,38074,38076,38078,38080,38082,38084,38086,38088,38090,38092],{"class":53,"line":17152},[51,38049,34856],{"class":65},[51,38051,70],{"class":69},[51,38053,1432],{"class":65},[51,38055,34863],{"class":61},[51,38057,920],{"class":65},[51,38059,34868],{"class":61},[51,38061,920],{"class":65},[51,38063,34873],{"class":61},[51,38065,920],{"class":65},[51,38067,34878],{"class":61},[51,38069,920],{"class":65},[51,38071,34883],{"class":61},[51,38073,920],{"class":65},[51,38075,34888],{"class":61},[51,38077,920],{"class":65},[51,38079,34893],{"class":61},[51,38081,920],{"class":65},[51,38083,34898],{"class":61},[51,38085,920],{"class":65},[51,38087,34903],{"class":61},[51,38089,920],{"class":65},[51,38091,34908],{"class":61},[51,38093,33621],{"class":65},[51,38095,38096,38098],{"class":53,"line":17166},[51,38097,34553],{"class":69},[51,38099,33259],{"class":65},[51,38101,38102],{"class":53,"line":17179},[51,38103,34921],{"class":601},[51,38105,38106,38108,38110,38112],{"class":53,"line":17184},[51,38107,3790],{"class":69},[51,38109,34928],{"class":65},[51,38111,26425],{"class":69},[51,38113,34572],{"class":65},[51,38115,38116,38118,38120],{"class":53,"line":17198},[51,38117,32985],{"class":65},[51,38119,70],{"class":69},[51,38121,32990],{"class":65},[51,38123,38124,38126,38128],{"class":53,"line":17203},[51,38125,33000],{"class":65},[51,38127,70],{"class":69},[51,38129,33005],{"class":65},[51,38131,38132],{"class":53,"line":17209},[51,38133,206],{"emptyLinePlaceholder":205},[51,38135,38136],{"class":53,"line":17214},[51,38137,34957],{"class":601},[51,38139,38140],{"class":53,"line":17228},[51,38141,33250],{"class":65},[51,38143,38144],{"class":53,"line":17233},[51,38145,34966],{"class":601},[51,38147,38148,38150,38152],{"class":53,"line":17238},[51,38149,33035],{"class":65},[51,38151,70],{"class":69},[51,38153,33040],{"class":65},[51,38155,38156],{"class":53,"line":17252},[51,38157,34979],{"class":601},[51,38159,38160,38162,38164,38166,38168,38170,38172],{"class":53,"line":17264},[51,38161,33052],{"class":65},[51,38163,70],{"class":69},[51,38165,33057],{"class":65},[51,38167,33060],{"class":248},[51,38169,70],{"class":69},[51,38171,759],{"class":278},[51,38173,282],{"class":65},[51,38175,38176],{"class":53,"line":17269},[51,38177,35000],{"class":601},[51,38179,38180,38182,38184],{"class":53,"line":17282},[51,38181,35005],{"class":65},[51,38183,70],{"class":69},[51,38185,35010],{"class":65},[51,38187,38188,38190,38192],{"class":53,"line":17287},[51,38189,35015],{"class":65},[51,38191,70],{"class":69},[51,38193,35020],{"class":65},[51,38195,38196,38198,38200,38202,38204,38206,38208,38210],{"class":53,"line":17292},[51,38197,35025],{"class":278},[51,38199,546],{"class":65},[51,38201,35030],{"class":61},[51,38203,35033],{"class":65},[51,38205,35036],{"class":61},[51,38207,920],{"class":65},[51,38209,35041],{"class":61},[51,38211,35044],{"class":65},[513,38213,38215],{"id":38214},"_22vgg","2.2.VGG",[22381,38217,38219],{"id":38218},"_221原理","2.2.1.原理",[10,38221,38222],{},[460,38223],{"alt":46,"src":38224},"\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",[10,38226,38227],{},[460,38228],{"alt":46,"src":38229},"\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",[10,38231,38232],{},[460,38233],{"alt":46,"src":38234},"\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",[10,38236,38237],{},"参数详细描述：",[10,38239,38240],{},[460,38241],{"alt":46,"src":38242},"\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",[10,38244,38245],{},[460,38246],{"alt":46,"src":38247},"\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",[10,38249,38250],{},[460,38251],{"alt":46,"src":38252},"\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",[10,38254,38255],{},[460,38256],{"alt":46,"src":38257},"\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",[10,38259,38260],{},[460,38261],{"alt":46,"src":38262},"\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",[22381,38264,38266],{"id":38265},"_222代码实现","2.2.2.代码实现",[19,38268,38269],{},[22,38270,38271],{},"网络搭建",[41,38273,38275],{"className":170,"code":38274,"language":172,"meta":46,"style":46},"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",[48,38276,38277,38283,38295,38305,38315,38319,38336,38344,38363,38368,38373,38385,38422,38427,38463,38467,38496,38501,38506,38517,38553,38557,38593,38597,38625,38629,38634,38645,38681,38685,38721,38725,38761,38765,38793,38797,38802,38813,38850,38854,38890,38894,38930,38934,38962,38966,38971,38982,39018,39022,39058,39062,39098,39102,39130,39134,39139,39150,39155,39160,39165,39186,39190,39202,39206,39218,39222,39226,39231,39236,39251,39256,39266,39271,39286,39291,39310,39315,39324,39329,39339,39344,39349,39363,39368,39382,39390,39394,39398,39406,39417,39428,39439,39450,39461,39472,39478,39482,39487,39500,39520,39526,39535],{"__ignoreMap":46},[51,38278,38279,38281],{"class":53,"line":54},[51,38280,179],{"class":69},[51,38282,30774],{"class":65},[51,38284,38285,38287,38290,38292],{"class":53,"line":185},[51,38286,226],{"class":69},[51,38288,38289],{"class":65}," sympy.core.sympify ",[51,38291,179],{"class":69},[51,38293,38294],{"class":65}," kernS\n",[51,38296,38297,38299,38301,38303],{"class":53,"line":202},[51,38298,226],{"class":69},[51,38300,31118],{"class":65},[51,38302,179],{"class":69},[51,38304,31123],{"class":65},[51,38306,38307,38309,38311,38313],{"class":53,"line":209},[51,38308,226],{"class":69},[51,38310,31135],{"class":65},[51,38312,179],{"class":69},[51,38314,31140],{"class":65},[51,38316,38317],{"class":53,"line":223},[51,38318,206],{"emptyLinePlaceholder":205},[51,38320,38321,38323,38326,38328,38330,38332,38334],{"class":53,"line":237},[51,38322,15078],{"class":69},[51,38324,38325],{"class":57}," VGG16",[51,38327,546],{"class":65},[51,38329,31156],{"class":57},[51,38331,1100],{"class":65},[51,38333,31161],{"class":57},[51,38335,31164],{"class":65},[51,38337,38338,38340,38342],{"class":53,"line":242},[51,38339,31179],{"class":69},[51,38341,31182],{"class":278},[51,38343,31185],{"class":65},[51,38345,38346,38348,38350,38353,38355,38357,38359,38361],{"class":53,"line":257},[51,38347,31195],{"class":278},[51,38349,546],{"class":65},[51,38351,38352],{"class":278},"VGG16",[51,38354,12819],{"class":65},[51,38356,31201],{"class":278},[51,38358,31204],{"class":65},[51,38360,31207],{"class":278},[51,38362,2366],{"class":65},[51,38364,38365],{"class":53,"line":262},[51,38366,38367],{"class":601},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[51,38369,38370],{"class":53,"line":285},[51,38371,38372],{"class":601},"        # 这里用的是灰度图\n",[51,38374,38375,38377,38380,38382],{"class":53,"line":296},[51,38376,31223],{"class":278},[51,38378,38379],{"class":65},".block1",[51,38381,70],{"class":69},[51,38383,38384],{"class":65},"nn.Sequential(\n",[51,38386,38387,38390,38392,38394,38396,38398,38400,38402,38404,38406,38408,38410,38412,38414,38416,38418,38420],{"class":53,"line":307},[51,38388,38389],{"class":65},"            nn.Conv2d(",[51,38391,31234],{"class":248},[51,38393,70],{"class":69},[51,38395,759],{"class":278},[51,38397,920],{"class":65},[51,38399,31243],{"class":248},[51,38401,70],{"class":69},[51,38403,745],{"class":278},[51,38405,920],{"class":65},[51,38407,31252],{"class":248},[51,38409,70],{"class":69},[51,38411,614],{"class":278},[51,38413,920],{"class":65},[51,38415,31261],{"class":248},[51,38417,70],{"class":69},[51,38419,759],{"class":278},[51,38421,321],{"class":65},[51,38423,38424],{"class":53,"line":324},[51,38425,38426],{"class":65},"            nn.ReLU(),\n",[51,38428,38429,38431,38433,38435,38437,38439,38441,38443,38445,38447,38449,38451,38453,38455,38457,38459,38461],{"class":53,"line":329},[51,38430,38389],{"class":65},[51,38432,31234],{"class":248},[51,38434,70],{"class":69},[51,38436,745],{"class":278},[51,38438,920],{"class":65},[51,38440,31243],{"class":248},[51,38442,70],{"class":69},[51,38444,745],{"class":278},[51,38446,920],{"class":65},[51,38448,31252],{"class":248},[51,38450,70],{"class":69},[51,38452,614],{"class":278},[51,38454,920],{"class":65},[51,38456,31261],{"class":248},[51,38458,70],{"class":69},[51,38460,759],{"class":278},[51,38462,321],{"class":65},[51,38464,38465],{"class":53,"line":334},[51,38466,38426],{"class":65},[51,38468,38469,38472,38474,38476,38478,38480,38482,38484,38486,38488,38490,38492,38494],{"class":53,"line":340},[51,38470,38471],{"class":65},"            nn.MaxPool2d(",[51,38473,31252],{"class":248},[51,38475,70],{"class":69},[51,38477,620],{"class":278},[51,38479,920],{"class":65},[51,38481,31307],{"class":248},[51,38483,70],{"class":69},[51,38485,620],{"class":278},[51,38487,920],{"class":65},[51,38489,31261],{"class":248},[51,38491,70],{"class":69},[51,38493,733],{"class":278},[51,38495,282],{"class":65},[51,38497,38498],{"class":53,"line":345},[51,38499,38500],{"class":65},"        )\n",[51,38502,38503],{"class":53,"line":357},[51,38504,38505],{"class":601},"        # 第二层\n",[51,38507,38508,38510,38513,38515],{"class":53,"line":366},[51,38509,31223],{"class":278},[51,38511,38512],{"class":65},".block2",[51,38514,70],{"class":69},[51,38516,38384],{"class":65},[51,38518,38519,38521,38523,38525,38527,38529,38531,38533,38535,38537,38539,38541,38543,38545,38547,38549,38551],{"class":53,"line":383},[51,38520,38389],{"class":65},[51,38522,31234],{"class":248},[51,38524,70],{"class":69},[51,38526,745],{"class":278},[51,38528,920],{"class":65},[51,38530,31243],{"class":248},[51,38532,70],{"class":69},[51,38534,32445],{"class":278},[51,38536,920],{"class":65},[51,38538,31252],{"class":248},[51,38540,70],{"class":69},[51,38542,614],{"class":278},[51,38544,920],{"class":65},[51,38546,31261],{"class":248},[51,38548,70],{"class":69},[51,38550,759],{"class":278},[51,38552,321],{"class":65},[51,38554,38555],{"class":53,"line":392},[51,38556,38426],{"class":65},[51,38558,38559,38561,38563,38565,38567,38569,38571,38573,38575,38577,38579,38581,38583,38585,38587,38589,38591],{"class":53,"line":403},[51,38560,38389],{"class":65},[51,38562,31234],{"class":248},[51,38564,70],{"class":69},[51,38566,32445],{"class":278},[51,38568,920],{"class":65},[51,38570,31243],{"class":248},[51,38572,70],{"class":69},[51,38574,32445],{"class":278},[51,38576,920],{"class":65},[51,38578,31252],{"class":248},[51,38580,70],{"class":69},[51,38582,614],{"class":278},[51,38584,920],{"class":65},[51,38586,31261],{"class":248},[51,38588,70],{"class":69},[51,38590,759],{"class":278},[51,38592,321],{"class":65},[51,38594,38595],{"class":53,"line":409},[51,38596,38426],{"class":65},[51,38598,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623],{"class":53,"line":414},[51,38600,38471],{"class":65},[51,38602,31252],{"class":248},[51,38604,70],{"class":69},[51,38606,620],{"class":278},[51,38608,920],{"class":65},[51,38610,31307],{"class":248},[51,38612,70],{"class":69},[51,38614,620],{"class":278},[51,38616,920],{"class":65},[51,38618,31261],{"class":248},[51,38620,70],{"class":69},[51,38622,733],{"class":278},[51,38624,282],{"class":65},[51,38626,38627],{"class":53,"line":433},[51,38628,38500],{"class":65},[51,38630,38631],{"class":53,"line":439},[51,38632,38633],{"class":601},"        # 第三层\n",[51,38635,38636,38638,38641,38643],{"class":53,"line":444},[51,38637,31223],{"class":278},[51,38639,38640],{"class":65},".block3",[51,38642,70],{"class":69},[51,38644,38384],{"class":65},[51,38646,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673,38675,38677,38679],{"class":53,"line":453},[51,38648,38389],{"class":65},[51,38650,31234],{"class":248},[51,38652,70],{"class":69},[51,38654,32445],{"class":278},[51,38656,920],{"class":65},[51,38658,31243],{"class":248},[51,38660,70],{"class":69},[51,38662,35245],{"class":278},[51,38664,920],{"class":65},[51,38666,31252],{"class":248},[51,38668,70],{"class":69},[51,38670,614],{"class":278},[51,38672,920],{"class":65},[51,38674,31261],{"class":248},[51,38676,70],{"class":69},[51,38678,759],{"class":278},[51,38680,321],{"class":65},[51,38682,38683],{"class":53,"line":2174},[51,38684,38426],{"class":65},[51,38686,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719],{"class":53,"line":2965},[51,38688,38389],{"class":65},[51,38690,31234],{"class":248},[51,38692,70],{"class":69},[51,38694,35245],{"class":278},[51,38696,920],{"class":65},[51,38698,31243],{"class":248},[51,38700,70],{"class":69},[51,38702,35245],{"class":278},[51,38704,920],{"class":65},[51,38706,31252],{"class":248},[51,38708,70],{"class":69},[51,38710,614],{"class":278},[51,38712,920],{"class":65},[51,38714,31261],{"class":248},[51,38716,70],{"class":69},[51,38718,759],{"class":278},[51,38720,321],{"class":65},[51,38722,38723],{"class":53,"line":2979},[51,38724,38426],{"class":65},[51,38726,38727,38729,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759],{"class":53,"line":2987},[51,38728,38389],{"class":65},[51,38730,31234],{"class":248},[51,38732,70],{"class":69},[51,38734,35245],{"class":278},[51,38736,920],{"class":65},[51,38738,31243],{"class":248},[51,38740,70],{"class":69},[51,38742,35245],{"class":278},[51,38744,920],{"class":65},[51,38746,31252],{"class":248},[51,38748,70],{"class":69},[51,38750,614],{"class":278},[51,38752,920],{"class":65},[51,38754,31261],{"class":248},[51,38756,70],{"class":69},[51,38758,759],{"class":278},[51,38760,321],{"class":65},[51,38762,38763],{"class":53,"line":2992},[51,38764,38426],{"class":65},[51,38766,38767,38769,38771,38773,38775,38777,38779,38781,38783,38785,38787,38789,38791],{"class":53,"line":2998},[51,38768,38471],{"class":65},[51,38770,31252],{"class":248},[51,38772,70],{"class":69},[51,38774,620],{"class":278},[51,38776,920],{"class":65},[51,38778,31307],{"class":248},[51,38780,70],{"class":69},[51,38782,620],{"class":278},[51,38784,920],{"class":65},[51,38786,31261],{"class":248},[51,38788,70],{"class":69},[51,38790,733],{"class":278},[51,38792,282],{"class":65},[51,38794,38795],{"class":53,"line":3004},[51,38796,38500],{"class":65},[51,38798,38799],{"class":53,"line":3009},[51,38800,38801],{"class":601},"        # 第四层\n",[51,38803,38804,38806,38809,38811],{"class":53,"line":8332},[51,38805,31223],{"class":278},[51,38807,38808],{"class":65},".block4",[51,38810,70],{"class":69},[51,38812,38384],{"class":65},[51,38814,38815,38817,38819,38821,38823,38825,38827,38829,38832,38834,38836,38838,38840,38842,38844,38846,38848],{"class":53,"line":8356},[51,38816,38389],{"class":65},[51,38818,31234],{"class":248},[51,38820,70],{"class":69},[51,38822,35245],{"class":278},[51,38824,920],{"class":65},[51,38826,31243],{"class":248},[51,38828,70],{"class":69},[51,38830,38831],{"class":278},"512",[51,38833,920],{"class":65},[51,38835,31252],{"class":248},[51,38837,70],{"class":69},[51,38839,614],{"class":278},[51,38841,920],{"class":65},[51,38843,31261],{"class":248},[51,38845,70],{"class":69},[51,38847,759],{"class":278},[51,38849,321],{"class":65},[51,38851,38852],{"class":53,"line":8361},[51,38853,38426],{"class":65},[51,38855,38856,38858,38860,38862,38864,38866,38868,38870,38872,38874,38876,38878,38880,38882,38884,38886,38888],{"class":53,"line":8367},[51,38857,38389],{"class":65},[51,38859,31234],{"class":248},[51,38861,70],{"class":69},[51,38863,38831],{"class":278},[51,38865,920],{"class":65},[51,38867,31243],{"class":248},[51,38869,70],{"class":69},[51,38871,38831],{"class":278},[51,38873,920],{"class":65},[51,38875,31252],{"class":248},[51,38877,70],{"class":69},[51,38879,614],{"class":278},[51,38881,920],{"class":65},[51,38883,31261],{"class":248},[51,38885,70],{"class":69},[51,38887,759],{"class":278},[51,38889,321],{"class":65},[51,38891,38892],{"class":53,"line":8394},[51,38893,38426],{"class":65},[51,38895,38896,38898,38900,38902,38904,38906,38908,38910,38912,38914,38916,38918,38920,38922,38924,38926,38928],{"class":53,"line":8399},[51,38897,38389],{"class":65},[51,38899,31234],{"class":248},[51,38901,70],{"class":69},[51,38903,38831],{"class":278},[51,38905,920],{"class":65},[51,38907,31243],{"class":248},[51,38909,70],{"class":69},[51,38911,38831],{"class":278},[51,38913,920],{"class":65},[51,38915,31252],{"class":248},[51,38917,70],{"class":69},[51,38919,614],{"class":278},[51,38921,920],{"class":65},[51,38923,31261],{"class":248},[51,38925,70],{"class":69},[51,38927,759],{"class":278},[51,38929,321],{"class":65},[51,38931,38932],{"class":53,"line":8405},[51,38933,38426],{"class":65},[51,38935,38936,38938,38940,38942,38944,38946,38948,38950,38952,38954,38956,38958,38960],{"class":53,"line":8417},[51,38937,38471],{"class":65},[51,38939,31252],{"class":248},[51,38941,70],{"class":69},[51,38943,620],{"class":278},[51,38945,920],{"class":65},[51,38947,31307],{"class":248},[51,38949,70],{"class":69},[51,38951,620],{"class":278},[51,38953,920],{"class":65},[51,38955,31261],{"class":248},[51,38957,70],{"class":69},[51,38959,733],{"class":278},[51,38961,282],{"class":65},[51,38963,38964],{"class":53,"line":8429},[51,38965,38500],{"class":65},[51,38967,38968],{"class":53,"line":8441},[51,38969,38970],{"class":601},"        # 第五层\n",[51,38972,38973,38975,38978,38980],{"class":53,"line":10100},[51,38974,31223],{"class":278},[51,38976,38977],{"class":65},".block5",[51,38979,70],{"class":69},[51,38981,38384],{"class":65},[51,38983,38984,38986,38988,38990,38992,38994,38996,38998,39000,39002,39004,39006,39008,39010,39012,39014,39016],{"class":53,"line":10125},[51,38985,38389],{"class":65},[51,38987,31234],{"class":248},[51,38989,70],{"class":69},[51,38991,38831],{"class":278},[51,38993,920],{"class":65},[51,38995,31243],{"class":248},[51,38997,70],{"class":69},[51,38999,38831],{"class":278},[51,39001,920],{"class":65},[51,39003,31252],{"class":248},[51,39005,70],{"class":69},[51,39007,614],{"class":278},[51,39009,920],{"class":65},[51,39011,31261],{"class":248},[51,39013,70],{"class":69},[51,39015,759],{"class":278},[51,39017,321],{"class":65},[51,39019,39020],{"class":53,"line":10148},[51,39021,38426],{"class":65},[51,39023,39024,39026,39028,39030,39032,39034,39036,39038,39040,39042,39044,39046,39048,39050,39052,39054,39056],{"class":53,"line":10172},[51,39025,38389],{"class":65},[51,39027,31234],{"class":248},[51,39029,70],{"class":69},[51,39031,38831],{"class":278},[51,39033,920],{"class":65},[51,39035,31243],{"class":248},[51,39037,70],{"class":69},[51,39039,38831],{"class":278},[51,39041,920],{"class":65},[51,39043,31252],{"class":248},[51,39045,70],{"class":69},[51,39047,614],{"class":278},[51,39049,920],{"class":65},[51,39051,31261],{"class":248},[51,39053,70],{"class":69},[51,39055,759],{"class":278},[51,39057,321],{"class":65},[51,39059,39060],{"class":53,"line":10177},[51,39061,38426],{"class":65},[51,39063,39064,39066,39068,39070,39072,39074,39076,39078,39080,39082,39084,39086,39088,39090,39092,39094,39096],{"class":53,"line":10182},[51,39065,38389],{"class":65},[51,39067,31234],{"class":248},[51,39069,70],{"class":69},[51,39071,38831],{"class":278},[51,39073,920],{"class":65},[51,39075,31243],{"class":248},[51,39077,70],{"class":69},[51,39079,38831],{"class":278},[51,39081,920],{"class":65},[51,39083,31252],{"class":248},[51,39085,70],{"class":69},[51,39087,614],{"class":278},[51,39089,920],{"class":65},[51,39091,31261],{"class":248},[51,39093,70],{"class":69},[51,39095,759],{"class":278},[51,39097,321],{"class":65},[51,39099,39100],{"class":53,"line":10187},[51,39101,38426],{"class":65},[51,39103,39104,39106,39108,39110,39112,39114,39116,39118,39120,39122,39124,39126,39128],{"class":53,"line":10196},[51,39105,38471],{"class":65},[51,39107,31252],{"class":248},[51,39109,70],{"class":69},[51,39111,620],{"class":278},[51,39113,920],{"class":65},[51,39115,31307],{"class":248},[51,39117,70],{"class":69},[51,39119,620],{"class":278},[51,39121,920],{"class":65},[51,39123,31261],{"class":248},[51,39125,70],{"class":69},[51,39127,733],{"class":278},[51,39129,282],{"class":65},[51,39131,39132],{"class":53,"line":10201},[51,39133,38500],{"class":65},[51,39135,39136],{"class":53,"line":10207},[51,39137,39138],{"class":601},"        # 全连接层\n",[51,39140,39141,39143,39146,39148],{"class":53,"line":10228},[51,39142,31223],{"class":278},[51,39144,39145],{"class":65},".block6",[51,39147,70],{"class":69},[51,39149,38384],{"class":65},[51,39151,39152],{"class":53,"line":10234},[51,39153,39154],{"class":601},"            # 平展操作\n",[51,39156,39157],{"class":53,"line":10248},[51,39158,39159],{"class":601},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[51,39161,39162],{"class":53,"line":10254},[51,39163,39164],{"class":65},"            nn.Flatten(),\n",[51,39166,39167,39170,39172,39174,39176,39178,39180,39182,39184],{"class":53,"line":10281},[51,39168,39169],{"class":65},"            nn.Linear(",[51,39171,911],{"class":278},[51,39173,997],{"class":69},[51,39175,911],{"class":278},[51,39177,997],{"class":69},[51,39179,38831],{"class":278},[51,39181,920],{"class":65},[51,39183,35245],{"class":278},[51,39185,321],{"class":65},[51,39187,39188],{"class":53,"line":10290},[51,39189,38426],{"class":65},[51,39191,39192,39194,39196,39198,39200],{"class":53,"line":10296},[51,39193,39169],{"class":65},[51,39195,35245],{"class":278},[51,39197,920],{"class":65},[51,39199,32445],{"class":278},[51,39201,321],{"class":65},[51,39203,39204],{"class":53,"line":10304},[51,39205,38426],{"class":65},[51,39207,39208,39210,39212,39214,39216],{"class":53,"line":10309},[51,39209,39169],{"class":65},[51,39211,32445],{"class":278},[51,39213,920],{"class":65},[51,39215,988],{"class":278},[51,39217,282],{"class":65},[51,39219,39220],{"class":53,"line":16987},[51,39221,38500],{"class":65},[51,39223,39224],{"class":53,"line":16993},[51,39225,206],{"emptyLinePlaceholder":205},[51,39227,39228],{"class":53,"line":17016},[51,39229,39230],{"class":601},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[51,39232,39233],{"class":53,"line":17022},[51,39234,39235],{"class":601},"        # 循环遍历模型\n",[51,39237,39238,39240,39243,39245,39248],{"class":53,"line":17045},[51,39239,3790],{"class":69},[51,39241,39242],{"class":65}," m ",[51,39244,26425],{"class":69},[51,39246,39247],{"class":278}," self",[51,39249,39250],{"class":65},".modules():\n",[51,39252,39253],{"class":53,"line":17059},[51,39254,39255],{"class":601},"            # print(m)\n",[51,39257,39258,39260,39263],{"class":53,"line":17079},[51,39259,5027],{"class":69},[51,39261,39262],{"class":278}," isinstance",[51,39264,39265],{"class":65},"(m,nn.Conv2d):\n",[51,39267,39268],{"class":53,"line":17085},[51,39269,39270],{"class":601},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[51,39272,39273,39276,39279,39281,39284],{"class":53,"line":17096},[51,39274,39275],{"class":65},"                nn.init.kaiming_normal_(m.weight,",[51,39277,39278],{"class":248},"nonlinearity",[51,39280,70],{"class":69},[51,39282,39283],{"class":61},"'relu'",[51,39285,282],{"class":65},[51,39287,39288],{"class":53,"line":17119},[51,39289,39290],{"class":601},"                # 判断b参数是否存在\n",[51,39292,39293,39296,39299,39302,39305,39308],{"class":53,"line":17141},[51,39294,39295],{"class":69},"                if",[51,39297,39298],{"class":65}," m.bias ",[51,39300,39301],{"class":69},"is",[51,39303,39304],{"class":69}," not",[51,39306,39307],{"class":278}," None",[51,39309,363],{"class":65},[51,39311,39312],{"class":53,"line":17146},[51,39313,39314],{"class":601},"                    # 如果参数不存在的化初始化b=0\n",[51,39316,39317,39320,39322],{"class":53,"line":17152},[51,39318,39319],{"class":65},"                    nn.init.constant_(m.bias,",[51,39321,733],{"class":278},[51,39323,282],{"class":65},[51,39325,39326],{"class":53,"line":17166},[51,39327,39328],{"class":601},"            # 全连接层初始化\n",[51,39330,39331,39334,39336],{"class":53,"line":17179},[51,39332,39333],{"class":69},"            elif",[51,39335,39262],{"class":278},[51,39337,39338],{"class":65},"(m,nn.Linear):\n",[51,39340,39341],{"class":53,"line":17184},[51,39342,39343],{"class":601},"                # 这个初始化方法是利用的是正太分布的方式\n",[51,39345,39346],{"class":53,"line":17198},[51,39347,39348],{"class":601},"                # 均值为0，方差为0.01\n",[51,39350,39351,39354,39356,39358,39361],{"class":53,"line":17203},[51,39352,39353],{"class":65},"                nn.init.normal_(m.weight,",[51,39355,733],{"class":278},[51,39357,920],{"class":65},[51,39359,39360],{"class":278},"0.01",[51,39362,282],{"class":65},[51,39364,39365],{"class":53,"line":17209},[51,39366,39367],{"class":601},"                # 初始化b参数\n",[51,39369,39370,39372,39374,39376,39378,39380],{"class":53,"line":17214},[51,39371,39295],{"class":69},[51,39373,39298],{"class":65},[51,39375,39301],{"class":69},[51,39377,39304],{"class":69},[51,39379,39307],{"class":278},[51,39381,363],{"class":65},[51,39383,39384,39386,39388],{"class":53,"line":17228},[51,39385,39319],{"class":65},[51,39387,733],{"class":278},[51,39389,282],{"class":65},[51,39391,39392],{"class":53,"line":17233},[51,39393,206],{"emptyLinePlaceholder":205},[51,39395,39396],{"class":53,"line":17238},[51,39397,35540],{"class":601},[51,39399,39400,39402,39404],{"class":53,"line":17252},[51,39401,31179],{"class":69},[51,39403,31471],{"class":57},[51,39405,31474],{"class":65},[51,39407,39408,39410,39412,39414],{"class":53,"line":17264},[51,39409,31479],{"class":65},[51,39411,70],{"class":69},[51,39413,31201],{"class":278},[51,39415,39416],{"class":65},".block1(x)\n",[51,39418,39419,39421,39423,39425],{"class":53,"line":17269},[51,39420,31479],{"class":65},[51,39422,70],{"class":69},[51,39424,31201],{"class":278},[51,39426,39427],{"class":65},".block2(x)\n",[51,39429,39430,39432,39434,39436],{"class":53,"line":17282},[51,39431,31479],{"class":65},[51,39433,70],{"class":69},[51,39435,31201],{"class":278},[51,39437,39438],{"class":65},".block3(x)\n",[51,39440,39441,39443,39445,39447],{"class":53,"line":17287},[51,39442,31479],{"class":65},[51,39444,70],{"class":69},[51,39446,31201],{"class":278},[51,39448,39449],{"class":65},".block4(x)\n",[51,39451,39452,39454,39456,39458],{"class":53,"line":17292},[51,39453,31479],{"class":65},[51,39455,70],{"class":69},[51,39457,31201],{"class":278},[51,39459,39460],{"class":65},".block5(x)\n",[51,39462,39463,39465,39467,39469],{"class":53,"line":17297},[51,39464,31479],{"class":65},[51,39466,70],{"class":69},[51,39468,31201],{"class":278},[51,39470,39471],{"class":65},".block6(x)\n",[51,39473,39474,39476],{"class":53,"line":17310},[51,39475,15136],{"class":69},[51,39477,31587],{"class":65},[51,39479,39480],{"class":53,"line":17315},[51,39481,206],{"emptyLinePlaceholder":205},[51,39483,39484],{"class":53,"line":33008},[51,39485,39486],{"class":601},"# 验证模型\n",[51,39488,39489,39491,39493,39495,39498],{"class":53,"line":33014},[51,39490,1940],{"class":69},[51,39492,31598],{"class":278},[51,39494,375],{"class":69},[51,39496,39497],{"class":61},"'__main__'",[51,39499,363],{"class":65},[51,39501,39502,39504,39506,39508,39510,39512,39514,39516,39518],{"class":53,"line":33020},[51,39503,31615],{"class":65},[51,39505,70],{"class":69},[51,39507,30830],{"class":65},[51,39509,31622],{"class":61},[51,39511,2102],{"class":69},[51,39513,31627],{"class":65},[51,39515,2099],{"class":69},[51,39517,30855],{"class":61},[51,39519,282],{"class":65},[51,39521,39522,39524],{"class":53,"line":33026},[51,39523,31677],{"class":278},[51,39525,30864],{"class":65},[51,39527,39528,39530,39532],{"class":53,"line":33032},[51,39529,31667],{"class":65},[51,39531,70],{"class":69},[51,39533,39534],{"class":65},"VGG16().to(device)\n",[51,39536,39537,39539,39541,39543,39545,39547,39549,39551],{"class":53,"line":33043},[51,39538,31677],{"class":278},[51,39540,31680],{"class":65},[51,39542,759],{"class":278},[51,39544,920],{"class":65},[51,39546,31877],{"class":278},[51,39548,920],{"class":65},[51,39550,31877],{"class":278},[51,39552,31693],{"class":65},[19,39554,39555],{"start":185},[22,39556,39557],{},"训练代码",[10,39559,39560],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[10,39562,39563],{},"解决方式:",[10,39565,39566],{},"①权重初始化",[41,39568,39570],{"className":170,"code":39569,"language":172,"meta":46,"style":46},"# 权重初始化,保证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",[48,39571,39572,39577,39582,39594,39599,39607,39612,39625,39630,39644,39649,39658,39663,39672,39677,39682,39695,39700,39714],{"__ignoreMap":46},[51,39573,39574],{"class":53,"line":54},[51,39575,39576],{"class":601},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[51,39578,39579],{"class":53,"line":185},[51,39580,39581],{"class":601},"# 循环遍历模型\n",[51,39583,39584,39586,39588,39590,39592],{"class":53,"line":202},[51,39585,3412],{"class":69},[51,39587,39242],{"class":65},[51,39589,26425],{"class":69},[51,39591,39247],{"class":278},[51,39593,39250],{"class":65},[51,39595,39596],{"class":53,"line":209},[51,39597,39598],{"class":601},"    # print(m)\n",[51,39600,39601,39603,39605],{"class":53,"line":223},[51,39602,3488],{"class":69},[51,39604,39262],{"class":278},[51,39606,39265],{"class":65},[51,39608,39609],{"class":53,"line":237},[51,39610,39611],{"class":601},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[51,39613,39614,39617,39619,39621,39623],{"class":53,"line":242},[51,39615,39616],{"class":65},"        nn.init.kaiming_normal_(m.weight,",[51,39618,39278],{"class":248},[51,39620,70],{"class":69},[51,39622,39283],{"class":61},[51,39624,282],{"class":65},[51,39626,39627],{"class":53,"line":257},[51,39628,39629],{"class":601},"        # 判断b参数是否存在\n",[51,39631,39632,39634,39636,39638,39640,39642],{"class":53,"line":262},[51,39633,369],{"class":69},[51,39635,39298],{"class":65},[51,39637,39301],{"class":69},[51,39639,39304],{"class":69},[51,39641,39307],{"class":278},[51,39643,363],{"class":65},[51,39645,39646],{"class":53,"line":285},[51,39647,39648],{"class":601},"            # 如果参数不存在的化初始化b=0\n",[51,39650,39651,39654,39656],{"class":53,"line":296},[51,39652,39653],{"class":65},"            nn.init.constant_(m.bias,",[51,39655,733],{"class":278},[51,39657,282],{"class":65},[51,39659,39660],{"class":53,"line":307},[51,39661,39662],{"class":601},"    # 全连接层初始化\n",[51,39664,39665,39668,39670],{"class":53,"line":324},[51,39666,39667],{"class":69},"    elif",[51,39669,39262],{"class":278},[51,39671,39338],{"class":65},[51,39673,39674],{"class":53,"line":329},[51,39675,39676],{"class":601},"        # 这个初始化方法是利用的是正太分布的方式\n",[51,39678,39679],{"class":53,"line":334},[51,39680,39681],{"class":601},"        # 均值为0，方差为0.01\n",[51,39683,39684,39687,39689,39691,39693],{"class":53,"line":340},[51,39685,39686],{"class":65},"        nn.init.normal_(m.weight,",[51,39688,733],{"class":278},[51,39690,920],{"class":65},[51,39692,39360],{"class":278},[51,39694,282],{"class":65},[51,39696,39697],{"class":53,"line":345},[51,39698,39699],{"class":601},"        # 初始化b参数\n",[51,39701,39702,39704,39706,39708,39710,39712],{"class":53,"line":357},[51,39703,369],{"class":69},[51,39705,39298],{"class":65},[51,39707,39301],{"class":69},[51,39709,39304],{"class":69},[51,39711,39307],{"class":278},[51,39713,363],{"class":65},[51,39715,39716,39718,39720],{"class":53,"line":366},[51,39717,39653],{"class":65},[51,39719,733],{"class":278},[51,39721,282],{"class":65},[10,39723,39724],{},"②尽可能地增加批次",[10,39726,39727],{},"训练完整代码：",[41,39729,39730],{"className":170,"code":38274,"language":172,"meta":46,"style":46},[48,39731,39732,39738,39748,39758,39768,39772,39788,39796,39814,39818,39822,39832,39868,39872,39908,39912,39940,39944,39948,39958,39994,39998,40034,40038,40066,40070,40074,40084,40120,40124,40160,40164,40200,40204,40232,40236,40240,40250,40286,40290,40326,40330,40366,40370,40398,40402,40406,40416,40452,40456,40492,40496,40532,40536,40564,40568,40572,40582,40586,40590,40594,40614,40618,40630,40634,40646,40650,40654,40658,40662,40674,40678,40686,40690,40702,40706,40720,40724,40732,40736,40744,40748,40752,40764,40768,40782,40790,40794,40798,40806,40816,40826,40836,40846,40856,40866,40872,40876,40880,40892,40912,40918,40926],{"__ignoreMap":46},[51,39733,39734,39736],{"class":53,"line":54},[51,39735,179],{"class":69},[51,39737,30774],{"class":65},[51,39739,39740,39742,39744,39746],{"class":53,"line":185},[51,39741,226],{"class":69},[51,39743,38289],{"class":65},[51,39745,179],{"class":69},[51,39747,38294],{"class":65},[51,39749,39750,39752,39754,39756],{"class":53,"line":202},[51,39751,226],{"class":69},[51,39753,31118],{"class":65},[51,39755,179],{"class":69},[51,39757,31123],{"class":65},[51,39759,39760,39762,39764,39766],{"class":53,"line":209},[51,39761,226],{"class":69},[51,39763,31135],{"class":65},[51,39765,179],{"class":69},[51,39767,31140],{"class":65},[51,39769,39770],{"class":53,"line":223},[51,39771,206],{"emptyLinePlaceholder":205},[51,39773,39774,39776,39778,39780,39782,39784,39786],{"class":53,"line":237},[51,39775,15078],{"class":69},[51,39777,38325],{"class":57},[51,39779,546],{"class":65},[51,39781,31156],{"class":57},[51,39783,1100],{"class":65},[51,39785,31161],{"class":57},[51,39787,31164],{"class":65},[51,39789,39790,39792,39794],{"class":53,"line":242},[51,39791,31179],{"class":69},[51,39793,31182],{"class":278},[51,39795,31185],{"class":65},[51,39797,39798,39800,39802,39804,39806,39808,39810,39812],{"class":53,"line":257},[51,39799,31195],{"class":278},[51,39801,546],{"class":65},[51,39803,38352],{"class":278},[51,39805,12819],{"class":65},[51,39807,31201],{"class":278},[51,39809,31204],{"class":65},[51,39811,31207],{"class":278},[51,39813,2366],{"class":65},[51,39815,39816],{"class":53,"line":262},[51,39817,38367],{"class":601},[51,39819,39820],{"class":53,"line":285},[51,39821,38372],{"class":601},[51,39823,39824,39826,39828,39830],{"class":53,"line":296},[51,39825,31223],{"class":278},[51,39827,38379],{"class":65},[51,39829,70],{"class":69},[51,39831,38384],{"class":65},[51,39833,39834,39836,39838,39840,39842,39844,39846,39848,39850,39852,39854,39856,39858,39860,39862,39864,39866],{"class":53,"line":307},[51,39835,38389],{"class":65},[51,39837,31234],{"class":248},[51,39839,70],{"class":69},[51,39841,759],{"class":278},[51,39843,920],{"class":65},[51,39845,31243],{"class":248},[51,39847,70],{"class":69},[51,39849,745],{"class":278},[51,39851,920],{"class":65},[51,39853,31252],{"class":248},[51,39855,70],{"class":69},[51,39857,614],{"class":278},[51,39859,920],{"class":65},[51,39861,31261],{"class":248},[51,39863,70],{"class":69},[51,39865,759],{"class":278},[51,39867,321],{"class":65},[51,39869,39870],{"class":53,"line":324},[51,39871,38426],{"class":65},[51,39873,39874,39876,39878,39880,39882,39884,39886,39888,39890,39892,39894,39896,39898,39900,39902,39904,39906],{"class":53,"line":329},[51,39875,38389],{"class":65},[51,39877,31234],{"class":248},[51,39879,70],{"class":69},[51,39881,745],{"class":278},[51,39883,920],{"class":65},[51,39885,31243],{"class":248},[51,39887,70],{"class":69},[51,39889,745],{"class":278},[51,39891,920],{"class":65},[51,39893,31252],{"class":248},[51,39895,70],{"class":69},[51,39897,614],{"class":278},[51,39899,920],{"class":65},[51,39901,31261],{"class":248},[51,39903,70],{"class":69},[51,39905,759],{"class":278},[51,39907,321],{"class":65},[51,39909,39910],{"class":53,"line":334},[51,39911,38426],{"class":65},[51,39913,39914,39916,39918,39920,39922,39924,39926,39928,39930,39932,39934,39936,39938],{"class":53,"line":340},[51,39915,38471],{"class":65},[51,39917,31252],{"class":248},[51,39919,70],{"class":69},[51,39921,620],{"class":278},[51,39923,920],{"class":65},[51,39925,31307],{"class":248},[51,39927,70],{"class":69},[51,39929,620],{"class":278},[51,39931,920],{"class":65},[51,39933,31261],{"class":248},[51,39935,70],{"class":69},[51,39937,733],{"class":278},[51,39939,282],{"class":65},[51,39941,39942],{"class":53,"line":345},[51,39943,38500],{"class":65},[51,39945,39946],{"class":53,"line":357},[51,39947,38505],{"class":601},[51,39949,39950,39952,39954,39956],{"class":53,"line":366},[51,39951,31223],{"class":278},[51,39953,38512],{"class":65},[51,39955,70],{"class":69},[51,39957,38384],{"class":65},[51,39959,39960,39962,39964,39966,39968,39970,39972,39974,39976,39978,39980,39982,39984,39986,39988,39990,39992],{"class":53,"line":383},[51,39961,38389],{"class":65},[51,39963,31234],{"class":248},[51,39965,70],{"class":69},[51,39967,745],{"class":278},[51,39969,920],{"class":65},[51,39971,31243],{"class":248},[51,39973,70],{"class":69},[51,39975,32445],{"class":278},[51,39977,920],{"class":65},[51,39979,31252],{"class":248},[51,39981,70],{"class":69},[51,39983,614],{"class":278},[51,39985,920],{"class":65},[51,39987,31261],{"class":248},[51,39989,70],{"class":69},[51,39991,759],{"class":278},[51,39993,321],{"class":65},[51,39995,39996],{"class":53,"line":392},[51,39997,38426],{"class":65},[51,39999,40000,40002,40004,40006,40008,40010,40012,40014,40016,40018,40020,40022,40024,40026,40028,40030,40032],{"class":53,"line":403},[51,40001,38389],{"class":65},[51,40003,31234],{"class":248},[51,40005,70],{"class":69},[51,40007,32445],{"class":278},[51,40009,920],{"class":65},[51,40011,31243],{"class":248},[51,40013,70],{"class":69},[51,40015,32445],{"class":278},[51,40017,920],{"class":65},[51,40019,31252],{"class":248},[51,40021,70],{"class":69},[51,40023,614],{"class":278},[51,40025,920],{"class":65},[51,40027,31261],{"class":248},[51,40029,70],{"class":69},[51,40031,759],{"class":278},[51,40033,321],{"class":65},[51,40035,40036],{"class":53,"line":409},[51,40037,38426],{"class":65},[51,40039,40040,40042,40044,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064],{"class":53,"line":414},[51,40041,38471],{"class":65},[51,40043,31252],{"class":248},[51,40045,70],{"class":69},[51,40047,620],{"class":278},[51,40049,920],{"class":65},[51,40051,31307],{"class":248},[51,40053,70],{"class":69},[51,40055,620],{"class":278},[51,40057,920],{"class":65},[51,40059,31261],{"class":248},[51,40061,70],{"class":69},[51,40063,733],{"class":278},[51,40065,282],{"class":65},[51,40067,40068],{"class":53,"line":433},[51,40069,38500],{"class":65},[51,40071,40072],{"class":53,"line":439},[51,40073,38633],{"class":601},[51,40075,40076,40078,40080,40082],{"class":53,"line":444},[51,40077,31223],{"class":278},[51,40079,38640],{"class":65},[51,40081,70],{"class":69},[51,40083,38384],{"class":65},[51,40085,40086,40088,40090,40092,40094,40096,40098,40100,40102,40104,40106,40108,40110,40112,40114,40116,40118],{"class":53,"line":453},[51,40087,38389],{"class":65},[51,40089,31234],{"class":248},[51,40091,70],{"class":69},[51,40093,32445],{"class":278},[51,40095,920],{"class":65},[51,40097,31243],{"class":248},[51,40099,70],{"class":69},[51,40101,35245],{"class":278},[51,40103,920],{"class":65},[51,40105,31252],{"class":248},[51,40107,70],{"class":69},[51,40109,614],{"class":278},[51,40111,920],{"class":65},[51,40113,31261],{"class":248},[51,40115,70],{"class":69},[51,40117,759],{"class":278},[51,40119,321],{"class":65},[51,40121,40122],{"class":53,"line":2174},[51,40123,38426],{"class":65},[51,40125,40126,40128,40130,40132,40134,40136,40138,40140,40142,40144,40146,40148,40150,40152,40154,40156,40158],{"class":53,"line":2965},[51,40127,38389],{"class":65},[51,40129,31234],{"class":248},[51,40131,70],{"class":69},[51,40133,35245],{"class":278},[51,40135,920],{"class":65},[51,40137,31243],{"class":248},[51,40139,70],{"class":69},[51,40141,35245],{"class":278},[51,40143,920],{"class":65},[51,40145,31252],{"class":248},[51,40147,70],{"class":69},[51,40149,614],{"class":278},[51,40151,920],{"class":65},[51,40153,31261],{"class":248},[51,40155,70],{"class":69},[51,40157,759],{"class":278},[51,40159,321],{"class":65},[51,40161,40162],{"class":53,"line":2979},[51,40163,38426],{"class":65},[51,40165,40166,40168,40170,40172,40174,40176,40178,40180,40182,40184,40186,40188,40190,40192,40194,40196,40198],{"class":53,"line":2987},[51,40167,38389],{"class":65},[51,40169,31234],{"class":248},[51,40171,70],{"class":69},[51,40173,35245],{"class":278},[51,40175,920],{"class":65},[51,40177,31243],{"class":248},[51,40179,70],{"class":69},[51,40181,35245],{"class":278},[51,40183,920],{"class":65},[51,40185,31252],{"class":248},[51,40187,70],{"class":69},[51,40189,614],{"class":278},[51,40191,920],{"class":65},[51,40193,31261],{"class":248},[51,40195,70],{"class":69},[51,40197,759],{"class":278},[51,40199,321],{"class":65},[51,40201,40202],{"class":53,"line":2992},[51,40203,38426],{"class":65},[51,40205,40206,40208,40210,40212,40214,40216,40218,40220,40222,40224,40226,40228,40230],{"class":53,"line":2998},[51,40207,38471],{"class":65},[51,40209,31252],{"class":248},[51,40211,70],{"class":69},[51,40213,620],{"class":278},[51,40215,920],{"class":65},[51,40217,31307],{"class":248},[51,40219,70],{"class":69},[51,40221,620],{"class":278},[51,40223,920],{"class":65},[51,40225,31261],{"class":248},[51,40227,70],{"class":69},[51,40229,733],{"class":278},[51,40231,282],{"class":65},[51,40233,40234],{"class":53,"line":3004},[51,40235,38500],{"class":65},[51,40237,40238],{"class":53,"line":3009},[51,40239,38801],{"class":601},[51,40241,40242,40244,40246,40248],{"class":53,"line":8332},[51,40243,31223],{"class":278},[51,40245,38808],{"class":65},[51,40247,70],{"class":69},[51,40249,38384],{"class":65},[51,40251,40252,40254,40256,40258,40260,40262,40264,40266,40268,40270,40272,40274,40276,40278,40280,40282,40284],{"class":53,"line":8356},[51,40253,38389],{"class":65},[51,40255,31234],{"class":248},[51,40257,70],{"class":69},[51,40259,35245],{"class":278},[51,40261,920],{"class":65},[51,40263,31243],{"class":248},[51,40265,70],{"class":69},[51,40267,38831],{"class":278},[51,40269,920],{"class":65},[51,40271,31252],{"class":248},[51,40273,70],{"class":69},[51,40275,614],{"class":278},[51,40277,920],{"class":65},[51,40279,31261],{"class":248},[51,40281,70],{"class":69},[51,40283,759],{"class":278},[51,40285,321],{"class":65},[51,40287,40288],{"class":53,"line":8361},[51,40289,38426],{"class":65},[51,40291,40292,40294,40296,40298,40300,40302,40304,40306,40308,40310,40312,40314,40316,40318,40320,40322,40324],{"class":53,"line":8367},[51,40293,38389],{"class":65},[51,40295,31234],{"class":248},[51,40297,70],{"class":69},[51,40299,38831],{"class":278},[51,40301,920],{"class":65},[51,40303,31243],{"class":248},[51,40305,70],{"class":69},[51,40307,38831],{"class":278},[51,40309,920],{"class":65},[51,40311,31252],{"class":248},[51,40313,70],{"class":69},[51,40315,614],{"class":278},[51,40317,920],{"class":65},[51,40319,31261],{"class":248},[51,40321,70],{"class":69},[51,40323,759],{"class":278},[51,40325,321],{"class":65},[51,40327,40328],{"class":53,"line":8394},[51,40329,38426],{"class":65},[51,40331,40332,40334,40336,40338,40340,40342,40344,40346,40348,40350,40352,40354,40356,40358,40360,40362,40364],{"class":53,"line":8399},[51,40333,38389],{"class":65},[51,40335,31234],{"class":248},[51,40337,70],{"class":69},[51,40339,38831],{"class":278},[51,40341,920],{"class":65},[51,40343,31243],{"class":248},[51,40345,70],{"class":69},[51,40347,38831],{"class":278},[51,40349,920],{"class":65},[51,40351,31252],{"class":248},[51,40353,70],{"class":69},[51,40355,614],{"class":278},[51,40357,920],{"class":65},[51,40359,31261],{"class":248},[51,40361,70],{"class":69},[51,40363,759],{"class":278},[51,40365,321],{"class":65},[51,40367,40368],{"class":53,"line":8405},[51,40369,38426],{"class":65},[51,40371,40372,40374,40376,40378,40380,40382,40384,40386,40388,40390,40392,40394,40396],{"class":53,"line":8417},[51,40373,38471],{"class":65},[51,40375,31252],{"class":248},[51,40377,70],{"class":69},[51,40379,620],{"class":278},[51,40381,920],{"class":65},[51,40383,31307],{"class":248},[51,40385,70],{"class":69},[51,40387,620],{"class":278},[51,40389,920],{"class":65},[51,40391,31261],{"class":248},[51,40393,70],{"class":69},[51,40395,733],{"class":278},[51,40397,282],{"class":65},[51,40399,40400],{"class":53,"line":8429},[51,40401,38500],{"class":65},[51,40403,40404],{"class":53,"line":8441},[51,40405,38970],{"class":601},[51,40407,40408,40410,40412,40414],{"class":53,"line":10100},[51,40409,31223],{"class":278},[51,40411,38977],{"class":65},[51,40413,70],{"class":69},[51,40415,38384],{"class":65},[51,40417,40418,40420,40422,40424,40426,40428,40430,40432,40434,40436,40438,40440,40442,40444,40446,40448,40450],{"class":53,"line":10125},[51,40419,38389],{"class":65},[51,40421,31234],{"class":248},[51,40423,70],{"class":69},[51,40425,38831],{"class":278},[51,40427,920],{"class":65},[51,40429,31243],{"class":248},[51,40431,70],{"class":69},[51,40433,38831],{"class":278},[51,40435,920],{"class":65},[51,40437,31252],{"class":248},[51,40439,70],{"class":69},[51,40441,614],{"class":278},[51,40443,920],{"class":65},[51,40445,31261],{"class":248},[51,40447,70],{"class":69},[51,40449,759],{"class":278},[51,40451,321],{"class":65},[51,40453,40454],{"class":53,"line":10148},[51,40455,38426],{"class":65},[51,40457,40458,40460,40462,40464,40466,40468,40470,40472,40474,40476,40478,40480,40482,40484,40486,40488,40490],{"class":53,"line":10172},[51,40459,38389],{"class":65},[51,40461,31234],{"class":248},[51,40463,70],{"class":69},[51,40465,38831],{"class":278},[51,40467,920],{"class":65},[51,40469,31243],{"class":248},[51,40471,70],{"class":69},[51,40473,38831],{"class":278},[51,40475,920],{"class":65},[51,40477,31252],{"class":248},[51,40479,70],{"class":69},[51,40481,614],{"class":278},[51,40483,920],{"class":65},[51,40485,31261],{"class":248},[51,40487,70],{"class":69},[51,40489,759],{"class":278},[51,40491,321],{"class":65},[51,40493,40494],{"class":53,"line":10177},[51,40495,38426],{"class":65},[51,40497,40498,40500,40502,40504,40506,40508,40510,40512,40514,40516,40518,40520,40522,40524,40526,40528,40530],{"class":53,"line":10182},[51,40499,38389],{"class":65},[51,40501,31234],{"class":248},[51,40503,70],{"class":69},[51,40505,38831],{"class":278},[51,40507,920],{"class":65},[51,40509,31243],{"class":248},[51,40511,70],{"class":69},[51,40513,38831],{"class":278},[51,40515,920],{"class":65},[51,40517,31252],{"class":248},[51,40519,70],{"class":69},[51,40521,614],{"class":278},[51,40523,920],{"class":65},[51,40525,31261],{"class":248},[51,40527,70],{"class":69},[51,40529,759],{"class":278},[51,40531,321],{"class":65},[51,40533,40534],{"class":53,"line":10187},[51,40535,38426],{"class":65},[51,40537,40538,40540,40542,40544,40546,40548,40550,40552,40554,40556,40558,40560,40562],{"class":53,"line":10196},[51,40539,38471],{"class":65},[51,40541,31252],{"class":248},[51,40543,70],{"class":69},[51,40545,620],{"class":278},[51,40547,920],{"class":65},[51,40549,31307],{"class":248},[51,40551,70],{"class":69},[51,40553,620],{"class":278},[51,40555,920],{"class":65},[51,40557,31261],{"class":248},[51,40559,70],{"class":69},[51,40561,733],{"class":278},[51,40563,282],{"class":65},[51,40565,40566],{"class":53,"line":10201},[51,40567,38500],{"class":65},[51,40569,40570],{"class":53,"line":10207},[51,40571,39138],{"class":601},[51,40573,40574,40576,40578,40580],{"class":53,"line":10228},[51,40575,31223],{"class":278},[51,40577,39145],{"class":65},[51,40579,70],{"class":69},[51,40581,38384],{"class":65},[51,40583,40584],{"class":53,"line":10234},[51,40585,39154],{"class":601},[51,40587,40588],{"class":53,"line":10248},[51,40589,39159],{"class":601},[51,40591,40592],{"class":53,"line":10254},[51,40593,39164],{"class":65},[51,40595,40596,40598,40600,40602,40604,40606,40608,40610,40612],{"class":53,"line":10281},[51,40597,39169],{"class":65},[51,40599,911],{"class":278},[51,40601,997],{"class":69},[51,40603,911],{"class":278},[51,40605,997],{"class":69},[51,40607,38831],{"class":278},[51,40609,920],{"class":65},[51,40611,35245],{"class":278},[51,40613,321],{"class":65},[51,40615,40616],{"class":53,"line":10290},[51,40617,38426],{"class":65},[51,40619,40620,40622,40624,40626,40628],{"class":53,"line":10296},[51,40621,39169],{"class":65},[51,40623,35245],{"class":278},[51,40625,920],{"class":65},[51,40627,32445],{"class":278},[51,40629,321],{"class":65},[51,40631,40632],{"class":53,"line":10304},[51,40633,38426],{"class":65},[51,40635,40636,40638,40640,40642,40644],{"class":53,"line":10309},[51,40637,39169],{"class":65},[51,40639,32445],{"class":278},[51,40641,920],{"class":65},[51,40643,988],{"class":278},[51,40645,282],{"class":65},[51,40647,40648],{"class":53,"line":16987},[51,40649,38500],{"class":65},[51,40651,40652],{"class":53,"line":16993},[51,40653,206],{"emptyLinePlaceholder":205},[51,40655,40656],{"class":53,"line":17016},[51,40657,39230],{"class":601},[51,40659,40660],{"class":53,"line":17022},[51,40661,39235],{"class":601},[51,40663,40664,40666,40668,40670,40672],{"class":53,"line":17045},[51,40665,3790],{"class":69},[51,40667,39242],{"class":65},[51,40669,26425],{"class":69},[51,40671,39247],{"class":278},[51,40673,39250],{"class":65},[51,40675,40676],{"class":53,"line":17059},[51,40677,39255],{"class":601},[51,40679,40680,40682,40684],{"class":53,"line":17079},[51,40681,5027],{"class":69},[51,40683,39262],{"class":278},[51,40685,39265],{"class":65},[51,40687,40688],{"class":53,"line":17085},[51,40689,39270],{"class":601},[51,40691,40692,40694,40696,40698,40700],{"class":53,"line":17096},[51,40693,39275],{"class":65},[51,40695,39278],{"class":248},[51,40697,70],{"class":69},[51,40699,39283],{"class":61},[51,40701,282],{"class":65},[51,40703,40704],{"class":53,"line":17119},[51,40705,39290],{"class":601},[51,40707,40708,40710,40712,40714,40716,40718],{"class":53,"line":17141},[51,40709,39295],{"class":69},[51,40711,39298],{"class":65},[51,40713,39301],{"class":69},[51,40715,39304],{"class":69},[51,40717,39307],{"class":278},[51,40719,363],{"class":65},[51,40721,40722],{"class":53,"line":17146},[51,40723,39314],{"class":601},[51,40725,40726,40728,40730],{"class":53,"line":17152},[51,40727,39319],{"class":65},[51,40729,733],{"class":278},[51,40731,282],{"class":65},[51,40733,40734],{"class":53,"line":17166},[51,40735,39328],{"class":601},[51,40737,40738,40740,40742],{"class":53,"line":17179},[51,40739,39333],{"class":69},[51,40741,39262],{"class":278},[51,40743,39338],{"class":65},[51,40745,40746],{"class":53,"line":17184},[51,40747,39343],{"class":601},[51,40749,40750],{"class":53,"line":17198},[51,40751,39348],{"class":601},[51,40753,40754,40756,40758,40760,40762],{"class":53,"line":17203},[51,40755,39353],{"class":65},[51,40757,733],{"class":278},[51,40759,920],{"class":65},[51,40761,39360],{"class":278},[51,40763,282],{"class":65},[51,40765,40766],{"class":53,"line":17209},[51,40767,39367],{"class":601},[51,40769,40770,40772,40774,40776,40778,40780],{"class":53,"line":17214},[51,40771,39295],{"class":69},[51,40773,39298],{"class":65},[51,40775,39301],{"class":69},[51,40777,39304],{"class":69},[51,40779,39307],{"class":278},[51,40781,363],{"class":65},[51,40783,40784,40786,40788],{"class":53,"line":17228},[51,40785,39319],{"class":65},[51,40787,733],{"class":278},[51,40789,282],{"class":65},[51,40791,40792],{"class":53,"line":17233},[51,40793,206],{"emptyLinePlaceholder":205},[51,40795,40796],{"class":53,"line":17238},[51,40797,35540],{"class":601},[51,40799,40800,40802,40804],{"class":53,"line":17252},[51,40801,31179],{"class":69},[51,40803,31471],{"class":57},[51,40805,31474],{"class":65},[51,40807,40808,40810,40812,40814],{"class":53,"line":17264},[51,40809,31479],{"class":65},[51,40811,70],{"class":69},[51,40813,31201],{"class":278},[51,40815,39416],{"class":65},[51,40817,40818,40820,40822,40824],{"class":53,"line":17269},[51,40819,31479],{"class":65},[51,40821,70],{"class":69},[51,40823,31201],{"class":278},[51,40825,39427],{"class":65},[51,40827,40828,40830,40832,40834],{"class":53,"line":17282},[51,40829,31479],{"class":65},[51,40831,70],{"class":69},[51,40833,31201],{"class":278},[51,40835,39438],{"class":65},[51,40837,40838,40840,40842,40844],{"class":53,"line":17287},[51,40839,31479],{"class":65},[51,40841,70],{"class":69},[51,40843,31201],{"class":278},[51,40845,39449],{"class":65},[51,40847,40848,40850,40852,40854],{"class":53,"line":17292},[51,40849,31479],{"class":65},[51,40851,70],{"class":69},[51,40853,31201],{"class":278},[51,40855,39460],{"class":65},[51,40857,40858,40860,40862,40864],{"class":53,"line":17297},[51,40859,31479],{"class":65},[51,40861,70],{"class":69},[51,40863,31201],{"class":278},[51,40865,39471],{"class":65},[51,40867,40868,40870],{"class":53,"line":17310},[51,40869,15136],{"class":69},[51,40871,31587],{"class":65},[51,40873,40874],{"class":53,"line":17315},[51,40875,206],{"emptyLinePlaceholder":205},[51,40877,40878],{"class":53,"line":33008},[51,40879,39486],{"class":601},[51,40881,40882,40884,40886,40888,40890],{"class":53,"line":33014},[51,40883,1940],{"class":69},[51,40885,31598],{"class":278},[51,40887,375],{"class":69},[51,40889,39497],{"class":61},[51,40891,363],{"class":65},[51,40893,40894,40896,40898,40900,40902,40904,40906,40908,40910],{"class":53,"line":33020},[51,40895,31615],{"class":65},[51,40897,70],{"class":69},[51,40899,30830],{"class":65},[51,40901,31622],{"class":61},[51,40903,2102],{"class":69},[51,40905,31627],{"class":65},[51,40907,2099],{"class":69},[51,40909,30855],{"class":61},[51,40911,282],{"class":65},[51,40913,40914,40916],{"class":53,"line":33026},[51,40915,31677],{"class":278},[51,40917,30864],{"class":65},[51,40919,40920,40922,40924],{"class":53,"line":33032},[51,40921,31667],{"class":65},[51,40923,70],{"class":69},[51,40925,39534],{"class":65},[51,40927,40928,40930,40932,40934,40936,40938,40940,40942],{"class":53,"line":33043},[51,40929,31677],{"class":278},[51,40931,31680],{"class":65},[51,40933,759],{"class":278},[51,40935,920],{"class":65},[51,40937,31877],{"class":278},[51,40939,920],{"class":65},[51,40941,31877],{"class":278},[51,40943,31693],{"class":65},[19,40945,40946],{"start":202},[22,40947,40948],{},"测试代码",[41,40950,40952],{"className":170,"code":40951,"language":172,"meta":46,"style":46},"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",[48,40953,40954,40960,40970,40980,40984,40994,41005,41009,41013,41017,41025,41041,41051,41067,41077,41091,41095,41105,41115,41125,41131,41135,41139,41147,41151,41167,41175,41179,41183,41191,41199,41203,41207,41211,41215,41221,41225,41235,41243,41251,41255,41259,41263,41271,41275,41291,41295,41299,41303,41315,41319,41331,41335,41339,41351,41355,41365,41369,41373,41385,41389,41398,41402,41406,41414,41418,41426,41430,41434,41438,41442,41446,41462,41470,41474,41478,41526,41532,41536,41546,41554,41562,41566,41570,41574,41578,41586,41590,41606,41610,41618,41626],{"__ignoreMap":46},[51,40955,40956,40958],{"class":53,"line":54},[51,40957,179],{"class":69},[51,40959,30774],{"class":65},[51,40961,40962,40964,40966,40968],{"class":53,"line":185},[51,40963,179],{"class":69},[51,40965,31792],{"class":65},[51,40967,217],{"class":69},[51,40969,31797],{"class":65},[51,40971,40972,40974,40976,40978],{"class":53,"line":202},[51,40973,226],{"class":69},[51,40975,31775],{"class":65},[51,40977,179],{"class":69},[51,40979,31780],{"class":65},[51,40981,40982],{"class":53,"line":209},[51,40983,34297],{"class":601},[51,40985,40986,40988,40990,40992],{"class":53,"line":223},[51,40987,226],{"class":69},[51,40989,31746],{"class":65},[51,40991,179],{"class":69},[51,40993,31751],{"class":65},[51,40995,40996,40998,41000,41002],{"class":53,"line":237},[51,40997,226],{"class":69},[51,40999,32290],{"class":65},[51,41001,179],{"class":69},[51,41003,41004],{"class":278}," VGG16\n",[51,41006,41007],{"class":53,"line":242},[51,41008,206],{"emptyLinePlaceholder":205},[51,41010,41011],{"class":53,"line":257},[51,41012,206],{"emptyLinePlaceholder":205},[51,41014,41015],{"class":53,"line":262},[51,41016,34326],{"class":601},[51,41018,41019,41021,41023],{"class":53,"line":285},[51,41020,348],{"class":69},[51,41022,34333],{"class":57},[51,41024,32328],{"class":65},[51,41026,41027,41029,41031,41033,41035,41037,41039],{"class":53,"line":296},[51,41028,34340],{"class":65},[51,41030,70],{"class":69},[51,41032,31832],{"class":65},[51,41034,31835],{"class":248},[51,41036,70],{"class":69},[51,41038,31840],{"class":61},[51,41040,31843],{"class":65},[51,41042,41043,41045,41047,41049],{"class":53,"line":307},[51,41044,34357],{"class":248},[51,41046,70],{"class":69},[51,41048,34362],{"class":278},[51,41050,31843],{"class":65},[51,41052,41053,41055,41057,41059,41061,41063,41065],{"class":53,"line":324},[51,41054,34369],{"class":248},[51,41056,70],{"class":69},[51,41058,31869],{"class":65},[51,41060,31872],{"class":248},[51,41062,70],{"class":69},[51,41064,31877],{"class":278},[51,41066,31880],{"class":65},[51,41068,41069,41071,41073,41075],{"class":53,"line":329},[51,41070,34386],{"class":248},[51,41072,70],{"class":69},[51,41074,279],{"class":278},[51,41076,282],{"class":65},[51,41078,41079,41081,41083,41085,41087,41089],{"class":53,"line":334},[51,41080,34397],{"class":65},[51,41082,70],{"class":69},[51,41084,31910],{"class":65},[51,41086,31913],{"class":248},[51,41088,70],{"class":69},[51,41090,34408],{"class":65},[51,41092,41093],{"class":53,"line":340},[51,41094,34413],{"class":601},[51,41096,41097,41099,41101,41103],{"class":53,"line":345},[51,41098,34418],{"class":248},[51,41100,70],{"class":69},[51,41102,759],{"class":278},[51,41104,31843],{"class":65},[51,41106,41107,41109,41111,41113],{"class":53,"line":357},[51,41108,34429],{"class":248},[51,41110,70],{"class":69},[51,41112,279],{"class":278},[51,41114,31843],{"class":65},[51,41116,41117,41119,41121,41123],{"class":53,"line":366},[51,41118,34440],{"class":248},[51,41120,70],{"class":69},[51,41122,733],{"class":278},[51,41124,282],{"class":65},[51,41126,41127,41129],{"class":53,"line":383},[51,41128,4476],{"class":69},[51,41130,34453],{"class":65},[51,41132,41133],{"class":53,"line":392},[51,41134,206],{"emptyLinePlaceholder":205},[51,41136,41137],{"class":53,"line":403},[51,41138,34462],{"class":601},[51,41140,41141,41143,41145],{"class":53,"line":409},[51,41142,348],{"class":69},[51,41144,34469],{"class":57},[51,41146,34472],{"class":65},[51,41148,41149],{"class":53,"line":414},[51,41150,34477],{"class":601},[51,41152,41153,41155,41157,41159,41161,41163,41165],{"class":53,"line":433},[51,41154,31615],{"class":65},[51,41156,70],{"class":69},[51,41158,31622],{"class":61},[51,41160,2102],{"class":69},[51,41162,31627],{"class":65},[51,41164,2099],{"class":69},[51,41166,34494],{"class":61},[51,41168,41169,41171,41173],{"class":53,"line":439},[51,41170,31667],{"class":65},[51,41172,70],{"class":69},[51,41174,32664],{"class":65},[51,41176,41177],{"class":53,"line":444},[51,41178,206],{"emptyLinePlaceholder":205},[51,41180,41181],{"class":53,"line":453},[51,41182,34511],{"class":601},[51,41184,41185,41187,41189],{"class":53,"line":2174},[51,41186,34516],{"class":65},[51,41188,70],{"class":69},[51,41190,32717],{"class":278},[51,41192,41193,41195,41197],{"class":53,"line":2965},[51,41194,34525],{"class":65},[51,41196,70],{"class":69},[51,41198,3472],{"class":278},[51,41200,41201],{"class":53,"line":2979},[51,41202,206],{"emptyLinePlaceholder":205},[51,41204,41205],{"class":53,"line":2987},[51,41206,34538],{"class":601},[51,41208,41209],{"class":53,"line":2992},[51,41210,34543],{"class":601},[51,41212,41213],{"class":53,"line":2998},[51,41214,34548],{"class":601},[51,41216,41217,41219],{"class":53,"line":3004},[51,41218,34553],{"class":69},[51,41220,33259],{"class":65},[51,41222,41223],{"class":53,"line":3009},[51,41224,34560],{"class":601},[51,41226,41227,41229,41231,41233],{"class":53,"line":8332},[51,41228,3790],{"class":69},[51,41230,34567],{"class":65},[51,41232,26425],{"class":69},[51,41234,34572],{"class":65},[51,41236,41237,41239,41241],{"class":53,"line":8356},[51,41238,34577],{"class":65},[51,41240,70],{"class":69},[51,41242,34582],{"class":65},[51,41244,41245,41247,41249],{"class":53,"line":8361},[51,41246,34587],{"class":65},[51,41248,70],{"class":69},[51,41250,34592],{"class":65},[51,41252,41253],{"class":53,"line":8367},[51,41254,34597],{"class":601},[51,41256,41257],{"class":53,"line":8394},[51,41258,33250],{"class":65},[51,41260,41261],{"class":53,"line":8399},[51,41262,34606],{"class":601},[51,41264,41265,41267,41269],{"class":53,"line":8405},[51,41266,33035],{"class":65},[51,41268,70],{"class":69},[51,41270,34615],{"class":65},[51,41272,41273],{"class":53,"line":8417},[51,41274,34620],{"class":601},[51,41276,41277,41279,41281,41283,41285,41287,41289],{"class":53,"line":8429},[51,41278,33052],{"class":65},[51,41280,70],{"class":69},[51,41282,33057],{"class":65},[51,41284,33060],{"class":248},[51,41286,70],{"class":69},[51,41288,759],{"class":278},[51,41290,282],{"class":65},[51,41292,41293],{"class":53,"line":8441},[51,41294,34641],{"class":601},[51,41296,41297],{"class":53,"line":10100},[51,41298,34646],{"class":601},[51,41300,41301],{"class":53,"line":10125},[51,41302,34651],{"class":601},[51,41304,41305,41307,41309,41311,41313],{"class":53,"line":10148},[51,41306,34656],{"class":65},[51,41308,9861],{"class":69},[51,41310,33162],{"class":65},[51,41312,375],{"class":69},[51,41314,34665],{"class":65},[51,41316,41317],{"class":53,"line":10172},[51,41318,34670],{"class":601},[51,41320,41321,41323,41325,41327,41329],{"class":53,"line":10177},[51,41322,34675],{"class":65},[51,41324,9861],{"class":69},[51,41326,34680],{"class":65},[51,41328,733],{"class":278},[51,41330,282],{"class":65},[51,41332,41333],{"class":53,"line":10182},[51,41334,206],{"emptyLinePlaceholder":205},[51,41336,41337],{"class":53,"line":10187},[51,41338,34693],{"class":601},[51,41340,41341,41343,41345,41347,41349],{"class":53,"line":10196},[51,41342,34698],{"class":65},[51,41344,70],{"class":69},[51,41346,34703],{"class":65},[51,41348,1126],{"class":69},[51,41350,34708],{"class":65},[51,41352,41353],{"class":53,"line":10201},[51,41354,34713],{"class":601},[51,41356,41357,41359,41361,41363],{"class":53,"line":10207},[51,41358,32826],{"class":278},[51,41360,546],{"class":65},[51,41362,34722],{"class":61},[51,41364,34725],{"class":65},[51,41366,41367],{"class":53,"line":10228},[51,41368,206],{"emptyLinePlaceholder":205},[51,41370,41371],{"class":53,"line":10234},[51,41372,34734],{"class":601},[51,41374,41375,41377,41379,41381,41383],{"class":53,"line":10248},[51,41376,1940],{"class":69},[51,41378,31598],{"class":278},[51,41380,375],{"class":69},[51,41382,31603],{"class":61},[51,41384,363],{"class":65},[51,41386,41387],{"class":53,"line":10254},[51,41388,34751],{"class":601},[51,41390,41391,41393,41395],{"class":53,"line":10281},[51,41392,31667],{"class":65},[51,41394,70],{"class":69},[51,41396,41397],{"class":65},"VGG16()\n",[51,41399,41400],{"class":53,"line":10290},[51,41401,34764],{"class":601},[51,41403,41404],{"class":53,"line":10296},[51,41405,34769],{"class":601},[51,41407,41408,41410,41412],{"class":53,"line":10304},[51,41409,34774],{"class":65},[51,41411,34777],{"class":61},[51,41413,30876],{"class":65},[51,41415,41416],{"class":53,"line":10309},[51,41417,34784],{"class":601},[51,41419,41420,41422,41424],{"class":53,"line":16987},[51,41421,34397],{"class":65},[51,41423,70],{"class":69},[51,41425,34793],{"class":65},[51,41427,41428],{"class":53,"line":16993},[51,41429,34798],{"class":601},[51,41431,41432],{"class":53,"line":17016},[51,41433,34803],{"class":65},[51,41435,41436],{"class":53,"line":17022},[51,41437,206],{"emptyLinePlaceholder":205},[51,41439,41440],{"class":53,"line":17045},[51,41441,34812],{"class":601},[51,41443,41444],{"class":53,"line":17059},[51,41445,34817],{"class":601},[51,41447,41448,41450,41452,41454,41456,41458,41460],{"class":53,"line":17079},[51,41449,31615],{"class":65},[51,41451,70],{"class":69},[51,41453,31622],{"class":61},[51,41455,2102],{"class":69},[51,41457,31627],{"class":65},[51,41459,2099],{"class":69},[51,41461,34494],{"class":61},[51,41463,41464,41466,41468],{"class":53,"line":17085},[51,41465,31667],{"class":65},[51,41467,70],{"class":69},[51,41469,32664],{"class":65},[51,41471,41472],{"class":53,"line":17096},[51,41473,34846],{"class":601},[51,41475,41476],{"class":53,"line":17119},[51,41477,34851],{"class":601},[51,41479,41480,41482,41484,41486,41488,41490,41492,41494,41496,41498,41500,41502,41504,41506,41508,41510,41512,41514,41516,41518,41520,41522,41524],{"class":53,"line":17141},[51,41481,34856],{"class":65},[51,41483,70],{"class":69},[51,41485,1432],{"class":65},[51,41487,34863],{"class":61},[51,41489,920],{"class":65},[51,41491,34868],{"class":61},[51,41493,920],{"class":65},[51,41495,34873],{"class":61},[51,41497,920],{"class":65},[51,41499,34878],{"class":61},[51,41501,920],{"class":65},[51,41503,34883],{"class":61},[51,41505,920],{"class":65},[51,41507,34888],{"class":61},[51,41509,920],{"class":65},[51,41511,34893],{"class":61},[51,41513,920],{"class":65},[51,41515,34898],{"class":61},[51,41517,920],{"class":65},[51,41519,34903],{"class":61},[51,41521,920],{"class":65},[51,41523,34908],{"class":61},[51,41525,33621],{"class":65},[51,41527,41528,41530],{"class":53,"line":17146},[51,41529,34553],{"class":69},[51,41531,33259],{"class":65},[51,41533,41534],{"class":53,"line":17152},[51,41535,34921],{"class":601},[51,41537,41538,41540,41542,41544],{"class":53,"line":17166},[51,41539,3790],{"class":69},[51,41541,34928],{"class":65},[51,41543,26425],{"class":69},[51,41545,34572],{"class":65},[51,41547,41548,41550,41552],{"class":53,"line":17179},[51,41549,32985],{"class":65},[51,41551,70],{"class":69},[51,41553,32990],{"class":65},[51,41555,41556,41558,41560],{"class":53,"line":17184},[51,41557,33000],{"class":65},[51,41559,70],{"class":69},[51,41561,33005],{"class":65},[51,41563,41564],{"class":53,"line":17198},[51,41565,206],{"emptyLinePlaceholder":205},[51,41567,41568],{"class":53,"line":17203},[51,41569,34957],{"class":601},[51,41571,41572],{"class":53,"line":17209},[51,41573,33250],{"class":65},[51,41575,41576],{"class":53,"line":17214},[51,41577,34966],{"class":601},[51,41579,41580,41582,41584],{"class":53,"line":17228},[51,41581,33035],{"class":65},[51,41583,70],{"class":69},[51,41585,33040],{"class":65},[51,41587,41588],{"class":53,"line":17233},[51,41589,34979],{"class":601},[51,41591,41592,41594,41596,41598,41600,41602,41604],{"class":53,"line":17238},[51,41593,33052],{"class":65},[51,41595,70],{"class":69},[51,41597,33057],{"class":65},[51,41599,33060],{"class":248},[51,41601,70],{"class":69},[51,41603,759],{"class":278},[51,41605,282],{"class":65},[51,41607,41608],{"class":53,"line":17252},[51,41609,35000],{"class":601},[51,41611,41612,41614,41616],{"class":53,"line":17264},[51,41613,35005],{"class":65},[51,41615,70],{"class":69},[51,41617,35010],{"class":65},[51,41619,41620,41622,41624],{"class":53,"line":17269},[51,41621,35015],{"class":65},[51,41623,70],{"class":69},[51,41625,35020],{"class":65},[51,41627,41628,41630,41632,41634,41636,41638,41640,41642],{"class":53,"line":17282},[51,41629,35025],{"class":278},[51,41631,546],{"class":65},[51,41633,35030],{"class":61},[51,41635,35033],{"class":65},[51,41637,35036],{"class":61},[51,41639,920],{"class":65},[51,41641,35041],{"class":61},[51,41643,35044],{"class":65},[513,41645,41647],{"id":41646},"_23googlenet","2.3.GoogLeNet",[22381,41649,41651],{"id":41650},"_231原理","2.3.1.原理",[19,41653,41654],{},[22,41655,41656],{},"网络结构",[10,41658,41659],{},[460,41660],{"alt":46,"src":41661},"\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",[10,41663,41664],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[10,41666,41667],{},[460,41668],{"alt":46,"src":41669},"\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",[10,41671,41672],{},[460,41673],{"alt":46,"src":41674},"\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",[10,41676,41677],{},[460,41678],{"alt":46,"src":41679},"\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",[19,41681,41682],{"start":185},[22,41683,41684],{},"1x1卷积的优点",[10,41686,41687],{},[460,41688],{"alt":46,"src":41689},"\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",[19,41691,41692],{"start":202},[22,41693,41694],{},"全局平均池化层优点",[10,41696,41697],{},[460,41698],{"alt":46,"src":41699},"\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",[10,41701,41702],{},[460,41703],{"alt":46,"src":41704},"\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",[19,41706,41707],{"start":209},[22,41708,41709],{},"参数详细描述",[10,41711,41712],{},[460,41713],{"alt":46,"src":41714},"\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",[10,41716,41717],{},[460,41718],{"alt":46,"src":41719},"\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",[10,41721,41722],{},[460,41723],{"alt":46,"src":41724},"\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",[10,41726,41727],{},[460,41728],{"alt":46,"src":41729},"\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",[10,41731,41732],{},[460,41733],{"alt":46,"src":41734},"\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",[10,41736,41737],{},[460,41738],{"alt":46,"src":41739},"\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",[10,41741,41742],{},[460,41743],{"alt":46,"src":41744},"\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",[10,41746,41747],{},[460,41748],{"alt":46,"src":41749},"\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",[10,41751,41752],{},[460,41753],{"alt":46,"src":41754},"\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",[10,41756,41757],{},[460,41758],{"alt":46,"src":41759},"\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",[10,41761,41762],{},[460,41763],{"alt":46,"src":41764},"\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",[10,41766,41767],{},[460,41768],{"alt":46,"src":41769},"\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",[10,41771,41772],{},[460,41773],{"alt":46,"src":41774},"\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",[10,41776,41777],{},[460,41778],{"alt":46,"src":41779},"\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",[10,41781,41782],{},[460,41783],{"alt":46,"src":41784},"\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",[10,41786,41787],{},[460,41788],{"alt":46,"src":41789},"\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",[10,41791,41792],{},[460,41793],{"alt":46,"src":41794},"\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",[10,41796,41797],{},[460,41798],{"alt":46,"src":41799},"\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",[10,41801,41802],{},[460,41803],{"alt":46,"src":41804},"\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",[10,41806,41807],{},[460,41808],{"alt":46,"src":41809},"\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",[10,41811,41812],{},[460,41813],{"alt":46,"src":41814},"\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",[22381,41816,41818],{"id":41817},"_232代码实现","2.3.2.代码实现",[19,41820,41821],{},[22,41822,31090],{},[10,41824,41825],{},"根据原理一步一步搭建即可",[41,41827,41829],{"className":170,"code":41828,"language":172,"meta":46,"style":46},"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",[48,41830,41831,41837,41847,41857,41861,41878,41887,41902,41912,41917,41950,41955,41992,42039,42044,42080,42127,42132,42137,42172,42204,42208,42216,42232,42256,42281,42302,42307,42322,42326,42330,42335,42352,42357,42366,42381,42392,42436,42440,42468,42472,42483,42511,42515,42552,42556,42584,42588,42599,42635,42667,42695,42699,42710,42744,42776,42808,42841,42875,42903,42907,42918,42951,42983,42997,43001,43014,43018,43023,43035,43043,43065,43070,43075,43080,43085,43090,43095,43109,43117,43126,43139,43154,43163,43167,43175,43186,43197,43208,43219,43230,43236,43240,43245,43257,43277,43286],{"__ignoreMap":46},[51,41832,41833,41835],{"class":53,"line":54},[51,41834,179],{"class":69},[51,41836,30774],{"class":65},[51,41838,41839,41841,41843,41845],{"class":53,"line":185},[51,41840,226],{"class":69},[51,41842,31118],{"class":65},[51,41844,179],{"class":69},[51,41846,31123],{"class":65},[51,41848,41849,41851,41853,41855],{"class":53,"line":202},[51,41850,226],{"class":69},[51,41852,31135],{"class":65},[51,41854,179],{"class":69},[51,41856,31140],{"class":65},[51,41858,41859],{"class":53,"line":209},[51,41860,206],{"emptyLinePlaceholder":205},[51,41862,41863,41865,41868,41870,41872,41874,41876],{"class":53,"line":223},[51,41864,15078],{"class":69},[51,41866,41867],{"class":57}," Inception",[51,41869,546],{"class":65},[51,41871,31156],{"class":57},[51,41873,1100],{"class":65},[51,41875,31161],{"class":57},[51,41877,31164],{"class":65},[51,41879,41880,41882,41884],{"class":53,"line":237},[51,41881,31179],{"class":69},[51,41883,31182],{"class":278},[51,41885,41886],{"class":65},"(self,in_channels,c1,c2,c3,c4):\n",[51,41888,41889,41891,41894,41896,41898,41900],{"class":53,"line":242},[51,41890,31195],{"class":278},[51,41892,41893],{"class":65},"(Inception,",[51,41895,31201],{"class":278},[51,41897,31204],{"class":65},[51,41899,31207],{"class":278},[51,41901,2366],{"class":65},[51,41903,41904,41906,41908,41910],{"class":53,"line":257},[51,41905,31223],{"class":278},[51,41907,35146],{"class":65},[51,41909,70],{"class":69},[51,41911,35151],{"class":65},[51,41913,41914],{"class":53,"line":262},[51,41915,41916],{"class":601},"        # 路线1：定义1*1卷积\n",[51,41918,41919,41921,41924,41926,41928,41930,41932,41935,41937,41939,41942,41944,41946,41948],{"class":53,"line":285},[51,41920,31223],{"class":278},[51,41922,41923],{"class":65},".p1_1",[51,41925,70],{"class":69},[51,41927,31231],{"class":65},[51,41929,31234],{"class":248},[51,41931,70],{"class":69},[51,41933,41934],{"class":65},"in_channels,",[51,41936,31243],{"class":248},[51,41938,70],{"class":69},[51,41940,41941],{"class":65},"c1,",[51,41943,31252],{"class":248},[51,41945,70],{"class":69},[51,41947,759],{"class":278},[51,41949,282],{"class":65},[51,41951,41952],{"class":53,"line":296},[51,41953,41954],{"class":601},"        # 路线2：定义1*1卷积和3*3\n",[51,41956,41957,41959,41962,41964,41966,41968,41970,41972,41974,41976,41979,41981,41984,41986,41988,41990],{"class":53,"line":307},[51,41958,31223],{"class":278},[51,41960,41961],{"class":65},".p2_1",[51,41963,70],{"class":69},[51,41965,31231],{"class":65},[51,41967,31234],{"class":248},[51,41969,70],{"class":69},[51,41971,41934],{"class":65},[51,41973,31243],{"class":248},[51,41975,70],{"class":69},[51,41977,41978],{"class":65},"c2[",[51,41980,733],{"class":278},[51,41982,41983],{"class":65},"],",[51,41985,31252],{"class":248},[51,41987,70],{"class":69},[51,41989,759],{"class":278},[51,41991,282],{"class":65},[51,41993,41994,41996,41999,42001,42003,42005,42007,42009,42011,42013,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035,42037],{"class":53,"line":324},[51,41995,31223],{"class":278},[51,41997,41998],{"class":65},".p2_2",[51,42000,70],{"class":69},[51,42002,31231],{"class":65},[51,42004,31234],{"class":248},[51,42006,70],{"class":69},[51,42008,41978],{"class":65},[51,42010,733],{"class":278},[51,42012,41983],{"class":65},[51,42014,31243],{"class":248},[51,42016,70],{"class":69},[51,42018,41978],{"class":65},[51,42020,759],{"class":278},[51,42022,41983],{"class":65},[51,42024,31252],{"class":248},[51,42026,70],{"class":69},[51,42028,614],{"class":278},[51,42030,920],{"class":65},[51,42032,31261],{"class":248},[51,42034,70],{"class":69},[51,42036,759],{"class":278},[51,42038,282],{"class":65},[51,42040,42041],{"class":53,"line":329},[51,42042,42043],{"class":601},"        # 路线3：定义1*1卷积和5*5\n",[51,42045,42046,42048,42051,42053,42055,42057,42059,42061,42063,42065,42068,42070,42072,42074,42076,42078],{"class":53,"line":334},[51,42047,31223],{"class":278},[51,42049,42050],{"class":65},".p3_1",[51,42052,70],{"class":69},[51,42054,31231],{"class":65},[51,42056,31234],{"class":248},[51,42058,70],{"class":69},[51,42060,41934],{"class":65},[51,42062,31243],{"class":248},[51,42064,70],{"class":69},[51,42066,42067],{"class":65},"c3[",[51,42069,733],{"class":278},[51,42071,41983],{"class":65},[51,42073,31252],{"class":248},[51,42075,70],{"class":69},[51,42077,759],{"class":278},[51,42079,282],{"class":65},[51,42081,42082,42084,42087,42089,42091,42093,42095,42097,42099,42101,42103,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125],{"class":53,"line":340},[51,42083,31223],{"class":278},[51,42085,42086],{"class":65},".p3_2",[51,42088,70],{"class":69},[51,42090,31231],{"class":65},[51,42092,31234],{"class":248},[51,42094,70],{"class":69},[51,42096,42067],{"class":65},[51,42098,733],{"class":278},[51,42100,41983],{"class":65},[51,42102,31243],{"class":248},[51,42104,70],{"class":69},[51,42106,42067],{"class":65},[51,42108,759],{"class":278},[51,42110,41983],{"class":65},[51,42112,31252],{"class":248},[51,42114,70],{"class":69},[51,42116,861],{"class":278},[51,42118,920],{"class":65},[51,42120,31261],{"class":248},[51,42122,70],{"class":69},[51,42124,620],{"class":278},[51,42126,282],{"class":65},[51,42128,42129],{"class":53,"line":345},[51,42130,42131],{"class":601},"        # 路线4：定义3*3最大池化和1*1卷积\n",[51,42133,42134],{"class":53,"line":357},[51,42135,42136],{"class":601},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[51,42138,42139,42141,42144,42146,42148,42150,42152,42154,42156,42158,42160,42162,42164,42166,42168,42170],{"class":53,"line":366},[51,42140,31223],{"class":278},[51,42142,42143],{"class":65},".p4_1",[51,42145,70],{"class":69},[51,42147,35204],{"class":65},[51,42149,31252],{"class":248},[51,42151,70],{"class":69},[51,42153,614],{"class":278},[51,42155,920],{"class":65},[51,42157,31307],{"class":248},[51,42159,70],{"class":69},[51,42161,759],{"class":278},[51,42163,920],{"class":65},[51,42165,31261],{"class":248},[51,42167,70],{"class":69},[51,42169,759],{"class":278},[51,42171,282],{"class":65},[51,42173,42174,42176,42179,42181,42183,42185,42187,42189,42191,42193,42196,42198,42200,42202],{"class":53,"line":383},[51,42175,31223],{"class":278},[51,42177,42178],{"class":65},".p4_2",[51,42180,70],{"class":69},[51,42182,31231],{"class":65},[51,42184,31234],{"class":248},[51,42186,70],{"class":69},[51,42188,41934],{"class":65},[51,42190,31243],{"class":248},[51,42192,70],{"class":69},[51,42194,42195],{"class":65},"c4,",[51,42197,31252],{"class":248},[51,42199,70],{"class":69},[51,42201,759],{"class":278},[51,42203,282],{"class":65},[51,42205,42206],{"class":53,"line":392},[51,42207,206],{"emptyLinePlaceholder":205},[51,42209,42210,42212,42214],{"class":53,"line":403},[51,42211,31179],{"class":69},[51,42213,31471],{"class":57},[51,42215,31474],{"class":65},[51,42217,42218,42221,42223,42225,42227,42229],{"class":53,"line":409},[51,42219,42220],{"class":65},"        p1",[51,42222,70],{"class":69},[51,42224,31201],{"class":278},[51,42226,35559],{"class":65},[51,42228,31201],{"class":278},[51,42230,42231],{"class":65},".p1_1(x))\n",[51,42233,42234,42236,42238,42240,42242,42244,42247,42249,42251,42253],{"class":53,"line":414},[51,42235,7469],{"class":65},[51,42237,70],{"class":69},[51,42239,31201],{"class":278},[51,42241,35559],{"class":65},[51,42243,31201],{"class":278},[51,42245,42246],{"class":65},".p2_2(",[51,42248,31201],{"class":278},[51,42250,35559],{"class":65},[51,42252,31201],{"class":278},[51,42254,42255],{"class":65},".p2_1(x))))\n",[51,42257,42258,42261,42263,42265,42267,42269,42272,42274,42276,42278],{"class":53,"line":433},[51,42259,42260],{"class":65},"        p3",[51,42262,70],{"class":69},[51,42264,31201],{"class":278},[51,42266,35559],{"class":65},[51,42268,31201],{"class":278},[51,42270,42271],{"class":65},".p3_2(",[51,42273,31201],{"class":278},[51,42275,35559],{"class":65},[51,42277,31201],{"class":278},[51,42279,42280],{"class":65},".p3_1(x))))\n",[51,42282,42283,42286,42288,42290,42292,42294,42297,42299],{"class":53,"line":439},[51,42284,42285],{"class":65},"        p4",[51,42287,70],{"class":69},[51,42289,31201],{"class":278},[51,42291,35559],{"class":65},[51,42293,31201],{"class":278},[51,42295,42296],{"class":65},".p4_2(",[51,42298,31201],{"class":278},[51,42300,42301],{"class":65},".p4_1(x)))\n",[51,42303,42304],{"class":53,"line":444},[51,42305,42306],{"class":601},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[51,42308,42309,42311,42314,42316,42318,42320],{"class":53,"line":453},[51,42310,15136],{"class":69},[51,42312,42313],{"class":65}," torch.cat((p1,p2,p3,p4),",[51,42315,33060],{"class":248},[51,42317,70],{"class":69},[51,42319,759],{"class":278},[51,42321,282],{"class":65},[51,42323,42324],{"class":53,"line":2174},[51,42325,206],{"emptyLinePlaceholder":205},[51,42327,42328],{"class":53,"line":2965},[51,42329,206],{"emptyLinePlaceholder":205},[51,42331,42332],{"class":53,"line":2979},[51,42333,42334],{"class":601},"# 搭建GoogLeNet网络\n",[51,42336,42337,42339,42342,42344,42346,42348,42350],{"class":53,"line":2987},[51,42338,15078],{"class":69},[51,42340,42341],{"class":57}," GoogLeNet",[51,42343,546],{"class":65},[51,42345,31156],{"class":57},[51,42347,1100],{"class":65},[51,42349,31161],{"class":57},[51,42351,31164],{"class":65},[51,42353,42354],{"class":53,"line":2992},[51,42355,42356],{"class":601},"    # 必须把Inception导入到里边\n",[51,42358,42359,42361,42363],{"class":53,"line":2998},[51,42360,31179],{"class":69},[51,42362,31182],{"class":278},[51,42364,42365],{"class":65},"(self,Inception):\n",[51,42367,42368,42370,42373,42375,42377,42379],{"class":53,"line":3004},[51,42369,31195],{"class":278},[51,42371,42372],{"class":65},"(GoogLeNet,",[51,42374,31201],{"class":278},[51,42376,31204],{"class":65},[51,42378,31207],{"class":278},[51,42380,2366],{"class":65},[51,42382,42383,42385,42388,42390],{"class":53,"line":3009},[51,42384,31223],{"class":278},[51,42386,42387],{"class":65},".b1",[51,42389,70],{"class":69},[51,42391,38384],{"class":65},[51,42393,42394,42396,42398,42400,42402,42404,42406,42408,42410,42412,42414,42416,42418,42420,42422,42424,42426,42428,42430,42432,42434],{"class":53,"line":8332},[51,42395,38389],{"class":65},[51,42397,31234],{"class":248},[51,42399,70],{"class":69},[51,42401,759],{"class":278},[51,42403,920],{"class":65},[51,42405,31243],{"class":248},[51,42407,70],{"class":69},[51,42409,745],{"class":278},[51,42411,920],{"class":65},[51,42413,31252],{"class":248},[51,42415,70],{"class":69},[51,42417,911],{"class":278},[51,42419,920],{"class":65},[51,42421,31307],{"class":248},[51,42423,70],{"class":69},[51,42425,620],{"class":278},[51,42427,920],{"class":65},[51,42429,31261],{"class":248},[51,42431,70],{"class":69},[51,42433,614],{"class":278},[51,42435,321],{"class":65},[51,42437,42438],{"class":53,"line":8356},[51,42439,38426],{"class":65},[51,42441,42442,42444,42446,42448,42450,42452,42454,42456,42458,42460,42462,42464,42466],{"class":53,"line":8361},[51,42443,38471],{"class":65},[51,42445,31252],{"class":248},[51,42447,70],{"class":69},[51,42449,614],{"class":278},[51,42451,920],{"class":65},[51,42453,31307],{"class":248},[51,42455,70],{"class":69},[51,42457,620],{"class":278},[51,42459,920],{"class":65},[51,42461,31261],{"class":248},[51,42463,70],{"class":69},[51,42465,759],{"class":278},[51,42467,282],{"class":65},[51,42469,42470],{"class":53,"line":8367},[51,42471,38500],{"class":65},[51,42473,42474,42476,42479,42481],{"class":53,"line":8394},[51,42475,31223],{"class":278},[51,42477,42478],{"class":65},".b2",[51,42480,70],{"class":69},[51,42482,38384],{"class":65},[51,42484,42485,42487,42489,42491,42493,42495,42497,42499,42501,42503,42505,42507,42509],{"class":53,"line":8399},[51,42486,38389],{"class":65},[51,42488,31234],{"class":248},[51,42490,70],{"class":69},[51,42492,745],{"class":278},[51,42494,920],{"class":65},[51,42496,31243],{"class":248},[51,42498,70],{"class":69},[51,42500,745],{"class":278},[51,42502,920],{"class":65},[51,42504,31252],{"class":248},[51,42506,70],{"class":69},[51,42508,759],{"class":278},[51,42510,321],{"class":65},[51,42512,42513],{"class":53,"line":8405},[51,42514,38426],{"class":65},[51,42516,42517,42519,42521,42523,42525,42527,42529,42531,42534,42536,42538,42540,42542,42544,42546,42548,42550],{"class":53,"line":8417},[51,42518,38389],{"class":65},[51,42520,31234],{"class":248},[51,42522,70],{"class":69},[51,42524,745],{"class":278},[51,42526,920],{"class":65},[51,42528,31243],{"class":248},[51,42530,70],{"class":69},[51,42532,42533],{"class":278},"192",[51,42535,920],{"class":65},[51,42537,31252],{"class":248},[51,42539,70],{"class":69},[51,42541,614],{"class":278},[51,42543,920],{"class":65},[51,42545,31261],{"class":248},[51,42547,70],{"class":69},[51,42549,759],{"class":278},[51,42551,321],{"class":65},[51,42553,42554],{"class":53,"line":8429},[51,42555,38426],{"class":65},[51,42557,42558,42560,42562,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582],{"class":53,"line":8441},[51,42559,38471],{"class":65},[51,42561,31252],{"class":248},[51,42563,70],{"class":69},[51,42565,614],{"class":278},[51,42567,920],{"class":65},[51,42569,31307],{"class":248},[51,42571,70],{"class":69},[51,42573,620],{"class":278},[51,42575,920],{"class":65},[51,42577,31261],{"class":248},[51,42579,70],{"class":69},[51,42581,759],{"class":278},[51,42583,282],{"class":65},[51,42585,42586],{"class":53,"line":10100},[51,42587,38500],{"class":65},[51,42589,42590,42592,42595,42597],{"class":53,"line":10125},[51,42591,31223],{"class":278},[51,42593,42594],{"class":65},".b3",[51,42596,70],{"class":69},[51,42598,38384],{"class":65},[51,42600,42601,42604,42606,42608,42610,42613,42615,42617,42619,42622,42624,42626,42628,42631,42633],{"class":53,"line":10148},[51,42602,42603],{"class":65},"            Inception(",[51,42605,42533],{"class":278},[51,42607,920],{"class":65},[51,42609,745],{"class":278},[51,42611,42612],{"class":65},",(",[51,42614,751],{"class":278},[51,42616,920],{"class":65},[51,42618,32445],{"class":278},[51,42620,42621],{"class":65},"),(",[51,42623,1143],{"class":278},[51,42625,920],{"class":65},[51,42627,739],{"class":278},[51,42629,42630],{"class":65},"),",[51,42632,739],{"class":278},[51,42634,321],{"class":65},[51,42636,42637,42639,42641,42643,42645,42647,42649,42651,42653,42655,42657,42659,42661,42663,42665],{"class":53,"line":10172},[51,42638,42603],{"class":65},[51,42640,35245],{"class":278},[51,42642,920],{"class":65},[51,42644,32445],{"class":278},[51,42646,42612],{"class":65},[51,42648,32445],{"class":278},[51,42650,920],{"class":65},[51,42652,42533],{"class":278},[51,42654,42621],{"class":65},[51,42656,739],{"class":278},[51,42658,920],{"class":65},[51,42660,751],{"class":278},[51,42662,42630],{"class":65},[51,42664,745],{"class":278},[51,42666,321],{"class":65},[51,42668,42669,42671,42673,42675,42677,42679,42681,42683,42685,42687,42689,42691,42693],{"class":53,"line":10177},[51,42670,38471],{"class":65},[51,42672,31252],{"class":248},[51,42674,70],{"class":69},[51,42676,614],{"class":278},[51,42678,920],{"class":65},[51,42680,31307],{"class":248},[51,42682,70],{"class":69},[51,42684,620],{"class":278},[51,42686,920],{"class":65},[51,42688,31261],{"class":248},[51,42690,70],{"class":69},[51,42692,759],{"class":278},[51,42694,282],{"class":65},[51,42696,42697],{"class":53,"line":10182},[51,42698,38500],{"class":65},[51,42700,42701,42703,42706,42708],{"class":53,"line":10187},[51,42702,31223],{"class":278},[51,42704,42705],{"class":65},".b4",[51,42707,70],{"class":69},[51,42709,38384],{"class":65},[51,42711,42712,42714,42717,42719,42721,42723,42725,42727,42730,42732,42734,42736,42738,42740,42742],{"class":53,"line":10196},[51,42713,42603],{"class":65},[51,42715,42716],{"class":278},"480",[51,42718,920],{"class":65},[51,42720,42533],{"class":278},[51,42722,42612],{"class":65},[51,42724,751],{"class":278},[51,42726,920],{"class":65},[51,42728,42729],{"class":278},"208",[51,42731,42621],{"class":65},[51,42733,1143],{"class":278},[51,42735,920],{"class":65},[51,42737,1149],{"class":278},[51,42739,42630],{"class":65},[51,42741,745],{"class":278},[51,42743,321],{"class":65},[51,42745,42746,42748,42750,42752,42754,42756,42758,42760,42762,42764,42766,42768,42770,42772,42774],{"class":53,"line":10201},[51,42747,42603],{"class":65},[51,42749,38831],{"class":278},[51,42751,920],{"class":65},[51,42753,21431],{"class":278},[51,42755,42612],{"class":65},[51,42757,1160],{"class":278},[51,42759,920],{"class":65},[51,42761,31877],{"class":278},[51,42763,42621],{"class":65},[51,42765,1342],{"class":278},[51,42767,920],{"class":65},[51,42769,745],{"class":278},[51,42771,42630],{"class":65},[51,42773,745],{"class":278},[51,42775,321],{"class":65},[51,42777,42778,42780,42782,42784,42786,42788,42790,42792,42794,42796,42798,42800,42802,42804,42806],{"class":53,"line":10207},[51,42779,42603],{"class":65},[51,42781,38831],{"class":278},[51,42783,920],{"class":65},[51,42785,32445],{"class":278},[51,42787,42612],{"class":65},[51,42789,32445],{"class":278},[51,42791,920],{"class":65},[51,42793,35245],{"class":278},[51,42795,42621],{"class":65},[51,42797,1342],{"class":278},[51,42799,920],{"class":65},[51,42801,745],{"class":278},[51,42803,42630],{"class":65},[51,42805,745],{"class":278},[51,42807,321],{"class":65},[51,42809,42810,42812,42814,42816,42818,42820,42822,42824,42827,42829,42831,42833,42835,42837,42839],{"class":53,"line":10228},[51,42811,42603],{"class":65},[51,42813,38831],{"class":278},[51,42815,920],{"class":65},[51,42817,1160],{"class":278},[51,42819,42612],{"class":65},[51,42821,32445],{"class":278},[51,42823,920],{"class":65},[51,42825,42826],{"class":278},"288",[51,42828,42621],{"class":65},[51,42830,739],{"class":278},[51,42832,920],{"class":65},[51,42834,745],{"class":278},[51,42836,42630],{"class":65},[51,42838,745],{"class":278},[51,42840,321],{"class":65},[51,42842,42843,42845,42848,42850,42852,42854,42856,42858,42861,42863,42865,42867,42869,42871,42873],{"class":53,"line":10234},[51,42844,42603],{"class":65},[51,42846,42847],{"class":278},"528",[51,42849,920],{"class":65},[51,42851,35245],{"class":278},[51,42853,42612],{"class":65},[51,42855,21431],{"class":278},[51,42857,920],{"class":65},[51,42859,42860],{"class":278},"320",[51,42862,42621],{"class":65},[51,42864,739],{"class":278},[51,42866,920],{"class":65},[51,42868,32445],{"class":278},[51,42870,42630],{"class":65},[51,42872,32445],{"class":278},[51,42874,321],{"class":65},[51,42876,42877,42879,42881,42883,42885,42887,42889,42891,42893,42895,42897,42899,42901],{"class":53,"line":10248},[51,42878,38471],{"class":65},[51,42880,31252],{"class":248},[51,42882,70],{"class":69},[51,42884,614],{"class":278},[51,42886,920],{"class":65},[51,42888,31307],{"class":248},[51,42890,70],{"class":69},[51,42892,620],{"class":278},[51,42894,920],{"class":65},[51,42896,31261],{"class":248},[51,42898,70],{"class":69},[51,42900,759],{"class":278},[51,42902,282],{"class":65},[51,42904,42905],{"class":53,"line":10254},[51,42906,38500],{"class":65},[51,42908,42909,42911,42914,42916],{"class":53,"line":10281},[51,42910,31223],{"class":278},[51,42912,42913],{"class":65},".b5",[51,42915,70],{"class":69},[51,42917,38384],{"class":65},[51,42919,42920,42922,42925,42927,42929,42931,42933,42935,42937,42939,42941,42943,42945,42947,42949],{"class":53,"line":10290},[51,42921,42603],{"class":65},[51,42923,42924],{"class":278},"832",[51,42926,920],{"class":65},[51,42928,35245],{"class":278},[51,42930,42612],{"class":65},[51,42932,21431],{"class":278},[51,42934,920],{"class":65},[51,42936,42860],{"class":278},[51,42938,42621],{"class":65},[51,42940,739],{"class":278},[51,42942,920],{"class":65},[51,42944,32445],{"class":278},[51,42946,42630],{"class":65},[51,42948,32445],{"class":278},[51,42950,321],{"class":65},[51,42952,42953,42955,42957,42959,42961,42963,42965,42967,42969,42971,42973,42975,42977,42979,42981],{"class":53,"line":10296},[51,42954,42603],{"class":65},[51,42956,42924],{"class":278},[51,42958,920],{"class":65},[51,42960,35315],{"class":278},[51,42962,42612],{"class":65},[51,42964,42533],{"class":278},[51,42966,920],{"class":65},[51,42968,35315],{"class":278},[51,42970,42621],{"class":65},[51,42972,1149],{"class":278},[51,42974,920],{"class":65},[51,42976,32445],{"class":278},[51,42978,42630],{"class":65},[51,42980,32445],{"class":278},[51,42982,321],{"class":65},[51,42984,42985,42988,42990,42992,42994],{"class":53,"line":10304},[51,42986,42987],{"class":65},"            nn.AdaptiveAvgPool2d((",[51,42989,759],{"class":278},[51,42991,920],{"class":65},[51,42993,759],{"class":278},[51,42995,42996],{"class":65},")),\n",[51,42998,42999],{"class":53,"line":10309},[51,43000,39164],{"class":65},[51,43002,43003,43005,43008,43010,43012],{"class":53,"line":16987},[51,43004,39169],{"class":65},[51,43006,43007],{"class":278},"1024",[51,43009,920],{"class":65},[51,43011,988],{"class":278},[51,43013,282],{"class":65},[51,43015,43016],{"class":53,"line":16993},[51,43017,38500],{"class":65},[51,43019,43020],{"class":53,"line":17016},[51,43021,43022],{"class":601},"        # 对模型参数初始化\n",[51,43024,43025,43027,43029,43031,43033],{"class":53,"line":17022},[51,43026,3790],{"class":69},[51,43028,39242],{"class":65},[51,43030,26425],{"class":69},[51,43032,39247],{"class":278},[51,43034,39250],{"class":65},[51,43036,43037,43039,43041],{"class":53,"line":17045},[51,43038,5027],{"class":69},[51,43040,39262],{"class":278},[51,43042,39265],{"class":65},[51,43044,43045,43047,43050,43052,43055,43057,43059,43061,43063],{"class":53,"line":17059},[51,43046,39275],{"class":65},[51,43048,43049],{"class":248},"mode",[51,43051,70],{"class":69},[51,43053,43054],{"class":61},"'fan_out'",[51,43056,920],{"class":65},[51,43058,39278],{"class":248},[51,43060,70],{"class":69},[51,43062,39283],{"class":61},[51,43064,282],{"class":65},[51,43066,43067],{"class":53,"line":17079},[51,43068,43069],{"class":601},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[51,43071,43072],{"class":53,"line":17085},[51,43073,43074],{"class":601},"                # ② mode = 'fan_out'决定使用的fan值：\n",[51,43076,43077],{"class":53,"line":17096},[51,43078,43079],{"class":601},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[51,43081,43082],{"class":53,"line":17119},[51,43083,43084],{"class":601},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[51,43086,43087],{"class":53,"line":17141},[51,43088,43089],{"class":601},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[51,43091,43092],{"class":53,"line":17146},[51,43093,43094],{"class":601},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[51,43096,43097,43099,43101,43103,43105,43107],{"class":53,"line":17152},[51,43098,39295],{"class":69},[51,43100,39298],{"class":65},[51,43102,39301],{"class":69},[51,43104,39304],{"class":69},[51,43106,39307],{"class":278},[51,43108,363],{"class":65},[51,43110,43111,43113,43115],{"class":53,"line":17166},[51,43112,39319],{"class":65},[51,43114,733],{"class":278},[51,43116,282],{"class":65},[51,43118,43119,43122,43124],{"class":53,"line":17179},[51,43120,43121],{"class":69},"                elif",[51,43123,39262],{"class":278},[51,43125,39338],{"class":65},[51,43127,43128,43131,43133,43135,43137],{"class":53,"line":17184},[51,43129,43130],{"class":65},"                    nn.init.normal_(m.weight,",[51,43132,733],{"class":278},[51,43134,920],{"class":65},[51,43136,39360],{"class":278},[51,43138,282],{"class":65},[51,43140,43141,43144,43146,43148,43150,43152],{"class":53,"line":17198},[51,43142,43143],{"class":69},"                    if",[51,43145,39298],{"class":65},[51,43147,39301],{"class":69},[51,43149,39304],{"class":69},[51,43151,39307],{"class":278},[51,43153,363],{"class":65},[51,43155,43156,43159,43161],{"class":53,"line":17203},[51,43157,43158],{"class":65},"                        nn.init.constant_(m.bias,",[51,43160,733],{"class":278},[51,43162,282],{"class":65},[51,43164,43165],{"class":53,"line":17209},[51,43166,35540],{"class":601},[51,43168,43169,43171,43173],{"class":53,"line":17214},[51,43170,31179],{"class":69},[51,43172,31471],{"class":57},[51,43174,31474],{"class":65},[51,43176,43177,43179,43181,43183],{"class":53,"line":17228},[51,43178,31479],{"class":65},[51,43180,70],{"class":69},[51,43182,31201],{"class":278},[51,43184,43185],{"class":65},".b1(x)\n",[51,43187,43188,43190,43192,43194],{"class":53,"line":17233},[51,43189,31479],{"class":65},[51,43191,70],{"class":69},[51,43193,31201],{"class":278},[51,43195,43196],{"class":65},".b2(x)\n",[51,43198,43199,43201,43203,43205],{"class":53,"line":17238},[51,43200,31479],{"class":65},[51,43202,70],{"class":69},[51,43204,31201],{"class":278},[51,43206,43207],{"class":65},".b3(x)\n",[51,43209,43210,43212,43214,43216],{"class":53,"line":17252},[51,43211,31479],{"class":65},[51,43213,70],{"class":69},[51,43215,31201],{"class":278},[51,43217,43218],{"class":65},".b4(x)\n",[51,43220,43221,43223,43225,43227],{"class":53,"line":17264},[51,43222,31479],{"class":65},[51,43224,70],{"class":69},[51,43226,31201],{"class":278},[51,43228,43229],{"class":65},".b5(x)\n",[51,43231,43232,43234],{"class":53,"line":17269},[51,43233,15136],{"class":69},[51,43235,31587],{"class":65},[51,43237,43238],{"class":53,"line":17282},[51,43239,206],{"emptyLinePlaceholder":205},[51,43241,43242],{"class":53,"line":17287},[51,43243,43244],{"class":601},"# 模型展示\n",[51,43246,43247,43249,43251,43253,43255],{"class":53,"line":17292},[51,43248,1940],{"class":69},[51,43250,31598],{"class":278},[51,43252,375],{"class":69},[51,43254,31603],{"class":61},[51,43256,363],{"class":65},[51,43258,43259,43261,43263,43265,43267,43269,43271,43273,43275],{"class":53,"line":17297},[51,43260,31615],{"class":65},[51,43262,70],{"class":69},[51,43264,30830],{"class":65},[51,43266,31622],{"class":61},[51,43268,2102],{"class":69},[51,43270,31627],{"class":65},[51,43272,2099],{"class":69},[51,43274,30855],{"class":61},[51,43276,282],{"class":65},[51,43278,43279,43281,43283],{"class":53,"line":17310},[51,43280,31667],{"class":65},[51,43282,70],{"class":69},[51,43284,43285],{"class":65},"GoogLeNet(Inception).to(device)\n",[51,43287,43288,43290,43292,43294,43296,43298,43300,43302],{"class":53,"line":17315},[51,43289,31677],{"class":278},[51,43291,31680],{"class":65},[51,43293,759],{"class":278},[51,43295,920],{"class":65},[51,43297,31877],{"class":278},[51,43299,920],{"class":65},[51,43301,31877],{"class":278},[51,43303,31693],{"class":65},[19,43305,43306],{"start":185},[22,43307,39557],{},[41,43309,43311],{"className":170,"code":43310,"language":172,"meta":46,"style":46},"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",[48,43312,43313,43319,43325,43335,43341,43351,43361,43371,43381,43391,43395,43406,43416,43420,43424,43428,43436,43448,43458,43474,43484,43516,43530,43540,43550,43554,43564,43578,43588,43598,43608,43614,43618,43622,43626,43630,43634,43642,43662,43666,43670,43674,43678,43682,43698,43702,43706,43714,43718,43722,43730,43734,43738,43742,43750,43754,43758,43762,43766,43774,43778,43786,43790,43798,43802,43810,43814,43822,43826,43830,43838,43842,43846,43850,43862,43886,43900,43904,43908,43912,43920,43924,43932,43936,43944,43948,43956,43960,43968,43972,43980,43984,43996,44000,44008,44012,44020,44024,44028,44032,44036,44044,44048,44064,44068,44076,44080,44084,44088,44092,44096,44100,44104,44120,44124,44136,44140,44152,44156,44168,44172,44180,44184,44192,44196,44200,44204,44210,44214,44222,44226,44242,44246,44254,44258,44274,44286,44290,44302,44306,44310,44318,44322,44326,44334,44338,44346,44350,44358,44362,44366,44408,44450,44454,44458,44474,44478,44494,44498,44502,44510,44514,44518,44530,44568,44572,44576,44584,44588,44602,44612,44618,44624,44630,44636,44640,44644,44650,44654,44658,44666,44670,44688,44692,44696,44700,44716,44720,44724,44728,44732,44736,44756,44776,44780,44784,44788,44796,44804,44808,44824,44844,44864,44868,44872,44880,44888,44892,44896,44900,44912,44916,44926,44934,44951],{"__ignoreMap":46},[51,43314,43315,43317],{"class":53,"line":54},[51,43316,179],{"class":69},[51,43318,32198],{"class":65},[51,43320,43321,43323],{"class":53,"line":185},[51,43322,179],{"class":69},[51,43324,32205],{"class":65},[51,43326,43327,43329,43331,43333],{"class":53,"line":202},[51,43328,179],{"class":69},[51,43330,32216],{"class":65},[51,43332,217],{"class":69},[51,43334,32221],{"class":65},[51,43336,43337,43339],{"class":53,"line":209},[51,43338,179],{"class":69},[51,43340,30774],{"class":65},[51,43342,43343,43345,43347,43349],{"class":53,"line":223},[51,43344,226],{"class":69},[51,43346,31792],{"class":65},[51,43348,179],{"class":69},[51,43350,32238],{"class":65},[51,43352,43353,43355,43357,43359],{"class":53,"line":237},[51,43354,226],{"class":69},[51,43356,31746],{"class":65},[51,43358,179],{"class":69},[51,43360,31751],{"class":65},[51,43362,43363,43365,43367,43369],{"class":53,"line":242},[51,43364,226],{"class":69},[51,43366,31775],{"class":65},[51,43368,179],{"class":69},[51,43370,31780],{"class":65},[51,43372,43373,43375,43377,43379],{"class":53,"line":257},[51,43374,179],{"class":69},[51,43376,31792],{"class":65},[51,43378,217],{"class":69},[51,43380,31797],{"class":65},[51,43382,43383,43385,43387,43389],{"class":53,"line":262},[51,43384,179],{"class":69},[51,43386,31809],{"class":65},[51,43388,217],{"class":69},[51,43390,31814],{"class":65},[51,43392,43393],{"class":53,"line":285},[51,43394,32283],{"class":601},[51,43396,43397,43399,43401,43403],{"class":53,"line":296},[51,43398,226],{"class":69},[51,43400,32290],{"class":65},[51,43402,179],{"class":69},[51,43404,43405],{"class":65}," GoogLeNet, Inception\n",[51,43407,43408,43410,43412,43414],{"class":53,"line":307},[51,43409,226],{"class":69},[51,43411,31118],{"class":65},[51,43413,179],{"class":69},[51,43415,31123],{"class":65},[51,43417,43418],{"class":53,"line":324},[51,43419,206],{"emptyLinePlaceholder":205},[51,43421,43422],{"class":53,"line":329},[51,43423,206],{"emptyLinePlaceholder":205},[51,43425,43426],{"class":53,"line":334},[51,43427,32318],{"class":601},[51,43429,43430,43432,43434],{"class":53,"line":340},[51,43431,348],{"class":69},[51,43433,32325],{"class":57},[51,43435,32328],{"class":65},[51,43437,43438,43440,43442,43444,43446],{"class":53,"line":345},[51,43439,32333],{"class":65},[51,43441,70],{"class":69},[51,43443,31832],{"class":65},[51,43445,31840],{"class":61},[51,43447,31843],{"class":65},[51,43449,43450,43452,43454,43456],{"class":53,"line":357},[51,43451,32346],{"class":248},[51,43453,70],{"class":69},[51,43455,279],{"class":278},[51,43457,31843],{"class":65},[51,43459,43460,43462,43464,43466,43468,43470,43472],{"class":53,"line":366},[51,43461,32357],{"class":248},[51,43463,70],{"class":69},[51,43465,31869],{"class":65},[51,43467,31872],{"class":248},[51,43469,70],{"class":69},[51,43471,35824],{"class":278},[51,43473,31880],{"class":65},[51,43475,43476,43478,43480,43482],{"class":53,"line":383},[51,43477,32374],{"class":248},[51,43479,70],{"class":69},[51,43481,279],{"class":278},[51,43483,282],{"class":65},[51,43485,43486,43488,43490,43492,43494,43496,43498,43500,43502,43504,43506,43508,43510,43512,43514],{"class":53,"line":392},[51,43487,32385],{"class":65},[51,43489,70],{"class":69},[51,43491,32390],{"class":65},[51,43493,32393],{"class":278},[51,43495,546],{"class":65},[51,43497,32398],{"class":278},[51,43499,997],{"class":69},[51,43501,7742],{"class":278},[51,43503,32405],{"class":65},[51,43505,32393],{"class":278},[51,43507,546],{"class":65},[51,43509,32412],{"class":278},[51,43511,997],{"class":69},[51,43513,7742],{"class":278},[51,43515,32419],{"class":65},[51,43517,43518,43520,43522,43524,43526,43528],{"class":53,"line":403},[51,43519,32424],{"class":65},[51,43521,70],{"class":69},[51,43523,32429],{"class":65},[51,43525,31913],{"class":248},[51,43527,70],{"class":69},[51,43529,31918],{"class":65},[51,43531,43532,43534,43536,43538],{"class":53,"line":409},[51,43533,32440],{"class":248},[51,43535,70],{"class":69},[51,43537,739],{"class":278},[51,43539,31843],{"class":65},[51,43541,43542,43544,43546,43548],{"class":53,"line":414},[51,43543,32452],{"class":248},[51,43545,70],{"class":69},[51,43547,279],{"class":278},[51,43549,31843],{"class":65},[51,43551,43552],{"class":53,"line":433},[51,43553,32463],{"class":601},[51,43555,43556,43558,43560,43562],{"class":53,"line":439},[51,43557,32468],{"class":248},[51,43559,70],{"class":69},[51,43561,937],{"class":278},[51,43563,282],{"class":65},[51,43565,43566,43568,43570,43572,43574,43576],{"class":53,"line":444},[51,43567,32479],{"class":65},[51,43569,70],{"class":69},[51,43571,31910],{"class":65},[51,43573,31913],{"class":248},[51,43575,70],{"class":69},[51,43577,32490],{"class":65},[51,43579,43580,43582,43584,43586],{"class":53,"line":453},[51,43581,32495],{"class":248},[51,43583,70],{"class":69},[51,43585,739],{"class":278},[51,43587,31843],{"class":65},[51,43589,43590,43592,43594,43596],{"class":53,"line":2174},[51,43591,32506],{"class":248},[51,43593,70],{"class":69},[51,43595,279],{"class":278},[51,43597,31843],{"class":65},[51,43599,43600,43602,43604,43606],{"class":53,"line":2965},[51,43601,32517],{"class":248},[51,43603,70],{"class":69},[51,43605,937],{"class":278},[51,43607,282],{"class":65},[51,43609,43610,43612],{"class":53,"line":2979},[51,43611,4476],{"class":69},[51,43613,32530],{"class":65},[51,43615,43616],{"class":53,"line":2987},[51,43617,206],{"emptyLinePlaceholder":205},[51,43619,43620],{"class":53,"line":2992},[51,43621,32539],{"class":601},[51,43623,43624],{"class":53,"line":2998},[51,43625,32544],{"class":601},[51,43627,43628],{"class":53,"line":3004},[51,43629,206],{"emptyLinePlaceholder":205},[51,43631,43632],{"class":53,"line":3009},[51,43633,32553],{"class":601},[51,43635,43636,43638,43640],{"class":53,"line":8332},[51,43637,348],{"class":69},[51,43639,32560],{"class":57},[51,43641,32563],{"class":65},[51,43643,43644,43646,43648,43650,43652,43654,43656,43658,43660],{"class":53,"line":8356},[51,43645,31615],{"class":65},[51,43647,70],{"class":69},[51,43649,30830],{"class":65},[51,43651,31622],{"class":61},[51,43653,2102],{"class":69},[51,43655,31627],{"class":65},[51,43657,2099],{"class":69},[51,43659,32582],{"class":61},[51,43661,282],{"class":65},[51,43663,43664],{"class":53,"line":8361},[51,43665,206],{"emptyLinePlaceholder":205},[51,43667,43668],{"class":53,"line":8367},[51,43669,206],{"emptyLinePlaceholder":205},[51,43671,43672],{"class":53,"line":8394},[51,43673,32597],{"class":601},[51,43675,43676],{"class":53,"line":8399},[51,43677,32602],{"class":601},[51,43679,43680],{"class":53,"line":8405},[51,43681,32607],{"class":601},[51,43683,43684,43686,43688,43690,43692,43694,43696],{"class":53,"line":8417},[51,43685,32612],{"class":65},[51,43687,70],{"class":69},[51,43689,32617],{"class":65},[51,43691,32620],{"class":248},[51,43693,70],{"class":69},[51,43695,32625],{"class":278},[51,43697,282],{"class":65},[51,43699,43700],{"class":53,"line":8429},[51,43701,206],{"emptyLinePlaceholder":205},[51,43703,43704],{"class":53,"line":8441},[51,43705,32636],{"class":601},[51,43707,43708,43710,43712],{"class":53,"line":10100},[51,43709,32641],{"class":65},[51,43711,70],{"class":69},[51,43713,32646],{"class":65},[51,43715,43716],{"class":53,"line":10125},[51,43717,206],{"emptyLinePlaceholder":205},[51,43719,43720],{"class":53,"line":10148},[51,43721,32655],{"class":601},[51,43723,43724,43726,43728],{"class":53,"line":10172},[51,43725,31667],{"class":65},[51,43727,70],{"class":69},[51,43729,32664],{"class":65},[51,43731,43732],{"class":53,"line":10177},[51,43733,32669],{"class":601},[51,43735,43736],{"class":53,"line":10182},[51,43737,32674],{"class":601},[51,43739,43740],{"class":53,"line":10187},[51,43741,32679],{"class":601},[51,43743,43744,43746,43748],{"class":53,"line":10196},[51,43745,32684],{"class":65},[51,43747,70],{"class":69},[51,43749,32689],{"class":65},[51,43751,43752],{"class":53,"line":10201},[51,43753,206],{"emptyLinePlaceholder":205},[51,43755,43756],{"class":53,"line":10207},[51,43757,206],{"emptyLinePlaceholder":205},[51,43759,43760],{"class":53,"line":10228},[51,43761,32702],{"class":601},[51,43763,43764],{"class":53,"line":10234},[51,43765,32707],{"class":601},[51,43767,43768,43770,43772],{"class":53,"line":10248},[51,43769,32712],{"class":65},[51,43771,70],{"class":69},[51,43773,32717],{"class":278},[51,43775,43776],{"class":53,"line":10254},[51,43777,32722],{"class":601},[51,43779,43780,43782,43784],{"class":53,"line":10281},[51,43781,32727],{"class":65},[51,43783,70],{"class":69},[51,43785,32732],{"class":65},[51,43787,43788],{"class":53,"line":10290},[51,43789,32737],{"class":601},[51,43791,43792,43794,43796],{"class":53,"line":10296},[51,43793,32742],{"class":65},[51,43795,70],{"class":69},[51,43797,32732],{"class":65},[51,43799,43800],{"class":53,"line":10304},[51,43801,32751],{"class":601},[51,43803,43804,43806,43808],{"class":53,"line":10309},[51,43805,32756],{"class":65},[51,43807,70],{"class":69},[51,43809,32732],{"class":65},[51,43811,43812],{"class":53,"line":16987},[51,43813,32765],{"class":601},[51,43815,43816,43818,43820],{"class":53,"line":16993},[51,43817,32770],{"class":65},[51,43819,70],{"class":69},[51,43821,32732],{"class":65},[51,43823,43824],{"class":53,"line":17016},[51,43825,206],{"emptyLinePlaceholder":205},[51,43827,43828],{"class":53,"line":17022},[51,43829,32783],{"class":601},[51,43831,43832,43834,43836],{"class":53,"line":17045},[51,43833,32788],{"class":65},[51,43835,70],{"class":69},[51,43837,32793],{"class":65},[51,43839,43840],{"class":53,"line":17059},[51,43841,206],{"emptyLinePlaceholder":205},[51,43843,43844],{"class":53,"line":17079},[51,43845,206],{"emptyLinePlaceholder":205},[51,43847,43848],{"class":53,"line":17085},[51,43849,32806],{"class":601},[51,43851,43852,43854,43856,43858,43860],{"class":53,"line":17096},[51,43853,3588],{"class":69},[51,43855,32813],{"class":65},[51,43857,26425],{"class":69},[51,43859,32818],{"class":278},[51,43861,32821],{"class":65},[51,43863,43864,43866,43868,43870,43872,43874,43876,43878,43880,43882,43884],{"class":53,"line":17119},[51,43865,32826],{"class":278},[51,43867,546],{"class":65},[51,43869,32831],{"class":61},[51,43871,32834],{"class":278},[51,43873,1126],{"class":61},[51,43875,32834],{"class":278},[51,43877,793],{"class":61},[51,43879,32843],{"class":65},[51,43881,1074],{"class":69},[51,43883,759],{"class":278},[51,43885,30876],{"class":65},[51,43887,43888,43890,43892,43894,43896,43898],{"class":53,"line":17141},[51,43889,32826],{"class":278},[51,43891,546],{"class":65},[51,43893,32858],{"class":61},[51,43895,997],{"class":69},[51,43897,988],{"class":278},[51,43899,282],{"class":65},[51,43901,43902],{"class":53,"line":17146},[51,43903,206],{"emptyLinePlaceholder":205},[51,43905,43906],{"class":53,"line":17152},[51,43907,32873],{"class":601},[51,43909,43910],{"class":53,"line":17166},[51,43911,32878],{"class":601},[51,43913,43914,43916,43918],{"class":53,"line":17179},[51,43915,32883],{"class":65},[51,43917,70],{"class":69},[51,43919,32717],{"class":278},[51,43921,43922],{"class":53,"line":17184},[51,43923,32892],{"class":601},[51,43925,43926,43928,43930],{"class":53,"line":17198},[51,43927,32897],{"class":65},[51,43929,70],{"class":69},[51,43931,3472],{"class":278},[51,43933,43934],{"class":53,"line":17203},[51,43935,32906],{"class":601},[51,43937,43938,43940,43942],{"class":53,"line":17209},[51,43939,32911],{"class":65},[51,43941,70],{"class":69},[51,43943,32717],{"class":278},[51,43945,43946],{"class":53,"line":17214},[51,43947,32920],{"class":601},[51,43949,43950,43952,43954],{"class":53,"line":17228},[51,43951,32925],{"class":65},[51,43953,70],{"class":69},[51,43955,3472],{"class":278},[51,43957,43958],{"class":53,"line":17233},[51,43959,32934],{"class":601},[51,43961,43962,43964,43966],{"class":53,"line":17238},[51,43963,32939],{"class":65},[51,43965,70],{"class":69},[51,43967,3472],{"class":278},[51,43969,43970],{"class":53,"line":17252},[51,43971,32948],{"class":601},[51,43973,43974,43976,43978],{"class":53,"line":17264},[51,43975,32953],{"class":65},[51,43977,70],{"class":69},[51,43979,3472],{"class":278},[51,43981,43982],{"class":53,"line":17269},[51,43983,32962],{"class":601},[51,43985,43986,43988,43990,43992,43994],{"class":53,"line":17282},[51,43987,3790],{"class":69},[51,43989,31977],{"class":65},[51,43991,26425],{"class":69},[51,43993,31982],{"class":278},[51,43995,32975],{"class":65},[51,43997,43998],{"class":53,"line":17287},[51,43999,32980],{"class":601},[51,44001,44002,44004,44006],{"class":53,"line":17292},[51,44003,32985],{"class":65},[51,44005,70],{"class":69},[51,44007,32990],{"class":65},[51,44009,44010],{"class":53,"line":17297},[51,44011,32995],{"class":601},[51,44013,44014,44016,44018],{"class":53,"line":17310},[51,44015,33000],{"class":65},[51,44017,70],{"class":69},[51,44019,33005],{"class":65},[51,44021,44022],{"class":53,"line":17315},[51,44023,33011],{"class":601},[51,44025,44026],{"class":53,"line":33008},[51,44027,33017],{"class":65},[51,44029,44030],{"class":53,"line":33014},[51,44031,33023],{"class":601},[51,44033,44034],{"class":53,"line":33020},[51,44035,33029],{"class":601},[51,44037,44038,44040,44042],{"class":53,"line":33026},[51,44039,33035],{"class":65},[51,44041,70],{"class":69},[51,44043,33040],{"class":65},[51,44045,44046],{"class":53,"line":33032},[51,44047,33046],{"class":601},[51,44049,44050,44052,44054,44056,44058,44060,44062],{"class":53,"line":33043},[51,44051,33052],{"class":65},[51,44053,70],{"class":69},[51,44055,33057],{"class":65},[51,44057,33060],{"class":248},[51,44059,70],{"class":69},[51,44061,759],{"class":278},[51,44063,282],{"class":65},[51,44065,44066],{"class":53,"line":33049},[51,44067,33072],{"class":601},[51,44069,44070,44072,44074],{"class":53,"line":33069},[51,44071,33078],{"class":65},[51,44073,70],{"class":69},[51,44075,33083],{"class":65},[51,44077,44078],{"class":53,"line":33075},[51,44079,33089],{"class":601},[51,44081,44082],{"class":53,"line":33086},[51,44083,33095],{"class":65},[51,44085,44086],{"class":53,"line":33092},[51,44087,33101],{"class":601},[51,44089,44090],{"class":53,"line":33098},[51,44091,33107],{"class":65},[51,44093,44094],{"class":53,"line":33104},[51,44095,33113],{"class":601},[51,44097,44098],{"class":53,"line":33110},[51,44099,33119],{"class":65},[51,44101,44102],{"class":53,"line":33116},[51,44103,33125],{"class":601},[51,44105,44106,44108,44110,44112,44114,44116,44118],{"class":53,"line":33122},[51,44107,33131],{"class":65},[51,44109,9861],{"class":69},[51,44111,33136],{"class":65},[51,44113,997],{"class":69},[51,44115,33141],{"class":65},[51,44117,733],{"class":278},[51,44119,282],{"class":65},[51,44121,44122],{"class":53,"line":33128},[51,44123,33151],{"class":601},[51,44125,44126,44128,44130,44132,44134],{"class":53,"line":33148},[51,44127,33157],{"class":65},[51,44129,9861],{"class":69},[51,44131,33162],{"class":65},[51,44133,375],{"class":69},[51,44135,33167],{"class":65},[51,44137,44138],{"class":53,"line":33154},[51,44139,33173],{"class":601},[51,44141,44142,44144,44146,44148,44150],{"class":53,"line":33170},[51,44143,33179],{"class":65},[51,44145,9861],{"class":69},[51,44147,33141],{"class":65},[51,44149,733],{"class":278},[51,44151,282],{"class":65},[51,44153,44154],{"class":53,"line":33176},[51,44155,33193],{"class":601},[51,44157,44158,44160,44162,44164,44166],{"class":53,"line":33190},[51,44159,3790],{"class":69},[51,44161,33201],{"class":65},[51,44163,26425],{"class":69},[51,44165,31982],{"class":278},[51,44167,33208],{"class":65},[51,44169,44170],{"class":53,"line":33196},[51,44171,33214],{"class":601},[51,44173,44174,44176,44178],{"class":53,"line":33211},[51,44175,32985],{"class":65},[51,44177,70],{"class":69},[51,44179,32990],{"class":65},[51,44181,44182],{"class":53,"line":33217},[51,44183,33229],{"class":601},[51,44185,44186,44188,44190],{"class":53,"line":33226},[51,44187,33000],{"class":65},[51,44189,70],{"class":69},[51,44191,33005],{"class":65},[51,44193,44194],{"class":53,"line":33232},[51,44195,33244],{"class":601},[51,44197,44198],{"class":53,"line":33241},[51,44199,33250],{"class":65},[51,44201,44202],{"class":53,"line":33247},[51,44203,36731],{"class":601},[51,44205,44206,44208],{"class":53,"line":33253},[51,44207,33256],{"class":69},[51,44209,33259],{"class":65},[51,44211,44212],{"class":53,"line":33262},[51,44213,33265],{"class":601},[51,44215,44216,44218,44220],{"class":53,"line":33268},[51,44217,36746],{"class":65},[51,44219,70],{"class":69},[51,44221,33040],{"class":65},[51,44223,44224],{"class":53,"line":33279},[51,44225,33282],{"class":601},[51,44227,44228,44230,44232,44234,44236,44238,44240],{"class":53,"line":33285},[51,44229,36759],{"class":65},[51,44231,70],{"class":69},[51,44233,33057],{"class":65},[51,44235,33060],{"class":248},[51,44237,70],{"class":69},[51,44239,759],{"class":278},[51,44241,282],{"class":65},[51,44243,44244],{"class":53,"line":33304},[51,44245,33307],{"class":601},[51,44247,44248,44250,44252],{"class":53,"line":33310},[51,44249,36780],{"class":65},[51,44251,70],{"class":69},[51,44253,33083],{"class":65},[51,44255,44256],{"class":53,"line":33321},[51,44257,33324],{"class":601},[51,44259,44260,44262,44264,44266,44268,44270,44272],{"class":53,"line":33327},[51,44261,36793],{"class":65},[51,44263,9861],{"class":69},[51,44265,36798],{"class":65},[51,44267,997],{"class":69},[51,44269,33141],{"class":65},[51,44271,733],{"class":278},[51,44273,282],{"class":65},[51,44275,44276,44278,44280,44282,44284],{"class":53,"line":33347},[51,44277,36811],{"class":65},[51,44279,9861],{"class":69},[51,44281,33162],{"class":65},[51,44283,375],{"class":69},[51,44285,33167],{"class":65},[51,44287,44288],{"class":53,"line":33363},[51,44289,36824],{"class":601},[51,44291,44292,44294,44296,44298,44300],{"class":53,"line":33369},[51,44293,36829],{"class":65},[51,44295,9861],{"class":69},[51,44297,33141],{"class":65},[51,44299,733],{"class":278},[51,44301,282],{"class":65},[51,44303,44304],{"class":53,"line":33383},[51,44305,33386],{"class":601},[51,44307,44308],{"class":53,"line":33389},[51,44309,33392],{"class":601},[51,44311,44312,44314,44316],{"class":53,"line":33395},[51,44313,33398],{"class":65},[51,44315,1126],{"class":69},[51,44317,33403],{"class":65},[51,44319,44320],{"class":53,"line":33406},[51,44321,33409],{"class":601},[51,44323,44324],{"class":53,"line":33412},[51,44325,33415],{"class":601},[51,44327,44328,44330,44332],{"class":53,"line":33418},[51,44329,33421],{"class":65},[51,44331,1126],{"class":69},[51,44333,33403],{"class":65},[51,44335,44336],{"class":53,"line":33428},[51,44337,33431],{"class":601},[51,44339,44340,44342,44344],{"class":53,"line":33434},[51,44341,33437],{"class":65},[51,44343,1126],{"class":69},[51,44345,33442],{"class":65},[51,44347,44348],{"class":53,"line":33445},[51,44349,33448],{"class":601},[51,44351,44352,44354,44356],{"class":53,"line":33451},[51,44353,33454],{"class":65},[51,44355,1126],{"class":69},[51,44357,33442],{"class":65},[51,44359,44360],{"class":53,"line":33461},[51,44361,206],{"emptyLinePlaceholder":205},[51,44363,44364],{"class":53,"line":33466},[51,44365,33469],{"class":601},[51,44367,44368,44370,44372,44374,44376,44378,44380,44382,44384,44386,44388,44390,44392,44394,44396,44398,44400,44402,44404,44406],{"class":53,"line":33472},[51,44369,32826],{"class":278},[51,44371,546],{"class":65},[51,44373,3979],{"class":61},[51,44375,32834],{"class":278},[51,44377,33483],{"class":61},[51,44379,1438],{"class":278},[51,44381,33488],{"class":69},[51,44383,1488],{"class":278},[51,44385,33493],{"class":61},[51,44387,1438],{"class":278},[51,44389,33488],{"class":69},[51,44391,1488],{"class":278},[51,44393,3979],{"class":61},[51,44395,33504],{"class":65},[51,44397,1074],{"class":69},[51,44399,759],{"class":278},[51,44401,33511],{"class":65},[51,44403,1074],{"class":69},[51,44405,759],{"class":278},[51,44407,33518],{"class":65},[51,44409,44410,44412,44414,44416,44418,44420,44422,44424,44426,44428,44430,44432,44434,44436,44438,44440,44442,44444,44446,44448],{"class":53,"line":33521},[51,44411,32826],{"class":278},[51,44413,546],{"class":65},[51,44415,3979],{"class":61},[51,44417,32834],{"class":278},[51,44419,33532],{"class":61},[51,44421,1438],{"class":278},[51,44423,33488],{"class":69},[51,44425,1488],{"class":278},[51,44427,33541],{"class":61},[51,44429,1438],{"class":278},[51,44431,33488],{"class":69},[51,44433,1488],{"class":278},[51,44435,3979],{"class":61},[51,44437,33552],{"class":65},[51,44439,1074],{"class":69},[51,44441,759],{"class":278},[51,44443,33559],{"class":65},[51,44445,1074],{"class":69},[51,44447,759],{"class":278},[51,44449,33518],{"class":65},[51,44451,44452],{"class":53,"line":33568},[51,44453,206],{"emptyLinePlaceholder":205},[51,44455,44456],{"class":53,"line":33573},[51,44457,33576],{"class":601},[51,44459,44460,44462,44464,44466,44468,44470,44472],{"class":53,"line":33579},[51,44461,369],{"class":69},[51,44463,33584],{"class":65},[51,44465,1074],{"class":69},[51,44467,759],{"class":278},[51,44469,1482],{"class":65},[51,44471,1502],{"class":69},[51,44473,33595],{"class":65},[51,44475,44476],{"class":53,"line":33598},[51,44477,33601],{"class":601},[51,44479,44480,44482,44484,44486,44488,44490,44492],{"class":53,"line":33604},[51,44481,33607],{"class":65},[51,44483,584],{"class":278},[51,44485,70],{"class":69},[51,44487,33614],{"class":65},[51,44489,1074],{"class":69},[51,44491,759],{"class":278},[51,44493,33621],{"class":65},[51,44495,44496],{"class":53,"line":33624},[51,44497,33627],{"class":601},[51,44499,44500],{"class":53,"line":33630},[51,44501,33633],{"class":601},[51,44503,44504,44506,44508],{"class":53,"line":33636},[51,44505,33639],{"class":65},[51,44507,70],{"class":69},[51,44509,32689],{"class":65},[51,44511,44512],{"class":53,"line":33646},[51,44513,206],{"emptyLinePlaceholder":205},[51,44515,44516],{"class":53,"line":33651},[51,44517,33654],{"class":601},[51,44519,44520,44522,44524,44526,44528],{"class":53,"line":33657},[51,44521,33660],{"class":65},[51,44523,70],{"class":69},[51,44525,33665],{"class":65},[51,44527,1074],{"class":69},[51,44529,33670],{"class":65},[51,44531,44532,44534,44536,44538,44540,44542,44544,44546,44548,44550,44552,44554,44556,44558,44560,44562,44564,44566],{"class":53,"line":33673},[51,44533,32826],{"class":278},[51,44535,546],{"class":65},[51,44537,33680],{"class":61},[51,44539,1438],{"class":278},[51,44541,33685],{"class":69},[51,44543,1488],{"class":278},[51,44545,1086],{"class":61},[51,44547,1438],{"class":278},[51,44549,33685],{"class":69},[51,44551,1488],{"class":278},[51,44553,33698],{"class":61},[51,44555,33701],{"class":65},[51,44557,33704],{"class":69},[51,44559,1449],{"class":278},[51,44561,33709],{"class":65},[51,44563,870],{"class":69},[51,44565,1449],{"class":278},[51,44567,30876],{"class":65},[51,44569,44570],{"class":53,"line":33718},[51,44571,37108],{"class":601},[51,44573,44574],{"class":53,"line":33724},[51,44575,37113],{"class":601},[51,44577,44578,44580,44582],{"class":53,"line":33730},[51,44579,37118],{"class":65},[51,44581,33742],{"class":61},[51,44583,282],{"class":65},[51,44585,44586],{"class":53,"line":33736},[51,44587,33762],{"class":601},[51,44589,44590,44592,44594,44596,44598,44600],{"class":53,"line":33747},[51,44591,33768],{"class":65},[51,44593,70],{"class":69},[51,44595,33773],{"class":65},[51,44597,33776],{"class":248},[51,44599,70],{"class":69},[51,44601,1955],{"class":65},[51,44603,44604,44606,44608,44610],{"class":53,"line":33753},[51,44605,33786],{"class":61},[51,44607,1401],{"class":65},[51,44609,33791],{"class":278},[51,44611,33794],{"class":65},[51,44613,44614,44616],{"class":53,"line":33759},[51,44615,33800],{"class":61},[51,44617,33803],{"class":65},[51,44619,44620,44622],{"class":53,"line":33765},[51,44621,33809],{"class":61},[51,44623,33812],{"class":65},[51,44625,44626,44628],{"class":53,"line":33783},[51,44627,33818],{"class":61},[51,44629,33821],{"class":65},[51,44631,44632,44634],{"class":53,"line":33797},[51,44633,33827],{"class":61},[51,44635,33830],{"class":65},[51,44637,44638],{"class":53,"line":33806},[51,44639,33836],{"class":65},[51,44641,44642],{"class":53,"line":33815},[51,44643,33842],{"class":601},[51,44645,44646,44648],{"class":53,"line":33824},[51,44647,4476],{"class":69},[51,44649,33850],{"class":65},[51,44651,44652],{"class":53,"line":33833},[51,44653,206],{"emptyLinePlaceholder":205},[51,44655,44656],{"class":53,"line":33839},[51,44657,33861],{"class":601},[51,44659,44660,44662,44664],{"class":53,"line":33845},[51,44661,348],{"class":69},[51,44663,33869],{"class":57},[51,44665,33872],{"class":65},[51,44667,44668],{"class":53,"line":33853},[51,44669,33878],{"class":601},[51,44671,44672,44674,44676,44678,44680,44682,44684,44686],{"class":53,"line":33858},[51,44673,33884],{"class":65},[51,44675,32069],{"class":248},[51,44677,70],{"class":69},[51,44679,546],{"class":65},[51,44681,1040],{"class":278},[51,44683,920],{"class":65},[51,44685,835],{"class":278},[51,44687,30876],{"class":65},[51,44689,44690],{"class":53,"line":33864},[51,44691,33904],{"class":601},[51,44693,44694],{"class":53,"line":33875},[51,44695,33910],{"class":601},[51,44697,44698],{"class":53,"line":33881},[51,44699,33916],{"class":601},[51,44701,44702,44704,44706,44708,44710,44712,44714],{"class":53,"line":33901},[51,44703,32103],{"class":65},[51,44705,759],{"class":278},[51,44707,920],{"class":65},[51,44709,620],{"class":278},[51,44711,920],{"class":65},[51,44713,759],{"class":278},[51,44715,282],{"class":65},[51,44717,44718],{"class":53,"line":33907},[51,44719,33939],{"class":601},[51,44721,44722],{"class":53,"line":33913},[51,44723,33945],{"class":601},[51,44725,44726],{"class":53,"line":33919},[51,44727,33951],{"class":601},[51,44729,44730],{"class":53,"line":33936},[51,44731,33957],{"class":601},[51,44733,44734],{"class":53,"line":33942},[51,44735,33963],{"class":601},[51,44737,44738,44740,44742,44744,44746,44748,44750,44752,44754],{"class":53,"line":33948},[51,44739,33969],{"class":65},[51,44741,33972],{"class":61},[51,44743,33975],{"class":65},[51,44745,33978],{"class":61},[51,44747,920],{"class":65},[51,44749,33983],{"class":248},[51,44751,70],{"class":69},[51,44753,33988],{"class":61},[51,44755,282],{"class":65},[51,44757,44758,44760,44762,44764,44766,44768,44770,44772,44774],{"class":53,"line":33954},[51,44759,33969],{"class":65},[51,44761,33972],{"class":61},[51,44763,34000],{"class":65},[51,44765,34003],{"class":61},[51,44767,920],{"class":65},[51,44769,33983],{"class":248},[51,44771,70],{"class":69},[51,44773,34012],{"class":61},[51,44775,282],{"class":65},[51,44777,44778],{"class":53,"line":33960},[51,44779,34020],{"class":601},[51,44781,44782],{"class":53,"line":33966},[51,44783,34026],{"class":65},[51,44785,44786],{"class":53,"line":33993},[51,44787,34032],{"class":601},[51,44789,44790,44792,44794],{"class":53,"line":34017},[51,44791,34038],{"class":65},[51,44793,34041],{"class":61},[51,44795,282],{"class":65},[51,44797,44798,44800,44802],{"class":53,"line":34023},[51,44799,34049],{"class":65},[51,44801,34052],{"class":61},[51,44803,282],{"class":65},[51,44805,44806],{"class":53,"line":34029},[51,44807,34060],{"class":601},[51,44809,44810,44812,44814,44816,44818,44820,44822],{"class":53,"line":34035},[51,44811,32103],{"class":65},[51,44813,759],{"class":278},[51,44815,920],{"class":65},[51,44817,620],{"class":278},[51,44819,920],{"class":65},[51,44821,620],{"class":278},[51,44823,282],{"class":65},[51,44825,44826,44828,44830,44832,44834,44836,44838,44840,44842],{"class":53,"line":34046},[51,44827,33969],{"class":65},[51,44829,33972],{"class":61},[51,44831,34087],{"class":65},[51,44833,33978],{"class":61},[51,44835,920],{"class":65},[51,44837,33983],{"class":248},[51,44839,70],{"class":69},[51,44841,34098],{"class":61},[51,44843,282],{"class":65},[51,44845,44846,44848,44850,44852,44854,44856,44858,44860,44862],{"class":53,"line":34057},[51,44847,33969],{"class":65},[51,44849,33972],{"class":61},[51,44851,34110],{"class":65},[51,44853,34003],{"class":61},[51,44855,920],{"class":65},[51,44857,33983],{"class":248},[51,44859,70],{"class":69},[51,44861,34121],{"class":61},[51,44863,282],{"class":65},[51,44865,44866],{"class":53,"line":34063},[51,44867,34129],{"class":601},[51,44869,44870],{"class":53,"line":34080},[51,44871,34026],{"class":65},[51,44873,44874,44876,44878],{"class":53,"line":34103},[51,44875,34038],{"class":65},[51,44877,33972],{"class":61},[51,44879,282],{"class":65},[51,44881,44882,44884,44886],{"class":53,"line":34126},[51,44883,34049],{"class":65},[51,44885,34151],{"class":61},[51,44887,282],{"class":65},[51,44889,44890],{"class":53,"line":34132},[51,44891,34159],{"class":65},[51,44893,44894],{"class":53,"line":34137},[51,44895,206],{"emptyLinePlaceholder":205},[51,44897,44898],{"class":53,"line":34146},[51,44899,34170],{"class":601},[51,44901,44902,44904,44906,44908,44910],{"class":53,"line":34156},[51,44903,1940],{"class":69},[51,44905,31598],{"class":278},[51,44907,375],{"class":69},[51,44909,31603],{"class":61},[51,44911,363],{"class":65},[51,44913,44914],{"class":53,"line":34162},[51,44915,34189],{"class":601},[51,44917,44918,44921,44923],{"class":53,"line":34167},[51,44919,44920],{"class":65},"    GoogLeNet",[51,44922,70],{"class":69},[51,44924,44925],{"class":65},"GoogLeNet(Inception)\n",[51,44927,44928,44930,44932],{"class":53,"line":34173},[51,44929,34206],{"class":65},[51,44931,70],{"class":69},[51,44933,34211],{"class":65},[51,44935,44936,44938,44940,44943,44945,44947,44949],{"class":53,"line":34186},[51,44937,33768],{"class":65},[51,44939,70],{"class":69},[51,44941,44942],{"class":65},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[51,44944,34224],{"class":248},[51,44946,70],{"class":69},[51,44948,1493],{"class":278},[51,44950,282],{"class":65},[51,44952,44953],{"class":53,"line":34192},[51,44954,34236],{"class":65},[19,44956,44957],{"start":202},[22,44958,40948],{},[41,44960,44962],{"className":170,"code":44961,"language":172,"meta":46,"style":46},"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",[48,44963,44964,44970,44980,44990,44994,45004,45015,45019,45023,45027,45035,45051,45061,45077,45087,45101,45105,45115,45125,45135,45141,45145,45149,45157,45161,45177,45185,45189,45193,45201,45209,45213,45217,45221,45225,45231,45235,45245,45253,45261,45265,45269,45273,45281,45285,45301,45305,45309,45313,45325,45329,45341,45345,45349,45361,45365,45375,45379,45383,45395,45399,45407,45411,45415,45423,45427,45435,45439,45443,45447,45451,45455,45471,45479,45483,45487,45535,45541,45545,45555,45563,45571,45575,45579,45583,45587,45595,45599,45615,45619,45627,45635],{"__ignoreMap":46},[51,44965,44966,44968],{"class":53,"line":54},[51,44967,179],{"class":69},[51,44969,30774],{"class":65},[51,44971,44972,44974,44976,44978],{"class":53,"line":185},[51,44973,179],{"class":69},[51,44975,31792],{"class":65},[51,44977,217],{"class":69},[51,44979,31797],{"class":65},[51,44981,44982,44984,44986,44988],{"class":53,"line":202},[51,44983,226],{"class":69},[51,44985,31775],{"class":65},[51,44987,179],{"class":69},[51,44989,31780],{"class":65},[51,44991,44992],{"class":53,"line":209},[51,44993,34297],{"class":601},[51,44995,44996,44998,45000,45002],{"class":53,"line":223},[51,44997,226],{"class":69},[51,44999,31746],{"class":65},[51,45001,179],{"class":69},[51,45003,31751],{"class":65},[51,45005,45006,45008,45010,45012],{"class":53,"line":237},[51,45007,226],{"class":69},[51,45009,32290],{"class":65},[51,45011,179],{"class":69},[51,45013,45014],{"class":65}," GoogLeNet,Inception\n",[51,45016,45017],{"class":53,"line":242},[51,45018,206],{"emptyLinePlaceholder":205},[51,45020,45021],{"class":53,"line":257},[51,45022,206],{"emptyLinePlaceholder":205},[51,45024,45025],{"class":53,"line":262},[51,45026,34326],{"class":601},[51,45028,45029,45031,45033],{"class":53,"line":285},[51,45030,348],{"class":69},[51,45032,34333],{"class":57},[51,45034,32328],{"class":65},[51,45036,45037,45039,45041,45043,45045,45047,45049],{"class":53,"line":296},[51,45038,34340],{"class":65},[51,45040,70],{"class":69},[51,45042,31832],{"class":65},[51,45044,31835],{"class":248},[51,45046,70],{"class":69},[51,45048,31840],{"class":61},[51,45050,31843],{"class":65},[51,45052,45053,45055,45057,45059],{"class":53,"line":307},[51,45054,34357],{"class":248},[51,45056,70],{"class":69},[51,45058,34362],{"class":278},[51,45060,31843],{"class":65},[51,45062,45063,45065,45067,45069,45071,45073,45075],{"class":53,"line":324},[51,45064,34369],{"class":248},[51,45066,70],{"class":69},[51,45068,31869],{"class":65},[51,45070,31872],{"class":248},[51,45072,70],{"class":69},[51,45074,35824],{"class":278},[51,45076,31880],{"class":65},[51,45078,45079,45081,45083,45085],{"class":53,"line":329},[51,45080,34386],{"class":248},[51,45082,70],{"class":69},[51,45084,279],{"class":278},[51,45086,282],{"class":65},[51,45088,45089,45091,45093,45095,45097,45099],{"class":53,"line":334},[51,45090,34397],{"class":65},[51,45092,70],{"class":69},[51,45094,31910],{"class":65},[51,45096,31913],{"class":248},[51,45098,70],{"class":69},[51,45100,34408],{"class":65},[51,45102,45103],{"class":53,"line":340},[51,45104,34413],{"class":601},[51,45106,45107,45109,45111,45113],{"class":53,"line":345},[51,45108,34418],{"class":248},[51,45110,70],{"class":69},[51,45112,759],{"class":278},[51,45114,31843],{"class":65},[51,45116,45117,45119,45121,45123],{"class":53,"line":357},[51,45118,34429],{"class":248},[51,45120,70],{"class":69},[51,45122,279],{"class":278},[51,45124,31843],{"class":65},[51,45126,45127,45129,45131,45133],{"class":53,"line":366},[51,45128,34440],{"class":248},[51,45130,70],{"class":69},[51,45132,733],{"class":278},[51,45134,282],{"class":65},[51,45136,45137,45139],{"class":53,"line":383},[51,45138,4476],{"class":69},[51,45140,34453],{"class":65},[51,45142,45143],{"class":53,"line":392},[51,45144,206],{"emptyLinePlaceholder":205},[51,45146,45147],{"class":53,"line":403},[51,45148,34462],{"class":601},[51,45150,45151,45153,45155],{"class":53,"line":409},[51,45152,348],{"class":69},[51,45154,34469],{"class":57},[51,45156,34472],{"class":65},[51,45158,45159],{"class":53,"line":414},[51,45160,34477],{"class":601},[51,45162,45163,45165,45167,45169,45171,45173,45175],{"class":53,"line":433},[51,45164,31615],{"class":65},[51,45166,70],{"class":69},[51,45168,31622],{"class":61},[51,45170,2102],{"class":69},[51,45172,31627],{"class":65},[51,45174,2099],{"class":69},[51,45176,34494],{"class":61},[51,45178,45179,45181,45183],{"class":53,"line":439},[51,45180,31667],{"class":65},[51,45182,70],{"class":69},[51,45184,32664],{"class":65},[51,45186,45187],{"class":53,"line":444},[51,45188,206],{"emptyLinePlaceholder":205},[51,45190,45191],{"class":53,"line":453},[51,45192,34511],{"class":601},[51,45194,45195,45197,45199],{"class":53,"line":2174},[51,45196,34516],{"class":65},[51,45198,70],{"class":69},[51,45200,32717],{"class":278},[51,45202,45203,45205,45207],{"class":53,"line":2965},[51,45204,34525],{"class":65},[51,45206,70],{"class":69},[51,45208,3472],{"class":278},[51,45210,45211],{"class":53,"line":2979},[51,45212,206],{"emptyLinePlaceholder":205},[51,45214,45215],{"class":53,"line":2987},[51,45216,34538],{"class":601},[51,45218,45219],{"class":53,"line":2992},[51,45220,34543],{"class":601},[51,45222,45223],{"class":53,"line":2998},[51,45224,34548],{"class":601},[51,45226,45227,45229],{"class":53,"line":3004},[51,45228,34553],{"class":69},[51,45230,33259],{"class":65},[51,45232,45233],{"class":53,"line":3009},[51,45234,34560],{"class":601},[51,45236,45237,45239,45241,45243],{"class":53,"line":8332},[51,45238,3790],{"class":69},[51,45240,34567],{"class":65},[51,45242,26425],{"class":69},[51,45244,34572],{"class":65},[51,45246,45247,45249,45251],{"class":53,"line":8356},[51,45248,34577],{"class":65},[51,45250,70],{"class":69},[51,45252,34582],{"class":65},[51,45254,45255,45257,45259],{"class":53,"line":8361},[51,45256,34587],{"class":65},[51,45258,70],{"class":69},[51,45260,34592],{"class":65},[51,45262,45263],{"class":53,"line":8367},[51,45264,34597],{"class":601},[51,45266,45267],{"class":53,"line":8394},[51,45268,33250],{"class":65},[51,45270,45271],{"class":53,"line":8399},[51,45272,34606],{"class":601},[51,45274,45275,45277,45279],{"class":53,"line":8405},[51,45276,33035],{"class":65},[51,45278,70],{"class":69},[51,45280,34615],{"class":65},[51,45282,45283],{"class":53,"line":8417},[51,45284,34620],{"class":601},[51,45286,45287,45289,45291,45293,45295,45297,45299],{"class":53,"line":8429},[51,45288,33052],{"class":65},[51,45290,70],{"class":69},[51,45292,33057],{"class":65},[51,45294,33060],{"class":248},[51,45296,70],{"class":69},[51,45298,759],{"class":278},[51,45300,282],{"class":65},[51,45302,45303],{"class":53,"line":8441},[51,45304,34641],{"class":601},[51,45306,45307],{"class":53,"line":10100},[51,45308,34646],{"class":601},[51,45310,45311],{"class":53,"line":10125},[51,45312,34651],{"class":601},[51,45314,45315,45317,45319,45321,45323],{"class":53,"line":10148},[51,45316,34656],{"class":65},[51,45318,9861],{"class":69},[51,45320,33162],{"class":65},[51,45322,375],{"class":69},[51,45324,34665],{"class":65},[51,45326,45327],{"class":53,"line":10172},[51,45328,34670],{"class":601},[51,45330,45331,45333,45335,45337,45339],{"class":53,"line":10177},[51,45332,34675],{"class":65},[51,45334,9861],{"class":69},[51,45336,34680],{"class":65},[51,45338,733],{"class":278},[51,45340,282],{"class":65},[51,45342,45343],{"class":53,"line":10182},[51,45344,206],{"emptyLinePlaceholder":205},[51,45346,45347],{"class":53,"line":10187},[51,45348,34693],{"class":601},[51,45350,45351,45353,45355,45357,45359],{"class":53,"line":10196},[51,45352,34698],{"class":65},[51,45354,70],{"class":69},[51,45356,34703],{"class":65},[51,45358,1126],{"class":69},[51,45360,34708],{"class":65},[51,45362,45363],{"class":53,"line":10201},[51,45364,34713],{"class":601},[51,45366,45367,45369,45371,45373],{"class":53,"line":10207},[51,45368,32826],{"class":278},[51,45370,546],{"class":65},[51,45372,34722],{"class":61},[51,45374,34725],{"class":65},[51,45376,45377],{"class":53,"line":10228},[51,45378,206],{"emptyLinePlaceholder":205},[51,45380,45381],{"class":53,"line":10234},[51,45382,34734],{"class":601},[51,45384,45385,45387,45389,45391,45393],{"class":53,"line":10248},[51,45386,1940],{"class":69},[51,45388,31598],{"class":278},[51,45390,375],{"class":69},[51,45392,31603],{"class":61},[51,45394,363],{"class":65},[51,45396,45397],{"class":53,"line":10254},[51,45398,34751],{"class":601},[51,45400,45401,45403,45405],{"class":53,"line":10281},[51,45402,31667],{"class":65},[51,45404,70],{"class":69},[51,45406,44925],{"class":65},[51,45408,45409],{"class":53,"line":10290},[51,45410,34764],{"class":601},[51,45412,45413],{"class":53,"line":10296},[51,45414,34769],{"class":601},[51,45416,45417,45419,45421],{"class":53,"line":10304},[51,45418,34774],{"class":65},[51,45420,34777],{"class":61},[51,45422,30876],{"class":65},[51,45424,45425],{"class":53,"line":10309},[51,45426,34784],{"class":601},[51,45428,45429,45431,45433],{"class":53,"line":16987},[51,45430,34397],{"class":65},[51,45432,70],{"class":69},[51,45434,34793],{"class":65},[51,45436,45437],{"class":53,"line":16993},[51,45438,34798],{"class":601},[51,45440,45441],{"class":53,"line":17016},[51,45442,34803],{"class":65},[51,45444,45445],{"class":53,"line":17022},[51,45446,206],{"emptyLinePlaceholder":205},[51,45448,45449],{"class":53,"line":17045},[51,45450,34812],{"class":601},[51,45452,45453],{"class":53,"line":17059},[51,45454,34817],{"class":601},[51,45456,45457,45459,45461,45463,45465,45467,45469],{"class":53,"line":17079},[51,45458,31615],{"class":65},[51,45460,70],{"class":69},[51,45462,31622],{"class":61},[51,45464,2102],{"class":69},[51,45466,31627],{"class":65},[51,45468,2099],{"class":69},[51,45470,34494],{"class":61},[51,45472,45473,45475,45477],{"class":53,"line":17085},[51,45474,31667],{"class":65},[51,45476,70],{"class":69},[51,45478,32664],{"class":65},[51,45480,45481],{"class":53,"line":17096},[51,45482,34846],{"class":601},[51,45484,45485],{"class":53,"line":17119},[51,45486,34851],{"class":601},[51,45488,45489,45491,45493,45495,45497,45499,45501,45503,45505,45507,45509,45511,45513,45515,45517,45519,45521,45523,45525,45527,45529,45531,45533],{"class":53,"line":17141},[51,45490,34856],{"class":65},[51,45492,70],{"class":69},[51,45494,1432],{"class":65},[51,45496,34863],{"class":61},[51,45498,920],{"class":65},[51,45500,34868],{"class":61},[51,45502,920],{"class":65},[51,45504,34873],{"class":61},[51,45506,920],{"class":65},[51,45508,34878],{"class":61},[51,45510,920],{"class":65},[51,45512,34883],{"class":61},[51,45514,920],{"class":65},[51,45516,34888],{"class":61},[51,45518,920],{"class":65},[51,45520,34893],{"class":61},[51,45522,920],{"class":65},[51,45524,34898],{"class":61},[51,45526,920],{"class":65},[51,45528,34903],{"class":61},[51,45530,920],{"class":65},[51,45532,34908],{"class":61},[51,45534,33621],{"class":65},[51,45536,45537,45539],{"class":53,"line":17146},[51,45538,34553],{"class":69},[51,45540,33259],{"class":65},[51,45542,45543],{"class":53,"line":17152},[51,45544,34921],{"class":601},[51,45546,45547,45549,45551,45553],{"class":53,"line":17166},[51,45548,3790],{"class":69},[51,45550,34928],{"class":65},[51,45552,26425],{"class":69},[51,45554,34572],{"class":65},[51,45556,45557,45559,45561],{"class":53,"line":17179},[51,45558,32985],{"class":65},[51,45560,70],{"class":69},[51,45562,32990],{"class":65},[51,45564,45565,45567,45569],{"class":53,"line":17184},[51,45566,33000],{"class":65},[51,45568,70],{"class":69},[51,45570,33005],{"class":65},[51,45572,45573],{"class":53,"line":17198},[51,45574,206],{"emptyLinePlaceholder":205},[51,45576,45577],{"class":53,"line":17203},[51,45578,34957],{"class":601},[51,45580,45581],{"class":53,"line":17209},[51,45582,33250],{"class":65},[51,45584,45585],{"class":53,"line":17214},[51,45586,34966],{"class":601},[51,45588,45589,45591,45593],{"class":53,"line":17228},[51,45590,33035],{"class":65},[51,45592,70],{"class":69},[51,45594,33040],{"class":65},[51,45596,45597],{"class":53,"line":17233},[51,45598,34979],{"class":601},[51,45600,45601,45603,45605,45607,45609,45611,45613],{"class":53,"line":17238},[51,45602,33052],{"class":65},[51,45604,70],{"class":69},[51,45606,33057],{"class":65},[51,45608,33060],{"class":248},[51,45610,70],{"class":69},[51,45612,759],{"class":278},[51,45614,282],{"class":65},[51,45616,45617],{"class":53,"line":17252},[51,45618,35000],{"class":601},[51,45620,45621,45623,45625],{"class":53,"line":17264},[51,45622,35005],{"class":65},[51,45624,70],{"class":69},[51,45626,35010],{"class":65},[51,45628,45629,45631,45633],{"class":53,"line":17269},[51,45630,35015],{"class":65},[51,45632,70],{"class":69},[51,45634,35020],{"class":65},[51,45636,45637,45639,45641,45643,45645,45647,45649,45651],{"class":53,"line":17282},[51,45638,35025],{"class":278},[51,45640,546],{"class":65},[51,45642,35030],{"class":61},[51,45644,35033],{"class":65},[51,45646,35036],{"class":61},[51,45648,920],{"class":65},[51,45650,35041],{"class":61},[51,45652,35044],{"class":65},[513,45654,45656],{"id":45655},"_24训练自己的数据集","2.4.训练自己的数据集",[10,45658,45659],{},"猫狗分类任务",[10,45661,45662],{},"划分数据集和验证集",[41,45664,45666],{"className":170,"code":45665,"language":172,"meta":46,"style":46},"# 创建脚本，用于划分数据集和验证集\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",[48,45667,45668,45673,45679,45684,45695,45702,45706,45716,45729,45738,45742,45747,45757,45777,45781,45786,45796,45807,45820,45824,45829,45838,45848,45859,45863,45868,45878,45882,45887,45892,45897,45902,45907,45911,45921,45948,45961,45973,46000,46005,46010,46024,46029,46041,46056,46071,46079,46083,46088,46094,46106,46119,46124,46129,46134,46184,46190,46194],{"__ignoreMap":46},[51,45669,45670],{"class":53,"line":54},[51,45671,45672],{"class":601},"# 创建脚本，用于划分数据集和验证集\n",[51,45674,45675,45677],{"class":53,"line":185},[51,45676,179],{"class":69},[51,45678,182],{"class":65},[51,45680,45681],{"class":53,"line":202},[51,45682,45683],{"class":601},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[51,45685,45686,45688,45691,45693],{"class":53,"line":209},[51,45687,226],{"class":69},[51,45689,45690],{"class":65}," shutil ",[51,45692,179],{"class":69},[51,45694,32198],{"class":65},[51,45696,45697,45699],{"class":53,"line":223},[51,45698,179],{"class":69},[51,45700,45701],{"class":65}," random\n",[51,45703,45704],{"class":53,"line":237},[51,45705,206],{"emptyLinePlaceholder":205},[51,45707,45708,45710,45713],{"class":53,"line":242},[51,45709,348],{"class":69},[51,45711,45712],{"class":57}," mkfile",[51,45714,45715],{"class":65},"(file):\n",[51,45717,45718,45720,45722,45725,45727],{"class":53,"line":257},[51,45719,3488],{"class":69},[51,45721,39304],{"class":69},[51,45723,45724],{"class":65}," os.path.exists(",[51,45726,313],{"class":248},[51,45728,31164],{"class":65},[51,45730,45731,45734,45736],{"class":53,"line":262},[51,45732,45733],{"class":65},"        os.makedirs(",[51,45735,313],{"class":248},[51,45737,282],{"class":65},[51,45739,45740],{"class":53,"line":285},[51,45741,206],{"emptyLinePlaceholder":205},[51,45743,45744],{"class":53,"line":296},[51,45745,45746],{"class":601},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[51,45748,45749,45752,45754],{"class":53,"line":307},[51,45750,45751],{"class":65},"file_path",[51,45753,70],{"class":69},[51,45755,45756],{"class":61},"'data_cat_dog'\n",[51,45758,45759,45762,45764,45767,45769,45772,45774],{"class":53,"line":324},[51,45760,45761],{"class":65},"flower_class",[51,45763,70],{"class":69},[51,45765,45766],{"class":65},"[cla ",[51,45768,3412],{"class":69},[51,45770,45771],{"class":65}," cla ",[51,45773,26425],{"class":69},[51,45775,45776],{"class":65}," os.listdir(file_path)]\n",[51,45778,45779],{"class":53,"line":329},[51,45780,206],{"emptyLinePlaceholder":205},[51,45782,45783],{"class":53,"line":334},[51,45784,45785],{"class":601},"# 创建训练集train文件夹\n",[51,45787,45788,45791,45794],{"class":53,"line":340},[51,45789,45790],{"class":65},"mkfile(",[51,45792,45793],{"class":61},"'data\u002Ftrain'",[51,45795,282],{"class":65},[51,45797,45798,45800,45802,45804],{"class":53,"line":345},[51,45799,3412],{"class":69},[51,45801,45771],{"class":65},[51,45803,26425],{"class":69},[51,45805,45806],{"class":65}," flower_class:\n",[51,45808,45809,45812,45815,45817],{"class":53,"line":357},[51,45810,45811],{"class":65},"    mkfile(",[51,45813,45814],{"class":61},"'data\u002Ftrain\u002F'",[51,45816,1023],{"class":69},[51,45818,45819],{"class":65},"cla)\n",[51,45821,45822],{"class":53,"line":366},[51,45823,206],{"emptyLinePlaceholder":205},[51,45825,45826],{"class":53,"line":383},[51,45827,45828],{"class":601},"# 创建验证集val文件夹\n",[51,45830,45831,45833,45836],{"class":53,"line":392},[51,45832,45790],{"class":65},[51,45834,45835],{"class":61},"'data\u002Ftest'",[51,45837,282],{"class":65},[51,45839,45840,45842,45844,45846],{"class":53,"line":403},[51,45841,3412],{"class":69},[51,45843,45771],{"class":65},[51,45845,26425],{"class":69},[51,45847,45806],{"class":65},[51,45849,45850,45852,45855,45857],{"class":53,"line":409},[51,45851,45811],{"class":65},[51,45853,45854],{"class":61},"'data\u002Ftest\u002F'",[51,45856,1023],{"class":69},[51,45858,45819],{"class":65},[51,45860,45861],{"class":53,"line":414},[51,45862,206],{"emptyLinePlaceholder":205},[51,45864,45865],{"class":53,"line":433},[51,45866,45867],{"class":601},"# 划分比例，训练集：测试集=9：1\n",[51,45869,45870,45873,45875],{"class":53,"line":439},[51,45871,45872],{"class":65},"split_rate",[51,45874,70],{"class":69},[51,45876,45877],{"class":278},"0.1\n",[51,45879,45880],{"class":53,"line":444},[51,45881,206],{"emptyLinePlaceholder":205},[51,45883,45884],{"class":53,"line":453},[51,45885,45886],{"class":601},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[51,45888,45889],{"class":53,"line":2174},[51,45890,45891],{"class":601},"# cla_path：当前类别的原始图片路径\n",[51,45893,45894],{"class":53,"line":2965},[51,45895,45896],{"class":601},"# images：当前类别下所有图片的文件名列表\n",[51,45898,45899],{"class":53,"line":2979},[51,45900,45901],{"class":601},"# num：该类别图片总数\n",[51,45903,45904],{"class":53,"line":2987},[51,45905,45906],{"class":601},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[51,45908,45909],{"class":53,"line":2992},[51,45910,206],{"emptyLinePlaceholder":205},[51,45912,45913,45915,45917,45919],{"class":53,"line":2998},[51,45914,3412],{"class":69},[51,45916,45771],{"class":65},[51,45918,26425],{"class":69},[51,45920,45806],{"class":65},[51,45922,45923,45926,45928,45931,45933,45936,45939,45941,45943,45945],{"class":53,"line":3004},[51,45924,45925],{"class":65},"    cla_path ",[51,45927,70],{"class":69},[51,45929,45930],{"class":65}," file_path ",[51,45932,1023],{"class":69},[51,45934,45935],{"class":61}," '\u002F'",[51,45937,45938],{"class":69}," +",[51,45940,45771],{"class":65},[51,45942,1023],{"class":69},[51,45944,45935],{"class":61},[51,45946,45947],{"class":601},"  # 某一类别的子目录\n",[51,45949,45950,45953,45955,45958],{"class":53,"line":3009},[51,45951,45952],{"class":65},"    images ",[51,45954,70],{"class":69},[51,45956,45957],{"class":65}," os.listdir(cla_path)  ",[51,45959,45960],{"class":601},"# iamges 列表存储了该目录下所有图像的名称\n",[51,45962,45963,45966,45968,45970],{"class":53,"line":8332},[51,45964,45965],{"class":65},"    num ",[51,45967,70],{"class":69},[51,45969,7715],{"class":278},[51,45971,45972],{"class":65},"(images)\n",[51,45974,45975,45978,45980,45983,45985,45987,45989,45992,45994,45997],{"class":53,"line":8356},[51,45976,45977],{"class":65},"    eval_index ",[51,45979,70],{"class":69},[51,45981,45982],{"class":65}," random.sample(images, ",[51,45984,1035],{"class":248},[51,45986,70],{"class":69},[51,45988,549],{"class":278},[51,45990,45991],{"class":65},"(num ",[51,45993,997],{"class":69},[51,45995,45996],{"class":65}," split_rate))  ",[51,45998,45999],{"class":601},"# 从images列表中随机抽取 k 个图像名称\n",[51,46001,46002],{"class":53,"line":8361},[51,46003,46004],{"class":601},"    # 遍历该类别下的所有图片\n",[51,46006,46007],{"class":53,"line":8367},[51,46008,46009],{"class":601},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[51,46011,46012,46014,46017,46019,46021],{"class":53,"line":8394},[51,46013,3588],{"class":69},[51,46015,46016],{"class":65}," index, image ",[51,46018,26425],{"class":69},[51,46020,31982],{"class":278},[51,46022,46023],{"class":65},"(images):\n",[51,46025,46026],{"class":53,"line":8399},[51,46027,46028],{"class":601},"        # eval_index 中保存验证集val的图像名称\n",[51,46030,46031,46033,46036,46038],{"class":53,"line":8405},[51,46032,369],{"class":69},[51,46034,46035],{"class":65}," image ",[51,46037,26425],{"class":69},[51,46039,46040],{"class":65}," eval_index:\n",[51,46042,46043,46046,46048,46051,46053],{"class":53,"line":8417},[51,46044,46045],{"class":65},"            image_path ",[51,46047,70],{"class":69},[51,46049,46050],{"class":65}," cla_path ",[51,46052,1023],{"class":69},[51,46054,46055],{"class":65}," image\n",[51,46057,46058,46061,46063,46066,46068],{"class":53,"line":8429},[51,46059,46060],{"class":65},"            new_path ",[51,46062,70],{"class":69},[51,46064,46065],{"class":61}," 'data\u002Ftest\u002F'",[51,46067,45938],{"class":69},[51,46069,46070],{"class":65}," cla\n",[51,46072,46073,46076],{"class":53,"line":8441},[51,46074,46075],{"class":65},"            copy(image_path, new_path)  ",[51,46077,46078],{"class":601},"# 将选中的图像复制到新路径\n",[51,46080,46081],{"class":53,"line":10100},[51,46082,206],{"emptyLinePlaceholder":205},[51,46084,46085],{"class":53,"line":10125},[51,46086,46087],{"class":601},"        # 其余的图像保存在训练集train中\n",[51,46089,46090,46092],{"class":53,"line":10148},[51,46091,2922],{"class":69},[51,46093,363],{"class":65},[51,46095,46096,46098,46100,46102,46104],{"class":53,"line":10172},[51,46097,46045],{"class":65},[51,46099,70],{"class":69},[51,46101,46050],{"class":65},[51,46103,1023],{"class":69},[51,46105,46055],{"class":65},[51,46107,46108,46110,46112,46115,46117],{"class":53,"line":10177},[51,46109,46060],{"class":65},[51,46111,70],{"class":69},[51,46113,46114],{"class":61}," 'data\u002Ftrain\u002F'",[51,46116,45938],{"class":69},[51,46118,46070],{"class":65},[51,46120,46121],{"class":53,"line":10182},[51,46122,46123],{"class":65},"            copy(image_path, new_path)\n",[51,46125,46126],{"class":53,"line":10187},[51,46127,46128],{"class":601},"            # 打印进度条信息\n",[51,46130,46131],{"class":53,"line":10196},[51,46132,46133],{"class":601},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[51,46135,46136,46138,46140,46142,46145,46147,46149,46152,46154,46156,46158,46161,46164,46166,46168,46171,46174,46176,46178,46181],{"class":53,"line":10201},[51,46137,32826],{"class":278},[51,46139,546],{"class":65},[51,46141,793],{"class":61},[51,46143,46144],{"class":278},"\\r",[51,46146,1432],{"class":61},[51,46148,32834],{"class":278},[51,46150,46151],{"class":61},"] processing [",[51,46153,32834],{"class":278},[51,46155,1126],{"class":61},[51,46157,32834],{"class":278},[51,46159,46160],{"class":61},"]\"",[51,46162,46163],{"class":65},".format(cla, index ",[51,46165,1023],{"class":69},[51,46167,25500],{"class":278},[51,46169,46170],{"class":65},", num), ",[51,46172,46173],{"class":248},"end",[51,46175,70],{"class":69},[51,46177,8036],{"class":61},[51,46179,46180],{"class":65},")  ",[51,46182,46183],{"class":601},"# processing bar\n",[51,46185,46186,46188],{"class":53,"line":10207},[51,46187,31677],{"class":278},[51,46189,2366],{"class":65},[51,46191,46192],{"class":53,"line":10228},[51,46193,206],{"emptyLinePlaceholder":205},[51,46195,46196,46198,46200,46203],{"class":53,"line":10234},[51,46197,30794],{"class":278},[51,46199,546],{"class":65},[51,46201,46202],{"class":61},"\"processing done!\"",[51,46204,282],{"class":65},[10,46206,46207],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22381,46209,46211],{"id":46210},"_242模型代码","2.4.2.模型代码",[10,46213,46214],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[41,46216,46218],{"className":170,"code":46217,"language":172,"meta":46,"style":46},"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",[48,46219,46220,46226,46236,46246,46250,46266,46274,46288,46298,46302,46332,46336,46370,46416,46420,46454,46500,46504,46508,46542,46572,46576,46584,46598,46620,46642,46660,46664,46678,46682,46686,46702,46706,46714,46728,46738,46782,46786,46814,46818,46828,46856,46860,46896,46900,46928,46932,46942,46974,47006,47034,47038,47048,47080,47112,47144,47176,47208,47236,47240,47250,47282,47314,47326,47330,47342,47346,47350,47362,47370,47390,47394,47398,47402,47406,47410,47414,47428,47436,47444,47456,47470,47478,47482,47490,47500,47510,47520,47530,47540,47546,47550,47554,47566,47586,47594],{"__ignoreMap":46},[51,46221,46222,46224],{"class":53,"line":54},[51,46223,179],{"class":69},[51,46225,30774],{"class":65},[51,46227,46228,46230,46232,46234],{"class":53,"line":185},[51,46229,226],{"class":69},[51,46231,31118],{"class":65},[51,46233,179],{"class":69},[51,46235,31123],{"class":65},[51,46237,46238,46240,46242,46244],{"class":53,"line":202},[51,46239,226],{"class":69},[51,46241,31135],{"class":65},[51,46243,179],{"class":69},[51,46245,31140],{"class":65},[51,46247,46248],{"class":53,"line":209},[51,46249,206],{"emptyLinePlaceholder":205},[51,46251,46252,46254,46256,46258,46260,46262,46264],{"class":53,"line":223},[51,46253,15078],{"class":69},[51,46255,41867],{"class":57},[51,46257,546],{"class":65},[51,46259,31156],{"class":57},[51,46261,1100],{"class":65},[51,46263,31161],{"class":57},[51,46265,31164],{"class":65},[51,46267,46268,46270,46272],{"class":53,"line":237},[51,46269,31179],{"class":69},[51,46271,31182],{"class":278},[51,46273,41886],{"class":65},[51,46275,46276,46278,46280,46282,46284,46286],{"class":53,"line":242},[51,46277,31195],{"class":278},[51,46279,41893],{"class":65},[51,46281,31201],{"class":278},[51,46283,31204],{"class":65},[51,46285,31207],{"class":278},[51,46287,2366],{"class":65},[51,46289,46290,46292,46294,46296],{"class":53,"line":257},[51,46291,31223],{"class":278},[51,46293,35146],{"class":65},[51,46295,70],{"class":69},[51,46297,35151],{"class":65},[51,46299,46300],{"class":53,"line":262},[51,46301,41916],{"class":601},[51,46303,46304,46306,46308,46310,46312,46314,46316,46318,46320,46322,46324,46326,46328,46330],{"class":53,"line":285},[51,46305,31223],{"class":278},[51,46307,41923],{"class":65},[51,46309,70],{"class":69},[51,46311,31231],{"class":65},[51,46313,31234],{"class":248},[51,46315,70],{"class":69},[51,46317,41934],{"class":65},[51,46319,31243],{"class":248},[51,46321,70],{"class":69},[51,46323,41941],{"class":65},[51,46325,31252],{"class":248},[51,46327,70],{"class":69},[51,46329,759],{"class":278},[51,46331,282],{"class":65},[51,46333,46334],{"class":53,"line":296},[51,46335,41954],{"class":601},[51,46337,46338,46340,46342,46344,46346,46348,46350,46352,46354,46356,46358,46360,46362,46364,46366,46368],{"class":53,"line":307},[51,46339,31223],{"class":278},[51,46341,41961],{"class":65},[51,46343,70],{"class":69},[51,46345,31231],{"class":65},[51,46347,31234],{"class":248},[51,46349,70],{"class":69},[51,46351,41934],{"class":65},[51,46353,31243],{"class":248},[51,46355,70],{"class":69},[51,46357,41978],{"class":65},[51,46359,733],{"class":278},[51,46361,41983],{"class":65},[51,46363,31252],{"class":248},[51,46365,70],{"class":69},[51,46367,759],{"class":278},[51,46369,282],{"class":65},[51,46371,46372,46374,46376,46378,46380,46382,46384,46386,46388,46390,46392,46394,46396,46398,46400,46402,46404,46406,46408,46410,46412,46414],{"class":53,"line":324},[51,46373,31223],{"class":278},[51,46375,41998],{"class":65},[51,46377,70],{"class":69},[51,46379,31231],{"class":65},[51,46381,31234],{"class":248},[51,46383,70],{"class":69},[51,46385,41978],{"class":65},[51,46387,733],{"class":278},[51,46389,41983],{"class":65},[51,46391,31243],{"class":248},[51,46393,70],{"class":69},[51,46395,41978],{"class":65},[51,46397,759],{"class":278},[51,46399,41983],{"class":65},[51,46401,31252],{"class":248},[51,46403,70],{"class":69},[51,46405,614],{"class":278},[51,46407,920],{"class":65},[51,46409,31261],{"class":248},[51,46411,70],{"class":69},[51,46413,759],{"class":278},[51,46415,282],{"class":65},[51,46417,46418],{"class":53,"line":329},[51,46419,42043],{"class":601},[51,46421,46422,46424,46426,46428,46430,46432,46434,46436,46438,46440,46442,46444,46446,46448,46450,46452],{"class":53,"line":334},[51,46423,31223],{"class":278},[51,46425,42050],{"class":65},[51,46427,70],{"class":69},[51,46429,31231],{"class":65},[51,46431,31234],{"class":248},[51,46433,70],{"class":69},[51,46435,41934],{"class":65},[51,46437,31243],{"class":248},[51,46439,70],{"class":69},[51,46441,42067],{"class":65},[51,46443,733],{"class":278},[51,46445,41983],{"class":65},[51,46447,31252],{"class":248},[51,46449,70],{"class":69},[51,46451,759],{"class":278},[51,46453,282],{"class":65},[51,46455,46456,46458,46460,46462,46464,46466,46468,46470,46472,46474,46476,46478,46480,46482,46484,46486,46488,46490,46492,46494,46496,46498],{"class":53,"line":340},[51,46457,31223],{"class":278},[51,46459,42086],{"class":65},[51,46461,70],{"class":69},[51,46463,31231],{"class":65},[51,46465,31234],{"class":248},[51,46467,70],{"class":69},[51,46469,42067],{"class":65},[51,46471,733],{"class":278},[51,46473,41983],{"class":65},[51,46475,31243],{"class":248},[51,46477,70],{"class":69},[51,46479,42067],{"class":65},[51,46481,759],{"class":278},[51,46483,41983],{"class":65},[51,46485,31252],{"class":248},[51,46487,70],{"class":69},[51,46489,861],{"class":278},[51,46491,920],{"class":65},[51,46493,31261],{"class":248},[51,46495,70],{"class":69},[51,46497,620],{"class":278},[51,46499,282],{"class":65},[51,46501,46502],{"class":53,"line":345},[51,46503,42131],{"class":601},[51,46505,46506],{"class":53,"line":357},[51,46507,42136],{"class":601},[51,46509,46510,46512,46514,46516,46518,46520,46522,46524,46526,46528,46530,46532,46534,46536,46538,46540],{"class":53,"line":366},[51,46511,31223],{"class":278},[51,46513,42143],{"class":65},[51,46515,70],{"class":69},[51,46517,35204],{"class":65},[51,46519,31252],{"class":248},[51,46521,70],{"class":69},[51,46523,614],{"class":278},[51,46525,920],{"class":65},[51,46527,31307],{"class":248},[51,46529,70],{"class":69},[51,46531,759],{"class":278},[51,46533,920],{"class":65},[51,46535,31261],{"class":248},[51,46537,70],{"class":69},[51,46539,759],{"class":278},[51,46541,282],{"class":65},[51,46543,46544,46546,46548,46550,46552,46554,46556,46558,46560,46562,46564,46566,46568,46570],{"class":53,"line":383},[51,46545,31223],{"class":278},[51,46547,42178],{"class":65},[51,46549,70],{"class":69},[51,46551,31231],{"class":65},[51,46553,31234],{"class":248},[51,46555,70],{"class":69},[51,46557,41934],{"class":65},[51,46559,31243],{"class":248},[51,46561,70],{"class":69},[51,46563,42195],{"class":65},[51,46565,31252],{"class":248},[51,46567,70],{"class":69},[51,46569,759],{"class":278},[51,46571,282],{"class":65},[51,46573,46574],{"class":53,"line":392},[51,46575,206],{"emptyLinePlaceholder":205},[51,46577,46578,46580,46582],{"class":53,"line":403},[51,46579,31179],{"class":69},[51,46581,31471],{"class":57},[51,46583,31474],{"class":65},[51,46585,46586,46588,46590,46592,46594,46596],{"class":53,"line":409},[51,46587,42220],{"class":65},[51,46589,70],{"class":69},[51,46591,31201],{"class":278},[51,46593,35559],{"class":65},[51,46595,31201],{"class":278},[51,46597,42231],{"class":65},[51,46599,46600,46602,46604,46606,46608,46610,46612,46614,46616,46618],{"class":53,"line":414},[51,46601,7469],{"class":65},[51,46603,70],{"class":69},[51,46605,31201],{"class":278},[51,46607,35559],{"class":65},[51,46609,31201],{"class":278},[51,46611,42246],{"class":65},[51,46613,31201],{"class":278},[51,46615,35559],{"class":65},[51,46617,31201],{"class":278},[51,46619,42255],{"class":65},[51,46621,46622,46624,46626,46628,46630,46632,46634,46636,46638,46640],{"class":53,"line":433},[51,46623,42260],{"class":65},[51,46625,70],{"class":69},[51,46627,31201],{"class":278},[51,46629,35559],{"class":65},[51,46631,31201],{"class":278},[51,46633,42271],{"class":65},[51,46635,31201],{"class":278},[51,46637,35559],{"class":65},[51,46639,31201],{"class":278},[51,46641,42280],{"class":65},[51,46643,46644,46646,46648,46650,46652,46654,46656,46658],{"class":53,"line":439},[51,46645,42285],{"class":65},[51,46647,70],{"class":69},[51,46649,31201],{"class":278},[51,46651,35559],{"class":65},[51,46653,31201],{"class":278},[51,46655,42296],{"class":65},[51,46657,31201],{"class":278},[51,46659,42301],{"class":65},[51,46661,46662],{"class":53,"line":444},[51,46663,42306],{"class":601},[51,46665,46666,46668,46670,46672,46674,46676],{"class":53,"line":453},[51,46667,15136],{"class":69},[51,46669,42313],{"class":65},[51,46671,33060],{"class":248},[51,46673,70],{"class":69},[51,46675,759],{"class":278},[51,46677,282],{"class":65},[51,46679,46680],{"class":53,"line":2174},[51,46681,206],{"emptyLinePlaceholder":205},[51,46683,46684],{"class":53,"line":2965},[51,46685,42334],{"class":601},[51,46687,46688,46690,46692,46694,46696,46698,46700],{"class":53,"line":2979},[51,46689,15078],{"class":69},[51,46691,42341],{"class":57},[51,46693,546],{"class":65},[51,46695,31156],{"class":57},[51,46697,1100],{"class":65},[51,46699,31161],{"class":57},[51,46701,31164],{"class":65},[51,46703,46704],{"class":53,"line":2987},[51,46705,42356],{"class":601},[51,46707,46708,46710,46712],{"class":53,"line":2992},[51,46709,31179],{"class":69},[51,46711,31182],{"class":278},[51,46713,42365],{"class":65},[51,46715,46716,46718,46720,46722,46724,46726],{"class":53,"line":2998},[51,46717,31195],{"class":278},[51,46719,42372],{"class":65},[51,46721,31201],{"class":278},[51,46723,31204],{"class":65},[51,46725,31207],{"class":278},[51,46727,2366],{"class":65},[51,46729,46730,46732,46734,46736],{"class":53,"line":3004},[51,46731,31223],{"class":278},[51,46733,42387],{"class":65},[51,46735,70],{"class":69},[51,46737,38384],{"class":65},[51,46739,46740,46742,46744,46746,46748,46750,46752,46754,46756,46758,46760,46762,46764,46766,46768,46770,46772,46774,46776,46778,46780],{"class":53,"line":3009},[51,46741,38389],{"class":65},[51,46743,31234],{"class":248},[51,46745,70],{"class":69},[51,46747,614],{"class":278},[51,46749,920],{"class":65},[51,46751,31243],{"class":248},[51,46753,70],{"class":69},[51,46755,745],{"class":278},[51,46757,920],{"class":65},[51,46759,31252],{"class":248},[51,46761,70],{"class":69},[51,46763,911],{"class":278},[51,46765,920],{"class":65},[51,46767,31307],{"class":248},[51,46769,70],{"class":69},[51,46771,620],{"class":278},[51,46773,920],{"class":65},[51,46775,31261],{"class":248},[51,46777,70],{"class":69},[51,46779,614],{"class":278},[51,46781,321],{"class":65},[51,46783,46784],{"class":53,"line":8332},[51,46785,38426],{"class":65},[51,46787,46788,46790,46792,46794,46796,46798,46800,46802,46804,46806,46808,46810,46812],{"class":53,"line":8356},[51,46789,38471],{"class":65},[51,46791,31252],{"class":248},[51,46793,70],{"class":69},[51,46795,614],{"class":278},[51,46797,920],{"class":65},[51,46799,31307],{"class":248},[51,46801,70],{"class":69},[51,46803,620],{"class":278},[51,46805,920],{"class":65},[51,46807,31261],{"class":248},[51,46809,70],{"class":69},[51,46811,759],{"class":278},[51,46813,282],{"class":65},[51,46815,46816],{"class":53,"line":8361},[51,46817,38500],{"class":65},[51,46819,46820,46822,46824,46826],{"class":53,"line":8367},[51,46821,31223],{"class":278},[51,46823,42478],{"class":65},[51,46825,70],{"class":69},[51,46827,38384],{"class":65},[51,46829,46830,46832,46834,46836,46838,46840,46842,46844,46846,46848,46850,46852,46854],{"class":53,"line":8394},[51,46831,38389],{"class":65},[51,46833,31234],{"class":248},[51,46835,70],{"class":69},[51,46837,745],{"class":278},[51,46839,920],{"class":65},[51,46841,31243],{"class":248},[51,46843,70],{"class":69},[51,46845,745],{"class":278},[51,46847,920],{"class":65},[51,46849,31252],{"class":248},[51,46851,70],{"class":69},[51,46853,759],{"class":278},[51,46855,321],{"class":65},[51,46857,46858],{"class":53,"line":8399},[51,46859,38426],{"class":65},[51,46861,46862,46864,46866,46868,46870,46872,46874,46876,46878,46880,46882,46884,46886,46888,46890,46892,46894],{"class":53,"line":8405},[51,46863,38389],{"class":65},[51,46865,31234],{"class":248},[51,46867,70],{"class":69},[51,46869,745],{"class":278},[51,46871,920],{"class":65},[51,46873,31243],{"class":248},[51,46875,70],{"class":69},[51,46877,42533],{"class":278},[51,46879,920],{"class":65},[51,46881,31252],{"class":248},[51,46883,70],{"class":69},[51,46885,614],{"class":278},[51,46887,920],{"class":65},[51,46889,31261],{"class":248},[51,46891,70],{"class":69},[51,46893,759],{"class":278},[51,46895,321],{"class":65},[51,46897,46898],{"class":53,"line":8417},[51,46899,38426],{"class":65},[51,46901,46902,46904,46906,46908,46910,46912,46914,46916,46918,46920,46922,46924,46926],{"class":53,"line":8429},[51,46903,38471],{"class":65},[51,46905,31252],{"class":248},[51,46907,70],{"class":69},[51,46909,614],{"class":278},[51,46911,920],{"class":65},[51,46913,31307],{"class":248},[51,46915,70],{"class":69},[51,46917,620],{"class":278},[51,46919,920],{"class":65},[51,46921,31261],{"class":248},[51,46923,70],{"class":69},[51,46925,759],{"class":278},[51,46927,282],{"class":65},[51,46929,46930],{"class":53,"line":8441},[51,46931,38500],{"class":65},[51,46933,46934,46936,46938,46940],{"class":53,"line":10100},[51,46935,31223],{"class":278},[51,46937,42594],{"class":65},[51,46939,70],{"class":69},[51,46941,38384],{"class":65},[51,46943,46944,46946,46948,46950,46952,46954,46956,46958,46960,46962,46964,46966,46968,46970,46972],{"class":53,"line":10125},[51,46945,42603],{"class":65},[51,46947,42533],{"class":278},[51,46949,920],{"class":65},[51,46951,745],{"class":278},[51,46953,42612],{"class":65},[51,46955,751],{"class":278},[51,46957,920],{"class":65},[51,46959,32445],{"class":278},[51,46961,42621],{"class":65},[51,46963,1143],{"class":278},[51,46965,920],{"class":65},[51,46967,739],{"class":278},[51,46969,42630],{"class":65},[51,46971,739],{"class":278},[51,46973,321],{"class":65},[51,46975,46976,46978,46980,46982,46984,46986,46988,46990,46992,46994,46996,46998,47000,47002,47004],{"class":53,"line":10148},[51,46977,42603],{"class":65},[51,46979,35245],{"class":278},[51,46981,920],{"class":65},[51,46983,32445],{"class":278},[51,46985,42612],{"class":65},[51,46987,32445],{"class":278},[51,46989,920],{"class":65},[51,46991,42533],{"class":278},[51,46993,42621],{"class":65},[51,46995,739],{"class":278},[51,46997,920],{"class":65},[51,46999,751],{"class":278},[51,47001,42630],{"class":65},[51,47003,745],{"class":278},[51,47005,321],{"class":65},[51,47007,47008,47010,47012,47014,47016,47018,47020,47022,47024,47026,47028,47030,47032],{"class":53,"line":10172},[51,47009,38471],{"class":65},[51,47011,31252],{"class":248},[51,47013,70],{"class":69},[51,47015,614],{"class":278},[51,47017,920],{"class":65},[51,47019,31307],{"class":248},[51,47021,70],{"class":69},[51,47023,620],{"class":278},[51,47025,920],{"class":65},[51,47027,31261],{"class":248},[51,47029,70],{"class":69},[51,47031,759],{"class":278},[51,47033,282],{"class":65},[51,47035,47036],{"class":53,"line":10177},[51,47037,38500],{"class":65},[51,47039,47040,47042,47044,47046],{"class":53,"line":10182},[51,47041,31223],{"class":278},[51,47043,42705],{"class":65},[51,47045,70],{"class":69},[51,47047,38384],{"class":65},[51,47049,47050,47052,47054,47056,47058,47060,47062,47064,47066,47068,47070,47072,47074,47076,47078],{"class":53,"line":10187},[51,47051,42603],{"class":65},[51,47053,42716],{"class":278},[51,47055,920],{"class":65},[51,47057,42533],{"class":278},[51,47059,42612],{"class":65},[51,47061,751],{"class":278},[51,47063,920],{"class":65},[51,47065,42729],{"class":278},[51,47067,42621],{"class":65},[51,47069,1143],{"class":278},[51,47071,920],{"class":65},[51,47073,1149],{"class":278},[51,47075,42630],{"class":65},[51,47077,745],{"class":278},[51,47079,321],{"class":65},[51,47081,47082,47084,47086,47088,47090,47092,47094,47096,47098,47100,47102,47104,47106,47108,47110],{"class":53,"line":10196},[51,47083,42603],{"class":65},[51,47085,38831],{"class":278},[51,47087,920],{"class":65},[51,47089,21431],{"class":278},[51,47091,42612],{"class":65},[51,47093,1160],{"class":278},[51,47095,920],{"class":65},[51,47097,31877],{"class":278},[51,47099,42621],{"class":65},[51,47101,1342],{"class":278},[51,47103,920],{"class":65},[51,47105,745],{"class":278},[51,47107,42630],{"class":65},[51,47109,745],{"class":278},[51,47111,321],{"class":65},[51,47113,47114,47116,47118,47120,47122,47124,47126,47128,47130,47132,47134,47136,47138,47140,47142],{"class":53,"line":10201},[51,47115,42603],{"class":65},[51,47117,38831],{"class":278},[51,47119,920],{"class":65},[51,47121,32445],{"class":278},[51,47123,42612],{"class":65},[51,47125,32445],{"class":278},[51,47127,920],{"class":65},[51,47129,35245],{"class":278},[51,47131,42621],{"class":65},[51,47133,1342],{"class":278},[51,47135,920],{"class":65},[51,47137,745],{"class":278},[51,47139,42630],{"class":65},[51,47141,745],{"class":278},[51,47143,321],{"class":65},[51,47145,47146,47148,47150,47152,47154,47156,47158,47160,47162,47164,47166,47168,47170,47172,47174],{"class":53,"line":10207},[51,47147,42603],{"class":65},[51,47149,38831],{"class":278},[51,47151,920],{"class":65},[51,47153,1160],{"class":278},[51,47155,42612],{"class":65},[51,47157,32445],{"class":278},[51,47159,920],{"class":65},[51,47161,42826],{"class":278},[51,47163,42621],{"class":65},[51,47165,739],{"class":278},[51,47167,920],{"class":65},[51,47169,745],{"class":278},[51,47171,42630],{"class":65},[51,47173,745],{"class":278},[51,47175,321],{"class":65},[51,47177,47178,47180,47182,47184,47186,47188,47190,47192,47194,47196,47198,47200,47202,47204,47206],{"class":53,"line":10228},[51,47179,42603],{"class":65},[51,47181,42847],{"class":278},[51,47183,920],{"class":65},[51,47185,35245],{"class":278},[51,47187,42612],{"class":65},[51,47189,21431],{"class":278},[51,47191,920],{"class":65},[51,47193,42860],{"class":278},[51,47195,42621],{"class":65},[51,47197,739],{"class":278},[51,47199,920],{"class":65},[51,47201,32445],{"class":278},[51,47203,42630],{"class":65},[51,47205,32445],{"class":278},[51,47207,321],{"class":65},[51,47209,47210,47212,47214,47216,47218,47220,47222,47224,47226,47228,47230,47232,47234],{"class":53,"line":10234},[51,47211,38471],{"class":65},[51,47213,31252],{"class":248},[51,47215,70],{"class":69},[51,47217,614],{"class":278},[51,47219,920],{"class":65},[51,47221,31307],{"class":248},[51,47223,70],{"class":69},[51,47225,620],{"class":278},[51,47227,920],{"class":65},[51,47229,31261],{"class":248},[51,47231,70],{"class":69},[51,47233,759],{"class":278},[51,47235,282],{"class":65},[51,47237,47238],{"class":53,"line":10248},[51,47239,38500],{"class":65},[51,47241,47242,47244,47246,47248],{"class":53,"line":10254},[51,47243,31223],{"class":278},[51,47245,42913],{"class":65},[51,47247,70],{"class":69},[51,47249,38384],{"class":65},[51,47251,47252,47254,47256,47258,47260,47262,47264,47266,47268,47270,47272,47274,47276,47278,47280],{"class":53,"line":10281},[51,47253,42603],{"class":65},[51,47255,42924],{"class":278},[51,47257,920],{"class":65},[51,47259,35245],{"class":278},[51,47261,42612],{"class":65},[51,47263,21431],{"class":278},[51,47265,920],{"class":65},[51,47267,42860],{"class":278},[51,47269,42621],{"class":65},[51,47271,739],{"class":278},[51,47273,920],{"class":65},[51,47275,32445],{"class":278},[51,47277,42630],{"class":65},[51,47279,32445],{"class":278},[51,47281,321],{"class":65},[51,47283,47284,47286,47288,47290,47292,47294,47296,47298,47300,47302,47304,47306,47308,47310,47312],{"class":53,"line":10290},[51,47285,42603],{"class":65},[51,47287,42924],{"class":278},[51,47289,920],{"class":65},[51,47291,35315],{"class":278},[51,47293,42612],{"class":65},[51,47295,42533],{"class":278},[51,47297,920],{"class":65},[51,47299,35315],{"class":278},[51,47301,42621],{"class":65},[51,47303,1149],{"class":278},[51,47305,920],{"class":65},[51,47307,32445],{"class":278},[51,47309,42630],{"class":65},[51,47311,32445],{"class":278},[51,47313,321],{"class":65},[51,47315,47316,47318,47320,47322,47324],{"class":53,"line":10296},[51,47317,42987],{"class":65},[51,47319,759],{"class":278},[51,47321,920],{"class":65},[51,47323,759],{"class":278},[51,47325,42996],{"class":65},[51,47327,47328],{"class":53,"line":10304},[51,47329,39164],{"class":65},[51,47331,47332,47334,47336,47338,47340],{"class":53,"line":10309},[51,47333,39169],{"class":65},[51,47335,43007],{"class":278},[51,47337,920],{"class":65},[51,47339,620],{"class":278},[51,47341,282],{"class":65},[51,47343,47344],{"class":53,"line":16987},[51,47345,38500],{"class":65},[51,47347,47348],{"class":53,"line":16993},[51,47349,43022],{"class":601},[51,47351,47352,47354,47356,47358,47360],{"class":53,"line":17016},[51,47353,3790],{"class":69},[51,47355,39242],{"class":65},[51,47357,26425],{"class":69},[51,47359,39247],{"class":278},[51,47361,39250],{"class":65},[51,47363,47364,47366,47368],{"class":53,"line":17022},[51,47365,5027],{"class":69},[51,47367,39262],{"class":278},[51,47369,39265],{"class":65},[51,47371,47372,47374,47376,47378,47380,47382,47384,47386,47388],{"class":53,"line":17045},[51,47373,39275],{"class":65},[51,47375,43049],{"class":248},[51,47377,70],{"class":69},[51,47379,43054],{"class":61},[51,47381,920],{"class":65},[51,47383,39278],{"class":248},[51,47385,70],{"class":69},[51,47387,39283],{"class":61},[51,47389,282],{"class":65},[51,47391,47392],{"class":53,"line":17059},[51,47393,43069],{"class":601},[51,47395,47396],{"class":53,"line":17079},[51,47397,43074],{"class":601},[51,47399,47400],{"class":53,"line":17085},[51,47401,43079],{"class":601},[51,47403,47404],{"class":53,"line":17096},[51,47405,43084],{"class":601},[51,47407,47408],{"class":53,"line":17119},[51,47409,43089],{"class":601},[51,47411,47412],{"class":53,"line":17141},[51,47413,43094],{"class":601},[51,47415,47416,47418,47420,47422,47424,47426],{"class":53,"line":17146},[51,47417,39295],{"class":69},[51,47419,39298],{"class":65},[51,47421,39301],{"class":69},[51,47423,39304],{"class":69},[51,47425,39307],{"class":278},[51,47427,363],{"class":65},[51,47429,47430,47432,47434],{"class":53,"line":17152},[51,47431,39319],{"class":65},[51,47433,733],{"class":278},[51,47435,282],{"class":65},[51,47437,47438,47440,47442],{"class":53,"line":17166},[51,47439,43121],{"class":69},[51,47441,39262],{"class":278},[51,47443,39338],{"class":65},[51,47445,47446,47448,47450,47452,47454],{"class":53,"line":17179},[51,47447,43130],{"class":65},[51,47449,733],{"class":278},[51,47451,920],{"class":65},[51,47453,39360],{"class":278},[51,47455,282],{"class":65},[51,47457,47458,47460,47462,47464,47466,47468],{"class":53,"line":17184},[51,47459,43143],{"class":69},[51,47461,39298],{"class":65},[51,47463,39301],{"class":69},[51,47465,39304],{"class":69},[51,47467,39307],{"class":278},[51,47469,363],{"class":65},[51,47471,47472,47474,47476],{"class":53,"line":17198},[51,47473,43158],{"class":65},[51,47475,733],{"class":278},[51,47477,282],{"class":65},[51,47479,47480],{"class":53,"line":17203},[51,47481,35540],{"class":601},[51,47483,47484,47486,47488],{"class":53,"line":17209},[51,47485,31179],{"class":69},[51,47487,31471],{"class":57},[51,47489,31474],{"class":65},[51,47491,47492,47494,47496,47498],{"class":53,"line":17214},[51,47493,31479],{"class":65},[51,47495,70],{"class":69},[51,47497,31201],{"class":278},[51,47499,43185],{"class":65},[51,47501,47502,47504,47506,47508],{"class":53,"line":17228},[51,47503,31479],{"class":65},[51,47505,70],{"class":69},[51,47507,31201],{"class":278},[51,47509,43196],{"class":65},[51,47511,47512,47514,47516,47518],{"class":53,"line":17233},[51,47513,31479],{"class":65},[51,47515,70],{"class":69},[51,47517,31201],{"class":278},[51,47519,43207],{"class":65},[51,47521,47522,47524,47526,47528],{"class":53,"line":17238},[51,47523,31479],{"class":65},[51,47525,70],{"class":69},[51,47527,31201],{"class":278},[51,47529,43218],{"class":65},[51,47531,47532,47534,47536,47538],{"class":53,"line":17252},[51,47533,31479],{"class":65},[51,47535,70],{"class":69},[51,47537,31201],{"class":278},[51,47539,43229],{"class":65},[51,47541,47542,47544],{"class":53,"line":17264},[51,47543,15136],{"class":69},[51,47545,31587],{"class":65},[51,47547,47548],{"class":53,"line":17269},[51,47549,206],{"emptyLinePlaceholder":205},[51,47551,47552],{"class":53,"line":17282},[51,47553,43244],{"class":601},[51,47555,47556,47558,47560,47562,47564],{"class":53,"line":17287},[51,47557,1940],{"class":69},[51,47559,31598],{"class":278},[51,47561,375],{"class":69},[51,47563,31603],{"class":61},[51,47565,363],{"class":65},[51,47567,47568,47570,47572,47574,47576,47578,47580,47582,47584],{"class":53,"line":17292},[51,47569,31615],{"class":65},[51,47571,70],{"class":69},[51,47573,30830],{"class":65},[51,47575,31622],{"class":61},[51,47577,2102],{"class":69},[51,47579,31627],{"class":65},[51,47581,2099],{"class":69},[51,47583,30855],{"class":61},[51,47585,282],{"class":65},[51,47587,47588,47590,47592],{"class":53,"line":17297},[51,47589,31667],{"class":65},[51,47591,70],{"class":69},[51,47593,43285],{"class":65},[51,47595,47596,47598,47600,47602,47604,47606,47608,47610],{"class":53,"line":17310},[51,47597,31677],{"class":278},[51,47599,31680],{"class":65},[51,47601,759],{"class":278},[51,47603,920],{"class":65},[51,47605,31877],{"class":278},[51,47607,920],{"class":65},[51,47609,31877],{"class":278},[51,47611,31693],{"class":65},[22381,47613,47615],{"id":47614},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[10,47617,47618],{},"计算图片的均值与方差，用于训练中归一化处理操作",[41,47620,47622],{"className":170,"code":47621,"language":172,"meta":46,"style":46},"# 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",[48,47623,47624,47629,47642,47647,47653,47658,47668,47672,47677,47687,47691,47696,47706,47723,47727,47732,47744,47756,47787,47796,47806,47816,47820,47825,47840,47844,47849,47854,47859,47869,47874,47899,47903,47908,47923,47927,47940,47944,47949,47954,47959,47964,47969,47979,47989,48012,48020,48028,48036,48040,48052,48056,48061,48065,48069,48076,48096,48120,48127,48141,48146,48151,48155,48169,48173,48185],{"__ignoreMap":46},[51,47625,47626],{"class":53,"line":54},[51,47627,47628],{"class":601},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[51,47630,47631,47633,47636,47639],{"class":53,"line":185},[51,47632,226],{"class":69},[51,47634,47635],{"class":278}," PIL",[51,47637,47638],{"class":69}," import",[51,47640,47641],{"class":65}," Image\n",[51,47643,47644],{"class":53,"line":202},[51,47645,47646],{"class":601},"# os 用来处理文件夹和文件路径\n",[51,47648,47649,47651],{"class":53,"line":209},[51,47650,179],{"class":69},[51,47652,182],{"class":65},[51,47654,47655],{"class":53,"line":223},[51,47656,47657],{"class":601},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[51,47659,47660,47662,47664,47666],{"class":53,"line":237},[51,47661,179],{"class":69},[51,47663,31758],{"class":65},[51,47665,217],{"class":69},[51,47667,31763],{"class":65},[51,47669,47670],{"class":53,"line":242},[51,47671,206],{"emptyLinePlaceholder":205},[51,47673,47674],{"class":53,"line":257},[51,47675,47676],{"class":601},"# 文件夹路径，包含所有图片文件\n",[51,47678,47679,47682,47684],{"class":53,"line":262},[51,47680,47681],{"class":65},"folder_path ",[51,47683,70],{"class":69},[51,47685,47686],{"class":61}," 'data_cat_dog'\n",[51,47688,47689],{"class":53,"line":285},[51,47690,206],{"emptyLinePlaceholder":205},[51,47692,47693],{"class":53,"line":296},[51,47694,47695],{"class":601},"# 初始化累积变量\n",[51,47697,47698,47701,47703],{"class":53,"line":307},[51,47699,47700],{"class":65},"total_pixels ",[51,47702,70],{"class":69},[51,47704,47705],{"class":278}," 0\n",[51,47707,47708,47711,47713,47716,47718,47720],{"class":53,"line":324},[51,47709,47710],{"class":65},"sum_normalized_pixel_values ",[51,47712,70],{"class":69},[51,47714,47715],{"class":65}," np.zeros(",[51,47717,614],{"class":278},[51,47719,46180],{"class":65},[51,47721,47722],{"class":601},"# 如果是RGB图像，需要三个通道的均值和方差\n",[51,47724,47725],{"class":53,"line":329},[51,47726,206],{"emptyLinePlaceholder":205},[51,47728,47729],{"class":53,"line":334},[51,47730,47731],{"class":601},"# 遍历文件夹中的图片文件\n",[51,47733,47734,47736,47739,47741],{"class":53,"line":340},[51,47735,3412],{"class":69},[51,47737,47738],{"class":65}," root, dirs, files ",[51,47740,26425],{"class":69},[51,47742,47743],{"class":65}," os.walk(folder_path):\n",[51,47745,47746,47748,47751,47753],{"class":53,"line":345},[51,47747,3588],{"class":69},[51,47749,47750],{"class":65}," filename ",[51,47752,26425],{"class":69},[51,47754,47755],{"class":65}," files:\n",[51,47757,47758,47760,47763,47766,47768,47771,47773,47776,47778,47781,47784],{"class":53,"line":357},[51,47759,369],{"class":69},[51,47761,47762],{"class":65}," filename.endswith((",[51,47764,47765],{"class":61},"'.jpg'",[51,47767,12819],{"class":65},[51,47769,47770],{"class":61},"'.jpeg'",[51,47772,12819],{"class":65},[51,47774,47775],{"class":61},"'.png'",[51,47777,12819],{"class":65},[51,47779,47780],{"class":61},"'.bmp'",[51,47782,47783],{"class":65},")):  ",[51,47785,47786],{"class":601},"# 可根据实际情况添加其他格式\n",[51,47788,47789,47791,47793],{"class":53,"line":366},[51,47790,46045],{"class":65},[51,47792,70],{"class":69},[51,47794,47795],{"class":65}," os.path.join(root, filename)\n",[51,47797,47798,47801,47803],{"class":53,"line":383},[51,47799,47800],{"class":65},"            image ",[51,47802,70],{"class":69},[51,47804,47805],{"class":65}," Image.open(image_path)\n",[51,47807,47808,47811,47813],{"class":53,"line":392},[51,47809,47810],{"class":65},"            image_array ",[51,47812,70],{"class":69},[51,47814,47815],{"class":65}," np.array(image)\n",[51,47817,47818],{"class":53,"line":403},[51,47819,206],{"emptyLinePlaceholder":205},[51,47821,47822],{"class":53,"line":409},[51,47823,47824],{"class":601},"            # 归一化像素值到0-1之间\n",[51,47826,47827,47830,47832,47835,47837],{"class":53,"line":414},[51,47828,47829],{"class":65},"            normalized_image_array ",[51,47831,70],{"class":69},[51,47833,47834],{"class":65}," image_array ",[51,47836,1126],{"class":69},[51,47838,47839],{"class":278}," 255.0\n",[51,47841,47842],{"class":53,"line":433},[51,47843,206],{"emptyLinePlaceholder":205},[51,47845,47846],{"class":53,"line":439},[51,47847,47848],{"class":601},"            # print(image_path)\n",[51,47850,47851],{"class":53,"line":444},[51,47852,47853],{"class":601},"            # print(normalized_image_array.shape)\n",[51,47855,47856],{"class":53,"line":453},[51,47857,47858],{"class":601},"            # 累积归一化后的像素值和像素数量\n",[51,47860,47861,47864,47866],{"class":53,"line":2174},[51,47862,47863],{"class":65},"            total_pixels ",[51,47865,9861],{"class":69},[51,47867,47868],{"class":65}," normalized_image_array.size\n",[51,47870,47871],{"class":53,"line":2965},[51,47872,47873],{"class":601},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[51,47875,47876,47879,47881,47884,47887,47889,47891,47893,47895,47897],{"class":53,"line":2979},[51,47877,47878],{"class":65},"            sum_normalized_pixel_values ",[51,47880,9861],{"class":69},[51,47882,47883],{"class":65}," np.sum(normalized_image_array, ",[51,47885,47886],{"class":248},"axis",[51,47888,70],{"class":69},[51,47890,546],{"class":65},[51,47892,733],{"class":278},[51,47894,12819],{"class":65},[51,47896,759],{"class":278},[51,47898,30876],{"class":65},[51,47900,47901],{"class":53,"line":2987},[51,47902,206],{"emptyLinePlaceholder":205},[51,47904,47905],{"class":53,"line":2992},[51,47906,47907],{"class":601},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[51,47909,47910,47913,47915,47918,47920],{"class":53,"line":2998},[51,47911,47912],{"class":65},"mean ",[51,47914,70],{"class":69},[51,47916,47917],{"class":65}," sum_normalized_pixel_values ",[51,47919,1126],{"class":69},[51,47921,47922],{"class":65}," total_pixels\n",[51,47924,47925],{"class":53,"line":3004},[51,47926,206],{"emptyLinePlaceholder":205},[51,47928,47929,47932,47934,47936,47938],{"class":53,"line":3009},[51,47930,47931],{"class":65},"sum_squared_diff ",[51,47933,70],{"class":69},[51,47935,47715],{"class":65},[51,47937,614],{"class":278},[51,47939,282],{"class":65},[51,47941,47942],{"class":53,"line":8332},[51,47943,206],{"emptyLinePlaceholder":205},[51,47945,47946],{"class":53,"line":8356},[51,47947,47948],{"class":601},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[51,47950,47951],{"class":53,"line":8361},[51,47952,47953],{"class":601},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[51,47955,47956],{"class":53,"line":8367},[51,47957,47958],{"class":601},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[51,47960,47961],{"class":53,"line":8394},[51,47962,47963],{"class":601},"# Image.open(image_path)：打开图片\n",[51,47965,47966],{"class":53,"line":8399},[51,47967,47968],{"class":601},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[51,47970,47971,47973,47975,47977],{"class":53,"line":8405},[51,47972,3412],{"class":69},[51,47974,47738],{"class":65},[51,47976,26425],{"class":69},[51,47978,47743],{"class":65},[51,47980,47981,47983,47985,47987],{"class":53,"line":8417},[51,47982,3588],{"class":69},[51,47984,47750],{"class":65},[51,47986,26425],{"class":69},[51,47988,47755],{"class":65},[51,47990,47991,47993,47995,47997,47999,48001,48003,48005,48007,48009],{"class":53,"line":8429},[51,47992,369],{"class":69},[51,47994,47762],{"class":65},[51,47996,47765],{"class":61},[51,47998,12819],{"class":65},[51,48000,47770],{"class":61},[51,48002,12819],{"class":65},[51,48004,47775],{"class":61},[51,48006,12819],{"class":65},[51,48008,47780],{"class":61},[51,48010,48011],{"class":65},")):\n",[51,48013,48014,48016,48018],{"class":53,"line":8441},[51,48015,46045],{"class":65},[51,48017,70],{"class":69},[51,48019,47795],{"class":65},[51,48021,48022,48024,48026],{"class":53,"line":10100},[51,48023,47800],{"class":65},[51,48025,70],{"class":69},[51,48027,47805],{"class":65},[51,48029,48030,48032,48034],{"class":53,"line":10125},[51,48031,47810],{"class":65},[51,48033,70],{"class":69},[51,48035,47815],{"class":65},[51,48037,48038],{"class":53,"line":10148},[51,48039,47824],{"class":601},[51,48041,48042,48044,48046,48048,48050],{"class":53,"line":10172},[51,48043,47829],{"class":65},[51,48045,70],{"class":69},[51,48047,47834],{"class":65},[51,48049,1126],{"class":69},[51,48051,47839],{"class":278},[51,48053,48054],{"class":53,"line":10177},[51,48055,47853],{"class":601},[51,48057,48058],{"class":53,"line":10182},[51,48059,48060],{"class":601},"            # print(mean.shape)\n",[51,48062,48063],{"class":53,"line":10187},[51,48064,47848],{"class":601},[51,48066,48067],{"class":53,"line":10196},[51,48068,206],{"emptyLinePlaceholder":205},[51,48070,48071,48074],{"class":53,"line":10201},[51,48072,48073],{"class":69},"            try",[51,48075,363],{"class":65},[51,48077,48078,48081,48083,48086,48088,48091,48093],{"class":53,"line":10207},[51,48079,48080],{"class":65},"                diff ",[51,48082,70],{"class":69},[51,48084,48085],{"class":65}," (normalized_image_array ",[51,48087,1074],{"class":69},[51,48089,48090],{"class":65}," mean) ",[51,48092,11045],{"class":69},[51,48094,48095],{"class":278}," 2\n",[51,48097,48098,48101,48103,48106,48108,48110,48112,48114,48116,48118],{"class":53,"line":10228},[51,48099,48100],{"class":65},"                sum_squared_diff ",[51,48102,9861],{"class":69},[51,48104,48105],{"class":65}," np.sum(diff, ",[51,48107,47886],{"class":248},[51,48109,70],{"class":69},[51,48111,546],{"class":65},[51,48113,733],{"class":278},[51,48115,12819],{"class":65},[51,48117,759],{"class":278},[51,48119,30876],{"class":65},[51,48121,48122,48125],{"class":53,"line":10234},[51,48123,48124],{"class":69},"            except",[51,48126,363],{"class":65},[51,48128,48129,48132,48134,48136,48139],{"class":53,"line":10248},[51,48130,48131],{"class":278},"                print",[51,48133,546],{"class":65},[51,48135,595],{"class":69},[51,48137,48138],{"class":61},"\"捕获到自定义异常\"",[51,48140,282],{"class":65},[51,48142,48143],{"class":53,"line":10254},[51,48144,48145],{"class":601},"            # diff = (normalized_image_array - mean) ** 2\n",[51,48147,48148],{"class":53,"line":10281},[51,48149,48150],{"class":601},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[51,48152,48153],{"class":53,"line":10290},[51,48154,206],{"emptyLinePlaceholder":205},[51,48156,48157,48160,48162,48165,48167],{"class":53,"line":10296},[51,48158,48159],{"class":65},"variance ",[51,48161,70],{"class":69},[51,48163,48164],{"class":65}," sum_squared_diff ",[51,48166,1126],{"class":69},[51,48168,47922],{"class":65},[51,48170,48171],{"class":53,"line":10304},[51,48172,206],{"emptyLinePlaceholder":205},[51,48174,48175,48177,48179,48182],{"class":53,"line":10309},[51,48176,30794],{"class":278},[51,48178,546],{"class":65},[51,48180,48181],{"class":61},"\"Mean:\"",[51,48183,48184],{"class":65},", mean)\n",[51,48186,48187,48189,48191,48194],{"class":53,"line":16987},[51,48188,30794],{"class":278},[51,48190,546],{"class":65},[51,48192,48193],{"class":61},"\"Variance:\"",[51,48195,48196],{"class":65},", variance)\n",[41,48198,48200],{"className":170,"code":48199,"language":172,"meta":46,"style":46},"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",[48,48201,48202,48208,48214,48224,48230,48240,48254,48264,48274,48284,48288,48298,48308,48312,48316,48324,48329,48334,48353,48357,48362,48367,48372,48377,48418,48423,48433,48438,48451,48456,48461,48466,48471,48476,48480,48485,48490,48512,48516,48548,48562,48572,48582,48586,48596,48610,48620,48630,48640,48646,48650,48654,48658,48662,48666,48674,48694,48698,48702,48706,48710,48726,48730,48734,48742,48746,48750,48758,48762,48766,48770,48778,48782,48786,48790,48798,48802,48810,48814,48822,48826,48834,48838,48846,48850,48854,48862,48866,48870,48882,48906,48920,48924,48928,48932,48940,48944,48952,48956,48964,48968,48976,48980,48988,48992,49000,49004,49016,49020,49028,49032,49040,49044,49048,49052,49056,49064,49068,49084,49088,49096,49100,49104,49108,49112,49116,49120,49124,49140,49144,49156,49160,49172,49176,49188,49192,49200,49204,49212,49216,49220,49224,49230,49234,49242,49246,49262,49266,49274,49278,49294,49306,49310,49322,49326,49330,49338,49342,49346,49354,49358,49366,49370,49378,49382,49386,49428,49470,49474,49478,49494,49498,49514,49518,49522,49530,49534,49538,49550,49588,49592,49596,49604,49608,49622,49632,49638,49644,49650,49656,49660,49664,49670,49674,49678,49686,49690,49708,49712,49716,49720,49736,49740,49744,49748,49752,49756,49776,49796,49800,49804,49808,49816,49824,49828,49844,49864,49884,49888,49893,49902,49911,49916,49921,49926,49939,49944,49953,49962,49979],{"__ignoreMap":46},[51,48203,48204,48206],{"class":53,"line":54},[51,48205,179],{"class":69},[51,48207,32198],{"class":65},[51,48209,48210,48212],{"class":53,"line":185},[51,48211,179],{"class":69},[51,48213,32205],{"class":65},[51,48215,48216,48218,48220,48222],{"class":53,"line":202},[51,48217,179],{"class":69},[51,48219,32216],{"class":65},[51,48221,217],{"class":69},[51,48223,32221],{"class":65},[51,48225,48226,48228],{"class":53,"line":209},[51,48227,179],{"class":69},[51,48229,30774],{"class":65},[51,48231,48232,48234,48236,48238],{"class":53,"line":223},[51,48233,226],{"class":69},[51,48235,31792],{"class":65},[51,48237,179],{"class":69},[51,48239,32238],{"class":65},[51,48241,48242,48244,48246,48248,48251],{"class":53,"line":237},[51,48243,226],{"class":69},[51,48245,31746],{"class":65},[51,48247,179],{"class":69},[51,48249,48250],{"class":65}," ImageFolder ",[51,48252,48253],{"class":601},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[51,48255,48256,48258,48260,48262],{"class":53,"line":242},[51,48257,226],{"class":69},[51,48259,31775],{"class":65},[51,48261,179],{"class":69},[51,48263,31780],{"class":65},[51,48265,48266,48268,48270,48272],{"class":53,"line":257},[51,48267,179],{"class":69},[51,48269,31792],{"class":65},[51,48271,217],{"class":69},[51,48273,31797],{"class":65},[51,48275,48276,48278,48280,48282],{"class":53,"line":262},[51,48277,179],{"class":69},[51,48279,31809],{"class":65},[51,48281,217],{"class":69},[51,48283,31814],{"class":65},[51,48285,48286],{"class":53,"line":285},[51,48287,32283],{"class":601},[51,48289,48290,48292,48294,48296],{"class":53,"line":296},[51,48291,226],{"class":69},[51,48293,32290],{"class":65},[51,48295,179],{"class":69},[51,48297,43405],{"class":65},[51,48299,48300,48302,48304,48306],{"class":53,"line":307},[51,48301,226],{"class":69},[51,48303,31118],{"class":65},[51,48305,179],{"class":69},[51,48307,31123],{"class":65},[51,48309,48310],{"class":53,"line":324},[51,48311,206],{"emptyLinePlaceholder":205},[51,48313,48314],{"class":53,"line":329},[51,48315,32318],{"class":601},[51,48317,48318,48320,48322],{"class":53,"line":334},[51,48319,348],{"class":69},[51,48321,32325],{"class":57},[51,48323,32328],{"class":65},[51,48325,48326],{"class":53,"line":340},[51,48327,48328],{"class":601},"    # 导入自己的数据集，并进行数据处理\n",[51,48330,48331],{"class":53,"line":345},[51,48332,48333],{"class":601},"    # 定义数据集的路径\n",[51,48335,48336,48339,48341,48343,48345,48347,48351],{"class":53,"line":357},[51,48337,48338],{"class":278},"    ROOT_PATH",[51,48340,70],{"class":69},[51,48342,1212],{"class":69},[51,48344,793],{"class":61},[51,48346,1100],{"class":278},[51,48348,48350],{"class":48349},"sA_wV","\u002Fdata\u002Ftrain",[51,48352,25515],{"class":61},[51,48354,48355],{"class":53,"line":366},[51,48356,206],{"emptyLinePlaceholder":205},[51,48358,48359],{"class":53,"line":383},[51,48360,48361],{"class":601},"    # 定义归一化方法\n",[51,48363,48364],{"class":53,"line":392},[51,48365,48366],{"class":601},"    # 这里需要先计算一下数据集的均值和方差\n",[51,48368,48369],{"class":53,"line":403},[51,48370,48371],{"class":601},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[51,48373,48374],{"class":53,"line":409},[51,48375,48376],{"class":601},"    # 第一个参数是均值，第二个参数是方差\n",[51,48378,48379,48382,48384,48387,48390,48392,48395,48397,48400,48403,48406,48408,48411,48413,48416],{"class":53,"line":414},[51,48380,48381],{"class":65},"    normalize",[51,48383,70],{"class":69},[51,48385,48386],{"class":65},"transforms.Normalize([",[51,48388,48389],{"class":278},"0.162",[51,48391,920],{"class":65},[51,48393,48394],{"class":278},"0.151",[51,48396,920],{"class":65},[51,48398,48399],{"class":278},"0.138",[51,48401,48402],{"class":65},"],[",[51,48404,48405],{"class":278},"0.058",[51,48407,920],{"class":65},[51,48409,48410],{"class":278},"0.052",[51,48412,920],{"class":65},[51,48414,48415],{"class":278},"0.048",[51,48417,5042],{"class":65},[51,48419,48420],{"class":53,"line":433},[51,48421,48422],{"class":601},"    # 定义数据集处理方法变量\n",[51,48424,48425,48428,48430],{"class":53,"line":439},[51,48426,48427],{"class":65},"    train_transform",[51,48429,70],{"class":69},[51,48431,48432],{"class":65},"transforms.Compose([\n",[51,48434,48435],{"class":53,"line":444},[51,48436,48437],{"class":601},"        # 调整图像大小为224*224\n",[51,48439,48440,48443,48445,48447,48449],{"class":53,"line":453},[51,48441,48442],{"class":65},"        transforms.Resize((",[51,48444,31877],{"class":278},[51,48446,920],{"class":65},[51,48448,31877],{"class":278},[51,48450,42996],{"class":65},[51,48452,48453],{"class":53,"line":2174},[51,48454,48455],{"class":601},"        # 将图像转换为张量\n",[51,48457,48458],{"class":53,"line":2965},[51,48459,48460],{"class":65},"        transforms.ToTensor(),\n",[51,48462,48463],{"class":53,"line":2979},[51,48464,48465],{"class":65},"        normalize])\n",[51,48467,48468],{"class":53,"line":2987},[51,48469,48470],{"class":601},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[51,48472,48473],{"class":53,"line":2992},[51,48474,48475],{"class":601},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[51,48477,48478],{"class":53,"line":2998},[51,48479,206],{"emptyLinePlaceholder":205},[51,48481,48482],{"class":53,"line":3004},[51,48483,48484],{"class":601},"    # 加载数据集\n",[51,48486,48487],{"class":53,"line":3009},[51,48488,48489],{"class":601},"    # 传入数据集路径与处理方法\n",[51,48491,48492,48494,48496,48499,48502,48504,48507,48509],{"class":53,"line":8332},[51,48493,32333],{"class":65},[51,48495,70],{"class":69},[51,48497,48498],{"class":65},"ImageFolder(",[51,48500,48501],{"class":278},"ROOT_PATH",[51,48503,920],{"class":65},[51,48505,48506],{"class":248},"transform",[51,48508,70],{"class":69},[51,48510,48511],{"class":65},"train_transform)\n",[51,48513,48514],{"class":53,"line":8356},[51,48515,206],{"emptyLinePlaceholder":205},[51,48517,48518,48520,48522,48524,48526,48528,48530,48532,48534,48536,48538,48540,48542,48544,48546],{"class":53,"line":8361},[51,48519,32385],{"class":65},[51,48521,70],{"class":69},[51,48523,32390],{"class":65},[51,48525,32393],{"class":278},[51,48527,546],{"class":65},[51,48529,32398],{"class":278},[51,48531,997],{"class":69},[51,48533,7742],{"class":278},[51,48535,32405],{"class":65},[51,48537,32393],{"class":278},[51,48539,546],{"class":65},[51,48541,32412],{"class":278},[51,48543,997],{"class":69},[51,48545,7742],{"class":278},[51,48547,32419],{"class":65},[51,48549,48550,48552,48554,48556,48558,48560],{"class":53,"line":8367},[51,48551,32424],{"class":65},[51,48553,70],{"class":69},[51,48555,32429],{"class":65},[51,48557,31913],{"class":248},[51,48559,70],{"class":69},[51,48561,31918],{"class":65},[51,48563,48564,48566,48568,48570],{"class":53,"line":8394},[51,48565,32440],{"class":248},[51,48567,70],{"class":69},[51,48569,739],{"class":278},[51,48571,31843],{"class":65},[51,48573,48574,48576,48578,48580],{"class":53,"line":8399},[51,48575,32452],{"class":248},[51,48577,70],{"class":69},[51,48579,279],{"class":278},[51,48581,31843],{"class":65},[51,48583,48584],{"class":53,"line":8405},[51,48585,32463],{"class":601},[51,48587,48588,48590,48592,48594],{"class":53,"line":8417},[51,48589,32468],{"class":248},[51,48591,70],{"class":69},[51,48593,937],{"class":278},[51,48595,282],{"class":65},[51,48597,48598,48600,48602,48604,48606,48608],{"class":53,"line":8429},[51,48599,32479],{"class":65},[51,48601,70],{"class":69},[51,48603,31910],{"class":65},[51,48605,31913],{"class":248},[51,48607,70],{"class":69},[51,48609,32490],{"class":65},[51,48611,48612,48614,48616,48618],{"class":53,"line":8441},[51,48613,32495],{"class":248},[51,48615,70],{"class":69},[51,48617,739],{"class":278},[51,48619,31843],{"class":65},[51,48621,48622,48624,48626,48628],{"class":53,"line":10100},[51,48623,32506],{"class":248},[51,48625,70],{"class":69},[51,48627,279],{"class":278},[51,48629,31843],{"class":65},[51,48631,48632,48634,48636,48638],{"class":53,"line":10125},[51,48633,32517],{"class":248},[51,48635,70],{"class":69},[51,48637,937],{"class":278},[51,48639,282],{"class":65},[51,48641,48642,48644],{"class":53,"line":10148},[51,48643,4476],{"class":69},[51,48645,32530],{"class":65},[51,48647,48648],{"class":53,"line":10172},[51,48649,206],{"emptyLinePlaceholder":205},[51,48651,48652],{"class":53,"line":10177},[51,48653,32539],{"class":601},[51,48655,48656],{"class":53,"line":10182},[51,48657,32544],{"class":601},[51,48659,48660],{"class":53,"line":10187},[51,48661,206],{"emptyLinePlaceholder":205},[51,48663,48664],{"class":53,"line":10196},[51,48665,32553],{"class":601},[51,48667,48668,48670,48672],{"class":53,"line":10201},[51,48669,348],{"class":69},[51,48671,32560],{"class":57},[51,48673,32563],{"class":65},[51,48675,48676,48678,48680,48682,48684,48686,48688,48690,48692],{"class":53,"line":10207},[51,48677,31615],{"class":65},[51,48679,70],{"class":69},[51,48681,30830],{"class":65},[51,48683,31622],{"class":61},[51,48685,2102],{"class":69},[51,48687,31627],{"class":65},[51,48689,2099],{"class":69},[51,48691,32582],{"class":61},[51,48693,282],{"class":65},[51,48695,48696],{"class":53,"line":10228},[51,48697,206],{"emptyLinePlaceholder":205},[51,48699,48700],{"class":53,"line":10234},[51,48701,32597],{"class":601},[51,48703,48704],{"class":53,"line":10248},[51,48705,32602],{"class":601},[51,48707,48708],{"class":53,"line":10254},[51,48709,32607],{"class":601},[51,48711,48712,48714,48716,48718,48720,48722,48724],{"class":53,"line":10281},[51,48713,32612],{"class":65},[51,48715,70],{"class":69},[51,48717,32617],{"class":65},[51,48719,32620],{"class":248},[51,48721,70],{"class":69},[51,48723,32625],{"class":278},[51,48725,282],{"class":65},[51,48727,48728],{"class":53,"line":10290},[51,48729,206],{"emptyLinePlaceholder":205},[51,48731,48732],{"class":53,"line":10296},[51,48733,32636],{"class":601},[51,48735,48736,48738,48740],{"class":53,"line":10304},[51,48737,32641],{"class":65},[51,48739,70],{"class":69},[51,48741,32646],{"class":65},[51,48743,48744],{"class":53,"line":10309},[51,48745,206],{"emptyLinePlaceholder":205},[51,48747,48748],{"class":53,"line":16987},[51,48749,32655],{"class":601},[51,48751,48752,48754,48756],{"class":53,"line":16993},[51,48753,31667],{"class":65},[51,48755,70],{"class":69},[51,48757,32664],{"class":65},[51,48759,48760],{"class":53,"line":17016},[51,48761,32669],{"class":601},[51,48763,48764],{"class":53,"line":17022},[51,48765,32674],{"class":601},[51,48767,48768],{"class":53,"line":17045},[51,48769,32679],{"class":601},[51,48771,48772,48774,48776],{"class":53,"line":17059},[51,48773,32684],{"class":65},[51,48775,70],{"class":69},[51,48777,32689],{"class":65},[51,48779,48780],{"class":53,"line":17079},[51,48781,206],{"emptyLinePlaceholder":205},[51,48783,48784],{"class":53,"line":17085},[51,48785,32702],{"class":601},[51,48787,48788],{"class":53,"line":17096},[51,48789,32707],{"class":601},[51,48791,48792,48794,48796],{"class":53,"line":17119},[51,48793,32712],{"class":65},[51,48795,70],{"class":69},[51,48797,32717],{"class":278},[51,48799,48800],{"class":53,"line":17141},[51,48801,32722],{"class":601},[51,48803,48804,48806,48808],{"class":53,"line":17146},[51,48805,32727],{"class":65},[51,48807,70],{"class":69},[51,48809,32732],{"class":65},[51,48811,48812],{"class":53,"line":17152},[51,48813,32737],{"class":601},[51,48815,48816,48818,48820],{"class":53,"line":17166},[51,48817,32742],{"class":65},[51,48819,70],{"class":69},[51,48821,32732],{"class":65},[51,48823,48824],{"class":53,"line":17179},[51,48825,32751],{"class":601},[51,48827,48828,48830,48832],{"class":53,"line":17184},[51,48829,32756],{"class":65},[51,48831,70],{"class":69},[51,48833,32732],{"class":65},[51,48835,48836],{"class":53,"line":17198},[51,48837,32765],{"class":601},[51,48839,48840,48842,48844],{"class":53,"line":17203},[51,48841,32770],{"class":65},[51,48843,70],{"class":69},[51,48845,32732],{"class":65},[51,48847,48848],{"class":53,"line":17209},[51,48849,206],{"emptyLinePlaceholder":205},[51,48851,48852],{"class":53,"line":17214},[51,48853,32783],{"class":601},[51,48855,48856,48858,48860],{"class":53,"line":17228},[51,48857,32788],{"class":65},[51,48859,70],{"class":69},[51,48861,32793],{"class":65},[51,48863,48864],{"class":53,"line":17233},[51,48865,206],{"emptyLinePlaceholder":205},[51,48867,48868],{"class":53,"line":17238},[51,48869,32806],{"class":601},[51,48871,48872,48874,48876,48878,48880],{"class":53,"line":17252},[51,48873,3588],{"class":69},[51,48875,32813],{"class":65},[51,48877,26425],{"class":69},[51,48879,32818],{"class":278},[51,48881,32821],{"class":65},[51,48883,48884,48886,48888,48890,48892,48894,48896,48898,48900,48902,48904],{"class":53,"line":17264},[51,48885,32826],{"class":278},[51,48887,546],{"class":65},[51,48889,32831],{"class":61},[51,48891,32834],{"class":278},[51,48893,1126],{"class":61},[51,48895,32834],{"class":278},[51,48897,793],{"class":61},[51,48899,32843],{"class":65},[51,48901,1074],{"class":69},[51,48903,759],{"class":278},[51,48905,30876],{"class":65},[51,48907,48908,48910,48912,48914,48916,48918],{"class":53,"line":17269},[51,48909,32826],{"class":278},[51,48911,546],{"class":65},[51,48913,32858],{"class":61},[51,48915,997],{"class":69},[51,48917,988],{"class":278},[51,48919,282],{"class":65},[51,48921,48922],{"class":53,"line":17282},[51,48923,206],{"emptyLinePlaceholder":205},[51,48925,48926],{"class":53,"line":17287},[51,48927,32873],{"class":601},[51,48929,48930],{"class":53,"line":17292},[51,48931,32878],{"class":601},[51,48933,48934,48936,48938],{"class":53,"line":17297},[51,48935,32883],{"class":65},[51,48937,70],{"class":69},[51,48939,32717],{"class":278},[51,48941,48942],{"class":53,"line":17310},[51,48943,32892],{"class":601},[51,48945,48946,48948,48950],{"class":53,"line":17315},[51,48947,32897],{"class":65},[51,48949,70],{"class":69},[51,48951,3472],{"class":278},[51,48953,48954],{"class":53,"line":33008},[51,48955,32906],{"class":601},[51,48957,48958,48960,48962],{"class":53,"line":33014},[51,48959,32911],{"class":65},[51,48961,70],{"class":69},[51,48963,32717],{"class":278},[51,48965,48966],{"class":53,"line":33020},[51,48967,32920],{"class":601},[51,48969,48970,48972,48974],{"class":53,"line":33026},[51,48971,32925],{"class":65},[51,48973,70],{"class":69},[51,48975,3472],{"class":278},[51,48977,48978],{"class":53,"line":33032},[51,48979,32934],{"class":601},[51,48981,48982,48984,48986],{"class":53,"line":33043},[51,48983,32939],{"class":65},[51,48985,70],{"class":69},[51,48987,3472],{"class":278},[51,48989,48990],{"class":53,"line":33049},[51,48991,32948],{"class":601},[51,48993,48994,48996,48998],{"class":53,"line":33069},[51,48995,32953],{"class":65},[51,48997,70],{"class":69},[51,48999,3472],{"class":278},[51,49001,49002],{"class":53,"line":33075},[51,49003,32962],{"class":601},[51,49005,49006,49008,49010,49012,49014],{"class":53,"line":33086},[51,49007,3790],{"class":69},[51,49009,31977],{"class":65},[51,49011,26425],{"class":69},[51,49013,31982],{"class":278},[51,49015,32975],{"class":65},[51,49017,49018],{"class":53,"line":33092},[51,49019,32980],{"class":601},[51,49021,49022,49024,49026],{"class":53,"line":33098},[51,49023,32985],{"class":65},[51,49025,70],{"class":69},[51,49027,32990],{"class":65},[51,49029,49030],{"class":53,"line":33104},[51,49031,32995],{"class":601},[51,49033,49034,49036,49038],{"class":53,"line":33110},[51,49035,33000],{"class":65},[51,49037,70],{"class":69},[51,49039,33005],{"class":65},[51,49041,49042],{"class":53,"line":33116},[51,49043,33011],{"class":601},[51,49045,49046],{"class":53,"line":33122},[51,49047,33017],{"class":65},[51,49049,49050],{"class":53,"line":33128},[51,49051,33023],{"class":601},[51,49053,49054],{"class":53,"line":33148},[51,49055,33029],{"class":601},[51,49057,49058,49060,49062],{"class":53,"line":33154},[51,49059,33035],{"class":65},[51,49061,70],{"class":69},[51,49063,33040],{"class":65},[51,49065,49066],{"class":53,"line":33170},[51,49067,33046],{"class":601},[51,49069,49070,49072,49074,49076,49078,49080,49082],{"class":53,"line":33176},[51,49071,33052],{"class":65},[51,49073,70],{"class":69},[51,49075,33057],{"class":65},[51,49077,33060],{"class":248},[51,49079,70],{"class":69},[51,49081,759],{"class":278},[51,49083,282],{"class":65},[51,49085,49086],{"class":53,"line":33190},[51,49087,33072],{"class":601},[51,49089,49090,49092,49094],{"class":53,"line":33196},[51,49091,33078],{"class":65},[51,49093,70],{"class":69},[51,49095,33083],{"class":65},[51,49097,49098],{"class":53,"line":33211},[51,49099,33089],{"class":601},[51,49101,49102],{"class":53,"line":33217},[51,49103,33095],{"class":65},[51,49105,49106],{"class":53,"line":33226},[51,49107,33101],{"class":601},[51,49109,49110],{"class":53,"line":33232},[51,49111,33107],{"class":65},[51,49113,49114],{"class":53,"line":33241},[51,49115,33113],{"class":601},[51,49117,49118],{"class":53,"line":33247},[51,49119,33119],{"class":65},[51,49121,49122],{"class":53,"line":33253},[51,49123,33125],{"class":601},[51,49125,49126,49128,49130,49132,49134,49136,49138],{"class":53,"line":33262},[51,49127,33131],{"class":65},[51,49129,9861],{"class":69},[51,49131,33136],{"class":65},[51,49133,997],{"class":69},[51,49135,33141],{"class":65},[51,49137,733],{"class":278},[51,49139,282],{"class":65},[51,49141,49142],{"class":53,"line":33268},[51,49143,33151],{"class":601},[51,49145,49146,49148,49150,49152,49154],{"class":53,"line":33279},[51,49147,33157],{"class":65},[51,49149,9861],{"class":69},[51,49151,33162],{"class":65},[51,49153,375],{"class":69},[51,49155,33167],{"class":65},[51,49157,49158],{"class":53,"line":33285},[51,49159,33173],{"class":601},[51,49161,49162,49164,49166,49168,49170],{"class":53,"line":33304},[51,49163,33179],{"class":65},[51,49165,9861],{"class":69},[51,49167,33141],{"class":65},[51,49169,733],{"class":278},[51,49171,282],{"class":65},[51,49173,49174],{"class":53,"line":33310},[51,49175,33193],{"class":601},[51,49177,49178,49180,49182,49184,49186],{"class":53,"line":33321},[51,49179,3790],{"class":69},[51,49181,33201],{"class":65},[51,49183,26425],{"class":69},[51,49185,31982],{"class":278},[51,49187,33208],{"class":65},[51,49189,49190],{"class":53,"line":33327},[51,49191,33214],{"class":601},[51,49193,49194,49196,49198],{"class":53,"line":33347},[51,49195,32985],{"class":65},[51,49197,70],{"class":69},[51,49199,32990],{"class":65},[51,49201,49202],{"class":53,"line":33363},[51,49203,33229],{"class":601},[51,49205,49206,49208,49210],{"class":53,"line":33369},[51,49207,33000],{"class":65},[51,49209,70],{"class":69},[51,49211,33005],{"class":65},[51,49213,49214],{"class":53,"line":33383},[51,49215,33244],{"class":601},[51,49217,49218],{"class":53,"line":33389},[51,49219,33250],{"class":65},[51,49221,49222],{"class":53,"line":33395},[51,49223,36731],{"class":601},[51,49225,49226,49228],{"class":53,"line":33406},[51,49227,33256],{"class":69},[51,49229,33259],{"class":65},[51,49231,49232],{"class":53,"line":33412},[51,49233,33265],{"class":601},[51,49235,49236,49238,49240],{"class":53,"line":33418},[51,49237,36746],{"class":65},[51,49239,70],{"class":69},[51,49241,33040],{"class":65},[51,49243,49244],{"class":53,"line":33428},[51,49245,33282],{"class":601},[51,49247,49248,49250,49252,49254,49256,49258,49260],{"class":53,"line":33434},[51,49249,36759],{"class":65},[51,49251,70],{"class":69},[51,49253,33057],{"class":65},[51,49255,33060],{"class":248},[51,49257,70],{"class":69},[51,49259,759],{"class":278},[51,49261,282],{"class":65},[51,49263,49264],{"class":53,"line":33445},[51,49265,33307],{"class":601},[51,49267,49268,49270,49272],{"class":53,"line":33451},[51,49269,36780],{"class":65},[51,49271,70],{"class":69},[51,49273,33083],{"class":65},[51,49275,49276],{"class":53,"line":33461},[51,49277,33324],{"class":601},[51,49279,49280,49282,49284,49286,49288,49290,49292],{"class":53,"line":33466},[51,49281,36793],{"class":65},[51,49283,9861],{"class":69},[51,49285,36798],{"class":65},[51,49287,997],{"class":69},[51,49289,33141],{"class":65},[51,49291,733],{"class":278},[51,49293,282],{"class":65},[51,49295,49296,49298,49300,49302,49304],{"class":53,"line":33472},[51,49297,36811],{"class":65},[51,49299,9861],{"class":69},[51,49301,33162],{"class":65},[51,49303,375],{"class":69},[51,49305,33167],{"class":65},[51,49307,49308],{"class":53,"line":33521},[51,49309,36824],{"class":601},[51,49311,49312,49314,49316,49318,49320],{"class":53,"line":33568},[51,49313,36829],{"class":65},[51,49315,9861],{"class":69},[51,49317,33141],{"class":65},[51,49319,733],{"class":278},[51,49321,282],{"class":65},[51,49323,49324],{"class":53,"line":33573},[51,49325,33386],{"class":601},[51,49327,49328],{"class":53,"line":33579},[51,49329,33392],{"class":601},[51,49331,49332,49334,49336],{"class":53,"line":33598},[51,49333,33398],{"class":65},[51,49335,1126],{"class":69},[51,49337,33403],{"class":65},[51,49339,49340],{"class":53,"line":33604},[51,49341,33409],{"class":601},[51,49343,49344],{"class":53,"line":33624},[51,49345,33415],{"class":601},[51,49347,49348,49350,49352],{"class":53,"line":33630},[51,49349,33421],{"class":65},[51,49351,1126],{"class":69},[51,49353,33403],{"class":65},[51,49355,49356],{"class":53,"line":33636},[51,49357,33431],{"class":601},[51,49359,49360,49362,49364],{"class":53,"line":33646},[51,49361,33437],{"class":65},[51,49363,1126],{"class":69},[51,49365,33442],{"class":65},[51,49367,49368],{"class":53,"line":33651},[51,49369,33448],{"class":601},[51,49371,49372,49374,49376],{"class":53,"line":33657},[51,49373,33454],{"class":65},[51,49375,1126],{"class":69},[51,49377,33442],{"class":65},[51,49379,49380],{"class":53,"line":33673},[51,49381,206],{"emptyLinePlaceholder":205},[51,49383,49384],{"class":53,"line":33718},[51,49385,33469],{"class":601},[51,49387,49388,49390,49392,49394,49396,49398,49400,49402,49404,49406,49408,49410,49412,49414,49416,49418,49420,49422,49424,49426],{"class":53,"line":33724},[51,49389,32826],{"class":278},[51,49391,546],{"class":65},[51,49393,3979],{"class":61},[51,49395,32834],{"class":278},[51,49397,33483],{"class":61},[51,49399,1438],{"class":278},[51,49401,33488],{"class":69},[51,49403,1488],{"class":278},[51,49405,33493],{"class":61},[51,49407,1438],{"class":278},[51,49409,33488],{"class":69},[51,49411,1488],{"class":278},[51,49413,3979],{"class":61},[51,49415,33504],{"class":65},[51,49417,1074],{"class":69},[51,49419,759],{"class":278},[51,49421,33511],{"class":65},[51,49423,1074],{"class":69},[51,49425,759],{"class":278},[51,49427,33518],{"class":65},[51,49429,49430,49432,49434,49436,49438,49440,49442,49444,49446,49448,49450,49452,49454,49456,49458,49460,49462,49464,49466,49468],{"class":53,"line":33730},[51,49431,32826],{"class":278},[51,49433,546],{"class":65},[51,49435,3979],{"class":61},[51,49437,32834],{"class":278},[51,49439,33532],{"class":61},[51,49441,1438],{"class":278},[51,49443,33488],{"class":69},[51,49445,1488],{"class":278},[51,49447,33541],{"class":61},[51,49449,1438],{"class":278},[51,49451,33488],{"class":69},[51,49453,1488],{"class":278},[51,49455,3979],{"class":61},[51,49457,33552],{"class":65},[51,49459,1074],{"class":69},[51,49461,759],{"class":278},[51,49463,33559],{"class":65},[51,49465,1074],{"class":69},[51,49467,759],{"class":278},[51,49469,33518],{"class":65},[51,49471,49472],{"class":53,"line":33736},[51,49473,206],{"emptyLinePlaceholder":205},[51,49475,49476],{"class":53,"line":33747},[51,49477,33576],{"class":601},[51,49479,49480,49482,49484,49486,49488,49490,49492],{"class":53,"line":33753},[51,49481,369],{"class":69},[51,49483,33584],{"class":65},[51,49485,1074],{"class":69},[51,49487,759],{"class":278},[51,49489,1482],{"class":65},[51,49491,1502],{"class":69},[51,49493,33595],{"class":65},[51,49495,49496],{"class":53,"line":33759},[51,49497,33601],{"class":601},[51,49499,49500,49502,49504,49506,49508,49510,49512],{"class":53,"line":33765},[51,49501,33607],{"class":65},[51,49503,584],{"class":278},[51,49505,70],{"class":69},[51,49507,33614],{"class":65},[51,49509,1074],{"class":69},[51,49511,759],{"class":278},[51,49513,33621],{"class":65},[51,49515,49516],{"class":53,"line":33783},[51,49517,33627],{"class":601},[51,49519,49520],{"class":53,"line":33797},[51,49521,33633],{"class":601},[51,49523,49524,49526,49528],{"class":53,"line":33806},[51,49525,33639],{"class":65},[51,49527,70],{"class":69},[51,49529,32689],{"class":65},[51,49531,49532],{"class":53,"line":33815},[51,49533,206],{"emptyLinePlaceholder":205},[51,49535,49536],{"class":53,"line":33824},[51,49537,33654],{"class":601},[51,49539,49540,49542,49544,49546,49548],{"class":53,"line":33833},[51,49541,33660],{"class":65},[51,49543,70],{"class":69},[51,49545,33665],{"class":65},[51,49547,1074],{"class":69},[51,49549,33670],{"class":65},[51,49551,49552,49554,49556,49558,49560,49562,49564,49566,49568,49570,49572,49574,49576,49578,49580,49582,49584,49586],{"class":53,"line":33839},[51,49553,32826],{"class":278},[51,49555,546],{"class":65},[51,49557,33680],{"class":61},[51,49559,1438],{"class":278},[51,49561,33685],{"class":69},[51,49563,1488],{"class":278},[51,49565,1086],{"class":61},[51,49567,1438],{"class":278},[51,49569,33685],{"class":69},[51,49571,1488],{"class":278},[51,49573,33698],{"class":61},[51,49575,33701],{"class":65},[51,49577,33704],{"class":69},[51,49579,1449],{"class":278},[51,49581,33709],{"class":65},[51,49583,870],{"class":69},[51,49585,1449],{"class":278},[51,49587,30876],{"class":65},[51,49589,49590],{"class":53,"line":33845},[51,49591,37108],{"class":601},[51,49593,49594],{"class":53,"line":33853},[51,49595,37113],{"class":601},[51,49597,49598,49600,49602],{"class":53,"line":33858},[51,49599,37118],{"class":65},[51,49601,33742],{"class":61},[51,49603,282],{"class":65},[51,49605,49606],{"class":53,"line":33864},[51,49607,33762],{"class":601},[51,49609,49610,49612,49614,49616,49618,49620],{"class":53,"line":33875},[51,49611,33768],{"class":65},[51,49613,70],{"class":69},[51,49615,33773],{"class":65},[51,49617,33776],{"class":248},[51,49619,70],{"class":69},[51,49621,1955],{"class":65},[51,49623,49624,49626,49628,49630],{"class":53,"line":33881},[51,49625,33786],{"class":61},[51,49627,1401],{"class":65},[51,49629,33791],{"class":278},[51,49631,33794],{"class":65},[51,49633,49634,49636],{"class":53,"line":33901},[51,49635,33800],{"class":61},[51,49637,33803],{"class":65},[51,49639,49640,49642],{"class":53,"line":33907},[51,49641,33809],{"class":61},[51,49643,33812],{"class":65},[51,49645,49646,49648],{"class":53,"line":33913},[51,49647,33818],{"class":61},[51,49649,33821],{"class":65},[51,49651,49652,49654],{"class":53,"line":33919},[51,49653,33827],{"class":61},[51,49655,33830],{"class":65},[51,49657,49658],{"class":53,"line":33936},[51,49659,33836],{"class":65},[51,49661,49662],{"class":53,"line":33942},[51,49663,33842],{"class":601},[51,49665,49666,49668],{"class":53,"line":33948},[51,49667,4476],{"class":69},[51,49669,33850],{"class":65},[51,49671,49672],{"class":53,"line":33954},[51,49673,206],{"emptyLinePlaceholder":205},[51,49675,49676],{"class":53,"line":33960},[51,49677,33861],{"class":601},[51,49679,49680,49682,49684],{"class":53,"line":33966},[51,49681,348],{"class":69},[51,49683,33869],{"class":57},[51,49685,33872],{"class":65},[51,49687,49688],{"class":53,"line":33993},[51,49689,33878],{"class":601},[51,49691,49692,49694,49696,49698,49700,49702,49704,49706],{"class":53,"line":34017},[51,49693,33884],{"class":65},[51,49695,32069],{"class":248},[51,49697,70],{"class":69},[51,49699,546],{"class":65},[51,49701,1040],{"class":278},[51,49703,920],{"class":65},[51,49705,835],{"class":278},[51,49707,30876],{"class":65},[51,49709,49710],{"class":53,"line":34023},[51,49711,33904],{"class":601},[51,49713,49714],{"class":53,"line":34029},[51,49715,33910],{"class":601},[51,49717,49718],{"class":53,"line":34035},[51,49719,33916],{"class":601},[51,49721,49722,49724,49726,49728,49730,49732,49734],{"class":53,"line":34046},[51,49723,32103],{"class":65},[51,49725,759],{"class":278},[51,49727,920],{"class":65},[51,49729,620],{"class":278},[51,49731,920],{"class":65},[51,49733,759],{"class":278},[51,49735,282],{"class":65},[51,49737,49738],{"class":53,"line":34057},[51,49739,33939],{"class":601},[51,49741,49742],{"class":53,"line":34063},[51,49743,33945],{"class":601},[51,49745,49746],{"class":53,"line":34080},[51,49747,33951],{"class":601},[51,49749,49750],{"class":53,"line":34103},[51,49751,33957],{"class":601},[51,49753,49754],{"class":53,"line":34126},[51,49755,33963],{"class":601},[51,49757,49758,49760,49762,49764,49766,49768,49770,49772,49774],{"class":53,"line":34132},[51,49759,33969],{"class":65},[51,49761,33972],{"class":61},[51,49763,33975],{"class":65},[51,49765,33978],{"class":61},[51,49767,920],{"class":65},[51,49769,33983],{"class":248},[51,49771,70],{"class":69},[51,49773,33988],{"class":61},[51,49775,282],{"class":65},[51,49777,49778,49780,49782,49784,49786,49788,49790,49792,49794],{"class":53,"line":34137},[51,49779,33969],{"class":65},[51,49781,33972],{"class":61},[51,49783,34000],{"class":65},[51,49785,34003],{"class":61},[51,49787,920],{"class":65},[51,49789,33983],{"class":248},[51,49791,70],{"class":69},[51,49793,34012],{"class":61},[51,49795,282],{"class":65},[51,49797,49798],{"class":53,"line":34146},[51,49799,34020],{"class":601},[51,49801,49802],{"class":53,"line":34156},[51,49803,34026],{"class":65},[51,49805,49806],{"class":53,"line":34162},[51,49807,34032],{"class":601},[51,49809,49810,49812,49814],{"class":53,"line":34167},[51,49811,34038],{"class":65},[51,49813,34041],{"class":61},[51,49815,282],{"class":65},[51,49817,49818,49820,49822],{"class":53,"line":34173},[51,49819,34049],{"class":65},[51,49821,34052],{"class":61},[51,49823,282],{"class":65},[51,49825,49826],{"class":53,"line":34186},[51,49827,34060],{"class":601},[51,49829,49830,49832,49834,49836,49838,49840,49842],{"class":53,"line":34192},[51,49831,32103],{"class":65},[51,49833,759],{"class":278},[51,49835,920],{"class":65},[51,49837,620],{"class":278},[51,49839,920],{"class":65},[51,49841,620],{"class":278},[51,49843,282],{"class":65},[51,49845,49846,49848,49850,49852,49854,49856,49858,49860,49862],{"class":53,"line":34203},[51,49847,33969],{"class":65},[51,49849,33972],{"class":61},[51,49851,34087],{"class":65},[51,49853,33978],{"class":61},[51,49855,920],{"class":65},[51,49857,33983],{"class":248},[51,49859,70],{"class":69},[51,49861,34098],{"class":61},[51,49863,282],{"class":65},[51,49865,49866,49868,49870,49872,49874,49876,49878,49880,49882],{"class":53,"line":34214},[51,49867,33969],{"class":65},[51,49869,33972],{"class":61},[51,49871,34110],{"class":65},[51,49873,34003],{"class":61},[51,49875,920],{"class":65},[51,49877,33983],{"class":248},[51,49879,70],{"class":69},[51,49881,34121],{"class":61},[51,49883,282],{"class":65},[51,49885,49886],{"class":53,"line":34233},[51,49887,34129],{"class":601},[51,49889,49891],{"class":53,"line":49890},219,[51,49892,34026],{"class":65},[51,49894,49896,49898,49900],{"class":53,"line":49895},220,[51,49897,34038],{"class":65},[51,49899,33972],{"class":61},[51,49901,282],{"class":65},[51,49903,49905,49907,49909],{"class":53,"line":49904},221,[51,49906,34049],{"class":65},[51,49908,34151],{"class":61},[51,49910,282],{"class":65},[51,49912,49914],{"class":53,"line":49913},222,[51,49915,34159],{"class":65},[51,49917,49919],{"class":53,"line":49918},223,[51,49920,206],{"emptyLinePlaceholder":205},[51,49922,49924],{"class":53,"line":49923},224,[51,49925,34170],{"class":601},[51,49927,49929,49931,49933,49935,49937],{"class":53,"line":49928},225,[51,49930,1940],{"class":69},[51,49932,31598],{"class":278},[51,49934,375],{"class":69},[51,49936,31603],{"class":61},[51,49938,363],{"class":65},[51,49940,49942],{"class":53,"line":49941},226,[51,49943,34189],{"class":601},[51,49945,49947,49949,49951],{"class":53,"line":49946},227,[51,49948,44920],{"class":65},[51,49950,70],{"class":69},[51,49952,44925],{"class":65},[51,49954,49956,49958,49960],{"class":53,"line":49955},228,[51,49957,34206],{"class":65},[51,49959,70],{"class":69},[51,49961,34211],{"class":65},[51,49963,49965,49967,49969,49971,49973,49975,49977],{"class":53,"line":49964},229,[51,49966,33768],{"class":65},[51,49968,70],{"class":69},[51,49970,44942],{"class":65},[51,49972,34224],{"class":248},[51,49974,70],{"class":69},[51,49976,1449],{"class":278},[51,49978,282],{"class":65},[51,49980,49982],{"class":53,"line":49981},230,[51,49983,34236],{"class":65},[22381,49985,49987],{"id":49986},"_242测试代码","2.4.2.测试代码",[10,49989,49990],{},"使用测试集进行测试与推理",[41,49992,49994],{"className":170,"code":49993,"language":172,"meta":46,"style":46},"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",[48,49995,49996,50002,50012,50022,50033,50043,50047,50051,50059,50064,50068,50085,50089,50093,50097,50101,50105,50137,50141,50149,50153,50165,50169,50173,50177,50181,50185,50189,50193,50197,50215,50229,50233,50243,50253,50263,50269,50273,50277,50285,50289,50305,50313,50317,50321,50329,50337,50341,50345,50349,50353,50359,50363,50373,50381,50389,50393,50397,50401,50409,50413,50429,50433,50437,50441,50453,50457,50469,50473,50477,50489,50493,50503,50507,50511,50523,50527,50535,50539,50543,50551,50555,50563,50567,50571,50575,50579,50583,50599,50607,50611,50615,50633,50639,50643,50653,50661,50669,50673,50677,50681,50685,50693,50697,50713,50717,50725,50733],{"__ignoreMap":46},[51,49997,49998,50000],{"class":53,"line":54},[51,49999,179],{"class":69},[51,50001,30774],{"class":65},[51,50003,50004,50006,50008,50010],{"class":53,"line":185},[51,50005,179],{"class":69},[51,50007,31792],{"class":65},[51,50009,217],{"class":69},[51,50011,31797],{"class":65},[51,50013,50014,50016,50018,50020],{"class":53,"line":202},[51,50015,226],{"class":69},[51,50017,31775],{"class":65},[51,50019,179],{"class":69},[51,50021,31780],{"class":65},[51,50023,50024,50026,50028,50030],{"class":53,"line":209},[51,50025,226],{"class":69},[51,50027,31746],{"class":65},[51,50029,179],{"class":69},[51,50031,50032],{"class":65}," ImageFolder\n",[51,50034,50035,50037,50039,50041],{"class":53,"line":223},[51,50036,226],{"class":69},[51,50038,32290],{"class":65},[51,50040,179],{"class":69},[51,50042,45014],{"class":65},[51,50044,50045],{"class":53,"line":237},[51,50046,206],{"emptyLinePlaceholder":205},[51,50048,50049],{"class":53,"line":242},[51,50050,34326],{"class":601},[51,50052,50053,50055,50057],{"class":53,"line":257},[51,50054,348],{"class":69},[51,50056,34333],{"class":57},[51,50058,32328],{"class":65},[51,50060,50061],{"class":53,"line":262},[51,50062,50063],{"class":601},"   # 导入自己的数据集，并进行数据处理\n",[51,50065,50066],{"class":53,"line":285},[51,50067,48333],{"class":601},[51,50069,50070,50072,50074,50076,50078,50080,50083],{"class":53,"line":296},[51,50071,48338],{"class":278},[51,50073,70],{"class":69},[51,50075,1212],{"class":69},[51,50077,793],{"class":61},[51,50079,1100],{"class":278},[51,50081,50082],{"class":48349},"\u002Fdata\u002Ftest",[51,50084,25515],{"class":61},[51,50086,50087],{"class":53,"line":307},[51,50088,206],{"emptyLinePlaceholder":205},[51,50090,50091],{"class":53,"line":324},[51,50092,48361],{"class":601},[51,50094,50095],{"class":53,"line":329},[51,50096,48366],{"class":601},[51,50098,50099],{"class":53,"line":334},[51,50100,48371],{"class":601},[51,50102,50103],{"class":53,"line":340},[51,50104,48376],{"class":601},[51,50106,50107,50109,50111,50113,50115,50117,50119,50121,50123,50125,50127,50129,50131,50133,50135],{"class":53,"line":345},[51,50108,48381],{"class":65},[51,50110,70],{"class":69},[51,50112,48386],{"class":65},[51,50114,48389],{"class":278},[51,50116,920],{"class":65},[51,50118,48394],{"class":278},[51,50120,920],{"class":65},[51,50122,48399],{"class":278},[51,50124,48402],{"class":65},[51,50126,48405],{"class":278},[51,50128,920],{"class":65},[51,50130,48410],{"class":278},[51,50132,920],{"class":65},[51,50134,48415],{"class":278},[51,50136,5042],{"class":65},[51,50138,50139],{"class":53,"line":357},[51,50140,48422],{"class":601},[51,50142,50143,50145,50147],{"class":53,"line":366},[51,50144,48427],{"class":65},[51,50146,70],{"class":69},[51,50148,48432],{"class":65},[51,50150,50151],{"class":53,"line":383},[51,50152,48437],{"class":601},[51,50154,50155,50157,50159,50161,50163],{"class":53,"line":392},[51,50156,48442],{"class":65},[51,50158,31877],{"class":278},[51,50160,920],{"class":65},[51,50162,31877],{"class":278},[51,50164,42996],{"class":65},[51,50166,50167],{"class":53,"line":403},[51,50168,48455],{"class":601},[51,50170,50171],{"class":53,"line":409},[51,50172,48460],{"class":65},[51,50174,50175],{"class":53,"line":414},[51,50176,48465],{"class":65},[51,50178,50179],{"class":53,"line":433},[51,50180,48470],{"class":601},[51,50182,50183],{"class":53,"line":439},[51,50184,48475],{"class":601},[51,50186,50187],{"class":53,"line":444},[51,50188,206],{"emptyLinePlaceholder":205},[51,50190,50191],{"class":53,"line":453},[51,50192,48484],{"class":601},[51,50194,50195],{"class":53,"line":2174},[51,50196,48489],{"class":601},[51,50198,50199,50201,50203,50205,50207,50209,50211,50213],{"class":53,"line":2965},[51,50200,34340],{"class":65},[51,50202,70],{"class":69},[51,50204,48498],{"class":65},[51,50206,48501],{"class":278},[51,50208,920],{"class":65},[51,50210,48506],{"class":248},[51,50212,70],{"class":69},[51,50214,48511],{"class":65},[51,50216,50217,50219,50221,50223,50225,50227],{"class":53,"line":2979},[51,50218,34397],{"class":65},[51,50220,70],{"class":69},[51,50222,31910],{"class":65},[51,50224,31913],{"class":248},[51,50226,70],{"class":69},[51,50228,34408],{"class":65},[51,50230,50231],{"class":53,"line":2987},[51,50232,34413],{"class":601},[51,50234,50235,50237,50239,50241],{"class":53,"line":2992},[51,50236,34418],{"class":248},[51,50238,70],{"class":69},[51,50240,759],{"class":278},[51,50242,31843],{"class":65},[51,50244,50245,50247,50249,50251],{"class":53,"line":2998},[51,50246,34429],{"class":248},[51,50248,70],{"class":69},[51,50250,279],{"class":278},[51,50252,31843],{"class":65},[51,50254,50255,50257,50259,50261],{"class":53,"line":3004},[51,50256,34440],{"class":248},[51,50258,70],{"class":69},[51,50260,733],{"class":278},[51,50262,282],{"class":65},[51,50264,50265,50267],{"class":53,"line":3009},[51,50266,4476],{"class":69},[51,50268,34453],{"class":65},[51,50270,50271],{"class":53,"line":8332},[51,50272,206],{"emptyLinePlaceholder":205},[51,50274,50275],{"class":53,"line":8356},[51,50276,34462],{"class":601},[51,50278,50279,50281,50283],{"class":53,"line":8361},[51,50280,348],{"class":69},[51,50282,34469],{"class":57},[51,50284,34472],{"class":65},[51,50286,50287],{"class":53,"line":8367},[51,50288,34477],{"class":601},[51,50290,50291,50293,50295,50297,50299,50301,50303],{"class":53,"line":8394},[51,50292,31615],{"class":65},[51,50294,70],{"class":69},[51,50296,31622],{"class":61},[51,50298,2102],{"class":69},[51,50300,31627],{"class":65},[51,50302,2099],{"class":69},[51,50304,34494],{"class":61},[51,50306,50307,50309,50311],{"class":53,"line":8399},[51,50308,31667],{"class":65},[51,50310,70],{"class":69},[51,50312,32664],{"class":65},[51,50314,50315],{"class":53,"line":8405},[51,50316,206],{"emptyLinePlaceholder":205},[51,50318,50319],{"class":53,"line":8417},[51,50320,34511],{"class":601},[51,50322,50323,50325,50327],{"class":53,"line":8429},[51,50324,34516],{"class":65},[51,50326,70],{"class":69},[51,50328,32717],{"class":278},[51,50330,50331,50333,50335],{"class":53,"line":8441},[51,50332,34525],{"class":65},[51,50334,70],{"class":69},[51,50336,3472],{"class":278},[51,50338,50339],{"class":53,"line":10100},[51,50340,206],{"emptyLinePlaceholder":205},[51,50342,50343],{"class":53,"line":10125},[51,50344,34538],{"class":601},[51,50346,50347],{"class":53,"line":10148},[51,50348,34543],{"class":601},[51,50350,50351],{"class":53,"line":10172},[51,50352,34548],{"class":601},[51,50354,50355,50357],{"class":53,"line":10177},[51,50356,34553],{"class":69},[51,50358,33259],{"class":65},[51,50360,50361],{"class":53,"line":10182},[51,50362,34560],{"class":601},[51,50364,50365,50367,50369,50371],{"class":53,"line":10187},[51,50366,3790],{"class":69},[51,50368,34567],{"class":65},[51,50370,26425],{"class":69},[51,50372,34572],{"class":65},[51,50374,50375,50377,50379],{"class":53,"line":10196},[51,50376,34577],{"class":65},[51,50378,70],{"class":69},[51,50380,34582],{"class":65},[51,50382,50383,50385,50387],{"class":53,"line":10201},[51,50384,34587],{"class":65},[51,50386,70],{"class":69},[51,50388,34592],{"class":65},[51,50390,50391],{"class":53,"line":10207},[51,50392,34597],{"class":601},[51,50394,50395],{"class":53,"line":10228},[51,50396,33250],{"class":65},[51,50398,50399],{"class":53,"line":10234},[51,50400,34606],{"class":601},[51,50402,50403,50405,50407],{"class":53,"line":10248},[51,50404,33035],{"class":65},[51,50406,70],{"class":69},[51,50408,34615],{"class":65},[51,50410,50411],{"class":53,"line":10254},[51,50412,34620],{"class":601},[51,50414,50415,50417,50419,50421,50423,50425,50427],{"class":53,"line":10281},[51,50416,33052],{"class":65},[51,50418,70],{"class":69},[51,50420,33057],{"class":65},[51,50422,33060],{"class":248},[51,50424,70],{"class":69},[51,50426,759],{"class":278},[51,50428,282],{"class":65},[51,50430,50431],{"class":53,"line":10290},[51,50432,34641],{"class":601},[51,50434,50435],{"class":53,"line":10296},[51,50436,34646],{"class":601},[51,50438,50439],{"class":53,"line":10304},[51,50440,34651],{"class":601},[51,50442,50443,50445,50447,50449,50451],{"class":53,"line":10309},[51,50444,34656],{"class":65},[51,50446,9861],{"class":69},[51,50448,33162],{"class":65},[51,50450,375],{"class":69},[51,50452,34665],{"class":65},[51,50454,50455],{"class":53,"line":16987},[51,50456,34670],{"class":601},[51,50458,50459,50461,50463,50465,50467],{"class":53,"line":16993},[51,50460,34675],{"class":65},[51,50462,9861],{"class":69},[51,50464,34680],{"class":65},[51,50466,733],{"class":278},[51,50468,282],{"class":65},[51,50470,50471],{"class":53,"line":17016},[51,50472,206],{"emptyLinePlaceholder":205},[51,50474,50475],{"class":53,"line":17022},[51,50476,34693],{"class":601},[51,50478,50479,50481,50483,50485,50487],{"class":53,"line":17045},[51,50480,34698],{"class":65},[51,50482,70],{"class":69},[51,50484,34703],{"class":65},[51,50486,1126],{"class":69},[51,50488,34708],{"class":65},[51,50490,50491],{"class":53,"line":17059},[51,50492,34713],{"class":601},[51,50494,50495,50497,50499,50501],{"class":53,"line":17079},[51,50496,32826],{"class":278},[51,50498,546],{"class":65},[51,50500,34722],{"class":61},[51,50502,34725],{"class":65},[51,50504,50505],{"class":53,"line":17085},[51,50506,206],{"emptyLinePlaceholder":205},[51,50508,50509],{"class":53,"line":17096},[51,50510,34734],{"class":601},[51,50512,50513,50515,50517,50519,50521],{"class":53,"line":17119},[51,50514,1940],{"class":69},[51,50516,31598],{"class":278},[51,50518,375],{"class":69},[51,50520,31603],{"class":61},[51,50522,363],{"class":65},[51,50524,50525],{"class":53,"line":17141},[51,50526,34751],{"class":601},[51,50528,50529,50531,50533],{"class":53,"line":17146},[51,50530,31667],{"class":65},[51,50532,70],{"class":69},[51,50534,44925],{"class":65},[51,50536,50537],{"class":53,"line":17152},[51,50538,34764],{"class":601},[51,50540,50541],{"class":53,"line":17166},[51,50542,34769],{"class":601},[51,50544,50545,50547,50549],{"class":53,"line":17179},[51,50546,34774],{"class":65},[51,50548,34777],{"class":61},[51,50550,30876],{"class":65},[51,50552,50553],{"class":53,"line":17184},[51,50554,34784],{"class":601},[51,50556,50557,50559,50561],{"class":53,"line":17198},[51,50558,34397],{"class":65},[51,50560,70],{"class":69},[51,50562,34793],{"class":65},[51,50564,50565],{"class":53,"line":17203},[51,50566,34798],{"class":601},[51,50568,50569],{"class":53,"line":17209},[51,50570,34803],{"class":65},[51,50572,50573],{"class":53,"line":17214},[51,50574,206],{"emptyLinePlaceholder":205},[51,50576,50577],{"class":53,"line":17228},[51,50578,34812],{"class":601},[51,50580,50581],{"class":53,"line":17233},[51,50582,34817],{"class":601},[51,50584,50585,50587,50589,50591,50593,50595,50597],{"class":53,"line":17238},[51,50586,31615],{"class":65},[51,50588,70],{"class":69},[51,50590,31622],{"class":61},[51,50592,2102],{"class":69},[51,50594,31627],{"class":65},[51,50596,2099],{"class":69},[51,50598,34494],{"class":61},[51,50600,50601,50603,50605],{"class":53,"line":17252},[51,50602,31667],{"class":65},[51,50604,70],{"class":69},[51,50606,32664],{"class":65},[51,50608,50609],{"class":53,"line":17264},[51,50610,34846],{"class":601},[51,50612,50613],{"class":53,"line":17269},[51,50614,34851],{"class":601},[51,50616,50617,50619,50621,50623,50626,50628,50631],{"class":53,"line":17282},[51,50618,34856],{"class":65},[51,50620,70],{"class":69},[51,50622,1432],{"class":65},[51,50624,50625],{"class":61},"'猫'",[51,50627,920],{"class":65},[51,50629,50630],{"class":61},"'狗'",[51,50632,33621],{"class":65},[51,50634,50635,50637],{"class":53,"line":17287},[51,50636,34553],{"class":69},[51,50638,33259],{"class":65},[51,50640,50641],{"class":53,"line":17292},[51,50642,34921],{"class":601},[51,50644,50645,50647,50649,50651],{"class":53,"line":17297},[51,50646,3790],{"class":69},[51,50648,34928],{"class":65},[51,50650,26425],{"class":69},[51,50652,34572],{"class":65},[51,50654,50655,50657,50659],{"class":53,"line":17310},[51,50656,32985],{"class":65},[51,50658,70],{"class":69},[51,50660,32990],{"class":65},[51,50662,50663,50665,50667],{"class":53,"line":17315},[51,50664,33000],{"class":65},[51,50666,70],{"class":69},[51,50668,33005],{"class":65},[51,50670,50671],{"class":53,"line":33008},[51,50672,206],{"emptyLinePlaceholder":205},[51,50674,50675],{"class":53,"line":33014},[51,50676,34957],{"class":601},[51,50678,50679],{"class":53,"line":33020},[51,50680,33250],{"class":65},[51,50682,50683],{"class":53,"line":33026},[51,50684,34966],{"class":601},[51,50686,50687,50689,50691],{"class":53,"line":33032},[51,50688,33035],{"class":65},[51,50690,70],{"class":69},[51,50692,33040],{"class":65},[51,50694,50695],{"class":53,"line":33043},[51,50696,34979],{"class":601},[51,50698,50699,50701,50703,50705,50707,50709,50711],{"class":53,"line":33049},[51,50700,33052],{"class":65},[51,50702,70],{"class":69},[51,50704,33057],{"class":65},[51,50706,33060],{"class":248},[51,50708,70],{"class":69},[51,50710,759],{"class":278},[51,50712,282],{"class":65},[51,50714,50715],{"class":53,"line":33069},[51,50716,35000],{"class":601},[51,50718,50719,50721,50723],{"class":53,"line":33075},[51,50720,35005],{"class":65},[51,50722,70],{"class":69},[51,50724,35010],{"class":65},[51,50726,50727,50729,50731],{"class":53,"line":33086},[51,50728,35015],{"class":65},[51,50730,70],{"class":69},[51,50732,35020],{"class":65},[51,50734,50735,50737,50739,50741,50743,50745,50747,50749],{"class":53,"line":33092},[51,50736,35025],{"class":278},[51,50738,546],{"class":65},[51,50740,35030],{"class":61},[51,50742,35033],{"class":65},[51,50744,35036],{"class":61},[51,50746,920],{"class":65},[51,50748,35041],{"class":61},[51,50750,35044],{"class":65},[464,50752,50753],{},"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":46,"searchDepth":185,"depth":185,"links":50755},[50756,50757,50758,50759],{"id":30970,"depth":202,"text":30971},{"id":38214,"depth":202,"text":38215},{"id":41646,"depth":202,"text":41647},{"id":45655,"depth":202,"text":45656},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30962,"description":23760},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50766,"title":50767,"body":50768,"description":23760,"extension":469,"meta":50775,"navigation":205,"path":50776,"seo":50777,"stem":50778,"__hash__":50779},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50769,"toc":50773},[50770],[14,50771,50767],{"id":50772},"_3yolo模型学习",{"title":46,"searchDepth":185,"depth":185,"links":50774},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50767,"description":23760},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50781,"title":50782,"body":50783,"description":50790,"extension":469,"meta":50791,"navigation":205,"path":50793,"seo":50794,"stem":50795,"__hash__":50796},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50784,"toc":50788},[50785],[10,50786,50787],{},"yolo模型还未补充",{"title":46,"searchDepth":185,"depth":185,"links":50789},[],"深度学习学习",{"category":50792},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50782,"description":50790},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50798,"title":50799,"body":50800,"description":23760,"extension":469,"meta":50825,"navigation":205,"path":50826,"seo":50827,"stem":50828,"__hash__":50829},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50801,"toc":50823},[50802,50805,50808,50813,50820],[14,50803,50799],{"id":50804},"_1工具",[10,50806,50807],{},"提示错误插件：有问题会提前报错",[10,50809,50810],{},[460,50811],{"alt":46,"src":50812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[10,50814,50815],{},[780,50816,50819],{"href":50817,"rel":50818},"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",[24246],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[10,50821,50822],{},"alt键加上下箭头可以实现语句的移动",{"title":46,"searchDepth":185,"depth":185,"links":50824},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50799,"description":23760},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50831,"title":50832,"body":50833,"description":23760,"extension":469,"meta":53697,"navigation":205,"path":53698,"seo":53699,"stem":53700,"__hash__":53701},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50834,"toc":53648},[50835,50838,50842,50846,50851,50854,50859,50863,50870,50875,50882,50887,50894,50899,50903,50908,50911,50915,50920,50924,50929,50932,50935,50938,50941,50944,50947,50950,50953,50958,50963,50968,50972,50975,50978,50982,50987,50990,50998,51003,51020,51028,51033,51038,51043,51048,51053,51056,51061,51066,51070,51079,51084,51089,51093,51098,51101,51105,51110,51118,51123,51128,51131,51136,51141,51146,51149,51152,51155,51160,51165,51168,51173,51176,51181,51184,51187,51190,51195,51198,51201,51216,51221,51226,51231,51234,51237,51240,51254,51257,51262,51267,51270,51273,51276,51279,51282,51285,51288,51292,51296,51301,51305,51308,51313,51318,51321,51326,51329,51333,51338,51341,51344,51347,51350,51353,51356,51359,51362,51365,51369,51374,51379,51384,51387,51390,51394,51399,51402,51406,51409,51412,51417,51420,51423,51427,51431,51434,51439,51444,51447,51476,51481,51486,51491,51496,51500,51505,51509,51514,51517,51521,51525,51530,51534,51539,51544,51548,51553,51556,51558,51561,51566,51570,51575,51579,51583,51588,51593,51598,51603,51607,51612,51617,51622,51625,51628,51633,51636,51641,51646,51651,51656,51660,52467,52471,52814,52819,52822,52825,52828,52831,52834,52837,52840,52843,52845,52848,52850,52853,52857,52862,52865,52868,52871,52875,52880,52885,52905,52908,52912,52917,52922,52939,52943,52972,52976,52998,53000,53039,53047,53053,53057,53060,53063,53068,53073,53076,53079,53082,53087,53092,53095,53098,53101,53104,53107,53110,53113,53116,53119,53122,53125,53127,53130,53133,53136,53139,53142,53145,53148,53151,53155,53160,53163,53168,53171,53174,53177,53180,53183,53186,53189,53191,53194,53197,53200,53203,53206,53209,53213,53216,53225,53228,53233,53236,53241,53244,53247,53250,53253,53256,53259,53262,53266,53270,53273,53276,53281,53286,53291,53295,53300,53305,53308,53311,53314,53317,53320,53325,53328,53333,53335,53340,53343,53347,53352,53355,53358,53363,53367,53370,53375,53378,53381,53410,53415,53418,53421,53424,53427,53430,53434,53437,53523,53527,53530,53535,53540,53547,53550,53553,53556,53559,53562,53567,53572,53575,53578,53581,53584,53587,53590,53593,53596,53599,53601,53604,53608,53613,53618,53623,53626,53631,53636,53639,53642,53645],[14,50836,50832],{"id":50837},"_2基础语法",[486,50839,50841],{"id":50840},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[513,50843,50845],{"id":50844},"_211-js组成","2.1.1 js组成",[19,50847,50848],{},[22,50849,50850],{},"js是编程语言，html和css不是编程语言，是标记语言",[10,50852,50853],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[19,50855,50856],{"start":185},[22,50857,50858],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[513,50860,50862],{"id":50861},"_212-js书写位置","2.1.2 js书写位置",[19,50864,50865],{},[22,50866,50867],{},[691,50868,50869],{},"内部 JavaScript",[10,50871,50872],{},[460,50873],{"alt":46,"src":50874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[19,50876,50877],{"start":185},[22,50878,50879],{},[691,50880,50881],{},"外部 JavaScript",[10,50883,50884],{},[460,50885],{"alt":46,"src":50886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[19,50888,50889],{"start":202},[22,50890,50891],{},[691,50892,50893],{},"内联 JavaScript",[10,50895,50896],{},[460,50897],{"alt":46,"src":50898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[513,50900,50902],{"id":50901},"_213-javascript注释","2.1.3 JavaScript注释",[10,50904,50905],{},[460,50906],{"alt":46,"src":50907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[10,50909,50910],{},"alt+shift+a一定要记住！",[513,50912,50914],{"id":50913},"_214-javascript结束符","2.1.4 JavaScript结束符",[10,50916,50917],{},[460,50918],{"alt":46,"src":50919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[513,50921,50923],{"id":50922},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[19,50925,50926],{},[22,50927,50928],{},"输出语法：",[10,50930,50931],{},"①document.write('要出的内容')",[10,50933,50934],{},"向body内输出内容；",[10,50936,50937],{},"如果输出的内容写的是标签，也会被解析cheng",[10,50939,50940],{},"②alert('要出的内容')",[10,50942,50943],{},"页面弹出警告对话框",[10,50945,50946],{},"③console.log('控制台打印')",[10,50948,50949],{},"控制台输出语法，程序员调试使用",[10,50951,50952],{},"输入log就行，自动生成：",[10,50954,50955],{},[460,50956],{"alt":46,"src":50957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[19,50959,50960],{"start":185},[22,50961,50962],{},"输入语法：",[10,50964,50965],{},[460,50966],{"alt":46,"src":50967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[513,50969,50971],{"id":50970},"_2116-字面量","21.1.6 字面量",[10,50973,50974],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[10,50976,50977],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[486,50979,50981],{"id":50980},"_22-变量","2.2 变量",[19,50983,50984],{},[22,50985,50986],{},"变量声明",[10,50988,50989],{},"let 变量名",[1549,50991,50992,50995],{},[22,50993,50994],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[22,50996,50997],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[19,50999,51000],{"start":185},[22,51001,51002],{},"变量赋值",[41,51004,51008],{"className":51005,"code":51006,"language":51007,"meta":46,"style":46},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[48,51009,51010,51015],{"__ignoreMap":46},[51,51011,51012],{"class":53,"line":54},[51,51013,51014],{"class":65},"let age\n",[51,51016,51017],{"class":53,"line":185},[51,51018,51019],{"class":65},"age=18\n",[19,51021,51022,51025],{"start":202},[22,51023,51024],{},"连这些（变量的初始化）：let age=18",[22,51026,51027],{},"更新变量",[10,51029,51030],{},[460,51031],{"alt":46,"src":51032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[19,51034,51035],{"start":223},[22,51036,51037],{},"声明多个变量",[10,51039,51040],{},[460,51041],{"alt":46,"src":51042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[19,51044,51045],{"start":237},[22,51046,51047],{},"变量命名规则与规范",[10,51049,51050],{},[460,51051],{"alt":46,"src":51052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[10,51054,51055],{},"遵守小驼峰！",[19,51057,51058],{"start":242},[22,51059,51060],{},"变量拓展-let和var的区别",[10,51062,51063],{},[460,51064],{"alt":46,"src":51065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[486,51067,51069],{"id":51068},"_23-数组","2.3 数组",[41,51071,51073],{"className":51005,"code":51072,"language":51007,"meta":46,"style":46},"let arr = []\n",[48,51074,51075],{"__ignoreMap":46},[51,51076,51077],{"class":53,"line":54},[51,51078,51072],{"class":65},[10,51080,51081],{},[460,51082],{"alt":46,"src":51083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[10,51085,51086],{},[460,51087],{"alt":46,"src":51088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[486,51090,51092],{"id":51091},"_24-常量","2.4 常量",[10,51094,51095],{},[460,51096],{"alt":46,"src":51097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[10,51099,51100],{},"const — 类似于 let ，但是变量的值无法被修改",[486,51102,51104],{"id":51103},"_25-数据类型","2.5 数据类型",[10,51106,51107],{},[460,51108],{"alt":46,"src":51109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[19,51111,51112,51115],{},[22,51113,51114],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[22,51116,51117],{},"算数运算符：",[10,51119,51120],{},[460,51121],{"alt":46,"src":51122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[19,51124,51125],{"start":202},[22,51126,51127],{},"数字类型（Number）",[10,51129,51130],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[10,51132,51133],{},[460,51134],{"alt":46,"src":51135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[19,51137,51138],{"start":209},[22,51139,51140],{},"字符串类型（string）",[10,51142,51143],{},[460,51144],{"alt":46,"src":51145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[10,51147,51148],{},"反引号也是可以使用的",[10,51150,51151],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[10,51153,51154],{},"例如：document.write(\"我今年\"+age+\"岁\")",[19,51156,51157],{"start":223},[22,51158,51159],{},"模板字符串",[10,51161,51162],{},[460,51163],{"alt":46,"src":51164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[10,51166,51167],{},"类似于python的字符串格式化",[19,51169,51170],{"start":237},[22,51171,51172],{},"布尔类型",[10,51174,51175],{},"true 和 false",[19,51177,51178],{"start":242},[22,51179,51180],{},"未定义类型（underfined）",[10,51182,51183],{},"表示没有赋值",[10,51185,51186],{},"未定义类型是比较特殊的类型，只有一个值undefined",[10,51188,51189],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[19,51191,51192],{"start":257},[22,51193,51194],{},"null（空类型）",[10,51196,51197],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[10,51199,51200],{},"赋值了，但是内容为空",[41,51202,51204],{"className":51005,"code":51203,"language":51007,"meta":46,"style":46},"typeof null\n输出的是'object'，是一个对象数据类型\n",[48,51205,51206,51211],{"__ignoreMap":46},[51,51207,51208],{"class":53,"line":54},[51,51209,51210],{"class":65},"typeof null\n",[51,51212,51213],{"class":53,"line":185},[51,51214,51215],{"class":65},"输出的是'object'，是一个对象数据类型\n",[19,51217,51218],{"start":262},[22,51219,51220],{},"控制台检测数据类型",[10,51222,51223],{},[460,51224],{"alt":46,"src":51225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[19,51227,51228],{"start":285},[22,51229,51230],{},"类型转换",[10,51232,51233],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[10,51235,51236],{},"转换方式：隐式转换和显示转换",[10,51238,51239],{},"①隐式转换",[1549,51241,51242,51245,51248,51251],{},[22,51243,51244],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[22,51246,51247],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[22,51249,51250],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[22,51252,51253],{},"任何数据和字符串相加结果都是字符串",[10,51255,51256],{},"②显示转换",[10,51258,51259],{},[460,51260],{"alt":46,"src":51261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[10,51263,51264],{},[460,51265],{"alt":46,"src":51266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[10,51268,51269],{},"在输入的时候要用好隐式转换，简单写起来",[10,51271,51272],{},"let num = +prompt(’请输入数字：‘)",[10,51274,51275],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[10,51277,51278],{},"console.log(parseInt('12.333px'))",[10,51280,51281],{},"输出为：12",[10,51283,51284],{},"console.log(parseInt('a'a'a12.333px'))",[10,51286,51287],{},"输出：NaN",[486,51289,51291],{"id":51290},"_26-运算符","2.6 运算符",[513,51293,51295],{"id":51294},"_261-赋值运算符","2.6.1 赋值运算符",[10,51297,51298],{},[460,51299],{"alt":46,"src":51300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[513,51302,51304],{"id":51303},"_262-一元运算符","2.6.2 一元运算符",[10,51306,51307],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[10,51309,51310],{},[460,51311],{"alt":46,"src":51312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[10,51314,51315],{},[460,51316],{"alt":46,"src":51317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[10,51319,51320],{},"两者的区别：",[10,51322,51323],{},[460,51324],{"alt":46,"src":51325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[10,51327,51328],{},"前置先自加；后置后加，代码执行完之后再加",[513,51330,51332],{"id":51331},"_263-比较运算符","2.6.3 比较运算符",[10,51334,51335],{},[460,51336],{"alt":46,"src":51337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[10,51339,51340],{},"比较运算符也有隐式转换",[10,51342,51343],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[10,51345,51346],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[10,51348,51349],{},"要使用三等，开发的时候",[10,51351,51352],{},"NaN不等于任何人，包括它自己",[10,51354,51355],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[10,51357,51358],{},"7\u002F10=0.7",[10,51360,51361],{},"最后：0.5+0.2=0.7",[10,51363,51364],{},"字符串比较，比较的是字符对应的ASCII码",[513,51366,51368],{"id":51367},"_264-逻辑运算符","2.6.4 逻辑运算符",[10,51370,51371],{},[460,51372],{"alt":46,"src":51373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[10,51375,51376],{},[460,51377],{"alt":46,"src":51378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[10,51380,51381],{},[460,51382],{"alt":46,"src":51383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[10,51385,51386],{},"上述题目选D",[10,51388,51389],{},"与真2假1；或真1假2",[513,51391,51393],{"id":51392},"_265-运算符优先级","2.6.5 运算符优先级",[10,51395,51396],{},[460,51397],{"alt":46,"src":51398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[10,51400,51401],{},"先算逻辑与，后算逻辑或",[486,51403,51405],{"id":51404},"_27-语句","2.7 语句",[10,51407,51408],{},"表达式：是可以被求值的代码，会有结果给我们",[10,51410,51411],{},"语句：语句是可以被执行的代码，例如prompt()",[10,51413,51414],{},[460,51415],{"alt":46,"src":51416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[10,51418,51419],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[10,51421,51422],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[513,51424,51426],{"id":51425},"_271-分支语句","2.7.1 分支语句",[22381,51428,51430],{"id":51429},"_2711-if分支语句","2.7.1.1 if分支语句",[10,51432,51433],{},"if语句单行简单的话，可以不写{}，写在一行就行",[19,51435,51436],{},[22,51437,51438],{},"单分支语句",[10,51440,51441],{},[460,51442],{"alt":46,"src":51443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[10,51445,51446],{},"除了0，所有数字都为真",[41,51448,51450],{"className":51005,"code":51449,"language":51007,"meta":46,"style":46},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[48,51451,51452,51457,51462,51467,51471],{"__ignoreMap":46},[51,51453,51454],{"class":53,"line":54},[51,51455,51456],{"class":65},"if（0) {\n",[51,51458,51459],{"class":53,"line":185},[51,51460,51461],{"class":65},"    let a=1\n",[51,51463,51464],{"class":53,"line":202},[51,51465,51466],{"class":65},"    alert(typeof a)\n",[51,51468,51469],{"class":53,"line":209},[51,51470,1974],{"class":65},[51,51472,51473],{"class":53,"line":223},[51,51474,51475],{"class":65},"不输出，括号为假\n",[19,51477,51478],{"start":185},[22,51479,51480],{},"双分支语句",[10,51482,51483],{},[460,51484],{"alt":46,"src":51485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[19,51487,51488],{"start":202},[22,51489,51490],{},"多分支语句",[10,51492,51493],{},[460,51494],{"alt":46,"src":51495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22381,51497,51499],{"id":51498},"_2712-三元运算符","2.7.1.2 三元运算符",[10,51501,51502],{},[460,51503],{"alt":46,"src":51504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22381,51506,51508],{"id":51507},"_2713-switch语句","2.7.1.3 switch语句",[10,51510,51511],{},[460,51512],{"alt":46,"src":51513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[10,51515,51516],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[513,51518,51520],{"id":51519},"_272-循环语句","2.7.2 循环语句",[22381,51522,51524],{"id":51523},"_2721-断点演示","2.7.2.1 断点演示",[10,51526,51527],{},[460,51528],{"alt":46,"src":51529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22381,51531,51533],{"id":51532},"_2722-while循环","2.7.2.2 while循环",[10,51535,51536],{},[460,51537],{"alt":46,"src":51538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[10,51540,51541],{},[460,51542],{"alt":46,"src":51543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22381,51545,51547],{"id":51546},"_2723-for循环","2.7.2.3 for循环",[10,51549,51550],{},[460,51551],{"alt":46,"src":51552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[10,51554,51555],{},"for(;;) {",[10,51557,1488],{},[10,51559,51560],{},"表示无限循环",[10,51562,51563],{},[460,51564],{"alt":46,"src":51565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22381,51567,51569],{"id":51568},"_2724-循环的退出","2.7.2.4 循环的退出",[10,51571,51572],{},[460,51573],{"alt":46,"src":51574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[486,51576,51578],{"id":51577},"_28-数组","2.8 数组",[513,51580,51582],{"id":51581},"_281-基础认识","2.8.1 基础认识",[10,51584,51585],{},[460,51586],{"alt":46,"src":51587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[10,51589,51590],{},[460,51591],{"alt":46,"src":51592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[10,51594,51595],{},[460,51596],{"alt":46,"src":51597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[10,51599,51600],{},[460,51601],{"alt":46,"src":51602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[513,51604,51606],{"id":51605},"_282-操作数组","2.8.2 操作数组",[10,51608,51609],{},[460,51610],{"alt":46,"src":51611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[19,51613,51614],{},[22,51615,51616],{},"添加元素",[10,51618,51619],{},[460,51620],{"alt":46,"src":51621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[10,51623,51624],{},"console.log(arr.push('green'))",[10,51626,51627],{},"输出结果：为新数组的长度",[10,51629,51630],{},[460,51631],{"alt":46,"src":51632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[10,51634,51635],{},"push用的非常多，一定要记住",[19,51637,51638],{},[22,51639,51640],{},"删除元素",[10,51642,51643],{},[460,51644],{"alt":46,"src":51645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[10,51647,51648],{},[460,51649],{"alt":46,"src":51650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[10,51652,51653],{},[460,51654],{"alt":46,"src":51655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[513,51657,51659],{"id":51658},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[41,51661,51663],{"className":51005,"code":51662,"language":51007,"meta":46,"style":46},"\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",[48,51664,51665,51680,51696,51700,51709,51727,51751,51773,51787,51795,51802,51814,51825,51829,51833,51840,51852,51867,51880,51899,51916,51931,51943,51955,51967,51971,51975,51986,51996,52008,52020,52032,52043,52047,52051,52063,52067,52081,52085,52089,52100,52114,52126,52140,52144,52153,52162,52166,52175,52179,52188,52193,52198,52211,52239,52244,52249,52274,52279,52283,52288,52293,52308,52312,52317,52347,52359,52375,52391,52405,52410,52417,52421,52426,52439,52447,52455,52459],{"__ignoreMap":46},[51,51666,51667,51670,51674,51677],{"class":53,"line":54},[51,51668,51669],{"class":65},"\u003C!",[51,51671,51673],{"class":51672},"s9eBZ","DOCTYPE",[51,51675,51676],{"class":57}," html",[51,51678,51679],{"class":65},">\n",[51,51681,51682,51684,51686,51689,51691,51694],{"class":53,"line":185},[51,51683,1452],{"class":65},[51,51685,51007],{"class":51672},[51,51687,51688],{"class":57}," lang",[51,51690,70],{"class":65},[51,51692,51693],{"class":61},"\"en\"",[51,51695,51679],{"class":65},[51,51697,51698],{"class":53,"line":202},[51,51699,206],{"emptyLinePlaceholder":205},[51,51701,51702,51704,51707],{"class":53,"line":209},[51,51703,1452],{"class":65},[51,51705,51706],{"class":51672},"head",[51,51708,51679],{"class":65},[51,51710,51711,51714,51717,51720,51722,51725],{"class":53,"line":223},[51,51712,51713],{"class":65},"    \u003C",[51,51715,51716],{"class":51672},"meta",[51,51718,51719],{"class":57}," charset",[51,51721,70],{"class":65},[51,51723,51724],{"class":61},"\"UTF-8\"",[51,51726,51679],{"class":65},[51,51728,51729,51731,51733,51736,51738,51741,51744,51746,51749],{"class":53,"line":237},[51,51730,51713],{"class":65},[51,51732,51716],{"class":51672},[51,51734,51735],{"class":57}," http-equiv",[51,51737,70],{"class":65},[51,51739,51740],{"class":61},"\"X-UA-Compatible\"",[51,51742,51743],{"class":57}," content",[51,51745,70],{"class":65},[51,51747,51748],{"class":61},"\"IE=edge\"",[51,51750,51679],{"class":65},[51,51752,51753,51755,51757,51759,51761,51764,51766,51768,51771],{"class":53,"line":242},[51,51754,51713],{"class":65},[51,51756,51716],{"class":51672},[51,51758,15304],{"class":57},[51,51760,70],{"class":65},[51,51762,51763],{"class":61},"\"viewport\"",[51,51765,51743],{"class":57},[51,51767,70],{"class":65},[51,51769,51770],{"class":61},"\"width=device-width, initial-scale=1.0\"",[51,51772,51679],{"class":65},[51,51774,51775,51777,51780,51783,51785],{"class":53,"line":257},[51,51776,51713],{"class":65},[51,51778,51779],{"class":51672},"title",[51,51781,51782],{"class":65},">Document\u003C\u002F",[51,51784,51779],{"class":51672},[51,51786,51679],{"class":65},[51,51788,51789,51791,51793],{"class":53,"line":262},[51,51790,51713],{"class":65},[51,51792,464],{"class":51672},[51,51794,51679],{"class":65},[51,51796,51797,51800],{"class":53,"line":285},[51,51798,51799],{"class":51672},"        *",[51,51801,15956],{"class":65},[51,51803,51804,51807,51810,51812],{"class":53,"line":296},[51,51805,51806],{"class":278},"            margin",[51,51808,51809],{"class":65},": ",[51,51811,733],{"class":278},[51,51813,1703],{"class":65},[51,51815,51816,51819,51821,51823],{"class":53,"line":307},[51,51817,51818],{"class":278},"            padding",[51,51820,51809],{"class":65},[51,51822,733],{"class":278},[51,51824,1703],{"class":65},[51,51826,51827],{"class":53,"line":324},[51,51828,2917],{"class":65},[51,51830,51831],{"class":53,"line":329},[51,51832,206],{"emptyLinePlaceholder":205},[51,51834,51835,51838],{"class":53,"line":334},[51,51836,51837],{"class":57},"        .box",[51,51839,15956],{"class":65},[51,51841,51842,51845,51847,51850],{"class":53,"line":340},[51,51843,51844],{"class":278},"            display",[51,51846,51809],{"class":65},[51,51848,51849],{"class":278},"flex",[51,51851,1703],{"class":65},[51,51853,51854,51857,51859,51862,51865],{"class":53,"line":345},[51,51855,51856],{"class":278},"            width",[51,51858,51809],{"class":65},[51,51860,51861],{"class":278},"700",[51,51863,51864],{"class":69},"px",[51,51866,1703],{"class":65},[51,51868,51869,51872,51874,51876,51878],{"class":53,"line":357},[51,51870,51871],{"class":278},"            height",[51,51873,51809],{"class":65},[51,51875,4359],{"class":278},[51,51877,51864],{"class":69},[51,51879,1703],{"class":65},[51,51881,51882,51885,51887,51889,51891,51894,51897],{"class":53,"line":366},[51,51883,51884],{"class":278},"            border-left",[51,51886,51809],{"class":65},[51,51888,759],{"class":278},[51,51890,51864],{"class":69},[51,51892,51893],{"class":278}," solid",[51,51895,51896],{"class":278}," pink",[51,51898,1703],{"class":65},[51,51900,51901,51904,51906,51908,51910,51912,51914],{"class":53,"line":383},[51,51902,51903],{"class":278},"            border-bottom",[51,51905,51809],{"class":65},[51,51907,759],{"class":278},[51,51909,51864],{"class":69},[51,51911,51893],{"class":278},[51,51913,51896],{"class":278},[51,51915,1703],{"class":65},[51,51917,51918,51920,51922,51924,51926,51929],{"class":53,"line":392},[51,51919,51806],{"class":278},[51,51921,51809],{"class":65},[51,51923,1198],{"class":278},[51,51925,51864],{"class":69},[51,51927,51928],{"class":278}," auto",[51,51930,1703],{"class":65},[51,51932,51933,51936,51938,51941],{"class":53,"line":403},[51,51934,51935],{"class":278},"            justify-content",[51,51937,51809],{"class":65},[51,51939,51940],{"class":278},"space-around",[51,51942,1703],{"class":65},[51,51944,51945,51948,51950,51953],{"class":53,"line":409},[51,51946,51947],{"class":278},"            align-items",[51,51949,51809],{"class":65},[51,51951,51952],{"class":278},"flex-end",[51,51954,1703],{"class":65},[51,51956,51957,51960,51962,51965],{"class":53,"line":414},[51,51958,51959],{"class":278},"            text-align",[51,51961,51809],{"class":65},[51,51963,51964],{"class":278},"center",[51,51966,1703],{"class":65},[51,51968,51969],{"class":53,"line":433},[51,51970,2917],{"class":65},[51,51972,51973],{"class":53,"line":439},[51,51974,206],{"emptyLinePlaceholder":205},[51,51976,51977,51979,51981,51984],{"class":53,"line":444},[51,51978,51837],{"class":57},[51,51980,1502],{"class":69},[51,51982,51983],{"class":51672},"div",[51,51985,15956],{"class":65},[51,51987,51988,51990,51992,51994],{"class":53,"line":453},[51,51989,51844],{"class":278},[51,51991,51809],{"class":65},[51,51993,51849],{"class":278},[51,51995,1703],{"class":65},[51,51997,51998,52000,52002,52004,52006],{"class":53,"line":2174},[51,51999,51856],{"class":278},[51,52001,51809],{"class":65},[51,52003,1198],{"class":278},[51,52005,51864],{"class":69},[51,52007,1703],{"class":65},[51,52009,52010,52013,52015,52018],{"class":53,"line":2965},[51,52011,52012],{"class":278},"            background-color",[51,52014,51809],{"class":65},[51,52016,52017],{"class":278},"pink",[51,52019,1703],{"class":65},[51,52021,52022,52025,52027,52030],{"class":53,"line":2979},[51,52023,52024],{"class":278},"            flex-direction",[51,52026,51809],{"class":65},[51,52028,52029],{"class":278},"column",[51,52031,1703],{"class":65},[51,52033,52034,52036,52038,52041],{"class":53,"line":2987},[51,52035,51935],{"class":278},[51,52037,51809],{"class":65},[51,52039,52040],{"class":278},"space-between",[51,52042,1703],{"class":65},[51,52044,52045],{"class":53,"line":2992},[51,52046,2917],{"class":65},[51,52048,52049],{"class":53,"line":2998},[51,52050,206],{"emptyLinePlaceholder":205},[51,52052,52053,52055,52058,52061],{"class":53,"line":3004},[51,52054,51837],{"class":57},[51,52056,52057],{"class":51672}," div",[51,52059,52060],{"class":51672}," span",[51,52062,15956],{"class":65},[51,52064,52065],{"class":53,"line":3009},[51,52066,206],{"emptyLinePlaceholder":205},[51,52068,52069,52072,52074,52077,52079],{"class":53,"line":8332},[51,52070,52071],{"class":278},"            margin-top",[51,52073,51809],{"class":65},[51,52075,52076],{"class":278},"-20",[51,52078,51864],{"class":69},[51,52080,1703],{"class":65},[51,52082,52083],{"class":53,"line":8356},[51,52084,2917],{"class":65},[51,52086,52087],{"class":53,"line":8361},[51,52088,206],{"emptyLinePlaceholder":205},[51,52090,52091,52093,52095,52098],{"class":53,"line":8367},[51,52092,51837],{"class":57},[51,52094,52057],{"class":51672},[51,52096,52097],{"class":51672}," h4",[51,52099,15956],{"class":65},[51,52101,52102,52105,52107,52110,52112],{"class":53,"line":8394},[51,52103,52104],{"class":278},"            margin-bottom",[51,52106,51809],{"class":65},[51,52108,52109],{"class":278},"-35",[51,52111,51864],{"class":69},[51,52113,1703],{"class":65},[51,52115,52116,52118,52120,52122,52124],{"class":53,"line":8399},[51,52117,51856],{"class":278},[51,52119,51809],{"class":65},[51,52121,898],{"class":278},[51,52123,51864],{"class":69},[51,52125,1703],{"class":65},[51,52127,52128,52131,52133,52136,52138],{"class":53,"line":8405},[51,52129,52130],{"class":278},"            margin-left",[51,52132,51809],{"class":65},[51,52134,52135],{"class":278},"-10",[51,52137,51864],{"class":69},[51,52139,1703],{"class":65},[51,52141,52142],{"class":53,"line":8417},[51,52143,2917],{"class":65},[51,52145,52146,52149,52151],{"class":53,"line":8429},[51,52147,52148],{"class":65},"    \u003C\u002F",[51,52150,464],{"class":51672},[51,52152,51679],{"class":65},[51,52154,52155,52158,52160],{"class":53,"line":8441},[51,52156,52157],{"class":65},"\u003C\u002F",[51,52159,51706],{"class":51672},[51,52161,51679],{"class":65},[51,52163,52164],{"class":53,"line":10100},[51,52165,206],{"emptyLinePlaceholder":205},[51,52167,52168,52170,52173],{"class":53,"line":10125},[51,52169,1452],{"class":65},[51,52171,52172],{"class":51672},"body",[51,52174,51679],{"class":65},[51,52176,52177],{"class":53,"line":10148},[51,52178,206],{"emptyLinePlaceholder":205},[51,52180,52181,52183,52186],{"class":53,"line":10172},[51,52182,51713],{"class":65},[51,52184,52185],{"class":51672},"script",[51,52187,51679],{"class":65},[51,52189,52190],{"class":53,"line":10177},[51,52191,52192],{"class":601},"        \u002F\u002F 1. 四次弹框效果\n",[51,52194,52195],{"class":53,"line":10182},[51,52196,52197],{"class":601},"        \u002F\u002F 声明一个新的数组\n",[51,52199,52200,52203,52206,52208],{"class":53,"line":10187},[51,52201,52202],{"class":69},"        let",[51,52204,52205],{"class":65}," arr ",[51,52207,70],{"class":69},[51,52209,52210],{"class":65}," []\n",[51,52212,52213,52215,52217,52220,52222,52224,52226,52228,52230,52233,52235,52237],{"class":53,"line":10196},[51,52214,3790],{"class":69},[51,52216,2060],{"class":65},[51,52218,52219],{"class":69},"let",[51,52221,9822],{"class":65},[51,52223,70],{"class":69},[51,52225,25500],{"class":278},[51,52227,9829],{"class":65},[51,52229,1997],{"class":69},[51,52231,52232],{"class":278}," 4",[51,52234,3601],{"class":65},[51,52236,2682],{"class":69},[51,52238,12826],{"class":65},[51,52240,52241],{"class":53,"line":10201},[51,52242,52243],{"class":601},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[51,52245,52246],{"class":53,"line":10207},[51,52247,52248],{"class":601},"            \u002F\u002F arr.push(num)\n",[51,52250,52251,52254,52257,52259,52262,52264,52267,52269,52272],{"class":53,"line":10228},[51,52252,52253],{"class":65},"            arr.",[51,52255,52256],{"class":57},"push",[51,52258,546],{"class":65},[51,52260,52261],{"class":57},"prompt",[51,52263,546],{"class":65},[51,52265,52266],{"class":61},"`请输入第${",[51,52268,983],{"class":65},[51,52270,52271],{"class":61},"}季度的数据:`",[51,52273,30876],{"class":65},[51,52275,52276],{"class":53,"line":10234},[51,52277,52278],{"class":601},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[51,52280,52281],{"class":53,"line":10248},[51,52282,2917],{"class":65},[51,52284,52285],{"class":53,"line":10254},[51,52286,52287],{"class":601},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[51,52289,52290],{"class":53,"line":10281},[51,52291,52292],{"class":601},"        \u002F\u002F 盒子开头\n",[51,52294,52295,52298,52301,52303,52306],{"class":53,"line":10290},[51,52296,52297],{"class":65},"        document.",[51,52299,52300],{"class":57},"write",[51,52302,546],{"class":65},[51,52304,52305],{"class":61},"` \u003Cdiv class=\"box\">`",[51,52307,282],{"class":65},[51,52309,52310],{"class":53,"line":10296},[51,52311,206],{"emptyLinePlaceholder":205},[51,52313,52314],{"class":53,"line":10304},[51,52315,52316],{"class":601},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[51,52318,52319,52321,52323,52325,52327,52329,52331,52333,52335,52338,52341,52343,52345],{"class":53,"line":10309},[51,52320,3790],{"class":69},[51,52322,2060],{"class":65},[51,52324,52219],{"class":69},[51,52326,9822],{"class":65},[51,52328,70],{"class":69},[51,52330,4479],{"class":278},[51,52332,9829],{"class":65},[51,52334,1452],{"class":69},[51,52336,52337],{"class":65}," arr.",[51,52339,52340],{"class":278},"length",[51,52342,3601],{"class":65},[51,52344,2682],{"class":69},[51,52346,12826],{"class":65},[51,52348,52349,52352,52354,52356],{"class":53,"line":16987},[51,52350,52351],{"class":65},"            document.",[51,52353,52300],{"class":57},[51,52355,546],{"class":65},[51,52357,52358],{"class":61},"`\n",[51,52360,52361,52364,52366,52368,52370,52372],{"class":53,"line":16993},[51,52362,52363],{"class":61},"              \u003Cdiv style=\"height: ${",[51,52365,4266],{"class":65},[51,52367,1432],{"class":61},[51,52369,983],{"class":65},[51,52371,1482],{"class":61},[51,52373,52374],{"class":61},"}px;\">\n",[51,52376,52377,52380,52382,52384,52386,52388],{"class":53,"line":17016},[51,52378,52379],{"class":61},"                \u003Cspan>${",[51,52381,4266],{"class":65},[51,52383,1432],{"class":61},[51,52385,983],{"class":65},[51,52387,1482],{"class":61},[51,52389,52390],{"class":61},"}\u003C\u002Fspan>\n",[51,52392,52393,52396,52398,52400,52402],{"class":53,"line":17022},[51,52394,52395],{"class":61},"                \u003Ch4>第${",[51,52397,983],{"class":65},[51,52399,45938],{"class":69},[51,52401,25500],{"class":278},[51,52403,52404],{"class":61},"}季度\u003C\u002Fh4>\n",[51,52406,52407],{"class":53,"line":17045},[51,52408,52409],{"class":61},"              \u003C\u002Fdiv>          \n",[51,52411,52412,52415],{"class":53,"line":17059},[51,52413,52414],{"class":61},"            `",[51,52416,282],{"class":65},[51,52418,52419],{"class":53,"line":17079},[51,52420,2917],{"class":65},[51,52422,52423],{"class":53,"line":17085},[51,52424,52425],{"class":601},"        \u002F\u002F 盒子结尾\n",[51,52427,52428,52430,52432,52434,52437],{"class":53,"line":17096},[51,52429,52297],{"class":65},[51,52431,52300],{"class":57},[51,52433,546],{"class":65},[51,52435,52436],{"class":61},"` \u003C\u002Fdiv>`",[51,52438,282],{"class":65},[51,52440,52441,52443,52445],{"class":53,"line":17119},[51,52442,52148],{"class":65},[51,52444,52185],{"class":51672},[51,52446,51679],{"class":65},[51,52448,52449,52451,52453],{"class":53,"line":17141},[51,52450,52157],{"class":65},[51,52452,52172],{"class":51672},[51,52454,51679],{"class":65},[51,52456,52457],{"class":53,"line":17146},[51,52458,206],{"emptyLinePlaceholder":205},[51,52460,52461,52463,52465],{"class":53,"line":17152},[51,52462,52157],{"class":65},[51,52464,51007],{"class":51672},[51,52466,51679],{"class":65},[513,52468,52470],{"id":52469},"_284-冒泡排序","2.8.4 冒泡排序",[41,52472,52474],{"className":51005,"code":52473,"language":51007,"meta":46,"style":46},"\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",[48,52475,52476,52486,52500,52504,52512,52527,52547,52559,52567,52571,52579,52587,52619,52652,52689,52694,52713,52718,52731,52746,52762,52766,52771,52775,52785,52794,52802,52806],{"__ignoreMap":46},[51,52477,52478,52480,52482,52484],{"class":53,"line":54},[51,52479,51669],{"class":65},[51,52481,51673],{"class":51672},[51,52483,51676],{"class":57},[51,52485,51679],{"class":65},[51,52487,52488,52490,52492,52494,52496,52498],{"class":53,"line":185},[51,52489,1452],{"class":65},[51,52491,51007],{"class":51672},[51,52493,51688],{"class":57},[51,52495,70],{"class":65},[51,52497,51693],{"class":61},[51,52499,51679],{"class":65},[51,52501,52502],{"class":53,"line":202},[51,52503,206],{"emptyLinePlaceholder":205},[51,52505,52506,52508,52510],{"class":53,"line":209},[51,52507,1452],{"class":65},[51,52509,51706],{"class":51672},[51,52511,51679],{"class":65},[51,52513,52514,52517,52519,52521,52523,52525],{"class":53,"line":223},[51,52515,52516],{"class":65},"  \u003C",[51,52518,51716],{"class":51672},[51,52520,51719],{"class":57},[51,52522,70],{"class":65},[51,52524,51724],{"class":61},[51,52526,51679],{"class":65},[51,52528,52529,52531,52533,52535,52537,52539,52541,52543,52545],{"class":53,"line":237},[51,52530,52516],{"class":65},[51,52532,51716],{"class":51672},[51,52534,15304],{"class":57},[51,52536,70],{"class":65},[51,52538,51763],{"class":61},[51,52540,51743],{"class":57},[51,52542,70],{"class":65},[51,52544,51770],{"class":61},[51,52546,51679],{"class":65},[51,52548,52549,52551,52553,52555,52557],{"class":53,"line":242},[51,52550,52516],{"class":65},[51,52552,51779],{"class":51672},[51,52554,51782],{"class":65},[51,52556,51779],{"class":51672},[51,52558,51679],{"class":65},[51,52560,52561,52563,52565],{"class":53,"line":257},[51,52562,52157],{"class":65},[51,52564,51706],{"class":51672},[51,52566,51679],{"class":65},[51,52568,52569],{"class":53,"line":262},[51,52570,206],{"emptyLinePlaceholder":205},[51,52572,52573,52575,52577],{"class":53,"line":285},[51,52574,1452],{"class":65},[51,52576,52172],{"class":51672},[51,52578,51679],{"class":65},[51,52580,52581,52583,52585],{"class":53,"line":296},[51,52582,52516],{"class":65},[51,52584,52185],{"class":51672},[51,52586,51679],{"class":65},[51,52588,52589,52592,52594,52596,52599,52601,52603,52605,52607,52609,52611,52613,52615,52617],{"class":53,"line":307},[51,52590,52591],{"class":69},"    let",[51,52593,52205],{"class":65},[51,52595,70],{"class":69},[51,52597,52598],{"class":65}," [",[51,52600,861],{"class":278},[51,52602,12819],{"class":65},[51,52604,835],{"class":278},[51,52606,12819],{"class":65},[51,52608,614],{"class":278},[51,52610,12819],{"class":65},[51,52612,620],{"class":278},[51,52614,12819],{"class":65},[51,52616,759],{"class":278},[51,52618,33621],{"class":65},[51,52620,52621,52623,52625,52627,52629,52631,52633,52635,52637,52639,52641,52644,52646,52648,52650],{"class":53,"line":324},[51,52622,3588],{"class":69},[51,52624,2060],{"class":65},[51,52626,52219],{"class":69},[51,52628,9822],{"class":65},[51,52630,70],{"class":69},[51,52632,4479],{"class":278},[51,52634,9829],{"class":65},[51,52636,1452],{"class":69},[51,52638,52337],{"class":65},[51,52640,52340],{"class":278},[51,52642,52643],{"class":69}," -",[51,52645,25500],{"class":278},[51,52647,3601],{"class":65},[51,52649,2682],{"class":69},[51,52651,12826],{"class":65},[51,52653,52654,52657,52659,52661,52663,52665,52667,52669,52671,52673,52675,52677,52679,52681,52683,52685,52687],{"class":53,"line":329},[51,52655,52656],{"class":69},"      for",[51,52658,2060],{"class":65},[51,52660,52219],{"class":69},[51,52662,9884],{"class":65},[51,52664,70],{"class":69},[51,52666,4479],{"class":278},[51,52668,9891],{"class":65},[51,52670,1452],{"class":69},[51,52672,52337],{"class":65},[51,52674,52340],{"class":278},[51,52676,52643],{"class":69},[51,52678,9822],{"class":65},[51,52680,1074],{"class":69},[51,52682,25500],{"class":278},[51,52684,9898],{"class":65},[51,52686,2682],{"class":69},[51,52688,12826],{"class":65},[51,52690,52691],{"class":53,"line":334},[51,52692,52693],{"class":601},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[51,52695,52696,52698,52701,52703,52706,52708,52710],{"class":53,"line":340},[51,52697,369],{"class":69},[51,52699,52700],{"class":65}," (arr[j] ",[51,52702,1502],{"class":69},[51,52704,52705],{"class":65}," arr[j ",[51,52707,1023],{"class":69},[51,52709,25500],{"class":278},[51,52711,52712],{"class":65},"]) {\n",[51,52714,52715],{"class":53,"line":345},[51,52716,52717],{"class":601},"          \u002F\u002F 交换两个变量\n",[51,52719,52720,52723,52726,52728],{"class":53,"line":357},[51,52721,52722],{"class":69},"          let",[51,52724,52725],{"class":65}," tmp ",[51,52727,70],{"class":69},[51,52729,52730],{"class":65}," arr[j]\n",[51,52732,52733,52736,52738,52740,52742,52744],{"class":53,"line":366},[51,52734,52735],{"class":65},"          arr[j] ",[51,52737,70],{"class":69},[51,52739,52705],{"class":65},[51,52741,1023],{"class":69},[51,52743,25500],{"class":278},[51,52745,33621],{"class":65},[51,52747,52748,52751,52753,52755,52757,52759],{"class":53,"line":383},[51,52749,52750],{"class":65},"          arr[j ",[51,52752,1023],{"class":69},[51,52754,25500],{"class":278},[51,52756,194],{"class":65},[51,52758,70],{"class":69},[51,52760,52761],{"class":65}," tmp\n",[51,52763,52764],{"class":53,"line":392},[51,52765,2917],{"class":65},[51,52767,52768],{"class":53,"line":403},[51,52769,52770],{"class":65},"      }\n",[51,52772,52773],{"class":53,"line":409},[51,52774,2577],{"class":65},[51,52776,52777,52780,52782],{"class":53,"line":414},[51,52778,52779],{"class":65},"    document.",[51,52781,52300],{"class":57},[51,52783,52784],{"class":65},"(arr)\n",[51,52786,52787,52790,52792],{"class":53,"line":433},[51,52788,52789],{"class":65},"  \u003C\u002F",[51,52791,52185],{"class":51672},[51,52793,51679],{"class":65},[51,52795,52796,52798,52800],{"class":53,"line":439},[51,52797,52157],{"class":65},[51,52799,52172],{"class":51672},[51,52801,51679],{"class":65},[51,52803,52804],{"class":53,"line":444},[51,52805,206],{"emptyLinePlaceholder":205},[51,52807,52808,52810,52812],{"class":53,"line":453},[51,52809,52157],{"class":65},[51,52811,51007],{"class":51672},[51,52813,51679],{"class":65},[10,52815,52816],{},[460,52817],{"alt":46,"src":52818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[10,52820,52821],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[10,52823,52824],{},"let arr = [4, 2, 5, 1, 3]",[10,52826,52827],{},"\u002F\u002F 1.升序排列写法",[10,52829,52830],{},"arr.sort(function (a, b) {",[10,52832,52833],{},"return a - b",[10,52835,52836],{},"})",[10,52838,52839],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[10,52841,52842],{},"\u002F\u002F 降序排列写法",[10,52844,52830],{},[10,52846,52847],{},"return b - a",[10,52849,52836],{},[10,52851,52852],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[486,52854,52856],{"id":52855},"_29-函数","2.9 函数",[10,52858,52859],{},[460,52860],{"alt":46,"src":52861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[10,52863,52864],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[10,52866,52867],{},"函数的声明用function",[10,52869,52870],{},"函数里边可以嵌套函数",[513,52872,52874],{"id":52873},"_291-函数传参","2.9.1 函数传参",[10,52876,52877],{},[460,52878],{"alt":46,"src":52879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[10,52881,52882],{},[460,52883],{"alt":46,"src":52884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1549,52886,52887,52890,52893,52896,52899,52902],{},[22,52888,52889],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[22,52891,52892],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[22,52894,52895],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[22,52897,52898],{},"开发中尽量保持形参和实参个数一致",[22,52900,52901],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[22,52903,52904],{},"形参只在函数中有用，所以不需要进行声明这个变量",[10,52906,52907],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[513,52909,52911],{"id":52910},"_292-函数的返回值","2.9.2 函数的返回值",[10,52913,52914],{},[460,52915],{"alt":46,"src":52916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[10,52918,52919],{},[460,52920],{"alt":46,"src":52921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1549,52923,52924,52927,52930,52933,52936],{},[22,52925,52926],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[22,52928,52929],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[22,52931,52932],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[22,52934,52935],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[22,52937,52938],{},"断点调试:进入函数内部看执行过程F11",[513,52940,52942],{"id":52941},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[41,52944,52946],{"className":51005,"code":52945,"language":51007,"meta":46,"style":46},"    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",[48,52947,52948,52953,52958,52962,52967],{"__ignoreMap":46},[51,52949,52950],{"class":53,"line":54},[51,52951,52952],{"class":65},"    function fn(a, b) {\n",[51,52954,52955],{"class":53,"line":185},[51,52956,52957],{"class":65},"      console.log(a + b);\n",[51,52959,52960],{"class":53,"line":202},[51,52961,2577],{"class":65},[51,52963,52964],{"class":53,"line":209},[51,52965,52966],{"class":65},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[51,52968,52969],{"class":53,"line":223},[51,52970,52971],{"class":65},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[513,52973,52975],{"id":52974},"_294-作用域","2.9.4 作用域",[1549,52977,52978,52984,52989,52992,52995],{},[22,52979,52980,52981],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[691,52982,52983],{},"作用域",[22,52985,52986],{},[691,52987,52988],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[22,52990,52991],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[22,52993,52994],{},"函数内部可以直接所使用全局变量",[22,52996,52997],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[10,52999,15017],{},[41,53001,53003],{"className":51005,"code":53002,"language":51007,"meta":46,"style":46},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[48,53004,53005,53010,53015,53019,53024,53029,53034],{"__ignoreMap":46},[51,53006,53007],{"class":53,"line":54},[51,53008,53009],{"class":65},"    function fun() {\n",[51,53011,53012],{"class":53,"line":185},[51,53013,53014],{"class":65},"      num = 10\n",[51,53016,53017],{"class":53,"line":202},[51,53018,2577],{"class":65},[51,53020,53021],{"class":53,"line":209},[51,53022,53023],{"class":65},"    fun()\n",[51,53025,53026],{"class":53,"line":223},[51,53027,53028],{"class":65},"    console.log(num)\n",[51,53030,53031],{"class":53,"line":237},[51,53032,53033],{"class":65},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[51,53035,53036],{"class":53,"line":242},[51,53037,53038],{"class":65},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1549,53040,53041,53044],{},[22,53042,53043],{},"函数内部的形参可以看做是局部变量",[22,53045,53046],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[10,53048,53049,53050],{},"变量访问原则： ",[691,53051,53052],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[513,53054,53056],{"id":53055},"_295-匿名函数","2.9.5 匿名函数",[10,53058,53059],{},"函数可以分为具名函数和匿名函数",[10,53061,53062],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[19,53064,53065],{},[22,53066,53067],{},"函数表达式",[10,53069,53070],{},[460,53071],{"alt":46,"src":53072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[10,53074,53075],{},"里边也可以写参数",[10,53077,53078],{},"具名函数调用位置可以随意调整；",[10,53080,53081],{},"匿名函数函数表达式形式只能在声明后才可以使用",[19,53083,53084],{"start":185},[22,53085,53086],{},"立即执行函数",[10,53088,53089],{},[460,53090],{"alt":46,"src":53091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[10,53093,53094],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[10,53096,53097],{},"写法：两个小括号，然后在第一个小括号中写function",[10,53099,53100],{},"(function () {})();",[10,53102,53103],{},"不要落下最后的;",[10,53105,53106],{},"立即执行函数必须要加;",[10,53108,53109],{},"分号写前写后都没问题",[10,53111,53112],{},"写前：",[10,53114,53115],{},"(function() {})()",[10,53117,53118],{},";(function () {})();",[10,53120,53121],{},"写后:",[10,53123,53124],{},"(function() {})();",[10,53126,53100],{},[10,53128,53129],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[10,53131,53132],{},"还有一种写法：",[10,53134,53135],{},"(function(){}());",[10,53137,53138],{},"或者:",[10,53140,53141],{},"!function(){}();",[10,53143,53144],{},"立即执行函数有时候也是可以加名字的：",[10,53146,53147],{},"(function flexible(window,document) {}(window,document));",[10,53149,53150],{},"省一些调用方法",[513,53152,53154],{"id":53153},"_296-逻辑中断","2.9.6 逻辑中断!!!",[10,53156,53157],{},[460,53158],{"alt":46,"src":53159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[10,53161,53162],{},"这样就不用非得给x,y初始化了",[10,53164,53165],{},[460,53166],{"alt":46,"src":53167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[10,53169,53170],{},"代码执行时先看左边",[10,53172,53173],{},"例如：console.log(false && 3+5)",[10,53175,53176],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[10,53178,53179],{},"&&都是真时，就返回最后一个真值",[10,53181,53182],{},"console.log(11 && 22)",[10,53184,53185],{},"输出22",[10,53187,53188],{},"逻辑与：遇真则真",[10,53190,15017],{},[10,53192,53193],{},"let age=1",[10,53195,53196],{},"console.log(11 || age++)",[10,53198,53199],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[10,53201,53202],{},"console.log(11 || 22)",[10,53204,53205],{},"||逻辑或遇到真就直接输出，输出结果为11",[10,53207,53208],{},"||如果都是假的话，就取最后一个假的值了",[513,53210,53212],{"id":53211},"_297-转换为boolean型","2.9.7 转换为Boolean型",[10,53214,53215],{},"显示转换：",[10,53217,53218,53221,53222],{},[691,53219,53220],{},"记忆","： ",[691,53223,53224],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[10,53226,53227],{},"空字符串为假，其他字符串全为真",[10,53229,53230],{},[460,53231],{"alt":46,"src":53232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[10,53234,53235],{},"隐式转换：",[10,53237,53238],{},[460,53239],{"alt":46,"src":53240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[10,53242,53243],{},"隐式转换:",[10,53245,53246],{},"null+3=3",[10,53248,53249],{},"undefined+3=NaN",[10,53251,53252],{},"null==undefined 输出true,他两个都当0看",[10,53254,53255],{},"null===undefined 输出false",[10,53257,53258],{},"undefined做任何操作都是NaN",[10,53260,53261],{},"NaN不等于NaN，NaN表示计算错误",[486,53263,53265],{"id":53264},"_210-对象","2.10 对象",[513,53267,53269],{"id":53268},"_2101-对象的介绍","2.10.1 对象的介绍",[10,53271,53272],{},"对象也是一种数据类型，里边的数据是无序的",[10,53274,53275],{},"对象由属性和方法组成",[10,53277,53278],{},[460,53279],{"alt":46,"src":53280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[10,53282,53283],{},[460,53284],{"alt":46,"src":53285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[10,53287,53288],{},[460,53289],{"alt":46,"src":53290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[513,53292,53294],{"id":53293},"_2102-对象属性","2.10.2 对象属性",[10,53296,53297],{},[460,53298],{"alt":46,"src":53299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[19,53301,53302],{},[22,53303,53304],{},"查询对象",[10,53306,53307],{},"对象名.属性 goods.uname",[10,53309,53310],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[10,53312,53313],{},"不带字符串的属性名也可以使用 对象名['属性名']",[10,53315,53316],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[10,53318,53319],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[19,53321,53322],{"start":185},[22,53323,53324],{},"重新赋值",[10,53326,53327],{},"对象名.属性=新值",[19,53329,53330],{"start":202},[22,53331,53332],{},"增加新数据",[10,53334,53327],{},[19,53336,53337],{"start":209},[22,53338,53339],{},"删除对象中的属性",[10,53341,53342],{},"delete 对象名.属性",[513,53344,53346],{"id":53345},"_2103-对象方法","2.10.3 对象方法",[10,53348,53349],{},[460,53350],{"alt":46,"src":53351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[10,53353,53354],{},"后边跟的是匿名函数",[10,53356,53357],{},"对象外面的叫函数；对象内部的叫方法",[10,53359,53360],{},[460,53361],{"alt":46,"src":53362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[513,53364,53366],{"id":53365},"_2104-遍历对象","2.10.4 遍历对象",[10,53368,53369],{},"理解为加括号的python字典遍历",[10,53371,53372],{},[460,53373],{"alt":46,"src":53374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[10,53376,53377],{},"k是字符串类型",[10,53379,53380],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[41,53382,53384],{"className":51005,"code":53383,"language":51007,"meta":46,"style":46},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[48,53385,53386,53391,53396,53401,53406],{"__ignoreMap":46},[51,53387,53388],{"class":53,"line":54},[51,53389,53390],{"class":65},"   let arr = [1, 2, 3]\n",[51,53392,53393],{"class":53,"line":185},[51,53394,53395],{"class":65},"    for (let k in arr) {\n",[51,53397,53398],{"class":53,"line":202},[51,53399,53400],{"class":65},"      console.log(k)\n",[51,53402,53403],{"class":53,"line":209},[51,53404,53405],{"class":65},"      console.log(arr[k])\n",[51,53407,53408],{"class":53,"line":223},[51,53409,2577],{"class":65},[10,53411,53412],{},[460,53413],{"alt":46,"src":53414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[10,53416,53417],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[10,53419,53420],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[10,53422,53423],{},"for in 得到的k是属性名",[52185,53425,53426],{},"\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",[10,53428,53429],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[513,53431,53433],{"id":53432},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[10,53435,53436],{},"数组中放对象信息",[41,53438,53442],{"className":53439,"code":53440,"language":53441,"meta":46,"style":46},"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",[48,53443,53444,53452,53457,53462,53467,53472,53477,53482,53487,53492,53497,53502,53507,53511,53515],{"__ignoreMap":46},[51,53445,53446,53448,53450],{"class":53,"line":54},[51,53447,1452],{"class":65},[51,53449,52185],{"class":51672},[51,53451,51679],{"class":65},[51,53453,53454],{"class":53,"line":185},[51,53455,53456],{"class":65},"    let students = [\n",[51,53458,53459],{"class":53,"line":202},[51,53460,53461],{"class":65},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[51,53463,53464],{"class":53,"line":209},[51,53465,53466],{"class":65},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[51,53468,53469],{"class":53,"line":223},[51,53470,53471],{"class":65},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[51,53473,53474],{"class":53,"line":237},[51,53475,53476],{"class":65},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[51,53478,53479],{"class":53,"line":242},[51,53480,53481],{"class":65},"    ]\n",[51,53483,53484],{"class":53,"line":257},[51,53485,53486],{"class":65},"    for (let i = 0; i \u003C students.length; i++) {\n",[51,53488,53489],{"class":53,"line":262},[51,53490,53491],{"class":65},"      for (let k in students[i]) {\n",[51,53493,53494],{"class":53,"line":285},[51,53495,53496],{"class":65},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[51,53498,53499],{"class":53,"line":296},[51,53500,53501],{"class":65},"        \u002F\u002F输出每个人的名字：\n",[51,53503,53504],{"class":53,"line":307},[51,53505,53506],{"class":65},"        \u002F\u002Fconsole.log(students[i].name)\n",[51,53508,53509],{"class":53,"line":324},[51,53510,52770],{"class":65},[51,53512,53513],{"class":53,"line":329},[51,53514,2577],{"class":65},[51,53516,53517,53519,53521],{"class":53,"line":334},[51,53518,52789],{"class":65},[51,53520,52185],{"class":51672},[51,53522,51679],{"class":65},[513,53524,53526],{"id":53525},"_2106-内置对象","2.10.6 内置对象",[10,53528,53529],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[19,53531,53532],{},[22,53533,53534],{},"数学对象Math",[10,53536,53537],{},[460,53538],{"alt":46,"src":53539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[10,53541,53542],{},[780,53543,53546],{"href":53544,"rel":53545},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24246],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[10,53548,53549],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[10,53551,53552],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[10,53554,53555],{},"数组不可以使用Math中的max,min来求最大值与最小值",[10,53557,53558],{},"null是一个空对象，可以认为：null类似于let obj={}",[10,53560,53561],{},"null属于对象数据类型",[19,53563,53564],{"start":185},[22,53565,53566],{},"生成任意范围随机数",[10,53568,53569],{},[460,53570],{"alt":46,"src":53571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[10,53573,53574],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[10,53576,53577],{},"乘以几就取不到几",[10,53579,53580],{},"取数组中的随机元素：",[10,53582,53583],{},"let arr = ['red', 'green', 'blue']",[10,53585,53586],{},"let random = Math.floor(Math.random() * arr.length)",[10,53588,53589],{},"console.log(arr[random])",[10,53591,53592],{},"这个函数得到的是全闭区间",[10,53594,53595],{},"function getRandom(N, M) {",[10,53597,53598],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[10,53600,1488],{},[10,53602,53603],{},"console.log(getRandom(4, 8))",[513,53605,53607],{"id":53606},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[10,53609,53610],{},[460,53611],{"alt":46,"src":53612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[10,53614,53615],{},[460,53616],{"alt":46,"src":53617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[10,53619,53620],{},[460,53621],{"alt":46,"src":53622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[10,53624,53625],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[10,53627,53628],{},[460,53629],{"alt":46,"src":53630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[10,53632,53633],{},[460,53634],{"alt":46,"src":53635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[10,53637,53638],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[10,53640,53641],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[10,53643,53644],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[464,53646,53647],{},"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":46,"searchDepth":185,"depth":185,"links":53649},[53650,53658,53659,53660,53661,53662,53669,53673,53679,53688],{"id":50840,"depth":185,"text":50841,"children":53651},[53652,53653,53654,53655,53656,53657],{"id":50844,"depth":202,"text":50845},{"id":50861,"depth":202,"text":50862},{"id":50901,"depth":202,"text":50902},{"id":50913,"depth":202,"text":50914},{"id":50922,"depth":202,"text":50923},{"id":50970,"depth":202,"text":50971},{"id":50980,"depth":185,"text":50981},{"id":51068,"depth":185,"text":51069},{"id":51091,"depth":185,"text":51092},{"id":51103,"depth":185,"text":51104},{"id":51290,"depth":185,"text":51291,"children":53663},[53664,53665,53666,53667,53668],{"id":51294,"depth":202,"text":51295},{"id":51303,"depth":202,"text":51304},{"id":51331,"depth":202,"text":51332},{"id":51367,"depth":202,"text":51368},{"id":51392,"depth":202,"text":51393},{"id":51404,"depth":185,"text":51405,"children":53670},[53671,53672],{"id":51425,"depth":202,"text":51426},{"id":51519,"depth":202,"text":51520},{"id":51577,"depth":185,"text":51578,"children":53674},[53675,53676,53677,53678],{"id":51581,"depth":202,"text":51582},{"id":51605,"depth":202,"text":51606},{"id":51658,"depth":202,"text":51659},{"id":52469,"depth":202,"text":52470},{"id":52855,"depth":185,"text":52856,"children":53680},[53681,53682,53683,53684,53685,53686,53687],{"id":52873,"depth":202,"text":52874},{"id":52910,"depth":202,"text":52911},{"id":52941,"depth":202,"text":52942},{"id":52974,"depth":202,"text":52975},{"id":53055,"depth":202,"text":53056},{"id":53153,"depth":202,"text":53154},{"id":53211,"depth":202,"text":53212},{"id":53264,"depth":185,"text":53265,"children":53689},[53690,53691,53692,53693,53694,53695,53696],{"id":53268,"depth":202,"text":53269},{"id":53293,"depth":202,"text":53294},{"id":53345,"depth":202,"text":53346},{"id":53365,"depth":202,"text":53366},{"id":53432,"depth":202,"text":53433},{"id":53525,"depth":202,"text":53526},{"id":53606,"depth":202,"text":53607},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50832,"description":23760},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53703,"title":53704,"body":53705,"description":23760,"extension":469,"meta":77045,"navigation":205,"path":77046,"seo":77047,"stem":77048,"__hash__":77049},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53706,"toc":76985},[53707,53710,53713,53716,53721,53724,53727,53730,53734,53738,53744,53749,53757,53764,53767,53771,53776,53781,53786,53789,53792,53803,53806,53810,53813,53816,53821,53826,53831,53834,53837,53929,53932,53937,53940,53945,53948,53951,53956,53959,53964,53968,53971,53985,53989,53994,53997,54000,54004,54009,54012,54016,54020,54025,54029,54034,54037,54040,54043,54046,54049,54052,54057,54062,54090,54093,54096,54099,54104,54107,54110,54113,54116,54120,54149,54153,54158,54163,54166,54169,54172,54177,54292,54297,54302,54463,54468,54471,54475,54480,54485,54488,54491,54494,54497,54500,54503,54506,54509,54512,54515,54518,54521,54524,54527,54529,54532,54535,54538,54543,54547,54944,54947,54953,54957,54962,56244,56249,56252,56255,56258,56263,57459,57463,57469,57474,57477,57482,57487,57491,57495,57500,57503,57508,57511,57514,57518,58426,58429,58433,58654,58657,58660,58663,58889,58892,59116,59119,59123,59128,59131,59134,59362,59365,59398,59401,59405,59410,59414,59417,59420,59423,59426,59429,59432,59435,59440,60720,60724,60727,61820,61824,61827,61830,61833,61836,61840,61843,61846,61848,61856,63337,63341,63344,63347,63350,63559,63562,63566,63570,63575,63580,63583,63586,63591,63595,63600,63603,63712,63716,63721,63726,63729,63732,63736,63741,63746,63751,63754,63757,63768,63771,63776,63781,63784,63787,63860,63864,63869,63872,63874,63885,63889,63894,65220,65223,65226,65229,65231,65234,65237,65240,65243,65246,65249,65252,65255,65258,65261,65264,65267,65269,65271,65274,65278,66372,66375,66378,66394,66408,66411,66416,66422,66427,66431,66435,66440,66444,66449,66891,66896,66899,66903,66908,66911,66914,66918,66923,66927,66932,66937,66941,66946,66951,66954,66959,66964,66968,66973,66978,67082,67085,67089,67094,67460,67463,67466,67469,67472,67475,67478,67481,67484,68780,68784,68789,68794,68797,68800,68803,68806,68808,68813,68818,68821,68825,68830,68835,68840,68843,68846,68849,68852,68855,68860,68863,68867,68872,68877,68881,68886,68889,68894,68897,68900,68903,68906,68909,68914,68917,68920,68923,68926,68930,68935,68938,68942,68947,68950,68953,68957,68986,68989,68993,68997,69002,69006,69011,69014,69017,69020,69023,69026,69029,69032,69035,69038,69041,69044,69047,69050,69053,69057,69062,69067,69070,69074,69078,69083,69086,69090,69093,69096,69101,69106,69111,69116,69121,69124,69127,69132,69137,69141,69146,69149,69154,69157,69160,69163,69166,69171,69174,69183,69187,69192,69195,69198,69202,69205,69210,69214,69217,69223,69229,69233,69259,69262,70823,70826,71322,71325,71330,71335,71340,71344,71349,71354,71359,71363,71368,71371,71374,71377,71380,71384,71387,71392,71395,71400,71404,71409,71412,71417,71422,71427,71430,71433,71438,71443,71446,71449,71453,71456,71461,71464,71469,71472,71477,71482,71487,71490,71495,71560,71563,71574,71578,71583,71755,71759,71764,71767,71770,71773,71777,71788,71792,71795,71800,71805,71808,71811,71814,71817,71820,71822,71825,71828,71831,71836,71839,71844,71847,71851,71854,71857,71871,71875,71878,71933,71938,71941,71944,71949,71952,71956,71961,72091,72095,72100,72105,72186,72191,72195,72198,72203,72208,72214,72217,72220,72223,72227,72232,72235,72246,72250,72267,75314,75318,75321,75324,75327,75348,75352,75355,75363,75366,75371,75374,75377,75382,75387,75391,75412,75416,75421,75424,75427,75430,75433,75437,75442,75445,75449,75454,75457,75462,75465,75470,75473,75478,76681,76685,76690,76693,76698,76982],[14,53708,53704],{"id":53709},"_3web-apis",[10,53711,53712],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[10,53714,53715],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[10,53717,53718],{},[460,53719],{"alt":46,"src":53720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[10,53722,53723],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[10,53725,53726],{},"建议数组和对象使用 const 来声明",[10,53728,53729],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[486,53731,53733],{"id":53732},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[513,53735,53737],{"id":53736},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[10,53739,53740,53743],{},[48,53741,53742],{},"document"," = HTML 文件解析后的对象化表示；",[10,53745,53746,53748],{},[48,53747,53742],{}," ≠ HTML 文件本身",[10,53750,53751,53756],{},[691,53752,53753],{},[48,53754,53755],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[10,53758,53759,53763],{},[691,53760,53761],{},[48,53762,53742],{}," ：容器里的内容，代表当前加载的网页（DOM）",[10,53765,53766],{},"document实际上为window.document的简写",[513,53768,53770],{"id":53769},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[10,53772,53773],{},[460,53774],{"alt":46,"src":53775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[10,53777,53778],{},[460,53779],{"alt":46,"src":53780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[10,53782,53783],{},[460,53784],{"alt":46,"src":53785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[10,53787,53788],{},"console.dir()",[10,53790,53791],{},"dir用来打印对象",[1549,53793,53794,53797,53800],{},[22,53795,53796],{},"任何一个标签，都是一个对象",[22,53798,53799],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[22,53801,53802],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[10,53804,53805],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[513,53807,53809],{"id":53808},"_312-获取dom对象","3.1.2 获取DoM对象",[10,53811,53812],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[10,53814,53815],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[10,53817,53818],{},[691,53819,53820],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[19,53822,53823],{},[22,53824,53825],{},"利用CSS选择器来获取标签元素",[10,53827,53828],{},[460,53829],{"alt":46,"src":53830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[10,53832,53833],{},"里边的选择器必须必须加引号！！！",[10,53835,53836],{},"只选择第一个元素",[41,53838,53840],{"className":53439,"code":53839,"language":53441,"meta":46,"style":46},"\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",[48,53841,53842,53850,53871,53890,53898,53903,53908,53913,53921],{"__ignoreMap":46},[51,53843,53844,53846,53848],{"class":53,"line":54},[51,53845,1452],{"class":65},[51,53847,52172],{"class":51672},[51,53849,51679],{"class":65},[51,53851,53852,53854,53856,53859,53861,53864,53867,53869],{"class":53,"line":185},[51,53853,52516],{"class":65},[51,53855,51983],{"class":51672},[51,53857,53858],{"class":57}," class",[51,53860,70],{"class":65},[51,53862,53863],{"class":61},"\"box\"",[51,53865,53866],{"class":65},">123\u003C\u002F",[51,53868,51983],{"class":51672},[51,53870,51679],{"class":65},[51,53872,53873,53875,53877,53879,53881,53883,53886,53888],{"class":53,"line":202},[51,53874,52516],{"class":65},[51,53876,51983],{"class":51672},[51,53878,53858],{"class":57},[51,53880,70],{"class":65},[51,53882,53863],{"class":61},[51,53884,53885],{"class":65},">456\u003C\u002F",[51,53887,51983],{"class":51672},[51,53889,51679],{"class":65},[51,53891,53892,53894,53896],{"class":53,"line":209},[51,53893,52516],{"class":65},[51,53895,52185],{"class":51672},[51,53897,51679],{"class":65},[51,53899,53900],{"class":53,"line":223},[51,53901,53902],{"class":65},"    \u002F\u002F 1.获取匹配的第一个元素\n",[51,53904,53905],{"class":53,"line":237},[51,53906,53907],{"class":65},"    const box = document.querySelector('div')\n",[51,53909,53910],{"class":53,"line":242},[51,53911,53912],{"class":65},"    console.dir(box)\n",[51,53914,53915,53917,53919],{"class":53,"line":257},[51,53916,52789],{"class":65},[51,53918,52185],{"class":51672},[51,53920,51679],{"class":65},[51,53922,53923,53925,53927],{"class":53,"line":262},[51,53924,52157],{"class":65},[51,53926,52172],{"class":51672},[51,53928,51679],{"class":65},[10,53930,53931],{},"只选123，不选456",[10,53933,53934],{},[460,53935],{"alt":46,"src":53936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[10,53938,53939],{},"返回的是一个数组的集合，不能对其进行直接修改",[10,53941,53942],{},[460,53943],{"alt":46,"src":53944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[10,53946,53947],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[10,53949,53950],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[19,53952,53953],{"start":185},[22,53954,53955],{},"其他方法来获取标签元素",[10,53957,53958],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[10,53960,53961],{},[460,53962],{"alt":46,"src":53963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[513,53965,53967],{"id":53966},"_313-操作元素的内容","3.1.3 操作元素的内容",[10,53969,53970],{},"设置修改DOM元素内容有两种方式：",[1549,53972,53973,53976,53979,53982],{},[22,53974,53975],{},"元素.innerText=''",[22,53977,53978],{},"元素.innerHTML=''",[22,53980,53981],{},"不写字符串输出数字也是可以的",[22,53983,53984],{},"元素.innerHtml=1",[22381,53986,53988],{"id":53987},"_3131-innertext","3.1.3.1 innerText",[10,53990,53991],{},[460,53992],{"alt":46,"src":53993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[10,53995,53996],{},"思路：实现了修改盒子中的内容！",[10,53998,53999],{},"它只显示纯文本，不解析标签",[22381,54001,54003],{"id":54002},"_3132-innerhtml","3.1.3.2 innerHTML",[10,54005,54006],{},[460,54007],{"alt":46,"src":54008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[10,54010,54011],{},"相比于innerText，他的强大之处在于可以解析标签",[513,54013,54015],{"id":54014},"_314-操作元素属性","3.1.4 操作元素属性",[22381,54017,54019],{"id":54018},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[10,54021,54022],{},[460,54023],{"alt":46,"src":54024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22381,54026,54028],{"id":54027},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[10,54030,54031],{},[460,54032],{"alt":46,"src":54033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[10,54035,54036],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[10,54038,54039],{},"div.style.backgroundColor = 'hotpink'",[10,54041,54042],{},"如果按照css的写法，-表示减，就会出错",[10,54044,54045],{},"body元素不需要再获取，直接用就行！！！！！！",[10,54047,54048],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[10,54050,54051],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[10,54053,54054],{},[460,54055],{"alt":46,"src":54056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[10,54058,54059],{},[460,54060],{"alt":46,"src":54061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[19,54063,54064,54067,54070,54073,54076,54079],{},[22,54065,54066],{},"className这个方式就是修改很多样式的时候来使用的！",[22,54068,54069],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[22,54071,54072],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[22,54074,54075],{},"className为属性名，如果还用class的话就导致与关键字冲突",[22,54077,54078],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[22,54080,54081,54082,54087],{},"解析标签的时候就变为了",[51983,54083],{"className":54084},[54085,54086],"nav","box",[54088,54089],"br",{},[10,54091,54092],{},"例子：",[51983,54094],{"className":54095},[54085],[52185,54097,54098],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[10,54100,54101],{},[460,54102],{"alt":46,"src":54103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[10,54105,54106],{},"追加和删除类名用classList",[10,54108,54109],{},"常用于类似于开关的操作",[10,54111,54112],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[10,54114,54115],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22381,54117,54119],{"id":54118},"_3143-牢记点","3.1.4.3 牢记点",[19,54121,54122,54125,54128,54131,54134,54137,54140,54143,54146],{},[22,54123,54124],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[22,54126,54127],{},"使用style属性操作css时不要忘记引号",[22,54129,54130],{},"使用className或者classList时也不要忘记引号",[22,54132,54133],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[22,54135,54136],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[22,54138,54139],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[22,54141,54142],{},"若： let arr=['1','2',3] arr[0]=1",[22,54144,54145],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[22,54147,54148],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[513,54150,54152],{"id":54151},"_315-操作表单元素","3.1.5 操作表单元素",[19,54154,54155],{},[22,54156,54157],{},"天生的属性",[10,54159,54160],{},[460,54161],{"alt":46,"src":54162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[10,54164,54165],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[10,54167,54168],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[10,54170,54171],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[10,54173,54174],{},[460,54175],{"alt":46,"src":54176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[41,54178,54180],{"className":51005,"code":54179,"language":51007,"meta":46,"style":46},"在复选框中如果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",[48,54181,54182,54187,54219,54224,54229,54234,54239,54243,54248,54253,54270,54282,54287],{"__ignoreMap":46},[51,54183,54184],{"class":53,"line":54},[51,54185,54186],{"class":65},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[51,54188,54189,54191,54194,54197,54199,54202,54204,54206,54208,54210,54212,54214,54217],{"class":53,"line":185},[51,54190,1452],{"class":65},[51,54192,54193],{"class":51672},"input",[51,54195,54196],{"class":57}," type",[51,54198,70],{"class":65},[51,54200,54201],{"class":61},"\"checkbox\"",[51,54203,15304],{"class":57},[51,54205,70],{"class":65},[51,54207,8036],{"class":61},[51,54209,15343],{"class":57},[51,54211,70],{"class":65},[51,54213,8036],{"class":61},[51,54215,54216],{"class":57}," checked",[51,54218,51679],{"class":65},[51,54220,54221],{"class":53,"line":202},[51,54222,54223],{"class":65},"不选的话：\n",[51,54225,54226],{"class":53,"line":209},[51,54227,54228],{"class":65},"const input = document.querySelector('input')\n",[51,54230,54231],{"class":53,"line":223},[51,54232,54233],{"class":65},"input.checked=false\n",[51,54235,54236],{"class":53,"line":237},[51,54237,54238],{"class":65},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[51,54240,54241],{"class":53,"line":242},[51,54242,206],{"emptyLinePlaceholder":205},[51,54244,54245],{"class":53,"line":257},[51,54246,54247],{"class":65},"禁用按钮：\n",[51,54249,54250],{"class":53,"line":262},[51,54251,54252],{"class":65},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[51,54254,54255,54257,54260,54263,54266,54268],{"class":53,"line":285},[51,54256,1452],{"class":65},[51,54258,54259],{"class":51672},"button",[51,54261,54262],{"class":57}," disabled",[51,54264,54265],{"class":65},">点击\u003C\u002F",[51,54267,54259],{"class":51672},[51,54269,51679],{"class":65},[51,54271,54272,54274,54276,54278,54280],{"class":53,"line":296},[51,54273,1452],{"class":65},[51,54275,54259],{"class":51672},[51,54277,54265],{"class":65},[51,54279,54259],{"class":51672},[51,54281,51679],{"class":65},[51,54283,54284],{"class":53,"line":307},[51,54285,54286],{"class":65},"const bt = document.querySelector('button')\n",[51,54288,54289],{"class":53,"line":324},[51,54290,54291],{"class":65},"bt.disabled = false\n",[19,54293,54294],{"start":185},[22,54295,54296],{},"自定义属性",[10,54298,54299],{},[460,54300],{"alt":46,"src":54301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[41,54303,54305],{"className":53439,"code":54304,"language":53441,"meta":46,"style":46},"\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",[48,54306,54307,54315,54343,54362,54381,54400,54419,54427,54432,54437,54442,54447,54455],{"__ignoreMap":46},[51,54308,54309,54311,54313],{"class":53,"line":54},[51,54310,1452],{"class":65},[51,54312,52172],{"class":51672},[51,54314,51679],{"class":65},[51,54316,54317,54319,54321,54324,54326,54328,54331,54333,54336,54339,54341],{"class":53,"line":185},[51,54318,52516],{"class":65},[51,54320,51983],{"class":51672},[51,54322,54323],{"class":57}," data-id",[51,54325,70],{"class":65},[51,54327,4065],{"class":61},[51,54329,54330],{"class":57}," data-spm",[51,54332,70],{"class":65},[51,54334,54335],{"class":61},"\"我不知道\"",[51,54337,54338],{"class":65},">1\u003C\u002F",[51,54340,51983],{"class":51672},[51,54342,51679],{"class":65},[51,54344,54345,54347,54349,54351,54353,54355,54358,54360],{"class":53,"line":202},[51,54346,52516],{"class":65},[51,54348,51983],{"class":51672},[51,54350,54323],{"class":57},[51,54352,70],{"class":65},[51,54354,4088],{"class":61},[51,54356,54357],{"class":65},">2\u003C\u002F",[51,54359,51983],{"class":51672},[51,54361,51679],{"class":65},[51,54363,54364,54366,54368,54370,54372,54374,54377,54379],{"class":53,"line":209},[51,54365,52516],{"class":65},[51,54367,51983],{"class":51672},[51,54369,54323],{"class":57},[51,54371,70],{"class":65},[51,54373,4101],{"class":61},[51,54375,54376],{"class":65},">3\u003C\u002F",[51,54378,51983],{"class":51672},[51,54380,51679],{"class":65},[51,54382,54383,54385,54387,54389,54391,54393,54396,54398],{"class":53,"line":223},[51,54384,52516],{"class":65},[51,54386,51983],{"class":51672},[51,54388,54323],{"class":57},[51,54390,70],{"class":65},[51,54392,4114],{"class":61},[51,54394,54395],{"class":65},">4\u003C\u002F",[51,54397,51983],{"class":51672},[51,54399,51679],{"class":65},[51,54401,54402,54404,54406,54408,54410,54412,54415,54417],{"class":53,"line":237},[51,54403,52516],{"class":65},[51,54405,51983],{"class":51672},[51,54407,54323],{"class":57},[51,54409,70],{"class":65},[51,54411,4134],{"class":61},[51,54413,54414],{"class":65},">5\u003C\u002F",[51,54416,51983],{"class":51672},[51,54418,51679],{"class":65},[51,54420,54421,54423,54425],{"class":53,"line":242},[51,54422,52516],{"class":65},[51,54424,52185],{"class":51672},[51,54426,51679],{"class":65},[51,54428,54429],{"class":53,"line":257},[51,54430,54431],{"class":65},"    const one = document.querySelector('div')\n",[51,54433,54434],{"class":53,"line":262},[51,54435,54436],{"class":65},"    console.log(one.dataset)\n",[51,54438,54439],{"class":53,"line":285},[51,54440,54441],{"class":65},"    console.log(one.dataset.id)\n",[51,54443,54444],{"class":53,"line":296},[51,54445,54446],{"class":65},"    console.log(one.dataset.spm)\n",[51,54448,54449,54451,54453],{"class":53,"line":307},[51,54450,52789],{"class":65},[51,54452,52185],{"class":51672},[51,54454,51679],{"class":65},[51,54456,54457,54459,54461],{"class":53,"line":324},[51,54458,52157],{"class":65},[51,54460,52172],{"class":51672},[51,54462,51679],{"class":65},[10,54464,54465],{},[460,54466],{"alt":46,"src":54467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[10,54469,54470],{},"document.querySelector选择的是第一个对象（元素）",[513,54472,54474],{"id":54473},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[10,54476,54477],{},[460,54478],{"alt":46,"src":54479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[10,54481,54482],{},[460,54483],{"alt":46,"src":54484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[10,54486,54487],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52185,54489,54490],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[10,54492,54493],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52185,54495,54496],{},"\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",[10,54498,54499],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[10,54501,54502],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[10,54504,54505],{},"单位为毫秒！！！",[10,54507,54508],{},"可以搭配匿名函数来用！！！",[10,54510,54511],{},"setInterval(function () {",[10,54513,54514],{},"alert('两秒执行一次')",[10,54516,54517],{},"}, 2000)",[10,54519,54520],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[10,54522,54523],{},"function fn() {",[10,54525,54526],{},"document.write(1)",[10,54528,1488],{},[10,54530,54531],{},"setInterval(fn, 1000)",[10,54533,54534],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[10,54536,54537],{},"setInterval('fn()', 1000)",[10,54539,54540],{},[460,54541],{"alt":46,"src":54542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22381,54544,54546],{"id":54545},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[41,54548,54550],{"className":51005,"code":54549,"language":51007,"meta":46,"style":46},"\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",[48,54551,54552,54562,54576,54580,54588,54602,54622,54634,54642,54646,54654,54691,54696,54701,54706,54714,54722,54744,54752,54757,54779,54784,54789,54800,54805,54825,54833,54848,54863,54874,54879,54889,54899,54903,54912,54916,54924,54932,54936],{"__ignoreMap":46},[51,54553,54554,54556,54558,54560],{"class":53,"line":54},[51,54555,51669],{"class":65},[51,54557,51673],{"class":51672},[51,54559,51676],{"class":57},[51,54561,51679],{"class":65},[51,54563,54564,54566,54568,54570,54572,54574],{"class":53,"line":185},[51,54565,1452],{"class":65},[51,54567,51007],{"class":51672},[51,54569,51688],{"class":57},[51,54571,70],{"class":65},[51,54573,51693],{"class":61},[51,54575,51679],{"class":65},[51,54577,54578],{"class":53,"line":202},[51,54579,206],{"emptyLinePlaceholder":205},[51,54581,54582,54584,54586],{"class":53,"line":209},[51,54583,1452],{"class":65},[51,54585,51706],{"class":51672},[51,54587,51679],{"class":65},[51,54589,54590,54592,54594,54596,54598,54600],{"class":53,"line":223},[51,54591,52516],{"class":65},[51,54593,51716],{"class":51672},[51,54595,51719],{"class":57},[51,54597,70],{"class":65},[51,54599,51724],{"class":61},[51,54601,51679],{"class":65},[51,54603,54604,54606,54608,54610,54612,54614,54616,54618,54620],{"class":53,"line":237},[51,54605,52516],{"class":65},[51,54607,51716],{"class":51672},[51,54609,15304],{"class":57},[51,54611,70],{"class":65},[51,54613,51763],{"class":61},[51,54615,51743],{"class":57},[51,54617,70],{"class":65},[51,54619,51770],{"class":61},[51,54621,51679],{"class":65},[51,54623,54624,54626,54628,54630,54632],{"class":53,"line":242},[51,54625,52516],{"class":65},[51,54627,51779],{"class":51672},[51,54629,51782],{"class":65},[51,54631,51779],{"class":51672},[51,54633,51679],{"class":65},[51,54635,54636,54638,54640],{"class":53,"line":257},[51,54637,52157],{"class":65},[51,54639,51706],{"class":51672},[51,54641,51679],{"class":65},[51,54643,54644],{"class":53,"line":262},[51,54645,206],{"emptyLinePlaceholder":205},[51,54647,54648,54650,54652],{"class":53,"line":285},[51,54649,1452],{"class":65},[51,54651,52172],{"class":51672},[51,54653,51679],{"class":65},[51,54655,54656,54658,54661,54663,54665,54667,54669,54671,54673,54676,54678,54681,54684,54686,54689],{"class":53,"line":296},[51,54657,52516],{"class":65},[51,54659,54660],{"class":51672},"textarea",[51,54662,15304],{"class":57},[51,54664,70],{"class":65},[51,54666,8036],{"class":61},[51,54668,15343],{"class":57},[51,54670,70],{"class":65},[51,54672,8036],{"class":61},[51,54674,54675],{"class":57}," cols",[51,54677,70],{"class":65},[51,54679,54680],{"class":61},"\"30\"",[51,54682,54683],{"class":57}," rows",[51,54685,70],{"class":65},[51,54687,54688],{"class":61},"\"10\"",[51,54690,51679],{"class":65},[51,54692,54693],{"class":53,"line":307},[51,54694,54695],{"class":65},"        用户注册协议\n",[51,54697,54698],{"class":53,"line":324},[51,54699,54700],{"class":65},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[51,54702,54703],{"class":53,"line":329},[51,54704,54705],{"class":65},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[51,54707,54708,54710,54712],{"class":53,"line":334},[51,54709,52148],{"class":65},[51,54711,54660],{"class":51672},[51,54713,51679],{"class":65},[51,54715,54716,54718,54720],{"class":53,"line":340},[51,54717,52516],{"class":65},[51,54719,54088],{"class":51672},[51,54721,51679],{"class":65},[51,54723,54724,54726,54728,54730,54732,54735,54737,54740,54742],{"class":53,"line":345},[51,54725,52516],{"class":65},[51,54727,54259],{"class":51672},[51,54729,53858],{"class":57},[51,54731,70],{"class":65},[51,54733,54734],{"class":61},"\"btn\"",[51,54736,54262],{"class":57},[51,54738,54739],{"class":65},">我已经阅读用户协议(5)\u003C\u002F",[51,54741,54259],{"class":51672},[51,54743,51679],{"class":65},[51,54745,54746,54748,54750],{"class":53,"line":357},[51,54747,52516],{"class":65},[51,54749,52185],{"class":51672},[51,54751,51679],{"class":65},[51,54753,54754],{"class":53,"line":366},[51,54755,54756],{"class":601},"    \u002F\u002F 1. 获取元素\n",[51,54758,54759,54761,54764,54766,54769,54772,54774,54777],{"class":53,"line":383},[51,54760,11605],{"class":69},[51,54762,54763],{"class":278}," btn",[51,54765,13948],{"class":69},[51,54767,54768],{"class":65}," document.",[51,54770,54771],{"class":57},"querySelector",[51,54773,546],{"class":65},[51,54775,54776],{"class":61},"'.btn'",[51,54778,282],{"class":65},[51,54780,54781],{"class":53,"line":392},[51,54782,54783],{"class":601},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[51,54785,54786],{"class":53,"line":403},[51,54787,54788],{"class":601},"    \u002F\u002F 2. 倒计时\n",[51,54790,54791,54793,54795,54797],{"class":53,"line":409},[51,54792,52591],{"class":69},[51,54794,9822],{"class":65},[51,54796,70],{"class":69},[51,54798,54799],{"class":278}," 5\n",[51,54801,54802],{"class":53,"line":414},[51,54803,54804],{"class":601},"    \u002F\u002F 2.1 开启定时器\n",[51,54806,54807,54809,54812,54814,54817,54819,54822],{"class":53,"line":433},[51,54808,52591],{"class":69},[51,54810,54811],{"class":65}," n ",[51,54813,70],{"class":69},[51,54815,54816],{"class":57}," setInterval",[51,54818,546],{"class":65},[51,54820,54821],{"class":69},"function",[51,54823,54824],{"class":65}," () {\n",[51,54826,54827,54830],{"class":53,"line":439},[51,54828,54829],{"class":65},"      i",[51,54831,54832],{"class":69},"--\n",[51,54834,54835,54838,54840,54843,54845],{"class":53,"line":444},[51,54836,54837],{"class":65},"      btn.innerHTML ",[51,54839,70],{"class":69},[51,54841,54842],{"class":61}," `我已经阅读用户协议(${",[51,54844,983],{"class":65},[51,54846,54847],{"class":61},"})`\n",[51,54849,54850,54853,54856,54859,54861],{"class":53,"line":453},[51,54851,54852],{"class":69},"      if",[51,54854,54855],{"class":65}," (i ",[51,54857,54858],{"class":69},"===",[51,54860,4479],{"class":278},[51,54862,12826],{"class":65},[51,54864,54865,54868,54871],{"class":53,"line":2174},[51,54866,54867],{"class":57},"        clearInterval",[51,54869,54870],{"class":65},"(n)  ",[51,54872,54873],{"class":601},"\u002F\u002F 关闭定时器\n",[51,54875,54876],{"class":53,"line":2965},[51,54877,54878],{"class":601},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[51,54880,54881,54884,54886],{"class":53,"line":2979},[51,54882,54883],{"class":65},"        btn.disabled ",[51,54885,70],{"class":69},[51,54887,54888],{"class":278}," false\n",[51,54890,54891,54894,54896],{"class":53,"line":2987},[51,54892,54893],{"class":65},"        btn.innerHTML ",[51,54895,70],{"class":69},[51,54897,54898],{"class":61}," '同意'\n",[51,54900,54901],{"class":53,"line":2992},[51,54902,52770],{"class":65},[51,54904,54905,54908,54910],{"class":53,"line":2998},[51,54906,54907],{"class":65},"    }, ",[51,54909,6794],{"class":278},[51,54911,282],{"class":65},[51,54913,54914],{"class":53,"line":3004},[51,54915,206],{"emptyLinePlaceholder":205},[51,54917,54918,54920,54922],{"class":53,"line":3009},[51,54919,52789],{"class":65},[51,54921,52185],{"class":51672},[51,54923,51679],{"class":65},[51,54925,54926,54928,54930],{"class":53,"line":8332},[51,54927,52157],{"class":65},[51,54929,52172],{"class":51672},[51,54931,51679],{"class":65},[51,54933,54934],{"class":53,"line":8356},[51,54935,206],{"emptyLinePlaceholder":205},[51,54937,54938,54940,54942],{"class":53,"line":8361},[51,54939,52157],{"class":65},[51,54941,51007],{"class":51672},[51,54943,51679],{"class":65},[10,54945,54946],{},"不要一直想着用死循环,避免死循环",[10,54948,54949,54952],{},[48,54950,54951],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22381,54954,54956],{"id":54955},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[19,54958,54959],{},[22,54960,54961],{},"法1",[41,54963,54965],{"className":51005,"code":54964,"language":51007,"meta":46,"style":46},"\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",[48,54966,54967,54977,54991,54995,55003,55017,55037,55049,55057,55063,55074,55085,55089,55093,55100,55112,55116,55120,55127,55139,55153,55166,55180,55184,55188,55195,55206,55217,55228,55240,55252,55264,55268,55272,55280,55290,55303,55315,55328,55332,55336,55343,55353,55365,55377,55388,55399,55409,55421,55433,55437,55441,55450,55462,55474,55502,55515,55519,55523,55530,55541,55545,55553,55561,55565,55573,55587,55602,55626,55634,55649,55662,55670,55691,55703,55715,55727,55739,55751,55763,55775,55784,55792,55800,55808,55820,55843,55862,55881,55900,55919,55938,55957,55977,55981,56001,56020,56040,56061,56072,56089,56099,56109,56119,56124,56129,56134,56139,56164,56177,56181,56204,56208,56216,56224,56232,56236],{"__ignoreMap":46},[51,54968,54969,54971,54973,54975],{"class":53,"line":54},[51,54970,51669],{"class":65},[51,54972,51673],{"class":51672},[51,54974,51676],{"class":57},[51,54976,51679],{"class":65},[51,54978,54979,54981,54983,54985,54987,54989],{"class":53,"line":185},[51,54980,1452],{"class":65},[51,54982,51007],{"class":51672},[51,54984,51688],{"class":57},[51,54986,70],{"class":65},[51,54988,51693],{"class":61},[51,54990,51679],{"class":65},[51,54992,54993],{"class":53,"line":202},[51,54994,206],{"emptyLinePlaceholder":205},[51,54996,54997,54999,55001],{"class":53,"line":209},[51,54998,1452],{"class":65},[51,55000,51706],{"class":51672},[51,55002,51679],{"class":65},[51,55004,55005,55007,55009,55011,55013,55015],{"class":53,"line":223},[51,55006,52516],{"class":65},[51,55008,51716],{"class":51672},[51,55010,51719],{"class":57},[51,55012,70],{"class":65},[51,55014,51724],{"class":61},[51,55016,51679],{"class":65},[51,55018,55019,55021,55023,55025,55027,55029,55031,55033,55035],{"class":53,"line":237},[51,55020,52516],{"class":65},[51,55022,51716],{"class":51672},[51,55024,15304],{"class":57},[51,55026,70],{"class":65},[51,55028,51763],{"class":61},[51,55030,51743],{"class":57},[51,55032,70],{"class":65},[51,55034,51770],{"class":61},[51,55036,51679],{"class":65},[51,55038,55039,55041,55043,55045,55047],{"class":53,"line":242},[51,55040,52516],{"class":65},[51,55042,51779],{"class":51672},[51,55044,51782],{"class":65},[51,55046,51779],{"class":51672},[51,55048,51679],{"class":65},[51,55050,55051,55053,55055],{"class":53,"line":257},[51,55052,52516],{"class":65},[51,55054,464],{"class":51672},[51,55056,51679],{"class":65},[51,55058,55059,55061],{"class":53,"line":262},[51,55060,6787],{"class":51672},[51,55062,15956],{"class":65},[51,55064,55065,55068,55070,55072],{"class":53,"line":285},[51,55066,55067],{"class":278},"      padding",[51,55069,51809],{"class":65},[51,55071,733],{"class":278},[51,55073,1703],{"class":65},[51,55075,55076,55079,55081,55083],{"class":53,"line":296},[51,55077,55078],{"class":278},"      margin",[51,55080,51809],{"class":65},[51,55082,733],{"class":278},[51,55084,1703],{"class":65},[51,55086,55087],{"class":53,"line":307},[51,55088,2577],{"class":65},[51,55090,55091],{"class":53,"line":324},[51,55092,206],{"emptyLinePlaceholder":205},[51,55094,55095,55098],{"class":53,"line":329},[51,55096,55097],{"class":51672},"    li",[51,55099,15956],{"class":65},[51,55101,55102,55105,55107,55110],{"class":53,"line":334},[51,55103,55104],{"class":278},"      list-style",[51,55106,51809],{"class":65},[51,55108,55109],{"class":278},"none",[51,55111,1703],{"class":65},[51,55113,55114],{"class":53,"line":340},[51,55115,2577],{"class":65},[51,55117,55118],{"class":53,"line":345},[51,55119,206],{"emptyLinePlaceholder":205},[51,55121,55122,55125],{"class":53,"line":357},[51,55123,55124],{"class":57},"    .box",[51,55126,15956],{"class":65},[51,55128,55129,55132,55134,55137],{"class":53,"line":366},[51,55130,55131],{"class":278},"      position",[51,55133,51809],{"class":65},[51,55135,55136],{"class":278},"relative",[51,55138,1703],{"class":65},[51,55140,55141,55144,55146,55149,55151],{"class":53,"line":383},[51,55142,55143],{"class":278},"      width",[51,55145,51809],{"class":65},[51,55147,55148],{"class":278},"976",[51,55150,51864],{"class":69},[51,55152,1703],{"class":65},[51,55154,55155,55158,55160,55162,55164],{"class":53,"line":392},[51,55156,55157],{"class":278},"      height",[51,55159,51809],{"class":65},[51,55161,1948],{"class":278},[51,55163,51864],{"class":69},[51,55165,1703],{"class":65},[51,55167,55168,55170,55172,55174,55176,55178],{"class":53,"line":403},[51,55169,55078],{"class":278},[51,55171,51809],{"class":65},[51,55173,853],{"class":278},[51,55175,51864],{"class":69},[51,55177,51928],{"class":278},[51,55179,1703],{"class":65},[51,55181,55182],{"class":53,"line":409},[51,55183,2577],{"class":65},[51,55185,55186],{"class":53,"line":414},[51,55187,206],{"emptyLinePlaceholder":205},[51,55189,55190,55193],{"class":53,"line":433},[51,55191,55192],{"class":57},"    .slider-footer",[51,55194,15956],{"class":65},[51,55196,55197,55199,55201,55204],{"class":53,"line":439},[51,55198,55131],{"class":278},[51,55200,51809],{"class":65},[51,55202,55203],{"class":278},"absolute",[51,55205,1703],{"class":65},[51,55207,55208,55211,55213,55215],{"class":53,"line":444},[51,55209,55210],{"class":278},"      left",[51,55212,51809],{"class":65},[51,55214,733],{"class":278},[51,55216,1703],{"class":65},[51,55218,55219,55222,55224,55226],{"class":53,"line":453},[51,55220,55221],{"class":278},"      bottom",[51,55223,51809],{"class":65},[51,55225,733],{"class":278},[51,55227,1703],{"class":65},[51,55229,55230,55232,55234,55236,55238],{"class":53,"line":2174},[51,55231,55143],{"class":278},[51,55233,51809],{"class":65},[51,55235,853],{"class":278},[51,55237,870],{"class":69},[51,55239,1703],{"class":65},[51,55241,55242,55244,55246,55248,55250],{"class":53,"line":2965},[51,55243,55157],{"class":278},[51,55245,51809],{"class":65},[51,55247,1117],{"class":278},[51,55249,870],{"class":69},[51,55251,1703],{"class":65},[51,55253,55254,55257,55259,55262],{"class":53,"line":2979},[51,55255,55256],{"class":278},"      background-color",[51,55258,51809],{"class":65},[51,55260,55261],{"class":278},"skyblue",[51,55263,1703],{"class":65},[51,55265,55266],{"class":53,"line":2987},[51,55267,2577],{"class":65},[51,55269,55270],{"class":53,"line":2992},[51,55271,206],{"emptyLinePlaceholder":205},[51,55273,55274,55276,55278],{"class":53,"line":2998},[51,55275,55192],{"class":57},[51,55277,7209],{"class":51672},[51,55279,15956],{"class":65},[51,55281,55282,55284,55286,55288],{"class":53,"line":3004},[51,55283,55131],{"class":278},[51,55285,51809],{"class":65},[51,55287,55203],{"class":278},[51,55289,1703],{"class":65},[51,55291,55292,55295,55297,55299,55301],{"class":53,"line":3009},[51,55293,55294],{"class":278},"      font-size",[51,55296,51809],{"class":65},[51,55298,1443],{"class":278},[51,55300,51864],{"class":69},[51,55302,1703],{"class":65},[51,55304,55305,55307,55309,55311,55313],{"class":53,"line":8332},[51,55306,55210],{"class":278},[51,55308,51809],{"class":65},[51,55310,1242],{"class":278},[51,55312,51864],{"class":69},[51,55314,1703],{"class":65},[51,55316,55317,55320,55322,55324,55326],{"class":53,"line":8356},[51,55318,55319],{"class":278},"      top",[51,55321,51809],{"class":65},[51,55323,861],{"class":278},[51,55325,51864],{"class":69},[51,55327,1703],{"class":65},[51,55329,55330],{"class":53,"line":8361},[51,55331,2577],{"class":65},[51,55333,55334],{"class":53,"line":8367},[51,55335,206],{"emptyLinePlaceholder":205},[51,55337,55338,55341],{"class":53,"line":8394},[51,55339,55340],{"class":51672},"    ul",[51,55342,15956],{"class":65},[51,55344,55345,55347,55349,55351],{"class":53,"line":8399},[51,55346,55131],{"class":278},[51,55348,51809],{"class":65},[51,55350,55203],{"class":278},[51,55352,1703],{"class":65},[51,55354,55355,55357,55359,55361,55363],{"class":53,"line":8405},[51,55356,55319],{"class":278},[51,55358,51809],{"class":65},[51,55360,1323],{"class":278},[51,55362,51864],{"class":69},[51,55364,1703],{"class":65},[51,55366,55367,55369,55371,55373,55375],{"class":53,"line":8417},[51,55368,55210],{"class":278},[51,55370,51809],{"class":65},[51,55372,1242],{"class":278},[51,55374,51864],{"class":69},[51,55376,1703],{"class":65},[51,55378,55379,55382,55384,55386],{"class":53,"line":8429},[51,55380,55381],{"class":278},"      display",[51,55383,51809],{"class":65},[51,55385,51849],{"class":278},[51,55387,1703],{"class":65},[51,55389,55390,55393,55395,55397],{"class":53,"line":8441},[51,55391,55392],{"class":278},"      justify-content",[51,55394,51809],{"class":65},[51,55396,52040],{"class":278},[51,55398,1703],{"class":65},[51,55400,55401,55403,55405,55407],{"class":53,"line":10100},[51,55402,55131],{"class":278},[51,55404,51809],{"class":65},[51,55406,55203],{"class":278},[51,55408,1703],{"class":65},[51,55410,55411,55413,55415,55417,55419],{"class":53,"line":10125},[51,55412,55143],{"class":278},[51,55414,51809],{"class":65},[51,55416,4378],{"class":278},[51,55418,51864],{"class":69},[51,55420,1703],{"class":65},[51,55422,55423,55425,55427,55429,55431],{"class":53,"line":10148},[51,55424,55157],{"class":278},[51,55426,51809],{"class":65},[51,55428,1242],{"class":278},[51,55430,51864],{"class":69},[51,55432,1703],{"class":65},[51,55434,55435],{"class":53,"line":10172},[51,55436,2577],{"class":65},[51,55438,55439],{"class":53,"line":10177},[51,55440,206],{"emptyLinePlaceholder":205},[51,55442,55443,55445,55448],{"class":53,"line":10182},[51,55444,55340],{"class":51672},[51,55446,55447],{"class":51672}," li",[51,55449,15956],{"class":65},[51,55451,55452,55454,55456,55458,55460],{"class":53,"line":10187},[51,55453,55143],{"class":278},[51,55455,51809],{"class":65},[51,55457,1242],{"class":278},[51,55459,51864],{"class":69},[51,55461,1703],{"class":65},[51,55463,55464,55466,55468,55470,55472],{"class":53,"line":10196},[51,55465,55157],{"class":278},[51,55467,51809],{"class":65},[51,55469,1242],{"class":278},[51,55471,51864],{"class":69},[51,55473,1703],{"class":65},[51,55475,55476,55478,55480,55483,55485,55487,55489,55491,55493,55495,55497,55500],{"class":53,"line":10201},[51,55477,55256],{"class":278},[51,55479,51809],{"class":65},[51,55481,55482],{"class":278},"rgba",[51,55484,546],{"class":65},[51,55486,733],{"class":278},[51,55488,12819],{"class":65},[51,55490,733],{"class":278},[51,55492,12819],{"class":65},[51,55494,733],{"class":278},[51,55496,12819],{"class":65},[51,55498,55499],{"class":278},".4",[51,55501,3107],{"class":65},[51,55503,55504,55507,55509,55511,55513],{"class":53,"line":10207},[51,55505,55506],{"class":278},"      border-radius",[51,55508,51809],{"class":65},[51,55510,988],{"class":278},[51,55512,51864],{"class":69},[51,55514,1703],{"class":65},[51,55516,55517],{"class":53,"line":10228},[51,55518,2577],{"class":65},[51,55520,55521],{"class":53,"line":10234},[51,55522,206],{"emptyLinePlaceholder":205},[51,55524,55525,55528],{"class":53,"line":10248},[51,55526,55527],{"class":57},"    .activate",[51,55529,15956],{"class":65},[51,55531,55532,55534,55536,55539],{"class":53,"line":10254},[51,55533,55256],{"class":278},[51,55535,51809],{"class":65},[51,55537,55538],{"class":278},"#f7f7f7",[51,55540,1703],{"class":65},[51,55542,55543],{"class":53,"line":10281},[51,55544,2577],{"class":65},[51,55546,55547,55549,55551],{"class":53,"line":10290},[51,55548,52789],{"class":65},[51,55550,464],{"class":51672},[51,55552,51679],{"class":65},[51,55554,55555,55557,55559],{"class":53,"line":10296},[51,55556,52157],{"class":65},[51,55558,51706],{"class":51672},[51,55560,51679],{"class":65},[51,55562,55563],{"class":53,"line":10304},[51,55564,206],{"emptyLinePlaceholder":205},[51,55566,55567,55569,55571],{"class":53,"line":10309},[51,55568,1452],{"class":65},[51,55570,52172],{"class":51672},[51,55572,51679],{"class":65},[51,55574,55575,55577,55579,55581,55583,55585],{"class":53,"line":16987},[51,55576,52516],{"class":65},[51,55578,51983],{"class":51672},[51,55580,53858],{"class":57},[51,55582,70],{"class":65},[51,55584,53863],{"class":61},[51,55586,51679],{"class":65},[51,55588,55589,55591,55593,55595,55597,55600],{"class":53,"line":16993},[51,55590,51713],{"class":65},[51,55592,51983],{"class":51672},[51,55594,53858],{"class":57},[51,55596,70],{"class":65},[51,55598,55599],{"class":61},"\"slider-wrapper\"",[51,55601,51679],{"class":65},[51,55603,55604,55607,55609,55612,55614,55617,55620,55622,55624],{"class":53,"line":17016},[51,55605,55606],{"class":65},"      \u003C",[51,55608,460],{"class":51672},[51,55610,55611],{"class":57}," src",[51,55613,70],{"class":65},[51,55615,55616],{"class":61},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[51,55618,55619],{"class":57}," alt",[51,55621,70],{"class":65},[51,55623,8036],{"class":61},[51,55625,51679],{"class":65},[51,55627,55628,55630,55632],{"class":53,"line":17022},[51,55629,52148],{"class":65},[51,55631,51983],{"class":51672},[51,55633,51679],{"class":65},[51,55635,55636,55638,55640,55642,55644,55647],{"class":53,"line":17045},[51,55637,51713],{"class":65},[51,55639,51983],{"class":51672},[51,55641,53858],{"class":57},[51,55643,70],{"class":65},[51,55645,55646],{"class":61},"\"slider-footer\"",[51,55648,51679],{"class":65},[51,55650,55651,55653,55655,55658,55660],{"class":53,"line":17059},[51,55652,55606],{"class":65},[51,55654,10],{"class":51672},[51,55656,55657],{"class":65},">对人类来说会不会太超前了?\u003C\u002F",[51,55659,10],{"class":51672},[51,55661,51679],{"class":65},[51,55663,55664,55666,55668],{"class":53,"line":17079},[51,55665,55606],{"class":65},[51,55667,1549],{"class":51672},[51,55669,51679],{"class":65},[51,55671,55672,55675,55677,55679,55681,55684,55687,55689],{"class":53,"line":17085},[51,55673,55674],{"class":65},"        \u003C",[51,55676,22],{"class":51672},[51,55678,53858],{"class":57},[51,55680,70],{"class":65},[51,55682,55683],{"class":61},"\"activate\"",[51,55685,55686],{"class":65},">\u003C\u002F",[51,55688,22],{"class":51672},[51,55690,51679],{"class":65},[51,55692,55693,55695,55697,55699,55701],{"class":53,"line":17096},[51,55694,55674],{"class":65},[51,55696,22],{"class":51672},[51,55698,55686],{"class":65},[51,55700,22],{"class":51672},[51,55702,51679],{"class":65},[51,55704,55705,55707,55709,55711,55713],{"class":53,"line":17119},[51,55706,55674],{"class":65},[51,55708,22],{"class":51672},[51,55710,55686],{"class":65},[51,55712,22],{"class":51672},[51,55714,51679],{"class":65},[51,55716,55717,55719,55721,55723,55725],{"class":53,"line":17141},[51,55718,55674],{"class":65},[51,55720,22],{"class":51672},[51,55722,55686],{"class":65},[51,55724,22],{"class":51672},[51,55726,51679],{"class":65},[51,55728,55729,55731,55733,55735,55737],{"class":53,"line":17146},[51,55730,55674],{"class":65},[51,55732,22],{"class":51672},[51,55734,55686],{"class":65},[51,55736,22],{"class":51672},[51,55738,51679],{"class":65},[51,55740,55741,55743,55745,55747,55749],{"class":53,"line":17152},[51,55742,55674],{"class":65},[51,55744,22],{"class":51672},[51,55746,55686],{"class":65},[51,55748,22],{"class":51672},[51,55750,51679],{"class":65},[51,55752,55753,55755,55757,55759,55761],{"class":53,"line":17166},[51,55754,55674],{"class":65},[51,55756,22],{"class":51672},[51,55758,55686],{"class":65},[51,55760,22],{"class":51672},[51,55762,51679],{"class":65},[51,55764,55765,55767,55769,55771,55773],{"class":53,"line":17179},[51,55766,55674],{"class":65},[51,55768,22],{"class":51672},[51,55770,55686],{"class":65},[51,55772,22],{"class":51672},[51,55774,51679],{"class":65},[51,55776,55777,55780,55782],{"class":53,"line":17184},[51,55778,55779],{"class":65},"      \u003C\u002F",[51,55781,1549],{"class":51672},[51,55783,51679],{"class":65},[51,55785,55786,55788,55790],{"class":53,"line":17198},[51,55787,52148],{"class":65},[51,55789,51983],{"class":51672},[51,55791,51679],{"class":65},[51,55793,55794,55796,55798],{"class":53,"line":17203},[51,55795,52789],{"class":65},[51,55797,51983],{"class":51672},[51,55799,51679],{"class":65},[51,55801,55802,55804,55806],{"class":53,"line":17209},[51,55803,52516],{"class":65},[51,55805,52185],{"class":51672},[51,55807,51679],{"class":65},[51,55809,55810,55812,55815,55817],{"class":53,"line":17214},[51,55811,11605],{"class":69},[51,55813,55814],{"class":278}," arrImage",[51,55816,13948],{"class":69},[51,55818,55819],{"class":65}," [\n",[51,55821,55822,55825,55828,55831,55834,55837,55840],{"class":53,"line":17228},[51,55823,55824],{"class":65},"      { url: ",[51,55826,55827],{"class":61},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[51,55829,55830],{"class":65},", title: ",[51,55832,55833],{"class":61},"'对人类来说会不会太超前了?'",[51,55835,55836],{"class":65},", color: ",[51,55838,55839],{"class":61},"'rgba(100,67,68)'",[51,55841,55842],{"class":65}," },\n",[51,55844,55845,55847,55850,55852,55855,55857,55860],{"class":53,"line":17233},[51,55846,55824],{"class":65},[51,55848,55849],{"class":61},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[51,55851,55830],{"class":65},[51,55853,55854],{"class":61},"'开启剑与雪的黑暗传说!'",[51,55856,55836],{"class":65},[51,55858,55859],{"class":61},"'rgba(43,35,26)'",[51,55861,55842],{"class":65},[51,55863,55864,55866,55869,55871,55874,55876,55879],{"class":53,"line":17238},[51,55865,55824],{"class":65},[51,55867,55868],{"class":61},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[51,55870,55830],{"class":65},[51,55872,55873],{"class":61},"'真正的jo厨出现了!'",[51,55875,55836],{"class":65},[51,55877,55878],{"class":61},"'rgba(36,31,33)'",[51,55880,55842],{"class":65},[51,55882,55883,55885,55888,55890,55893,55895,55898],{"class":53,"line":17252},[51,55884,55824],{"class":65},[51,55886,55887],{"class":61},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[51,55889,55830],{"class":65},[51,55891,55892],{"class":61},"'李玉刚:让世界通过b站看到东方大国文化'",[51,55894,55836],{"class":65},[51,55896,55897],{"class":61},"'rgba(139,98,66)'",[51,55899,55842],{"class":65},[51,55901,55902,55904,55907,55909,55912,55914,55917],{"class":53,"line":17264},[51,55903,55824],{"class":65},[51,55905,55906],{"class":61},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[51,55908,55830],{"class":65},[51,55910,55911],{"class":61},"'快来分享你的寒假日常吧'",[51,55913,55836],{"class":65},[51,55915,55916],{"class":61},"'rgba(67,90,92)'",[51,55918,55842],{"class":65},[51,55920,55921,55923,55926,55928,55931,55933,55936],{"class":53,"line":17269},[51,55922,55824],{"class":65},[51,55924,55925],{"class":61},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[51,55927,55830],{"class":65},[51,55929,55930],{"class":61},"'哔哩哔哩小年YEAR'",[51,55932,55836],{"class":65},[51,55934,55935],{"class":61},"'rgba(166,131,143)'",[51,55937,55842],{"class":65},[51,55939,55940,55942,55945,55947,55950,55952,55955],{"class":53,"line":17282},[51,55941,55824],{"class":65},[51,55943,55944],{"class":61},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[51,55946,55830],{"class":65},[51,55948,55949],{"class":61},"'一站式解决你的电脑配置问题'",[51,55951,55836],{"class":65},[51,55953,55954],{"class":61},"'rgba(53,29,25)'",[51,55956,55842],{"class":65},[51,55958,55959,55961,55964,55966,55969,55971,55974],{"class":53,"line":17287},[51,55960,55824],{"class":65},[51,55962,55963],{"class":61},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[51,55965,55830],{"class":65},[51,55967,55968],{"class":61},"'谁不想和小猫咪贴贴呢?'",[51,55970,55836],{"class":65},[51,55972,55973],{"class":61},"'rgba(99,72,114)'",[51,55975,55976],{"class":65}," }\n",[51,55978,55979],{"class":53,"line":17292},[51,55980,53481],{"class":65},[51,55982,55983,55985,55988,55990,55992,55994,55996,55999],{"class":53,"line":17297},[51,55984,11605],{"class":69},[51,55986,55987],{"class":278}," img",[51,55989,13948],{"class":69},[51,55991,54768],{"class":65},[51,55993,54771],{"class":57},[51,55995,546],{"class":65},[51,55997,55998],{"class":61},"'.slider-wrapper img'",[51,56000,282],{"class":65},[51,56002,56003,56005,56007,56009,56011,56013,56015,56018],{"class":53,"line":17310},[51,56004,11605],{"class":69},[51,56006,7209],{"class":278},[51,56008,13948],{"class":69},[51,56010,54768],{"class":65},[51,56012,54771],{"class":57},[51,56014,546],{"class":65},[51,56016,56017],{"class":61},"'.slider-footer p'",[51,56019,282],{"class":65},[51,56021,56022,56024,56027,56029,56031,56033,56035,56038],{"class":53,"line":17315},[51,56023,11605],{"class":69},[51,56025,56026],{"class":278}," color",[51,56028,13948],{"class":69},[51,56030,54768],{"class":65},[51,56032,54771],{"class":57},[51,56034,546],{"class":65},[51,56036,56037],{"class":61},"'.slider-footer'",[51,56039,282],{"class":65},[51,56041,56042,56044,56047,56049,56051,56054,56056,56059],{"class":53,"line":33008},[51,56043,11605],{"class":69},[51,56045,56046],{"class":278}," lis",[51,56048,13948],{"class":69},[51,56050,54768],{"class":65},[51,56052,56053],{"class":57},"querySelectorAll",[51,56055,546],{"class":65},[51,56057,56058],{"class":61},"'.slider-footer ul li'",[51,56060,282],{"class":65},[51,56062,56063,56065,56067,56069],{"class":53,"line":33014},[51,56064,52591],{"class":69},[51,56066,9822],{"class":65},[51,56068,70],{"class":69},[51,56070,56071],{"class":278}," 1\n",[51,56073,56074,56076,56079,56081,56083,56085,56087],{"class":53,"line":33020},[51,56075,52591],{"class":69},[51,56077,56078],{"class":65}," timer ",[51,56080,70],{"class":69},[51,56082,54816],{"class":57},[51,56084,546],{"class":65},[51,56086,54821],{"class":69},[51,56088,54824],{"class":65},[51,56090,56091,56094,56096],{"class":53,"line":33026},[51,56092,56093],{"class":65},"      img.src ",[51,56095,70],{"class":69},[51,56097,56098],{"class":65}," arrImage[i].url\n",[51,56100,56101,56104,56106],{"class":53,"line":33032},[51,56102,56103],{"class":65},"      p.innerHTML ",[51,56105,70],{"class":69},[51,56107,56108],{"class":65}," arrImage[i].title\n",[51,56110,56111,56114,56116],{"class":53,"line":33043},[51,56112,56113],{"class":65},"      color.style.backgroundColor ",[51,56115,70],{"class":69},[51,56117,56118],{"class":65}," arrImage[i].color\n",[51,56120,56121],{"class":53,"line":33049},[51,56122,56123],{"class":601},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[51,56125,56126],{"class":53,"line":33069},[51,56127,56128],{"class":601},"      \u002F\u002F li.classList.add('activate')\n",[51,56130,56131],{"class":53,"line":33075},[51,56132,56133],{"class":601},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[51,56135,56136],{"class":53,"line":33086},[51,56137,56138],{"class":601},"      \u002F\u002F lis[i].classList.remove('activate')\n",[51,56140,56141,56144,56146,56148,56151,56154,56157,56159,56162],{"class":53,"line":33092},[51,56142,56143],{"class":65},"      document.",[51,56145,54771],{"class":57},[51,56147,546],{"class":65},[51,56149,56150],{"class":61},"'.activate'",[51,56152,56153],{"class":65},")?.classList.",[51,56155,56156],{"class":57},"toggle",[51,56158,546],{"class":65},[51,56160,56161],{"class":61},"'activate'",[51,56163,282],{"class":65},[51,56165,56166,56169,56171,56173,56175],{"class":53,"line":33098},[51,56167,56168],{"class":65},"      lis[i].classList.",[51,56170,5718],{"class":57},[51,56172,546],{"class":65},[51,56174,56161],{"class":61},[51,56176,282],{"class":65},[51,56178,56179],{"class":53,"line":33104},[51,56180,206],{"emptyLinePlaceholder":205},[51,56182,56183,56186,56188,56190,56192,56194,56196,56198,56201],{"class":53,"line":33110},[51,56184,56185],{"class":65},"      i ",[51,56187,70],{"class":69},[51,56189,54855],{"class":65},[51,56191,1023],{"class":69},[51,56193,25500],{"class":278},[51,56195,14098],{"class":65},[51,56197,870],{"class":69},[51,56199,56200],{"class":65}," arrImage.",[51,56202,56203],{"class":278},"length\n",[51,56205,56206],{"class":53,"line":33116},[51,56207,206],{"emptyLinePlaceholder":205},[51,56209,56210,56212,56214],{"class":53,"line":33122},[51,56211,54907],{"class":65},[51,56213,6794],{"class":278},[51,56215,282],{"class":65},[51,56217,56218,56220,56222],{"class":53,"line":33128},[51,56219,52789],{"class":65},[51,56221,52185],{"class":51672},[51,56223,51679],{"class":65},[51,56225,56226,56228,56230],{"class":53,"line":33148},[51,56227,52157],{"class":65},[51,56229,52172],{"class":51672},[51,56231,51679],{"class":65},[51,56233,56234],{"class":53,"line":33154},[51,56235,206],{"emptyLinePlaceholder":205},[51,56237,56238,56240,56242],{"class":53,"line":33170},[51,56239,52157],{"class":65},[51,56241,51007],{"class":51672},[51,56243,51679],{"class":65},[10,56245,56246],{},[460,56247],{"alt":46,"src":56248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[10,56250,56251],{},"?.就是短路保护,确保输出正常进行",[10,56253,56254],{},"不要忘记取余%,有时候可以用",[10,56256,56257],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[19,56259,56260],{"start":185},[22,56261,56262],{},"法2",[41,56264,56266],{"className":51005,"code":56265,"language":51007,"meta":46,"style":46},"\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",[48,56267,56268,56278,56292,56296,56304,56318,56338,56350,56358,56364,56374,56384,56388,56392,56398,56408,56412,56416,56422,56432,56444,56456,56470,56474,56478,56484,56494,56504,56514,56526,56538,56548,56552,56556,56564,56574,56586,56598,56610,56614,56618,56624,56634,56646,56658,56668,56678,56688,56700,56712,56716,56720,56728,56740,56752,56778,56790,56794,56798,56804,56814,56818,56826,56834,56838,56846,56860,56874,56894,56902,56916,56928,56936,56954,56966,56978,56990,57002,57014,57026,57038,57046,57054,57062,57070,57081,57097,57113,57129,57145,57161,57177,57193,57209,57213,57218,57236,57254,57264,57269,57274,57285,57291,57306,57315,57319,57324,57333,57338,57347,57352,57357,57362,57385,57415,57419,57427,57431,57439,57447,57451],{"__ignoreMap":46},[51,56269,56270,56272,56274,56276],{"class":53,"line":54},[51,56271,51669],{"class":65},[51,56273,51673],{"class":51672},[51,56275,51676],{"class":57},[51,56277,51679],{"class":65},[51,56279,56280,56282,56284,56286,56288,56290],{"class":53,"line":185},[51,56281,1452],{"class":65},[51,56283,51007],{"class":51672},[51,56285,51688],{"class":57},[51,56287,70],{"class":65},[51,56289,51693],{"class":61},[51,56291,51679],{"class":65},[51,56293,56294],{"class":53,"line":202},[51,56295,206],{"emptyLinePlaceholder":205},[51,56297,56298,56300,56302],{"class":53,"line":209},[51,56299,1452],{"class":65},[51,56301,51706],{"class":51672},[51,56303,51679],{"class":65},[51,56305,56306,56308,56310,56312,56314,56316],{"class":53,"line":223},[51,56307,52516],{"class":65},[51,56309,51716],{"class":51672},[51,56311,51719],{"class":57},[51,56313,70],{"class":65},[51,56315,51724],{"class":61},[51,56317,51679],{"class":65},[51,56319,56320,56322,56324,56326,56328,56330,56332,56334,56336],{"class":53,"line":237},[51,56321,52516],{"class":65},[51,56323,51716],{"class":51672},[51,56325,15304],{"class":57},[51,56327,70],{"class":65},[51,56329,51763],{"class":61},[51,56331,51743],{"class":57},[51,56333,70],{"class":65},[51,56335,51770],{"class":61},[51,56337,51679],{"class":65},[51,56339,56340,56342,56344,56346,56348],{"class":53,"line":242},[51,56341,52516],{"class":65},[51,56343,51779],{"class":51672},[51,56345,51782],{"class":65},[51,56347,51779],{"class":51672},[51,56349,51679],{"class":65},[51,56351,56352,56354,56356],{"class":53,"line":257},[51,56353,52516],{"class":65},[51,56355,464],{"class":51672},[51,56357,51679],{"class":65},[51,56359,56360,56362],{"class":53,"line":262},[51,56361,6787],{"class":51672},[51,56363,15956],{"class":65},[51,56365,56366,56368,56370,56372],{"class":53,"line":285},[51,56367,55067],{"class":278},[51,56369,51809],{"class":65},[51,56371,733],{"class":278},[51,56373,1703],{"class":65},[51,56375,56376,56378,56380,56382],{"class":53,"line":296},[51,56377,55078],{"class":278},[51,56379,51809],{"class":65},[51,56381,733],{"class":278},[51,56383,1703],{"class":65},[51,56385,56386],{"class":53,"line":307},[51,56387,2577],{"class":65},[51,56389,56390],{"class":53,"line":324},[51,56391,206],{"emptyLinePlaceholder":205},[51,56393,56394,56396],{"class":53,"line":329},[51,56395,55097],{"class":51672},[51,56397,15956],{"class":65},[51,56399,56400,56402,56404,56406],{"class":53,"line":334},[51,56401,55104],{"class":278},[51,56403,51809],{"class":65},[51,56405,55109],{"class":278},[51,56407,1703],{"class":65},[51,56409,56410],{"class":53,"line":340},[51,56411,2577],{"class":65},[51,56413,56414],{"class":53,"line":345},[51,56415,206],{"emptyLinePlaceholder":205},[51,56417,56418,56420],{"class":53,"line":357},[51,56419,55124],{"class":57},[51,56421,15956],{"class":65},[51,56423,56424,56426,56428,56430],{"class":53,"line":366},[51,56425,55131],{"class":278},[51,56427,51809],{"class":65},[51,56429,55136],{"class":278},[51,56431,1703],{"class":65},[51,56433,56434,56436,56438,56440,56442],{"class":53,"line":383},[51,56435,55143],{"class":278},[51,56437,51809],{"class":65},[51,56439,55148],{"class":278},[51,56441,51864],{"class":69},[51,56443,1703],{"class":65},[51,56445,56446,56448,56450,56452,56454],{"class":53,"line":392},[51,56447,55157],{"class":278},[51,56449,51809],{"class":65},[51,56451,1948],{"class":278},[51,56453,51864],{"class":69},[51,56455,1703],{"class":65},[51,56457,56458,56460,56462,56464,56466,56468],{"class":53,"line":403},[51,56459,55078],{"class":278},[51,56461,51809],{"class":65},[51,56463,853],{"class":278},[51,56465,51864],{"class":69},[51,56467,51928],{"class":278},[51,56469,1703],{"class":65},[51,56471,56472],{"class":53,"line":409},[51,56473,2577],{"class":65},[51,56475,56476],{"class":53,"line":414},[51,56477,206],{"emptyLinePlaceholder":205},[51,56479,56480,56482],{"class":53,"line":433},[51,56481,55192],{"class":57},[51,56483,15956],{"class":65},[51,56485,56486,56488,56490,56492],{"class":53,"line":439},[51,56487,55131],{"class":278},[51,56489,51809],{"class":65},[51,56491,55203],{"class":278},[51,56493,1703],{"class":65},[51,56495,56496,56498,56500,56502],{"class":53,"line":444},[51,56497,55210],{"class":278},[51,56499,51809],{"class":65},[51,56501,733],{"class":278},[51,56503,1703],{"class":65},[51,56505,56506,56508,56510,56512],{"class":53,"line":453},[51,56507,55221],{"class":278},[51,56509,51809],{"class":65},[51,56511,733],{"class":278},[51,56513,1703],{"class":65},[51,56515,56516,56518,56520,56522,56524],{"class":53,"line":2174},[51,56517,55143],{"class":278},[51,56519,51809],{"class":65},[51,56521,853],{"class":278},[51,56523,870],{"class":69},[51,56525,1703],{"class":65},[51,56527,56528,56530,56532,56534,56536],{"class":53,"line":2965},[51,56529,55157],{"class":278},[51,56531,51809],{"class":65},[51,56533,1117],{"class":278},[51,56535,870],{"class":69},[51,56537,1703],{"class":65},[51,56539,56540,56542,56544,56546],{"class":53,"line":2979},[51,56541,55256],{"class":278},[51,56543,51809],{"class":65},[51,56545,55261],{"class":278},[51,56547,1703],{"class":65},[51,56549,56550],{"class":53,"line":2987},[51,56551,2577],{"class":65},[51,56553,56554],{"class":53,"line":2992},[51,56555,206],{"emptyLinePlaceholder":205},[51,56557,56558,56560,56562],{"class":53,"line":2998},[51,56559,55192],{"class":57},[51,56561,7209],{"class":51672},[51,56563,15956],{"class":65},[51,56565,56566,56568,56570,56572],{"class":53,"line":3004},[51,56567,55131],{"class":278},[51,56569,51809],{"class":65},[51,56571,55203],{"class":278},[51,56573,1703],{"class":65},[51,56575,56576,56578,56580,56582,56584],{"class":53,"line":3009},[51,56577,55294],{"class":278},[51,56579,51809],{"class":65},[51,56581,1443],{"class":278},[51,56583,51864],{"class":69},[51,56585,1703],{"class":65},[51,56587,56588,56590,56592,56594,56596],{"class":53,"line":8332},[51,56589,55210],{"class":278},[51,56591,51809],{"class":65},[51,56593,1242],{"class":278},[51,56595,51864],{"class":69},[51,56597,1703],{"class":65},[51,56599,56600,56602,56604,56606,56608],{"class":53,"line":8356},[51,56601,55319],{"class":278},[51,56603,51809],{"class":65},[51,56605,861],{"class":278},[51,56607,51864],{"class":69},[51,56609,1703],{"class":65},[51,56611,56612],{"class":53,"line":8361},[51,56613,2577],{"class":65},[51,56615,56616],{"class":53,"line":8367},[51,56617,206],{"emptyLinePlaceholder":205},[51,56619,56620,56622],{"class":53,"line":8394},[51,56621,55340],{"class":51672},[51,56623,15956],{"class":65},[51,56625,56626,56628,56630,56632],{"class":53,"line":8399},[51,56627,55131],{"class":278},[51,56629,51809],{"class":65},[51,56631,55203],{"class":278},[51,56633,1703],{"class":65},[51,56635,56636,56638,56640,56642,56644],{"class":53,"line":8405},[51,56637,55319],{"class":278},[51,56639,51809],{"class":65},[51,56641,1323],{"class":278},[51,56643,51864],{"class":69},[51,56645,1703],{"class":65},[51,56647,56648,56650,56652,56654,56656],{"class":53,"line":8417},[51,56649,55210],{"class":278},[51,56651,51809],{"class":65},[51,56653,1242],{"class":278},[51,56655,51864],{"class":69},[51,56657,1703],{"class":65},[51,56659,56660,56662,56664,56666],{"class":53,"line":8429},[51,56661,55381],{"class":278},[51,56663,51809],{"class":65},[51,56665,51849],{"class":278},[51,56667,1703],{"class":65},[51,56669,56670,56672,56674,56676],{"class":53,"line":8441},[51,56671,55392],{"class":278},[51,56673,51809],{"class":65},[51,56675,52040],{"class":278},[51,56677,1703],{"class":65},[51,56679,56680,56682,56684,56686],{"class":53,"line":10100},[51,56681,55131],{"class":278},[51,56683,51809],{"class":65},[51,56685,55203],{"class":278},[51,56687,1703],{"class":65},[51,56689,56690,56692,56694,56696,56698],{"class":53,"line":10125},[51,56691,55143],{"class":278},[51,56693,51809],{"class":65},[51,56695,4378],{"class":278},[51,56697,51864],{"class":69},[51,56699,1703],{"class":65},[51,56701,56702,56704,56706,56708,56710],{"class":53,"line":10148},[51,56703,55157],{"class":278},[51,56705,51809],{"class":65},[51,56707,1242],{"class":278},[51,56709,51864],{"class":69},[51,56711,1703],{"class":65},[51,56713,56714],{"class":53,"line":10172},[51,56715,2577],{"class":65},[51,56717,56718],{"class":53,"line":10177},[51,56719,206],{"emptyLinePlaceholder":205},[51,56721,56722,56724,56726],{"class":53,"line":10182},[51,56723,55340],{"class":51672},[51,56725,55447],{"class":51672},[51,56727,15956],{"class":65},[51,56729,56730,56732,56734,56736,56738],{"class":53,"line":10187},[51,56731,55143],{"class":278},[51,56733,51809],{"class":65},[51,56735,1242],{"class":278},[51,56737,51864],{"class":69},[51,56739,1703],{"class":65},[51,56741,56742,56744,56746,56748,56750],{"class":53,"line":10196},[51,56743,55157],{"class":278},[51,56745,51809],{"class":65},[51,56747,1242],{"class":278},[51,56749,51864],{"class":69},[51,56751,1703],{"class":65},[51,56753,56754,56756,56758,56760,56762,56764,56766,56768,56770,56772,56774,56776],{"class":53,"line":10201},[51,56755,55256],{"class":278},[51,56757,51809],{"class":65},[51,56759,55482],{"class":278},[51,56761,546],{"class":65},[51,56763,733],{"class":278},[51,56765,12819],{"class":65},[51,56767,733],{"class":278},[51,56769,12819],{"class":65},[51,56771,733],{"class":278},[51,56773,12819],{"class":65},[51,56775,55499],{"class":278},[51,56777,3107],{"class":65},[51,56779,56780,56782,56784,56786,56788],{"class":53,"line":10207},[51,56781,55506],{"class":278},[51,56783,51809],{"class":65},[51,56785,988],{"class":278},[51,56787,51864],{"class":69},[51,56789,1703],{"class":65},[51,56791,56792],{"class":53,"line":10228},[51,56793,2577],{"class":65},[51,56795,56796],{"class":53,"line":10234},[51,56797,206],{"emptyLinePlaceholder":205},[51,56799,56800,56802],{"class":53,"line":10248},[51,56801,55527],{"class":57},[51,56803,15956],{"class":65},[51,56805,56806,56808,56810,56812],{"class":53,"line":10254},[51,56807,55256],{"class":278},[51,56809,51809],{"class":65},[51,56811,55538],{"class":278},[51,56813,1703],{"class":65},[51,56815,56816],{"class":53,"line":10281},[51,56817,2577],{"class":65},[51,56819,56820,56822,56824],{"class":53,"line":10290},[51,56821,52789],{"class":65},[51,56823,464],{"class":51672},[51,56825,51679],{"class":65},[51,56827,56828,56830,56832],{"class":53,"line":10296},[51,56829,52157],{"class":65},[51,56831,51706],{"class":51672},[51,56833,51679],{"class":65},[51,56835,56836],{"class":53,"line":10304},[51,56837,206],{"emptyLinePlaceholder":205},[51,56839,56840,56842,56844],{"class":53,"line":10309},[51,56841,1452],{"class":65},[51,56843,52172],{"class":51672},[51,56845,51679],{"class":65},[51,56847,56848,56850,56852,56854,56856,56858],{"class":53,"line":16987},[51,56849,52516],{"class":65},[51,56851,51983],{"class":51672},[51,56853,53858],{"class":57},[51,56855,70],{"class":65},[51,56857,53863],{"class":61},[51,56859,51679],{"class":65},[51,56861,56862,56864,56866,56868,56870,56872],{"class":53,"line":16993},[51,56863,51713],{"class":65},[51,56865,51983],{"class":51672},[51,56867,53858],{"class":57},[51,56869,70],{"class":65},[51,56871,55599],{"class":61},[51,56873,51679],{"class":65},[51,56875,56876,56878,56880,56882,56884,56886,56888,56890,56892],{"class":53,"line":17016},[51,56877,55606],{"class":65},[51,56879,460],{"class":51672},[51,56881,55611],{"class":57},[51,56883,70],{"class":65},[51,56885,55616],{"class":61},[51,56887,55619],{"class":57},[51,56889,70],{"class":65},[51,56891,8036],{"class":61},[51,56893,51679],{"class":65},[51,56895,56896,56898,56900],{"class":53,"line":17022},[51,56897,52148],{"class":65},[51,56899,51983],{"class":51672},[51,56901,51679],{"class":65},[51,56903,56904,56906,56908,56910,56912,56914],{"class":53,"line":17045},[51,56905,51713],{"class":65},[51,56907,51983],{"class":51672},[51,56909,53858],{"class":57},[51,56911,70],{"class":65},[51,56913,55646],{"class":61},[51,56915,51679],{"class":65},[51,56917,56918,56920,56922,56924,56926],{"class":53,"line":17059},[51,56919,55606],{"class":65},[51,56921,10],{"class":51672},[51,56923,55657],{"class":65},[51,56925,10],{"class":51672},[51,56927,51679],{"class":65},[51,56929,56930,56932,56934],{"class":53,"line":17079},[51,56931,55606],{"class":65},[51,56933,1549],{"class":51672},[51,56935,51679],{"class":65},[51,56937,56938,56940,56942,56944,56946,56948,56950,56952],{"class":53,"line":17085},[51,56939,55674],{"class":65},[51,56941,22],{"class":51672},[51,56943,53858],{"class":57},[51,56945,70],{"class":65},[51,56947,55683],{"class":61},[51,56949,55686],{"class":65},[51,56951,22],{"class":51672},[51,56953,51679],{"class":65},[51,56955,56956,56958,56960,56962,56964],{"class":53,"line":17096},[51,56957,55674],{"class":65},[51,56959,22],{"class":51672},[51,56961,55686],{"class":65},[51,56963,22],{"class":51672},[51,56965,51679],{"class":65},[51,56967,56968,56970,56972,56974,56976],{"class":53,"line":17119},[51,56969,55674],{"class":65},[51,56971,22],{"class":51672},[51,56973,55686],{"class":65},[51,56975,22],{"class":51672},[51,56977,51679],{"class":65},[51,56979,56980,56982,56984,56986,56988],{"class":53,"line":17141},[51,56981,55674],{"class":65},[51,56983,22],{"class":51672},[51,56985,55686],{"class":65},[51,56987,22],{"class":51672},[51,56989,51679],{"class":65},[51,56991,56992,56994,56996,56998,57000],{"class":53,"line":17146},[51,56993,55674],{"class":65},[51,56995,22],{"class":51672},[51,56997,55686],{"class":65},[51,56999,22],{"class":51672},[51,57001,51679],{"class":65},[51,57003,57004,57006,57008,57010,57012],{"class":53,"line":17152},[51,57005,55674],{"class":65},[51,57007,22],{"class":51672},[51,57009,55686],{"class":65},[51,57011,22],{"class":51672},[51,57013,51679],{"class":65},[51,57015,57016,57018,57020,57022,57024],{"class":53,"line":17166},[51,57017,55674],{"class":65},[51,57019,22],{"class":51672},[51,57021,55686],{"class":65},[51,57023,22],{"class":51672},[51,57025,51679],{"class":65},[51,57027,57028,57030,57032,57034,57036],{"class":53,"line":17179},[51,57029,55674],{"class":65},[51,57031,22],{"class":51672},[51,57033,55686],{"class":65},[51,57035,22],{"class":51672},[51,57037,51679],{"class":65},[51,57039,57040,57042,57044],{"class":53,"line":17184},[51,57041,55779],{"class":65},[51,57043,1549],{"class":51672},[51,57045,51679],{"class":65},[51,57047,57048,57050,57052],{"class":53,"line":17198},[51,57049,52148],{"class":65},[51,57051,51983],{"class":51672},[51,57053,51679],{"class":65},[51,57055,57056,57058,57060],{"class":53,"line":17203},[51,57057,52789],{"class":65},[51,57059,51983],{"class":51672},[51,57061,51679],{"class":65},[51,57063,57064,57066,57068],{"class":53,"line":17209},[51,57065,52516],{"class":65},[51,57067,52185],{"class":51672},[51,57069,51679],{"class":65},[51,57071,57072,57074,57077,57079],{"class":53,"line":17214},[51,57073,11605],{"class":69},[51,57075,57076],{"class":278}," sliderData",[51,57078,13948],{"class":69},[51,57080,55819],{"class":65},[51,57082,57083,57085,57087,57089,57091,57093,57095],{"class":53,"line":17228},[51,57084,55824],{"class":65},[51,57086,55827],{"class":61},[51,57088,55830],{"class":65},[51,57090,55833],{"class":61},[51,57092,55836],{"class":65},[51,57094,55839],{"class":61},[51,57096,55842],{"class":65},[51,57098,57099,57101,57103,57105,57107,57109,57111],{"class":53,"line":17233},[51,57100,55824],{"class":65},[51,57102,55849],{"class":61},[51,57104,55830],{"class":65},[51,57106,55854],{"class":61},[51,57108,55836],{"class":65},[51,57110,55859],{"class":61},[51,57112,55842],{"class":65},[51,57114,57115,57117,57119,57121,57123,57125,57127],{"class":53,"line":17238},[51,57116,55824],{"class":65},[51,57118,55868],{"class":61},[51,57120,55830],{"class":65},[51,57122,55873],{"class":61},[51,57124,55836],{"class":65},[51,57126,55878],{"class":61},[51,57128,55842],{"class":65},[51,57130,57131,57133,57135,57137,57139,57141,57143],{"class":53,"line":17252},[51,57132,55824],{"class":65},[51,57134,55887],{"class":61},[51,57136,55830],{"class":65},[51,57138,55892],{"class":61},[51,57140,55836],{"class":65},[51,57142,55897],{"class":61},[51,57144,55842],{"class":65},[51,57146,57147,57149,57151,57153,57155,57157,57159],{"class":53,"line":17264},[51,57148,55824],{"class":65},[51,57150,55906],{"class":61},[51,57152,55830],{"class":65},[51,57154,55911],{"class":61},[51,57156,55836],{"class":65},[51,57158,55916],{"class":61},[51,57160,55842],{"class":65},[51,57162,57163,57165,57167,57169,57171,57173,57175],{"class":53,"line":17269},[51,57164,55824],{"class":65},[51,57166,55925],{"class":61},[51,57168,55830],{"class":65},[51,57170,55930],{"class":61},[51,57172,55836],{"class":65},[51,57174,55935],{"class":61},[51,57176,55842],{"class":65},[51,57178,57179,57181,57183,57185,57187,57189,57191],{"class":53,"line":17282},[51,57180,55824],{"class":65},[51,57182,55944],{"class":61},[51,57184,55830],{"class":65},[51,57186,55949],{"class":61},[51,57188,55836],{"class":65},[51,57190,55954],{"class":61},[51,57192,55842],{"class":65},[51,57194,57195,57197,57199,57201,57203,57205,57207],{"class":53,"line":17287},[51,57196,55824],{"class":65},[51,57198,55963],{"class":61},[51,57200,55830],{"class":65},[51,57202,55968],{"class":61},[51,57204,55836],{"class":65},[51,57206,55973],{"class":61},[51,57208,55976],{"class":65},[51,57210,57211],{"class":53,"line":17292},[51,57212,53481],{"class":65},[51,57214,57215],{"class":53,"line":17297},[51,57216,57217],{"class":601},"    \u002F\u002F 1.获取元素\n",[51,57219,57220,57222,57224,57226,57228,57230,57232,57234],{"class":53,"line":17310},[51,57221,11605],{"class":69},[51,57223,55987],{"class":278},[51,57225,13948],{"class":69},[51,57227,54768],{"class":65},[51,57229,54771],{"class":57},[51,57231,546],{"class":65},[51,57233,55998],{"class":61},[51,57235,282],{"class":65},[51,57237,57238,57240,57242,57244,57246,57248,57250,57252],{"class":53,"line":17315},[51,57239,11605],{"class":69},[51,57241,7209],{"class":278},[51,57243,13948],{"class":69},[51,57245,54768],{"class":65},[51,57247,54771],{"class":57},[51,57249,546],{"class":65},[51,57251,56017],{"class":61},[51,57253,282],{"class":65},[51,57255,57256,57258,57260,57262],{"class":53,"line":33008},[51,57257,52591],{"class":69},[51,57259,9822],{"class":65},[51,57261,70],{"class":69},[51,57263,47705],{"class":278},[51,57265,57266],{"class":53,"line":33014},[51,57267,57268],{"class":601},"    \u002F\u002F 2.开启定时器\n",[51,57270,57271],{"class":53,"line":33020},[51,57272,57273],{"class":601},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[51,57275,57276,57279,57281,57283],{"class":53,"line":33026},[51,57277,57278],{"class":57},"    setInterval",[51,57280,546],{"class":65},[51,57282,54821],{"class":69},[51,57284,54824],{"class":65},[51,57286,57287,57289],{"class":53,"line":33032},[51,57288,54829],{"class":65},[51,57290,3090],{"class":69},[51,57292,57293,57295,57297,57299,57302,57304],{"class":53,"line":33043},[51,57294,54852],{"class":69},[51,57296,54855],{"class":65},[51,57298,2108],{"class":69},[51,57300,57301],{"class":65}," sliderData.",[51,57303,52340],{"class":278},[51,57305,12826],{"class":65},[51,57307,57308,57311,57313],{"class":53,"line":33049},[51,57309,57310],{"class":65},"        i ",[51,57312,70],{"class":69},[51,57314,47705],{"class":278},[51,57316,57317],{"class":53,"line":33069},[51,57318,52770],{"class":65},[51,57320,57321],{"class":53,"line":33075},[51,57322,57323],{"class":601},"      \u002F\u002F 更换图片路径\n",[51,57325,57326,57328,57330],{"class":53,"line":33086},[51,57327,56093],{"class":65},[51,57329,70],{"class":69},[51,57331,57332],{"class":65}," sliderData[i].url\n",[51,57334,57335],{"class":53,"line":33092},[51,57336,57337],{"class":601},"      \u002F\u002F 把文字写到p里面\n",[51,57339,57340,57342,57344],{"class":53,"line":33098},[51,57341,56103],{"class":65},[51,57343,70],{"class":69},[51,57345,57346],{"class":65}," sliderData[i].title\n",[51,57348,57349],{"class":53,"line":33104},[51,57350,57351],{"class":601},"      \u002F\u002F 小圆点\n",[51,57353,57354],{"class":53,"line":33110},[51,57355,57356],{"class":601},"      \u002F\u002F 先删除以前的active\n",[51,57358,57359],{"class":53,"line":33116},[51,57360,57361],{"class":601},"      \u002F\u002F 只让当前li添加active\n",[51,57363,57364,57366,57368,57370,57373,57376,57379,57381,57383],{"class":53,"line":33122},[51,57365,56143],{"class":65},[51,57367,54771],{"class":57},[51,57369,546],{"class":65},[51,57371,57372],{"class":61},"'.slider-footer .activate'",[51,57374,57375],{"class":65},").classList.",[51,57377,57378],{"class":57},"remove",[51,57380,546],{"class":65},[51,57382,56161],{"class":61},[51,57384,282],{"class":65},[51,57386,57387,57389,57391,57393,57396,57398,57400,57402,57405,57407,57409,57411,57413],{"class":53,"line":33128},[51,57388,56143],{"class":65},[51,57390,54771],{"class":57},[51,57392,546],{"class":65},[51,57394,57395],{"class":61},"`.slider-footer ul li:nth-child(${",[51,57397,983],{"class":65},[51,57399,45938],{"class":69},[51,57401,25500],{"class":278},[51,57403,57404],{"class":61},"})`",[51,57406,57375],{"class":65},[51,57408,5718],{"class":57},[51,57410,546],{"class":65},[51,57412,56161],{"class":61},[51,57414,282],{"class":65},[51,57416,57417],{"class":53,"line":33148},[51,57418,206],{"emptyLinePlaceholder":205},[51,57420,57421,57423,57425],{"class":53,"line":33154},[51,57422,54907],{"class":65},[51,57424,6794],{"class":278},[51,57426,282],{"class":65},[51,57428,57429],{"class":53,"line":33170},[51,57430,206],{"emptyLinePlaceholder":205},[51,57432,57433,57435,57437],{"class":53,"line":33176},[51,57434,52789],{"class":65},[51,57436,52185],{"class":51672},[51,57438,51679],{"class":65},[51,57440,57441,57443,57445],{"class":53,"line":33190},[51,57442,52157],{"class":65},[51,57444,52172],{"class":51672},[51,57446,51679],{"class":65},[51,57448,57449],{"class":53,"line":33196},[51,57450,206],{"emptyLinePlaceholder":205},[51,57452,57453,57455,57457],{"class":53,"line":33211},[51,57454,52157],{"class":65},[51,57456,51007],{"class":51672},[51,57458,51679],{"class":65},[513,57460,57462],{"id":57461},"_317-重要知识点","3.1.7 重要知识点",[10,57464,57465,57466],{},"浏览器在渲染文本时， ",[691,57467,57468],{},"没有空格或换行符就没有“断行点”",[10,57470,57471],{},[460,57472],{"alt":46,"src":57473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[10,57475,57476],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[10,57478,57479],{},[460,57480],{"alt":46,"src":57481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[10,57483,57484],{},[460,57485],{"alt":46,"src":57486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[486,57488,57490],{"id":57489},"_32-dom事件基础","3.2 DOM事件基础",[513,57492,57494],{"id":57493},"_321-事件监听","3.2.1 事件监听",[10,57496,57497],{},[460,57498],{"alt":46,"src":57499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[10,57501,57502],{},"事件监听有响应的发生",[10,57504,57505],{},[460,57506],{"alt":46,"src":57507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[10,57509,57510],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[10,57512,57513],{},"对于有名函数,要执行的函数名后边不要加()",[513,57515,57517],{"id":57516},"_322-随机点名案例","3.2.2 随机点名案例",[41,57519,57521],{"className":51005,"code":57520,"language":51007,"meta":46,"style":46},"\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",[48,57522,57523,57533,57547,57551,57559,57573,57593,57605,57613,57619,57629,57639,57643,57647,57654,57665,57669,57673,57679,57691,57705,57715,57727,57740,57744,57748,57755,57759,57772,57784,57796,57800,57804,57808,57815,57825,57829,57833,57842,57854,57866,57881,57885,57893,57901,57905,57913,57926,57940,57953,57973,57981,57996,58016,58036,58044,58048,58056,58061,58097,58117,58122,58141,58146,58157,58162,58173,58178,58197,58212,58217,58243,58253,58262,58267,58283,58288,58293,58298,58313,58317,58321,58326,58345,58362,58370,58375,58390,58394,58398,58406,58414,58418],{"__ignoreMap":46},[51,57524,57525,57527,57529,57531],{"class":53,"line":54},[51,57526,51669],{"class":65},[51,57528,51673],{"class":51672},[51,57530,51676],{"class":57},[51,57532,51679],{"class":65},[51,57534,57535,57537,57539,57541,57543,57545],{"class":53,"line":185},[51,57536,1452],{"class":65},[51,57538,51007],{"class":51672},[51,57540,51688],{"class":57},[51,57542,70],{"class":65},[51,57544,51693],{"class":61},[51,57546,51679],{"class":65},[51,57548,57549],{"class":53,"line":202},[51,57550,206],{"emptyLinePlaceholder":205},[51,57552,57553,57555,57557],{"class":53,"line":209},[51,57554,1452],{"class":65},[51,57556,51706],{"class":51672},[51,57558,51679],{"class":65},[51,57560,57561,57563,57565,57567,57569,57571],{"class":53,"line":223},[51,57562,52516],{"class":65},[51,57564,51716],{"class":51672},[51,57566,51719],{"class":57},[51,57568,70],{"class":65},[51,57570,51724],{"class":61},[51,57572,51679],{"class":65},[51,57574,57575,57577,57579,57581,57583,57585,57587,57589,57591],{"class":53,"line":237},[51,57576,52516],{"class":65},[51,57578,51716],{"class":51672},[51,57580,15304],{"class":57},[51,57582,70],{"class":65},[51,57584,51763],{"class":61},[51,57586,51743],{"class":57},[51,57588,70],{"class":65},[51,57590,51770],{"class":61},[51,57592,51679],{"class":65},[51,57594,57595,57597,57599,57601,57603],{"class":53,"line":242},[51,57596,52516],{"class":65},[51,57598,51779],{"class":51672},[51,57600,51782],{"class":65},[51,57602,51779],{"class":51672},[51,57604,51679],{"class":65},[51,57606,57607,57609,57611],{"class":53,"line":257},[51,57608,52516],{"class":65},[51,57610,464],{"class":51672},[51,57612,51679],{"class":65},[51,57614,57615,57617],{"class":53,"line":262},[51,57616,6787],{"class":51672},[51,57618,15956],{"class":65},[51,57620,57621,57623,57625,57627],{"class":53,"line":285},[51,57622,55078],{"class":278},[51,57624,51809],{"class":65},[51,57626,733],{"class":278},[51,57628,1703],{"class":65},[51,57630,57631,57633,57635,57637],{"class":53,"line":296},[51,57632,55067],{"class":278},[51,57634,51809],{"class":65},[51,57636,733],{"class":278},[51,57638,1703],{"class":65},[51,57640,57641],{"class":53,"line":307},[51,57642,2577],{"class":65},[51,57644,57645],{"class":53,"line":324},[51,57646,206],{"emptyLinePlaceholder":205},[51,57648,57649,57652],{"class":53,"line":329},[51,57650,57651],{"class":51672},"    h2",[51,57653,15956],{"class":65},[51,57655,57656,57659,57661,57663],{"class":53,"line":334},[51,57657,57658],{"class":278},"      text-align",[51,57660,51809],{"class":65},[51,57662,51964],{"class":278},[51,57664,1703],{"class":65},[51,57666,57667],{"class":53,"line":340},[51,57668,2577],{"class":65},[51,57670,57671],{"class":53,"line":345},[51,57672,206],{"emptyLinePlaceholder":205},[51,57674,57675,57677],{"class":53,"line":357},[51,57676,55124],{"class":57},[51,57678,15956],{"class":65},[51,57680,57681,57683,57685,57687,57689],{"class":53,"line":366},[51,57682,55143],{"class":278},[51,57684,51809],{"class":65},[51,57686,1948],{"class":278},[51,57688,51864],{"class":69},[51,57690,1703],{"class":65},[51,57692,57693,57695,57697,57699,57701,57703],{"class":53,"line":383},[51,57694,55078],{"class":278},[51,57696,51809],{"class":65},[51,57698,1198],{"class":278},[51,57700,51864],{"class":69},[51,57702,51928],{"class":278},[51,57704,1703],{"class":65},[51,57706,57707,57709,57711,57713],{"class":53,"line":392},[51,57708,55381],{"class":278},[51,57710,51809],{"class":65},[51,57712,51849],{"class":278},[51,57714,1703],{"class":65},[51,57716,57717,57719,57721,57723,57725],{"class":53,"line":403},[51,57718,55294],{"class":278},[51,57720,51809],{"class":65},[51,57722,1367],{"class":278},[51,57724,51864],{"class":69},[51,57726,1703],{"class":65},[51,57728,57729,57732,57734,57736,57738],{"class":53,"line":409},[51,57730,57731],{"class":278},"      line-height",[51,57733,51809],{"class":65},[51,57735,943],{"class":278},[51,57737,51864],{"class":69},[51,57739,1703],{"class":65},[51,57741,57742],{"class":53,"line":414},[51,57743,2577],{"class":65},[51,57745,57746],{"class":53,"line":433},[51,57747,206],{"emptyLinePlaceholder":205},[51,57749,57750,57753],{"class":53,"line":439},[51,57751,57752],{"class":57},"    .qs",[51,57754,15956],{"class":65},[51,57756,57757],{"class":53,"line":444},[51,57758,206],{"emptyLinePlaceholder":205},[51,57760,57761,57763,57765,57768,57770],{"class":53,"line":453},[51,57762,55143],{"class":278},[51,57764,51809],{"class":65},[51,57766,57767],{"class":278},"450",[51,57769,51864],{"class":69},[51,57771,1703],{"class":65},[51,57773,57774,57776,57778,57780,57782],{"class":53,"line":2174},[51,57775,55157],{"class":278},[51,57777,51809],{"class":65},[51,57779,943],{"class":278},[51,57781,51864],{"class":69},[51,57783,1703],{"class":65},[51,57785,57786,57789,57791,57794],{"class":53,"line":2965},[51,57787,57788],{"class":278},"      color",[51,57790,51809],{"class":65},[51,57792,57793],{"class":278},"red",[51,57795,1703],{"class":65},[51,57797,57798],{"class":53,"line":2979},[51,57799,206],{"emptyLinePlaceholder":205},[51,57801,57802],{"class":53,"line":2987},[51,57803,2577],{"class":65},[51,57805,57806],{"class":53,"line":2992},[51,57807,206],{"emptyLinePlaceholder":205},[51,57809,57810,57813],{"class":53,"line":2998},[51,57811,57812],{"class":57},"    .btns",[51,57814,15956],{"class":65},[51,57816,57817,57819,57821,57823],{"class":53,"line":3004},[51,57818,57658],{"class":278},[51,57820,51809],{"class":65},[51,57822,51964],{"class":278},[51,57824,1703],{"class":65},[51,57826,57827],{"class":53,"line":3009},[51,57828,2577],{"class":65},[51,57830,57831],{"class":53,"line":8332},[51,57832,206],{"emptyLinePlaceholder":205},[51,57834,57835,57837,57840],{"class":53,"line":8356},[51,57836,57812],{"class":57},[51,57838,57839],{"class":51672}," button",[51,57841,15956],{"class":65},[51,57843,57844,57846,57848,57850,57852],{"class":53,"line":8361},[51,57845,55143],{"class":278},[51,57847,51809],{"class":65},[51,57849,1359],{"class":278},[51,57851,51864],{"class":69},[51,57853,1703],{"class":65},[51,57855,57856,57858,57860,57862,57864],{"class":53,"line":8367},[51,57857,55157],{"class":278},[51,57859,51809],{"class":65},[51,57861,815],{"class":278},[51,57863,51864],{"class":69},[51,57865,1703],{"class":65},[51,57867,57868,57870,57872,57874,57877,57879],{"class":53,"line":8394},[51,57869,55078],{"class":278},[51,57871,51809],{"class":65},[51,57873,733],{"class":278},[51,57875,57876],{"class":278}," 50",[51,57878,51864],{"class":69},[51,57880,1703],{"class":65},[51,57882,57883],{"class":53,"line":8399},[51,57884,2577],{"class":65},[51,57886,57887,57889,57891],{"class":53,"line":8405},[51,57888,52789],{"class":65},[51,57890,464],{"class":51672},[51,57892,51679],{"class":65},[51,57894,57895,57897,57899],{"class":53,"line":8417},[51,57896,52157],{"class":65},[51,57898,51706],{"class":51672},[51,57900,51679],{"class":65},[51,57902,57903],{"class":53,"line":8429},[51,57904,206],{"emptyLinePlaceholder":205},[51,57906,57907,57909,57911],{"class":53,"line":8441},[51,57908,1452],{"class":65},[51,57910,52172],{"class":51672},[51,57912,51679],{"class":65},[51,57914,57915,57917,57919,57922,57924],{"class":53,"line":10100},[51,57916,52516],{"class":65},[51,57918,486],{"class":51672},[51,57920,57921],{"class":65},">随机点名\u003C\u002F",[51,57923,486],{"class":51672},[51,57925,51679],{"class":65},[51,57927,57928,57930,57932,57934,57936,57938],{"class":53,"line":10125},[51,57929,52516],{"class":65},[51,57931,51983],{"class":51672},[51,57933,53858],{"class":57},[51,57935,70],{"class":65},[51,57937,53863],{"class":61},[51,57939,51679],{"class":65},[51,57941,57942,57944,57946,57949,57951],{"class":53,"line":10148},[51,57943,51713],{"class":65},[51,57945,51],{"class":51672},[51,57947,57948],{"class":65},">名字是：\u003C\u002F",[51,57950,51],{"class":51672},[51,57952,51679],{"class":65},[51,57954,57955,57957,57959,57961,57963,57966,57969,57971],{"class":53,"line":10172},[51,57956,51713],{"class":65},[51,57958,51983],{"class":51672},[51,57960,53858],{"class":57},[51,57962,70],{"class":65},[51,57964,57965],{"class":61},"\"qs\"",[51,57967,57968],{"class":65},">这里显示姓名\u003C\u002F",[51,57970,51983],{"class":51672},[51,57972,51679],{"class":65},[51,57974,57975,57977,57979],{"class":53,"line":10177},[51,57976,52789],{"class":65},[51,57978,51983],{"class":51672},[51,57980,51679],{"class":65},[51,57982,57983,57985,57987,57989,57991,57994],{"class":53,"line":10182},[51,57984,52516],{"class":65},[51,57986,51983],{"class":51672},[51,57988,53858],{"class":57},[51,57990,70],{"class":65},[51,57992,57993],{"class":61},"\"btns\"",[51,57995,51679],{"class":65},[51,57997,57998,58000,58002,58004,58006,58009,58012,58014],{"class":53,"line":10187},[51,57999,51713],{"class":65},[51,58001,54259],{"class":51672},[51,58003,53858],{"class":57},[51,58005,70],{"class":65},[51,58007,58008],{"class":61},"\"start\"",[51,58010,58011],{"class":65},">开始\u003C\u002F",[51,58013,54259],{"class":51672},[51,58015,51679],{"class":65},[51,58017,58018,58020,58022,58024,58026,58029,58032,58034],{"class":53,"line":10196},[51,58019,51713],{"class":65},[51,58021,54259],{"class":51672},[51,58023,53858],{"class":57},[51,58025,70],{"class":65},[51,58027,58028],{"class":61},"\"end\"",[51,58030,58031],{"class":65},">结束\u003C\u002F",[51,58033,54259],{"class":51672},[51,58035,51679],{"class":65},[51,58037,58038,58040,58042],{"class":53,"line":10201},[51,58039,52789],{"class":65},[51,58041,51983],{"class":51672},[51,58043,51679],{"class":65},[51,58045,58046],{"class":53,"line":10207},[51,58047,206],{"emptyLinePlaceholder":205},[51,58049,58050,58052,58054],{"class":53,"line":10228},[51,58051,52516],{"class":65},[51,58053,52185],{"class":51672},[51,58055,51679],{"class":65},[51,58057,58058],{"class":53,"line":10234},[51,58059,58060],{"class":601},"    \u002F\u002F 数据数组\n",[51,58062,58063,58065,58068,58070,58072,58075,58077,58080,58082,58085,58087,58090,58092,58095],{"class":53,"line":10248},[51,58064,11605],{"class":69},[51,58066,58067],{"class":278}," arr",[51,58069,13948],{"class":69},[51,58071,52598],{"class":65},[51,58073,58074],{"class":61},"'马超'",[51,58076,12819],{"class":65},[51,58078,58079],{"class":61},"'黄忠'",[51,58081,12819],{"class":65},[51,58083,58084],{"class":61},"'赵云'",[51,58086,12819],{"class":65},[51,58088,58089],{"class":61},"'关羽'",[51,58091,12819],{"class":65},[51,58093,58094],{"class":61},"'张飞'",[51,58096,33621],{"class":65},[51,58098,58099,58101,58104,58106,58108,58110,58112,58115],{"class":53,"line":10254},[51,58100,11605],{"class":69},[51,58102,58103],{"class":278}," qs",[51,58105,13948],{"class":69},[51,58107,54768],{"class":65},[51,58109,54771],{"class":57},[51,58111,546],{"class":65},[51,58113,58114],{"class":61},"'.qs'",[51,58116,282],{"class":65},[51,58118,58119],{"class":53,"line":10281},[51,58120,58121],{"class":601},"    \u002F\u002F 1.业务1.开始按钮模块\n",[51,58123,58124,58126,58128,58130,58132,58134,58136,58139],{"class":53,"line":10290},[51,58125,11605],{"class":69},[51,58127,4570],{"class":278},[51,58129,13948],{"class":69},[51,58131,54768],{"class":65},[51,58133,54771],{"class":57},[51,58135,546],{"class":65},[51,58137,58138],{"class":61},"'.start'",[51,58140,282],{"class":65},[51,58142,58143],{"class":53,"line":10296},[51,58144,58145],{"class":601},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[51,58147,58148,58150,58153,58155],{"class":53,"line":10304},[51,58149,52591],{"class":69},[51,58151,58152],{"class":65}," timerId ",[51,58154,70],{"class":69},[51,58156,47705],{"class":278},[51,58158,58159],{"class":53,"line":10309},[51,58160,58161],{"class":601},"    \u002F\u002F 随机号要全局变量\n",[51,58163,58164,58166,58169,58171],{"class":53,"line":16987},[51,58165,52591],{"class":69},[51,58167,58168],{"class":65}," random ",[51,58170,70],{"class":69},[51,58172,47705],{"class":278},[51,58174,58175],{"class":53,"line":16993},[51,58176,58177],{"class":601},"    \u002F\u002F 1.1 添加点击事件\n",[51,58179,58180,58183,58186,58188,58191,58193,58195],{"class":53,"line":17016},[51,58181,58182],{"class":65},"    start.",[51,58184,58185],{"class":57},"addEventListener",[51,58187,546],{"class":65},[51,58189,58190],{"class":61},"'click'",[51,58192,12819],{"class":65},[51,58194,54821],{"class":69},[51,58196,54824],{"class":65},[51,58198,58199,58202,58204,58206,58208,58210],{"class":53,"line":17022},[51,58200,58201],{"class":65},"      timerId ",[51,58203,70],{"class":69},[51,58205,54816],{"class":57},[51,58207,546],{"class":65},[51,58209,54821],{"class":69},[51,58211,54824],{"class":65},[51,58213,58214],{"class":53,"line":17045},[51,58215,58216],{"class":601},"        \u002F\u002F 随机数\n",[51,58218,58219,58222,58224,58227,58230,58233,58235,58237,58239,58241],{"class":53,"line":17059},[51,58220,58221],{"class":65},"        random ",[51,58223,70],{"class":69},[51,58225,58226],{"class":57}," parseInt",[51,58228,58229],{"class":65},"(Math.",[51,58231,58232],{"class":57},"random",[51,58234,13434],{"class":65},[51,58236,997],{"class":69},[51,58238,52337],{"class":65},[51,58240,52340],{"class":278},[51,58242,282],{"class":65},[51,58244,58245,58248,58250],{"class":53,"line":17079},[51,58246,58247],{"class":65},"        qs.innerHTML ",[51,58249,70],{"class":69},[51,58251,58252],{"class":65}," arr[random]\n",[51,58254,58255,58258,58260],{"class":53,"line":17085},[51,58256,58257],{"class":65},"      }, ",[51,58259,815],{"class":278},[51,58261,282],{"class":65},[51,58263,58264],{"class":53,"line":17096},[51,58265,58266],{"class":601},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[51,58268,58269,58271,58274,58276,58279,58281],{"class":53,"line":17119},[51,58270,54852],{"class":69},[51,58272,58273],{"class":65}," (arr.",[51,58275,52340],{"class":278},[51,58277,58278],{"class":69}," ===",[51,58280,25500],{"class":278},[51,58282,12826],{"class":65},[51,58284,58285],{"class":53,"line":17141},[51,58286,58287],{"class":601},"        \u002F\u002F start.disabled = true\n",[51,58289,58290],{"class":53,"line":17146},[51,58291,58292],{"class":601},"        \u002F\u002F end.disabled = true\n",[51,58294,58295],{"class":53,"line":17152},[51,58296,58297],{"class":601},"        \u002F\u002F 可以合起来写\n",[51,58299,58300,58303,58305,58308,58310],{"class":53,"line":17166},[51,58301,58302],{"class":65},"        start.disabled ",[51,58304,70],{"class":69},[51,58306,58307],{"class":65}," end.disabled ",[51,58309,70],{"class":69},[51,58311,58312],{"class":278}," true\n",[51,58314,58315],{"class":53,"line":17179},[51,58316,52770],{"class":65},[51,58318,58319],{"class":53,"line":17184},[51,58320,33836],{"class":65},[51,58322,58323],{"class":53,"line":17198},[51,58324,58325],{"class":601},"    \u002F\u002F 1.2 关闭按钮模块\n",[51,58327,58328,58330,58332,58334,58336,58338,58340,58343],{"class":53,"line":17203},[51,58329,11605],{"class":69},[51,58331,4586],{"class":278},[51,58333,13948],{"class":69},[51,58335,54768],{"class":65},[51,58337,54771],{"class":57},[51,58339,546],{"class":65},[51,58341,58342],{"class":61},"'.end'",[51,58344,282],{"class":65},[51,58346,58347,58350,58352,58354,58356,58358,58360],{"class":53,"line":17209},[51,58348,58349],{"class":65},"    end.",[51,58351,58185],{"class":57},[51,58353,546],{"class":65},[51,58355,58190],{"class":61},[51,58357,12819],{"class":65},[51,58359,54821],{"class":69},[51,58361,54824],{"class":65},[51,58363,58364,58367],{"class":53,"line":17214},[51,58365,58366],{"class":57},"      clearInterval",[51,58368,58369],{"class":65},"(timerId)\n",[51,58371,58372],{"class":53,"line":17228},[51,58373,58374],{"class":601},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[51,58376,58377,58380,58383,58386,58388],{"class":53,"line":17233},[51,58378,58379],{"class":65},"      arr.",[51,58381,58382],{"class":57},"splice",[51,58384,58385],{"class":65},"(random, ",[51,58387,759],{"class":278},[51,58389,282],{"class":65},[51,58391,58392],{"class":53,"line":17238},[51,58393,33836],{"class":65},[51,58395,58396],{"class":53,"line":17252},[51,58397,206],{"emptyLinePlaceholder":205},[51,58399,58400,58402,58404],{"class":53,"line":17264},[51,58401,52789],{"class":65},[51,58403,52185],{"class":51672},[51,58405,51679],{"class":65},[51,58407,58408,58410,58412],{"class":53,"line":17269},[51,58409,52157],{"class":65},[51,58411,52172],{"class":51672},[51,58413,51679],{"class":65},[51,58415,58416],{"class":53,"line":17282},[51,58417,206],{"emptyLinePlaceholder":205},[51,58419,58420,58422,58424],{"class":53,"line":17287},[51,58421,52157],{"class":65},[51,58423,51007],{"class":51672},[51,58425,51679],{"class":65},[10,58427,58428],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[513,58430,58432],{"id":58431},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[41,58434,58436],{"className":51005,"code":58435,"language":51007,"meta":46,"style":46},"\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",[48,58437,58438,58448,58462,58466,58474,58488,58508,58520,58528,58532,58540,58552,58560,58579,58596,58612,58622,58626,58634,58642,58646],{"__ignoreMap":46},[51,58439,58440,58442,58444,58446],{"class":53,"line":54},[51,58441,51669],{"class":65},[51,58443,51673],{"class":51672},[51,58445,51676],{"class":57},[51,58447,51679],{"class":65},[51,58449,58450,58452,58454,58456,58458,58460],{"class":53,"line":185},[51,58451,1452],{"class":65},[51,58453,51007],{"class":51672},[51,58455,51688],{"class":57},[51,58457,70],{"class":65},[51,58459,51693],{"class":61},[51,58461,51679],{"class":65},[51,58463,58464],{"class":53,"line":202},[51,58465,206],{"emptyLinePlaceholder":205},[51,58467,58468,58470,58472],{"class":53,"line":209},[51,58469,1452],{"class":65},[51,58471,51706],{"class":51672},[51,58473,51679],{"class":65},[51,58475,58476,58478,58480,58482,58484,58486],{"class":53,"line":223},[51,58477,52516],{"class":65},[51,58479,51716],{"class":51672},[51,58481,51719],{"class":57},[51,58483,70],{"class":65},[51,58485,51724],{"class":61},[51,58487,51679],{"class":65},[51,58489,58490,58492,58494,58496,58498,58500,58502,58504,58506],{"class":53,"line":237},[51,58491,52516],{"class":65},[51,58493,51716],{"class":51672},[51,58495,15304],{"class":57},[51,58497,70],{"class":65},[51,58499,51763],{"class":61},[51,58501,51743],{"class":57},[51,58503,70],{"class":65},[51,58505,51770],{"class":61},[51,58507,51679],{"class":65},[51,58509,58510,58512,58514,58516,58518],{"class":53,"line":242},[51,58511,52516],{"class":65},[51,58513,51779],{"class":51672},[51,58515,51782],{"class":65},[51,58517,51779],{"class":51672},[51,58519,51679],{"class":65},[51,58521,58522,58524,58526],{"class":53,"line":257},[51,58523,52157],{"class":65},[51,58525,51706],{"class":51672},[51,58527,51679],{"class":65},[51,58529,58530],{"class":53,"line":262},[51,58531,206],{"emptyLinePlaceholder":205},[51,58533,58534,58536,58538],{"class":53,"line":285},[51,58535,1452],{"class":65},[51,58537,52172],{"class":51672},[51,58539,51679],{"class":65},[51,58541,58542,58544,58546,58548,58550],{"class":53,"line":296},[51,58543,52516],{"class":65},[51,58545,54259],{"class":51672},[51,58547,54265],{"class":65},[51,58549,54259],{"class":51672},[51,58551,51679],{"class":65},[51,58553,58554,58556,58558],{"class":53,"line":307},[51,58555,52516],{"class":65},[51,58557,52185],{"class":51672},[51,58559,51679],{"class":65},[51,58561,58562,58564,58566,58568,58570,58572,58574,58577],{"class":53,"line":324},[51,58563,11605],{"class":69},[51,58565,54763],{"class":278},[51,58567,13948],{"class":69},[51,58569,54768],{"class":65},[51,58571,54771],{"class":57},[51,58573,546],{"class":65},[51,58575,58576],{"class":61},"'button'",[51,58578,282],{"class":65},[51,58580,58581,58584,58586,58588,58590,58592,58594],{"class":53,"line":329},[51,58582,58583],{"class":65},"    btn.",[51,58585,58185],{"class":57},[51,58587,546],{"class":65},[51,58589,58190],{"class":61},[51,58591,12819],{"class":65},[51,58593,54821],{"class":69},[51,58595,54824],{"class":65},[51,58597,58598,58601,58603,58605,58608,58610],{"class":53,"line":334},[51,58599,58600],{"class":69},"      const",[51,58602,2630],{"class":278},[51,58604,13948],{"class":69},[51,58606,58607],{"class":65}," Math.",[51,58609,58232],{"class":57},[51,58611,2366],{"class":65},[51,58613,58614,58617,58620],{"class":53,"line":340},[51,58615,58616],{"class":65},"      console.",[51,58618,58619],{"class":57},"log",[51,58621,558],{"class":65},[51,58623,58624],{"class":53,"line":345},[51,58625,33836],{"class":65},[51,58627,58628,58630,58632],{"class":53,"line":357},[51,58629,52789],{"class":65},[51,58631,52185],{"class":51672},[51,58633,51679],{"class":65},[51,58635,58636,58638,58640],{"class":53,"line":366},[51,58637,52157],{"class":65},[51,58639,52172],{"class":51672},[51,58641,51679],{"class":65},[51,58643,58644],{"class":53,"line":383},[51,58645,206],{"emptyLinePlaceholder":205},[51,58647,58648,58650,58652],{"class":53,"line":392},[51,58649,52157],{"class":65},[51,58651,51007],{"class":51672},[51,58653,51679],{"class":65},[10,58655,58656],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[10,58658,58659],{},"常量不可以重新赋值",[10,58661,58662],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[41,58664,58666],{"className":51005,"code":58665,"language":51007,"meta":46,"style":46},"\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",[48,58667,58668,58678,58692,58696,58704,58718,58738,58750,58758,58762,58770,58782,58790,58801,58819,58835,58849,58857,58861,58869,58877,58881],{"__ignoreMap":46},[51,58669,58670,58672,58674,58676],{"class":53,"line":54},[51,58671,51669],{"class":65},[51,58673,51673],{"class":51672},[51,58675,51676],{"class":57},[51,58677,51679],{"class":65},[51,58679,58680,58682,58684,58686,58688,58690],{"class":53,"line":185},[51,58681,1452],{"class":65},[51,58683,51007],{"class":51672},[51,58685,51688],{"class":57},[51,58687,70],{"class":65},[51,58689,51693],{"class":61},[51,58691,51679],{"class":65},[51,58693,58694],{"class":53,"line":202},[51,58695,206],{"emptyLinePlaceholder":205},[51,58697,58698,58700,58702],{"class":53,"line":209},[51,58699,1452],{"class":65},[51,58701,51706],{"class":51672},[51,58703,51679],{"class":65},[51,58705,58706,58708,58710,58712,58714,58716],{"class":53,"line":223},[51,58707,52516],{"class":65},[51,58709,51716],{"class":51672},[51,58711,51719],{"class":57},[51,58713,70],{"class":65},[51,58715,51724],{"class":61},[51,58717,51679],{"class":65},[51,58719,58720,58722,58724,58726,58728,58730,58732,58734,58736],{"class":53,"line":237},[51,58721,52516],{"class":65},[51,58723,51716],{"class":51672},[51,58725,15304],{"class":57},[51,58727,70],{"class":65},[51,58729,51763],{"class":61},[51,58731,51743],{"class":57},[51,58733,70],{"class":65},[51,58735,51770],{"class":61},[51,58737,51679],{"class":65},[51,58739,58740,58742,58744,58746,58748],{"class":53,"line":242},[51,58741,52516],{"class":65},[51,58743,51779],{"class":51672},[51,58745,51782],{"class":65},[51,58747,51779],{"class":51672},[51,58749,51679],{"class":65},[51,58751,58752,58754,58756],{"class":53,"line":257},[51,58753,52157],{"class":65},[51,58755,51706],{"class":51672},[51,58757,51679],{"class":65},[51,58759,58760],{"class":53,"line":262},[51,58761,206],{"emptyLinePlaceholder":205},[51,58763,58764,58766,58768],{"class":53,"line":285},[51,58765,1452],{"class":65},[51,58767,52172],{"class":51672},[51,58769,51679],{"class":65},[51,58771,58772,58774,58776,58778,58780],{"class":53,"line":296},[51,58773,52516],{"class":65},[51,58775,54259],{"class":51672},[51,58777,54265],{"class":65},[51,58779,54259],{"class":51672},[51,58781,51679],{"class":65},[51,58783,58784,58786,58788],{"class":53,"line":307},[51,58785,52516],{"class":65},[51,58787,52185],{"class":51672},[51,58789,51679],{"class":65},[51,58791,58792,58794,58796,58798],{"class":53,"line":324},[51,58793,11605],{"class":69},[51,58795,2630],{"class":278},[51,58797,13948],{"class":69},[51,58799,58800],{"class":278}," 10\n",[51,58802,58803,58805,58807,58809,58811,58813,58815,58817],{"class":53,"line":329},[51,58804,11605],{"class":69},[51,58806,54763],{"class":278},[51,58808,13948],{"class":69},[51,58810,54768],{"class":65},[51,58812,54771],{"class":57},[51,58814,546],{"class":65},[51,58816,58576],{"class":61},[51,58818,282],{"class":65},[51,58820,58821,58823,58825,58827,58829,58831,58833],{"class":53,"line":334},[51,58822,58583],{"class":65},[51,58824,58185],{"class":57},[51,58826,546],{"class":65},[51,58828,58190],{"class":61},[51,58830,12819],{"class":65},[51,58832,54821],{"class":69},[51,58834,54824],{"class":65},[51,58836,58837,58839,58841,58843,58845,58847],{"class":53,"line":340},[51,58838,58600],{"class":69},[51,58840,2630],{"class":278},[51,58842,13948],{"class":69},[51,58844,58607],{"class":65},[51,58846,58232],{"class":57},[51,58848,2366],{"class":65},[51,58850,58851,58853,58855],{"class":53,"line":345},[51,58852,58616],{"class":65},[51,58854,58619],{"class":57},[51,58856,558],{"class":65},[51,58858,58859],{"class":53,"line":357},[51,58860,33836],{"class":65},[51,58862,58863,58865,58867],{"class":53,"line":366},[51,58864,52789],{"class":65},[51,58866,52185],{"class":51672},[51,58868,51679],{"class":65},[51,58870,58871,58873,58875],{"class":53,"line":383},[51,58872,52157],{"class":65},[51,58874,52172],{"class":51672},[51,58876,51679],{"class":65},[51,58878,58879],{"class":53,"line":392},[51,58880,206],{"emptyLinePlaceholder":205},[51,58882,58883,58885,58887],{"class":53,"line":403},[51,58884,52157],{"class":65},[51,58886,51007],{"class":51672},[51,58888,51679],{"class":65},[10,58890,58891],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[41,58893,58895],{"className":51005,"code":58894,"language":51007,"meta":46,"style":46},"\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",[48,58896,58897,58907,58921,58925,58933,58947,58967,58979,58987,58991,58999,59011,59019,59029,59047,59063,59076,59084,59088,59096,59104,59108],{"__ignoreMap":46},[51,58898,58899,58901,58903,58905],{"class":53,"line":54},[51,58900,51669],{"class":65},[51,58902,51673],{"class":51672},[51,58904,51676],{"class":57},[51,58906,51679],{"class":65},[51,58908,58909,58911,58913,58915,58917,58919],{"class":53,"line":185},[51,58910,1452],{"class":65},[51,58912,51007],{"class":51672},[51,58914,51688],{"class":57},[51,58916,70],{"class":65},[51,58918,51693],{"class":61},[51,58920,51679],{"class":65},[51,58922,58923],{"class":53,"line":202},[51,58924,206],{"emptyLinePlaceholder":205},[51,58926,58927,58929,58931],{"class":53,"line":209},[51,58928,1452],{"class":65},[51,58930,51706],{"class":51672},[51,58932,51679],{"class":65},[51,58934,58935,58937,58939,58941,58943,58945],{"class":53,"line":223},[51,58936,52516],{"class":65},[51,58938,51716],{"class":51672},[51,58940,51719],{"class":57},[51,58942,70],{"class":65},[51,58944,51724],{"class":61},[51,58946,51679],{"class":65},[51,58948,58949,58951,58953,58955,58957,58959,58961,58963,58965],{"class":53,"line":237},[51,58950,52516],{"class":65},[51,58952,51716],{"class":51672},[51,58954,15304],{"class":57},[51,58956,70],{"class":65},[51,58958,51763],{"class":61},[51,58960,51743],{"class":57},[51,58962,70],{"class":65},[51,58964,51770],{"class":61},[51,58966,51679],{"class":65},[51,58968,58969,58971,58973,58975,58977],{"class":53,"line":242},[51,58970,52516],{"class":65},[51,58972,51779],{"class":51672},[51,58974,51782],{"class":65},[51,58976,51779],{"class":51672},[51,58978,51679],{"class":65},[51,58980,58981,58983,58985],{"class":53,"line":257},[51,58982,52157],{"class":65},[51,58984,51706],{"class":51672},[51,58986,51679],{"class":65},[51,58988,58989],{"class":53,"line":262},[51,58990,206],{"emptyLinePlaceholder":205},[51,58992,58993,58995,58997],{"class":53,"line":285},[51,58994,1452],{"class":65},[51,58996,52172],{"class":51672},[51,58998,51679],{"class":65},[51,59000,59001,59003,59005,59007,59009],{"class":53,"line":296},[51,59002,52516],{"class":65},[51,59004,54259],{"class":51672},[51,59006,54265],{"class":65},[51,59008,54259],{"class":51672},[51,59010,51679],{"class":65},[51,59012,59013,59015,59017],{"class":53,"line":307},[51,59014,52516],{"class":65},[51,59016,52185],{"class":51672},[51,59018,51679],{"class":65},[51,59020,59021,59023,59025,59027],{"class":53,"line":324},[51,59022,11605],{"class":69},[51,59024,2630],{"class":278},[51,59026,13948],{"class":69},[51,59028,58800],{"class":278},[51,59030,59031,59033,59035,59037,59039,59041,59043,59045],{"class":53,"line":329},[51,59032,11605],{"class":69},[51,59034,54763],{"class":278},[51,59036,13948],{"class":69},[51,59038,54768],{"class":65},[51,59040,54771],{"class":57},[51,59042,546],{"class":65},[51,59044,58576],{"class":61},[51,59046,282],{"class":65},[51,59048,59049,59051,59053,59055,59057,59059,59061],{"class":53,"line":334},[51,59050,58583],{"class":65},[51,59052,58185],{"class":57},[51,59054,546],{"class":65},[51,59056,58190],{"class":61},[51,59058,12819],{"class":65},[51,59060,54821],{"class":69},[51,59062,54824],{"class":65},[51,59064,59065,59068,59070,59072,59074],{"class":53,"line":340},[51,59066,59067],{"class":65},"      num ",[51,59069,70],{"class":69},[51,59071,58607],{"class":65},[51,59073,58232],{"class":57},[51,59075,2366],{"class":65},[51,59077,59078,59080,59082],{"class":53,"line":345},[51,59079,58616],{"class":65},[51,59081,58619],{"class":57},[51,59083,558],{"class":65},[51,59085,59086],{"class":53,"line":357},[51,59087,33836],{"class":65},[51,59089,59090,59092,59094],{"class":53,"line":366},[51,59091,52789],{"class":65},[51,59093,52185],{"class":51672},[51,59095,51679],{"class":65},[51,59097,59098,59100,59102],{"class":53,"line":383},[51,59099,52157],{"class":65},[51,59101,52172],{"class":51672},[51,59103,51679],{"class":65},[51,59105,59106],{"class":53,"line":392},[51,59107,206],{"emptyLinePlaceholder":205},[51,59109,59110,59112,59114],{"class":53,"line":403},[51,59111,52157],{"class":65},[51,59113,51007],{"class":51672},[51,59115,51679],{"class":65},[10,59117,59118],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[513,59120,59122],{"id":59121},"_324-事件监听版本","3.2.4 事件监听版本",[10,59124,59125],{},[460,59126],{"alt":46,"src":59127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[10,59129,59130],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[10,59132,59133],{},"这种方式会覆盖前边的事件监听:",[41,59135,59137],{"className":51005,"code":59136,"language":51007,"meta":46,"style":46},"\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",[48,59138,59139,59149,59163,59167,59175,59189,59209,59221,59229,59233,59241,59253,59261,59279,59293,59304,59308,59320,59330,59334,59342,59350,59354],{"__ignoreMap":46},[51,59140,59141,59143,59145,59147],{"class":53,"line":54},[51,59142,51669],{"class":65},[51,59144,51673],{"class":51672},[51,59146,51676],{"class":57},[51,59148,51679],{"class":65},[51,59150,59151,59153,59155,59157,59159,59161],{"class":53,"line":185},[51,59152,1452],{"class":65},[51,59154,51007],{"class":51672},[51,59156,51688],{"class":57},[51,59158,70],{"class":65},[51,59160,51693],{"class":61},[51,59162,51679],{"class":65},[51,59164,59165],{"class":53,"line":202},[51,59166,206],{"emptyLinePlaceholder":205},[51,59168,59169,59171,59173],{"class":53,"line":209},[51,59170,1452],{"class":65},[51,59172,51706],{"class":51672},[51,59174,51679],{"class":65},[51,59176,59177,59179,59181,59183,59185,59187],{"class":53,"line":223},[51,59178,52516],{"class":65},[51,59180,51716],{"class":51672},[51,59182,51719],{"class":57},[51,59184,70],{"class":65},[51,59186,51724],{"class":61},[51,59188,51679],{"class":65},[51,59190,59191,59193,59195,59197,59199,59201,59203,59205,59207],{"class":53,"line":237},[51,59192,52516],{"class":65},[51,59194,51716],{"class":51672},[51,59196,15304],{"class":57},[51,59198,70],{"class":65},[51,59200,51763],{"class":61},[51,59202,51743],{"class":57},[51,59204,70],{"class":65},[51,59206,51770],{"class":61},[51,59208,51679],{"class":65},[51,59210,59211,59213,59215,59217,59219],{"class":53,"line":242},[51,59212,52516],{"class":65},[51,59214,51779],{"class":51672},[51,59216,51782],{"class":65},[51,59218,51779],{"class":51672},[51,59220,51679],{"class":65},[51,59222,59223,59225,59227],{"class":53,"line":257},[51,59224,52157],{"class":65},[51,59226,51706],{"class":51672},[51,59228,51679],{"class":65},[51,59230,59231],{"class":53,"line":262},[51,59232,206],{"emptyLinePlaceholder":205},[51,59234,59235,59237,59239],{"class":53,"line":285},[51,59236,1452],{"class":65},[51,59238,52172],{"class":51672},[51,59240,51679],{"class":65},[51,59242,59243,59245,59247,59249,59251],{"class":53,"line":296},[51,59244,52516],{"class":65},[51,59246,54259],{"class":51672},[51,59248,54265],{"class":65},[51,59250,54259],{"class":51672},[51,59252,51679],{"class":65},[51,59254,59255,59257,59259],{"class":53,"line":307},[51,59256,52516],{"class":65},[51,59258,52185],{"class":51672},[51,59260,51679],{"class":65},[51,59262,59263,59265,59267,59269,59271,59273,59275,59277],{"class":53,"line":324},[51,59264,11605],{"class":69},[51,59266,54763],{"class":278},[51,59268,13948],{"class":69},[51,59270,54768],{"class":65},[51,59272,54771],{"class":57},[51,59274,546],{"class":65},[51,59276,58576],{"class":61},[51,59278,282],{"class":65},[51,59280,59281,59283,59286,59288,59291],{"class":53,"line":329},[51,59282,58583],{"class":65},[51,59284,59285],{"class":57},"onclick",[51,59287,13948],{"class":69},[51,59289,59290],{"class":69}," function",[51,59292,54824],{"class":65},[51,59294,59295,59298,59300,59302],{"class":53,"line":334},[51,59296,59297],{"class":57},"      alert",[51,59299,546],{"class":65},[51,59301,1014],{"class":278},[51,59303,282],{"class":65},[51,59305,59306],{"class":53,"line":340},[51,59307,2577],{"class":65},[51,59309,59310,59312,59314,59316,59318],{"class":53,"line":345},[51,59311,58583],{"class":65},[51,59313,59285],{"class":57},[51,59315,13948],{"class":69},[51,59317,59290],{"class":69},[51,59319,54824],{"class":65},[51,59321,59322,59324,59326,59328],{"class":53,"line":357},[51,59323,59297],{"class":57},[51,59325,546],{"class":65},[51,59327,1292],{"class":278},[51,59329,282],{"class":65},[51,59331,59332],{"class":53,"line":366},[51,59333,2577],{"class":65},[51,59335,59336,59338,59340],{"class":53,"line":383},[51,59337,52789],{"class":65},[51,59339,52185],{"class":51672},[51,59341,51679],{"class":65},[51,59343,59344,59346,59348],{"class":53,"line":392},[51,59345,52157],{"class":65},[51,59347,52172],{"class":51672},[51,59349,51679],{"class":65},[51,59351,59352],{"class":53,"line":403},[51,59353,206],{"emptyLinePlaceholder":205},[51,59355,59356,59358,59360],{"class":53,"line":409},[51,59357,52157],{"class":65},[51,59359,51007],{"class":51672},[51,59361,51679],{"class":65},[10,59363,59364],{},"只要点击就输出结果为22,前边11被覆盖了",[41,59366,59368],{"className":51005,"code":59367,"language":51007,"meta":46,"style":46},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[48,59369,59370,59375,59380,59384,59389,59394],{"__ignoreMap":46},[51,59371,59372],{"class":53,"line":54},[51,59373,59374],{"class":65},"  btn.addEventListener('click', function () {\n",[51,59376,59377],{"class":53,"line":185},[51,59378,59379],{"class":65},"      alert(11)\n",[51,59381,59382],{"class":53,"line":202},[51,59383,33836],{"class":65},[51,59385,59386],{"class":53,"line":209},[51,59387,59388],{"class":65},"    btn.addEventListener('click', function () {\n",[51,59390,59391],{"class":53,"line":223},[51,59392,59393],{"class":65},"      alert(22)\n",[51,59395,59396],{"class":53,"line":237},[51,59397,33836],{"class":65},[10,59399,59400],{},"点击第一次输出11,第二次点击为22",[513,59402,59404],{"id":59403},"_325-事件类型","3.2.5 事件类型",[10,59406,59407],{},[460,59408],{"alt":46,"src":59409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22381,59411,59413],{"id":59412},"_3251-鼠标事件","3.2.5.1 鼠标事件",[10,59415,59416],{},"补充知识:",[10,59418,59419],{},"轮播图自动播放模块,可以使用",[10,59421,59422],{},"let timerId = setInterval(function () {",[10,59424,59425],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[10,59427,59428],{},"用js方法模拟进行点击事件,click必须加()",[10,59430,59431],{},"next.click()",[10,59433,59434],{},"}, 1000)",[10,59436,59437],{},[460,59438],{"alt":46,"src":59439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[41,59441,59443],{"className":53439,"code":59442,"language":53441,"meta":46,"style":46},"\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",[48,59444,59445,59449,59459,59473,59477,59485,59500,59520,59540,59553,59561,59566,59571,59575,59579,59584,59589,59594,59599,59603,59607,59612,59617,59622,59626,59630,59635,59639,59644,59649,59653,59657,59662,59667,59672,59677,59682,59686,59690,59695,59700,59705,59710,59715,59719,59723,59728,59733,59738,59743,59748,59753,59758,59763,59768,59773,59777,59781,59786,59791,59795,59799,59804,59809,59813,59818,59823,59827,59831,59836,59840,59845,59850,59854,59859,59863,59867,59872,59877,59882,59887,59892,59897,59902,59906,59910,59914,59919,59924,59929,59934,59938,59946,59954,59958,59966,59981,59995,60016,60024,60038,60051,60066,60085,60097,60109,60121,60133,60145,60157,60169,60177,60192,60216,60240,60248,60256,60264,60272,60277,60282,60287,60292,60297,60302,60307,60312,60317,60322,60326,60331,60336,60341,60346,60351,60356,60361,60366,60371,60375,60380,60385,60390,60395,60400,60405,60410,60415,60420,60425,60430,60435,60439,60443,60448,60453,60458,60462,60467,60472,60477,60482,60487,60491,60496,60500,60504,60508,60512,60516,60520,60525,60530,60535,60540,60545,60550,60555,60560,60565,60569,60573,60578,60583,60588,60593,60598,60602,60607,60612,60617,60622,60627,60632,60636,60640,60645,60649,60654,60658,60663,60668,60673,60678,60683,60688,60692,60700,60708,60712],{"__ignoreMap":46},[51,59446,59447],{"class":53,"line":54},[51,59448,206],{"emptyLinePlaceholder":205},[51,59450,59451,59453,59455,59457],{"class":53,"line":185},[51,59452,51669],{"class":65},[51,59454,51673],{"class":69},[51,59456,51676],{"class":278},[51,59458,51679],{"class":65},[51,59460,59461,59463,59465,59467,59469,59471],{"class":53,"line":202},[51,59462,1452],{"class":65},[51,59464,51007],{"class":51672},[51,59466,51688],{"class":57},[51,59468,70],{"class":65},[51,59470,51693],{"class":61},[51,59472,51679],{"class":65},[51,59474,59475],{"class":53,"line":209},[51,59476,206],{"emptyLinePlaceholder":205},[51,59478,59479,59481,59483],{"class":53,"line":223},[51,59480,1452],{"class":65},[51,59482,51706],{"class":51672},[51,59484,51679],{"class":65},[51,59486,59487,59489,59491,59493,59495,59497],{"class":53,"line":237},[51,59488,52516],{"class":65},[51,59490,51716],{"class":51672},[51,59492,51719],{"class":57},[51,59494,70],{"class":65},[51,59496,51724],{"class":61},[51,59498,59499],{"class":65}," \u002F>\n",[51,59501,59502,59504,59506,59508,59510,59512,59514,59516,59518],{"class":53,"line":242},[51,59503,52516],{"class":65},[51,59505,51716],{"class":51672},[51,59507,51735],{"class":57},[51,59509,70],{"class":65},[51,59511,51740],{"class":61},[51,59513,51743],{"class":57},[51,59515,70],{"class":65},[51,59517,51748],{"class":61},[51,59519,59499],{"class":65},[51,59521,59522,59524,59526,59528,59530,59532,59534,59536,59538],{"class":53,"line":257},[51,59523,52516],{"class":65},[51,59525,51716],{"class":51672},[51,59527,15304],{"class":57},[51,59529,70],{"class":65},[51,59531,51763],{"class":61},[51,59533,51743],{"class":57},[51,59535,70],{"class":65},[51,59537,51770],{"class":61},[51,59539,59499],{"class":65},[51,59541,59542,59544,59546,59549,59551],{"class":53,"line":262},[51,59543,52516],{"class":65},[51,59545,51779],{"class":51672},[51,59547,59548],{"class":65},">轮播图点击切换\u003C\u002F",[51,59550,51779],{"class":51672},[51,59552,51679],{"class":65},[51,59554,59555,59557,59559],{"class":53,"line":285},[51,59556,52516],{"class":65},[51,59558,464],{"class":51672},[51,59560,51679],{"class":65},[51,59562,59563],{"class":53,"line":296},[51,59564,59565],{"class":65},"    * {\n",[51,59567,59568],{"class":53,"line":307},[51,59569,59570],{"class":65},"      box-sizing: border-box;\n",[51,59572,59573],{"class":53,"line":324},[51,59574,2577],{"class":65},[51,59576,59577],{"class":53,"line":329},[51,59578,206],{"emptyLinePlaceholder":205},[51,59580,59581],{"class":53,"line":334},[51,59582,59583],{"class":65},"    .slider {\n",[51,59585,59586],{"class":53,"line":340},[51,59587,59588],{"class":65},"      width: 560px;\n",[51,59590,59591],{"class":53,"line":345},[51,59592,59593],{"class":65},"      height: 400px;\n",[51,59595,59596],{"class":53,"line":357},[51,59597,59598],{"class":65},"      overflow: hidden;\n",[51,59600,59601],{"class":53,"line":366},[51,59602,2577],{"class":65},[51,59604,59605],{"class":53,"line":383},[51,59606,206],{"emptyLinePlaceholder":205},[51,59608,59609],{"class":53,"line":392},[51,59610,59611],{"class":65},"    .slider-wrapper {\n",[51,59613,59614],{"class":53,"line":403},[51,59615,59616],{"class":65},"      width: 100%;\n",[51,59618,59619],{"class":53,"line":409},[51,59620,59621],{"class":65},"      height: 320px;\n",[51,59623,59624],{"class":53,"line":414},[51,59625,2577],{"class":65},[51,59627,59628],{"class":53,"line":433},[51,59629,206],{"emptyLinePlaceholder":205},[51,59631,59632],{"class":53,"line":439},[51,59633,59634],{"class":65},"    .slider-wrapper img {\n",[51,59636,59637],{"class":53,"line":444},[51,59638,59616],{"class":65},[51,59640,59641],{"class":53,"line":453},[51,59642,59643],{"class":65},"      height: 100%;\n",[51,59645,59646],{"class":53,"line":2174},[51,59647,59648],{"class":65},"      display: block;\n",[51,59650,59651],{"class":53,"line":2965},[51,59652,2577],{"class":65},[51,59654,59655],{"class":53,"line":2979},[51,59656,206],{"emptyLinePlaceholder":205},[51,59658,59659],{"class":53,"line":2987},[51,59660,59661],{"class":65},"    .slider-footer {\n",[51,59663,59664],{"class":53,"line":2992},[51,59665,59666],{"class":65},"      height: 80px;\n",[51,59668,59669],{"class":53,"line":2998},[51,59670,59671],{"class":65},"      background-color: rgb(100, 67, 68);\n",[51,59673,59674],{"class":53,"line":3004},[51,59675,59676],{"class":65},"      padding: 12px 12px 0 12px;\n",[51,59678,59679],{"class":53,"line":3009},[51,59680,59681],{"class":65},"      position: relative;\n",[51,59683,59684],{"class":53,"line":8332},[51,59685,2577],{"class":65},[51,59687,59688],{"class":53,"line":8356},[51,59689,206],{"emptyLinePlaceholder":205},[51,59691,59692],{"class":53,"line":8361},[51,59693,59694],{"class":65},"    .slider-footer .toggle {\n",[51,59696,59697],{"class":53,"line":8367},[51,59698,59699],{"class":65},"      position: absolute;\n",[51,59701,59702],{"class":53,"line":8394},[51,59703,59704],{"class":65},"      right: 0;\n",[51,59706,59707],{"class":53,"line":8399},[51,59708,59709],{"class":65},"      top: 12px;\n",[51,59711,59712],{"class":53,"line":8405},[51,59713,59714],{"class":65},"      display: flex;\n",[51,59716,59717],{"class":53,"line":8417},[51,59718,2577],{"class":65},[51,59720,59721],{"class":53,"line":8429},[51,59722,206],{"emptyLinePlaceholder":205},[51,59724,59725],{"class":53,"line":8441},[51,59726,59727],{"class":65},"    .slider-footer .toggle button {\n",[51,59729,59730],{"class":53,"line":10100},[51,59731,59732],{"class":65},"      margin-right: 12px;\n",[51,59734,59735],{"class":53,"line":10125},[51,59736,59737],{"class":65},"      width: 28px;\n",[51,59739,59740],{"class":53,"line":10148},[51,59741,59742],{"class":65},"      height: 28px;\n",[51,59744,59745],{"class":53,"line":10172},[51,59746,59747],{"class":65},"      appearance: none;\n",[51,59749,59750],{"class":53,"line":10177},[51,59751,59752],{"class":65},"      border: none;\n",[51,59754,59755],{"class":53,"line":10182},[51,59756,59757],{"class":65},"      background: rgba(255, 255, 255, 0.1);\n",[51,59759,59760],{"class":53,"line":10187},[51,59761,59762],{"class":65},"      color: #fff;\n",[51,59764,59765],{"class":53,"line":10196},[51,59766,59767],{"class":65},"      border-radius: 4px;\n",[51,59769,59770],{"class":53,"line":10201},[51,59771,59772],{"class":65},"      cursor: pointer;\n",[51,59774,59775],{"class":53,"line":10207},[51,59776,2577],{"class":65},[51,59778,59779],{"class":53,"line":10228},[51,59780,206],{"emptyLinePlaceholder":205},[51,59782,59783],{"class":53,"line":10234},[51,59784,59785],{"class":65},"    .slider-footer .toggle button:hover {\n",[51,59787,59788],{"class":53,"line":10248},[51,59789,59790],{"class":65},"      background: rgba(255, 255, 255, 0.2);\n",[51,59792,59793],{"class":53,"line":10254},[51,59794,2577],{"class":65},[51,59796,59797],{"class":53,"line":10281},[51,59798,206],{"emptyLinePlaceholder":205},[51,59800,59801],{"class":53,"line":10290},[51,59802,59803],{"class":65},"    .slider-footer p {\n",[51,59805,59806],{"class":53,"line":10296},[51,59807,59808],{"class":65},"      margin: 0;\n",[51,59810,59811],{"class":53,"line":10304},[51,59812,59762],{"class":65},[51,59814,59815],{"class":53,"line":10309},[51,59816,59817],{"class":65},"      font-size: 18px;\n",[51,59819,59820],{"class":53,"line":16987},[51,59821,59822],{"class":65},"      margin-bottom: 10px;\n",[51,59824,59825],{"class":53,"line":16993},[51,59826,2577],{"class":65},[51,59828,59829],{"class":53,"line":17016},[51,59830,206],{"emptyLinePlaceholder":205},[51,59832,59833],{"class":53,"line":17022},[51,59834,59835],{"class":65},"    .slider-indicator {\n",[51,59837,59838],{"class":53,"line":17045},[51,59839,59808],{"class":65},[51,59841,59842],{"class":53,"line":17059},[51,59843,59844],{"class":65},"      padding: 0;\n",[51,59846,59847],{"class":53,"line":17079},[51,59848,59849],{"class":65},"      list-style: none;\n",[51,59851,59852],{"class":53,"line":17085},[51,59853,59714],{"class":65},[51,59855,59856],{"class":53,"line":17096},[51,59857,59858],{"class":65},"      align-items: center;\n",[51,59860,59861],{"class":53,"line":17119},[51,59862,2577],{"class":65},[51,59864,59865],{"class":53,"line":17141},[51,59866,206],{"emptyLinePlaceholder":205},[51,59868,59869],{"class":53,"line":17146},[51,59870,59871],{"class":65},"    .slider-indicator li {\n",[51,59873,59874],{"class":53,"line":17152},[51,59875,59876],{"class":65},"      width: 8px;\n",[51,59878,59879],{"class":53,"line":17166},[51,59880,59881],{"class":65},"      height: 8px;\n",[51,59883,59884],{"class":53,"line":17179},[51,59885,59886],{"class":65},"      margin: 4px;\n",[51,59888,59889],{"class":53,"line":17184},[51,59890,59891],{"class":65},"      border-radius: 50%;\n",[51,59893,59894],{"class":53,"line":17198},[51,59895,59896],{"class":65},"      background: #fff;\n",[51,59898,59899],{"class":53,"line":17203},[51,59900,59901],{"class":65},"      opacity: 0.4;\n",[51,59903,59904],{"class":53,"line":17209},[51,59905,59772],{"class":65},[51,59907,59908],{"class":53,"line":17214},[51,59909,2577],{"class":65},[51,59911,59912],{"class":53,"line":17228},[51,59913,206],{"emptyLinePlaceholder":205},[51,59915,59916],{"class":53,"line":17233},[51,59917,59918],{"class":65},"    .slider-indicator li.active {\n",[51,59920,59921],{"class":53,"line":17238},[51,59922,59923],{"class":65},"      width: 12px;\n",[51,59925,59926],{"class":53,"line":17252},[51,59927,59928],{"class":65},"      height: 12px;\n",[51,59930,59931],{"class":53,"line":17264},[51,59932,59933],{"class":65},"      opacity: 1;\n",[51,59935,59936],{"class":53,"line":17269},[51,59937,2577],{"class":65},[51,59939,59940,59942,59944],{"class":53,"line":17282},[51,59941,52789],{"class":65},[51,59943,464],{"class":51672},[51,59945,51679],{"class":65},[51,59947,59948,59950,59952],{"class":53,"line":17287},[51,59949,52157],{"class":65},[51,59951,51706],{"class":51672},[51,59953,51679],{"class":65},[51,59955,59956],{"class":53,"line":17292},[51,59957,206],{"emptyLinePlaceholder":205},[51,59959,59960,59962,59964],{"class":53,"line":17297},[51,59961,1452],{"class":65},[51,59963,52172],{"class":51672},[51,59965,51679],{"class":65},[51,59967,59968,59970,59972,59974,59976,59979],{"class":53,"line":17310},[51,59969,52516],{"class":65},[51,59971,51983],{"class":51672},[51,59973,53858],{"class":57},[51,59975,70],{"class":65},[51,59977,59978],{"class":61},"\"slider\"",[51,59980,51679],{"class":65},[51,59982,59983,59985,59987,59989,59991,59993],{"class":53,"line":17315},[51,59984,51713],{"class":65},[51,59986,51983],{"class":51672},[51,59988,53858],{"class":57},[51,59990,70],{"class":65},[51,59992,55599],{"class":61},[51,59994,51679],{"class":65},[51,59996,59997,59999,60001,60003,60005,60008,60010,60012,60014],{"class":53,"line":33008},[51,59998,55606],{"class":65},[51,60000,460],{"class":51672},[51,60002,55611],{"class":57},[51,60004,70],{"class":65},[51,60006,60007],{"class":61},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[51,60009,55619],{"class":57},[51,60011,70],{"class":65},[51,60013,8036],{"class":61},[51,60015,59499],{"class":65},[51,60017,60018,60020,60022],{"class":53,"line":33014},[51,60019,52148],{"class":65},[51,60021,51983],{"class":51672},[51,60023,51679],{"class":65},[51,60025,60026,60028,60030,60032,60034,60036],{"class":53,"line":33020},[51,60027,51713],{"class":65},[51,60029,51983],{"class":51672},[51,60031,53858],{"class":57},[51,60033,70],{"class":65},[51,60035,55646],{"class":61},[51,60037,51679],{"class":65},[51,60039,60040,60042,60044,60047,60049],{"class":53,"line":33026},[51,60041,55606],{"class":65},[51,60043,10],{"class":51672},[51,60045,60046],{"class":65},">对人类来说会不会太超前了？\u003C\u002F",[51,60048,10],{"class":51672},[51,60050,51679],{"class":65},[51,60052,60053,60055,60057,60059,60061,60064],{"class":53,"line":33032},[51,60054,55606],{"class":65},[51,60056,1549],{"class":51672},[51,60058,53858],{"class":57},[51,60060,70],{"class":65},[51,60062,60063],{"class":61},"\"slider-indicator\"",[51,60065,51679],{"class":65},[51,60067,60068,60070,60072,60074,60076,60079,60081,60083],{"class":53,"line":33043},[51,60069,55674],{"class":65},[51,60071,22],{"class":51672},[51,60073,53858],{"class":57},[51,60075,70],{"class":65},[51,60077,60078],{"class":61},"\"active\"",[51,60080,55686],{"class":65},[51,60082,22],{"class":51672},[51,60084,51679],{"class":65},[51,60086,60087,60089,60091,60093,60095],{"class":53,"line":33049},[51,60088,55674],{"class":65},[51,60090,22],{"class":51672},[51,60092,55686],{"class":65},[51,60094,22],{"class":51672},[51,60096,51679],{"class":65},[51,60098,60099,60101,60103,60105,60107],{"class":53,"line":33069},[51,60100,55674],{"class":65},[51,60102,22],{"class":51672},[51,60104,55686],{"class":65},[51,60106,22],{"class":51672},[51,60108,51679],{"class":65},[51,60110,60111,60113,60115,60117,60119],{"class":53,"line":33075},[51,60112,55674],{"class":65},[51,60114,22],{"class":51672},[51,60116,55686],{"class":65},[51,60118,22],{"class":51672},[51,60120,51679],{"class":65},[51,60122,60123,60125,60127,60129,60131],{"class":53,"line":33086},[51,60124,55674],{"class":65},[51,60126,22],{"class":51672},[51,60128,55686],{"class":65},[51,60130,22],{"class":51672},[51,60132,51679],{"class":65},[51,60134,60135,60137,60139,60141,60143],{"class":53,"line":33092},[51,60136,55674],{"class":65},[51,60138,22],{"class":51672},[51,60140,55686],{"class":65},[51,60142,22],{"class":51672},[51,60144,51679],{"class":65},[51,60146,60147,60149,60151,60153,60155],{"class":53,"line":33098},[51,60148,55674],{"class":65},[51,60150,22],{"class":51672},[51,60152,55686],{"class":65},[51,60154,22],{"class":51672},[51,60156,51679],{"class":65},[51,60158,60159,60161,60163,60165,60167],{"class":53,"line":33104},[51,60160,55674],{"class":65},[51,60162,22],{"class":51672},[51,60164,55686],{"class":65},[51,60166,22],{"class":51672},[51,60168,51679],{"class":65},[51,60170,60171,60173,60175],{"class":53,"line":33110},[51,60172,55779],{"class":65},[51,60174,1549],{"class":51672},[51,60176,51679],{"class":65},[51,60178,60179,60181,60183,60185,60187,60190],{"class":53,"line":33116},[51,60180,55606],{"class":65},[51,60182,51983],{"class":51672},[51,60184,53858],{"class":57},[51,60186,70],{"class":65},[51,60188,60189],{"class":61},"\"toggle\"",[51,60191,51679],{"class":65},[51,60193,60194,60196,60198,60200,60202,60205,60207,60210,60212,60214],{"class":53,"line":33122},[51,60195,55674],{"class":65},[51,60197,54259],{"class":51672},[51,60199,53858],{"class":57},[51,60201,70],{"class":65},[51,60203,60204],{"class":61},"\"prev\"",[51,60206,1502],{"class":65},[51,60208,60209],{"class":278},"&lt;",[51,60211,52157],{"class":65},[51,60213,54259],{"class":51672},[51,60215,51679],{"class":65},[51,60217,60218,60220,60222,60224,60226,60229,60231,60234,60236,60238],{"class":53,"line":33128},[51,60219,55674],{"class":65},[51,60221,54259],{"class":51672},[51,60223,53858],{"class":57},[51,60225,70],{"class":65},[51,60227,60228],{"class":61},"\"next\"",[51,60230,1502],{"class":65},[51,60232,60233],{"class":278},"&gt;",[51,60235,52157],{"class":65},[51,60237,54259],{"class":51672},[51,60239,51679],{"class":65},[51,60241,60242,60244,60246],{"class":53,"line":33148},[51,60243,55779],{"class":65},[51,60245,51983],{"class":51672},[51,60247,51679],{"class":65},[51,60249,60250,60252,60254],{"class":53,"line":33154},[51,60251,52148],{"class":65},[51,60253,51983],{"class":51672},[51,60255,51679],{"class":65},[51,60257,60258,60260,60262],{"class":53,"line":33170},[51,60259,52789],{"class":65},[51,60261,51983],{"class":51672},[51,60263,51679],{"class":65},[51,60265,60266,60268,60270],{"class":53,"line":33176},[51,60267,52516],{"class":65},[51,60269,52185],{"class":51672},[51,60271,51679],{"class":65},[51,60273,60274],{"class":53,"line":33190},[51,60275,60276],{"class":65},"    \u002F\u002F 1. 初始数据\n",[51,60278,60279],{"class":53,"line":33196},[51,60280,60281],{"class":65},"    const data = [\n",[51,60283,60284],{"class":53,"line":33211},[51,60285,60286],{"class":65},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[51,60288,60289],{"class":53,"line":33217},[51,60290,60291],{"class":65},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[51,60293,60294],{"class":53,"line":33226},[51,60295,60296],{"class":65},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[51,60298,60299],{"class":53,"line":33232},[51,60300,60301],{"class":65},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[51,60303,60304],{"class":53,"line":33241},[51,60305,60306],{"class":65},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[51,60308,60309],{"class":53,"line":33247},[51,60310,60311],{"class":65},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[51,60313,60314],{"class":53,"line":33253},[51,60315,60316],{"class":65},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[51,60318,60319],{"class":53,"line":33262},[51,60320,60321],{"class":65},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[51,60323,60324],{"class":53,"line":33268},[51,60325,53481],{"class":65},[51,60327,60328],{"class":53,"line":33279},[51,60329,60330],{"class":65},"    \u002F\u002F 获取元素\n",[51,60332,60333],{"class":53,"line":33285},[51,60334,60335],{"class":65},"    const img = document.querySelector('.slider-wrapper img')\n",[51,60337,60338],{"class":53,"line":33304},[51,60339,60340],{"class":65},"    const p = document.querySelector('.slider-footer p')\n",[51,60342,60343],{"class":53,"line":33310},[51,60344,60345],{"class":65},"    const footer = document.querySelector('.slider-footer')\n",[51,60347,60348],{"class":53,"line":33321},[51,60349,60350],{"class":65},"    \u002F\u002F 1. 右按钮业务\n",[51,60352,60353],{"class":53,"line":33327},[51,60354,60355],{"class":65},"    \u002F\u002F 1.1 获取右侧按钮 \n",[51,60357,60358],{"class":53,"line":33347},[51,60359,60360],{"class":65},"    const next = document.querySelector('.next')\n",[51,60362,60363],{"class":53,"line":33363},[51,60364,60365],{"class":65},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[51,60367,60368],{"class":53,"line":33369},[51,60369,60370],{"class":65},"    \u002F\u002F 1.2 注册点击事件\n",[51,60372,60373],{"class":53,"line":33383},[51,60374,206],{"emptyLinePlaceholder":205},[51,60376,60377],{"class":53,"line":33389},[51,60378,60379],{"class":65},"    next.addEventListener('click', function () {\n",[51,60381,60382],{"class":53,"line":33395},[51,60383,60384],{"class":65},"      \u002F\u002F console.log(11)\n",[51,60386,60387],{"class":53,"line":33406},[51,60388,60389],{"class":65},"      i++\n",[51,60391,60392],{"class":53,"line":33412},[51,60393,60394],{"class":65},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[51,60396,60397],{"class":53,"line":33418},[51,60398,60399],{"class":65},"      \u002F\u002F if (i >= 8) {\n",[51,60401,60402],{"class":53,"line":33428},[51,60403,60404],{"class":65},"      \u002F\u002F   i = 0\n",[51,60406,60407],{"class":53,"line":33434},[51,60408,60409],{"class":65},"      \u002F\u002F }\n",[51,60411,60412],{"class":53,"line":33445},[51,60413,60414],{"class":65},"      i = i >= data.length ? 0 : i\n",[51,60416,60417],{"class":53,"line":33451},[51,60418,60419],{"class":65},"      \u002F\u002F 1.3 得到对应的对象\n",[51,60421,60422],{"class":53,"line":33461},[51,60423,60424],{"class":65},"      \u002F\u002F console.log(data[i])\n",[51,60426,60427],{"class":53,"line":33466},[51,60428,60429],{"class":65},"      \u002F\u002F 调用函数\n",[51,60431,60432],{"class":53,"line":33472},[51,60433,60434],{"class":65},"      toggle()\n",[51,60436,60437],{"class":53,"line":33521},[51,60438,33836],{"class":65},[51,60440,60441],{"class":53,"line":33568},[51,60442,206],{"emptyLinePlaceholder":205},[51,60444,60445],{"class":53,"line":33573},[51,60446,60447],{"class":65},"    \u002F\u002F 2. 左侧按钮业务\n",[51,60449,60450],{"class":53,"line":33579},[51,60451,60452],{"class":65},"    \u002F\u002F 2.1 获取左侧按钮 \n",[51,60454,60455],{"class":53,"line":33598},[51,60456,60457],{"class":65},"    const prev = document.querySelector('.prev')\n",[51,60459,60460],{"class":53,"line":33604},[51,60461,60370],{"class":65},[51,60463,60464],{"class":53,"line":33624},[51,60465,60466],{"class":65},"    prev.addEventListener('click', function () {\n",[51,60468,60469],{"class":53,"line":33630},[51,60470,60471],{"class":65},"      i--\n",[51,60473,60474],{"class":53,"line":33636},[51,60475,60476],{"class":65},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[51,60478,60479],{"class":53,"line":33646},[51,60480,60481],{"class":65},"      \u002F\u002F if (i \u003C 0) {\n",[51,60483,60484],{"class":53,"line":33651},[51,60485,60486],{"class":65},"      \u002F\u002F   i = 7\n",[51,60488,60489],{"class":53,"line":33657},[51,60490,60409],{"class":65},[51,60492,60493],{"class":53,"line":33673},[51,60494,60495],{"class":65},"      i = i \u003C 0 ? data.length - 1 : i\n",[51,60497,60498],{"class":53,"line":33718},[51,60499,60419],{"class":65},[51,60501,60502],{"class":53,"line":33724},[51,60503,60424],{"class":65},[51,60505,60506],{"class":53,"line":33730},[51,60507,60429],{"class":65},[51,60509,60510],{"class":53,"line":33736},[51,60511,60434],{"class":65},[51,60513,60514],{"class":53,"line":33747},[51,60515,33836],{"class":65},[51,60517,60518],{"class":53,"line":33753},[51,60519,206],{"emptyLinePlaceholder":205},[51,60521,60522],{"class":53,"line":33759},[51,60523,60524],{"class":65},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[51,60526,60527],{"class":53,"line":33765},[51,60528,60529],{"class":65},"    function toggle() {\n",[51,60531,60532],{"class":53,"line":33783},[51,60533,60534],{"class":65},"      \u002F\u002F 1.4 渲染对应的数据\n",[51,60536,60537],{"class":53,"line":33797},[51,60538,60539],{"class":65},"      img.src = data[i].url\n",[51,60541,60542],{"class":53,"line":33806},[51,60543,60544],{"class":65},"      p.innerHTML = data[i].title\n",[51,60546,60547],{"class":53,"line":33815},[51,60548,60549],{"class":65},"      footer.style.backgroundColor = data[i].color\n",[51,60551,60552],{"class":53,"line":33824},[51,60553,60554],{"class":65},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[51,60556,60557],{"class":53,"line":33833},[51,60558,60559],{"class":65},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[51,60561,60562],{"class":53,"line":33839},[51,60563,60564],{"class":65},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[51,60566,60567],{"class":53,"line":33845},[51,60568,2577],{"class":65},[51,60570,60571],{"class":53,"line":33853},[51,60572,206],{"emptyLinePlaceholder":205},[51,60574,60575],{"class":53,"line":33858},[51,60576,60577],{"class":65},"    \u002F\u002F 3. 自动播放模块\n",[51,60579,60580],{"class":53,"line":33864},[51,60581,60582],{"class":65},"    let timerId = setInterval(function () {\n",[51,60584,60585],{"class":53,"line":33875},[51,60586,60587],{"class":65},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[51,60589,60590],{"class":53,"line":33881},[51,60591,60592],{"class":65},"      next.click()\n",[51,60594,60595],{"class":53,"line":33901},[51,60596,60597],{"class":65},"    }, 1000)\n",[51,60599,60600],{"class":53,"line":33907},[51,60601,206],{"emptyLinePlaceholder":205},[51,60603,60604],{"class":53,"line":33913},[51,60605,60606],{"class":65},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[51,60608,60609],{"class":53,"line":33919},[51,60610,60611],{"class":65},"    const slider = document.querySelector('.slider')\n",[51,60613,60614],{"class":53,"line":33936},[51,60615,60616],{"class":65},"    \u002F\u002F 注册事件\n",[51,60618,60619],{"class":53,"line":33942},[51,60620,60621],{"class":65},"    slider.addEventListener('mouseenter', function () {\n",[51,60623,60624],{"class":53,"line":33948},[51,60625,60626],{"class":65},"      \u002F\u002F 停止定时器\n",[51,60628,60629],{"class":53,"line":33954},[51,60630,60631],{"class":65},"      clearInterval(timerId)\n",[51,60633,60634],{"class":53,"line":33960},[51,60635,33836],{"class":65},[51,60637,60638],{"class":53,"line":33966},[51,60639,206],{"emptyLinePlaceholder":205},[51,60641,60642],{"class":53,"line":33993},[51,60643,60644],{"class":65},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[51,60646,60647],{"class":53,"line":34017},[51,60648,60616],{"class":65},[51,60650,60651],{"class":53,"line":34023},[51,60652,60653],{"class":65},"    slider.addEventListener('mouseleave', function () {\n",[51,60655,60656],{"class":53,"line":34029},[51,60657,60626],{"class":65},[51,60659,60660],{"class":53,"line":34035},[51,60661,60662],{"class":65},"      if (timerId) clearInterval(timerId)\n",[51,60664,60665],{"class":53,"line":34046},[51,60666,60667],{"class":65},"      \u002F\u002F 开启定时器\n",[51,60669,60670],{"class":53,"line":34057},[51,60671,60672],{"class":65},"      timerId = setInterval(function () {\n",[51,60674,60675],{"class":53,"line":34063},[51,60676,60677],{"class":65},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[51,60679,60680],{"class":53,"line":34080},[51,60681,60682],{"class":65},"        next.click()\n",[51,60684,60685],{"class":53,"line":34103},[51,60686,60687],{"class":65},"      }, 1000)\n",[51,60689,60690],{"class":53,"line":34126},[51,60691,33836],{"class":65},[51,60693,60694,60696,60698],{"class":53,"line":34132},[51,60695,52789],{"class":65},[51,60697,52185],{"class":51672},[51,60699,51679],{"class":65},[51,60701,60702,60704,60706],{"class":53,"line":34137},[51,60703,52157],{"class":65},[51,60705,52172],{"class":51672},[51,60707,51679],{"class":65},[51,60709,60710],{"class":53,"line":34146},[51,60711,206],{"emptyLinePlaceholder":205},[51,60713,60714,60716,60718],{"class":53,"line":34156},[51,60715,52157],{"class":65},[51,60717,51007],{"class":51672},[51,60719,51679],{"class":65},[22381,60721,60723],{"id":60722},"_3252-焦点事件","3.2.5.2 焦点事件",[10,60725,60726],{},"小米搜索框案例：",[41,60728,60730],{"className":51005,"code":60729,"language":51007,"meta":46,"style":46},"\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",[48,60731,60732,60742,60756,60760,60768,60782,60802,60822,60834,60842,60848,60858,60868,60880,60884,60888,60895,60899,60910,60914,60918,60925,60936,60949,60963,60967,60971,60980,60992,61004,61018,61031,61044,61062,61073,61077,61081,61090,61107,61111,61115,61122,61132,61142,61153,61166,61178,61194,61205,61217,61221,61225,61233,61244,61261,61273,61285,61296,61300,61304,61315,61326,61330,61338,61342,61350,61354,61362,61377,61400,61415,61446,61473,61500,61527,61554,61581,61608,61617,61625,61633,61638,61658,61678,61683,61688,61706,61711,61721,61726,61740,61745,61750,61767,61776,61788,61792,61800,61808,61812],{"__ignoreMap":46},[51,60733,60734,60736,60738,60740],{"class":53,"line":54},[51,60735,51669],{"class":65},[51,60737,51673],{"class":51672},[51,60739,51676],{"class":57},[51,60741,51679],{"class":65},[51,60743,60744,60746,60748,60750,60752,60754],{"class":53,"line":185},[51,60745,1452],{"class":65},[51,60747,51007],{"class":51672},[51,60749,51688],{"class":57},[51,60751,70],{"class":65},[51,60753,51693],{"class":61},[51,60755,51679],{"class":65},[51,60757,60758],{"class":53,"line":202},[51,60759,206],{"emptyLinePlaceholder":205},[51,60761,60762,60764,60766],{"class":53,"line":209},[51,60763,1452],{"class":65},[51,60765,51706],{"class":51672},[51,60767,51679],{"class":65},[51,60769,60770,60772,60774,60776,60778,60780],{"class":53,"line":223},[51,60771,51713],{"class":65},[51,60773,51716],{"class":51672},[51,60775,51719],{"class":57},[51,60777,70],{"class":65},[51,60779,51724],{"class":61},[51,60781,51679],{"class":65},[51,60783,60784,60786,60788,60790,60792,60794,60796,60798,60800],{"class":53,"line":237},[51,60785,51713],{"class":65},[51,60787,51716],{"class":51672},[51,60789,51735],{"class":57},[51,60791,70],{"class":65},[51,60793,51740],{"class":61},[51,60795,51743],{"class":57},[51,60797,70],{"class":65},[51,60799,51748],{"class":61},[51,60801,51679],{"class":65},[51,60803,60804,60806,60808,60810,60812,60814,60816,60818,60820],{"class":53,"line":242},[51,60805,51713],{"class":65},[51,60807,51716],{"class":51672},[51,60809,15304],{"class":57},[51,60811,70],{"class":65},[51,60813,51763],{"class":61},[51,60815,51743],{"class":57},[51,60817,70],{"class":65},[51,60819,51770],{"class":61},[51,60821,51679],{"class":65},[51,60823,60824,60826,60828,60830,60832],{"class":53,"line":257},[51,60825,51713],{"class":65},[51,60827,51779],{"class":51672},[51,60829,51782],{"class":65},[51,60831,51779],{"class":51672},[51,60833,51679],{"class":65},[51,60835,60836,60838,60840],{"class":53,"line":262},[51,60837,51713],{"class":65},[51,60839,464],{"class":51672},[51,60841,51679],{"class":65},[51,60843,60844,60846],{"class":53,"line":285},[51,60845,51799],{"class":51672},[51,60847,15956],{"class":65},[51,60849,60850,60852,60854,60856],{"class":53,"line":296},[51,60851,51806],{"class":278},[51,60853,51809],{"class":65},[51,60855,733],{"class":278},[51,60857,1703],{"class":65},[51,60859,60860,60862,60864,60866],{"class":53,"line":307},[51,60861,51818],{"class":278},[51,60863,51809],{"class":65},[51,60865,733],{"class":278},[51,60867,1703],{"class":65},[51,60869,60870,60873,60875,60878],{"class":53,"line":324},[51,60871,60872],{"class":278},"            box-sizing",[51,60874,51809],{"class":65},[51,60876,60877],{"class":278},"border-box",[51,60879,1703],{"class":65},[51,60881,60882],{"class":53,"line":329},[51,60883,2917],{"class":65},[51,60885,60886],{"class":53,"line":334},[51,60887,206],{"emptyLinePlaceholder":205},[51,60889,60890,60893],{"class":53,"line":340},[51,60891,60892],{"class":51672},"        ul",[51,60894,15956],{"class":65},[51,60896,60897],{"class":53,"line":345},[51,60898,206],{"emptyLinePlaceholder":205},[51,60900,60901,60904,60906,60908],{"class":53,"line":357},[51,60902,60903],{"class":278},"            list-style",[51,60905,51809],{"class":65},[51,60907,55109],{"class":278},[51,60909,1703],{"class":65},[51,60911,60912],{"class":53,"line":366},[51,60913,2917],{"class":65},[51,60915,60916],{"class":53,"line":383},[51,60917,206],{"emptyLinePlaceholder":205},[51,60919,60920,60923],{"class":53,"line":392},[51,60921,60922],{"class":57},"        .mi",[51,60924,15956],{"class":65},[51,60926,60927,60930,60932,60934],{"class":53,"line":403},[51,60928,60929],{"class":278},"            position",[51,60931,51809],{"class":65},[51,60933,55136],{"class":278},[51,60935,1703],{"class":65},[51,60937,60938,60940,60942,60945,60947],{"class":53,"line":409},[51,60939,51856],{"class":278},[51,60941,51809],{"class":65},[51,60943,60944],{"class":278},"223",[51,60946,51864],{"class":69},[51,60948,1703],{"class":65},[51,60950,60951,60953,60955,60957,60959,60961],{"class":53,"line":414},[51,60952,51806],{"class":278},[51,60954,51809],{"class":65},[51,60956,853],{"class":278},[51,60958,51864],{"class":69},[51,60960,51928],{"class":278},[51,60962,1703],{"class":65},[51,60964,60965],{"class":53,"line":433},[51,60966,2917],{"class":65},[51,60968,60969],{"class":53,"line":439},[51,60970,206],{"emptyLinePlaceholder":205},[51,60972,60973,60975,60978],{"class":53,"line":444},[51,60974,60922],{"class":57},[51,60976,60977],{"class":51672}," input",[51,60979,15956],{"class":65},[51,60981,60982,60984,60986,60988,60990],{"class":53,"line":453},[51,60983,51856],{"class":278},[51,60985,51809],{"class":65},[51,60987,60944],{"class":278},[51,60989,51864],{"class":69},[51,60991,1703],{"class":65},[51,60993,60994,60996,60998,61000,61002],{"class":53,"line":2174},[51,60995,51871],{"class":278},[51,60997,51809],{"class":65},[51,60999,1149],{"class":278},[51,61001,51864],{"class":69},[51,61003,1703],{"class":65},[51,61005,61006,61008,61010,61012,61014,61016],{"class":53,"line":2965},[51,61007,51818],{"class":278},[51,61009,51809],{"class":65},[51,61011,733],{"class":278},[51,61013,2428],{"class":278},[51,61015,51864],{"class":69},[51,61017,1703],{"class":65},[51,61019,61020,61023,61025,61027,61029],{"class":53,"line":2979},[51,61021,61022],{"class":278},"            font-size",[51,61024,51809],{"class":65},[51,61026,1091],{"class":278},[51,61028,51864],{"class":69},[51,61030,1703],{"class":65},[51,61032,61033,61036,61038,61040,61042],{"class":53,"line":2987},[51,61034,61035],{"class":278},"            line-height",[51,61037,51809],{"class":65},[51,61039,1149],{"class":278},[51,61041,51864],{"class":69},[51,61043,1703],{"class":65},[51,61045,61046,61049,61051,61053,61055,61057,61060],{"class":53,"line":2992},[51,61047,61048],{"class":278},"            border",[51,61050,51809],{"class":65},[51,61052,759],{"class":278},[51,61054,51864],{"class":69},[51,61056,51893],{"class":278},[51,61058,61059],{"class":278}," #e0e0e0",[51,61061,1703],{"class":65},[51,61063,61064,61067,61069,61071],{"class":53,"line":2998},[51,61065,61066],{"class":278},"            outline",[51,61068,51809],{"class":65},[51,61070,55109],{"class":278},[51,61072,1703],{"class":65},[51,61074,61075],{"class":53,"line":3004},[51,61076,2917],{"class":65},[51,61078,61079],{"class":53,"line":3009},[51,61080,206],{"emptyLinePlaceholder":205},[51,61082,61083,61085,61088],{"class":53,"line":8332},[51,61084,60922],{"class":57},[51,61086,61087],{"class":57}," .search",[51,61089,15956],{"class":65},[51,61091,61092,61094,61096,61098,61100,61102,61105],{"class":53,"line":8356},[51,61093,61048],{"class":278},[51,61095,51809],{"class":65},[51,61097,759],{"class":278},[51,61099,51864],{"class":69},[51,61101,51893],{"class":278},[51,61103,61104],{"class":278}," #ff6700",[51,61106,1703],{"class":65},[51,61108,61109],{"class":53,"line":8361},[51,61110,2917],{"class":65},[51,61112,61113],{"class":53,"line":8367},[51,61114,206],{"emptyLinePlaceholder":205},[51,61116,61117,61120],{"class":53,"line":8394},[51,61118,61119],{"class":57},"        .result-list",[51,61121,15956],{"class":65},[51,61123,61124,61126,61128,61130],{"class":53,"line":8399},[51,61125,51844],{"class":278},[51,61127,51809],{"class":65},[51,61129,55109],{"class":278},[51,61131,1703],{"class":65},[51,61133,61134,61136,61138,61140],{"class":53,"line":8405},[51,61135,60929],{"class":278},[51,61137,51809],{"class":65},[51,61139,55203],{"class":278},[51,61141,1703],{"class":65},[51,61143,61144,61147,61149,61151],{"class":53,"line":8417},[51,61145,61146],{"class":278},"            left",[51,61148,51809],{"class":65},[51,61150,733],{"class":278},[51,61152,1703],{"class":65},[51,61154,61155,61158,61160,61162,61164],{"class":53,"line":8429},[51,61156,61157],{"class":278},"            top",[51,61159,51809],{"class":65},[51,61161,1149],{"class":278},[51,61163,51864],{"class":69},[51,61165,1703],{"class":65},[51,61167,61168,61170,61172,61174,61176],{"class":53,"line":8441},[51,61169,51856],{"class":278},[51,61171,51809],{"class":65},[51,61173,60944],{"class":278},[51,61175,51864],{"class":69},[51,61177,1703],{"class":65},[51,61179,61180,61182,61184,61186,61188,61190,61192],{"class":53,"line":10100},[51,61181,61048],{"class":278},[51,61183,51809],{"class":65},[51,61185,759],{"class":278},[51,61187,51864],{"class":69},[51,61189,51893],{"class":278},[51,61191,61104],{"class":278},[51,61193,1703],{"class":65},[51,61195,61196,61199,61201,61203],{"class":53,"line":10125},[51,61197,61198],{"class":278},"            border-top",[51,61200,51809],{"class":65},[51,61202,733],{"class":278},[51,61204,1703],{"class":65},[51,61206,61207,61210,61212,61215],{"class":53,"line":10148},[51,61208,61209],{"class":278},"            background",[51,61211,51809],{"class":65},[51,61213,61214],{"class":278},"#fff",[51,61216,1703],{"class":65},[51,61218,61219],{"class":53,"line":10172},[51,61220,2917],{"class":65},[51,61222,61223],{"class":53,"line":10177},[51,61224,206],{"emptyLinePlaceholder":205},[51,61226,61227,61229,61231],{"class":53,"line":10182},[51,61228,61119],{"class":57},[51,61230,1808],{"class":51672},[51,61232,15956],{"class":65},[51,61234,61235,61237,61239,61242],{"class":53,"line":10187},[51,61236,51844],{"class":278},[51,61238,51809],{"class":65},[51,61240,61241],{"class":278},"block",[51,61243,1703],{"class":65},[51,61245,61246,61248,61250,61252,61254,61257,61259],{"class":53,"line":10196},[51,61247,51818],{"class":278},[51,61249,51809],{"class":65},[51,61251,886],{"class":278},[51,61253,51864],{"class":69},[51,61255,61256],{"class":278}," 15",[51,61258,51864],{"class":69},[51,61260,1703],{"class":65},[51,61262,61263,61265,61267,61269,61271],{"class":53,"line":10201},[51,61264,61022],{"class":278},[51,61266,51809],{"class":65},[51,61268,1040],{"class":278},[51,61270,51864],{"class":69},[51,61272,1703],{"class":65},[51,61274,61275,61278,61280,61283],{"class":53,"line":10207},[51,61276,61277],{"class":278},"            color",[51,61279,51809],{"class":65},[51,61281,61282],{"class":278},"#424242",[51,61284,1703],{"class":65},[51,61286,61287,61290,61292,61294],{"class":53,"line":10228},[51,61288,61289],{"class":278},"            text-decoration",[51,61291,51809],{"class":65},[51,61293,55109],{"class":278},[51,61295,1703],{"class":65},[51,61297,61298],{"class":53,"line":10234},[51,61299,2917],{"class":65},[51,61301,61302],{"class":53,"line":10248},[51,61303,206],{"emptyLinePlaceholder":205},[51,61305,61306,61308,61310,61313],{"class":53,"line":10254},[51,61307,61119],{"class":57},[51,61309,1808],{"class":51672},[51,61311,61312],{"class":57},":hover",[51,61314,15956],{"class":65},[51,61316,61317,61319,61321,61324],{"class":53,"line":10281},[51,61318,52012],{"class":278},[51,61320,51809],{"class":65},[51,61322,61323],{"class":278},"#eee",[51,61325,1703],{"class":65},[51,61327,61328],{"class":53,"line":10290},[51,61329,2917],{"class":65},[51,61331,61332,61334,61336],{"class":53,"line":10296},[51,61333,52148],{"class":65},[51,61335,464],{"class":51672},[51,61337,51679],{"class":65},[51,61339,61340],{"class":53,"line":10304},[51,61341,206],{"emptyLinePlaceholder":205},[51,61343,61344,61346,61348],{"class":53,"line":10309},[51,61345,52157],{"class":65},[51,61347,51706],{"class":51672},[51,61349,51679],{"class":65},[51,61351,61352],{"class":53,"line":16987},[51,61353,206],{"emptyLinePlaceholder":205},[51,61355,61356,61358,61360],{"class":53,"line":16993},[51,61357,1452],{"class":65},[51,61359,52172],{"class":51672},[51,61361,51679],{"class":65},[51,61363,61364,61366,61368,61370,61372,61375],{"class":53,"line":17016},[51,61365,51713],{"class":65},[51,61367,51983],{"class":51672},[51,61369,53858],{"class":57},[51,61371,70],{"class":65},[51,61373,61374],{"class":61},"\"mi\"",[51,61376,51679],{"class":65},[51,61378,61379,61381,61383,61385,61387,61390,61393,61395,61398],{"class":53,"line":17022},[51,61380,55674],{"class":65},[51,61382,54193],{"class":51672},[51,61384,54196],{"class":57},[51,61386,70],{"class":65},[51,61388,61389],{"class":61},"\"search\"",[51,61391,61392],{"class":57}," placeholder",[51,61394,70],{"class":65},[51,61396,61397],{"class":61},"\"小米笔记本\"",[51,61399,51679],{"class":65},[51,61401,61402,61404,61406,61408,61410,61413],{"class":53,"line":17045},[51,61403,55674],{"class":65},[51,61405,1549],{"class":51672},[51,61407,53858],{"class":57},[51,61409,70],{"class":65},[51,61411,61412],{"class":61},"\"result-list\"",[51,61414,51679],{"class":65},[51,61416,61417,61420,61422,61425,61427,61430,61432,61435,61438,61440,61442,61444],{"class":53,"line":17059},[51,61418,61419],{"class":65},"            \u003C",[51,61421,22],{"class":51672},[51,61423,61424],{"class":65},">\u003C",[51,61426,780],{"class":51672},[51,61428,61429],{"class":57}," href",[51,61431,70],{"class":65},[51,61433,61434],{"class":61},"\"#\"",[51,61436,61437],{"class":65},">全部商品\u003C\u002F",[51,61439,780],{"class":51672},[51,61441,55686],{"class":65},[51,61443,22],{"class":51672},[51,61445,51679],{"class":65},[51,61447,61448,61450,61452,61454,61456,61458,61460,61462,61465,61467,61469,61471],{"class":53,"line":17079},[51,61449,61419],{"class":65},[51,61451,22],{"class":51672},[51,61453,61424],{"class":65},[51,61455,780],{"class":51672},[51,61457,61429],{"class":57},[51,61459,70],{"class":65},[51,61461,61434],{"class":61},[51,61463,61464],{"class":65},">小米11\u003C\u002F",[51,61466,780],{"class":51672},[51,61468,55686],{"class":65},[51,61470,22],{"class":51672},[51,61472,51679],{"class":65},[51,61474,61475,61477,61479,61481,61483,61485,61487,61489,61492,61494,61496,61498],{"class":53,"line":17085},[51,61476,61419],{"class":65},[51,61478,22],{"class":51672},[51,61480,61424],{"class":65},[51,61482,780],{"class":51672},[51,61484,61429],{"class":57},[51,61486,70],{"class":65},[51,61488,61434],{"class":61},[51,61490,61491],{"class":65},">小米10S\u003C\u002F",[51,61493,780],{"class":51672},[51,61495,55686],{"class":65},[51,61497,22],{"class":51672},[51,61499,51679],{"class":65},[51,61501,61502,61504,61506,61508,61510,61512,61514,61516,61519,61521,61523,61525],{"class":53,"line":17096},[51,61503,61419],{"class":65},[51,61505,22],{"class":51672},[51,61507,61424],{"class":65},[51,61509,780],{"class":51672},[51,61511,61429],{"class":57},[51,61513,70],{"class":65},[51,61515,61434],{"class":61},[51,61517,61518],{"class":65},">小米笔记本\u003C\u002F",[51,61520,780],{"class":51672},[51,61522,55686],{"class":65},[51,61524,22],{"class":51672},[51,61526,51679],{"class":65},[51,61528,61529,61531,61533,61535,61537,61539,61541,61543,61546,61548,61550,61552],{"class":53,"line":17119},[51,61530,61419],{"class":65},[51,61532,22],{"class":51672},[51,61534,61424],{"class":65},[51,61536,780],{"class":51672},[51,61538,61429],{"class":57},[51,61540,70],{"class":65},[51,61542,61434],{"class":61},[51,61544,61545],{"class":65},">小米手机\u003C\u002F",[51,61547,780],{"class":51672},[51,61549,55686],{"class":65},[51,61551,22],{"class":51672},[51,61553,51679],{"class":65},[51,61555,61556,61558,61560,61562,61564,61566,61568,61570,61573,61575,61577,61579],{"class":53,"line":17141},[51,61557,61419],{"class":65},[51,61559,22],{"class":51672},[51,61561,61424],{"class":65},[51,61563,780],{"class":51672},[51,61565,61429],{"class":57},[51,61567,70],{"class":65},[51,61569,61434],{"class":61},[51,61571,61572],{"class":65},">黑鲨4\u003C\u002F",[51,61574,780],{"class":51672},[51,61576,55686],{"class":65},[51,61578,22],{"class":51672},[51,61580,51679],{"class":65},[51,61582,61583,61585,61587,61589,61591,61593,61595,61597,61600,61602,61604,61606],{"class":53,"line":17146},[51,61584,61419],{"class":65},[51,61586,22],{"class":51672},[51,61588,61424],{"class":65},[51,61590,780],{"class":51672},[51,61592,61429],{"class":57},[51,61594,70],{"class":65},[51,61596,61434],{"class":61},[51,61598,61599],{"class":65},">空调\u003C\u002F",[51,61601,780],{"class":51672},[51,61603,55686],{"class":65},[51,61605,22],{"class":51672},[51,61607,51679],{"class":65},[51,61609,61610,61613,61615],{"class":53,"line":17152},[51,61611,61612],{"class":65},"        \u003C\u002F",[51,61614,1549],{"class":51672},[51,61616,51679],{"class":65},[51,61618,61619,61621,61623],{"class":53,"line":17166},[51,61620,52148],{"class":65},[51,61622,51983],{"class":51672},[51,61624,51679],{"class":65},[51,61626,61627,61629,61631],{"class":53,"line":17179},[51,61628,51713],{"class":65},[51,61630,52185],{"class":51672},[51,61632,51679],{"class":65},[51,61634,61635],{"class":53,"line":17184},[51,61636,61637],{"class":601},"        \u002F\u002F 1. 获取元素\n",[51,61639,61640,61643,61645,61647,61649,61651,61653,61656],{"class":53,"line":17198},[51,61641,61642],{"class":69},"        const",[51,61644,60977],{"class":278},[51,61646,13948],{"class":69},[51,61648,54768],{"class":65},[51,61650,54771],{"class":57},[51,61652,546],{"class":65},[51,61654,61655],{"class":61},"'[type=search]'",[51,61657,282],{"class":65},[51,61659,61660,61662,61665,61667,61669,61671,61673,61676],{"class":53,"line":17203},[51,61661,61642],{"class":69},[51,61663,61664],{"class":278}," ul",[51,61666,13948],{"class":69},[51,61668,54768],{"class":65},[51,61670,54771],{"class":57},[51,61672,546],{"class":65},[51,61674,61675],{"class":61},"'.result-list'",[51,61677,282],{"class":65},[51,61679,61680],{"class":53,"line":17209},[51,61681,61682],{"class":601},"        \u002F\u002F console.log(input)\n",[51,61684,61685],{"class":53,"line":17214},[51,61686,61687],{"class":601},"        \u002F\u002F 2. 监听事件 获得焦点\n",[51,61689,61690,61693,61695,61697,61700,61702,61704],{"class":53,"line":17228},[51,61691,61692],{"class":65},"        input.",[51,61694,58185],{"class":57},[51,61696,546],{"class":65},[51,61698,61699],{"class":61},"'focus'",[51,61701,12819],{"class":65},[51,61703,54821],{"class":69},[51,61705,54824],{"class":65},[51,61707,61708],{"class":53,"line":17233},[51,61709,61710],{"class":601},"            \u002F\u002F ul显示\n",[51,61712,61713,61716,61718],{"class":53,"line":17238},[51,61714,61715],{"class":65},"            ul.style.display ",[51,61717,70],{"class":69},[51,61719,61720],{"class":61}," 'block'\n",[51,61722,61723],{"class":53,"line":17252},[51,61724,61725],{"class":601},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[51,61727,61728,61731,61733,61735,61738],{"class":53,"line":17264},[51,61729,61730],{"class":65},"            input.classList.",[51,61732,5718],{"class":57},[51,61734,546],{"class":65},[51,61736,61737],{"class":61},"'search'",[51,61739,282],{"class":65},[51,61741,61742],{"class":53,"line":17269},[51,61743,61744],{"class":65},"        })\n",[51,61746,61747],{"class":53,"line":17282},[51,61748,61749],{"class":601},"        \u002F\u002F 3. 监听事件 失去焦点\n",[51,61751,61752,61754,61756,61758,61761,61763,61765],{"class":53,"line":17287},[51,61753,61692],{"class":65},[51,61755,58185],{"class":57},[51,61757,546],{"class":65},[51,61759,61760],{"class":61},"'blur'",[51,61762,12819],{"class":65},[51,61764,54821],{"class":69},[51,61766,54824],{"class":65},[51,61768,61769,61771,61773],{"class":53,"line":17292},[51,61770,61715],{"class":65},[51,61772,70],{"class":69},[51,61774,61775],{"class":61}," 'none'\n",[51,61777,61778,61780,61782,61784,61786],{"class":53,"line":17297},[51,61779,61730],{"class":65},[51,61781,57378],{"class":57},[51,61783,546],{"class":65},[51,61785,61737],{"class":61},[51,61787,282],{"class":65},[51,61789,61790],{"class":53,"line":17310},[51,61791,61744],{"class":65},[51,61793,61794,61796,61798],{"class":53,"line":17315},[51,61795,52148],{"class":65},[51,61797,52185],{"class":51672},[51,61799,51679],{"class":65},[51,61801,61802,61804,61806],{"class":53,"line":33008},[51,61803,52157],{"class":65},[51,61805,52172],{"class":51672},[51,61807,51679],{"class":65},[51,61809,61810],{"class":53,"line":33014},[51,61811,206],{"emptyLinePlaceholder":205},[51,61813,61814,61816,61818],{"class":53,"line":33020},[51,61815,52157],{"class":65},[51,61817,51007],{"class":51672},[51,61819,51679],{"class":65},[22381,61821,61823],{"id":61822},"_3253-键盘事件","3.2.5.3 键盘事件",[10,61825,61826],{},"评论字数统计案例",[10,61828,61829],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[10,61831,61832],{},"牢记focus伪类选择器",[51716,61834],{"charSet":61835},"UTF-8",[51716,61837],{"name":61838,"content":61839},"viewport","width=device-width, initial-scale=1.0",[51779,61841,61842],{},"Document",[464,61844,61845],{},"\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",[54193,61847],{"type":5572},[1549,61849,61850,61853],{},[22,61851,61852],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[22,61854,61855],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[41,61857,61859],{"className":51005,"code":61858,"language":51007,"meta":46,"style":46},"\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",[48,61860,61861,61871,61885,61889,61897,61911,61931,61951,61964,61972,61979,61992,62006,62016,62026,62030,62034,62041,62053,62065,62077,62089,62118,62131,62135,62139,62148,62159,62171,62182,62193,62205,62216,62228,62244,62256,62260,62264,62275,62286,62296,62308,62312,62316,62324,62335,62345,62356,62368,62381,62393,62405,62409,62413,62422,62434,62445,62458,62469,62483,62487,62491,62498,62510,62522,62532,62536,62540,62549,62561,62571,62575,62579,62590,62600,62619,62632,62636,62640,62650,62660,62664,62668,62679,62690,62702,62714,62718,62722,62733,62744,62758,62762,62766,62777,62787,62799,62803,62811,62819,62823,62831,62846,62865,62905,62918,62926,62940,62960,62968,62983,63006,63024,63039,63059,63079,63099,63107,63115,63123,63131,63151,63171,63176,63193,63202,63206,63211,63227,63235,63239,63244,63261,63266,63291,63295,63299,63304,63309,63317,63325,63329],{"__ignoreMap":46},[51,61862,61863,61865,61867,61869],{"class":53,"line":54},[51,61864,51669],{"class":65},[51,61866,51673],{"class":51672},[51,61868,51676],{"class":57},[51,61870,51679],{"class":65},[51,61872,61873,61875,61877,61879,61881,61883],{"class":53,"line":185},[51,61874,1452],{"class":65},[51,61876,51007],{"class":51672},[51,61878,51688],{"class":57},[51,61880,70],{"class":65},[51,61882,51693],{"class":61},[51,61884,51679],{"class":65},[51,61886,61887],{"class":53,"line":202},[51,61888,206],{"emptyLinePlaceholder":205},[51,61890,61891,61893,61895],{"class":53,"line":209},[51,61892,1452],{"class":65},[51,61894,51706],{"class":51672},[51,61896,51679],{"class":65},[51,61898,61899,61901,61903,61905,61907,61909],{"class":53,"line":223},[51,61900,52516],{"class":65},[51,61902,51716],{"class":51672},[51,61904,51719],{"class":57},[51,61906,70],{"class":65},[51,61908,51724],{"class":61},[51,61910,51679],{"class":65},[51,61912,61913,61915,61917,61919,61921,61923,61925,61927,61929],{"class":53,"line":237},[51,61914,52516],{"class":65},[51,61916,51716],{"class":51672},[51,61918,51735],{"class":57},[51,61920,70],{"class":65},[51,61922,51740],{"class":61},[51,61924,51743],{"class":57},[51,61926,70],{"class":65},[51,61928,51748],{"class":61},[51,61930,51679],{"class":65},[51,61932,61933,61935,61937,61939,61941,61943,61945,61947,61949],{"class":53,"line":242},[51,61934,52516],{"class":65},[51,61936,51716],{"class":51672},[51,61938,15304],{"class":57},[51,61940,70],{"class":65},[51,61942,51763],{"class":61},[51,61944,51743],{"class":57},[51,61946,70],{"class":65},[51,61948,51770],{"class":61},[51,61950,51679],{"class":65},[51,61952,61953,61955,61957,61960,61962],{"class":53,"line":257},[51,61954,52516],{"class":65},[51,61956,51779],{"class":51672},[51,61958,61959],{"class":65},">评论回车发布\u003C\u002F",[51,61961,51779],{"class":51672},[51,61963,51679],{"class":65},[51,61965,61966,61968,61970],{"class":53,"line":262},[51,61967,52516],{"class":65},[51,61969,464],{"class":51672},[51,61971,51679],{"class":65},[51,61973,61974,61977],{"class":53,"line":285},[51,61975,61976],{"class":57},"    .wrapper",[51,61978,15956],{"class":65},[51,61980,61981,61984,61986,61988,61990],{"class":53,"line":296},[51,61982,61983],{"class":278},"      min-width",[51,61985,51809],{"class":65},[51,61987,4373],{"class":278},[51,61989,51864],{"class":69},[51,61991,1703],{"class":65},[51,61993,61994,61997,61999,62002,62004],{"class":53,"line":307},[51,61995,61996],{"class":278},"      max-width",[51,61998,51809],{"class":65},[51,62000,62001],{"class":278},"800",[51,62003,51864],{"class":69},[51,62005,1703],{"class":65},[51,62007,62008,62010,62012,62014],{"class":53,"line":324},[51,62009,55381],{"class":278},[51,62011,51809],{"class":65},[51,62013,51849],{"class":278},[51,62015,1703],{"class":65},[51,62017,62018,62020,62022,62024],{"class":53,"line":329},[51,62019,55392],{"class":278},[51,62021,51809],{"class":65},[51,62023,51952],{"class":278},[51,62025,1703],{"class":65},[51,62027,62028],{"class":53,"line":334},[51,62029,2577],{"class":65},[51,62031,62032],{"class":53,"line":340},[51,62033,206],{"emptyLinePlaceholder":205},[51,62035,62036,62039],{"class":53,"line":345},[51,62037,62038],{"class":57},"    .avatar",[51,62040,15956],{"class":65},[51,62042,62043,62045,62047,62049,62051],{"class":53,"line":357},[51,62044,55143],{"class":278},[51,62046,51809],{"class":65},[51,62048,1149],{"class":278},[51,62050,51864],{"class":69},[51,62052,1703],{"class":65},[51,62054,62055,62057,62059,62061,62063],{"class":53,"line":366},[51,62056,55157],{"class":278},[51,62058,51809],{"class":65},[51,62060,1149],{"class":278},[51,62062,51864],{"class":69},[51,62064,1703],{"class":65},[51,62066,62067,62069,62071,62073,62075],{"class":53,"line":383},[51,62068,55506],{"class":278},[51,62070,51809],{"class":65},[51,62072,1198],{"class":278},[51,62074,870],{"class":69},[51,62076,1703],{"class":65},[51,62078,62079,62082,62084,62087],{"class":53,"line":392},[51,62080,62081],{"class":278},"      overflow",[51,62083,51809],{"class":65},[51,62085,62086],{"class":278},"hidden",[51,62088,1703],{"class":65},[51,62090,62091,62094,62096,62099,62101,62104,62106,62109,62111,62113,62116],{"class":53,"line":403},[51,62092,62093],{"class":278},"      background",[51,62095,51809],{"class":65},[51,62097,62098],{"class":278},"url",[51,62100,546],{"class":65},[51,62102,62103],{"class":248},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[51,62105,14098],{"class":65},[51,62107,62108],{"class":278},"no-repeat",[51,62110,17527],{"class":278},[51,62112,25360],{"class":65},[51,62114,62115],{"class":278},"cover",[51,62117,1703],{"class":65},[51,62119,62120,62123,62125,62127,62129],{"class":53,"line":409},[51,62121,62122],{"class":278},"      margin-right",[51,62124,51809],{"class":65},[51,62126,1242],{"class":278},[51,62128,51864],{"class":69},[51,62130,1703],{"class":65},[51,62132,62133],{"class":53,"line":414},[51,62134,2577],{"class":65},[51,62136,62137],{"class":53,"line":433},[51,62138,206],{"emptyLinePlaceholder":205},[51,62140,62141,62143,62146],{"class":53,"line":439},[51,62142,61976],{"class":57},[51,62144,62145],{"class":51672}," textarea",[51,62147,15956],{"class":65},[51,62149,62150,62153,62155,62157],{"class":53,"line":444},[51,62151,62152],{"class":278},"      outline",[51,62154,51809],{"class":65},[51,62156,55109],{"class":278},[51,62158,1703],{"class":65},[51,62160,62161,62164,62166,62169],{"class":53,"line":453},[51,62162,62163],{"class":278},"      border-color",[51,62165,51809],{"class":65},[51,62167,62168],{"class":278},"transparent",[51,62170,1703],{"class":65},[51,62172,62173,62176,62178,62180],{"class":53,"line":2174},[51,62174,62175],{"class":278},"      resize",[51,62177,51809],{"class":65},[51,62179,55109],{"class":278},[51,62181,1703],{"class":65},[51,62183,62184,62186,62188,62191],{"class":53,"line":2965},[51,62185,62093],{"class":278},[51,62187,51809],{"class":65},[51,62189,62190],{"class":278},"#f5f5f5",[51,62192,1703],{"class":65},[51,62194,62195,62197,62199,62201,62203],{"class":53,"line":2979},[51,62196,55506],{"class":278},[51,62198,51809],{"class":65},[51,62200,835],{"class":278},[51,62202,51864],{"class":69},[51,62204,1703],{"class":65},[51,62206,62207,62210,62212,62214],{"class":53,"line":2987},[51,62208,62209],{"class":278},"      flex",[51,62211,51809],{"class":65},[51,62213,759],{"class":278},[51,62215,1703],{"class":65},[51,62217,62218,62220,62222,62224,62226],{"class":53,"line":2992},[51,62219,55067],{"class":278},[51,62221,51809],{"class":65},[51,62223,988],{"class":278},[51,62225,51864],{"class":69},[51,62227,1703],{"class":65},[51,62229,62230,62233,62235,62237,62240,62242],{"class":53,"line":2998},[51,62231,62232],{"class":278},"      transition",[51,62234,51809],{"class":65},[51,62236,28503],{"class":278},[51,62238,62239],{"class":278}," 0.5",[51,62241,1237],{"class":69},[51,62243,1703],{"class":65},[51,62245,62246,62248,62250,62252,62254],{"class":53,"line":3004},[51,62247,55157],{"class":278},[51,62249,51809],{"class":65},[51,62251,1493],{"class":278},[51,62253,51864],{"class":69},[51,62255,1703],{"class":65},[51,62257,62258],{"class":53,"line":3009},[51,62259,2577],{"class":65},[51,62261,62262],{"class":53,"line":8332},[51,62263,206],{"emptyLinePlaceholder":205},[51,62265,62266,62268,62270,62273],{"class":53,"line":8356},[51,62267,61976],{"class":57},[51,62269,62145],{"class":51672},[51,62271,62272],{"class":57},":focus",[51,62274,15956],{"class":65},[51,62276,62277,62279,62281,62284],{"class":53,"line":8361},[51,62278,62163],{"class":278},[51,62280,51809],{"class":65},[51,62282,62283],{"class":278},"#e4e4e4",[51,62285,1703],{"class":65},[51,62287,62288,62290,62292,62294],{"class":53,"line":8367},[51,62289,62093],{"class":278},[51,62291,51809],{"class":65},[51,62293,61214],{"class":278},[51,62295,1703],{"class":65},[51,62297,62298,62300,62302,62304,62306],{"class":53,"line":8394},[51,62299,55157],{"class":278},[51,62301,51809],{"class":65},[51,62303,1198],{"class":278},[51,62305,51864],{"class":69},[51,62307,1703],{"class":65},[51,62309,62310],{"class":53,"line":8399},[51,62311,2577],{"class":65},[51,62313,62314],{"class":53,"line":8405},[51,62315,206],{"emptyLinePlaceholder":205},[51,62317,62318,62320,62322],{"class":53,"line":8417},[51,62319,61976],{"class":57},[51,62321,57839],{"class":51672},[51,62323,15956],{"class":65},[51,62325,62326,62328,62330,62333],{"class":53,"line":8429},[51,62327,62093],{"class":278},[51,62329,51809],{"class":65},[51,62331,62332],{"class":278},"#00aeec",[51,62334,1703],{"class":65},[51,62336,62337,62339,62341,62343],{"class":53,"line":8441},[51,62338,57788],{"class":278},[51,62340,51809],{"class":65},[51,62342,61214],{"class":278},[51,62344,1703],{"class":65},[51,62346,62347,62350,62352,62354],{"class":53,"line":10100},[51,62348,62349],{"class":278},"      border",[51,62351,51809],{"class":65},[51,62353,55109],{"class":278},[51,62355,1703],{"class":65},[51,62357,62358,62360,62362,62364,62366],{"class":53,"line":10125},[51,62359,55506],{"class":278},[51,62361,51809],{"class":65},[51,62363,835],{"class":278},[51,62365,51864],{"class":69},[51,62367,1703],{"class":65},[51,62369,62370,62373,62375,62377,62379],{"class":53,"line":10148},[51,62371,62372],{"class":278},"      margin-left",[51,62374,51809],{"class":65},[51,62376,988],{"class":278},[51,62378,51864],{"class":69},[51,62380,1703],{"class":65},[51,62382,62383,62385,62387,62389,62391],{"class":53,"line":10172},[51,62384,55143],{"class":278},[51,62386,51809],{"class":65},[51,62388,898],{"class":278},[51,62390,51864],{"class":69},[51,62392,1703],{"class":65},[51,62394,62395,62398,62400,62403],{"class":53,"line":10177},[51,62396,62397],{"class":278},"      cursor",[51,62399,51809],{"class":65},[51,62401,62402],{"class":278},"pointer",[51,62404,1703],{"class":65},[51,62406,62407],{"class":53,"line":10182},[51,62408,2577],{"class":65},[51,62410,62411],{"class":53,"line":10187},[51,62412,206],{"emptyLinePlaceholder":205},[51,62414,62415,62417,62420],{"class":53,"line":10196},[51,62416,61976],{"class":57},[51,62418,62419],{"class":57}," .total",[51,62421,15956],{"class":65},[51,62423,62424,62426,62428,62430,62432],{"class":53,"line":10201},[51,62425,62122],{"class":278},[51,62427,51809],{"class":65},[51,62429,1154],{"class":278},[51,62431,51864],{"class":69},[51,62433,1703],{"class":65},[51,62435,62436,62438,62440,62443],{"class":53,"line":10207},[51,62437,57788],{"class":278},[51,62439,51809],{"class":65},[51,62441,62442],{"class":278},"#999",[51,62444,1703],{"class":65},[51,62446,62447,62450,62452,62454,62456],{"class":53,"line":10228},[51,62448,62449],{"class":278},"      margin-top",[51,62451,51809],{"class":65},[51,62453,861],{"class":278},[51,62455,51864],{"class":69},[51,62457,1703],{"class":65},[51,62459,62460,62463,62465,62467],{"class":53,"line":10234},[51,62461,62462],{"class":278},"      opacity",[51,62464,51809],{"class":65},[51,62466,733],{"class":278},[51,62468,1703],{"class":65},[51,62470,62471,62473,62475,62477,62479,62481],{"class":53,"line":10248},[51,62472,62232],{"class":278},[51,62474,51809],{"class":65},[51,62476,28503],{"class":278},[51,62478,62239],{"class":278},[51,62480,1237],{"class":69},[51,62482,1703],{"class":65},[51,62484,62485],{"class":53,"line":10254},[51,62486,2577],{"class":65},[51,62488,62489],{"class":53,"line":10281},[51,62490,206],{"emptyLinePlaceholder":205},[51,62492,62493,62496],{"class":53,"line":10290},[51,62494,62495],{"class":57},"    .list",[51,62497,15956],{"class":65},[51,62499,62500,62502,62504,62506,62508],{"class":53,"line":10296},[51,62501,61983],{"class":278},[51,62503,51809],{"class":65},[51,62505,4373],{"class":278},[51,62507,51864],{"class":69},[51,62509,1703],{"class":65},[51,62511,62512,62514,62516,62518,62520],{"class":53,"line":10304},[51,62513,61996],{"class":278},[51,62515,51809],{"class":65},[51,62517,62001],{"class":278},[51,62519,51864],{"class":69},[51,62521,1703],{"class":65},[51,62523,62524,62526,62528,62530],{"class":53,"line":10309},[51,62525,55381],{"class":278},[51,62527,51809],{"class":65},[51,62529,51849],{"class":278},[51,62531,1703],{"class":65},[51,62533,62534],{"class":53,"line":16987},[51,62535,2577],{"class":65},[51,62537,62538],{"class":53,"line":16993},[51,62539,206],{"emptyLinePlaceholder":205},[51,62541,62542,62544,62547],{"class":53,"line":17016},[51,62543,62495],{"class":57},[51,62545,62546],{"class":57}," .item",[51,62548,15956],{"class":65},[51,62550,62551,62553,62555,62557,62559],{"class":53,"line":17022},[51,62552,55143],{"class":278},[51,62554,51809],{"class":65},[51,62556,853],{"class":278},[51,62558,870],{"class":69},[51,62560,1703],{"class":65},[51,62562,62563,62565,62567,62569],{"class":53,"line":17045},[51,62564,55381],{"class":278},[51,62566,51809],{"class":65},[51,62568,51849],{"class":278},[51,62570,1703],{"class":65},[51,62572,62573],{"class":53,"line":17059},[51,62574,2577],{"class":65},[51,62576,62577],{"class":53,"line":17079},[51,62578,206],{"emptyLinePlaceholder":205},[51,62580,62581,62583,62585,62588],{"class":53,"line":17085},[51,62582,62495],{"class":57},[51,62584,62546],{"class":57},[51,62586,62587],{"class":57}," .info",[51,62589,15956],{"class":65},[51,62591,62592,62594,62596,62598],{"class":53,"line":17096},[51,62593,62209],{"class":278},[51,62595,51809],{"class":65},[51,62597,759],{"class":278},[51,62599,1703],{"class":65},[51,62601,62602,62605,62607,62609,62611,62614,62617],{"class":53,"line":17119},[51,62603,62604],{"class":278},"      border-bottom",[51,62606,51809],{"class":65},[51,62608,759],{"class":278},[51,62610,51864],{"class":69},[51,62612,62613],{"class":278}," dashed",[51,62615,62616],{"class":278}," #e4e4e4",[51,62618,1703],{"class":65},[51,62620,62621,62624,62626,62628,62630],{"class":53,"line":17141},[51,62622,62623],{"class":278},"      padding-bottom",[51,62625,51809],{"class":65},[51,62627,988],{"class":278},[51,62629,51864],{"class":69},[51,62631,1703],{"class":65},[51,62633,62634],{"class":53,"line":17146},[51,62635,2577],{"class":65},[51,62637,62638],{"class":53,"line":17152},[51,62639,206],{"emptyLinePlaceholder":205},[51,62641,62642,62644,62646,62648],{"class":53,"line":17166},[51,62643,62495],{"class":57},[51,62645,62546],{"class":57},[51,62647,7209],{"class":51672},[51,62649,15956],{"class":65},[51,62651,62652,62654,62656,62658],{"class":53,"line":17179},[51,62653,55078],{"class":278},[51,62655,51809],{"class":65},[51,62657,733],{"class":278},[51,62659,1703],{"class":65},[51,62661,62662],{"class":53,"line":17184},[51,62663,2577],{"class":65},[51,62665,62666],{"class":53,"line":17198},[51,62667,206],{"emptyLinePlaceholder":205},[51,62669,62670,62672,62674,62677],{"class":53,"line":17203},[51,62671,62495],{"class":57},[51,62673,62546],{"class":57},[51,62675,62676],{"class":57}," .name",[51,62678,15956],{"class":65},[51,62680,62681,62683,62685,62688],{"class":53,"line":17209},[51,62682,57788],{"class":278},[51,62684,51809],{"class":65},[51,62686,62687],{"class":278},"#FB7299",[51,62689,1703],{"class":65},[51,62691,62692,62694,62696,62698,62700],{"class":53,"line":17214},[51,62693,55294],{"class":278},[51,62695,51809],{"class":65},[51,62697,1091],{"class":278},[51,62699,51864],{"class":69},[51,62701,1703],{"class":65},[51,62703,62704,62707,62709,62712],{"class":53,"line":17228},[51,62705,62706],{"class":278},"      font-weight",[51,62708,51809],{"class":65},[51,62710,62711],{"class":278},"bold",[51,62713,1703],{"class":65},[51,62715,62716],{"class":53,"line":17233},[51,62717,2577],{"class":65},[51,62719,62720],{"class":53,"line":17238},[51,62721,206],{"emptyLinePlaceholder":205},[51,62723,62724,62726,62728,62731],{"class":53,"line":17252},[51,62725,62495],{"class":57},[51,62727,62546],{"class":57},[51,62729,62730],{"class":57}," .text",[51,62732,15956],{"class":65},[51,62734,62735,62737,62739,62742],{"class":53,"line":17264},[51,62736,57788],{"class":278},[51,62738,51809],{"class":65},[51,62740,62741],{"class":278},"#333",[51,62743,1703],{"class":65},[51,62745,62746,62748,62750,62752,62754,62756],{"class":53,"line":17269},[51,62747,55067],{"class":278},[51,62749,51809],{"class":65},[51,62751,988],{"class":278},[51,62753,51864],{"class":69},[51,62755,4479],{"class":278},[51,62757,1703],{"class":65},[51,62759,62760],{"class":53,"line":17282},[51,62761,2577],{"class":65},[51,62763,62764],{"class":53,"line":17287},[51,62765,206],{"emptyLinePlaceholder":205},[51,62767,62768,62770,62772,62775],{"class":53,"line":17292},[51,62769,62495],{"class":57},[51,62771,62546],{"class":57},[51,62773,62774],{"class":57}," .time",[51,62776,15956],{"class":65},[51,62778,62779,62781,62783,62785],{"class":53,"line":17297},[51,62780,57788],{"class":278},[51,62782,51809],{"class":65},[51,62784,62442],{"class":278},[51,62786,1703],{"class":65},[51,62788,62789,62791,62793,62795,62797],{"class":53,"line":17310},[51,62790,55294],{"class":278},[51,62792,51809],{"class":65},[51,62794,1040],{"class":278},[51,62796,51864],{"class":69},[51,62798,1703],{"class":65},[51,62800,62801],{"class":53,"line":17315},[51,62802,2577],{"class":65},[51,62804,62805,62807,62809],{"class":53,"line":33008},[51,62806,52789],{"class":65},[51,62808,464],{"class":51672},[51,62810,51679],{"class":65},[51,62812,62813,62815,62817],{"class":53,"line":33014},[51,62814,52157],{"class":65},[51,62816,51706],{"class":51672},[51,62818,51679],{"class":65},[51,62820,62821],{"class":53,"line":33020},[51,62822,206],{"emptyLinePlaceholder":205},[51,62824,62825,62827,62829],{"class":53,"line":33026},[51,62826,1452],{"class":65},[51,62828,52172],{"class":51672},[51,62830,51679],{"class":65},[51,62832,62833,62835,62837,62839,62841,62844],{"class":53,"line":33032},[51,62834,52516],{"class":65},[51,62836,51983],{"class":51672},[51,62838,53858],{"class":57},[51,62840,70],{"class":65},[51,62842,62843],{"class":61},"\"wrapper\"",[51,62845,51679],{"class":65},[51,62847,62848,62850,62852,62854,62856,62859,62861,62863],{"class":53,"line":33043},[51,62849,51713],{"class":65},[51,62851,983],{"class":51672},[51,62853,53858],{"class":57},[51,62855,70],{"class":65},[51,62857,62858],{"class":61},"\"avatar\"",[51,62860,55686],{"class":65},[51,62862,983],{"class":51672},[51,62864,51679],{"class":65},[51,62866,62867,62869,62871,62873,62875,62878,62880,62882,62885,62887,62889,62891,62894,62896,62899,62901,62903],{"class":53,"line":33049},[51,62868,51713],{"class":65},[51,62870,54660],{"class":51672},[51,62872,15343],{"class":57},[51,62874,70],{"class":65},[51,62876,62877],{"class":61},"\"tx\"",[51,62879,61392],{"class":57},[51,62881,70],{"class":65},[51,62883,62884],{"class":61},"\"发一条友善的评论\"",[51,62886,54683],{"class":57},[51,62888,70],{"class":65},[51,62890,4088],{"class":61},[51,62892,62893],{"class":57}," maxlength",[51,62895,70],{"class":65},[51,62897,62898],{"class":61},"\"200\"",[51,62900,55686],{"class":65},[51,62902,54660],{"class":51672},[51,62904,51679],{"class":65},[51,62906,62907,62909,62911,62914,62916],{"class":53,"line":33069},[51,62908,51713],{"class":65},[51,62910,54259],{"class":51672},[51,62912,62913],{"class":65},">发布\u003C\u002F",[51,62915,54259],{"class":51672},[51,62917,51679],{"class":65},[51,62919,62920,62922,62924],{"class":53,"line":33075},[51,62921,52789],{"class":65},[51,62923,51983],{"class":51672},[51,62925,51679],{"class":65},[51,62927,62928,62930,62932,62934,62936,62938],{"class":53,"line":33086},[51,62929,52516],{"class":65},[51,62931,51983],{"class":51672},[51,62933,53858],{"class":57},[51,62935,70],{"class":65},[51,62937,62843],{"class":61},[51,62939,51679],{"class":65},[51,62941,62942,62944,62946,62948,62950,62953,62956,62958],{"class":53,"line":33092},[51,62943,51713],{"class":65},[51,62945,51],{"class":51672},[51,62947,53858],{"class":57},[51,62949,70],{"class":65},[51,62951,62952],{"class":61},"\"total\"",[51,62954,62955],{"class":65},">0\u002F200字\u003C\u002F",[51,62957,51],{"class":51672},[51,62959,51679],{"class":65},[51,62961,62962,62964,62966],{"class":53,"line":33098},[51,62963,52789],{"class":65},[51,62965,51983],{"class":51672},[51,62967,51679],{"class":65},[51,62969,62970,62972,62974,62976,62978,62981],{"class":53,"line":33104},[51,62971,52516],{"class":65},[51,62973,51983],{"class":51672},[51,62975,53858],{"class":57},[51,62977,70],{"class":65},[51,62979,62980],{"class":61},"\"list\"",[51,62982,51679],{"class":65},[51,62984,62985,62987,62989,62991,62993,62996,62999,63001,63004],{"class":53,"line":33110},[51,62986,51713],{"class":65},[51,62988,51983],{"class":51672},[51,62990,53858],{"class":57},[51,62992,70],{"class":65},[51,62994,62995],{"class":61},"\"item\"",[51,62997,62998],{"class":57}," style",[51,63000,70],{"class":65},[51,63002,63003],{"class":61},"\"display: none;\"",[51,63005,51679],{"class":65},[51,63007,63008,63010,63012,63014,63016,63018,63020,63022],{"class":53,"line":33116},[51,63009,55606],{"class":65},[51,63011,983],{"class":51672},[51,63013,53858],{"class":57},[51,63015,70],{"class":65},[51,63017,62858],{"class":61},[51,63019,55686],{"class":65},[51,63021,983],{"class":51672},[51,63023,51679],{"class":65},[51,63025,63026,63028,63030,63032,63034,63037],{"class":53,"line":33122},[51,63027,55606],{"class":65},[51,63029,51983],{"class":51672},[51,63031,53858],{"class":57},[51,63033,70],{"class":65},[51,63035,63036],{"class":61},"\"info\"",[51,63038,51679],{"class":65},[51,63040,63041,63043,63045,63047,63049,63052,63055,63057],{"class":53,"line":33128},[51,63042,55674],{"class":65},[51,63044,10],{"class":51672},[51,63046,53858],{"class":57},[51,63048,70],{"class":65},[51,63050,63051],{"class":61},"\"name\"",[51,63053,63054],{"class":65},">清风徐来\u003C\u002F",[51,63056,10],{"class":51672},[51,63058,51679],{"class":65},[51,63060,63061,63063,63065,63067,63069,63072,63075,63077],{"class":53,"line":33148},[51,63062,55674],{"class":65},[51,63064,10],{"class":51672},[51,63066,53858],{"class":57},[51,63068,70],{"class":65},[51,63070,63071],{"class":61},"\"text\"",[51,63073,63074],{"class":65},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[51,63076,10],{"class":51672},[51,63078,51679],{"class":65},[51,63080,63081,63083,63085,63087,63089,63092,63095,63097],{"class":53,"line":33154},[51,63082,55674],{"class":65},[51,63084,10],{"class":51672},[51,63086,53858],{"class":57},[51,63088,70],{"class":65},[51,63090,63091],{"class":61},"\"time\"",[51,63093,63094],{"class":65},">2022-10-10 20:29:21\u003C\u002F",[51,63096,10],{"class":51672},[51,63098,51679],{"class":65},[51,63100,63101,63103,63105],{"class":53,"line":33170},[51,63102,55779],{"class":65},[51,63104,51983],{"class":51672},[51,63106,51679],{"class":65},[51,63108,63109,63111,63113],{"class":53,"line":33176},[51,63110,52148],{"class":65},[51,63112,51983],{"class":51672},[51,63114,51679],{"class":65},[51,63116,63117,63119,63121],{"class":53,"line":33190},[51,63118,52789],{"class":65},[51,63120,51983],{"class":51672},[51,63122,51679],{"class":65},[51,63124,63125,63127,63129],{"class":53,"line":33196},[51,63126,52516],{"class":65},[51,63128,52185],{"class":51672},[51,63130,51679],{"class":65},[51,63132,63133,63135,63138,63140,63142,63144,63146,63149],{"class":53,"line":33211},[51,63134,11605],{"class":69},[51,63136,63137],{"class":278}," tx",[51,63139,13948],{"class":69},[51,63141,54768],{"class":65},[51,63143,54771],{"class":57},[51,63145,546],{"class":65},[51,63147,63148],{"class":61},"'#tx'",[51,63150,282],{"class":65},[51,63152,63153,63155,63158,63160,63162,63164,63166,63169],{"class":53,"line":33217},[51,63154,11605],{"class":69},[51,63156,63157],{"class":278}," total",[51,63159,13948],{"class":69},[51,63161,54768],{"class":65},[51,63163,54771],{"class":57},[51,63165,546],{"class":65},[51,63167,63168],{"class":61},"'.total'",[51,63170,282],{"class":65},[51,63172,63173],{"class":53,"line":33226},[51,63174,63175],{"class":601},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[51,63177,63178,63181,63183,63185,63187,63189,63191],{"class":53,"line":33232},[51,63179,63180],{"class":65},"    tx.",[51,63182,58185],{"class":57},[51,63184,546],{"class":65},[51,63186,61699],{"class":61},[51,63188,12819],{"class":65},[51,63190,54821],{"class":69},[51,63192,54824],{"class":65},[51,63194,63195,63198,63200],{"class":53,"line":33241},[51,63196,63197],{"class":65},"      total.style.opacity ",[51,63199,70],{"class":69},[51,63201,56071],{"class":278},[51,63203,63204],{"class":53,"line":33247},[51,63205,33836],{"class":65},[51,63207,63208],{"class":53,"line":33253},[51,63209,63210],{"class":601},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[51,63212,63213,63215,63217,63219,63221,63223,63225],{"class":53,"line":33262},[51,63214,63180],{"class":65},[51,63216,58185],{"class":57},[51,63218,546],{"class":65},[51,63220,61760],{"class":61},[51,63222,12819],{"class":65},[51,63224,54821],{"class":69},[51,63226,54824],{"class":65},[51,63228,63229,63231,63233],{"class":53,"line":33268},[51,63230,63197],{"class":65},[51,63232,70],{"class":69},[51,63234,47705],{"class":278},[51,63236,63237],{"class":53,"line":33279},[51,63238,33836],{"class":65},[51,63240,63241],{"class":53,"line":33285},[51,63242,63243],{"class":601},"    \u002F\u002F 3. 检测用户输入\n",[51,63245,63246,63248,63250,63252,63255,63257,63259],{"class":53,"line":33304},[51,63247,63180],{"class":65},[51,63249,58185],{"class":57},[51,63251,546],{"class":65},[51,63253,63254],{"class":61},"'input'",[51,63256,12819],{"class":65},[51,63258,54821],{"class":69},[51,63260,54824],{"class":65},[51,63262,63263],{"class":53,"line":33310},[51,63264,63265],{"class":601},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[51,63267,63268,63271,63273,63276,63279,63281,63284,63286,63288],{"class":53,"line":33321},[51,63269,63270],{"class":65},"      total.innerHTML ",[51,63272,70],{"class":69},[51,63274,63275],{"class":61}," `${",[51,63277,63278],{"class":65},"tx",[51,63280,1100],{"class":61},[51,63282,63283],{"class":65},"value",[51,63285,1100],{"class":61},[51,63287,52340],{"class":278},[51,63289,63290],{"class":61},"}\u002F200字`\n",[51,63292,63293],{"class":53,"line":33327},[51,63294,33836],{"class":65},[51,63296,63297],{"class":53,"line":33347},[51,63298,206],{"emptyLinePlaceholder":205},[51,63300,63301],{"class":53,"line":33363},[51,63302,63303],{"class":601},"    \u002F\u002F const str = 'andy'\n",[51,63305,63306],{"class":53,"line":33369},[51,63307,63308],{"class":601},"    \u002F\u002F console.log(str.length)\n",[51,63310,63311,63313,63315],{"class":53,"line":33383},[51,63312,52789],{"class":65},[51,63314,52185],{"class":51672},[51,63316,51679],{"class":65},[51,63318,63319,63321,63323],{"class":53,"line":33389},[51,63320,52157],{"class":65},[51,63322,52172],{"class":51672},[51,63324,51679],{"class":65},[51,63326,63327],{"class":53,"line":33395},[51,63328,206],{"emptyLinePlaceholder":205},[51,63330,63331,63333,63335],{"class":53,"line":33406},[51,63332,52157],{"class":65},[51,63334,51007],{"class":51672},[51,63336,51679],{"class":65},[22381,63338,63340],{"id":63339},"_3254-change事件","3.2.5.4 change事件",[10,63342,63343],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[10,63345,63346],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[10,63348,63349],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[41,63351,63353],{"className":51005,"code":63352,"language":51007,"meta":46,"style":46},"\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",[48,63354,63355,63365,63379,63383,63391,63405,63425,63437,63445,63449,63457,63471,63479,63497,63515,63527,63531,63539,63547,63551],{"__ignoreMap":46},[51,63356,63357,63359,63361,63363],{"class":53,"line":54},[51,63358,51669],{"class":65},[51,63360,51673],{"class":51672},[51,63362,51676],{"class":57},[51,63364,51679],{"class":65},[51,63366,63367,63369,63371,63373,63375,63377],{"class":53,"line":185},[51,63368,1452],{"class":65},[51,63370,51007],{"class":51672},[51,63372,51688],{"class":57},[51,63374,70],{"class":65},[51,63376,51693],{"class":61},[51,63378,51679],{"class":65},[51,63380,63381],{"class":53,"line":202},[51,63382,206],{"emptyLinePlaceholder":205},[51,63384,63385,63387,63389],{"class":53,"line":209},[51,63386,1452],{"class":65},[51,63388,51706],{"class":51672},[51,63390,51679],{"class":65},[51,63392,63393,63395,63397,63399,63401,63403],{"class":53,"line":223},[51,63394,52516],{"class":65},[51,63396,51716],{"class":51672},[51,63398,51719],{"class":57},[51,63400,70],{"class":65},[51,63402,51724],{"class":61},[51,63404,51679],{"class":65},[51,63406,63407,63409,63411,63413,63415,63417,63419,63421,63423],{"class":53,"line":237},[51,63408,52516],{"class":65},[51,63410,51716],{"class":51672},[51,63412,15304],{"class":57},[51,63414,70],{"class":65},[51,63416,51763],{"class":61},[51,63418,51743],{"class":57},[51,63420,70],{"class":65},[51,63422,51770],{"class":61},[51,63424,51679],{"class":65},[51,63426,63427,63429,63431,63433,63435],{"class":53,"line":242},[51,63428,52516],{"class":65},[51,63430,51779],{"class":51672},[51,63432,51782],{"class":65},[51,63434,51779],{"class":51672},[51,63436,51679],{"class":65},[51,63438,63439,63441,63443],{"class":53,"line":257},[51,63440,52157],{"class":65},[51,63442,51706],{"class":51672},[51,63444,51679],{"class":65},[51,63446,63447],{"class":53,"line":262},[51,63448,206],{"emptyLinePlaceholder":205},[51,63450,63451,63453,63455],{"class":53,"line":285},[51,63452,1452],{"class":65},[51,63454,52172],{"class":51672},[51,63456,51679],{"class":65},[51,63458,63459,63461,63463,63465,63467,63469],{"class":53,"line":296},[51,63460,52516],{"class":65},[51,63462,54193],{"class":51672},[51,63464,54196],{"class":57},[51,63466,70],{"class":65},[51,63468,63071],{"class":61},[51,63470,51679],{"class":65},[51,63472,63473,63475,63477],{"class":53,"line":307},[51,63474,52516],{"class":65},[51,63476,52185],{"class":51672},[51,63478,51679],{"class":65},[51,63480,63481,63483,63485,63487,63489,63491,63493,63495],{"class":53,"line":324},[51,63482,11605],{"class":69},[51,63484,60977],{"class":278},[51,63486,13948],{"class":69},[51,63488,54768],{"class":65},[51,63490,54771],{"class":57},[51,63492,546],{"class":65},[51,63494,63254],{"class":61},[51,63496,282],{"class":65},[51,63498,63499,63502,63504,63506,63509,63511,63513],{"class":53,"line":329},[51,63500,63501],{"class":65},"    input.",[51,63503,58185],{"class":57},[51,63505,546],{"class":65},[51,63507,63508],{"class":61},"'change'",[51,63510,12819],{"class":65},[51,63512,54821],{"class":69},[51,63514,54824],{"class":65},[51,63516,63517,63519,63521,63523,63525],{"class":53,"line":334},[51,63518,58616],{"class":65},[51,63520,58619],{"class":57},[51,63522,546],{"class":65},[51,63524,1135],{"class":278},[51,63526,282],{"class":65},[51,63528,63529],{"class":53,"line":340},[51,63530,33836],{"class":65},[51,63532,63533,63535,63537],{"class":53,"line":345},[51,63534,52789],{"class":65},[51,63536,52185],{"class":51672},[51,63538,51679],{"class":65},[51,63540,63541,63543,63545],{"class":53,"line":357},[51,63542,52157],{"class":65},[51,63544,52172],{"class":51672},[51,63546,51679],{"class":65},[51,63548,63549],{"class":53,"line":366},[51,63550,206],{"emptyLinePlaceholder":205},[51,63552,63553,63555,63557],{"class":53,"line":383},[51,63554,52157],{"class":65},[51,63556,51007],{"class":51672},[51,63558,51679],{"class":65},[10,63560,63561],{},"总结：内容发生改变才回去触发",[513,63563,63565],{"id":63564},"_326-事件对象","3.2.6 事件对象",[22381,63567,63569],{"id":63568},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[10,63571,63572],{},[460,63573],{"alt":46,"src":63574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[10,63576,63577],{},[460,63578],{"alt":46,"src":63579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[10,63581,63582],{},"点击一次，就输出了事件对象，它是个对象",[10,63584,63585],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[10,63587,63588],{},[460,63589],{"alt":46,"src":63590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22381,63592,63594],{"id":63593},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[10,63596,63597],{},[460,63598],{"alt":46,"src":63599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[10,63601,63602],{},"实现按特殊字符才是实现打印输出效果：",[41,63604,63606],{"className":53439,"code":63605,"language":53441,"meta":46,"style":46},"\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",[48,63607,63608,63616,63621,63635,63643,63648,63653,63658,63663,63668,63673,63678,63683,63688,63692,63696,63704],{"__ignoreMap":46},[51,63609,63610,63612,63614],{"class":53,"line":54},[51,63611,1452],{"class":65},[51,63613,52172],{"class":51672},[51,63615,51679],{"class":65},[51,63617,63618],{"class":53,"line":185},[51,63619,63620],{"class":601},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[51,63622,63623,63625,63627,63629,63631,63633],{"class":53,"line":202},[51,63624,52516],{"class":65},[51,63626,54193],{"class":51672},[51,63628,54196],{"class":57},[51,63630,70],{"class":65},[51,63632,63071],{"class":61},[51,63634,51679],{"class":65},[51,63636,63637,63639,63641],{"class":53,"line":209},[51,63638,52516],{"class":65},[51,63640,52185],{"class":51672},[51,63642,51679],{"class":65},[51,63644,63645],{"class":53,"line":223},[51,63646,63647],{"class":65},"    \u002F\u002F const btn = document.querySelector('button')\n",[51,63649,63650],{"class":53,"line":237},[51,63651,63652],{"class":65},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[51,63654,63655],{"class":53,"line":242},[51,63656,63657],{"class":65},"    \u002F\u002F   console.log(e);\n",[51,63659,63660],{"class":53,"line":257},[51,63661,63662],{"class":65},"    \u002F\u002F })\n",[51,63664,63665],{"class":53,"line":262},[51,63666,63667],{"class":65},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[51,63669,63670],{"class":53,"line":285},[51,63671,63672],{"class":65},"    const input = document.querySelector('input')\n",[51,63674,63675],{"class":53,"line":296},[51,63676,63677],{"class":65},"    input.addEventListener('keyup', function (e) {\n",[51,63679,63680],{"class":53,"line":307},[51,63681,63682],{"class":65},"      if (e.key === 'Enter') {\n",[51,63684,63685],{"class":53,"line":324},[51,63686,63687],{"class":65},"        console.log('我按下了回车键')\n",[51,63689,63690],{"class":53,"line":329},[51,63691,52770],{"class":65},[51,63693,63694],{"class":53,"line":334},[51,63695,33836],{"class":65},[51,63697,63698,63700,63702],{"class":53,"line":340},[51,63699,52789],{"class":65},[51,63701,52185],{"class":51672},[51,63703,51679],{"class":65},[51,63705,63706,63708,63710],{"class":53,"line":345},[51,63707,52157],{"class":65},[51,63709,52172],{"class":51672},[51,63711,51679],{"class":65},[22381,63713,63715],{"id":63714},"_3263-trim方法","3.2.6.3 trim方法",[10,63717,63718],{},[460,63719],{"alt":46,"src":63720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[10,63722,63723],{},[460,63724],{"alt":46,"src":63725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[10,63727,63728],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[10,63730,63731],{},"str.trim()",[513,63733,63735],{"id":63734},"_327-环境对象","3.2.7 环境对象",[10,63737,63738],{},[460,63739],{"alt":46,"src":63740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[10,63742,63743],{},[460,63744],{"alt":46,"src":63745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[10,63747,63748],{},[460,63749],{"alt":46,"src":63750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[10,63752,63753],{},"实际函数调用是window.fn()",[10,63755,63756],{},"普通函数里面this指向的是window",[1549,63758,63759,63762,63765],{},[22,63760,63761],{},"在普通函数下，this指向的是window",[22,63763,63764],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[22,63766,63767],{},"箭头函数没有this",[10,63769,63770],{},"粗略记法就是：谁调用，this就指向谁",[10,63772,63773],{},[460,63774],{"alt":46,"src":63775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[10,63777,63778],{},[460,63779],{"alt":46,"src":63780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[10,63782,63783],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[10,63785,63786],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[41,63788,63790],{"className":53439,"code":63789,"language":53441,"meta":46,"style":46},"\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",[48,63791,63792,63800,63812,63820,63825,63830,63835,63840,63844,63852],{"__ignoreMap":46},[51,63793,63794,63796,63798],{"class":53,"line":54},[51,63795,1452],{"class":65},[51,63797,52172],{"class":51672},[51,63799,51679],{"class":65},[51,63801,63802,63804,63806,63808,63810],{"class":53,"line":185},[51,63803,52516],{"class":65},[51,63805,54259],{"class":51672},[51,63807,54265],{"class":65},[51,63809,54259],{"class":51672},[51,63811,51679],{"class":65},[51,63813,63814,63816,63818],{"class":53,"line":202},[51,63815,52516],{"class":65},[51,63817,52185],{"class":51672},[51,63819,51679],{"class":65},[51,63821,63822],{"class":53,"line":209},[51,63823,63824],{"class":65},"    const button = document.querySelector('button')\n",[51,63826,63827],{"class":53,"line":223},[51,63828,63829],{"class":65},"    button.addEventListener('click', function () {\n",[51,63831,63832],{"class":53,"line":237},[51,63833,63834],{"class":65},"      \u002F\u002F console.log(this);\n",[51,63836,63837],{"class":53,"line":242},[51,63838,63839],{"class":65},"      this.style.color = 'pink'\n",[51,63841,63842],{"class":53,"line":257},[51,63843,33836],{"class":65},[51,63845,63846,63848,63850],{"class":53,"line":262},[51,63847,52789],{"class":65},[51,63849,52185],{"class":51672},[51,63851,51679],{"class":65},[51,63853,63854,63856,63858],{"class":53,"line":285},[51,63855,52157],{"class":65},[51,63857,52172],{"class":51672},[51,63859,51679],{"class":65},[513,63861,63863],{"id":63862},"_328-回调函数","3.2.8 回调函数",[10,63865,63866],{},[460,63867],{"alt":46,"src":63868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[10,63870,63871],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[10,63873,11716],{},[1549,63875,63876,63879,63882],{},[22,63877,63878],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[22,63880,63881],{},"回调函数本质还是函数，只不过把它当成参数使用",[22,63883,63884],{},"使用匿名函数做为回调函数比较常见",[513,63886,63888],{"id":63887},"_329-tab栏切换","3.2.9 tab栏切换",[10,63890,63891],{},[460,63892],{"alt":46,"src":63893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[41,63895,63897],{"className":51005,"code":63896,"language":51007,"meta":46,"style":46},"\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",[48,63898,63899,63909,63923,63927,63935,63949,63969,63989,64002,64010,64016,64026,64036,64040,64044,64051,64064,64077,64089,64105,64109,64113,64120,64132,64144,64156,64166,64176,64180,64184,64193,64205,64216,64228,64232,64236,64244,64254,64264,64274,64278,64282,64292,64306,64318,64322,64326,64338,64349,64366,64376,64380,64384,64399,64410,64420,64424,64428,64435,64450,64454,64458,64466,64476,64480,64484,64493,64503,64507,64515,64523,64527,64535,64550,64565,64578,64586,64620,64647,64674,64701,64728,64736,64744,64759,64796,64831,64866,64901,64936,64944,64952,64960,64965,64970,64990,64995,65024,65029,65034,65052,65057,65062,65067,65089,65094,65110,65114,65119,65124,65145,65150,65179,65183,65188,65192,65200,65208,65212],{"__ignoreMap":46},[51,63900,63901,63903,63905,63907],{"class":53,"line":54},[51,63902,51669],{"class":65},[51,63904,51673],{"class":51672},[51,63906,51676],{"class":57},[51,63908,51679],{"class":65},[51,63910,63911,63913,63915,63917,63919,63921],{"class":53,"line":185},[51,63912,1452],{"class":65},[51,63914,51007],{"class":51672},[51,63916,51688],{"class":57},[51,63918,70],{"class":65},[51,63920,51693],{"class":61},[51,63922,51679],{"class":65},[51,63924,63925],{"class":53,"line":202},[51,63926,206],{"emptyLinePlaceholder":205},[51,63928,63929,63931,63933],{"class":53,"line":209},[51,63930,1452],{"class":65},[51,63932,51706],{"class":51672},[51,63934,51679],{"class":65},[51,63936,63937,63939,63941,63943,63945,63947],{"class":53,"line":223},[51,63938,52516],{"class":65},[51,63940,51716],{"class":51672},[51,63942,51719],{"class":57},[51,63944,70],{"class":65},[51,63946,51724],{"class":61},[51,63948,59499],{"class":65},[51,63950,63951,63953,63955,63957,63959,63961,63963,63965,63967],{"class":53,"line":237},[51,63952,52516],{"class":65},[51,63954,51716],{"class":51672},[51,63956,51735],{"class":57},[51,63958,70],{"class":65},[51,63960,51740],{"class":61},[51,63962,51743],{"class":57},[51,63964,70],{"class":65},[51,63966,51748],{"class":61},[51,63968,59499],{"class":65},[51,63970,63971,63973,63975,63977,63979,63981,63983,63985,63987],{"class":53,"line":242},[51,63972,52516],{"class":65},[51,63974,51716],{"class":51672},[51,63976,15304],{"class":57},[51,63978,70],{"class":65},[51,63980,51763],{"class":61},[51,63982,51743],{"class":57},[51,63984,70],{"class":65},[51,63986,51770],{"class":61},[51,63988,59499],{"class":65},[51,63990,63991,63993,63995,63998,64000],{"class":53,"line":257},[51,63992,52516],{"class":65},[51,63994,51779],{"class":51672},[51,63996,63997],{"class":65},">tab栏切换\u003C\u002F",[51,63999,51779],{"class":51672},[51,64001,51679],{"class":65},[51,64003,64004,64006,64008],{"class":53,"line":262},[51,64005,52516],{"class":65},[51,64007,464],{"class":51672},[51,64009,51679],{"class":65},[51,64011,64012,64014],{"class":53,"line":285},[51,64013,6787],{"class":51672},[51,64015,15956],{"class":65},[51,64017,64018,64020,64022,64024],{"class":53,"line":296},[51,64019,55078],{"class":278},[51,64021,51809],{"class":65},[51,64023,733],{"class":278},[51,64025,1703],{"class":65},[51,64027,64028,64030,64032,64034],{"class":53,"line":307},[51,64029,55067],{"class":278},[51,64031,51809],{"class":65},[51,64033,733],{"class":278},[51,64035,1703],{"class":65},[51,64037,64038],{"class":53,"line":324},[51,64039,2577],{"class":65},[51,64041,64042],{"class":53,"line":329},[51,64043,206],{"emptyLinePlaceholder":205},[51,64045,64046,64049],{"class":53,"line":334},[51,64047,64048],{"class":57},"    .tab",[51,64050,15956],{"class":65},[51,64052,64053,64055,64057,64060,64062],{"class":53,"line":340},[51,64054,55143],{"class":278},[51,64056,51809],{"class":65},[51,64058,64059],{"class":278},"590",[51,64061,51864],{"class":69},[51,64063,1703],{"class":65},[51,64065,64066,64068,64070,64073,64075],{"class":53,"line":345},[51,64067,55157],{"class":278},[51,64069,51809],{"class":65},[51,64071,64072],{"class":278},"340",[51,64074,51864],{"class":69},[51,64076,1703],{"class":65},[51,64078,64079,64081,64083,64085,64087],{"class":53,"line":357},[51,64080,55078],{"class":278},[51,64082,51809],{"class":65},[51,64084,1242],{"class":278},[51,64086,51864],{"class":69},[51,64088,1703],{"class":65},[51,64090,64091,64093,64095,64097,64099,64101,64103],{"class":53,"line":366},[51,64092,62349],{"class":278},[51,64094,51809],{"class":65},[51,64096,759],{"class":278},[51,64098,51864],{"class":69},[51,64100,51893],{"class":278},[51,64102,62616],{"class":278},[51,64104,1703],{"class":65},[51,64106,64107],{"class":53,"line":383},[51,64108,2577],{"class":65},[51,64110,64111],{"class":53,"line":392},[51,64112,206],{"emptyLinePlaceholder":205},[51,64114,64115,64118],{"class":53,"line":403},[51,64116,64117],{"class":57},"    .tab-nav",[51,64119,15956],{"class":65},[51,64121,64122,64124,64126,64128,64130],{"class":53,"line":409},[51,64123,55143],{"class":278},[51,64125,51809],{"class":65},[51,64127,853],{"class":278},[51,64129,870],{"class":69},[51,64131,1703],{"class":65},[51,64133,64134,64136,64138,64140,64142],{"class":53,"line":414},[51,64135,55157],{"class":278},[51,64137,51809],{"class":65},[51,64139,1449],{"class":278},[51,64141,51864],{"class":69},[51,64143,1703],{"class":65},[51,64145,64146,64148,64150,64152,64154],{"class":53,"line":433},[51,64147,57731],{"class":278},[51,64149,51809],{"class":65},[51,64151,1449],{"class":278},[51,64153,51864],{"class":69},[51,64155,1703],{"class":65},[51,64157,64158,64160,64162,64164],{"class":53,"line":439},[51,64159,55381],{"class":278},[51,64161,51809],{"class":65},[51,64163,51849],{"class":278},[51,64165,1703],{"class":65},[51,64167,64168,64170,64172,64174],{"class":53,"line":444},[51,64169,55392],{"class":278},[51,64171,51809],{"class":65},[51,64173,52040],{"class":278},[51,64175,1703],{"class":65},[51,64177,64178],{"class":53,"line":453},[51,64179,2577],{"class":65},[51,64181,64182],{"class":53,"line":2174},[51,64183,206],{"emptyLinePlaceholder":205},[51,64185,64186,64188,64191],{"class":53,"line":2965},[51,64187,64117],{"class":57},[51,64189,64190],{"class":51672}," h3",[51,64192,15956],{"class":65},[51,64194,64195,64197,64199,64201,64203],{"class":53,"line":2979},[51,64196,55294],{"class":278},[51,64198,51809],{"class":65},[51,64200,1342],{"class":278},[51,64202,51864],{"class":69},[51,64204,1703],{"class":65},[51,64206,64207,64209,64211,64214],{"class":53,"line":2987},[51,64208,62706],{"class":278},[51,64210,51809],{"class":65},[51,64212,64213],{"class":278},"normal",[51,64215,1703],{"class":65},[51,64217,64218,64220,64222,64224,64226],{"class":53,"line":2992},[51,64219,62372],{"class":278},[51,64221,51809],{"class":65},[51,64223,1242],{"class":278},[51,64225,51864],{"class":69},[51,64227,1703],{"class":65},[51,64229,64230],{"class":53,"line":2998},[51,64231,2577],{"class":65},[51,64233,64234],{"class":53,"line":3004},[51,64235,206],{"emptyLinePlaceholder":205},[51,64237,64238,64240,64242],{"class":53,"line":3009},[51,64239,64117],{"class":57},[51,64241,61664],{"class":51672},[51,64243,15956],{"class":65},[51,64245,64246,64248,64250,64252],{"class":53,"line":8332},[51,64247,55104],{"class":278},[51,64249,51809],{"class":65},[51,64251,55109],{"class":278},[51,64253,1703],{"class":65},[51,64255,64256,64258,64260,64262],{"class":53,"line":8356},[51,64257,55381],{"class":278},[51,64259,51809],{"class":65},[51,64261,51849],{"class":278},[51,64263,1703],{"class":65},[51,64265,64266,64268,64270,64272],{"class":53,"line":8361},[51,64267,55392],{"class":278},[51,64269,51809],{"class":65},[51,64271,51952],{"class":278},[51,64273,1703],{"class":65},[51,64275,64276],{"class":53,"line":8367},[51,64277,2577],{"class":65},[51,64279,64280],{"class":53,"line":8394},[51,64281,206],{"emptyLinePlaceholder":205},[51,64283,64284,64286,64288,64290],{"class":53,"line":8399},[51,64285,64117],{"class":57},[51,64287,61664],{"class":51672},[51,64289,55447],{"class":51672},[51,64291,15956],{"class":65},[51,64293,64294,64296,64298,64300,64302,64304],{"class":53,"line":8405},[51,64295,55078],{"class":278},[51,64297,51809],{"class":65},[51,64299,733],{"class":278},[51,64301,9334],{"class":278},[51,64303,51864],{"class":69},[51,64305,1703],{"class":65},[51,64307,64308,64310,64312,64314,64316],{"class":53,"line":8417},[51,64309,55294],{"class":278},[51,64311,51809],{"class":65},[51,64313,1091],{"class":278},[51,64315,51864],{"class":69},[51,64317,1703],{"class":65},[51,64319,64320],{"class":53,"line":8429},[51,64321,2577],{"class":65},[51,64323,64324],{"class":53,"line":8441},[51,64325,206],{"emptyLinePlaceholder":205},[51,64327,64328,64330,64332,64334,64336],{"class":53,"line":10100},[51,64329,64117],{"class":57},[51,64331,61664],{"class":51672},[51,64333,55447],{"class":51672},[51,64335,1808],{"class":51672},[51,64337,15956],{"class":65},[51,64339,64340,64343,64345,64347],{"class":53,"line":10125},[51,64341,64342],{"class":278},"      text-decoration",[51,64344,51809],{"class":65},[51,64346,55109],{"class":278},[51,64348,1703],{"class":65},[51,64350,64351,64353,64355,64357,64359,64361,64364],{"class":53,"line":10148},[51,64352,62604],{"class":278},[51,64354,51809],{"class":65},[51,64356,620],{"class":278},[51,64358,51864],{"class":69},[51,64360,51893],{"class":278},[51,64362,64363],{"class":278}," transparent",[51,64365,1703],{"class":65},[51,64367,64368,64370,64372,64374],{"class":53,"line":10172},[51,64369,57788],{"class":278},[51,64371,51809],{"class":65},[51,64373,62741],{"class":278},[51,64375,1703],{"class":65},[51,64377,64378],{"class":53,"line":10177},[51,64379,2577],{"class":65},[51,64381,64382],{"class":53,"line":10182},[51,64383,206],{"emptyLinePlaceholder":205},[51,64385,64386,64388,64390,64392,64394,64397],{"class":53,"line":10187},[51,64387,64117],{"class":57},[51,64389,61664],{"class":51672},[51,64391,55447],{"class":51672},[51,64393,1808],{"class":51672},[51,64395,64396],{"class":57},".active",[51,64398,15956],{"class":65},[51,64400,64401,64403,64405,64408],{"class":53,"line":10196},[51,64402,62163],{"class":278},[51,64404,51809],{"class":65},[51,64406,64407],{"class":278},"#e1251b",[51,64409,1703],{"class":65},[51,64411,64412,64414,64416,64418],{"class":53,"line":10201},[51,64413,57788],{"class":278},[51,64415,51809],{"class":65},[51,64417,64407],{"class":278},[51,64419,1703],{"class":65},[51,64421,64422],{"class":53,"line":10207},[51,64423,2577],{"class":65},[51,64425,64426],{"class":53,"line":10228},[51,64427,206],{"emptyLinePlaceholder":205},[51,64429,64430,64433],{"class":53,"line":10234},[51,64431,64432],{"class":57},"    .tab-content",[51,64434,15956],{"class":65},[51,64436,64437,64439,64441,64443,64446,64448],{"class":53,"line":10248},[51,64438,55067],{"class":278},[51,64440,51809],{"class":65},[51,64442,733],{"class":278},[51,64444,64445],{"class":278}," 16",[51,64447,51864],{"class":69},[51,64449,1703],{"class":65},[51,64451,64452],{"class":53,"line":10254},[51,64453,2577],{"class":65},[51,64455,64456],{"class":53,"line":10281},[51,64457,206],{"emptyLinePlaceholder":205},[51,64459,64460,64462,64464],{"class":53,"line":10290},[51,64461,64432],{"class":57},[51,64463,62546],{"class":57},[51,64465,15956],{"class":65},[51,64467,64468,64470,64472,64474],{"class":53,"line":10296},[51,64469,55381],{"class":278},[51,64471,51809],{"class":65},[51,64473,55109],{"class":278},[51,64475,1703],{"class":65},[51,64477,64478],{"class":53,"line":10304},[51,64479,2577],{"class":65},[51,64481,64482],{"class":53,"line":10309},[51,64483,206],{"emptyLinePlaceholder":205},[51,64485,64486,64488,64491],{"class":53,"line":16987},[51,64487,64432],{"class":57},[51,64489,64490],{"class":57}," .item.active",[51,64492,15956],{"class":65},[51,64494,64495,64497,64499,64501],{"class":53,"line":16993},[51,64496,55381],{"class":278},[51,64498,51809],{"class":65},[51,64500,61241],{"class":278},[51,64502,1703],{"class":65},[51,64504,64505],{"class":53,"line":17016},[51,64506,2577],{"class":65},[51,64508,64509,64511,64513],{"class":53,"line":17022},[51,64510,52789],{"class":65},[51,64512,464],{"class":51672},[51,64514,51679],{"class":65},[51,64516,64517,64519,64521],{"class":53,"line":17045},[51,64518,52157],{"class":65},[51,64520,51706],{"class":51672},[51,64522,51679],{"class":65},[51,64524,64525],{"class":53,"line":17059},[51,64526,206],{"emptyLinePlaceholder":205},[51,64528,64529,64531,64533],{"class":53,"line":17079},[51,64530,1452],{"class":65},[51,64532,52172],{"class":51672},[51,64534,51679],{"class":65},[51,64536,64537,64539,64541,64543,64545,64548],{"class":53,"line":17085},[51,64538,52516],{"class":65},[51,64540,51983],{"class":51672},[51,64542,53858],{"class":57},[51,64544,70],{"class":65},[51,64546,64547],{"class":61},"\"tab\"",[51,64549,51679],{"class":65},[51,64551,64552,64554,64556,64558,64560,64563],{"class":53,"line":17096},[51,64553,51713],{"class":65},[51,64555,51983],{"class":51672},[51,64557,53858],{"class":57},[51,64559,70],{"class":65},[51,64561,64562],{"class":61},"\"tab-nav\"",[51,64564,51679],{"class":65},[51,64566,64567,64569,64571,64574,64576],{"class":53,"line":17119},[51,64568,55606],{"class":65},[51,64570,513],{"class":51672},[51,64572,64573],{"class":65},">每日特价\u003C\u002F",[51,64575,513],{"class":51672},[51,64577,51679],{"class":65},[51,64579,64580,64582,64584],{"class":53,"line":17141},[51,64581,55606],{"class":65},[51,64583,1549],{"class":51672},[51,64585,51679],{"class":65},[51,64587,64588,64590,64592,64594,64596,64598,64600,64602,64604,64606,64609,64612,64614,64616,64618],{"class":53,"line":17146},[51,64589,55674],{"class":65},[51,64591,22],{"class":51672},[51,64593,61424],{"class":65},[51,64595,780],{"class":51672},[51,64597,53858],{"class":57},[51,64599,70],{"class":65},[51,64601,60078],{"class":61},[51,64603,61429],{"class":57},[51,64605,70],{"class":65},[51,64607,64608],{"class":61},"\"javascript:;\"",[51,64610,64611],{"class":65},">精选\u003C\u002F",[51,64613,780],{"class":51672},[51,64615,55686],{"class":65},[51,64617,22],{"class":51672},[51,64619,51679],{"class":65},[51,64621,64622,64624,64626,64628,64630,64632,64634,64636,64639,64641,64643,64645],{"class":53,"line":17152},[51,64623,55674],{"class":65},[51,64625,22],{"class":51672},[51,64627,61424],{"class":65},[51,64629,780],{"class":51672},[51,64631,61429],{"class":57},[51,64633,70],{"class":65},[51,64635,64608],{"class":61},[51,64637,64638],{"class":65},">美食\u003C\u002F",[51,64640,780],{"class":51672},[51,64642,55686],{"class":65},[51,64644,22],{"class":51672},[51,64646,51679],{"class":65},[51,64648,64649,64651,64653,64655,64657,64659,64661,64663,64666,64668,64670,64672],{"class":53,"line":17166},[51,64650,55674],{"class":65},[51,64652,22],{"class":51672},[51,64654,61424],{"class":65},[51,64656,780],{"class":51672},[51,64658,61429],{"class":57},[51,64660,70],{"class":65},[51,64662,64608],{"class":61},[51,64664,64665],{"class":65},">百货\u003C\u002F",[51,64667,780],{"class":51672},[51,64669,55686],{"class":65},[51,64671,22],{"class":51672},[51,64673,51679],{"class":65},[51,64675,64676,64678,64680,64682,64684,64686,64688,64690,64693,64695,64697,64699],{"class":53,"line":17179},[51,64677,55674],{"class":65},[51,64679,22],{"class":51672},[51,64681,61424],{"class":65},[51,64683,780],{"class":51672},[51,64685,61429],{"class":57},[51,64687,70],{"class":65},[51,64689,64608],{"class":61},[51,64691,64692],{"class":65},">个护\u003C\u002F",[51,64694,780],{"class":51672},[51,64696,55686],{"class":65},[51,64698,22],{"class":51672},[51,64700,51679],{"class":65},[51,64702,64703,64705,64707,64709,64711,64713,64715,64717,64720,64722,64724,64726],{"class":53,"line":17184},[51,64704,55674],{"class":65},[51,64706,22],{"class":51672},[51,64708,61424],{"class":65},[51,64710,780],{"class":51672},[51,64712,61429],{"class":57},[51,64714,70],{"class":65},[51,64716,64608],{"class":61},[51,64718,64719],{"class":65},">预告\u003C\u002F",[51,64721,780],{"class":51672},[51,64723,55686],{"class":65},[51,64725,22],{"class":51672},[51,64727,51679],{"class":65},[51,64729,64730,64732,64734],{"class":53,"line":17198},[51,64731,55779],{"class":65},[51,64733,1549],{"class":51672},[51,64735,51679],{"class":65},[51,64737,64738,64740,64742],{"class":53,"line":17203},[51,64739,52148],{"class":65},[51,64741,51983],{"class":51672},[51,64743,51679],{"class":65},[51,64745,64746,64748,64750,64752,64754,64757],{"class":53,"line":17209},[51,64747,51713],{"class":65},[51,64749,51983],{"class":51672},[51,64751,53858],{"class":57},[51,64753,70],{"class":65},[51,64755,64756],{"class":61},"\"tab-content\"",[51,64758,51679],{"class":65},[51,64760,64761,64763,64765,64767,64769,64772,64774,64776,64778,64780,64783,64785,64787,64789,64792,64794],{"class":53,"line":17214},[51,64762,55606],{"class":65},[51,64764,51983],{"class":51672},[51,64766,53858],{"class":57},[51,64768,70],{"class":65},[51,64770,64771],{"class":61},"\"item active\"",[51,64773,61424],{"class":65},[51,64775,460],{"class":51672},[51,64777,55611],{"class":57},[51,64779,70],{"class":65},[51,64781,64782],{"class":61},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[51,64784,55619],{"class":57},[51,64786,70],{"class":65},[51,64788,8036],{"class":61},[51,64790,64791],{"class":65}," \u002F>\u003C\u002F",[51,64793,51983],{"class":51672},[51,64795,51679],{"class":65},[51,64797,64798,64800,64802,64804,64806,64808,64810,64812,64814,64816,64819,64821,64823,64825,64827,64829],{"class":53,"line":17228},[51,64799,55606],{"class":65},[51,64801,51983],{"class":51672},[51,64803,53858],{"class":57},[51,64805,70],{"class":65},[51,64807,62995],{"class":61},[51,64809,61424],{"class":65},[51,64811,460],{"class":51672},[51,64813,55611],{"class":57},[51,64815,70],{"class":65},[51,64817,64818],{"class":61},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[51,64820,55619],{"class":57},[51,64822,70],{"class":65},[51,64824,8036],{"class":61},[51,64826,64791],{"class":65},[51,64828,51983],{"class":51672},[51,64830,51679],{"class":65},[51,64832,64833,64835,64837,64839,64841,64843,64845,64847,64849,64851,64854,64856,64858,64860,64862,64864],{"class":53,"line":17233},[51,64834,55606],{"class":65},[51,64836,51983],{"class":51672},[51,64838,53858],{"class":57},[51,64840,70],{"class":65},[51,64842,62995],{"class":61},[51,64844,61424],{"class":65},[51,64846,460],{"class":51672},[51,64848,55611],{"class":57},[51,64850,70],{"class":65},[51,64852,64853],{"class":61},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[51,64855,55619],{"class":57},[51,64857,70],{"class":65},[51,64859,8036],{"class":61},[51,64861,64791],{"class":65},[51,64863,51983],{"class":51672},[51,64865,51679],{"class":65},[51,64867,64868,64870,64872,64874,64876,64878,64880,64882,64884,64886,64889,64891,64893,64895,64897,64899],{"class":53,"line":17238},[51,64869,55606],{"class":65},[51,64871,51983],{"class":51672},[51,64873,53858],{"class":57},[51,64875,70],{"class":65},[51,64877,62995],{"class":61},[51,64879,61424],{"class":65},[51,64881,460],{"class":51672},[51,64883,55611],{"class":57},[51,64885,70],{"class":65},[51,64887,64888],{"class":61},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[51,64890,55619],{"class":57},[51,64892,70],{"class":65},[51,64894,8036],{"class":61},[51,64896,64791],{"class":65},[51,64898,51983],{"class":51672},[51,64900,51679],{"class":65},[51,64902,64903,64905,64907,64909,64911,64913,64915,64917,64919,64921,64924,64926,64928,64930,64932,64934],{"class":53,"line":17252},[51,64904,55606],{"class":65},[51,64906,51983],{"class":51672},[51,64908,53858],{"class":57},[51,64910,70],{"class":65},[51,64912,62995],{"class":61},[51,64914,61424],{"class":65},[51,64916,460],{"class":51672},[51,64918,55611],{"class":57},[51,64920,70],{"class":65},[51,64922,64923],{"class":61},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[51,64925,55619],{"class":57},[51,64927,70],{"class":65},[51,64929,8036],{"class":61},[51,64931,64791],{"class":65},[51,64933,51983],{"class":51672},[51,64935,51679],{"class":65},[51,64937,64938,64940,64942],{"class":53,"line":17264},[51,64939,52148],{"class":65},[51,64941,51983],{"class":51672},[51,64943,51679],{"class":65},[51,64945,64946,64948,64950],{"class":53,"line":17269},[51,64947,52789],{"class":65},[51,64949,51983],{"class":51672},[51,64951,51679],{"class":65},[51,64953,64954,64956,64958],{"class":53,"line":17282},[51,64955,52516],{"class":65},[51,64957,52185],{"class":51672},[51,64959,51679],{"class":65},[51,64961,64962],{"class":53,"line":17287},[51,64963,64964],{"class":601},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[51,64966,64967],{"class":53,"line":17292},[51,64968,64969],{"class":601},"    \u002F\u002F 1.1 获取 a 元素 \n",[51,64971,64972,64974,64977,64979,64981,64983,64985,64988],{"class":53,"line":17297},[51,64973,11605],{"class":69},[51,64975,64976],{"class":278}," as",[51,64978,13948],{"class":69},[51,64980,54768],{"class":65},[51,64982,56053],{"class":57},[51,64984,546],{"class":65},[51,64986,64987],{"class":61},"'.tab-nav a'",[51,64989,282],{"class":65},[51,64991,64992],{"class":53,"line":17310},[51,64993,64994],{"class":601},"    \u002F\u002F console.log(as) \n",[51,64996,64997,64999,65001,65003,65005,65007,65009,65011,65013,65016,65018,65020,65022],{"class":53,"line":17315},[51,64998,3588],{"class":69},[51,65000,2060],{"class":65},[51,65002,52219],{"class":69},[51,65004,9822],{"class":65},[51,65006,70],{"class":69},[51,65008,4479],{"class":278},[51,65010,9829],{"class":65},[51,65012,1452],{"class":69},[51,65014,65015],{"class":65}," as.",[51,65017,52340],{"class":278},[51,65019,3601],{"class":65},[51,65021,2682],{"class":69},[51,65023,12826],{"class":65},[51,65025,65026],{"class":53,"line":33008},[51,65027,65028],{"class":601},"      \u002F\u002F console.log(as[i])\n",[51,65030,65031],{"class":53,"line":33014},[51,65032,65033],{"class":601},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[51,65035,65036,65039,65041,65043,65046,65048,65050],{"class":53,"line":33020},[51,65037,65038],{"class":65},"      as[i].",[51,65040,58185],{"class":57},[51,65042,546],{"class":65},[51,65044,65045],{"class":61},"'mouseenter'",[51,65047,12819],{"class":65},[51,65049,54821],{"class":69},[51,65051,54824],{"class":65},[51,65053,65054],{"class":53,"line":33026},[51,65055,65056],{"class":601},"        \u002F\u002F console.log('鼠标经过')\n",[51,65058,65059],{"class":53,"line":33032},[51,65060,65061],{"class":601},"        \u002F\u002F 排他思想  \n",[51,65063,65064],{"class":53,"line":33043},[51,65065,65066],{"class":601},"        \u002F\u002F 干掉别人 移除类active\n",[51,65068,65069,65071,65073,65075,65078,65080,65082,65084,65087],{"class":53,"line":33049},[51,65070,52297],{"class":65},[51,65072,54771],{"class":57},[51,65074,546],{"class":65},[51,65076,65077],{"class":61},"'.tab-nav .active'",[51,65079,57375],{"class":65},[51,65081,57378],{"class":57},[51,65083,546],{"class":65},[51,65085,65086],{"class":61},"'active'",[51,65088,282],{"class":65},[51,65090,65091],{"class":53,"line":33069},[51,65092,65093],{"class":601},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[51,65095,65096,65099,65102,65104,65106,65108],{"class":53,"line":33075},[51,65097,65098],{"class":278},"        this",[51,65100,65101],{"class":65},".classList.",[51,65103,5718],{"class":57},[51,65105,546],{"class":65},[51,65107,65086],{"class":61},[51,65109,282],{"class":65},[51,65111,65112],{"class":53,"line":33086},[51,65113,206],{"emptyLinePlaceholder":205},[51,65115,65116],{"class":53,"line":33092},[51,65117,65118],{"class":601},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[51,65120,65121],{"class":53,"line":33098},[51,65122,65123],{"class":601},"        \u002F\u002F 干掉别人\n",[51,65125,65126,65128,65130,65132,65135,65137,65139,65141,65143],{"class":53,"line":33104},[51,65127,52297],{"class":65},[51,65129,54771],{"class":57},[51,65131,546],{"class":65},[51,65133,65134],{"class":61},"'.tab-content .active'",[51,65136,57375],{"class":65},[51,65138,57378],{"class":57},[51,65140,546],{"class":65},[51,65142,65086],{"class":61},[51,65144,282],{"class":65},[51,65146,65147],{"class":53,"line":33110},[51,65148,65149],{"class":601},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[51,65151,65152,65154,65156,65158,65161,65163,65165,65167,65169,65171,65173,65175,65177],{"class":53,"line":33116},[51,65153,52297],{"class":65},[51,65155,54771],{"class":57},[51,65157,546],{"class":65},[51,65159,65160],{"class":61},"`.tab-content .item:nth-child(${",[51,65162,983],{"class":65},[51,65164,45938],{"class":69},[51,65166,25500],{"class":278},[51,65168,57404],{"class":61},[51,65170,57375],{"class":65},[51,65172,5718],{"class":57},[51,65174,546],{"class":65},[51,65176,65086],{"class":61},[51,65178,282],{"class":65},[51,65180,65181],{"class":53,"line":33122},[51,65182,206],{"emptyLinePlaceholder":205},[51,65184,65185],{"class":53,"line":33128},[51,65186,65187],{"class":65},"      })\n",[51,65189,65190],{"class":53,"line":33148},[51,65191,2577],{"class":65},[51,65193,65194,65196,65198],{"class":53,"line":33154},[51,65195,52789],{"class":65},[51,65197,52185],{"class":51672},[51,65199,51679],{"class":65},[51,65201,65202,65204,65206],{"class":53,"line":33170},[51,65203,52157],{"class":65},[51,65205,52172],{"class":51672},[51,65207,51679],{"class":65},[51,65209,65210],{"class":53,"line":33176},[51,65211,206],{"emptyLinePlaceholder":205},[51,65213,65214,65216,65218],{"class":53,"line":33190},[51,65215,52157],{"class":65},[51,65217,51007],{"class":51672},[51,65219,51679],{"class":65},[10,65221,65222],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[10,65224,65225],{},"在监听事件中，this指向的就是他的调用者",[10,65227,65228],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[10,65230,54092],{},[10,65232,65233],{},"(function () {",[10,65235,65236],{},"const list = document.querySelector('.xtx-elevator-list')",[10,65238,65239],{},"list.addEventListener('click', function (e) {",[10,65241,65242],{},"if (e.target.tagName === 'A') {",[10,65244,65245],{},"\u002F\u002F 排他思想",[10,65247,65248],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[10,65250,65251],{},"const old = document.querySelector('.xtx-elevator-list .active')",[10,65253,65254],{},"\u002F\u002F console.log(old);",[10,65256,65257],{},"\u002F\u002F 判断",[10,65259,65260],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[10,65262,65263],{},"if (old) old.classList.remove('active')",[10,65265,65266],{},"e.target.classList.add('active')",[10,65268,1488],{},[10,65270,52836],{},[10,65272,65273],{},"})();",[513,65275,65277],{"id":65276},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[41,65279,65281],{"className":51005,"code":65280,"language":51007,"meta":46,"style":46},"\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",[48,65282,65283,65293,65297,65305,65309,65323,65337,65349,65357,65363,65373,65383,65387,65391,65398,65410,65421,65438,65451,65465,65475,65479,65483,65490,65501,65519,65529,65541,65545,65549,65556,65573,65584,65596,65600,65604,65611,65623,65627,65635,65643,65647,65655,65663,65671,65686,65730,65738,65751,65764,65777,65785,65793,65801,65829,65837,65849,65862,65875,65883,65891,65899,65925,65933,65946,65958,65971,65979,65987,65995,66021,66029,66042,66054,66067,66075,66083,66091,66096,66116,66121,66141,66146,66163,66168,66176,66181,66210,66223,66227,66231,66236,66240,66268,66273,66290,66295,66300,66305,66310,66336,66340,66344,66352,66360,66364],{"__ignoreMap":46},[51,65284,65285,65287,65289,65291],{"class":53,"line":54},[51,65286,51669],{"class":65},[51,65288,51673],{"class":51672},[51,65290,51676],{"class":57},[51,65292,51679],{"class":65},[51,65294,65295],{"class":53,"line":185},[51,65296,206],{"emptyLinePlaceholder":205},[51,65298,65299,65301,65303],{"class":53,"line":202},[51,65300,1452],{"class":65},[51,65302,51007],{"class":51672},[51,65304,51679],{"class":65},[51,65306,65307],{"class":53,"line":209},[51,65308,206],{"emptyLinePlaceholder":205},[51,65310,65311,65313,65315,65317,65319,65321],{"class":53,"line":223},[51,65312,1452],{"class":65},[51,65314,51706],{"class":51672},[51,65316,51688],{"class":57},[51,65318,70],{"class":65},[51,65320,51693],{"class":61},[51,65322,51679],{"class":65},[51,65324,65325,65327,65329,65331,65333,65335],{"class":53,"line":237},[51,65326,52516],{"class":65},[51,65328,51716],{"class":51672},[51,65330,51719],{"class":57},[51,65332,70],{"class":65},[51,65334,51724],{"class":61},[51,65336,51679],{"class":65},[51,65338,65339,65341,65343,65345,65347],{"class":53,"line":242},[51,65340,52516],{"class":65},[51,65342,51779],{"class":51672},[51,65344,55686],{"class":65},[51,65346,51779],{"class":51672},[51,65348,51679],{"class":65},[51,65350,65351,65353,65355],{"class":53,"line":257},[51,65352,52516],{"class":65},[51,65354,464],{"class":51672},[51,65356,51679],{"class":65},[51,65358,65359,65361],{"class":53,"line":262},[51,65360,6787],{"class":51672},[51,65362,15956],{"class":65},[51,65364,65365,65367,65369,65371],{"class":53,"line":285},[51,65366,55078],{"class":278},[51,65368,51809],{"class":65},[51,65370,733],{"class":278},[51,65372,1703],{"class":65},[51,65374,65375,65377,65379,65381],{"class":53,"line":296},[51,65376,55067],{"class":278},[51,65378,51809],{"class":65},[51,65380,733],{"class":278},[51,65382,1703],{"class":65},[51,65384,65385],{"class":53,"line":307},[51,65386,2577],{"class":65},[51,65388,65389],{"class":53,"line":324},[51,65390,206],{"emptyLinePlaceholder":205},[51,65392,65393,65396],{"class":53,"line":329},[51,65394,65395],{"class":51672},"    table",[51,65397,15956],{"class":65},[51,65399,65400,65403,65405,65408],{"class":53,"line":334},[51,65401,65402],{"class":278},"      border-collapse",[51,65404,51809],{"class":65},[51,65406,65407],{"class":278},"collapse",[51,65409,1703],{"class":65},[51,65411,65412,65415,65417,65419],{"class":53,"line":340},[51,65413,65414],{"class":278},"      border-spacing",[51,65416,51809],{"class":65},[51,65418,733],{"class":278},[51,65420,1703],{"class":65},[51,65422,65423,65425,65427,65429,65431,65433,65436],{"class":53,"line":345},[51,65424,62349],{"class":278},[51,65426,51809],{"class":65},[51,65428,759],{"class":278},[51,65430,51864],{"class":69},[51,65432,51893],{"class":278},[51,65434,65435],{"class":278}," #c0c0c0",[51,65437,1703],{"class":65},[51,65439,65440,65442,65444,65447,65449],{"class":53,"line":357},[51,65441,55143],{"class":278},[51,65443,51809],{"class":65},[51,65445,65446],{"class":278},"500",[51,65448,51864],{"class":69},[51,65450,1703],{"class":65},[51,65452,65453,65455,65457,65459,65461,65463],{"class":53,"line":366},[51,65454,55078],{"class":278},[51,65456,51809],{"class":65},[51,65458,853],{"class":278},[51,65460,51864],{"class":69},[51,65462,51928],{"class":278},[51,65464,1703],{"class":65},[51,65466,65467,65469,65471,65473],{"class":53,"line":383},[51,65468,57658],{"class":278},[51,65470,51809],{"class":65},[51,65472,51964],{"class":278},[51,65474,1703],{"class":65},[51,65476,65477],{"class":53,"line":392},[51,65478,2577],{"class":65},[51,65480,65481],{"class":53,"line":403},[51,65482,206],{"emptyLinePlaceholder":205},[51,65484,65485,65488],{"class":53,"line":409},[51,65486,65487],{"class":51672},"    th",[51,65489,15956],{"class":65},[51,65491,65492,65494,65496,65499],{"class":53,"line":414},[51,65493,55256],{"class":278},[51,65495,51809],{"class":65},[51,65497,65498],{"class":278},"#09c",[51,65500,1703],{"class":65},[51,65502,65503,65506,65508,65510,65512,65514,65517],{"class":53,"line":433},[51,65504,65505],{"class":278},"      font",[51,65507,51809],{"class":65},[51,65509,62711],{"class":278},[51,65511,64445],{"class":278},[51,65513,51864],{"class":69},[51,65515,65516],{"class":61}," \"微软雅黑\"",[51,65518,1703],{"class":65},[51,65520,65521,65523,65525,65527],{"class":53,"line":439},[51,65522,57788],{"class":278},[51,65524,51809],{"class":65},[51,65526,61214],{"class":278},[51,65528,1703],{"class":65},[51,65530,65531,65533,65535,65537,65539],{"class":53,"line":444},[51,65532,55157],{"class":278},[51,65534,51809],{"class":65},[51,65536,1342],{"class":278},[51,65538,51864],{"class":69},[51,65540,1703],{"class":65},[51,65542,65543],{"class":53,"line":453},[51,65544,2577],{"class":65},[51,65546,65547],{"class":53,"line":2174},[51,65548,206],{"emptyLinePlaceholder":205},[51,65550,65551,65554],{"class":53,"line":2965},[51,65552,65553],{"class":51672},"    td",[51,65555,15956],{"class":65},[51,65557,65558,65560,65562,65564,65566,65568,65571],{"class":53,"line":2979},[51,65559,62349],{"class":278},[51,65561,51809],{"class":65},[51,65563,759],{"class":278},[51,65565,51864],{"class":69},[51,65567,51893],{"class":278},[51,65569,65570],{"class":278}," #d0d0d0",[51,65572,1703],{"class":65},[51,65574,65575,65577,65579,65582],{"class":53,"line":2987},[51,65576,57788],{"class":278},[51,65578,51809],{"class":65},[51,65580,65581],{"class":278},"#404060",[51,65583,1703],{"class":65},[51,65585,65586,65588,65590,65592,65594],{"class":53,"line":2992},[51,65587,55067],{"class":278},[51,65589,51809],{"class":65},[51,65591,988],{"class":278},[51,65593,51864],{"class":69},[51,65595,1703],{"class":65},[51,65597,65598],{"class":53,"line":2998},[51,65599,2577],{"class":65},[51,65601,65602],{"class":53,"line":3004},[51,65603,206],{"emptyLinePlaceholder":205},[51,65605,65606,65609],{"class":53,"line":3009},[51,65607,65608],{"class":57},"    .allCheck",[51,65610,15956],{"class":65},[51,65612,65613,65615,65617,65619,65621],{"class":53,"line":8332},[51,65614,55143],{"class":278},[51,65616,51809],{"class":65},[51,65618,1154],{"class":278},[51,65620,51864],{"class":69},[51,65622,1703],{"class":65},[51,65624,65625],{"class":53,"line":8356},[51,65626,2577],{"class":65},[51,65628,65629,65631,65633],{"class":53,"line":8361},[51,65630,52789],{"class":65},[51,65632,464],{"class":51672},[51,65634,51679],{"class":65},[51,65636,65637,65639,65641],{"class":53,"line":8367},[51,65638,52157],{"class":65},[51,65640,51706],{"class":51672},[51,65642,51679],{"class":65},[51,65644,65645],{"class":53,"line":8394},[51,65646,206],{"emptyLinePlaceholder":205},[51,65648,65649,65651,65653],{"class":53,"line":8399},[51,65650,1452],{"class":65},[51,65652,52172],{"class":51672},[51,65654,51679],{"class":65},[51,65656,65657,65659,65661],{"class":53,"line":8405},[51,65658,52516],{"class":65},[51,65660,679],{"class":51672},[51,65662,51679],{"class":65},[51,65664,65665,65667,65669],{"class":53,"line":8417},[51,65666,51713],{"class":65},[51,65668,685],{"class":51672},[51,65670,51679],{"class":65},[51,65672,65673,65675,65677,65679,65681,65684],{"class":53,"line":8429},[51,65674,55606],{"class":65},[51,65676,688],{"class":51672},[51,65678,53858],{"class":57},[51,65680,70],{"class":65},[51,65682,65683],{"class":61},"\"allCheck\"",[51,65685,51679],{"class":65},[51,65687,65688,65690,65692,65694,65696,65698,65700,65702,65704,65706,65708,65711,65714,65716,65718,65720,65723,65726,65728],{"class":53,"line":8441},[51,65689,55674],{"class":65},[51,65691,54193],{"class":51672},[51,65693,54196],{"class":57},[51,65695,70],{"class":65},[51,65697,54201],{"class":61},[51,65699,15304],{"class":57},[51,65701,70],{"class":65},[51,65703,8036],{"class":61},[51,65705,15343],{"class":57},[51,65707,70],{"class":65},[51,65709,65710],{"class":61},"\"checkAll\"",[51,65712,65713],{"class":65},"> \u003C",[51,65715,51],{"class":51672},[51,65717,53858],{"class":57},[51,65719,70],{"class":65},[51,65721,65722],{"class":61},"\"all\"",[51,65724,65725],{"class":65},">全选\u003C\u002F",[51,65727,51],{"class":51672},[51,65729,51679],{"class":65},[51,65731,65732,65734,65736],{"class":53,"line":10100},[51,65733,55779],{"class":65},[51,65735,688],{"class":51672},[51,65737,51679],{"class":65},[51,65739,65740,65742,65744,65747,65749],{"class":53,"line":10125},[51,65741,55606],{"class":65},[51,65743,688],{"class":51672},[51,65745,65746],{"class":65},">商品\u003C\u002F",[51,65748,688],{"class":51672},[51,65750,51679],{"class":65},[51,65752,65753,65755,65757,65760,65762],{"class":53,"line":10148},[51,65754,55606],{"class":65},[51,65756,688],{"class":51672},[51,65758,65759],{"class":65},">商家\u003C\u002F",[51,65761,688],{"class":51672},[51,65763,51679],{"class":65},[51,65765,65766,65768,65770,65773,65775],{"class":53,"line":10172},[51,65767,55606],{"class":65},[51,65769,688],{"class":51672},[51,65771,65772],{"class":65},">价格\u003C\u002F",[51,65774,688],{"class":51672},[51,65776,51679],{"class":65},[51,65778,65779,65781,65783],{"class":53,"line":10177},[51,65780,52148],{"class":65},[51,65782,685],{"class":51672},[51,65784,51679],{"class":65},[51,65786,65787,65789,65791],{"class":53,"line":10182},[51,65788,51713],{"class":65},[51,65790,685],{"class":51672},[51,65792,51679],{"class":65},[51,65794,65795,65797,65799],{"class":53,"line":10187},[51,65796,55606],{"class":65},[51,65798,731],{"class":51672},[51,65800,51679],{"class":65},[51,65802,65803,65805,65807,65809,65811,65813,65815,65817,65820,65822,65824,65827],{"class":53,"line":10196},[51,65804,55674],{"class":65},[51,65806,54193],{"class":51672},[51,65808,54196],{"class":57},[51,65810,70],{"class":65},[51,65812,54201],{"class":61},[51,65814,15304],{"class":57},[51,65816,70],{"class":65},[51,65818,65819],{"class":61},"\"check\"",[51,65821,53858],{"class":57},[51,65823,70],{"class":65},[51,65825,65826],{"class":61},"\"ck\"",[51,65828,51679],{"class":65},[51,65830,65831,65833,65835],{"class":53,"line":10201},[51,65832,55779],{"class":65},[51,65834,731],{"class":51672},[51,65836,51679],{"class":65},[51,65838,65839,65841,65843,65845,65847],{"class":53,"line":10207},[51,65840,55606],{"class":65},[51,65842,731],{"class":51672},[51,65844,61545],{"class":65},[51,65846,731],{"class":51672},[51,65848,51679],{"class":65},[51,65850,65851,65853,65855,65858,65860],{"class":53,"line":10228},[51,65852,55606],{"class":65},[51,65854,731],{"class":51672},[51,65856,65857],{"class":65},">小米\u003C\u002F",[51,65859,731],{"class":51672},[51,65861,51679],{"class":65},[51,65863,65864,65866,65868,65871,65873],{"class":53,"line":10234},[51,65865,55606],{"class":65},[51,65867,731],{"class":51672},[51,65869,65870],{"class":65},">￥1999\u003C\u002F",[51,65872,731],{"class":51672},[51,65874,51679],{"class":65},[51,65876,65877,65879,65881],{"class":53,"line":10248},[51,65878,52148],{"class":65},[51,65880,685],{"class":51672},[51,65882,51679],{"class":65},[51,65884,65885,65887,65889],{"class":53,"line":10254},[51,65886,51713],{"class":65},[51,65888,685],{"class":51672},[51,65890,51679],{"class":65},[51,65892,65893,65895,65897],{"class":53,"line":10281},[51,65894,55606],{"class":65},[51,65896,731],{"class":51672},[51,65898,51679],{"class":65},[51,65900,65901,65903,65905,65907,65909,65911,65913,65915,65917,65919,65921,65923],{"class":53,"line":10290},[51,65902,55674],{"class":65},[51,65904,54193],{"class":51672},[51,65906,54196],{"class":57},[51,65908,70],{"class":65},[51,65910,54201],{"class":61},[51,65912,15304],{"class":57},[51,65914,70],{"class":65},[51,65916,65819],{"class":61},[51,65918,53858],{"class":57},[51,65920,70],{"class":65},[51,65922,65826],{"class":61},[51,65924,51679],{"class":65},[51,65926,65927,65929,65931],{"class":53,"line":10296},[51,65928,55779],{"class":65},[51,65930,731],{"class":51672},[51,65932,51679],{"class":65},[51,65934,65935,65937,65939,65942,65944],{"class":53,"line":10304},[51,65936,55606],{"class":65},[51,65938,731],{"class":51672},[51,65940,65941],{"class":65},">小米净水器\u003C\u002F",[51,65943,731],{"class":51672},[51,65945,51679],{"class":65},[51,65947,65948,65950,65952,65954,65956],{"class":53,"line":10309},[51,65949,55606],{"class":65},[51,65951,731],{"class":51672},[51,65953,65857],{"class":65},[51,65955,731],{"class":51672},[51,65957,51679],{"class":65},[51,65959,65960,65962,65964,65967,65969],{"class":53,"line":16987},[51,65961,55606],{"class":65},[51,65963,731],{"class":51672},[51,65965,65966],{"class":65},">￥4999\u003C\u002F",[51,65968,731],{"class":51672},[51,65970,51679],{"class":65},[51,65972,65973,65975,65977],{"class":53,"line":16993},[51,65974,52148],{"class":65},[51,65976,685],{"class":51672},[51,65978,51679],{"class":65},[51,65980,65981,65983,65985],{"class":53,"line":17016},[51,65982,51713],{"class":65},[51,65984,685],{"class":51672},[51,65986,51679],{"class":65},[51,65988,65989,65991,65993],{"class":53,"line":17022},[51,65990,55606],{"class":65},[51,65992,731],{"class":51672},[51,65994,51679],{"class":65},[51,65996,65997,65999,66001,66003,66005,66007,66009,66011,66013,66015,66017,66019],{"class":53,"line":17045},[51,65998,55674],{"class":65},[51,66000,54193],{"class":51672},[51,66002,54196],{"class":57},[51,66004,70],{"class":65},[51,66006,54201],{"class":61},[51,66008,15304],{"class":57},[51,66010,70],{"class":65},[51,66012,65819],{"class":61},[51,66014,53858],{"class":57},[51,66016,70],{"class":65},[51,66018,65826],{"class":61},[51,66020,51679],{"class":65},[51,66022,66023,66025,66027],{"class":53,"line":17059},[51,66024,55779],{"class":65},[51,66026,731],{"class":51672},[51,66028,51679],{"class":65},[51,66030,66031,66033,66035,66038,66040],{"class":53,"line":17079},[51,66032,55606],{"class":65},[51,66034,731],{"class":51672},[51,66036,66037],{"class":65},">小米电视\u003C\u002F",[51,66039,731],{"class":51672},[51,66041,51679],{"class":65},[51,66043,66044,66046,66048,66050,66052],{"class":53,"line":17085},[51,66045,55606],{"class":65},[51,66047,731],{"class":51672},[51,66049,65857],{"class":65},[51,66051,731],{"class":51672},[51,66053,51679],{"class":65},[51,66055,66056,66058,66060,66063,66065],{"class":53,"line":17096},[51,66057,55606],{"class":65},[51,66059,731],{"class":51672},[51,66061,66062],{"class":65},">￥5999\u003C\u002F",[51,66064,731],{"class":51672},[51,66066,51679],{"class":65},[51,66068,66069,66071,66073],{"class":53,"line":17119},[51,66070,52148],{"class":65},[51,66072,685],{"class":51672},[51,66074,51679],{"class":65},[51,66076,66077,66079,66081],{"class":53,"line":17141},[51,66078,52789],{"class":65},[51,66080,679],{"class":51672},[51,66082,51679],{"class":65},[51,66084,66085,66087,66089],{"class":53,"line":17146},[51,66086,52516],{"class":65},[51,66088,52185],{"class":51672},[51,66090,51679],{"class":65},[51,66092,66093],{"class":53,"line":17152},[51,66094,66095],{"class":601},"    \u002F\u002F 1. 获取大复选框\n",[51,66097,66098,66100,66103,66105,66107,66109,66111,66114],{"class":53,"line":17166},[51,66099,11605],{"class":69},[51,66101,66102],{"class":278}," checkAll",[51,66104,13948],{"class":69},[51,66106,54768],{"class":65},[51,66108,54771],{"class":57},[51,66110,546],{"class":65},[51,66112,66113],{"class":61},"'#checkAll'",[51,66115,282],{"class":65},[51,66117,66118],{"class":53,"line":17179},[51,66119,66120],{"class":601},"    \u002F\u002F 2. 获取所有的小复选框\n",[51,66122,66123,66125,66128,66130,66132,66134,66136,66139],{"class":53,"line":17184},[51,66124,11605],{"class":69},[51,66126,66127],{"class":278}," cks",[51,66129,13948],{"class":69},[51,66131,54768],{"class":65},[51,66133,56053],{"class":57},[51,66135,546],{"class":65},[51,66137,66138],{"class":61},"'.ck'",[51,66140,282],{"class":65},[51,66142,66143],{"class":53,"line":17198},[51,66144,66145],{"class":601},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[51,66147,66148,66151,66153,66155,66157,66159,66161],{"class":53,"line":17203},[51,66149,66150],{"class":65},"    checkAll.",[51,66152,58185],{"class":57},[51,66154,546],{"class":65},[51,66156,58190],{"class":61},[51,66158,12819],{"class":65},[51,66160,54821],{"class":69},[51,66162,54824],{"class":65},[51,66164,66165],{"class":53,"line":17209},[51,66166,66167],{"class":601},"      \u002F\u002F 得到当前大复选框的选中状态\n",[51,66169,66170,66173],{"class":53,"line":17214},[51,66171,66172],{"class":601},"      \u002F\u002F console.log(checkAll.checked)",[51,66174,66175],{"class":601},"  \u002F\u002F 得到 是 true 或者是 false\n",[51,66177,66178],{"class":53,"line":17228},[51,66179,66180],{"class":601},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[51,66182,66183,66185,66187,66189,66191,66193,66195,66197,66199,66202,66204,66206,66208],{"class":53,"line":17233},[51,66184,52656],{"class":69},[51,66186,2060],{"class":65},[51,66188,52219],{"class":69},[51,66190,9822],{"class":65},[51,66192,70],{"class":69},[51,66194,4479],{"class":278},[51,66196,9829],{"class":65},[51,66198,1452],{"class":69},[51,66200,66201],{"class":65}," cks.",[51,66203,52340],{"class":278},[51,66205,3601],{"class":65},[51,66207,2682],{"class":69},[51,66209,12826],{"class":65},[51,66211,66212,66215,66217,66220],{"class":53,"line":17238},[51,66213,66214],{"class":65},"        cks[i].checked ",[51,66216,70],{"class":69},[51,66218,66219],{"class":278}," this",[51,66221,66222],{"class":65},".checked\n",[51,66224,66225],{"class":53,"line":17252},[51,66226,52770],{"class":65},[51,66228,66229],{"class":53,"line":17264},[51,66230,33836],{"class":65},[51,66232,66233],{"class":53,"line":17269},[51,66234,66235],{"class":601},"    \u002F\u002F 5. 小复选框控制大复选框\n",[51,66237,66238],{"class":53,"line":17282},[51,66239,206],{"emptyLinePlaceholder":205},[51,66241,66242,66244,66246,66248,66250,66252,66254,66256,66258,66260,66262,66264,66266],{"class":53,"line":17287},[51,66243,3588],{"class":69},[51,66245,2060],{"class":65},[51,66247,52219],{"class":69},[51,66249,9822],{"class":65},[51,66251,70],{"class":69},[51,66253,4479],{"class":278},[51,66255,9829],{"class":65},[51,66257,1452],{"class":69},[51,66259,66201],{"class":65},[51,66261,52340],{"class":278},[51,66263,3601],{"class":65},[51,66265,2682],{"class":69},[51,66267,12826],{"class":65},[51,66269,66270],{"class":53,"line":17292},[51,66271,66272],{"class":601},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[51,66274,66275,66278,66280,66282,66284,66286,66288],{"class":53,"line":17297},[51,66276,66277],{"class":65},"      cks[i].",[51,66279,58185],{"class":57},[51,66281,546],{"class":65},[51,66283,58190],{"class":61},[51,66285,12819],{"class":65},[51,66287,54821],{"class":69},[51,66289,54824],{"class":65},[51,66291,66292],{"class":53,"line":17310},[51,66293,66294],{"class":601},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[51,66296,66297],{"class":53,"line":17315},[51,66298,66299],{"class":601},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[51,66301,66302],{"class":53,"line":33008},[51,66303,66304],{"class":601},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[51,66306,66307],{"class":53,"line":33014},[51,66308,66309],{"class":601},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[51,66311,66312,66315,66317,66319,66321,66323,66326,66328,66330,66332,66334],{"class":53,"line":33020},[51,66313,66314],{"class":65},"        checkAll.checked ",[51,66316,70],{"class":69},[51,66318,54768],{"class":65},[51,66320,56053],{"class":57},[51,66322,546],{"class":65},[51,66324,66325],{"class":61},"'.ck:checked'",[51,66327,31204],{"class":65},[51,66329,52340],{"class":278},[51,66331,58278],{"class":69},[51,66333,66201],{"class":65},[51,66335,56203],{"class":278},[51,66337,66338],{"class":53,"line":33026},[51,66339,65187],{"class":65},[51,66341,66342],{"class":53,"line":33032},[51,66343,2577],{"class":65},[51,66345,66346,66348,66350],{"class":53,"line":33043},[51,66347,52789],{"class":65},[51,66349,52185],{"class":51672},[51,66351,51679],{"class":65},[51,66353,66354,66356,66358],{"class":53,"line":33049},[51,66355,52157],{"class":65},[51,66357,52172],{"class":51672},[51,66359,51679],{"class":65},[51,66361,66362],{"class":53,"line":33069},[51,66363,206],{"emptyLinePlaceholder":205},[51,66365,66366,66368,66370],{"class":53,"line":33075},[51,66367,52157],{"class":65},[51,66369,51007],{"class":51672},[51,66371,51679],{"class":65},[10,66373,66374],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[10,66376,66377],{},"用好之间比较得到的布尔值！！！",[10,66379,66380,66381,66384,66385,2060,66388,1126,66390,66393],{},"在 JS 里访问的时候，",[48,66382,66383],{},"checkbox.checked"," 是一个 ",[691,66386,66387],{},"布尔值",[48,66389,1772],{},[48,66391,66392],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[10,66395,66396,66397,66400,66401],{},"HTML 的 ",[48,66398,66399],{},"checked=\"checked\""," 只是 ",[691,66402,66403,66404,66407],{},"初始值；JS 的 ",[48,66405,66406],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[10,66409,66410],{},"：checked是一个伪类选择器",[10,66412,66413],{},[460,66414],{"alt":46,"src":66415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[10,66417,66418,66421],{},[66419,66420],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[10,66423,66424],{},[460,66425],{"alt":46,"src":66426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[486,66428,66430],{"id":66429},"_33-dom事件进阶","3.3 DOM事件进阶",[513,66432,66434],{"id":66433},"_331-事件流","3.3.1 事件流",[10,66436,66437],{},[460,66438],{"alt":46,"src":66439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22381,66441,66443],{"id":66442},"_3311-事件捕获","3.3.1.1 事件捕获",[10,66445,66446],{},[460,66447],{"alt":46,"src":66448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[41,66450,66452],{"className":51005,"code":66451,"language":51007,"meta":46,"style":46},"\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",[48,66453,66454,66464,66478,66482,66490,66504,66524,66536,66544,66551,66563,66575,66585,66589,66593,66600,66612,66624,66634,66638,66646,66654,66658,66666,66681,66700,66708,66716,66736,66756,66772,66783,66791,66808,66819,66827,66844,66855,66863,66871,66879,66883],{"__ignoreMap":46},[51,66455,66456,66458,66460,66462],{"class":53,"line":54},[51,66457,51669],{"class":65},[51,66459,51673],{"class":51672},[51,66461,51676],{"class":57},[51,66463,51679],{"class":65},[51,66465,66466,66468,66470,66472,66474,66476],{"class":53,"line":185},[51,66467,1452],{"class":65},[51,66469,51007],{"class":51672},[51,66471,51688],{"class":57},[51,66473,70],{"class":65},[51,66475,51693],{"class":61},[51,66477,51679],{"class":65},[51,66479,66480],{"class":53,"line":202},[51,66481,206],{"emptyLinePlaceholder":205},[51,66483,66484,66486,66488],{"class":53,"line":209},[51,66485,1452],{"class":65},[51,66487,51706],{"class":51672},[51,66489,51679],{"class":65},[51,66491,66492,66494,66496,66498,66500,66502],{"class":53,"line":223},[51,66493,52516],{"class":65},[51,66495,51716],{"class":51672},[51,66497,51719],{"class":57},[51,66499,70],{"class":65},[51,66501,51724],{"class":61},[51,66503,51679],{"class":65},[51,66505,66506,66508,66510,66512,66514,66516,66518,66520,66522],{"class":53,"line":237},[51,66507,52516],{"class":65},[51,66509,51716],{"class":51672},[51,66511,15304],{"class":57},[51,66513,70],{"class":65},[51,66515,51763],{"class":61},[51,66517,51743],{"class":57},[51,66519,70],{"class":65},[51,66521,51770],{"class":61},[51,66523,51679],{"class":65},[51,66525,66526,66528,66530,66532,66534],{"class":53,"line":242},[51,66527,52516],{"class":65},[51,66529,51779],{"class":51672},[51,66531,51782],{"class":65},[51,66533,51779],{"class":51672},[51,66535,51679],{"class":65},[51,66537,66538,66540,66542],{"class":53,"line":257},[51,66539,52516],{"class":65},[51,66541,464],{"class":51672},[51,66543,51679],{"class":65},[51,66545,66546,66549],{"class":53,"line":262},[51,66547,66548],{"class":57},"    .father",[51,66550,15956],{"class":65},[51,66552,66553,66555,66557,66559,66561],{"class":53,"line":285},[51,66554,55143],{"class":278},[51,66556,51809],{"class":65},[51,66558,65446],{"class":278},[51,66560,51864],{"class":69},[51,66562,1703],{"class":65},[51,66564,66565,66567,66569,66571,66573],{"class":53,"line":296},[51,66566,55157],{"class":278},[51,66568,51809],{"class":65},[51,66570,65446],{"class":278},[51,66572,51864],{"class":69},[51,66574,1703],{"class":65},[51,66576,66577,66579,66581,66583],{"class":53,"line":307},[51,66578,55256],{"class":278},[51,66580,51809],{"class":65},[51,66582,52017],{"class":278},[51,66584,1703],{"class":65},[51,66586,66587],{"class":53,"line":324},[51,66588,2577],{"class":65},[51,66590,66591],{"class":53,"line":329},[51,66592,206],{"emptyLinePlaceholder":205},[51,66594,66595,66598],{"class":53,"line":334},[51,66596,66597],{"class":57},"    .son",[51,66599,15956],{"class":65},[51,66601,66602,66604,66606,66608,66610],{"class":53,"line":340},[51,66603,55143],{"class":278},[51,66605,51809],{"class":65},[51,66607,2120],{"class":278},[51,66609,51864],{"class":69},[51,66611,1703],{"class":65},[51,66613,66614,66616,66618,66620,66622],{"class":53,"line":345},[51,66615,55157],{"class":278},[51,66617,51809],{"class":65},[51,66619,2120],{"class":278},[51,66621,51864],{"class":69},[51,66623,1703],{"class":65},[51,66625,66626,66628,66630,66632],{"class":53,"line":357},[51,66627,55256],{"class":278},[51,66629,51809],{"class":65},[51,66631,55261],{"class":278},[51,66633,1703],{"class":65},[51,66635,66636],{"class":53,"line":366},[51,66637,2577],{"class":65},[51,66639,66640,66642,66644],{"class":53,"line":383},[51,66641,52789],{"class":65},[51,66643,464],{"class":51672},[51,66645,51679],{"class":65},[51,66647,66648,66650,66652],{"class":53,"line":392},[51,66649,52157],{"class":65},[51,66651,51706],{"class":51672},[51,66653,51679],{"class":65},[51,66655,66656],{"class":53,"line":403},[51,66657,206],{"emptyLinePlaceholder":205},[51,66659,66660,66662,66664],{"class":53,"line":409},[51,66661,1452],{"class":65},[51,66663,52172],{"class":51672},[51,66665,51679],{"class":65},[51,66667,66668,66670,66672,66674,66676,66679],{"class":53,"line":414},[51,66669,52516],{"class":65},[51,66671,51983],{"class":51672},[51,66673,53858],{"class":57},[51,66675,70],{"class":65},[51,66677,66678],{"class":61},"\"father\"",[51,66680,51679],{"class":65},[51,66682,66683,66685,66687,66689,66691,66694,66696,66698],{"class":53,"line":433},[51,66684,51713],{"class":65},[51,66686,51983],{"class":51672},[51,66688,53858],{"class":57},[51,66690,70],{"class":65},[51,66692,66693],{"class":61},"\"son\"",[51,66695,55686],{"class":65},[51,66697,51983],{"class":51672},[51,66699,51679],{"class":65},[51,66701,66702,66704,66706],{"class":53,"line":439},[51,66703,52789],{"class":65},[51,66705,51983],{"class":51672},[51,66707,51679],{"class":65},[51,66709,66710,66712,66714],{"class":53,"line":444},[51,66711,52516],{"class":65},[51,66713,52185],{"class":51672},[51,66715,51679],{"class":65},[51,66717,66718,66720,66723,66725,66727,66729,66731,66734],{"class":53,"line":453},[51,66719,11605],{"class":69},[51,66721,66722],{"class":278}," fa",[51,66724,13948],{"class":69},[51,66726,54768],{"class":65},[51,66728,54771],{"class":57},[51,66730,546],{"class":65},[51,66732,66733],{"class":61},"'.father'",[51,66735,282],{"class":65},[51,66737,66738,66740,66743,66745,66747,66749,66751,66754],{"class":53,"line":2174},[51,66739,11605],{"class":69},[51,66741,66742],{"class":278}," son",[51,66744,13948],{"class":69},[51,66746,54768],{"class":65},[51,66748,54771],{"class":57},[51,66750,546],{"class":65},[51,66752,66753],{"class":61},"'.son'",[51,66755,282],{"class":65},[51,66757,66758,66760,66762,66764,66766,66768,66770],{"class":53,"line":2965},[51,66759,52779],{"class":65},[51,66761,58185],{"class":57},[51,66763,546],{"class":65},[51,66765,58190],{"class":61},[51,66767,12819],{"class":65},[51,66769,54821],{"class":69},[51,66771,54824],{"class":65},[51,66773,66774,66776,66778,66781],{"class":53,"line":2979},[51,66775,59297],{"class":57},[51,66777,546],{"class":65},[51,66779,66780],{"class":61},"'woshiu1'",[51,66782,282],{"class":65},[51,66784,66785,66787,66789],{"class":53,"line":2987},[51,66786,54907],{"class":65},[51,66788,1772],{"class":278},[51,66790,282],{"class":65},[51,66792,66793,66796,66798,66800,66802,66804,66806],{"class":53,"line":2992},[51,66794,66795],{"class":65},"    fa.",[51,66797,58185],{"class":57},[51,66799,546],{"class":65},[51,66801,58190],{"class":61},[51,66803,12819],{"class":65},[51,66805,54821],{"class":69},[51,66807,54824],{"class":65},[51,66809,66810,66812,66814,66817],{"class":53,"line":2998},[51,66811,59297],{"class":57},[51,66813,546],{"class":65},[51,66815,66816],{"class":61},"'1'",[51,66818,282],{"class":65},[51,66820,66821,66823,66825],{"class":53,"line":3004},[51,66822,54907],{"class":65},[51,66824,1772],{"class":278},[51,66826,282],{"class":65},[51,66828,66829,66832,66834,66836,66838,66840,66842],{"class":53,"line":3009},[51,66830,66831],{"class":65},"    son.",[51,66833,58185],{"class":57},[51,66835,546],{"class":65},[51,66837,58190],{"class":61},[51,66839,12819],{"class":65},[51,66841,54821],{"class":69},[51,66843,54824],{"class":65},[51,66845,66846,66848,66850,66853],{"class":53,"line":8332},[51,66847,59297],{"class":57},[51,66849,546],{"class":65},[51,66851,66852],{"class":61},"'2'",[51,66854,282],{"class":65},[51,66856,66857,66859,66861],{"class":53,"line":8356},[51,66858,54907],{"class":65},[51,66860,1772],{"class":278},[51,66862,282],{"class":65},[51,66864,66865,66867,66869],{"class":53,"line":8361},[51,66866,52789],{"class":65},[51,66868,52185],{"class":51672},[51,66870,51679],{"class":65},[51,66872,66873,66875,66877],{"class":53,"line":8367},[51,66874,52157],{"class":65},[51,66876,52172],{"class":51672},[51,66878,51679],{"class":65},[51,66880,66881],{"class":53,"line":8394},[51,66882,206],{"emptyLinePlaceholder":205},[51,66884,66885,66887,66889],{"class":53,"line":8399},[51,66886,52157],{"class":65},[51,66888,51007],{"class":51672},[51,66890,51679],{"class":65},[10,66892,66893],{},[460,66894],{"alt":46,"src":66895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[10,66897,66898],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22381,66900,66902],{"id":66901},"_3312-事件冒泡","3.3.1.2 事件冒泡",[10,66904,66905],{},[460,66906],{"alt":46,"src":66907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[10,66909,66910],{},"反着来",[10,66912,66913],{},"注意是同名事件，比如都是‘click’",[22381,66915,66917],{"id":66916},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[10,66919,66920],{},[460,66921],{"alt":46,"src":66922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22381,66924,66926],{"id":66925},"_3314-解绑事件","3.3.1.4 解绑事件",[10,66928,66929],{},[460,66930],{"alt":46,"src":66931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[10,66933,66934],{},[460,66935],{"alt":46,"src":66936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22381,66938,66940],{"id":66939},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[19,66942,66943],{},[22,66944,66945],{},"事件类型的区别",[10,66947,66948],{},[460,66949],{"alt":46,"src":66950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[10,66952,66953],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[19,66955,66956],{"start":185},[22,66957,66958],{},"注册事件的区别",[10,66960,66961],{},[460,66962],{"alt":46,"src":66963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22381,66965,66967],{"id":66966},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[10,66969,66970],{},[460,66971],{"alt":46,"src":66972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[10,66974,66975],{},[460,66976],{"alt":46,"src":66977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[41,66979,66981],{"className":53439,"code":66980,"language":53441,"meta":46,"style":46},"\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",[48,66982,66983,66991,67008,67031,67039,67044,67049,67054,67058,67066,67074],{"__ignoreMap":46},[51,66984,66985,66987,66989],{"class":53,"line":54},[51,66986,1452],{"class":65},[51,66988,52172],{"class":51672},[51,66990,51679],{"class":65},[51,66992,66993,66995,66998,67001,67003,67006],{"class":53,"line":185},[51,66994,52516],{"class":65},[51,66996,66997],{"class":51672},"form",[51,66999,67000],{"class":57}," action",[51,67002,70],{"class":65},[51,67004,67005],{"class":61},"\"http:\u002F\u002Fwww.itcast.cn\"",[51,67007,51679],{"class":65},[51,67009,67010,67012,67014,67016,67018,67021,67024,67026,67029],{"class":53,"line":202},[51,67011,51713],{"class":65},[51,67013,54193],{"class":51672},[51,67015,54196],{"class":57},[51,67017,70],{"class":65},[51,67019,67020],{"class":61},"\"submit\"",[51,67022,67023],{"class":57}," value",[51,67025,70],{"class":65},[51,67027,67028],{"class":61},"\"免费注册\"",[51,67030,51679],{"class":65},[51,67032,67033,67035,67037],{"class":53,"line":209},[51,67034,51713],{"class":65},[51,67036,52185],{"class":51672},[51,67038,51679],{"class":65},[51,67040,67041],{"class":53,"line":223},[51,67042,67043],{"class":65},"      const form = document.querySelector('form')\n",[51,67045,67046],{"class":53,"line":237},[51,67047,67048],{"class":65},"      form.addEventListener('submit', function (e) {\n",[51,67050,67051],{"class":53,"line":242},[51,67052,67053],{"class":65},"        e.preventDefault()\n",[51,67055,67056],{"class":53,"line":257},[51,67057,65187],{"class":65},[51,67059,67060,67062,67064],{"class":53,"line":262},[51,67061,52148],{"class":65},[51,67063,52185],{"class":51672},[51,67065,51679],{"class":65},[51,67067,67068,67070,67072],{"class":53,"line":285},[51,67069,52789],{"class":65},[51,67071,66997],{"class":51672},[51,67073,51679],{"class":65},[51,67075,67076,67078,67080],{"class":53,"line":296},[51,67077,52157],{"class":65},[51,67079,52172],{"class":51672},[51,67081,51679],{"class":65},[10,67083,67084],{},"点击不在跳转！！！",[513,67086,67088],{"id":67087},"_332-事件委托","3.3.2 事件委托",[10,67090,67091],{},[460,67092],{"alt":46,"src":67093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[41,67095,67097],{"className":51005,"code":67096,"language":51007,"meta":46,"style":46},"\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",[48,67098,67099,67109,67123,67127,67135,67149,67169,67181,67189,67193,67201,67209,67221,67233,67245,67257,67269,67282,67290,67298,67303,67322,67343,67348,67353,67358,67363,67372,67376,67386,67390,67395,67400,67414,67424,67428,67432,67440,67448,67452],{"__ignoreMap":46},[51,67100,67101,67103,67105,67107],{"class":53,"line":54},[51,67102,51669],{"class":65},[51,67104,51673],{"class":51672},[51,67106,51676],{"class":57},[51,67108,51679],{"class":65},[51,67110,67111,67113,67115,67117,67119,67121],{"class":53,"line":185},[51,67112,1452],{"class":65},[51,67114,51007],{"class":51672},[51,67116,51688],{"class":57},[51,67118,70],{"class":65},[51,67120,51693],{"class":61},[51,67122,51679],{"class":65},[51,67124,67125],{"class":53,"line":202},[51,67126,206],{"emptyLinePlaceholder":205},[51,67128,67129,67131,67133],{"class":53,"line":209},[51,67130,1452],{"class":65},[51,67132,51706],{"class":51672},[51,67134,51679],{"class":65},[51,67136,67137,67139,67141,67143,67145,67147],{"class":53,"line":223},[51,67138,52516],{"class":65},[51,67140,51716],{"class":51672},[51,67142,51719],{"class":57},[51,67144,70],{"class":65},[51,67146,51724],{"class":61},[51,67148,51679],{"class":65},[51,67150,67151,67153,67155,67157,67159,67161,67163,67165,67167],{"class":53,"line":237},[51,67152,52516],{"class":65},[51,67154,51716],{"class":51672},[51,67156,15304],{"class":57},[51,67158,70],{"class":65},[51,67160,51763],{"class":61},[51,67162,51743],{"class":57},[51,67164,70],{"class":65},[51,67166,51770],{"class":61},[51,67168,51679],{"class":65},[51,67170,67171,67173,67175,67177,67179],{"class":53,"line":242},[51,67172,52516],{"class":65},[51,67174,51779],{"class":51672},[51,67176,51782],{"class":65},[51,67178,51779],{"class":51672},[51,67180,51679],{"class":65},[51,67182,67183,67185,67187],{"class":53,"line":257},[51,67184,52157],{"class":65},[51,67186,51706],{"class":51672},[51,67188,51679],{"class":65},[51,67190,67191],{"class":53,"line":262},[51,67192,206],{"emptyLinePlaceholder":205},[51,67194,67195,67197,67199],{"class":53,"line":285},[51,67196,1452],{"class":65},[51,67198,52172],{"class":51672},[51,67200,51679],{"class":65},[51,67202,67203,67205,67207],{"class":53,"line":296},[51,67204,52516],{"class":65},[51,67206,1549],{"class":51672},[51,67208,51679],{"class":65},[51,67210,67211,67213,67215,67217,67219],{"class":53,"line":307},[51,67212,51713],{"class":65},[51,67214,22],{"class":51672},[51,67216,54338],{"class":65},[51,67218,22],{"class":51672},[51,67220,51679],{"class":65},[51,67222,67223,67225,67227,67229,67231],{"class":53,"line":324},[51,67224,51713],{"class":65},[51,67226,22],{"class":51672},[51,67228,54357],{"class":65},[51,67230,22],{"class":51672},[51,67232,51679],{"class":65},[51,67234,67235,67237,67239,67241,67243],{"class":53,"line":329},[51,67236,51713],{"class":65},[51,67238,22],{"class":51672},[51,67240,54376],{"class":65},[51,67242,22],{"class":51672},[51,67244,51679],{"class":65},[51,67246,67247,67249,67251,67253,67255],{"class":53,"line":334},[51,67248,51713],{"class":65},[51,67250,22],{"class":51672},[51,67252,54395],{"class":65},[51,67254,22],{"class":51672},[51,67256,51679],{"class":65},[51,67258,67259,67261,67263,67265,67267],{"class":53,"line":340},[51,67260,51713],{"class":65},[51,67262,22],{"class":51672},[51,67264,54414],{"class":65},[51,67266,22],{"class":51672},[51,67268,51679],{"class":65},[51,67270,67271,67273,67275,67278,67280],{"class":53,"line":345},[51,67272,51713],{"class":65},[51,67274,10],{"class":51672},[51,67276,67277],{"class":65},">我不需要变色\u003C\u002F",[51,67279,10],{"class":51672},[51,67281,51679],{"class":65},[51,67283,67284,67286,67288],{"class":53,"line":357},[51,67285,52789],{"class":65},[51,67287,1549],{"class":51672},[51,67289,51679],{"class":65},[51,67291,67292,67294,67296],{"class":53,"line":366},[51,67293,52516],{"class":65},[51,67295,52185],{"class":51672},[51,67297,51679],{"class":65},[51,67299,67300],{"class":53,"line":383},[51,67301,67302],{"class":601},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[51,67304,67305,67307,67309,67311,67313,67315,67317,67320],{"class":53,"line":392},[51,67306,11605],{"class":69},[51,67308,61664],{"class":278},[51,67310,13948],{"class":69},[51,67312,54768],{"class":65},[51,67314,54771],{"class":57},[51,67316,546],{"class":65},[51,67318,67319],{"class":61},"'ul'",[51,67321,282],{"class":65},[51,67323,67324,67327,67329,67331,67333,67335,67337,67339,67341],{"class":53,"line":403},[51,67325,67326],{"class":65},"    ul.",[51,67328,58185],{"class":57},[51,67330,546],{"class":65},[51,67332,58190],{"class":61},[51,67334,12819],{"class":65},[51,67336,54821],{"class":69},[51,67338,2060],{"class":65},[51,67340,617],{"class":248},[51,67342,12826],{"class":65},[51,67344,67345],{"class":53,"line":409},[51,67346,67347],{"class":601},"      \u002F\u002F alert(1)\n",[51,67349,67350],{"class":53,"line":414},[51,67351,67352],{"class":601},"      \u002F\u002F e.target就是我们点击的对象\n",[51,67354,67355],{"class":53,"line":433},[51,67356,67357],{"class":601},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[51,67359,67360],{"class":53,"line":439},[51,67361,67362],{"class":601},"      \u002F\u002F e.target.style.color = 'red'\n",[51,67364,67365,67367,67369],{"class":53,"line":444},[51,67366,58616],{"class":65},[51,67368,58619],{"class":57},[51,67370,67371],{"class":65},"(e)\n",[51,67373,67374],{"class":53,"line":453},[51,67375,206],{"emptyLinePlaceholder":205},[51,67377,67378,67380,67383],{"class":53,"line":2174},[51,67379,58616],{"class":65},[51,67381,67382],{"class":57},"dir",[51,67384,67385],{"class":65},"(e.target)\n",[51,67387,67388],{"class":53,"line":2965},[51,67389,206],{"emptyLinePlaceholder":205},[51,67391,67392],{"class":53,"line":2979},[51,67393,67394],{"class":601},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[51,67396,67397],{"class":53,"line":2987},[51,67398,67399],{"class":601},"      \u002F\u002F 通过tagName来进行判断\n",[51,67401,67402,67404,67407,67409,67412],{"class":53,"line":2992},[51,67403,54852],{"class":69},[51,67405,67406],{"class":65}," (e.target.tagName ",[51,67408,54858],{"class":69},[51,67410,67411],{"class":61}," 'LI'",[51,67413,12826],{"class":65},[51,67415,67416,67419,67421],{"class":53,"line":2998},[51,67417,67418],{"class":65},"        e.target.style.color ",[51,67420,70],{"class":69},[51,67422,67423],{"class":61}," 'red'\n",[51,67425,67426],{"class":53,"line":3004},[51,67427,52770],{"class":65},[51,67429,67430],{"class":53,"line":3009},[51,67431,33836],{"class":65},[51,67433,67434,67436,67438],{"class":53,"line":8332},[51,67435,52789],{"class":65},[51,67437,52185],{"class":51672},[51,67439,51679],{"class":65},[51,67441,67442,67444,67446],{"class":53,"line":8356},[51,67443,52157],{"class":65},[51,67445,52172],{"class":51672},[51,67447,51679],{"class":65},[51,67449,67450],{"class":53,"line":8361},[51,67451,206],{"emptyLinePlaceholder":205},[51,67453,67454,67456,67458],{"class":53,"line":8367},[51,67455,52157],{"class":65},[51,67457,51007],{"class":51672},[51,67459,51679],{"class":65},[10,67461,67462],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[10,67464,67465],{},"if(e.target.ragName==='P') {}",[10,67467,67468],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[10,67470,67471],{},"通过事件委托的方式实现tab栏切换改造：",[10,67473,67474],{},"一定要记住自定义属性！！！！！！",[10,67476,67477],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[10,67479,67480],{},"id是自定义的属性名",[10,67482,67483],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[41,67485,67487],{"className":51005,"code":67486,"language":51007,"meta":46,"style":46},"\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",[48,67488,67489,67499,67513,67517,67525,67539,67559,67579,67591,67599,67605,67615,67625,67629,67633,67639,67651,67663,67675,67691,67695,67699,67705,67717,67729,67741,67751,67761,67765,67769,67777,67789,67799,67811,67815,67819,67827,67837,67847,67857,67861,67865,67875,67889,67901,67905,67909,67921,67931,67947,67957,67961,67965,67979,67989,67999,68003,68007,68013,68027,68031,68035,68043,68053,68057,68061,68070,68080,68084,68092,68100,68104,68112,68126,68140,68152,68160,68199,68231,68263,68295,68327,68335,68343,68357,68391,68425,68459,68493,68527,68535,68543,68551,68556,68561,68580,68585,68605,68613,68618,68631,68652,68665,68669,68674,68679,68692,68712,68740,68744,68748,68752,68760,68768,68772],{"__ignoreMap":46},[51,67490,67491,67493,67495,67497],{"class":53,"line":54},[51,67492,51669],{"class":65},[51,67494,51673],{"class":51672},[51,67496,51676],{"class":57},[51,67498,51679],{"class":65},[51,67500,67501,67503,67505,67507,67509,67511],{"class":53,"line":185},[51,67502,1452],{"class":65},[51,67504,51007],{"class":51672},[51,67506,51688],{"class":57},[51,67508,70],{"class":65},[51,67510,51693],{"class":61},[51,67512,51679],{"class":65},[51,67514,67515],{"class":53,"line":202},[51,67516,206],{"emptyLinePlaceholder":205},[51,67518,67519,67521,67523],{"class":53,"line":209},[51,67520,1452],{"class":65},[51,67522,51706],{"class":51672},[51,67524,51679],{"class":65},[51,67526,67527,67529,67531,67533,67535,67537],{"class":53,"line":223},[51,67528,52516],{"class":65},[51,67530,51716],{"class":51672},[51,67532,51719],{"class":57},[51,67534,70],{"class":65},[51,67536,51724],{"class":61},[51,67538,59499],{"class":65},[51,67540,67541,67543,67545,67547,67549,67551,67553,67555,67557],{"class":53,"line":237},[51,67542,52516],{"class":65},[51,67544,51716],{"class":51672},[51,67546,51735],{"class":57},[51,67548,70],{"class":65},[51,67550,51740],{"class":61},[51,67552,51743],{"class":57},[51,67554,70],{"class":65},[51,67556,51748],{"class":61},[51,67558,59499],{"class":65},[51,67560,67561,67563,67565,67567,67569,67571,67573,67575,67577],{"class":53,"line":242},[51,67562,52516],{"class":65},[51,67564,51716],{"class":51672},[51,67566,15304],{"class":57},[51,67568,70],{"class":65},[51,67570,51763],{"class":61},[51,67572,51743],{"class":57},[51,67574,70],{"class":65},[51,67576,51770],{"class":61},[51,67578,59499],{"class":65},[51,67580,67581,67583,67585,67587,67589],{"class":53,"line":257},[51,67582,52516],{"class":65},[51,67584,51779],{"class":51672},[51,67586,63997],{"class":65},[51,67588,51779],{"class":51672},[51,67590,51679],{"class":65},[51,67592,67593,67595,67597],{"class":53,"line":262},[51,67594,52516],{"class":65},[51,67596,464],{"class":51672},[51,67598,51679],{"class":65},[51,67600,67601,67603],{"class":53,"line":285},[51,67602,6787],{"class":51672},[51,67604,15956],{"class":65},[51,67606,67607,67609,67611,67613],{"class":53,"line":296},[51,67608,55078],{"class":278},[51,67610,51809],{"class":65},[51,67612,733],{"class":278},[51,67614,1703],{"class":65},[51,67616,67617,67619,67621,67623],{"class":53,"line":307},[51,67618,55067],{"class":278},[51,67620,51809],{"class":65},[51,67622,733],{"class":278},[51,67624,1703],{"class":65},[51,67626,67627],{"class":53,"line":324},[51,67628,2577],{"class":65},[51,67630,67631],{"class":53,"line":329},[51,67632,206],{"emptyLinePlaceholder":205},[51,67634,67635,67637],{"class":53,"line":334},[51,67636,64048],{"class":57},[51,67638,15956],{"class":65},[51,67640,67641,67643,67645,67647,67649],{"class":53,"line":340},[51,67642,55143],{"class":278},[51,67644,51809],{"class":65},[51,67646,64059],{"class":278},[51,67648,51864],{"class":69},[51,67650,1703],{"class":65},[51,67652,67653,67655,67657,67659,67661],{"class":53,"line":345},[51,67654,55157],{"class":278},[51,67656,51809],{"class":65},[51,67658,64072],{"class":278},[51,67660,51864],{"class":69},[51,67662,1703],{"class":65},[51,67664,67665,67667,67669,67671,67673],{"class":53,"line":357},[51,67666,55078],{"class":278},[51,67668,51809],{"class":65},[51,67670,1242],{"class":278},[51,67672,51864],{"class":69},[51,67674,1703],{"class":65},[51,67676,67677,67679,67681,67683,67685,67687,67689],{"class":53,"line":366},[51,67678,62349],{"class":278},[51,67680,51809],{"class":65},[51,67682,759],{"class":278},[51,67684,51864],{"class":69},[51,67686,51893],{"class":278},[51,67688,62616],{"class":278},[51,67690,1703],{"class":65},[51,67692,67693],{"class":53,"line":383},[51,67694,2577],{"class":65},[51,67696,67697],{"class":53,"line":392},[51,67698,206],{"emptyLinePlaceholder":205},[51,67700,67701,67703],{"class":53,"line":403},[51,67702,64117],{"class":57},[51,67704,15956],{"class":65},[51,67706,67707,67709,67711,67713,67715],{"class":53,"line":409},[51,67708,55143],{"class":278},[51,67710,51809],{"class":65},[51,67712,853],{"class":278},[51,67714,870],{"class":69},[51,67716,1703],{"class":65},[51,67718,67719,67721,67723,67725,67727],{"class":53,"line":414},[51,67720,55157],{"class":278},[51,67722,51809],{"class":65},[51,67724,1449],{"class":278},[51,67726,51864],{"class":69},[51,67728,1703],{"class":65},[51,67730,67731,67733,67735,67737,67739],{"class":53,"line":433},[51,67732,57731],{"class":278},[51,67734,51809],{"class":65},[51,67736,1449],{"class":278},[51,67738,51864],{"class":69},[51,67740,1703],{"class":65},[51,67742,67743,67745,67747,67749],{"class":53,"line":439},[51,67744,55381],{"class":278},[51,67746,51809],{"class":65},[51,67748,51849],{"class":278},[51,67750,1703],{"class":65},[51,67752,67753,67755,67757,67759],{"class":53,"line":444},[51,67754,55392],{"class":278},[51,67756,51809],{"class":65},[51,67758,52040],{"class":278},[51,67760,1703],{"class":65},[51,67762,67763],{"class":53,"line":453},[51,67764,2577],{"class":65},[51,67766,67767],{"class":53,"line":2174},[51,67768,206],{"emptyLinePlaceholder":205},[51,67770,67771,67773,67775],{"class":53,"line":2965},[51,67772,64117],{"class":57},[51,67774,64190],{"class":51672},[51,67776,15956],{"class":65},[51,67778,67779,67781,67783,67785,67787],{"class":53,"line":2979},[51,67780,55294],{"class":278},[51,67782,51809],{"class":65},[51,67784,1342],{"class":278},[51,67786,51864],{"class":69},[51,67788,1703],{"class":65},[51,67790,67791,67793,67795,67797],{"class":53,"line":2987},[51,67792,62706],{"class":278},[51,67794,51809],{"class":65},[51,67796,64213],{"class":278},[51,67798,1703],{"class":65},[51,67800,67801,67803,67805,67807,67809],{"class":53,"line":2992},[51,67802,62372],{"class":278},[51,67804,51809],{"class":65},[51,67806,1242],{"class":278},[51,67808,51864],{"class":69},[51,67810,1703],{"class":65},[51,67812,67813],{"class":53,"line":2998},[51,67814,2577],{"class":65},[51,67816,67817],{"class":53,"line":3004},[51,67818,206],{"emptyLinePlaceholder":205},[51,67820,67821,67823,67825],{"class":53,"line":3009},[51,67822,64117],{"class":57},[51,67824,61664],{"class":51672},[51,67826,15956],{"class":65},[51,67828,67829,67831,67833,67835],{"class":53,"line":8332},[51,67830,55104],{"class":278},[51,67832,51809],{"class":65},[51,67834,55109],{"class":278},[51,67836,1703],{"class":65},[51,67838,67839,67841,67843,67845],{"class":53,"line":8356},[51,67840,55381],{"class":278},[51,67842,51809],{"class":65},[51,67844,51849],{"class":278},[51,67846,1703],{"class":65},[51,67848,67849,67851,67853,67855],{"class":53,"line":8361},[51,67850,55392],{"class":278},[51,67852,51809],{"class":65},[51,67854,51952],{"class":278},[51,67856,1703],{"class":65},[51,67858,67859],{"class":53,"line":8367},[51,67860,2577],{"class":65},[51,67862,67863],{"class":53,"line":8394},[51,67864,206],{"emptyLinePlaceholder":205},[51,67866,67867,67869,67871,67873],{"class":53,"line":8399},[51,67868,64117],{"class":57},[51,67870,61664],{"class":51672},[51,67872,55447],{"class":51672},[51,67874,15956],{"class":65},[51,67876,67877,67879,67881,67883,67885,67887],{"class":53,"line":8405},[51,67878,55078],{"class":278},[51,67880,51809],{"class":65},[51,67882,733],{"class":278},[51,67884,9334],{"class":278},[51,67886,51864],{"class":69},[51,67888,1703],{"class":65},[51,67890,67891,67893,67895,67897,67899],{"class":53,"line":8417},[51,67892,55294],{"class":278},[51,67894,51809],{"class":65},[51,67896,1091],{"class":278},[51,67898,51864],{"class":69},[51,67900,1703],{"class":65},[51,67902,67903],{"class":53,"line":8429},[51,67904,2577],{"class":65},[51,67906,67907],{"class":53,"line":8441},[51,67908,206],{"emptyLinePlaceholder":205},[51,67910,67911,67913,67915,67917,67919],{"class":53,"line":10100},[51,67912,64117],{"class":57},[51,67914,61664],{"class":51672},[51,67916,55447],{"class":51672},[51,67918,1808],{"class":51672},[51,67920,15956],{"class":65},[51,67922,67923,67925,67927,67929],{"class":53,"line":10125},[51,67924,64342],{"class":278},[51,67926,51809],{"class":65},[51,67928,55109],{"class":278},[51,67930,1703],{"class":65},[51,67932,67933,67935,67937,67939,67941,67943,67945],{"class":53,"line":10148},[51,67934,62604],{"class":278},[51,67936,51809],{"class":65},[51,67938,620],{"class":278},[51,67940,51864],{"class":69},[51,67942,51893],{"class":278},[51,67944,64363],{"class":278},[51,67946,1703],{"class":65},[51,67948,67949,67951,67953,67955],{"class":53,"line":10172},[51,67950,57788],{"class":278},[51,67952,51809],{"class":65},[51,67954,62741],{"class":278},[51,67956,1703],{"class":65},[51,67958,67959],{"class":53,"line":10177},[51,67960,2577],{"class":65},[51,67962,67963],{"class":53,"line":10182},[51,67964,206],{"emptyLinePlaceholder":205},[51,67966,67967,67969,67971,67973,67975,67977],{"class":53,"line":10187},[51,67968,64117],{"class":57},[51,67970,61664],{"class":51672},[51,67972,55447],{"class":51672},[51,67974,1808],{"class":51672},[51,67976,64396],{"class":57},[51,67978,15956],{"class":65},[51,67980,67981,67983,67985,67987],{"class":53,"line":10196},[51,67982,62163],{"class":278},[51,67984,51809],{"class":65},[51,67986,64407],{"class":278},[51,67988,1703],{"class":65},[51,67990,67991,67993,67995,67997],{"class":53,"line":10201},[51,67992,57788],{"class":278},[51,67994,51809],{"class":65},[51,67996,64407],{"class":278},[51,67998,1703],{"class":65},[51,68000,68001],{"class":53,"line":10207},[51,68002,2577],{"class":65},[51,68004,68005],{"class":53,"line":10228},[51,68006,206],{"emptyLinePlaceholder":205},[51,68008,68009,68011],{"class":53,"line":10234},[51,68010,64432],{"class":57},[51,68012,15956],{"class":65},[51,68014,68015,68017,68019,68021,68023,68025],{"class":53,"line":10248},[51,68016,55067],{"class":278},[51,68018,51809],{"class":65},[51,68020,733],{"class":278},[51,68022,64445],{"class":278},[51,68024,51864],{"class":69},[51,68026,1703],{"class":65},[51,68028,68029],{"class":53,"line":10254},[51,68030,2577],{"class":65},[51,68032,68033],{"class":53,"line":10281},[51,68034,206],{"emptyLinePlaceholder":205},[51,68036,68037,68039,68041],{"class":53,"line":10290},[51,68038,64432],{"class":57},[51,68040,62546],{"class":57},[51,68042,15956],{"class":65},[51,68044,68045,68047,68049,68051],{"class":53,"line":10296},[51,68046,55381],{"class":278},[51,68048,51809],{"class":65},[51,68050,55109],{"class":278},[51,68052,1703],{"class":65},[51,68054,68055],{"class":53,"line":10304},[51,68056,2577],{"class":65},[51,68058,68059],{"class":53,"line":10309},[51,68060,206],{"emptyLinePlaceholder":205},[51,68062,68063,68065,68068],{"class":53,"line":16987},[51,68064,64432],{"class":57},[51,68066,68067],{"class":57}," .active",[51,68069,15956],{"class":65},[51,68071,68072,68074,68076,68078],{"class":53,"line":16993},[51,68073,55381],{"class":278},[51,68075,51809],{"class":65},[51,68077,61241],{"class":278},[51,68079,1703],{"class":65},[51,68081,68082],{"class":53,"line":17016},[51,68083,2577],{"class":65},[51,68085,68086,68088,68090],{"class":53,"line":17022},[51,68087,52789],{"class":65},[51,68089,464],{"class":51672},[51,68091,51679],{"class":65},[51,68093,68094,68096,68098],{"class":53,"line":17045},[51,68095,52157],{"class":65},[51,68097,51706],{"class":51672},[51,68099,51679],{"class":65},[51,68101,68102],{"class":53,"line":17059},[51,68103,206],{"emptyLinePlaceholder":205},[51,68105,68106,68108,68110],{"class":53,"line":17079},[51,68107,1452],{"class":65},[51,68109,52172],{"class":51672},[51,68111,51679],{"class":65},[51,68113,68114,68116,68118,68120,68122,68124],{"class":53,"line":17085},[51,68115,52516],{"class":65},[51,68117,51983],{"class":51672},[51,68119,53858],{"class":57},[51,68121,70],{"class":65},[51,68123,64547],{"class":61},[51,68125,51679],{"class":65},[51,68127,68128,68130,68132,68134,68136,68138],{"class":53,"line":17096},[51,68129,51713],{"class":65},[51,68131,51983],{"class":51672},[51,68133,53858],{"class":57},[51,68135,70],{"class":65},[51,68137,64562],{"class":61},[51,68139,51679],{"class":65},[51,68141,68142,68144,68146,68148,68150],{"class":53,"line":17119},[51,68143,55606],{"class":65},[51,68145,513],{"class":51672},[51,68147,64573],{"class":65},[51,68149,513],{"class":51672},[51,68151,51679],{"class":65},[51,68153,68154,68156,68158],{"class":53,"line":17141},[51,68155,55606],{"class":65},[51,68157,1549],{"class":51672},[51,68159,51679],{"class":65},[51,68161,68162,68164,68166,68168,68170,68172,68174,68176,68178,68180,68182,68184,68186,68189,68191,68193,68195,68197],{"class":53,"line":17146},[51,68163,55674],{"class":65},[51,68165,22],{"class":51672},[51,68167,61424],{"class":65},[51,68169,780],{"class":51672},[51,68171,53858],{"class":57},[51,68173,70],{"class":65},[51,68175,60078],{"class":61},[51,68177,61429],{"class":57},[51,68179,70],{"class":65},[51,68181,64608],{"class":61},[51,68183,54323],{"class":57},[51,68185,70],{"class":65},[51,68187,68188],{"class":61},"\"0\"",[51,68190,64611],{"class":65},[51,68192,780],{"class":51672},[51,68194,55686],{"class":65},[51,68196,22],{"class":51672},[51,68198,51679],{"class":65},[51,68200,68201,68203,68205,68207,68209,68211,68213,68215,68217,68219,68221,68223,68225,68227,68229],{"class":53,"line":17152},[51,68202,55674],{"class":65},[51,68204,22],{"class":51672},[51,68206,61424],{"class":65},[51,68208,780],{"class":51672},[51,68210,61429],{"class":57},[51,68212,70],{"class":65},[51,68214,64608],{"class":61},[51,68216,54323],{"class":57},[51,68218,70],{"class":65},[51,68220,4065],{"class":61},[51,68222,64638],{"class":65},[51,68224,780],{"class":51672},[51,68226,55686],{"class":65},[51,68228,22],{"class":51672},[51,68230,51679],{"class":65},[51,68232,68233,68235,68237,68239,68241,68243,68245,68247,68249,68251,68253,68255,68257,68259,68261],{"class":53,"line":17166},[51,68234,55674],{"class":65},[51,68236,22],{"class":51672},[51,68238,61424],{"class":65},[51,68240,780],{"class":51672},[51,68242,61429],{"class":57},[51,68244,70],{"class":65},[51,68246,64608],{"class":61},[51,68248,54323],{"class":57},[51,68250,70],{"class":65},[51,68252,4088],{"class":61},[51,68254,64665],{"class":65},[51,68256,780],{"class":51672},[51,68258,55686],{"class":65},[51,68260,22],{"class":51672},[51,68262,51679],{"class":65},[51,68264,68265,68267,68269,68271,68273,68275,68277,68279,68281,68283,68285,68287,68289,68291,68293],{"class":53,"line":17179},[51,68266,55674],{"class":65},[51,68268,22],{"class":51672},[51,68270,61424],{"class":65},[51,68272,780],{"class":51672},[51,68274,61429],{"class":57},[51,68276,70],{"class":65},[51,68278,64608],{"class":61},[51,68280,54323],{"class":57},[51,68282,70],{"class":65},[51,68284,4101],{"class":61},[51,68286,64692],{"class":65},[51,68288,780],{"class":51672},[51,68290,55686],{"class":65},[51,68292,22],{"class":51672},[51,68294,51679],{"class":65},[51,68296,68297,68299,68301,68303,68305,68307,68309,68311,68313,68315,68317,68319,68321,68323,68325],{"class":53,"line":17184},[51,68298,55674],{"class":65},[51,68300,22],{"class":51672},[51,68302,61424],{"class":65},[51,68304,780],{"class":51672},[51,68306,61429],{"class":57},[51,68308,70],{"class":65},[51,68310,64608],{"class":61},[51,68312,54323],{"class":57},[51,68314,70],{"class":65},[51,68316,4114],{"class":61},[51,68318,64719],{"class":65},[51,68320,780],{"class":51672},[51,68322,55686],{"class":65},[51,68324,22],{"class":51672},[51,68326,51679],{"class":65},[51,68328,68329,68331,68333],{"class":53,"line":17198},[51,68330,55779],{"class":65},[51,68332,1549],{"class":51672},[51,68334,51679],{"class":65},[51,68336,68337,68339,68341],{"class":53,"line":17203},[51,68338,52148],{"class":65},[51,68340,51983],{"class":51672},[51,68342,51679],{"class":65},[51,68344,68345,68347,68349,68351,68353,68355],{"class":53,"line":17209},[51,68346,51713],{"class":65},[51,68348,51983],{"class":51672},[51,68350,53858],{"class":57},[51,68352,70],{"class":65},[51,68354,64756],{"class":61},[51,68356,51679],{"class":65},[51,68358,68359,68361,68363,68365,68367,68369,68371,68373,68375,68377,68379,68381,68383,68385,68387,68389],{"class":53,"line":17214},[51,68360,55606],{"class":65},[51,68362,51983],{"class":51672},[51,68364,53858],{"class":57},[51,68366,70],{"class":65},[51,68368,64771],{"class":61},[51,68370,61424],{"class":65},[51,68372,460],{"class":51672},[51,68374,55611],{"class":57},[51,68376,70],{"class":65},[51,68378,64782],{"class":61},[51,68380,55619],{"class":57},[51,68382,70],{"class":65},[51,68384,8036],{"class":61},[51,68386,64791],{"class":65},[51,68388,51983],{"class":51672},[51,68390,51679],{"class":65},[51,68392,68393,68395,68397,68399,68401,68403,68405,68407,68409,68411,68413,68415,68417,68419,68421,68423],{"class":53,"line":17228},[51,68394,55606],{"class":65},[51,68396,51983],{"class":51672},[51,68398,53858],{"class":57},[51,68400,70],{"class":65},[51,68402,62995],{"class":61},[51,68404,61424],{"class":65},[51,68406,460],{"class":51672},[51,68408,55611],{"class":57},[51,68410,70],{"class":65},[51,68412,64818],{"class":61},[51,68414,55619],{"class":57},[51,68416,70],{"class":65},[51,68418,8036],{"class":61},[51,68420,64791],{"class":65},[51,68422,51983],{"class":51672},[51,68424,51679],{"class":65},[51,68426,68427,68429,68431,68433,68435,68437,68439,68441,68443,68445,68447,68449,68451,68453,68455,68457],{"class":53,"line":17233},[51,68428,55606],{"class":65},[51,68430,51983],{"class":51672},[51,68432,53858],{"class":57},[51,68434,70],{"class":65},[51,68436,62995],{"class":61},[51,68438,61424],{"class":65},[51,68440,460],{"class":51672},[51,68442,55611],{"class":57},[51,68444,70],{"class":65},[51,68446,64853],{"class":61},[51,68448,55619],{"class":57},[51,68450,70],{"class":65},[51,68452,8036],{"class":61},[51,68454,64791],{"class":65},[51,68456,51983],{"class":51672},[51,68458,51679],{"class":65},[51,68460,68461,68463,68465,68467,68469,68471,68473,68475,68477,68479,68481,68483,68485,68487,68489,68491],{"class":53,"line":17238},[51,68462,55606],{"class":65},[51,68464,51983],{"class":51672},[51,68466,53858],{"class":57},[51,68468,70],{"class":65},[51,68470,62995],{"class":61},[51,68472,61424],{"class":65},[51,68474,460],{"class":51672},[51,68476,55611],{"class":57},[51,68478,70],{"class":65},[51,68480,64888],{"class":61},[51,68482,55619],{"class":57},[51,68484,70],{"class":65},[51,68486,8036],{"class":61},[51,68488,64791],{"class":65},[51,68490,51983],{"class":51672},[51,68492,51679],{"class":65},[51,68494,68495,68497,68499,68501,68503,68505,68507,68509,68511,68513,68515,68517,68519,68521,68523,68525],{"class":53,"line":17252},[51,68496,55606],{"class":65},[51,68498,51983],{"class":51672},[51,68500,53858],{"class":57},[51,68502,70],{"class":65},[51,68504,62995],{"class":61},[51,68506,61424],{"class":65},[51,68508,460],{"class":51672},[51,68510,55611],{"class":57},[51,68512,70],{"class":65},[51,68514,64923],{"class":61},[51,68516,55619],{"class":57},[51,68518,70],{"class":65},[51,68520,8036],{"class":61},[51,68522,64791],{"class":65},[51,68524,51983],{"class":51672},[51,68526,51679],{"class":65},[51,68528,68529,68531,68533],{"class":53,"line":17264},[51,68530,52148],{"class":65},[51,68532,51983],{"class":51672},[51,68534,51679],{"class":65},[51,68536,68537,68539,68541],{"class":53,"line":17269},[51,68538,52789],{"class":65},[51,68540,51983],{"class":51672},[51,68542,51679],{"class":65},[51,68544,68545,68547,68549],{"class":53,"line":17282},[51,68546,52516],{"class":65},[51,68548,52185],{"class":51672},[51,68550,51679],{"class":65},[51,68552,68553],{"class":53,"line":17287},[51,68554,68555],{"class":601},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[51,68557,68558],{"class":53,"line":17292},[51,68559,68560],{"class":601},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[51,68562,68563,68565,68567,68569,68571,68573,68575,68578],{"class":53,"line":17297},[51,68564,11605],{"class":69},[51,68566,61664],{"class":278},[51,68568,13948],{"class":69},[51,68570,54768],{"class":65},[51,68572,54771],{"class":57},[51,68574,546],{"class":65},[51,68576,68577],{"class":61},"'.tab-nav ul'",[51,68579,282],{"class":65},[51,68581,68582],{"class":53,"line":17310},[51,68583,68584],{"class":601},"    \u002F\u002F 2.添加事件\n",[51,68586,68587,68589,68591,68593,68595,68597,68599,68601,68603],{"class":53,"line":17315},[51,68588,67326],{"class":65},[51,68590,58185],{"class":57},[51,68592,546],{"class":65},[51,68594,58190],{"class":61},[51,68596,12819],{"class":65},[51,68598,54821],{"class":69},[51,68600,2060],{"class":65},[51,68602,617],{"class":248},[51,68604,12826],{"class":65},[51,68606,68607,68609,68611],{"class":53,"line":33008},[51,68608,58616],{"class":65},[51,68610,67382],{"class":57},[51,68612,67385],{"class":65},[51,68614,68615],{"class":53,"line":33014},[51,68616,68617],{"class":601},"      \u002F\u002Fe.targer是我们点击的对象\n",[51,68619,68620,68622,68624,68626,68629],{"class":53,"line":33020},[51,68621,54852],{"class":69},[51,68623,67406],{"class":65},[51,68625,54858],{"class":69},[51,68627,68628],{"class":61}," 'A'",[51,68630,12826],{"class":65},[51,68632,68633,68635,68637,68639,68642,68644,68646,68648,68650],{"class":53,"line":33026},[51,68634,52297],{"class":65},[51,68636,54771],{"class":57},[51,68638,546],{"class":65},[51,68640,68641],{"class":61},"'.active'",[51,68643,57375],{"class":65},[51,68645,57378],{"class":57},[51,68647,546],{"class":65},[51,68649,65086],{"class":61},[51,68651,282],{"class":65},[51,68653,68654,68657,68659,68661,68663],{"class":53,"line":33032},[51,68655,68656],{"class":65},"        e.target.classList.",[51,68658,5718],{"class":57},[51,68660,546],{"class":65},[51,68662,65086],{"class":61},[51,68664,282],{"class":65},[51,68666,68667],{"class":53,"line":33043},[51,68668,206],{"emptyLinePlaceholder":205},[51,68670,68671],{"class":53,"line":33049},[51,68672,68673],{"class":601},"        \u002F\u002F 下面大盒子模块\n",[51,68675,68676],{"class":53,"line":33069},[51,68677,68678],{"class":601},"        \u002F\u002F console.log(e.target.dataset.id)\n",[51,68680,68681,68683,68685,68687,68689],{"class":53,"line":33075},[51,68682,61642],{"class":69},[51,68684,3419],{"class":278},[51,68686,13948],{"class":69},[51,68688,45938],{"class":69},[51,68690,68691],{"class":65},"e.target.dataset.id\n",[51,68693,68694,68696,68698,68700,68702,68704,68706,68708,68710],{"class":53,"line":33086},[51,68695,52297],{"class":65},[51,68697,54771],{"class":57},[51,68699,546],{"class":65},[51,68701,65134],{"class":61},[51,68703,57375],{"class":65},[51,68705,57378],{"class":57},[51,68707,546],{"class":65},[51,68709,65086],{"class":61},[51,68711,282],{"class":65},[51,68713,68714,68716,68718,68720,68722,68724,68726,68728,68730,68732,68734,68736,68738],{"class":53,"line":33092},[51,68715,52297],{"class":65},[51,68717,54771],{"class":57},[51,68719,546],{"class":65},[51,68721,65160],{"class":61},[51,68723,983],{"class":65},[51,68725,45938],{"class":69},[51,68727,25500],{"class":278},[51,68729,57404],{"class":61},[51,68731,57375],{"class":65},[51,68733,5718],{"class":57},[51,68735,546],{"class":65},[51,68737,65086],{"class":61},[51,68739,282],{"class":65},[51,68741,68742],{"class":53,"line":33098},[51,68743,206],{"emptyLinePlaceholder":205},[51,68745,68746],{"class":53,"line":33104},[51,68747,52770],{"class":65},[51,68749,68750],{"class":53,"line":33110},[51,68751,33836],{"class":65},[51,68753,68754,68756,68758],{"class":53,"line":33116},[51,68755,52789],{"class":65},[51,68757,52185],{"class":51672},[51,68759,51679],{"class":65},[51,68761,68762,68764,68766],{"class":53,"line":33122},[51,68763,52157],{"class":65},[51,68765,52172],{"class":51672},[51,68767,51679],{"class":65},[51,68769,68770],{"class":53,"line":33128},[51,68771,206],{"emptyLinePlaceholder":205},[51,68773,68774,68776,68778],{"class":53,"line":33148},[51,68775,52157],{"class":65},[51,68777,51007],{"class":51672},[51,68779,51679],{"class":65},[513,68781,68783],{"id":68782},"_333-页面加载事件","3.3.3 页面加载事件",[19,68785,68786],{},[22,68787,68788],{},"load",[10,68790,68791],{},[460,68792],{"alt":46,"src":68793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[10,68795,68796],{},"window代表整个窗口，比document还要大",[10,68798,68799],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[10,68801,68802],{},"img.addEventListener('load', function () {",[10,68804,68805],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[10,68807,52836],{},[19,68809,68810],{"start":185},[22,68811,68812],{},"DOMContentLoaded",[10,68814,68815],{},[460,68816],{"alt":46,"src":68817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[10,68819,68820],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[513,68822,68824],{"id":68823},"_334-元素滚动事件","3.3.4 元素滚动事件",[10,68826,68827],{},[460,68828],{"alt":46,"src":68829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[10,68831,68832],{},[460,68833],{"alt":46,"src":68834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[10,68836,68837],{},[460,68838],{"alt":46,"src":68839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[10,68841,68842],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[10,68844,68845],{},"获得的是数字型数据，不带单位",[10,68847,68848],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[10,68850,68851],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[10,68853,68854],{},"它是通过document.documentElement来获取",[10,68856,68857],{},[460,68858],{"alt":46,"src":68859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[10,68861,68862],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[513,68864,68866],{"id":68865},"_335-页面缩放事件","3.3.5 页面缩放事件",[10,68868,68869],{},[460,68870],{"alt":46,"src":68871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[10,68873,68874],{},[460,68875],{"alt":46,"src":68876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[513,68878,68880],{"id":68879},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[10,68882,68883],{},[460,68884],{"alt":46,"src":68885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[10,68887,68888],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[10,68890,68891],{},[460,68892],{"alt":46,"src":68893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[10,68895,68896],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[10,68898,68899],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[10,68901,68902],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[10,68904,68905],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[10,68907,68908],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[10,68910,68911],{},[460,68912],{"alt":46,"src":68913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[10,68915,68916],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[10,68918,68919],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[10,68921,68922],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[10,68924,68925],{},"e.pageX-box.getBoundingClientRect()",[513,68927,68929],{"id":68928},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[10,68931,68932],{},[460,68933],{"alt":46,"src":68934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[10,68936,68937],{},"这个是相对于视口来说的，它是个方法，不是属性值",[513,68939,68941],{"id":68940},"_338-总结","3.3.8 总结",[10,68943,68944],{},[460,68945],{"alt":46,"src":68946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[10,68948,68949],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[10,68951,68952],{},"修改盒子的宽高只能通过width和height来实现",[513,68954,68956],{"id":68955},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[41,68958,68960],{"className":51005,"code":68959,"language":51007,"meta":46,"style":46},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[48,68961,68962,68967,68972,68977,68982],{"__ignoreMap":46},[51,68963,68964],{"class":53,"line":54},[51,68965,68966],{"class":65},"\u002F* 页面滑动 *\u002F\n",[51,68968,68969],{"class":53,"line":185},[51,68970,68971],{"class":65},"html {\n",[51,68973,68974],{"class":53,"line":202},[51,68975,68976],{"class":65},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[51,68978,68979],{"class":53,"line":209},[51,68980,68981],{"class":65},"  scroll-behavior: smooth;\n",[51,68983,68984],{"class":53,"line":223},[51,68985,1974],{"class":65},[10,68987,68988],{},"默认是auto",[513,68990,68992],{"id":68991},"_3310-日期对象","3.3.10 日期对象",[22381,68994,68996],{"id":68995},"_33101-实例化","3.3.10.1 实例化",[10,68998,68999],{},[460,69000],{"alt":46,"src":69001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22381,69003,69005],{"id":69004},"_33102-时期对象方法","3.3.10.2 时期对象方法",[10,69007,69008],{},[460,69009],{"alt":46,"src":69010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[10,69012,69013],{},"月份+1",[10,69015,69016],{},"老外认为第一天为0，星期天",[10,69018,69019],{},"方法使用的时候必须要跟括号",[10,69021,69022],{},"快速获得日期",[10,69024,69025],{},"\u002F\u002F 得到年月日",[10,69027,69028],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[10,69030,69031],{},"\u002F\u002F 得到当地日期",[10,69033,69034],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[10,69036,69037],{},"\u002F\u002F 得到当地时间",[10,69039,69040],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[10,69042,69043],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[10,69045,69046],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52185,69048,69049],{},"\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",[10,69051,69052],{},"学会去封装函数！",[22381,69054,69056],{"id":69055},"_33103-时间戳","3.3.10.3 时间戳",[10,69058,69059],{},[460,69060],{"alt":46,"src":69061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[10,69063,69064],{},[460,69065],{"alt":46,"src":69066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[10,69068,69069],{},"三种方法记住一个就可以",[513,69071,69073],{"id":69072},"_3311-节点操作","3.3.11 节点操作",[22381,69075,69077],{"id":69076},"_33111-dom节点","3.3.11.1 DOM节点",[10,69079,69080],{},[460,69081],{"alt":46,"src":69082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[10,69084,69085],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22381,69087,69089],{"id":69088},"_33112-查找节点","3.3.11.2 查找节点",[10,69091,69092],{},"前边的document.querySelector()是获取的元素",[10,69094,69095],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[10,69097,69098],{},[460,69099],{"alt":46,"src":69100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[19,69102,69103],{},[22,69104,69105],{},"父节点",[10,69107,69108],{},[460,69109],{"alt":46,"src":69110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[19,69112,69113],{"start":185},[22,69114,69115],{},"子节点",[10,69117,69118],{},[460,69119],{"alt":46,"src":69120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[10,69122,69123],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[10,69125,69126],{},"children获得的是伪数组，是亲儿子",[19,69128,69129],{"start":202},[22,69130,69131],{},"兄弟节点",[10,69133,69134],{},[460,69135],{"alt":46,"src":69136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22381,69138,69140],{"id":69139},"_33113-增加节点","3.3.11.3 增加节点",[10,69142,69143],{},[460,69144],{"alt":46,"src":69145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[10,69147,69148],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[10,69150,69151],{},[460,69152],{"alt":46,"src":69153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[10,69155,69156],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[10,69158,69159],{},"下面是写法的部分展示，就按照下边的格式来写",[10,69161,69162],{},"例：",[52185,69164,69165],{},"\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",[10,69167,69168],{},[460,69169],{"alt":46,"src":69170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[10,69172,69173],{},"false只克隆标签，里边的内容不会克隆过来",[41,69175,69177],{"className":51005,"code":69176,"language":51007,"meta":46,"style":46},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[48,69178,69179],{"__ignoreMap":46},[51,69180,69181],{"class":53,"line":54},[51,69182,69176],{"class":65},[22381,69184,69186],{"id":69185},"_33114-删除节点","3.3.11.4 删除节点",[10,69188,69189],{},[460,69190],{"alt":46,"src":69191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[10,69193,69194],{},"父亲删儿子",[10,69196,69197],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[513,69199,69201],{"id":69200},"_3312-m端事件","3.3.12 M端事件",[10,69203,69204],{},"M端就是移动端",[10,69206,69207],{},[460,69208],{"alt":46,"src":69209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[513,69211,69213],{"id":69212},"_3313-插件","3.3.13 插件",[10,69215,69216],{},"要熟悉官网！！！",[10,69218,69219],{},[780,69220,69221],{"href":69221,"rel":69222},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24246],[10,69224,69225],{},[780,69226,69227],{"href":69227,"rel":69228},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24246],[513,69230,69232],{"id":69231},"_3314-学生信息表","3.3.14 学生信息表",[19,69234,69235,69238,69241,69244,69247,69250,69253,69256],{},[22,69236,69237],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[22,69239,69240],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[22,69242,69243],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[22,69245,69246],{},"用好表单元素自带的属性，value,name等",[22,69248,69249],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[22,69251,69252],{},"不要忘记事件对象",[22,69254,69255],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[22,69257,69258],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[10,69260,69261],{},"结构：",[41,69263,69265],{"className":51005,"code":69264,"language":51007,"meta":46,"style":46},"\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",[48,69266,69267,69277,69291,69295,69303,69317,69337,69358,69371,69395,69403,69407,69415,69428,69449,69477,69505,69510,69532,69552,69571,69579,69607,69629,69649,69669,69689,69709,69729,69737,69757,69765,69769,69782,69790,69798,69806,69819,69832,69845,69858,69871,69884,69897,69905,69913,69921,69926,69931,69936,69941,69946,69951,69956,69961,69966,69971,69976,69981,69986,69994,70002,70010,70014,70034,70053,70073,70093,70113,70133,70137,70142,70162,70167,70177,70182,70187,70207,70229,70234,70244,70248,70252,70257,70262,70291,70305,70320,70324,70328,70332,70337,70348,70361,70366,70371,70376,70381,70386,70390,70395,70400,70409,70414,70419,70431,70436,70443,70447,70452,70462,70467,70477,70482,70510,70531,70541,70561,70579,70596,70613,70630,70647,70651,70661,70666,70671,70676,70687,70691,70695,70699,70704,70709,70730,70742,70747,70752,70757,70771,70776,70783,70787,70791,70799,70803,70811,70815],{"__ignoreMap":46},[51,69268,69269,69271,69273,69275],{"class":53,"line":54},[51,69270,51669],{"class":65},[51,69272,51673],{"class":51672},[51,69274,51676],{"class":57},[51,69276,51679],{"class":65},[51,69278,69279,69281,69283,69285,69287,69289],{"class":53,"line":185},[51,69280,1452],{"class":65},[51,69282,51007],{"class":51672},[51,69284,51688],{"class":57},[51,69286,70],{"class":65},[51,69288,51693],{"class":61},[51,69290,51679],{"class":65},[51,69292,69293],{"class":53,"line":202},[51,69294,206],{"emptyLinePlaceholder":205},[51,69296,69297,69299,69301],{"class":53,"line":209},[51,69298,1452],{"class":65},[51,69300,51706],{"class":51672},[51,69302,51679],{"class":65},[51,69304,69305,69307,69309,69311,69313,69315],{"class":53,"line":223},[51,69306,52516],{"class":65},[51,69308,51716],{"class":51672},[51,69310,51719],{"class":57},[51,69312,70],{"class":65},[51,69314,51724],{"class":61},[51,69316,59499],{"class":65},[51,69318,69319,69321,69323,69325,69327,69329,69331,69333,69335],{"class":53,"line":237},[51,69320,52516],{"class":65},[51,69322,51716],{"class":51672},[51,69324,15304],{"class":57},[51,69326,70],{"class":65},[51,69328,51763],{"class":61},[51,69330,51743],{"class":57},[51,69332,70],{"class":65},[51,69334,51770],{"class":61},[51,69336,59499],{"class":65},[51,69338,69339,69341,69343,69345,69347,69349,69351,69353,69356],{"class":53,"line":242},[51,69340,52516],{"class":65},[51,69342,51716],{"class":51672},[51,69344,51735],{"class":57},[51,69346,70],{"class":65},[51,69348,51740],{"class":61},[51,69350,51743],{"class":57},[51,69352,70],{"class":65},[51,69354,69355],{"class":61},"\"ie=edge\"",[51,69357,59499],{"class":65},[51,69359,69360,69362,69364,69367,69369],{"class":53,"line":257},[51,69361,52516],{"class":65},[51,69363,51779],{"class":51672},[51,69365,69366],{"class":65},">学生信息管理\u003C\u002F",[51,69368,51779],{"class":51672},[51,69370,51679],{"class":65},[51,69372,69373,69375,69378,69381,69383,69386,69388,69390,69393],{"class":53,"line":262},[51,69374,52516],{"class":65},[51,69376,69377],{"class":51672},"link",[51,69379,69380],{"class":57}," rel",[51,69382,70],{"class":65},[51,69384,69385],{"class":61},"\"stylesheet\"",[51,69387,61429],{"class":57},[51,69389,70],{"class":65},[51,69391,69392],{"class":61},"\"css\u002Findex.css\"",[51,69394,59499],{"class":65},[51,69396,69397,69399,69401],{"class":53,"line":285},[51,69398,52157],{"class":65},[51,69400,51706],{"class":51672},[51,69402,51679],{"class":65},[51,69404,69405],{"class":53,"line":296},[51,69406,206],{"emptyLinePlaceholder":205},[51,69408,69409,69411,69413],{"class":53,"line":307},[51,69410,1452],{"class":65},[51,69412,52172],{"class":51672},[51,69414,51679],{"class":65},[51,69416,69417,69419,69421,69424,69426],{"class":53,"line":324},[51,69418,52516],{"class":65},[51,69420,14],{"class":51672},[51,69422,69423],{"class":65},">新增学员\u003C\u002F",[51,69425,14],{"class":51672},[51,69427,51679],{"class":65},[51,69429,69430,69432,69434,69436,69438,69440,69443,69445,69447],{"class":53,"line":329},[51,69431,52516],{"class":65},[51,69433,66997],{"class":51672},[51,69435,53858],{"class":57},[51,69437,70],{"class":65},[51,69439,63036],{"class":61},[51,69441,69442],{"class":57}," autocomplete",[51,69444,70],{"class":65},[51,69446,32152],{"class":61},[51,69448,51679],{"class":65},[51,69450,69451,69454,69456,69458,69460,69462,69464,69466,69469,69471,69473,69475],{"class":53,"line":334},[51,69452,69453],{"class":65},"    姓名：\u003C",[51,69455,54193],{"class":51672},[51,69457,54196],{"class":57},[51,69459,70],{"class":65},[51,69461,63071],{"class":61},[51,69463,53858],{"class":57},[51,69465,70],{"class":65},[51,69467,69468],{"class":61},"\"uname\"",[51,69470,15304],{"class":57},[51,69472,70],{"class":65},[51,69474,69468],{"class":61},[51,69476,59499],{"class":65},[51,69478,69479,69482,69484,69486,69488,69490,69492,69494,69497,69499,69501,69503],{"class":53,"line":340},[51,69480,69481],{"class":65},"    年龄：\u003C",[51,69483,54193],{"class":51672},[51,69485,54196],{"class":57},[51,69487,70],{"class":65},[51,69489,63071],{"class":61},[51,69491,53858],{"class":57},[51,69493,70],{"class":65},[51,69495,69496],{"class":61},"\"age\"",[51,69498,15304],{"class":57},[51,69500,70],{"class":65},[51,69502,69496],{"class":61},[51,69504,59499],{"class":65},[51,69506,69507],{"class":53,"line":345},[51,69508,69509],{"class":65},"    性别:\n",[51,69511,69512,69514,69517,69519,69521,69524,69526,69528,69530],{"class":53,"line":357},[51,69513,51713],{"class":65},[51,69515,69516],{"class":51672},"select",[51,69518,15304],{"class":57},[51,69520,70],{"class":65},[51,69522,69523],{"class":61},"\"gender\"",[51,69525,53858],{"class":57},[51,69527,70],{"class":65},[51,69529,69523],{"class":61},[51,69531,51679],{"class":65},[51,69533,69534,69536,69539,69541,69543,69545,69548,69550],{"class":53,"line":366},[51,69535,55606],{"class":65},[51,69537,69538],{"class":51672},"option",[51,69540,67023],{"class":57},[51,69542,70],{"class":65},[51,69544,10345],{"class":61},[51,69546,69547],{"class":65},">男\u003C\u002F",[51,69549,69538],{"class":51672},[51,69551,51679],{"class":65},[51,69553,69554,69556,69558,69560,69562,69564,69567,69569],{"class":53,"line":383},[51,69555,55606],{"class":65},[51,69557,69538],{"class":51672},[51,69559,67023],{"class":57},[51,69561,70],{"class":65},[51,69563,10414],{"class":61},[51,69565,69566],{"class":65},">女\u003C\u002F",[51,69568,69538],{"class":51672},[51,69570,51679],{"class":65},[51,69572,69573,69575,69577],{"class":53,"line":392},[51,69574,52148],{"class":65},[51,69576,69516],{"class":51672},[51,69578,51679],{"class":65},[51,69580,69581,69584,69586,69588,69590,69592,69594,69596,69599,69601,69603,69605],{"class":53,"line":403},[51,69582,69583],{"class":65},"    薪资：\u003C",[51,69585,54193],{"class":51672},[51,69587,54196],{"class":57},[51,69589,70],{"class":65},[51,69591,63071],{"class":61},[51,69593,53858],{"class":57},[51,69595,70],{"class":65},[51,69597,69598],{"class":61},"\"salary\"",[51,69600,15304],{"class":57},[51,69602,70],{"class":65},[51,69604,69598],{"class":61},[51,69606,59499],{"class":65},[51,69608,69609,69612,69614,69616,69618,69621,69623,69625,69627],{"class":53,"line":409},[51,69610,69611],{"class":65},"    就业城市：\u003C",[51,69613,69516],{"class":51672},[51,69615,15304],{"class":57},[51,69617,70],{"class":65},[51,69619,69620],{"class":61},"\"city\"",[51,69622,53858],{"class":57},[51,69624,70],{"class":65},[51,69626,69620],{"class":61},[51,69628,51679],{"class":65},[51,69630,69631,69633,69635,69637,69639,69642,69645,69647],{"class":53,"line":414},[51,69632,55606],{"class":65},[51,69634,69538],{"class":51672},[51,69636,67023],{"class":57},[51,69638,70],{"class":65},[51,69640,69641],{"class":61},"\"北京\"",[51,69643,69644],{"class":65},">北京\u003C\u002F",[51,69646,69538],{"class":51672},[51,69648,51679],{"class":65},[51,69650,69651,69653,69655,69657,69659,69662,69665,69667],{"class":53,"line":433},[51,69652,55606],{"class":65},[51,69654,69538],{"class":51672},[51,69656,67023],{"class":57},[51,69658,70],{"class":65},[51,69660,69661],{"class":61},"\"上海\"",[51,69663,69664],{"class":65},">上海\u003C\u002F",[51,69666,69538],{"class":51672},[51,69668,51679],{"class":65},[51,69670,69671,69673,69675,69677,69679,69682,69685,69687],{"class":53,"line":439},[51,69672,55606],{"class":65},[51,69674,69538],{"class":51672},[51,69676,67023],{"class":57},[51,69678,70],{"class":65},[51,69680,69681],{"class":61},"\"广州\"",[51,69683,69684],{"class":65},">广州\u003C\u002F",[51,69686,69538],{"class":51672},[51,69688,51679],{"class":65},[51,69690,69691,69693,69695,69697,69699,69702,69705,69707],{"class":53,"line":444},[51,69692,55606],{"class":65},[51,69694,69538],{"class":51672},[51,69696,67023],{"class":57},[51,69698,70],{"class":65},[51,69700,69701],{"class":61},"\"深圳\"",[51,69703,69704],{"class":65},">深圳\u003C\u002F",[51,69706,69538],{"class":51672},[51,69708,51679],{"class":65},[51,69710,69711,69713,69715,69717,69719,69722,69725,69727],{"class":53,"line":453},[51,69712,55606],{"class":65},[51,69714,69538],{"class":51672},[51,69716,67023],{"class":57},[51,69718,70],{"class":65},[51,69720,69721],{"class":61},"\"曹县\"",[51,69723,69724],{"class":65},">曹县\u003C\u002F",[51,69726,69538],{"class":51672},[51,69728,51679],{"class":65},[51,69730,69731,69733,69735],{"class":53,"line":2174},[51,69732,52148],{"class":65},[51,69734,69516],{"class":51672},[51,69736,51679],{"class":65},[51,69738,69739,69741,69743,69745,69747,69750,69753,69755],{"class":53,"line":2965},[51,69740,51713],{"class":65},[51,69742,54259],{"class":51672},[51,69744,53858],{"class":57},[51,69746,70],{"class":65},[51,69748,69749],{"class":61},"\"add\"",[51,69751,69752],{"class":65},">录入\u003C\u002F",[51,69754,54259],{"class":51672},[51,69756,51679],{"class":65},[51,69758,69759,69761,69763],{"class":53,"line":2979},[51,69760,52789],{"class":65},[51,69762,66997],{"class":51672},[51,69764,51679],{"class":65},[51,69766,69767],{"class":53,"line":2987},[51,69768,206],{"emptyLinePlaceholder":205},[51,69770,69771,69773,69775,69778,69780],{"class":53,"line":2992},[51,69772,52516],{"class":65},[51,69774,14],{"class":51672},[51,69776,69777],{"class":65},">就业榜\u003C\u002F",[51,69779,14],{"class":51672},[51,69781,51679],{"class":65},[51,69783,69784,69786,69788],{"class":53,"line":2998},[51,69785,52516],{"class":65},[51,69787,679],{"class":51672},[51,69789,51679],{"class":65},[51,69791,69792,69794,69796],{"class":53,"line":3004},[51,69793,51713],{"class":65},[51,69795,682],{"class":51672},[51,69797,51679],{"class":65},[51,69799,69800,69802,69804],{"class":53,"line":3009},[51,69801,55606],{"class":65},[51,69803,685],{"class":51672},[51,69805,51679],{"class":65},[51,69807,69808,69810,69812,69815,69817],{"class":53,"line":8332},[51,69809,55674],{"class":65},[51,69811,688],{"class":51672},[51,69813,69814],{"class":65},">序号\u003C\u002F",[51,69816,688],{"class":51672},[51,69818,51679],{"class":65},[51,69820,69821,69823,69825,69828,69830],{"class":53,"line":8356},[51,69822,55674],{"class":65},[51,69824,688],{"class":51672},[51,69826,69827],{"class":65},">姓名\u003C\u002F",[51,69829,688],{"class":51672},[51,69831,51679],{"class":65},[51,69833,69834,69836,69838,69841,69843],{"class":53,"line":8361},[51,69835,55674],{"class":65},[51,69837,688],{"class":51672},[51,69839,69840],{"class":65},">年龄\u003C\u002F",[51,69842,688],{"class":51672},[51,69844,51679],{"class":65},[51,69846,69847,69849,69851,69854,69856],{"class":53,"line":8367},[51,69848,55674],{"class":65},[51,69850,688],{"class":51672},[51,69852,69853],{"class":65},">性别\u003C\u002F",[51,69855,688],{"class":51672},[51,69857,51679],{"class":65},[51,69859,69860,69862,69864,69867,69869],{"class":53,"line":8394},[51,69861,55674],{"class":65},[51,69863,688],{"class":51672},[51,69865,69866],{"class":65},">薪资\u003C\u002F",[51,69868,688],{"class":51672},[51,69870,51679],{"class":65},[51,69872,69873,69875,69877,69880,69882],{"class":53,"line":8399},[51,69874,55674],{"class":65},[51,69876,688],{"class":51672},[51,69878,69879],{"class":65},">就业城市\u003C\u002F",[51,69881,688],{"class":51672},[51,69883,51679],{"class":65},[51,69885,69886,69888,69890,69893,69895],{"class":53,"line":8405},[51,69887,55674],{"class":65},[51,69889,688],{"class":51672},[51,69891,69892],{"class":65},">操作\u003C\u002F",[51,69894,688],{"class":51672},[51,69896,51679],{"class":65},[51,69898,69899,69901,69903],{"class":53,"line":8417},[51,69900,55779],{"class":65},[51,69902,685],{"class":51672},[51,69904,51679],{"class":65},[51,69906,69907,69909,69911],{"class":53,"line":8429},[51,69908,52148],{"class":65},[51,69910,682],{"class":51672},[51,69912,51679],{"class":65},[51,69914,69915,69917,69919],{"class":53,"line":8441},[51,69916,51713],{"class":65},[51,69918,726],{"class":51672},[51,69920,51679],{"class":65},[51,69922,69923],{"class":53,"line":10100},[51,69924,69925],{"class":601},"      \u003C!-- \n",[51,69927,69928],{"class":53,"line":10125},[51,69929,69930],{"class":601},"        \u003Ctr>\n",[51,69932,69933],{"class":53,"line":10148},[51,69934,69935],{"class":601},"          \u003Ctd>1001\u003C\u002Ftd>\n",[51,69937,69938],{"class":53,"line":10172},[51,69939,69940],{"class":601},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[51,69942,69943],{"class":53,"line":10177},[51,69944,69945],{"class":601},"          \u003Ctd>19\u003C\u002Ftd>\n",[51,69947,69948],{"class":53,"line":10182},[51,69949,69950],{"class":601},"          \u003Ctd>男\u003C\u002Ftd>\n",[51,69952,69953],{"class":53,"line":10187},[51,69954,69955],{"class":601},"          \u003Ctd>15000\u003C\u002Ftd>\n",[51,69957,69958],{"class":53,"line":10196},[51,69959,69960],{"class":601},"          \u003Ctd>上海\u003C\u002Ftd>\n",[51,69962,69963],{"class":53,"line":10201},[51,69964,69965],{"class":601},"          \u003Ctd>\n",[51,69967,69968],{"class":53,"line":10207},[51,69969,69970],{"class":601},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[51,69972,69973],{"class":53,"line":10228},[51,69974,69975],{"class":601},"          \u003C\u002Ftd>\n",[51,69977,69978],{"class":53,"line":10234},[51,69979,69980],{"class":601},"        \u003C\u002Ftr> \n",[51,69982,69983],{"class":53,"line":10248},[51,69984,69985],{"class":601},"        -->\n",[51,69987,69988,69990,69992],{"class":53,"line":10254},[51,69989,52148],{"class":65},[51,69991,726],{"class":51672},[51,69993,51679],{"class":65},[51,69995,69996,69998,70000],{"class":53,"line":10281},[51,69997,52789],{"class":65},[51,69999,679],{"class":51672},[51,70001,51679],{"class":65},[51,70003,70004,70006,70008],{"class":53,"line":10290},[51,70005,52516],{"class":65},[51,70007,52185],{"class":51672},[51,70009,51679],{"class":65},[51,70011,70012],{"class":53,"line":10296},[51,70013,60330],{"class":601},[51,70015,70016,70018,70021,70023,70025,70027,70029,70032],{"class":53,"line":10304},[51,70017,11605],{"class":69},[51,70019,70020],{"class":278}," uname",[51,70022,13948],{"class":69},[51,70024,54768],{"class":65},[51,70026,54771],{"class":57},[51,70028,546],{"class":65},[51,70030,70031],{"class":61},"'.uname'",[51,70033,282],{"class":65},[51,70035,70036,70038,70040,70042,70044,70046,70048,70051],{"class":53,"line":10309},[51,70037,11605],{"class":69},[51,70039,16073],{"class":278},[51,70041,13948],{"class":69},[51,70043,54768],{"class":65},[51,70045,54771],{"class":57},[51,70047,546],{"class":65},[51,70049,70050],{"class":61},"'.age'",[51,70052,282],{"class":65},[51,70054,70055,70057,70060,70062,70064,70066,70068,70071],{"class":53,"line":16987},[51,70056,11605],{"class":69},[51,70058,70059],{"class":278}," gender",[51,70061,13948],{"class":69},[51,70063,54768],{"class":65},[51,70065,54771],{"class":57},[51,70067,546],{"class":65},[51,70069,70070],{"class":61},"'.gender'",[51,70072,282],{"class":65},[51,70074,70075,70077,70080,70082,70084,70086,70088,70091],{"class":53,"line":16993},[51,70076,11605],{"class":69},[51,70078,70079],{"class":278}," salary",[51,70081,13948],{"class":69},[51,70083,54768],{"class":65},[51,70085,54771],{"class":57},[51,70087,546],{"class":65},[51,70089,70090],{"class":61},"'.salary'",[51,70092,282],{"class":65},[51,70094,70095,70097,70100,70102,70104,70106,70108,70111],{"class":53,"line":17016},[51,70096,11605],{"class":69},[51,70098,70099],{"class":278}," city",[51,70101,13948],{"class":69},[51,70103,54768],{"class":65},[51,70105,54771],{"class":57},[51,70107,546],{"class":65},[51,70109,70110],{"class":61},"'.city'",[51,70112,282],{"class":65},[51,70114,70115,70117,70120,70122,70124,70126,70128,70131],{"class":53,"line":17022},[51,70116,11605],{"class":69},[51,70118,70119],{"class":278}," tbody",[51,70121,13948],{"class":69},[51,70123,54768],{"class":65},[51,70125,54771],{"class":57},[51,70127,546],{"class":65},[51,70129,70130],{"class":61},"'tbody'",[51,70132,282],{"class":65},[51,70134,70135],{"class":53,"line":17045},[51,70136,206],{"emptyLinePlaceholder":205},[51,70138,70139],{"class":53,"line":17059},[51,70140,70141],{"class":601},"    \u002F\u002F 获取所有带有name属性的元素\n",[51,70143,70144,70146,70149,70151,70153,70155,70157,70160],{"class":53,"line":17079},[51,70145,11605],{"class":69},[51,70147,70148],{"class":278}," items",[51,70150,13948],{"class":69},[51,70152,54768],{"class":65},[51,70154,56053],{"class":57},[51,70156,546],{"class":65},[51,70158,70159],{"class":61},"'[name]'",[51,70161,282],{"class":65},[51,70163,70164],{"class":53,"line":17085},[51,70165,70166],{"class":601},"    \u002F\u002F 声明一个空的数组\n",[51,70168,70169,70171,70173,70175],{"class":53,"line":17096},[51,70170,11605],{"class":69},[51,70172,58067],{"class":278},[51,70174,13948],{"class":69},[51,70176,52210],{"class":65},[51,70178,70179],{"class":53,"line":17119},[51,70180,70181],{"class":601},"    \u002F\u002F 1.录入模块\n",[51,70183,70184],{"class":53,"line":17141},[51,70185,70186],{"class":601},"    \u002F\u002F 1.1这是一个表单提交事件\n",[51,70188,70189,70191,70194,70196,70198,70200,70202,70205],{"class":53,"line":17146},[51,70190,11605],{"class":69},[51,70192,70193],{"class":278}," info",[51,70195,13948],{"class":69},[51,70197,54768],{"class":65},[51,70199,54771],{"class":57},[51,70201,546],{"class":65},[51,70203,70204],{"class":61},"'.info'",[51,70206,282],{"class":65},[51,70208,70209,70212,70214,70216,70219,70221,70223,70225,70227],{"class":53,"line":17152},[51,70210,70211],{"class":65},"    info.",[51,70213,58185],{"class":57},[51,70215,546],{"class":65},[51,70217,70218],{"class":61},"'submit'",[51,70220,12819],{"class":65},[51,70222,54821],{"class":69},[51,70224,2060],{"class":65},[51,70226,617],{"class":248},[51,70228,12826],{"class":65},[51,70230,70231],{"class":53,"line":17166},[51,70232,70233],{"class":601},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[51,70235,70236,70239,70242],{"class":53,"line":17179},[51,70237,70238],{"class":65},"      e.",[51,70240,70241],{"class":57},"preventDefault",[51,70243,2366],{"class":65},[51,70245,70246],{"class":53,"line":17184},[51,70247,60384],{"class":601},[51,70249,70250],{"class":53,"line":17198},[51,70251,206],{"emptyLinePlaceholder":205},[51,70253,70254],{"class":53,"line":17203},[51,70255,70256],{"class":601},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[51,70258,70259],{"class":53,"line":17209},[51,70260,70261],{"class":601},"      \u002F\u002F 先遍历循环\n",[51,70263,70264,70266,70268,70270,70272,70274,70276,70278,70280,70283,70285,70287,70289],{"class":53,"line":17214},[51,70265,52656],{"class":69},[51,70267,2060],{"class":65},[51,70269,52219],{"class":69},[51,70271,9822],{"class":65},[51,70273,70],{"class":69},[51,70275,4479],{"class":278},[51,70277,9829],{"class":65},[51,70279,1452],{"class":69},[51,70281,70282],{"class":65}," items.",[51,70284,52340],{"class":278},[51,70286,3601],{"class":65},[51,70288,2682],{"class":69},[51,70290,12826],{"class":65},[51,70292,70293,70295,70298,70300,70303],{"class":53,"line":17228},[51,70294,369],{"class":69},[51,70296,70297],{"class":65}," (items[i].value ",[51,70299,54858],{"class":69},[51,70301,70302],{"class":61}," ''",[51,70304,12826],{"class":65},[51,70306,70307,70310,70313,70315,70318],{"class":53,"line":17233},[51,70308,70309],{"class":69},"          return",[51,70311,70312],{"class":57}," alert",[51,70314,546],{"class":65},[51,70316,70317],{"class":61},"'输入内容不能为空'",[51,70319,282],{"class":65},[51,70321,70322],{"class":53,"line":17238},[51,70323,2917],{"class":65},[51,70325,70326],{"class":53,"line":17252},[51,70327,52770],{"class":65},[51,70329,70330],{"class":53,"line":17264},[51,70331,206],{"emptyLinePlaceholder":205},[51,70333,70334],{"class":53,"line":17269},[51,70335,70336],{"class":601},"      \u002F\u002F 创建新的对象\n",[51,70338,70339,70341,70344,70346],{"class":53,"line":17282},[51,70340,58600],{"class":69},[51,70342,70343],{"class":278}," obj",[51,70345,13948],{"class":69},[51,70347,15956],{"class":65},[51,70349,70350,70353,70355,70357,70359],{"class":53,"line":17287},[51,70351,70352],{"class":65},"        stuID: arr.",[51,70354,52340],{"class":278},[51,70356,45938],{"class":69},[51,70358,25500],{"class":278},[51,70360,31843],{"class":65},[51,70362,70363],{"class":53,"line":17292},[51,70364,70365],{"class":65},"        uname: uname.value,\n",[51,70367,70368],{"class":53,"line":17297},[51,70369,70370],{"class":65},"        age: age.value,\n",[51,70372,70373],{"class":53,"line":17310},[51,70374,70375],{"class":65},"        gender: gender.value,\n",[51,70377,70378],{"class":53,"line":17315},[51,70379,70380],{"class":65},"        salary: salary.value,\n",[51,70382,70383],{"class":53,"line":33008},[51,70384,70385],{"class":65},"        city: city.value\n",[51,70387,70388],{"class":53,"line":33014},[51,70389,52770],{"class":65},[51,70391,70392],{"class":53,"line":33020},[51,70393,70394],{"class":601},"      \u002F\u002F console.log(obj);\n",[51,70396,70397],{"class":53,"line":33026},[51,70398,70399],{"class":601},"      \u002F\u002F 追加到数组里面\n",[51,70401,70402,70404,70406],{"class":53,"line":33032},[51,70403,58379],{"class":65},[51,70405,52256],{"class":57},[51,70407,70408],{"class":65},"(obj)\n",[51,70410,70411],{"class":53,"line":33043},[51,70412,70413],{"class":601},"      \u002F\u002F console.log(arr);\n",[51,70415,70416],{"class":53,"line":33049},[51,70417,70418],{"class":601},"      \u002F\u002F 清空表单  reset重置表单\n",[51,70420,70421,70424,70426,70429],{"class":53,"line":33069},[51,70422,70423],{"class":278},"      this",[51,70425,1100],{"class":65},[51,70427,70428],{"class":57},"reset",[51,70430,2366],{"class":65},[51,70432,70433],{"class":53,"line":33075},[51,70434,70435],{"class":601},"      \u002F\u002F 调用渲染函数\n",[51,70437,70438,70441],{"class":53,"line":33086},[51,70439,70440],{"class":57},"      render",[51,70442,2366],{"class":65},[51,70444,70445],{"class":53,"line":33092},[51,70446,33836],{"class":65},[51,70448,70449],{"class":53,"line":33098},[51,70450,70451],{"class":601},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[51,70453,70454,70457,70460],{"class":53,"line":33104},[51,70455,70456],{"class":69},"    function",[51,70458,70459],{"class":57}," render",[51,70461,11237],{"class":65},[51,70463,70464],{"class":53,"line":33110},[51,70465,70466],{"class":601},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[51,70468,70469,70472,70474],{"class":53,"line":33116},[51,70470,70471],{"class":65},"      tbody.innerHTML ",[51,70473,70],{"class":69},[51,70475,70476],{"class":61}," ''\n",[51,70478,70479],{"class":53,"line":33122},[51,70480,70481],{"class":601},"      \u002F\u002F 遍历数组\n",[51,70483,70484,70486,70488,70490,70492,70494,70496,70498,70500,70502,70504,70506,70508],{"class":53,"line":33128},[51,70485,52656],{"class":69},[51,70487,2060],{"class":65},[51,70489,52219],{"class":69},[51,70491,9822],{"class":65},[51,70493,70],{"class":69},[51,70495,4479],{"class":278},[51,70497,9829],{"class":65},[51,70499,1452],{"class":69},[51,70501,52337],{"class":65},[51,70503,52340],{"class":278},[51,70505,3601],{"class":65},[51,70507,2682],{"class":69},[51,70509,12826],{"class":65},[51,70511,70512,70514,70517,70519,70521,70524,70526,70529],{"class":53,"line":33148},[51,70513,61642],{"class":69},[51,70515,70516],{"class":278}," tr",[51,70518,13948],{"class":69},[51,70520,54768],{"class":65},[51,70522,70523],{"class":57},"createElement",[51,70525,546],{"class":65},[51,70527,70528],{"class":61},"'tr'",[51,70530,282],{"class":65},[51,70532,70533,70536,70538],{"class":53,"line":33154},[51,70534,70535],{"class":65},"        tr.innerHTML ",[51,70537,70],{"class":69},[51,70539,70540],{"class":61}," `\n",[51,70542,70543,70546,70548,70550,70552,70555,70558],{"class":53,"line":33170},[51,70544,70545],{"class":61},"        \u003Ctd>${",[51,70547,4266],{"class":65},[51,70549,1432],{"class":61},[51,70551,983],{"class":65},[51,70553,70554],{"class":61},"].",[51,70556,70557],{"class":65},"stuID",[51,70559,70560],{"class":61},"}\u003C\u002Ftd>\n",[51,70562,70563,70566,70568,70570,70572,70574,70577],{"class":53,"line":33176},[51,70564,70565],{"class":61},"          \u003Ctd>${",[51,70567,4266],{"class":65},[51,70569,1432],{"class":61},[51,70571,983],{"class":65},[51,70573,70554],{"class":61},[51,70575,70576],{"class":65},"uname",[51,70578,70560],{"class":61},[51,70580,70581,70583,70585,70587,70589,70591,70594],{"class":53,"line":33190},[51,70582,70565],{"class":61},[51,70584,4266],{"class":65},[51,70586,1432],{"class":61},[51,70588,983],{"class":65},[51,70590,70554],{"class":61},[51,70592,70593],{"class":65},"age",[51,70595,70560],{"class":61},[51,70597,70598,70600,70602,70604,70606,70608,70611],{"class":53,"line":33196},[51,70599,70565],{"class":61},[51,70601,4266],{"class":65},[51,70603,1432],{"class":61},[51,70605,983],{"class":65},[51,70607,70554],{"class":61},[51,70609,70610],{"class":65},"gender",[51,70612,70560],{"class":61},[51,70614,70615,70617,70619,70621,70623,70625,70628],{"class":53,"line":33211},[51,70616,70565],{"class":61},[51,70618,4266],{"class":65},[51,70620,1432],{"class":61},[51,70622,983],{"class":65},[51,70624,70554],{"class":61},[51,70626,70627],{"class":65},"salary",[51,70629,70560],{"class":61},[51,70631,70632,70634,70636,70638,70640,70642,70645],{"class":53,"line":33217},[51,70633,70565],{"class":61},[51,70635,4266],{"class":65},[51,70637,1432],{"class":61},[51,70639,983],{"class":65},[51,70641,70554],{"class":61},[51,70643,70644],{"class":65},"city",[51,70646,70560],{"class":61},[51,70648,70649],{"class":53,"line":33226},[51,70650,69965],{"class":61},[51,70652,70653,70656,70658],{"class":53,"line":33232},[51,70654,70655],{"class":61},"            \u003Ca href=\"javascript:\" data-id=${",[51,70657,983],{"class":65},[51,70659,70660],{"class":61},"}>删除\u003C\u002Fa>\n",[51,70662,70663],{"class":53,"line":33241},[51,70664,70665],{"class":61},"          \u003C\u002Ftd> \n",[51,70667,70668],{"class":53,"line":33247},[51,70669,70670],{"class":61},"          `\n",[51,70672,70673],{"class":53,"line":33253},[51,70674,70675],{"class":601},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[51,70677,70678,70681,70684],{"class":53,"line":33262},[51,70679,70680],{"class":65},"        tbody.",[51,70682,70683],{"class":57},"appendChild",[51,70685,70686],{"class":65},"(tr)\n",[51,70688,70689],{"class":53,"line":33268},[51,70690,52770],{"class":65},[51,70692,70693],{"class":53,"line":33279},[51,70694,2577],{"class":65},[51,70696,70697],{"class":53,"line":33285},[51,70698,206],{"emptyLinePlaceholder":205},[51,70700,70701],{"class":53,"line":33304},[51,70702,70703],{"class":601},"    \u002F\u002F 3.删除委托\n",[51,70705,70706],{"class":53,"line":33310},[51,70707,70708],{"class":601},"    \u002F\u002F 3.1 事件委托 tbody\n",[51,70710,70711,70714,70716,70718,70720,70722,70724,70726,70728],{"class":53,"line":33321},[51,70712,70713],{"class":65},"    tbody.",[51,70715,58185],{"class":57},[51,70717,546],{"class":65},[51,70719,58190],{"class":61},[51,70721,12819],{"class":65},[51,70723,54821],{"class":69},[51,70725,2060],{"class":65},[51,70727,617],{"class":248},[51,70729,12826],{"class":65},[51,70731,70732,70734,70736,70738,70740],{"class":53,"line":33327},[51,70733,54852],{"class":69},[51,70735,67406],{"class":65},[51,70737,54858],{"class":69},[51,70739,68628],{"class":61},[51,70741,12826],{"class":65},[51,70743,70744],{"class":53,"line":33347},[51,70745,70746],{"class":601},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[51,70748,70749],{"class":53,"line":33363},[51,70750,70751],{"class":601},"        \u002F\u002F console.log(e.target.dataset.id);\n",[51,70753,70754],{"class":53,"line":33369},[51,70755,70756],{"class":601},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[51,70758,70759,70762,70764,70767,70769],{"class":53,"line":33383},[51,70760,70761],{"class":65},"        arr.",[51,70763,58382],{"class":57},[51,70765,70766],{"class":65},"(e.target.dataset.id, ",[51,70768,759],{"class":278},[51,70770,282],{"class":65},[51,70772,70773],{"class":53,"line":33389},[51,70774,70775],{"class":601},"        \u002F\u002F 重新渲染一次\n",[51,70777,70778,70781],{"class":53,"line":33395},[51,70779,70780],{"class":57},"        render",[51,70782,2366],{"class":65},[51,70784,70785],{"class":53,"line":33406},[51,70786,52770],{"class":65},[51,70788,70789],{"class":53,"line":33412},[51,70790,33836],{"class":65},[51,70792,70793,70795,70797],{"class":53,"line":33418},[51,70794,52789],{"class":65},[51,70796,52185],{"class":51672},[51,70798,51679],{"class":65},[51,70800,70801],{"class":53,"line":33428},[51,70802,206],{"emptyLinePlaceholder":205},[51,70804,70805,70807,70809],{"class":53,"line":33434},[51,70806,52157],{"class":65},[51,70808,52172],{"class":51672},[51,70810,51679],{"class":65},[51,70812,70813],{"class":53,"line":33445},[51,70814,206],{"emptyLinePlaceholder":205},[51,70816,70817,70819,70821],{"class":53,"line":33451},[51,70818,52157],{"class":65},[51,70820,51007],{"class":51672},[51,70822,51679],{"class":65},[10,70824,70825],{},"样式：",[41,70827,70831],{"className":70828,"code":70829,"language":70830,"meta":46,"style":46},"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",[48,70832,70833,70838,70848,70857,70861,70865,70870,70880,70885,70889,70894,70904,70909,70918,70922,70926,70931,70936,70946,70956,70961,70965,70970,70979,70989,70994,71004,71014,71018,71023,71031,71035,71040,71045,71050,71058,71067,71071,71076,71085,71089,71094,71103,71107,71112,71121,71130,71138,71142,71147,71156,71166,71175,71185,71191,71200,71210,71220,71224,71229,71238,71246,71256,71264,71273,71282,71292,71300,71304,71309,71318],{"__ignoreMap":46},[51,70834,70835],{"class":53,"line":54},[51,70836,70837],{"class":65},"* {\n",[51,70839,70840,70843,70845],{"class":53,"line":185},[51,70841,70842],{"class":51672},"  margin",[51,70844,51809],{"class":65},[51,70846,70847],{"class":61},"0;\n",[51,70849,70850,70853,70855],{"class":53,"line":202},[51,70851,70852],{"class":61},"  padding",[51,70854,51809],{"class":65},[51,70856,70847],{"class":61},[51,70858,70859],{"class":53,"line":209},[51,70860,1974],{"class":65},[51,70862,70863],{"class":53,"line":223},[51,70864,206],{"emptyLinePlaceholder":205},[51,70866,70867],{"class":53,"line":237},[51,70868,70869],{"class":61},"a {\n",[51,70871,70872,70875,70877],{"class":53,"line":242},[51,70873,70874],{"class":51672},"  text-decoration",[51,70876,51809],{"class":65},[51,70878,70879],{"class":61},"none;\n",[51,70881,70882],{"class":53,"line":257},[51,70883,70884],{"class":61},"  color:#721c24;\n",[51,70886,70887],{"class":53,"line":262},[51,70888,1974],{"class":65},[51,70890,70891],{"class":53,"line":285},[51,70892,70893],{"class":61},"h1 {\n",[51,70895,70896,70899,70901],{"class":53,"line":296},[51,70897,70898],{"class":51672},"  text-align",[51,70900,51809],{"class":65},[51,70902,70903],{"class":61},"center;\n",[51,70905,70906],{"class":53,"line":307},[51,70907,70908],{"class":61},"  color:#333;\n",[51,70910,70911,70913,70915],{"class":53,"line":324},[51,70912,70842],{"class":51672},[51,70914,51809],{"class":65},[51,70916,70917],{"class":61},"20px 0;\n",[51,70919,70920],{"class":53,"line":329},[51,70921,3062],{"class":65},[51,70923,70924],{"class":53,"line":334},[51,70925,1974],{"class":65},[51,70927,70928],{"class":53,"line":340},[51,70929,70930],{"class":61},"table {\n",[51,70932,70933],{"class":53,"line":345},[51,70934,70935],{"class":61},"  margin:0 auto;\n",[51,70937,70938,70941,70943],{"class":53,"line":357},[51,70939,70940],{"class":51672},"  width",[51,70942,51809],{"class":65},[51,70944,70945],{"class":61},"800px;\n",[51,70947,70948,70951,70953],{"class":53,"line":366},[51,70949,70950],{"class":51672},"  border-collapse",[51,70952,51809],{"class":65},[51,70954,70955],{"class":61},"collapse;\n",[51,70957,70958],{"class":53,"line":383},[51,70959,70960],{"class":61},"  color:#004085;\n",[51,70962,70963],{"class":53,"line":392},[51,70964,1974],{"class":65},[51,70966,70967],{"class":53,"line":403},[51,70968,70969],{"class":61},"th {\n",[51,70971,70972,70974,70976],{"class":53,"line":409},[51,70973,70852],{"class":51672},[51,70975,51809],{"class":65},[51,70977,70978],{"class":61},"10px;\n",[51,70980,70981,70984,70986],{"class":53,"line":414},[51,70982,70983],{"class":51672},"  background",[51,70985,51809],{"class":65},[51,70987,70988],{"class":601},"#cfe5ff;\n",[51,70990,70991],{"class":53,"line":433},[51,70992,70993],{"class":65},"  \n",[51,70995,70996,70999,71001],{"class":53,"line":439},[51,70997,70998],{"class":51672},"  font-size",[51,71000,51809],{"class":65},[51,71002,71003],{"class":61},"20px;\n",[51,71005,71006,71009,71011],{"class":53,"line":444},[51,71007,71008],{"class":51672},"  font-weight",[51,71010,51809],{"class":65},[51,71012,71013],{"class":61},"400;\n",[51,71015,71016],{"class":53,"line":453},[51,71017,1974],{"class":65},[51,71019,71020],{"class":53,"line":2174},[51,71021,71022],{"class":61},"td,th {\n",[51,71024,71025,71028],{"class":53,"line":2965},[51,71026,71027],{"class":61},"  border:1px solid",[51,71029,71030],{"class":601}," #b8daff;\n",[51,71032,71033],{"class":53,"line":2979},[51,71034,1974],{"class":65},[51,71036,71037],{"class":53,"line":2987},[51,71038,71039],{"class":61},"td {\n",[51,71041,71042],{"class":53,"line":2992},[51,71043,71044],{"class":61},"  padding:10px;\n",[51,71046,71047],{"class":53,"line":2998},[51,71048,71049],{"class":61},"  color:#666;\n",[51,71051,71052,71054,71056],{"class":53,"line":3004},[51,71053,70898],{"class":51672},[51,71055,51809],{"class":65},[51,71057,70903],{"class":61},[51,71059,71060,71062,71064],{"class":53,"line":3009},[51,71061,70998],{"class":51672},[51,71063,51809],{"class":65},[51,71065,71066],{"class":61},"16px;\n",[51,71068,71069],{"class":53,"line":8332},[51,71070,1974],{"class":65},[51,71072,71073],{"class":53,"line":8356},[51,71074,71075],{"class":61},"tbody tr {\n",[51,71077,71078,71080,71082],{"class":53,"line":8361},[51,71079,70983],{"class":51672},[51,71081,51809],{"class":65},[51,71083,71084],{"class":601},"#fff;\n",[51,71086,71087],{"class":53,"line":8367},[51,71088,1974],{"class":65},[51,71090,71091],{"class":53,"line":8394},[51,71092,71093],{"class":61},"tbody tr:hover {\n",[51,71095,71096,71098,71100],{"class":53,"line":8399},[51,71097,70983],{"class":51672},[51,71099,51809],{"class":65},[51,71101,71102],{"class":601},"#e1ecf8;\n",[51,71104,71105],{"class":53,"line":8405},[51,71106,1974],{"class":65},[51,71108,71109],{"class":53,"line":8417},[51,71110,71111],{"class":61},".info {\n",[51,71113,71114,71116,71118],{"class":53,"line":8429},[51,71115,70940],{"class":51672},[51,71117,51809],{"class":65},[51,71119,71120],{"class":61},"900px;\n",[51,71122,71123,71125,71127],{"class":53,"line":8441},[51,71124,70842],{"class":51672},[51,71126,51809],{"class":65},[51,71128,71129],{"class":61},"50px auto;\n",[51,71131,71132,71134,71136],{"class":53,"line":10100},[51,71133,70898],{"class":51672},[51,71135,51809],{"class":65},[51,71137,70903],{"class":61},[51,71139,71140],{"class":53,"line":10125},[51,71141,1974],{"class":65},[51,71143,71144],{"class":53,"line":10148},[51,71145,71146],{"class":61},".info  input, .info select {\n",[51,71148,71149,71151,71153],{"class":53,"line":10172},[51,71150,70940],{"class":51672},[51,71152,51809],{"class":65},[51,71154,71155],{"class":61},"80px;\n",[51,71157,71158,71161,71163],{"class":53,"line":10177},[51,71159,71160],{"class":51672},"  height",[51,71162,51809],{"class":65},[51,71164,71165],{"class":61},"27px;\n",[51,71167,71168,71171,71173],{"class":53,"line":10182},[51,71169,71170],{"class":51672},"  outline",[51,71172,51809],{"class":65},[51,71174,70879],{"class":61},[51,71176,71177,71180,71182],{"class":53,"line":10187},[51,71178,71179],{"class":51672},"  border-radius",[51,71181,51809],{"class":65},[51,71183,71184],{"class":61},"5px;\n",[51,71186,71187,71189],{"class":53,"line":10196},[51,71188,71027],{"class":61},[51,71190,71030],{"class":601},[51,71192,71193,71196,71198],{"class":53,"line":10201},[51,71194,71195],{"class":51672},"  padding-left",[51,71197,51809],{"class":65},[51,71199,71184],{"class":61},[51,71201,71202,71205,71207],{"class":53,"line":10207},[51,71203,71204],{"class":51672},"  box-sizing",[51,71206,51809],{"class":65},[51,71208,71209],{"class":61},"border-box;\n",[51,71211,71212,71215,71217],{"class":53,"line":10228},[51,71213,71214],{"class":51672},"  margin-right",[51,71216,51809],{"class":65},[51,71218,71219],{"class":61},"15px;\n",[51,71221,71222],{"class":53,"line":10234},[51,71223,1974],{"class":65},[51,71225,71226],{"class":53,"line":10248},[51,71227,71228],{"class":61},".info button {\n",[51,71230,71231,71233,71235],{"class":53,"line":10254},[51,71232,70940],{"class":51672},[51,71234,51809],{"class":65},[51,71236,71237],{"class":61},"60px;\n",[51,71239,71240,71242,71244],{"class":53,"line":10281},[51,71241,71160],{"class":51672},[51,71243,51809],{"class":65},[51,71245,71165],{"class":61},[51,71247,71248,71251,71253],{"class":53,"line":10290},[51,71249,71250],{"class":51672},"  background-color",[51,71252,51809],{"class":65},[51,71254,71255],{"class":601},"#004085;\n",[51,71257,71258,71260,71262],{"class":53,"line":10296},[51,71259,71170],{"class":51672},[51,71261,51809],{"class":65},[51,71263,70879],{"class":61},[51,71265,71266,71269,71271],{"class":53,"line":10304},[51,71267,71268],{"class":51672},"  border",[51,71270,51809],{"class":65},[51,71272,70847],{"class":61},[51,71274,71275,71278,71280],{"class":53,"line":10309},[51,71276,71277],{"class":51672},"  color",[51,71279,51809],{"class":65},[51,71281,71084],{"class":601},[51,71283,71284,71287,71289],{"class":53,"line":16987},[51,71285,71286],{"class":51672},"  cursor",[51,71288,51809],{"class":65},[51,71290,71291],{"class":61},"pointer;\n",[51,71293,71294,71296,71298],{"class":53,"line":16993},[51,71295,71179],{"class":51672},[51,71297,51809],{"class":65},[51,71299,71184],{"class":61},[51,71301,71302],{"class":53,"line":17016},[51,71303,1974],{"class":65},[51,71305,71306],{"class":53,"line":17022},[51,71307,71308],{"class":61},".info .age {\n",[51,71310,71311,71313,71315],{"class":53,"line":17045},[51,71312,70940],{"class":51672},[51,71314,51809],{"class":65},[51,71316,71317],{"class":61},"50px;\n",[51,71319,71320],{"class":53,"line":17059},[51,71321,1974],{"class":65},[10,71323,71324],{},"思路：",[10,71326,71327],{},[460,71328],{"alt":46,"src":71329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[10,71331,71332],{},[460,71333],{"alt":46,"src":71334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[10,71336,71337],{},[460,71338],{"alt":46,"src":71339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[513,71341,71343],{"id":71342},"_3315-重绘回流","3.3.15 重绘回流",[10,71345,71346],{},[460,71347],{"alt":46,"src":71348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[10,71350,71351],{},[460,71352],{"alt":46,"src":71353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[10,71355,71356],{},[460,71357],{"alt":46,"src":71358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[486,71360,71362],{"id":71361},"_34-bom","3.4 BOM",[10,71364,71365],{},[460,71366],{"alt":46,"src":71367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[10,71369,71370],{},"平时写的document省略了window而已，实际上是window.document",[10,71372,71373],{},"函数也是这样，调用的时候实际为window.fn()",[10,71375,71376],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[10,71378,71379],{},"window大部分情况下可以省略",[513,71381,71383],{"id":71382},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[10,71385,71386],{},"只执行一次",[10,71388,71389],{},[460,71390],{"alt":46,"src":71391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[10,71393,71394],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[10,71396,71397],{},[460,71398],{"alt":46,"src":71399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[513,71401,71403],{"id":71402},"_342-js执行机制","3.4.2 JS执行机制",[10,71405,71406],{},[460,71407],{"alt":46,"src":71408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[10,71410,71411],{},"两个的结果都是1111 3333 2222",[10,71413,71414],{},[460,71415],{"alt":46,"src":71416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[10,71418,71419],{},[460,71420],{"alt":46,"src":71421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[10,71423,71424],{},[460,71425],{"alt":46,"src":71426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[10,71428,71429],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[10,71431,71432],{},"工作流程：",[10,71434,71435],{},[460,71436],{"alt":46,"src":71437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[10,71439,71440],{},[460,71441],{"alt":46,"src":71442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[10,71444,71445],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[10,71447,71448],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[513,71450,71452],{"id":71451},"_343-location对象","3.4.3 location对象",[10,71454,71455],{},"location对象属于window这个全局对象下的，可以 省略window",[10,71457,71458],{},[460,71459],{"alt":46,"src":71460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[10,71462,71463],{},"href可以跳转页面",[19,71465,71466],{},[22,71467,71468],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[10,71470,71471],{},"search得到提交信息之后网站后边的地址",[10,71473,71474],{},[460,71475],{"alt":46,"src":71476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[10,71478,71479],{},[460,71480],{"alt":46,"src":71481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[19,71483,71484],{"start":185},[22,71485,71486],{},"hash:这个获取单页面应用#后边的地址",[10,71488,71489],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[10,71491,71492],{},[460,71493],{"alt":46,"src":71494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[41,71496,71498],{"className":53439,"code":71497,"language":53441,"meta":46,"style":46},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[48,71499,71500,71520,71540],{"__ignoreMap":46},[51,71501,71502,71504,71506,71508,71510,71513,71516,71518],{"class":53,"line":54},[51,71503,52516],{"class":65},[51,71505,780],{"class":51672},[51,71507,61429],{"class":57},[51,71509,70],{"class":65},[51,71511,71512],{"class":61},"\"#\u002Fmy\"",[51,71514,71515],{"class":65},">我的\u003C\u002F",[51,71517,780],{"class":51672},[51,71519,51679],{"class":65},[51,71521,71522,71524,71526,71528,71530,71533,71536,71538],{"class":53,"line":185},[51,71523,52516],{"class":65},[51,71525,780],{"class":51672},[51,71527,61429],{"class":57},[51,71529,70],{"class":65},[51,71531,71532],{"class":61},"\"#\u002Ffriend\"",[51,71534,71535],{"class":65},">关注\u003C\u002F",[51,71537,780],{"class":51672},[51,71539,51679],{"class":65},[51,71541,71542,71544,71546,71548,71550,71553,71556,71558],{"class":53,"line":202},[51,71543,52516],{"class":65},[51,71545,780],{"class":51672},[51,71547,61429],{"class":57},[51,71549,70],{"class":65},[51,71551,71552],{"class":61},"\"#\u002Fdownload\"",[51,71554,71555],{"class":65},">下载\u003C\u002F",[51,71557,780],{"class":51672},[51,71559,51679],{"class":65},[10,71561,71562],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[19,71564,71565],{"start":202},[22,71566,71567,71568,71570,71571,71573],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54088,71569],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54088,71572],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[513,71575,71577],{"id":71576},"_345-navigator对象","3.4.5 navigator对象",[10,71579,71580],{},[460,71581],{"alt":46,"src":71582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[41,71584,71588],{"className":71585,"code":71586,"language":71587,"meta":46,"style":46},"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",[48,71589,71590,71595,71606,71618,71623,71674,71715,71720,71733,71745,71750],{"__ignoreMap":46},[51,71591,71592],{"class":53,"line":54},[51,71593,71594],{"class":601},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[51,71596,71597,71599,71601,71603],{"class":53,"line":185},[51,71598,768],{"class":69},[51,71600,546],{"class":65},[51,71602,54821],{"class":69},[51,71604,71605],{"class":65}," () { \n",[51,71607,71608,71610,71613,71615],{"class":53,"line":202},[51,71609,7176],{"class":69},[51,71611,71612],{"class":278}," userAgent",[51,71614,13948],{"class":69},[51,71616,71617],{"class":65}," navigator.userAgent \n",[51,71619,71620],{"class":53,"line":209},[51,71621,71622],{"class":601},"\u002F\u002F 验证是否为Android或iPhone \n",[51,71624,71625,71627,71630,71632,71635,71638,71640,71642,71645,71647,71650,71654,71656,71658,71660,71663,71665,71667,71669,71671],{"class":53,"line":223},[51,71626,7176],{"class":69},[51,71628,71629],{"class":278}," android",[51,71631,13948],{"class":69},[51,71633,71634],{"class":65}," userAgent.",[51,71636,71637],{"class":57},"match",[51,71639,546],{"class":65},[51,71641,1126],{"class":61},[51,71643,71644],{"class":48349},"(Android);",[51,71646,1528],{"class":69},[51,71648,71649],{"class":278},"[\\s",[51,71651,71653],{"class":71652},"snhLl","\\\u002F",[51,71655,1482],{"class":278},[51,71657,1023],{"class":69},[51,71659,546],{"class":48349},[51,71661,71662],{"class":278},"[\\d.]",[51,71664,1023],{"class":69},[51,71666,971],{"class":48349},[51,71668,1528],{"class":69},[51,71670,1126],{"class":61},[51,71672,71673],{"class":65},") \n",[51,71675,71676,71678,71681,71683,71685,71687,71689,71691,71694,71697,71700,71702,71704,71707,71709,71711,71713],{"class":53,"line":237},[51,71677,7176],{"class":69},[51,71679,71680],{"class":278}," iphone",[51,71682,13948],{"class":69},[51,71684,71634],{"class":65},[51,71686,71637],{"class":57},[51,71688,546],{"class":65},[51,71690,1126],{"class":61},[51,71692,71693],{"class":48349},"(iPhone",[51,71695,71696],{"class":278},"\\s",[51,71698,71699],{"class":48349},"OS)",[51,71701,71696],{"class":278},[51,71703,546],{"class":48349},[51,71705,71706],{"class":278},"[\\d_]",[51,71708,1023],{"class":69},[51,71710,971],{"class":48349},[51,71712,1126],{"class":61},[51,71714,71673],{"class":65},[51,71716,71717],{"class":53,"line":242},[51,71718,71719],{"class":601},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[51,71721,71722,71724,71727,71730],{"class":53,"line":257},[51,71723,1940],{"class":69},[51,71725,71726],{"class":65}," (android ",[51,71728,71729],{"class":69},"||",[51,71731,71732],{"class":65}," iphone) { \n",[51,71734,71735,71738,71740,71743],{"class":53,"line":262},[51,71736,71737],{"class":65},"location.href ",[51,71739,70],{"class":69},[51,71741,71742],{"class":61}," 'http:\u002F\u002Fm.itcast.cn'",[51,71744,3062],{"class":65},[51,71746,71747],{"class":53,"line":285},[51,71748,71749],{"class":65},"} \n",[51,71751,71752],{"class":53,"line":296},[51,71753,71754],{"class":65},"})()\n",[513,71756,71758],{"id":71757},"_346-histroy对象","3.4.6 histroy对象",[10,71760,71761],{},[460,71762],{"alt":46,"src":71763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[10,71765,71766],{},"浏览器地址的前进与后退!!!",[10,71768,71769],{},"history.back() 等效于 history.go(-1)",[10,71771,71772],{},"history.forward() 等效于 history.go(1)",[486,71774,71776],{"id":71775},"_35-本地存储","3.5 本地存储",[19,71778,71779,71782,71785],{},[22,71780,71781],{},"数据存储在用户浏览器中",[22,71783,71784],{},"设置、读取方便、甚至页面刷新不丢失数据",[22,71786,71787],{},"容量较大，sessionStorage和localStorage约 5M 左右",[513,71789,71791],{"id":71790},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[10,71793,71794],{},"只能存储字符串",[10,71796,71797],{},[460,71798],{"alt":46,"src":71799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[10,71801,71802],{},[460,71803],{"alt":46,"src":71804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[10,71806,71807],{},"键值对要加引号,不然就会当变量来看了",[10,71809,71810],{},"localStorage.setItem('uname', 'pink')",[10,71812,71813],{},"刷新之后信息不再丢失",[10,71815,71816],{},"操作key,value会跟着变",[10,71818,71819],{},"删除只删除键就可以,即名字",[10,71821,71810],{},[10,71823,71824],{},"改:",[10,71826,71827],{},"localStorage.setItem('uname','red')",[10,71829,71830],{},"有这个键就是改,没有这个键就是改",[10,71832,71833],{},[460,71834],{"alt":46,"src":71835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[10,71837,71838],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[10,71840,71841],{},[460,71842],{"alt":46,"src":71843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[10,71845,71846],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[513,71848,71850],{"id":71849},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[10,71852,71853],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[10,71855,71856],{},"特性:",[19,71858,71859,71862,71865,71868],{},[22,71860,71861],{},"生命周期为关闭浏览器窗口",[22,71863,71864],{},"在同一个窗口(页面)下数据可以共享",[22,71866,71867],{},"以键值对的形式存储使用",[22,71869,71870],{},"用法跟localStorage 基本相同",[513,71872,71874],{"id":71873},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[10,71876,71877],{},"本地只能存储字符串,无法直接存储复杂数据类型",[41,71879,71881],{"className":53439,"code":71880,"language":53441,"meta":46,"style":46},"\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",[48,71882,71883,71891,71896,71901,71906,71911,71915,71920,71925],{"__ignoreMap":46},[51,71884,71885,71887,71889],{"class":53,"line":54},[51,71886,1452],{"class":65},[51,71888,52185],{"class":51672},[51,71890,51679],{"class":65},[51,71892,71893],{"class":53,"line":185},[51,71894,71895],{"class":65},"    const obj = {\n",[51,71897,71898],{"class":53,"line":202},[51,71899,71900],{"class":65},"      uname: 'pink老师',\n",[51,71902,71903],{"class":53,"line":209},[51,71904,71905],{"class":65},"      age: 18,\n",[51,71907,71908],{"class":53,"line":223},[51,71909,71910],{"class":65},"      gender: '女'\n",[51,71912,71913],{"class":53,"line":237},[51,71914,2577],{"class":65},[51,71916,71917],{"class":53,"line":242},[51,71918,71919],{"class":65},"    \u002F\u002F 存储复杂数据类型\n",[51,71921,71922],{"class":53,"line":257},[51,71923,71924],{"class":65},"    localStorage.setItem('obj', obj)\n",[51,71926,71927,71929,71931],{"class":53,"line":262},[51,71928,52789],{"class":65},[51,71930,52185],{"class":51672},[51,71932,51679],{"class":65},[10,71934,71935],{},[460,71936],{"alt":46,"src":71937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[10,71939,71940],{},"如果获取一下数据:",[10,71942,71943],{},"log(localStorage.getItem('obj'))",[10,71945,71946],{},[460,71947],{"alt":46,"src":71948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[10,71950,71951],{},"发现直接存对象是使用不了的!!!",[22381,71953,71955],{"id":71954},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[10,71957,71958],{},[460,71959],{"alt":46,"src":71960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[41,71962,71964],{"className":51005,"code":71963,"language":51007,"meta":46,"style":46},"\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",[48,71965,71966,71974,71984,71994,72003,72011,72015,72019,72045,72064,72072,72076,72081,72086],{"__ignoreMap":46},[51,71967,71968,71970,71972],{"class":53,"line":54},[51,71969,1452],{"class":65},[51,71971,52185],{"class":51672},[51,71973,51679],{"class":65},[51,71975,71976,71978,71980,71982],{"class":53,"line":185},[51,71977,11605],{"class":69},[51,71979,70343],{"class":278},[51,71981,13948],{"class":69},[51,71983,15956],{"class":65},[51,71985,71986,71989,71992],{"class":53,"line":202},[51,71987,71988],{"class":65},"      uname: ",[51,71990,71991],{"class":61},"'pink老师'",[51,71993,31843],{"class":65},[51,71995,71996,71999,72001],{"class":53,"line":209},[51,71997,71998],{"class":65},"      age: ",[51,72000,1192],{"class":278},[51,72002,31843],{"class":65},[51,72004,72005,72008],{"class":53,"line":223},[51,72006,72007],{"class":65},"      gender: ",[51,72009,72010],{"class":61},"'女'\n",[51,72012,72013],{"class":53,"line":237},[51,72014,2577],{"class":65},[51,72016,72017],{"class":53,"line":242},[51,72018,71919],{"class":601},[51,72020,72021,72024,72027,72029,72032,72034,72037,72039,72042],{"class":53,"line":257},[51,72022,72023],{"class":65},"  localStorage.",[51,72025,72026],{"class":57},"setItem",[51,72028,546],{"class":65},[51,72030,72031],{"class":61},"'obj'",[51,72033,12819],{"class":65},[51,72035,72036],{"class":278},"JSON",[51,72038,1100],{"class":65},[51,72040,72041],{"class":57},"stringify",[51,72043,72044],{"class":65},"(obj))\n",[51,72046,72047,72050,72052,72055,72058,72060,72062],{"class":53,"line":262},[51,72048,72049],{"class":65},"  console.",[51,72051,58619],{"class":57},[51,72053,72054],{"class":65},"(localStorage.",[51,72056,72057],{"class":57},"getItem",[51,72059,546],{"class":65},[51,72061,72031],{"class":61},[51,72063,30876],{"class":65},[51,72065,72066,72068,72070],{"class":53,"line":285},[51,72067,52789],{"class":65},[51,72069,52185],{"class":51672},[51,72071,51679],{"class":65},[51,72073,72074],{"class":53,"line":296},[51,72075,70993],{"class":65},[51,72077,72078],{"class":53,"line":307},[51,72079,72080],{"class":65},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[51,72082,72083],{"class":53,"line":324},[51,72084,72085],{"class":65},"  类型是字符串的\n",[51,72087,72088],{"class":53,"line":329},[51,72089,72090],{"class":65},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22381,72092,72094],{"id":72093},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[10,72096,72097],{},[460,72098],{"alt":46,"src":72099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[10,72101,72102],{},[460,72103],{"alt":46,"src":72104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[41,72106,72108],{"className":53439,"code":72107,"language":53441,"meta":46,"style":46},"  \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",[48,72109,72110,72118,72122,72126,72130,72134,72138,72143,72148,72153,72158,72163,72168,72173,72178],{"__ignoreMap":46},[51,72111,72112,72114,72116],{"class":53,"line":54},[51,72113,52516],{"class":65},[51,72115,52185],{"class":51672},[51,72117,51679],{"class":65},[51,72119,72120],{"class":53,"line":185},[51,72121,71895],{"class":65},[51,72123,72124],{"class":53,"line":202},[51,72125,71900],{"class":65},[51,72127,72128],{"class":53,"line":209},[51,72129,71905],{"class":65},[51,72131,72132],{"class":53,"line":223},[51,72133,71910],{"class":65},[51,72135,72136],{"class":53,"line":237},[51,72137,2577],{"class":65},[51,72139,72140],{"class":53,"line":242},[51,72141,72142],{"class":65},"    \u002F\u002F 1.存储复杂数据类型\n",[51,72144,72145],{"class":53,"line":257},[51,72146,72147],{"class":65},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[51,72149,72150],{"class":53,"line":262},[51,72151,72152],{"class":65},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[51,72154,72155],{"class":53,"line":285},[51,72156,72157],{"class":65},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[51,72159,72160],{"class":53,"line":296},[51,72161,72162],{"class":65},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[51,72164,72165],{"class":53,"line":307},[51,72166,72167],{"class":65},"    \u002F\u002F 取\n",[51,72169,72170],{"class":53,"line":324},[51,72171,72172],{"class":65},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[51,72174,72175],{"class":53,"line":329},[51,72176,72177],{"class":65},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[51,72179,72180,72182,72184],{"class":53,"line":334},[51,72181,52789],{"class":65},[51,72183,52185],{"class":51672},[51,72185,51679],{"class":65},[10,72187,72188],{},[460,72189],{"alt":46,"src":72190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[513,72192,72194],{"id":72193},"_356-数组map方法","3.5.6 数组map方法",[10,72196,72197],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[10,72199,72200],{},[460,72201],{"alt":46,"src":72202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[10,72204,72205],{},[460,72206],{"alt":46,"src":72207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[10,72209,72210,72213],{},[691,72211,72212],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[10,72215,72216],{},"map有返回值，但是forEach没有返回值",[10,72218,72219],{},"map是个方法。用的时候要加 ()",[10,72221,72222],{},"map返回的是一个数组",[513,72224,72226],{"id":72225},"_357-数组中join方法","3.5.7 数组中join方法",[10,72228,72229],{},[460,72230],{"alt":46,"src":72231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[10,72233,72234],{},"类似于python中拼接字符串一样！",[19,72236,72237,72240,72243],{},[22,72238,72239],{},"小括号为空则逗号分开",[22,72241,72242],{},"小括号为空字符串 ''，则元素之间没有分隔符",[22,72244,72245],{},"小括号用啥符号就用进行分割",[513,72247,72249],{"id":72248},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[19,72251,72252,72255,72258,72261,72264],{},[22,72253,72254],{},"记住本地时间获取快速方式：new Date().toDateString()",[22,72256,72257],{},"尽量减少DOM操作，用好map+join的渲染方式",[22,72259,72260],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[22,72262,72263],{},"return可以实现函数的结束",[22,72265,72266],{},"禁止跳转是 preventDefault() 不要忘记",[41,72268,72270],{"className":51005,"code":72269,"language":51007,"meta":46,"style":46},"\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",[48,72271,72272,72282,72296,72300,72308,72322,72342,72354,72362,72368,72378,72388,72392,72396,72402,72412,72424,72428,72432,72439,72451,72465,72475,72479,72483,72490,72497,72504,72516,72528,72538,72550,72554,72558,72565,72572,72584,72596,72606,72618,72648,72652,72656,72663,72675,72687,72711,72721,72731,72735,72739,72747,72758,72770,72782,72794,72811,72823,72835,72839,72843,72850,72862,72874,72886,72897,72915,72928,72940,72964,72975,72979,72983,72991,73001,73005,73009,73015,73027,73038,73048,73052,73056,73062,73084,73088,73092,73098,73104,73116,73126,73138,73168,73181,73198,73202,73206,73217,73239,73249,73253,73257,73270,73280,73292,73304,73316,73328,73338,73348,73358,73369,73382,73386,73394,73402,73406,73414,73427,73447,73480,73513,73546,73572,73590,73608,73616,73642,73660,73678,73696,73714,73732,73740,73748,73766,73774,73803,73811,73819,73827,73840,73852,73864,73876,73888,73900,73913,73925,73933,73941,73949,73954,73959,73963,73967,73971,73975,73979,73983,73988,73993,73998,74003,74011,74019,74027,74032,74037,74042,74047,74052,74057,74062,74067,74072,74077,74082,74087,74092,74097,74101,74106,74111,74121,74130,74134,74139,74148,74164,74206,74246,74285,74350,74358,74362,74367,74385,74393,74398,74403,74433,74439,74444,74457,74469,74481,74493,74505,74517,74529,74533,74543,74547,74552,74557,74561,74570,74574,74579,74584,74603,74608,74628,74632,74637,74641,74646,74664,74682,74700,74719,74738,74757,74762,74768,74789,74795,74804,74810,74816,74822,74849,74862,74867,74877,74883,74889,74895,74901,74906,74912,74918,74924,74930,74963,74968,74973,74978,74983,74989,74995,75001,75012,75017,75023,75030,75044,75050,75074,75079,75084,75090,75096,75117,75123,75136,75142,75148,75154,75160,75165,75171,75177,75183,75201,75215,75221,75229,75235,75257,75262,75267,75272,75277,75282,75291,75300,75305],{"__ignoreMap":46},[51,72273,72274,72276,72278,72280],{"class":53,"line":54},[51,72275,51669],{"class":65},[51,72277,51673],{"class":51672},[51,72279,51676],{"class":57},[51,72281,51679],{"class":65},[51,72283,72284,72286,72288,72290,72292,72294],{"class":53,"line":185},[51,72285,1452],{"class":65},[51,72287,51007],{"class":51672},[51,72289,51688],{"class":57},[51,72291,70],{"class":65},[51,72293,51693],{"class":61},[51,72295,51679],{"class":65},[51,72297,72298],{"class":53,"line":202},[51,72299,206],{"emptyLinePlaceholder":205},[51,72301,72302,72304,72306],{"class":53,"line":209},[51,72303,1452],{"class":65},[51,72305,51706],{"class":51672},[51,72307,51679],{"class":65},[51,72309,72310,72312,72314,72316,72318,72320],{"class":53,"line":223},[51,72311,52516],{"class":65},[51,72313,51716],{"class":51672},[51,72315,51719],{"class":57},[51,72317,70],{"class":65},[51,72319,51724],{"class":61},[51,72321,51679],{"class":65},[51,72323,72324,72326,72328,72330,72332,72334,72336,72338,72340],{"class":53,"line":237},[51,72325,52516],{"class":65},[51,72327,51716],{"class":51672},[51,72329,15304],{"class":57},[51,72331,70],{"class":65},[51,72333,51763],{"class":61},[51,72335,51743],{"class":57},[51,72337,70],{"class":65},[51,72339,51770],{"class":61},[51,72341,51679],{"class":65},[51,72343,72344,72346,72348,72350,72352],{"class":53,"line":242},[51,72345,52516],{"class":65},[51,72347,51779],{"class":51672},[51,72349,51782],{"class":65},[51,72351,51779],{"class":51672},[51,72353,51679],{"class":65},[51,72355,72356,72358,72360],{"class":53,"line":257},[51,72357,52516],{"class":65},[51,72359,464],{"class":51672},[51,72361,51679],{"class":65},[51,72363,72364,72366],{"class":53,"line":262},[51,72365,6787],{"class":51672},[51,72367,15956],{"class":65},[51,72369,72370,72372,72374,72376],{"class":53,"line":285},[51,72371,55067],{"class":278},[51,72373,51809],{"class":65},[51,72375,733],{"class":278},[51,72377,1703],{"class":65},[51,72379,72380,72382,72384,72386],{"class":53,"line":296},[51,72381,55078],{"class":278},[51,72383,51809],{"class":65},[51,72385,733],{"class":278},[51,72387,1703],{"class":65},[51,72389,72390],{"class":53,"line":307},[51,72391,2577],{"class":65},[51,72393,72394],{"class":53,"line":324},[51,72395,206],{"emptyLinePlaceholder":205},[51,72397,72398,72400],{"class":53,"line":329},[51,72399,57651],{"class":51672},[51,72401,15956],{"class":65},[51,72403,72404,72406,72408,72410],{"class":53,"line":334},[51,72405,57658],{"class":278},[51,72407,51809],{"class":65},[51,72409,51964],{"class":278},[51,72411,1703],{"class":65},[51,72413,72414,72416,72418,72420,72422],{"class":53,"line":340},[51,72415,62449],{"class":278},[51,72417,51809],{"class":65},[51,72419,1242],{"class":278},[51,72421,51864],{"class":69},[51,72423,1703],{"class":65},[51,72425,72426],{"class":53,"line":345},[51,72427,2577],{"class":65},[51,72429,72430],{"class":53,"line":357},[51,72431,206],{"emptyLinePlaceholder":205},[51,72433,72434,72437],{"class":53,"line":366},[51,72435,72436],{"class":57},"    .info",[51,72438,15956],{"class":65},[51,72440,72441,72443,72445,72447,72449],{"class":53,"line":383},[51,72442,55143],{"class":278},[51,72444,51809],{"class":65},[51,72446,51861],{"class":278},[51,72448,51864],{"class":69},[51,72450,1703],{"class":65},[51,72452,72453,72455,72457,72459,72461,72463],{"class":53,"line":392},[51,72454,55078],{"class":278},[51,72456,51809],{"class":65},[51,72458,988],{"class":278},[51,72460,51864],{"class":69},[51,72462,51928],{"class":278},[51,72464,1703],{"class":65},[51,72466,72467,72469,72471,72473],{"class":53,"line":403},[51,72468,57658],{"class":278},[51,72470,51809],{"class":65},[51,72472,51964],{"class":278},[51,72474,1703],{"class":65},[51,72476,72477],{"class":53,"line":409},[51,72478,2577],{"class":65},[51,72480,72481],{"class":53,"line":414},[51,72482,206],{"emptyLinePlaceholder":205},[51,72484,72485,72488],{"class":53,"line":433},[51,72486,72487],{"class":57},"    .uname",[51,72489,31843],{"class":65},[51,72491,72492,72495],{"class":53,"line":439},[51,72493,72494],{"class":57},"    .age",[51,72496,31843],{"class":65},[51,72498,72499,72502],{"class":53,"line":444},[51,72500,72501],{"class":57},"    .salary",[51,72503,15956],{"class":65},[51,72505,72506,72508,72510,72512,72514],{"class":53,"line":453},[51,72507,55143],{"class":278},[51,72509,51809],{"class":65},[51,72511,853],{"class":278},[51,72513,51864],{"class":69},[51,72515,1703],{"class":65},[51,72517,72518,72520,72522,72524,72526],{"class":53,"line":2174},[51,72519,55157],{"class":278},[51,72521,51809],{"class":65},[51,72523,1242],{"class":278},[51,72525,51864],{"class":69},[51,72527,1703],{"class":65},[51,72529,72530,72532,72534,72536],{"class":53,"line":2965},[51,72531,62152],{"class":278},[51,72533,51809],{"class":65},[51,72535,55109],{"class":278},[51,72537,1703],{"class":65},[51,72539,72540,72542,72544,72546,72548],{"class":53,"line":2979},[51,72541,62122],{"class":278},[51,72543,51809],{"class":65},[51,72545,1117],{"class":278},[51,72547,51864],{"class":69},[51,72549,1703],{"class":65},[51,72551,72552],{"class":53,"line":2987},[51,72553,2577],{"class":65},[51,72555,72556],{"class":53,"line":2992},[51,72557,206],{"emptyLinePlaceholder":205},[51,72559,72560,72563],{"class":53,"line":2998},[51,72561,72562],{"class":57},"    .gender",[51,72564,31843],{"class":65},[51,72566,72567,72570],{"class":53,"line":3004},[51,72568,72569],{"class":57},"    .city",[51,72571,15956],{"class":65},[51,72573,72574,72576,72578,72580,72582],{"class":53,"line":3009},[51,72575,55143],{"class":278},[51,72577,51809],{"class":65},[51,72579,853],{"class":278},[51,72581,51864],{"class":69},[51,72583,1703],{"class":65},[51,72585,72586,72588,72590,72592,72594],{"class":53,"line":8332},[51,72587,55157],{"class":278},[51,72589,51809],{"class":65},[51,72591,1367],{"class":278},[51,72593,51864],{"class":69},[51,72595,1703],{"class":65},[51,72597,72598,72600,72602,72604],{"class":53,"line":8356},[51,72599,62152],{"class":278},[51,72601,51809],{"class":65},[51,72603,55109],{"class":278},[51,72605,1703],{"class":65},[51,72607,72608,72610,72612,72614,72616],{"class":53,"line":8361},[51,72609,62122],{"class":278},[51,72611,51809],{"class":65},[51,72613,1117],{"class":278},[51,72615,51864],{"class":69},[51,72617,1703],{"class":65},[51,72619,72620,72622,72624,72626,72628,72630,72633,72635,72637,72639,72642,72644,72646],{"class":53,"line":8367},[51,72621,62349],{"class":278},[51,72623,51809],{"class":65},[51,72625,759],{"class":278},[51,72627,51864],{"class":69},[51,72629,51893],{"class":278},[51,72631,72632],{"class":278}," rgb",[51,72634,546],{"class":65},[51,72636,2120],{"class":278},[51,72638,12819],{"class":65},[51,72640,72641],{"class":278},"197",[51,72643,12819],{"class":65},[51,72645,72641],{"class":278},[51,72647,3107],{"class":65},[51,72649,72650],{"class":53,"line":8394},[51,72651,2577],{"class":65},[51,72653,72654],{"class":53,"line":8399},[51,72655,206],{"emptyLinePlaceholder":205},[51,72657,72658,72661],{"class":53,"line":8405},[51,72659,72660],{"class":51672},"    button",[51,72662,15956],{"class":65},[51,72664,72665,72667,72669,72671,72673],{"class":53,"line":8417},[51,72666,55157],{"class":278},[51,72668,51809],{"class":65},[51,72670,1367],{"class":278},[51,72672,51864],{"class":69},[51,72674,1703],{"class":65},[51,72676,72677,72679,72681,72683,72685],{"class":53,"line":8429},[51,72678,55143],{"class":278},[51,72680,51809],{"class":65},[51,72682,1026],{"class":278},[51,72684,51864],{"class":69},[51,72686,1703],{"class":65},[51,72688,72689,72691,72693,72696,72698,72700,72702,72705,72707,72709],{"class":53,"line":8441},[51,72690,55256],{"class":278},[51,72692,51809],{"class":65},[51,72694,72695],{"class":278},"rgb",[51,72697,546],{"class":65},[51,72699,1511],{"class":278},[51,72701,12819],{"class":65},[51,72703,72704],{"class":278},"187",[51,72706,12819],{"class":65},[51,72708,841],{"class":278},[51,72710,3107],{"class":65},[51,72712,72713,72715,72717,72719],{"class":53,"line":10100},[51,72714,57788],{"class":278},[51,72716,51809],{"class":65},[51,72718,61214],{"class":278},[51,72720,1703],{"class":65},[51,72722,72723,72725,72727,72729],{"class":53,"line":10125},[51,72724,62349],{"class":278},[51,72726,51809],{"class":65},[51,72728,733],{"class":278},[51,72730,1703],{"class":65},[51,72732,72733],{"class":53,"line":10148},[51,72734,2577],{"class":65},[51,72736,72737],{"class":53,"line":10172},[51,72738,206],{"emptyLinePlaceholder":205},[51,72740,72741,72743,72745],{"class":53,"line":10177},[51,72742,72660],{"class":51672},[51,72744,52060],{"class":51672},[51,72746,15956],{"class":65},[51,72748,72749,72751,72753,72756],{"class":53,"line":10182},[51,72750,55381],{"class":278},[51,72752,51809],{"class":65},[51,72754,72755],{"class":278},"inline-block",[51,72757,1703],{"class":65},[51,72759,72760,72762,72764,72766,72768],{"class":53,"line":10187},[51,72761,55143],{"class":278},[51,72763,51809],{"class":65},[51,72765,988],{"class":278},[51,72767,51864],{"class":69},[51,72769,1703],{"class":65},[51,72771,72772,72774,72776,72778,72780],{"class":53,"line":10196},[51,72773,55157],{"class":278},[51,72775,51809],{"class":65},[51,72777,988],{"class":278},[51,72779,51864],{"class":69},[51,72781,1703],{"class":65},[51,72783,72784,72786,72788,72790,72792],{"class":53,"line":10201},[51,72785,57731],{"class":278},[51,72787,51809],{"class":65},[51,72789,1014],{"class":278},[51,72791,51864],{"class":69},[51,72793,1703],{"class":65},[51,72795,72796,72798,72800,72802,72804,72806,72809],{"class":53,"line":10207},[51,72797,62349],{"class":278},[51,72799,51809],{"class":65},[51,72801,759],{"class":278},[51,72803,51864],{"class":69},[51,72805,51893],{"class":278},[51,72807,72808],{"class":278}," #fff",[51,72810,1703],{"class":65},[51,72812,72813,72815,72817,72819,72821],{"class":53,"line":10228},[51,72814,55506],{"class":278},[51,72816,51809],{"class":65},[51,72818,861],{"class":278},[51,72820,51864],{"class":69},[51,72822,1703],{"class":65},[51,72824,72825,72827,72829,72831,72833],{"class":53,"line":10234},[51,72826,62122],{"class":278},[51,72828,51809],{"class":65},[51,72830,759],{"class":278},[51,72832,51864],{"class":69},[51,72834,1703],{"class":65},[51,72836,72837],{"class":53,"line":10248},[51,72838,2577],{"class":65},[51,72840,72841],{"class":53,"line":10254},[51,72842,206],{"emptyLinePlaceholder":205},[51,72844,72845,72848],{"class":53,"line":10281},[51,72846,72847],{"class":57},"    .total",[51,72849,15956],{"class":65},[51,72851,72852,72854,72856,72858,72860],{"class":53,"line":10290},[51,72853,55143],{"class":278},[51,72855,51809],{"class":65},[51,72857,62001],{"class":278},[51,72859,51864],{"class":69},[51,72861,1703],{"class":65},[51,72863,72864,72866,72868,72870,72872],{"class":53,"line":10296},[51,72865,55157],{"class":278},[51,72867,51809],{"class":65},[51,72869,943],{"class":278},[51,72871,51864],{"class":69},[51,72873,1703],{"class":65},[51,72875,72876,72878,72880,72882,72884],{"class":53,"line":10304},[51,72877,57731],{"class":278},[51,72879,51809],{"class":65},[51,72881,943],{"class":278},[51,72883,51864],{"class":69},[51,72885,1703],{"class":65},[51,72887,72888,72890,72892,72895],{"class":53,"line":10309},[51,72889,57658],{"class":278},[51,72891,51809],{"class":65},[51,72893,72894],{"class":278},"right",[51,72896,1703],{"class":65},[51,72898,72899,72901,72903,72905,72907,72909,72911,72913],{"class":53,"line":16987},[51,72900,55078],{"class":278},[51,72902,51809],{"class":65},[51,72904,943],{"class":278},[51,72906,51864],{"class":69},[51,72908,51928],{"class":278},[51,72910,2428],{"class":278},[51,72912,51864],{"class":69},[51,72914,1703],{"class":65},[51,72916,72917,72920,72922,72924,72926],{"class":53,"line":16993},[51,72918,72919],{"class":278},"      padding-right",[51,72921,51809],{"class":65},[51,72923,988],{"class":278},[51,72925,51864],{"class":69},[51,72927,1703],{"class":65},[51,72929,72930,72932,72934,72936,72938],{"class":53,"line":17016},[51,72931,55294],{"class":278},[51,72933,51809],{"class":65},[51,72935,1065],{"class":278},[51,72937,51864],{"class":69},[51,72939,1703],{"class":65},[51,72941,72942,72944,72946,72948,72950,72953,72955,72958,72960,72962],{"class":53,"line":17022},[51,72943,55256],{"class":278},[51,72945,51809],{"class":65},[51,72947,72695],{"class":278},[51,72949,546],{"class":65},[51,72951,72952],{"class":278},"237",[51,72954,12819],{"class":65},[51,72956,72957],{"class":278},"235",[51,72959,12819],{"class":65},[51,72961,72957],{"class":278},[51,72963,3107],{"class":65},[51,72965,72966,72969,72971,72973],{"class":53,"line":17045},[51,72967,72968],{"class":278},"      box-sizing",[51,72970,51809],{"class":65},[51,72972,60877],{"class":278},[51,72974,1703],{"class":65},[51,72976,72977],{"class":53,"line":17059},[51,72978,2577],{"class":65},[51,72980,72981],{"class":53,"line":17079},[51,72982,206],{"emptyLinePlaceholder":205},[51,72984,72985,72987,72989],{"class":53,"line":17085},[51,72986,72847],{"class":57},[51,72988,52060],{"class":51672},[51,72990,15956],{"class":65},[51,72992,72993,72995,72997,72999],{"class":53,"line":17096},[51,72994,57788],{"class":278},[51,72996,51809],{"class":65},[51,72998,57793],{"class":278},[51,73000,1703],{"class":65},[51,73002,73003],{"class":53,"line":17119},[51,73004,2577],{"class":65},[51,73006,73007],{"class":53,"line":17141},[51,73008,206],{"emptyLinePlaceholder":205},[51,73010,73011,73013],{"class":53,"line":17146},[51,73012,65395],{"class":51672},[51,73014,15956],{"class":65},[51,73016,73017,73019,73021,73023,73025],{"class":53,"line":17152},[51,73018,55143],{"class":278},[51,73020,51809],{"class":65},[51,73022,62001],{"class":278},[51,73024,51864],{"class":69},[51,73026,1703],{"class":65},[51,73028,73029,73031,73033,73036],{"class":53,"line":17166},[51,73030,55078],{"class":278},[51,73032,51809],{"class":65},[51,73034,73035],{"class":278},"auto",[51,73037,1703],{"class":65},[51,73039,73040,73042,73044,73046],{"class":53,"line":17179},[51,73041,65402],{"class":278},[51,73043,51809],{"class":65},[51,73045,65407],{"class":278},[51,73047,1703],{"class":65},[51,73049,73050],{"class":53,"line":17184},[51,73051,2577],{"class":65},[51,73053,73054],{"class":53,"line":17198},[51,73055,206],{"emptyLinePlaceholder":205},[51,73057,73058,73060],{"class":53,"line":17203},[51,73059,65487],{"class":51672},[51,73061,15956],{"class":65},[51,73063,73064,73066,73068,73070,73072,73074,73076,73078,73080,73082],{"class":53,"line":17209},[51,73065,55256],{"class":278},[51,73067,51809],{"class":65},[51,73069,72695],{"class":278},[51,73071,546],{"class":65},[51,73073,72952],{"class":278},[51,73075,12819],{"class":65},[51,73077,72957],{"class":278},[51,73079,12819],{"class":65},[51,73081,72957],{"class":278},[51,73083,3107],{"class":65},[51,73085,73086],{"class":53,"line":17214},[51,73087,2577],{"class":65},[51,73089,73090],{"class":53,"line":17228},[51,73091,206],{"emptyLinePlaceholder":205},[51,73093,73094,73096],{"class":53,"line":17233},[51,73095,65487],{"class":51672},[51,73097,31843],{"class":65},[51,73099,73100,73102],{"class":53,"line":17238},[51,73101,65553],{"class":51672},[51,73103,15956],{"class":65},[51,73105,73106,73108,73110,73112,73114],{"class":53,"line":17252},[51,73107,55157],{"class":278},[51,73109,51809],{"class":65},[51,73111,815],{"class":278},[51,73113,51864],{"class":69},[51,73115,1703],{"class":65},[51,73117,73118,73120,73122,73124],{"class":53,"line":17264},[51,73119,57658],{"class":278},[51,73121,51809],{"class":65},[51,73123,24119],{"class":278},[51,73125,1703],{"class":65},[51,73127,73128,73130,73132,73134,73136],{"class":53,"line":17269},[51,73129,55294],{"class":278},[51,73131,51809],{"class":65},[51,73133,1091],{"class":278},[51,73135,51864],{"class":69},[51,73137,1703],{"class":65},[51,73139,73140,73142,73144,73146,73148,73150,73152,73154,73157,73159,73162,73164,73166],{"class":53,"line":17282},[51,73141,62349],{"class":278},[51,73143,51809],{"class":65},[51,73145,759],{"class":278},[51,73147,51864],{"class":69},[51,73149,51893],{"class":278},[51,73151,72632],{"class":278},[51,73153,546],{"class":65},[51,73155,73156],{"class":278},"228",[51,73158,12819],{"class":65},[51,73160,73161],{"class":278},"225",[51,73163,12819],{"class":65},[51,73165,73161],{"class":278},[51,73167,3107],{"class":65},[51,73169,73170,73173,73175,73177,73179],{"class":53,"line":17287},[51,73171,73172],{"class":278},"      padding-left",[51,73174,51809],{"class":65},[51,73176,861],{"class":278},[51,73178,51864],{"class":69},[51,73180,1703],{"class":65},[51,73182,73183,73185,73187,73189,73192,73194,73196],{"class":53,"line":17292},[51,73184,62232],{"class":278},[51,73186,51809],{"class":65},[51,73188,28503],{"class":278},[51,73190,73191],{"class":278}," linear",[51,73193,62239],{"class":278},[51,73195,1237],{"class":69},[51,73197,1703],{"class":65},[51,73199,73200],{"class":53,"line":17297},[51,73201,2577],{"class":65},[51,73203,73204],{"class":53,"line":17310},[51,73205,206],{"emptyLinePlaceholder":205},[51,73207,73208,73211,73213,73215],{"class":53,"line":17315},[51,73209,73210],{"class":51672},"    tbody",[51,73212,70516],{"class":51672},[51,73214,61312],{"class":57},[51,73216,15956],{"class":65},[51,73218,73219,73221,73223,73225,73227,73229,73231,73233,73235,73237],{"class":53,"line":33008},[51,73220,55256],{"class":278},[51,73222,51809],{"class":65},[51,73224,72695],{"class":278},[51,73226,546],{"class":65},[51,73228,72952],{"class":278},[51,73230,12819],{"class":65},[51,73232,72957],{"class":278},[51,73234,12819],{"class":65},[51,73236,72957],{"class":278},[51,73238,3107],{"class":65},[51,73240,73241,73243,73245,73247],{"class":53,"line":33014},[51,73242,62397],{"class":278},[51,73244,51809],{"class":65},[51,73246,62402],{"class":278},[51,73248,1703],{"class":65},[51,73250,73251],{"class":53,"line":33020},[51,73252,2577],{"class":65},[51,73254,73255],{"class":53,"line":33026},[51,73256,206],{"emptyLinePlaceholder":205},[51,73258,73259,73261,73263,73266,73268],{"class":53,"line":33032},[51,73260,73210],{"class":51672},[51,73262,70516],{"class":51672},[51,73264,73265],{"class":51672}," td",[51,73267,1808],{"class":51672},[51,73269,15956],{"class":65},[51,73271,73272,73274,73276,73278],{"class":53,"line":33043},[51,73273,55381],{"class":278},[51,73275,51809],{"class":65},[51,73277,61241],{"class":278},[51,73279,1703],{"class":65},[51,73281,73282,73284,73286,73288,73290],{"class":53,"line":33049},[51,73283,55143],{"class":278},[51,73285,51809],{"class":65},[51,73287,1449],{"class":278},[51,73289,51864],{"class":69},[51,73291,1703],{"class":65},[51,73293,73294,73296,73298,73300,73302],{"class":53,"line":33069},[51,73295,55157],{"class":278},[51,73297,51809],{"class":65},[51,73299,1367],{"class":278},[51,73301,51864],{"class":69},[51,73303,1703],{"class":65},[51,73305,73306,73308,73310,73312,73314],{"class":53,"line":33075},[51,73307,57731],{"class":278},[51,73309,51809],{"class":65},[51,73311,1367],{"class":278},[51,73313,51864],{"class":69},[51,73315,1703],{"class":65},[51,73317,73318,73320,73322,73324,73326],{"class":53,"line":33086},[51,73319,62449],{"class":278},[51,73321,51809],{"class":65},[51,73323,620],{"class":278},[51,73325,51864],{"class":69},[51,73327,1703],{"class":65},[51,73329,73330,73332,73334,73336],{"class":53,"line":33092},[51,73331,57788],{"class":278},[51,73333,51809],{"class":65},[51,73335,61214],{"class":278},[51,73337,1703],{"class":65},[51,73339,73340,73342,73344,73346],{"class":53,"line":33098},[51,73341,57658],{"class":278},[51,73343,51809],{"class":65},[51,73345,51964],{"class":278},[51,73347,1703],{"class":65},[51,73349,73350,73352,73354,73356],{"class":53,"line":33104},[51,73351,64342],{"class":278},[51,73353,51809],{"class":65},[51,73355,55109],{"class":278},[51,73357,1703],{"class":65},[51,73359,73360,73362,73364,73367],{"class":53,"line":33110},[51,73361,55256],{"class":278},[51,73363,51809],{"class":65},[51,73365,73366],{"class":278},"orange",[51,73368,1703],{"class":65},[51,73370,73371,73373,73375,73378,73380],{"class":53,"line":33116},[51,73372,55506],{"class":278},[51,73374,51809],{"class":65},[51,73376,73377],{"class":278},"12.5",[51,73379,51864],{"class":69},[51,73381,1703],{"class":65},[51,73383,73384],{"class":53,"line":33122},[51,73385,2577],{"class":65},[51,73387,73388,73390,73392],{"class":53,"line":33128},[51,73389,52789],{"class":65},[51,73391,464],{"class":51672},[51,73393,51679],{"class":65},[51,73395,73396,73398,73400],{"class":53,"line":33148},[51,73397,52157],{"class":65},[51,73399,51706],{"class":51672},[51,73401,51679],{"class":65},[51,73403,73404],{"class":53,"line":33154},[51,73405,206],{"emptyLinePlaceholder":205},[51,73407,73408,73410,73412],{"class":53,"line":33170},[51,73409,1452],{"class":65},[51,73411,52172],{"class":51672},[51,73413,51679],{"class":65},[51,73415,73416,73418,73420,73423,73425],{"class":53,"line":33176},[51,73417,52516],{"class":65},[51,73419,486],{"class":51672},[51,73421,73422],{"class":65},">学生就业统计表\u003C\u002F",[51,73424,486],{"class":51672},[51,73426,51679],{"class":65},[51,73428,73429,73431,73433,73435,73437,73439,73441,73443,73445],{"class":53,"line":33190},[51,73430,52516],{"class":65},[51,73432,66997],{"class":51672},[51,73434,53858],{"class":57},[51,73436,70],{"class":65},[51,73438,63036],{"class":61},[51,73440,69442],{"class":57},[51,73442,70],{"class":65},[51,73444,32152],{"class":61},[51,73446,51679],{"class":65},[51,73448,73449,73451,73453,73455,73457,73459,73461,73463,73465,73467,73469,73472,73474,73476,73478],{"class":53,"line":33196},[51,73450,51713],{"class":65},[51,73452,54193],{"class":51672},[51,73454,54196],{"class":57},[51,73456,70],{"class":65},[51,73458,63071],{"class":61},[51,73460,15304],{"class":57},[51,73462,70],{"class":65},[51,73464,69468],{"class":61},[51,73466,61392],{"class":57},[51,73468,70],{"class":65},[51,73470,73471],{"class":61},"\"姓名\"",[51,73473,53858],{"class":57},[51,73475,70],{"class":65},[51,73477,69468],{"class":61},[51,73479,51679],{"class":65},[51,73481,73482,73484,73486,73488,73490,73492,73494,73496,73498,73500,73502,73505,73507,73509,73511],{"class":53,"line":33211},[51,73483,51713],{"class":65},[51,73485,54193],{"class":51672},[51,73487,54196],{"class":57},[51,73489,70],{"class":65},[51,73491,63071],{"class":61},[51,73493,15304],{"class":57},[51,73495,70],{"class":65},[51,73497,69496],{"class":61},[51,73499,61392],{"class":57},[51,73501,70],{"class":65},[51,73503,73504],{"class":61},"\"年龄\"",[51,73506,53858],{"class":57},[51,73508,70],{"class":65},[51,73510,69496],{"class":61},[51,73512,51679],{"class":65},[51,73514,73515,73517,73519,73521,73523,73525,73527,73529,73531,73533,73535,73538,73540,73542,73544],{"class":53,"line":33217},[51,73516,51713],{"class":65},[51,73518,54193],{"class":51672},[51,73520,54196],{"class":57},[51,73522,70],{"class":65},[51,73524,63071],{"class":61},[51,73526,15304],{"class":57},[51,73528,70],{"class":65},[51,73530,69598],{"class":61},[51,73532,61392],{"class":57},[51,73534,70],{"class":65},[51,73536,73537],{"class":61},"\"薪资\"",[51,73539,53858],{"class":57},[51,73541,70],{"class":65},[51,73543,69598],{"class":61},[51,73545,51679],{"class":65},[51,73547,73548,73550,73552,73554,73556,73558,73560,73562,73564,73566,73568,73570],{"class":53,"line":33226},[51,73549,51713],{"class":65},[51,73551,69516],{"class":51672},[51,73553,15304],{"class":57},[51,73555,70],{"class":65},[51,73557,69523],{"class":61},[51,73559,15343],{"class":57},[51,73561,70],{"class":65},[51,73563,8036],{"class":61},[51,73565,53858],{"class":57},[51,73567,70],{"class":65},[51,73569,69523],{"class":61},[51,73571,51679],{"class":65},[51,73573,73574,73576,73578,73580,73582,73584,73586,73588],{"class":53,"line":33232},[51,73575,55606],{"class":65},[51,73577,69538],{"class":51672},[51,73579,67023],{"class":57},[51,73581,70],{"class":65},[51,73583,10345],{"class":61},[51,73585,69547],{"class":65},[51,73587,69538],{"class":51672},[51,73589,51679],{"class":65},[51,73591,73592,73594,73596,73598,73600,73602,73604,73606],{"class":53,"line":33241},[51,73593,55606],{"class":65},[51,73595,69538],{"class":51672},[51,73597,67023],{"class":57},[51,73599,70],{"class":65},[51,73601,10414],{"class":61},[51,73603,69566],{"class":65},[51,73605,69538],{"class":51672},[51,73607,51679],{"class":65},[51,73609,73610,73612,73614],{"class":53,"line":33247},[51,73611,52148],{"class":65},[51,73613,69516],{"class":51672},[51,73615,51679],{"class":65},[51,73617,73618,73620,73622,73624,73626,73628,73630,73632,73634,73636,73638,73640],{"class":53,"line":33253},[51,73619,51713],{"class":65},[51,73621,69516],{"class":51672},[51,73623,15304],{"class":57},[51,73625,70],{"class":65},[51,73627,69620],{"class":61},[51,73629,15343],{"class":57},[51,73631,70],{"class":65},[51,73633,8036],{"class":61},[51,73635,53858],{"class":57},[51,73637,70],{"class":65},[51,73639,69620],{"class":61},[51,73641,51679],{"class":65},[51,73643,73644,73646,73648,73650,73652,73654,73656,73658],{"class":53,"line":33262},[51,73645,55606],{"class":65},[51,73647,69538],{"class":51672},[51,73649,67023],{"class":57},[51,73651,70],{"class":65},[51,73653,69641],{"class":61},[51,73655,69644],{"class":65},[51,73657,69538],{"class":51672},[51,73659,51679],{"class":65},[51,73661,73662,73664,73666,73668,73670,73672,73674,73676],{"class":53,"line":33268},[51,73663,55606],{"class":65},[51,73665,69538],{"class":51672},[51,73667,67023],{"class":57},[51,73669,70],{"class":65},[51,73671,69661],{"class":61},[51,73673,69664],{"class":65},[51,73675,69538],{"class":51672},[51,73677,51679],{"class":65},[51,73679,73680,73682,73684,73686,73688,73690,73692,73694],{"class":53,"line":33279},[51,73681,55606],{"class":65},[51,73683,69538],{"class":51672},[51,73685,67023],{"class":57},[51,73687,70],{"class":65},[51,73689,69681],{"class":61},[51,73691,69684],{"class":65},[51,73693,69538],{"class":51672},[51,73695,51679],{"class":65},[51,73697,73698,73700,73702,73704,73706,73708,73710,73712],{"class":53,"line":33285},[51,73699,55606],{"class":65},[51,73701,69538],{"class":51672},[51,73703,67023],{"class":57},[51,73705,70],{"class":65},[51,73707,69701],{"class":61},[51,73709,69704],{"class":65},[51,73711,69538],{"class":51672},[51,73713,51679],{"class":65},[51,73715,73716,73718,73720,73722,73724,73726,73728,73730],{"class":53,"line":33304},[51,73717,55606],{"class":65},[51,73719,69538],{"class":51672},[51,73721,67023],{"class":57},[51,73723,70],{"class":65},[51,73725,69721],{"class":61},[51,73727,69724],{"class":65},[51,73729,69538],{"class":51672},[51,73731,51679],{"class":65},[51,73733,73734,73736,73738],{"class":53,"line":33310},[51,73735,52148],{"class":65},[51,73737,69516],{"class":51672},[51,73739,51679],{"class":65},[51,73741,73742,73744,73746],{"class":53,"line":33321},[51,73743,51713],{"class":65},[51,73745,54259],{"class":51672},[51,73747,51679],{"class":65},[51,73749,73750,73752,73754,73757,73759,73762,73764],{"class":53,"line":33327},[51,73751,55606],{"class":65},[51,73753,51],{"class":51672},[51,73755,73756],{"class":65},">+\u003C\u002F",[51,73758,51],{"class":51672},[51,73760,73761],{"class":65},">添加\u003C\u002F",[51,73763,54259],{"class":51672},[51,73765,51679],{"class":65},[51,73767,73768,73770,73772],{"class":53,"line":33347},[51,73769,52789],{"class":65},[51,73771,66997],{"class":51672},[51,73773,51679],{"class":65},[51,73775,73776,73778,73780,73782,73784,73786,73789,73791,73794,73796,73799,73801],{"class":53,"line":33363},[51,73777,52516],{"class":65},[51,73779,51983],{"class":51672},[51,73781,53858],{"class":57},[51,73783,70],{"class":65},[51,73785,62952],{"class":61},[51,73787,73788],{"class":65},">共有数据 \u003C",[51,73790,51],{"class":51672},[51,73792,73793],{"class":65},">0\u003C\u002F",[51,73795,51],{"class":51672},[51,73797,73798],{"class":65},"> 条\u003C\u002F",[51,73800,51983],{"class":51672},[51,73802,51679],{"class":65},[51,73804,73805,73807,73809],{"class":53,"line":33369},[51,73806,52516],{"class":65},[51,73808,679],{"class":51672},[51,73810,51679],{"class":65},[51,73812,73813,73815,73817],{"class":53,"line":33383},[51,73814,51713],{"class":65},[51,73816,682],{"class":51672},[51,73818,51679],{"class":65},[51,73820,73821,73823,73825],{"class":53,"line":33389},[51,73822,55606],{"class":65},[51,73824,685],{"class":51672},[51,73826,51679],{"class":65},[51,73828,73829,73831,73833,73836,73838],{"class":53,"line":33395},[51,73830,55674],{"class":65},[51,73832,688],{"class":51672},[51,73834,73835],{"class":65},">ID\u003C\u002F",[51,73837,688],{"class":51672},[51,73839,51679],{"class":65},[51,73841,73842,73844,73846,73848,73850],{"class":53,"line":33406},[51,73843,55674],{"class":65},[51,73845,688],{"class":51672},[51,73847,69827],{"class":65},[51,73849,688],{"class":51672},[51,73851,51679],{"class":65},[51,73853,73854,73856,73858,73860,73862],{"class":53,"line":33412},[51,73855,55674],{"class":65},[51,73857,688],{"class":51672},[51,73859,69840],{"class":65},[51,73861,688],{"class":51672},[51,73863,51679],{"class":65},[51,73865,73866,73868,73870,73872,73874],{"class":53,"line":33418},[51,73867,55674],{"class":65},[51,73869,688],{"class":51672},[51,73871,69853],{"class":65},[51,73873,688],{"class":51672},[51,73875,51679],{"class":65},[51,73877,73878,73880,73882,73884,73886],{"class":53,"line":33428},[51,73879,55674],{"class":65},[51,73881,688],{"class":51672},[51,73883,69866],{"class":65},[51,73885,688],{"class":51672},[51,73887,51679],{"class":65},[51,73889,73890,73892,73894,73896,73898],{"class":53,"line":33434},[51,73891,55674],{"class":65},[51,73893,688],{"class":51672},[51,73895,69879],{"class":65},[51,73897,688],{"class":51672},[51,73899,51679],{"class":65},[51,73901,73902,73904,73906,73909,73911],{"class":53,"line":33445},[51,73903,55674],{"class":65},[51,73905,688],{"class":51672},[51,73907,73908],{"class":65},">录入时间\u003C\u002F",[51,73910,688],{"class":51672},[51,73912,51679],{"class":65},[51,73914,73915,73917,73919,73921,73923],{"class":53,"line":33451},[51,73916,55674],{"class":65},[51,73918,688],{"class":51672},[51,73920,69892],{"class":65},[51,73922,688],{"class":51672},[51,73924,51679],{"class":65},[51,73926,73927,73929,73931],{"class":53,"line":33461},[51,73928,55779],{"class":65},[51,73930,685],{"class":51672},[51,73932,51679],{"class":65},[51,73934,73935,73937,73939],{"class":53,"line":33466},[51,73936,52148],{"class":65},[51,73938,682],{"class":51672},[51,73940,51679],{"class":65},[51,73942,73943,73945,73947],{"class":53,"line":33472},[51,73944,51713],{"class":65},[51,73946,726],{"class":51672},[51,73948,51679],{"class":65},[51,73950,73951],{"class":53,"line":33521},[51,73952,73953],{"class":601},"      \u003C!-- \u003Ctr>\n",[51,73955,73956],{"class":53,"line":33568},[51,73957,73958],{"class":601},"        \u003Ctd>1\u003C\u002Ftd>\n",[51,73960,73961],{"class":53,"line":33573},[51,73962,73958],{"class":601},[51,73964,73965],{"class":53,"line":33579},[51,73966,73958],{"class":601},[51,73968,73969],{"class":53,"line":33598},[51,73970,73958],{"class":601},[51,73972,73973],{"class":53,"line":33604},[51,73974,73958],{"class":601},[51,73976,73977],{"class":53,"line":33624},[51,73978,73958],{"class":601},[51,73980,73981],{"class":53,"line":33630},[51,73982,73958],{"class":601},[51,73984,73985],{"class":53,"line":33636},[51,73986,73987],{"class":601},"        \u003Ctd>\n",[51,73989,73990],{"class":53,"line":33646},[51,73991,73992],{"class":601},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[51,73994,73995],{"class":53,"line":33651},[51,73996,73997],{"class":601},"        \u003C\u002Ftd>\n",[51,73999,74000],{"class":53,"line":33657},[51,74001,74002],{"class":601},"      \u003C\u002Ftr> -->\n",[51,74004,74005,74007,74009],{"class":53,"line":33673},[51,74006,52148],{"class":65},[51,74008,726],{"class":51672},[51,74010,51679],{"class":65},[51,74012,74013,74015,74017],{"class":53,"line":33718},[51,74014,52789],{"class":65},[51,74016,679],{"class":51672},[51,74018,51679],{"class":65},[51,74020,74021,74023,74025],{"class":53,"line":33724},[51,74022,52516],{"class":65},[51,74024,52185],{"class":51672},[51,74026,51679],{"class":65},[51,74028,74029],{"class":53,"line":33730},[51,74030,74031],{"class":601},"    \u002F\u002F const initData = [{\n",[51,74033,74034],{"class":53,"line":33736},[51,74035,74036],{"class":601},"    \u002F\u002F   unameId: 1,\n",[51,74038,74039],{"class":53,"line":33747},[51,74040,74041],{"class":601},"    \u002F\u002F   uname: '华晨宇',\n",[51,74043,74044],{"class":53,"line":33753},[51,74045,74046],{"class":601},"    \u002F\u002F   age: 22,\n",[51,74048,74049],{"class":53,"line":33759},[51,74050,74051],{"class":601},"    \u002F\u002F   salary: 12000,\n",[51,74053,74054],{"class":53,"line":33765},[51,74055,74056],{"class":601},"    \u002F\u002F   gender: '男',\n",[51,74058,74059],{"class":53,"line":33783},[51,74060,74061],{"class":601},"    \u002F\u002F   city: '北京',\n",[51,74063,74064],{"class":53,"line":33797},[51,74065,74066],{"class":601},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[51,74068,74069],{"class":53,"line":33806},[51,74070,74071],{"class":601},"    \u002F\u002F }]\n",[51,74073,74074],{"class":53,"line":33815},[51,74075,74076],{"class":601},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[51,74078,74079],{"class":53,"line":33824},[51,74080,74081],{"class":601},"    \u002F\u002F 1.渲染业务\n",[51,74083,74084],{"class":53,"line":33833},[51,74085,74086],{"class":601},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[51,74088,74089],{"class":53,"line":33839},[51,74090,74091],{"class":601},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[51,74093,74094],{"class":53,"line":33845},[51,74095,74096],{"class":601},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[51,74098,74099],{"class":53,"line":33853},[51,74100,206],{"emptyLinePlaceholder":205},[51,74102,74103],{"class":53,"line":33858},[51,74104,74105],{"class":601},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[51,74107,74108],{"class":53,"line":33864},[51,74109,74110],{"class":601},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[51,74112,74113,74115,74117,74119],{"class":53,"line":33875},[51,74114,11605],{"class":69},[51,74116,58067],{"class":278},[51,74118,13948],{"class":69},[51,74120,52210],{"class":65},[51,74122,74123,74126,74128],{"class":53,"line":33881},[51,74124,74125],{"class":65},"    console.",[51,74127,58619],{"class":57},[51,74129,52784],{"class":65},[51,74131,74132],{"class":53,"line":33901},[51,74133,206],{"emptyLinePlaceholder":205},[51,74135,74136],{"class":53,"line":33907},[51,74137,74138],{"class":601},"    \u002F\u002F 时间函数\n",[51,74140,74141,74143,74146],{"class":53,"line":33913},[51,74142,70456],{"class":69},[51,74144,74145],{"class":57}," getTime",[51,74147,11237],{"class":65},[51,74149,74150,74152,74155,74157,74159,74162],{"class":53,"line":33919},[51,74151,58600],{"class":69},[51,74153,74154],{"class":278}," date",[51,74156,13948],{"class":69},[51,74158,11962],{"class":69},[51,74160,74161],{"class":57}," Date",[51,74163,2366],{"class":65},[51,74165,74166,74168,74170,74172,74175,74178,74180,74182,74184,74187,74190,74192,74194,74196,74198,74200,74202,74204],{"class":53,"line":33936},[51,74167,58600],{"class":69},[51,74169,16474],{"class":278},[51,74171,13948],{"class":69},[51,74173,74174],{"class":65}," date.",[51,74176,74177],{"class":57},"getHours",[51,74179,13434],{"class":65},[51,74181,1452],{"class":69},[51,74183,2428],{"class":278},[51,74185,74186],{"class":69}," ?",[51,74188,74189],{"class":61}," '0'",[51,74191,45938],{"class":69},[51,74193,74174],{"class":65},[51,74195,74177],{"class":57},[51,74197,13434],{"class":65},[51,74199,1401],{"class":69},[51,74201,74174],{"class":65},[51,74203,74177],{"class":57},[51,74205,2366],{"class":65},[51,74207,74208,74210,74213,74215,74217,74220,74222,74224,74226,74228,74230,74232,74234,74236,74238,74240,74242,74244],{"class":53,"line":33942},[51,74209,58600],{"class":69},[51,74211,74212],{"class":278}," m",[51,74214,13948],{"class":69},[51,74216,74174],{"class":65},[51,74218,74219],{"class":57},"getMinutes",[51,74221,13434],{"class":65},[51,74223,1452],{"class":69},[51,74225,2428],{"class":278},[51,74227,74186],{"class":69},[51,74229,74189],{"class":61},[51,74231,45938],{"class":69},[51,74233,74174],{"class":65},[51,74235,74219],{"class":57},[51,74237,13434],{"class":65},[51,74239,1401],{"class":69},[51,74241,74174],{"class":65},[51,74243,74219],{"class":57},[51,74245,2366],{"class":65},[51,74247,74248,74250,74252,74254,74256,74259,74261,74263,74265,74267,74269,74271,74273,74275,74277,74279,74281,74283],{"class":53,"line":33948},[51,74249,58600],{"class":69},[51,74251,8812],{"class":278},[51,74253,13948],{"class":69},[51,74255,74174],{"class":65},[51,74257,74258],{"class":57},"getSeconds",[51,74260,13434],{"class":65},[51,74262,1452],{"class":69},[51,74264,2428],{"class":278},[51,74266,74186],{"class":69},[51,74268,74189],{"class":61},[51,74270,45938],{"class":69},[51,74272,74174],{"class":65},[51,74274,74258],{"class":57},[51,74276,13434],{"class":65},[51,74278,1401],{"class":69},[51,74280,74174],{"class":65},[51,74282,74258],{"class":57},[51,74284,2366],{"class":65},[51,74286,74287,74289,74292,74294,74296,74299,74301,74304,74306,74309,74311,74313,74316,74318,74320,74322,74324,74326,74328,74331,74333,74336,74338,74341,74343,74345,74347],{"class":53,"line":33954},[51,74288,58600],{"class":69},[51,74290,74291],{"class":278}," str",[51,74293,13948],{"class":69},[51,74295,63275],{"class":61},[51,74297,74298],{"class":65},"date",[51,74300,1100],{"class":61},[51,74302,74303],{"class":57},"getFullYear",[51,74305,2816],{"class":61},[51,74307,74308],{"class":61},"}\u002F${",[51,74310,74298],{"class":65},[51,74312,1100],{"class":61},[51,74314,74315],{"class":57},"getMonth",[51,74317,13434],{"class":61},[51,74319,1023],{"class":69},[51,74321,25500],{"class":278},[51,74323,74308],{"class":61},[51,74325,74298],{"class":65},[51,74327,1100],{"class":61},[51,74329,74330],{"class":57},"getDate",[51,74332,2816],{"class":61},[51,74334,74335],{"class":61},"} ${",[51,74337,957],{"class":65},[51,74339,74340],{"class":61},"}:${",[51,74342,1086],{"class":65},[51,74344,74340],{"class":61},[51,74346,1237],{"class":65},[51,74348,74349],{"class":61},"}`\n",[51,74351,74352,74355],{"class":53,"line":33960},[51,74353,74354],{"class":69},"      return",[51,74356,74357],{"class":65}," str\n",[51,74359,74360],{"class":53,"line":33966},[51,74361,2577],{"class":65},[51,74363,74364],{"class":53,"line":33993},[51,74365,74366],{"class":601},"    \u002F\u002F 渲染函数\n",[51,74368,74369,74371,74373,74375,74377,74379,74381,74383],{"class":53,"line":34017},[51,74370,11605],{"class":69},[51,74372,70119],{"class":278},[51,74374,13948],{"class":69},[51,74376,54768],{"class":65},[51,74378,54771],{"class":57},[51,74380,546],{"class":65},[51,74382,70130],{"class":61},[51,74384,282],{"class":65},[51,74386,74387,74389,74391],{"class":53,"line":34023},[51,74388,70456],{"class":69},[51,74390,70459],{"class":57},[51,74392,11237],{"class":65},[51,74394,74395],{"class":53,"line":34029},[51,74396,74397],{"class":601},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[51,74399,74400],{"class":53,"line":34035},[51,74401,74402],{"class":601},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[51,74404,74405,74407,74410,74412,74414,74417,74419,74421,74423,74426,74428,74431],{"class":53,"line":34046},[51,74406,58600],{"class":69},[51,74408,74409],{"class":278}," trArr",[51,74411,13948],{"class":69},[51,74413,52337],{"class":65},[51,74415,74416],{"class":57},"map",[51,74418,546],{"class":65},[51,74420,54821],{"class":69},[51,74422,2060],{"class":65},[51,74424,74425],{"class":248},"ele",[51,74427,12819],{"class":65},[51,74429,74430],{"class":248},"index",[51,74432,12826],{"class":65},[51,74434,74435,74437],{"class":53,"line":34057},[51,74436,15136],{"class":69},[51,74438,70540],{"class":61},[51,74440,74441],{"class":53,"line":34063},[51,74442,74443],{"class":61},"      \u003Ctr>\n",[51,74445,74446,74448,74450,74452,74455],{"class":53,"line":34080},[51,74447,70545],{"class":61},[51,74449,74425],{"class":65},[51,74451,1100],{"class":61},[51,74453,74454],{"class":65},"unameId",[51,74456,70560],{"class":61},[51,74458,74459,74461,74463,74465,74467],{"class":53,"line":34103},[51,74460,70545],{"class":61},[51,74462,74425],{"class":65},[51,74464,1100],{"class":61},[51,74466,70576],{"class":65},[51,74468,70560],{"class":61},[51,74470,74471,74473,74475,74477,74479],{"class":53,"line":34126},[51,74472,70545],{"class":61},[51,74474,74425],{"class":65},[51,74476,1100],{"class":61},[51,74478,70593],{"class":65},[51,74480,70560],{"class":61},[51,74482,74483,74485,74487,74489,74491],{"class":53,"line":34132},[51,74484,70545],{"class":61},[51,74486,74425],{"class":65},[51,74488,1100],{"class":61},[51,74490,70610],{"class":65},[51,74492,70560],{"class":61},[51,74494,74495,74497,74499,74501,74503],{"class":53,"line":34137},[51,74496,70545],{"class":61},[51,74498,74425],{"class":65},[51,74500,1100],{"class":61},[51,74502,70627],{"class":65},[51,74504,70560],{"class":61},[51,74506,74507,74509,74511,74513,74515],{"class":53,"line":34146},[51,74508,70545],{"class":61},[51,74510,74425],{"class":65},[51,74512,1100],{"class":61},[51,74514,70644],{"class":65},[51,74516,70560],{"class":61},[51,74518,74519,74521,74523,74525,74527],{"class":53,"line":34156},[51,74520,70545],{"class":61},[51,74522,74425],{"class":65},[51,74524,1100],{"class":61},[51,74526,2777],{"class":65},[51,74528,70560],{"class":61},[51,74530,74531],{"class":53,"line":34162},[51,74532,73987],{"class":61},[51,74534,74535,74538,74540],{"class":53,"line":34167},[51,74536,74537],{"class":61},"          \u003Ca href=\"#\" data-id=\"${",[51,74539,74430],{"class":65},[51,74541,74542],{"class":61},"}\">删除\u003C\u002Fa>\n",[51,74544,74545],{"class":53,"line":34173},[51,74546,73997],{"class":61},[51,74548,74549],{"class":53,"line":34186},[51,74550,74551],{"class":61},"      \u003C\u002Ftr>\n",[51,74553,74554],{"class":53,"line":34192},[51,74555,74556],{"class":61},"  `\n",[51,74558,74559],{"class":53,"line":34203},[51,74560,65187],{"class":65},[51,74562,74563,74565,74567],{"class":53,"line":34214},[51,74564,58616],{"class":65},[51,74566,58619],{"class":57},[51,74568,74569],{"class":65},"(trArr)\n",[51,74571,74572],{"class":53,"line":34233},[51,74573,206],{"emptyLinePlaceholder":205},[51,74575,74576],{"class":53,"line":49890},[51,74577,74578],{"class":601},"      \u002F\u002F (2) 把数组转换为字符串join\n",[51,74580,74581],{"class":53,"line":49895},[51,74582,74583],{"class":601},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[51,74585,74586,74588,74590,74593,74596,74598,74601],{"class":53,"line":49904},[51,74587,70471],{"class":65},[51,74589,70],{"class":69},[51,74591,74592],{"class":65}," trArr.",[51,74594,74595],{"class":57},"join",[51,74597,546],{"class":65},[51,74599,74600],{"class":61},"''",[51,74602,282],{"class":65},[51,74604,74605],{"class":53,"line":49913},[51,74606,74607],{"class":601},"      \u002F\u002F 显示共有几条\n",[51,74609,74610,74612,74614,74616,74619,74622,74624,74626],{"class":53,"line":49918},[51,74611,56143],{"class":65},[51,74613,54771],{"class":57},[51,74615,546],{"class":65},[51,74617,74618],{"class":61},"'.total span'",[51,74620,74621],{"class":65},").innerHTML ",[51,74623,70],{"class":69},[51,74625,52337],{"class":65},[51,74627,56203],{"class":278},[51,74629,74630],{"class":53,"line":49923},[51,74631,2577],{"class":65},[51,74633,74634],{"class":53,"line":49928},[51,74635,74636],{"class":601},"    \u002F\u002F render()\n",[51,74638,74639],{"class":53,"line":49941},[51,74640,206],{"emptyLinePlaceholder":205},[51,74642,74643],{"class":53,"line":49946},[51,74644,74645],{"class":601},"    \u002F\u002F 获取DOM对象\n",[51,74647,74648,74650,74652,74654,74656,74658,74660,74662],{"class":53,"line":49955},[51,74649,11605],{"class":69},[51,74651,70193],{"class":278},[51,74653,13948],{"class":69},[51,74655,54768],{"class":65},[51,74657,54771],{"class":57},[51,74659,546],{"class":65},[51,74661,70204],{"class":61},[51,74663,282],{"class":65},[51,74665,74666,74668,74670,74672,74674,74676,74678,74680],{"class":53,"line":49964},[51,74667,11605],{"class":69},[51,74669,70020],{"class":278},[51,74671,13948],{"class":69},[51,74673,54768],{"class":65},[51,74675,54771],{"class":57},[51,74677,546],{"class":65},[51,74679,70031],{"class":61},[51,74681,282],{"class":65},[51,74683,74684,74686,74688,74690,74692,74694,74696,74698],{"class":53,"line":49981},[51,74685,11605],{"class":69},[51,74687,16073],{"class":278},[51,74689,13948],{"class":69},[51,74691,54768],{"class":65},[51,74693,54771],{"class":57},[51,74695,546],{"class":65},[51,74697,70050],{"class":61},[51,74699,282],{"class":65},[51,74701,74703,74705,74707,74709,74711,74713,74715,74717],{"class":53,"line":74702},231,[51,74704,11605],{"class":69},[51,74706,70079],{"class":278},[51,74708,13948],{"class":69},[51,74710,54768],{"class":65},[51,74712,54771],{"class":57},[51,74714,546],{"class":65},[51,74716,70090],{"class":61},[51,74718,282],{"class":65},[51,74720,74722,74724,74726,74728,74730,74732,74734,74736],{"class":53,"line":74721},232,[51,74723,11605],{"class":69},[51,74725,70059],{"class":278},[51,74727,13948],{"class":69},[51,74729,54768],{"class":65},[51,74731,54771],{"class":57},[51,74733,546],{"class":65},[51,74735,70070],{"class":61},[51,74737,282],{"class":65},[51,74739,74741,74743,74745,74747,74749,74751,74753,74755],{"class":53,"line":74740},233,[51,74742,11605],{"class":69},[51,74744,70099],{"class":278},[51,74746,13948],{"class":69},[51,74748,54768],{"class":65},[51,74750,54771],{"class":57},[51,74752,546],{"class":65},[51,74754,70110],{"class":61},[51,74756,282],{"class":65},[51,74758,74760],{"class":53,"line":74759},234,[51,74761,206],{"emptyLinePlaceholder":205},[51,74763,74765],{"class":53,"line":74764},235,[51,74766,74767],{"class":601},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[51,74769,74771,74773,74775,74777,74779,74781,74783,74785,74787],{"class":53,"line":74770},236,[51,74772,70211],{"class":65},[51,74774,58185],{"class":57},[51,74776,546],{"class":65},[51,74778,70218],{"class":61},[51,74780,12819],{"class":65},[51,74782,54821],{"class":69},[51,74784,2060],{"class":65},[51,74786,617],{"class":248},[51,74788,12826],{"class":65},[51,74790,74792],{"class":53,"line":74791},237,[51,74793,74794],{"class":601},"      \u002F\u002F 禁止浏览器跳转\n",[51,74796,74798,74800,74802],{"class":53,"line":74797},238,[51,74799,70238],{"class":65},[51,74801,70241],{"class":57},[51,74803,2366],{"class":65},[51,74805,74807],{"class":53,"line":74806},239,[51,74808,74809],{"class":601},"      \u002F\u002F 非空判断\n",[51,74811,74813],{"class":53,"line":74812},240,[51,74814,74815],{"class":601},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[51,74817,74819],{"class":53,"line":74818},241,[51,74820,74821],{"class":601},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[51,74823,74825,74827,74829,74831,74834,74836,74839,74842,74844,74846],{"class":53,"line":74824},242,[51,74826,54852],{"class":69},[51,74828,2060],{"class":65},[51,74830,768],{"class":69},[51,74832,74833],{"class":65},"uname.value ",[51,74835,71729],{"class":69},[51,74837,74838],{"class":69}," !",[51,74840,74841],{"class":65},"age.value ",[51,74843,71729],{"class":69},[51,74845,74838],{"class":69},[51,74847,74848],{"class":65},"salary.value) {\n",[51,74850,74852,74854,74856,74858,74860],{"class":53,"line":74851},243,[51,74853,15136],{"class":69},[51,74855,70312],{"class":57},[51,74857,546],{"class":65},[51,74859,70317],{"class":61},[51,74861,282],{"class":65},[51,74863,74865],{"class":53,"line":74864},244,[51,74866,52770],{"class":65},[51,74868,74870,74872,74874],{"class":53,"line":74869},245,[51,74871,58379],{"class":65},[51,74873,52256],{"class":57},[51,74875,74876],{"class":65},"({\n",[51,74878,74880],{"class":53,"line":74879},246,[51,74881,74882],{"class":601},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[51,74884,74886],{"class":53,"line":74885},247,[51,74887,74888],{"class":601},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[51,74890,74892],{"class":53,"line":74891},248,[51,74893,74894],{"class":601},"        \u002F\u002F 对象的序号应为数组长度+1\n",[51,74896,74898],{"class":53,"line":74897},249,[51,74899,74900],{"class":601},"        \u002F\u002F unameId: arr.length + 1,\n",[51,74902,74904],{"class":53,"line":74903},250,[51,74905,206],{"emptyLinePlaceholder":205},[51,74907,74909],{"class":53,"line":74908},251,[51,74910,74911],{"class":601},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[51,74913,74915],{"class":53,"line":74914},252,[51,74916,74917],{"class":601},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[51,74919,74921],{"class":53,"line":74920},253,[51,74922,74923],{"class":601},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[51,74925,74927],{"class":53,"line":74926},254,[51,74928,74929],{"class":601},"        \u002F\u002F 0当假看\n",[51,74931,74933,74936,74938,74940,74943,74945,74947,74949,74952,74954,74956,74959,74961],{"class":53,"line":74932},255,[51,74934,74935],{"class":65},"        unameId: arr.",[51,74937,52340],{"class":278},[51,74939,74186],{"class":69},[51,74941,74942],{"class":65}," arr[arr.",[51,74944,52340],{"class":278},[51,74946,52643],{"class":69},[51,74948,25500],{"class":278},[51,74950,74951],{"class":65},"].unameId ",[51,74953,1023],{"class":69},[51,74955,25500],{"class":278},[51,74957,74958],{"class":69}," :",[51,74960,25500],{"class":278},[51,74962,31843],{"class":65},[51,74964,74966],{"class":53,"line":74965},256,[51,74967,70365],{"class":65},[51,74969,74971],{"class":53,"line":74970},257,[51,74972,70370],{"class":65},[51,74974,74976],{"class":53,"line":74975},258,[51,74977,70380],{"class":65},[51,74979,74981],{"class":53,"line":74980},259,[51,74982,70375],{"class":65},[51,74984,74986],{"class":53,"line":74985},260,[51,74987,74988],{"class":65},"        city: city.value,\n",[51,74990,74992],{"class":53,"line":74991},261,[51,74993,74994],{"class":601},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[51,74996,74998],{"class":53,"line":74997},262,[51,74999,75000],{"class":601},"        \u002F\u002F time: new Date().toDateString()\n",[51,75002,75004,75007,75010],{"class":53,"line":75003},263,[51,75005,75006],{"class":65},"        time: ",[51,75008,75009],{"class":57},"getTime",[51,75011,2366],{"class":65},[51,75013,75015],{"class":53,"line":75014},264,[51,75016,65187],{"class":65},[51,75018,75020],{"class":53,"line":75019},265,[51,75021,75022],{"class":601},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[51,75024,75026,75028],{"class":53,"line":75025},266,[51,75027,70440],{"class":57},[51,75029,2366],{"class":65},[51,75031,75033,75035,75037,75039,75041],{"class":53,"line":75032},267,[51,75034,70423],{"class":278},[51,75036,1100],{"class":65},[51,75038,70428],{"class":57},[51,75040,13434],{"class":65},[51,75042,75043],{"class":601},"\u002F\u002F重置表单\n",[51,75045,75047],{"class":53,"line":75046},268,[51,75048,75049],{"class":601},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[51,75051,75053,75056,75058,75060,75063,75065,75067,75069,75071],{"class":53,"line":75052},269,[51,75054,75055],{"class":65},"      localStorage.",[51,75057,72026],{"class":57},[51,75059,546],{"class":65},[51,75061,75062],{"class":61},"'data'",[51,75064,12819],{"class":65},[51,75066,72036],{"class":278},[51,75068,1100],{"class":65},[51,75070,72041],{"class":57},[51,75072,75073],{"class":65},"(arr))\n",[51,75075,75077],{"class":53,"line":75076},270,[51,75078,33836],{"class":65},[51,75080,75082],{"class":53,"line":75081},271,[51,75083,206],{"emptyLinePlaceholder":205},[51,75085,75087],{"class":53,"line":75086},272,[51,75088,75089],{"class":601},"    \u002F\u002F 3.删除业务\n",[51,75091,75093],{"class":53,"line":75092},273,[51,75094,75095],{"class":601},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[51,75097,75099,75101,75103,75105,75107,75109,75111,75113,75115],{"class":53,"line":75098},274,[51,75100,70713],{"class":65},[51,75102,58185],{"class":57},[51,75104,546],{"class":65},[51,75106,58190],{"class":61},[51,75108,12819],{"class":65},[51,75110,54821],{"class":69},[51,75112,2060],{"class":65},[51,75114,617],{"class":248},[51,75116,12826],{"class":65},[51,75118,75120],{"class":53,"line":75119},275,[51,75121,75122],{"class":601},"      \u002F\u002F 判断是否点击的是删除按钮\n",[51,75124,75126,75128,75130,75132,75134],{"class":53,"line":75125},276,[51,75127,54852],{"class":69},[51,75129,67406],{"class":65},[51,75131,54858],{"class":69},[51,75133,68628],{"class":61},[51,75135,12826],{"class":65},[51,75137,75139],{"class":53,"line":75138},277,[51,75140,75141],{"class":601},"        \u002F\u002F alert(1)\n",[51,75143,75145],{"class":53,"line":75144},278,[51,75146,75147],{"class":601},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[51,75149,75151],{"class":53,"line":75150},279,[51,75152,75153],{"class":601},"        \u002F\u002F console.log(e.target)\n",[51,75155,75157],{"class":53,"line":75156},280,[51,75158,75159],{"class":601},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[51,75161,75163],{"class":53,"line":75162},281,[51,75164,206],{"emptyLinePlaceholder":205},[51,75166,75168],{"class":53,"line":75167},282,[51,75169,75170],{"class":601},"        \u002F\u002F 确认框，确然是否真的要删除\n",[51,75172,75174],{"class":53,"line":75173},283,[51,75175,75176],{"class":601},"        \u002F\u002F confirm()为确认框\n",[51,75178,75180],{"class":53,"line":75179},284,[51,75181,75182],{"class":601},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[51,75184,75186,75188,75190,75193,75195,75198],{"class":53,"line":75185},285,[51,75187,369],{"class":69},[51,75189,2060],{"class":65},[51,75191,75192],{"class":57},"confirm",[51,75194,546],{"class":65},[51,75196,75197],{"class":61},"'您确定要删除这条数据吗？'",[51,75199,75200],{"class":65},")) {\n",[51,75202,75204,75207,75209,75211,75213],{"class":53,"line":75203},286,[51,75205,75206],{"class":65},"          arr.",[51,75208,58382],{"class":57},[51,75210,70766],{"class":65},[51,75212,759],{"class":278},[51,75214,282],{"class":65},[51,75216,75218],{"class":53,"line":75217},287,[51,75219,75220],{"class":601},"          \u002F\u002F 3.4 重新渲染页面\n",[51,75222,75224,75227],{"class":53,"line":75223},288,[51,75225,75226],{"class":57},"          render",[51,75228,2366],{"class":65},[51,75230,75232],{"class":53,"line":75231},289,[51,75233,75234],{"class":601},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[51,75236,75238,75241,75243,75245,75247,75249,75251,75253,75255],{"class":53,"line":75237},290,[51,75239,75240],{"class":65},"          localStorage.",[51,75242,72026],{"class":57},[51,75244,546],{"class":65},[51,75246,75062],{"class":61},[51,75248,12819],{"class":65},[51,75250,72036],{"class":278},[51,75252,1100],{"class":65},[51,75254,72041],{"class":57},[51,75256,75073],{"class":65},[51,75258,75260],{"class":53,"line":75259},291,[51,75261,2917],{"class":65},[51,75263,75265],{"class":53,"line":75264},292,[51,75266,52770],{"class":65},[51,75268,75270],{"class":53,"line":75269},293,[51,75271,206],{"emptyLinePlaceholder":205},[51,75273,75275],{"class":53,"line":75274},294,[51,75276,33836],{"class":65},[51,75278,75280],{"class":53,"line":75279},295,[51,75281,206],{"emptyLinePlaceholder":205},[51,75283,75285,75287,75289],{"class":53,"line":75284},296,[51,75286,52789],{"class":65},[51,75288,52185],{"class":51672},[51,75290,51679],{"class":65},[51,75292,75294,75296,75298],{"class":53,"line":75293},297,[51,75295,52157],{"class":65},[51,75297,52172],{"class":51672},[51,75299,51679],{"class":65},[51,75301,75303],{"class":53,"line":75302},298,[51,75304,206],{"emptyLinePlaceholder":205},[51,75306,75308,75310,75312],{"class":53,"line":75307},299,[51,75309,52157],{"class":65},[51,75311,51007],{"class":51672},[51,75313,51679],{"class":65},[486,75315,75317],{"id":75316},"_36-正则表达式","3.6 正则表达式",[10,75319,75320],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[10,75322,75323],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[10,75325,75326],{},"正则表达式的作用：",[1549,75328,75329,75336,75342],{},[22,75330,75331,75332,75335],{},"表单验证（ ",[691,75333,75334],{},"匹配"," ）",[22,75337,75338,75339,75335],{},"过滤敏感词（ ",[691,75340,75341],{},"替换",[22,75343,75344,75345,75335],{},"字符串中提取我们想要的部分（ ",[691,75346,75347],{},"提取",[513,75349,75351],{"id":75350},"_361-语法","3.6.1 语法",[10,75353,75354],{},"正则表达式使用步骤：",[19,75356,75357,75360],{},[22,75358,75359],{},"定义规则",[22,75361,75362],{},"查找是否匹配",[10,75364,75365],{},"正则表达式里边不需要写引号",[10,75367,75368],{},[460,75369],{"alt":46,"src":75370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[10,75372,75373],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[10,75375,75376],{},"reg.test(str)",[10,75378,75379],{},[460,75380],{"alt":46,"src":75381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[10,75383,75384],{},[460,75385],{"alt":46,"src":75386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[513,75388,75390],{"id":75389},"_362-元字符","3.6.2 元字符",[19,75392,75393,75396,75399,75402,75409],{},[22,75394,75395],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[22,75397,75398],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[22,75400,75401],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[22,75403,75404,75405],{},"正则验证工具：",[780,75406,75407],{"href":75407,"rel":75408},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24246],[22,75410,75411],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22381,75413,75415],{"id":75414},"_3621-边界符","3.6.2.1 边界符",[10,75417,75418],{},[460,75419],{"alt":46,"src":75420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[10,75422,75423],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[10,75425,75426],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[10,75428,75429],{},"只匹配一次",[10,75431,75432],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22381,75434,75436],{"id":75435},"_3622-量词","3.6.2.2 量词",[10,75438,75439],{},[460,75440],{"alt":46,"src":75441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[10,75443,75444],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22381,75446,75448],{"id":75447},"_3623-元字符","3.6.2.3 元字符",[10,75450,75451],{},[460,75452],{"alt":46,"src":75453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[10,75455,75456],{},"匹配的是a或b或c []只选一个",[10,75458,75459],{},[460,75460],{"alt":46,"src":75461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[10,75463,75464],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[10,75466,75467],{},[460,75468],{"alt":46,"src":75469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[10,75471,75472],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[10,75474,75475],{},[460,75476],{"alt":46,"src":75477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[41,75479,75481],{"className":51005,"code":75480,"language":51007,"meta":46,"style":46},"\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",[48,75482,75483,75493,75507,75511,75519,75533,75553,75565,75573,75577,75585,75593,75598,75629,75656,75684,75688,75693,75721,75752,75757,75762,75793,75825,75857,75861,75866,75897,75927,75957,75961,75966,75997,76028,76058,76088,76092,76097,76130,76134,76139,76170,76201,76205,76210,76241,76271,76302,76306,76311,76343,76374,76405,76432,76463,76495,76528,76559,76590,76622,76653,76661,76669,76673],{"__ignoreMap":46},[51,75484,75485,75487,75489,75491],{"class":53,"line":54},[51,75486,51669],{"class":65},[51,75488,51673],{"class":51672},[51,75490,51676],{"class":57},[51,75492,51679],{"class":65},[51,75494,75495,75497,75499,75501,75503,75505],{"class":53,"line":185},[51,75496,1452],{"class":65},[51,75498,51007],{"class":51672},[51,75500,51688],{"class":57},[51,75502,70],{"class":65},[51,75504,51693],{"class":61},[51,75506,51679],{"class":65},[51,75508,75509],{"class":53,"line":202},[51,75510,206],{"emptyLinePlaceholder":205},[51,75512,75513,75515,75517],{"class":53,"line":209},[51,75514,1452],{"class":65},[51,75516,51706],{"class":51672},[51,75518,51679],{"class":65},[51,75520,75521,75523,75525,75527,75529,75531],{"class":53,"line":223},[51,75522,52516],{"class":65},[51,75524,51716],{"class":51672},[51,75526,51719],{"class":57},[51,75528,70],{"class":65},[51,75530,51724],{"class":61},[51,75532,51679],{"class":65},[51,75534,75535,75537,75539,75541,75543,75545,75547,75549,75551],{"class":53,"line":237},[51,75536,52516],{"class":65},[51,75538,51716],{"class":51672},[51,75540,15304],{"class":57},[51,75542,70],{"class":65},[51,75544,51763],{"class":61},[51,75546,51743],{"class":57},[51,75548,70],{"class":65},[51,75550,51770],{"class":61},[51,75552,51679],{"class":65},[51,75554,75555,75557,75559,75561,75563],{"class":53,"line":242},[51,75556,52516],{"class":65},[51,75558,51779],{"class":51672},[51,75560,51782],{"class":65},[51,75562,51779],{"class":51672},[51,75564,51679],{"class":65},[51,75566,75567,75569,75571],{"class":53,"line":257},[51,75568,52157],{"class":65},[51,75570,51706],{"class":51672},[51,75572,51679],{"class":65},[51,75574,75575],{"class":53,"line":262},[51,75576,206],{"emptyLinePlaceholder":205},[51,75578,75579,75581,75583],{"class":53,"line":285},[51,75580,1452],{"class":65},[51,75582,52172],{"class":51672},[51,75584,51679],{"class":65},[51,75586,75587,75589,75591],{"class":53,"line":296},[51,75588,52516],{"class":65},[51,75590,52185],{"class":51672},[51,75592,51679],{"class":65},[51,75594,75595],{"class":53,"line":307},[51,75596,75597],{"class":601},"    \u002F\u002F 元字符中\n",[51,75599,75600,75602,75604,75606,75608,75611,75613,75615,75618,75620,75623,75626],{"class":53,"line":324},[51,75601,74125],{"class":65},[51,75603,58619],{"class":57},[51,75605,546],{"class":65},[51,75607,1126],{"class":61},[51,75609,75610],{"class":48349},"哈",[51,75612,1126],{"class":61},[51,75614,1100],{"class":65},[51,75616,75617],{"class":57},"test",[51,75619,546],{"class":65},[51,75621,75622],{"class":61},"'哈'",[51,75624,75625],{"class":65},"))  ",[51,75627,75628],{"class":601},"\u002F\u002Ftrue\n",[51,75630,75631,75633,75635,75637,75639,75641,75643,75645,75647,75649,75652,75654],{"class":53,"line":329},[51,75632,74125],{"class":65},[51,75634,58619],{"class":57},[51,75636,546],{"class":65},[51,75638,1126],{"class":61},[51,75640,75610],{"class":48349},[51,75642,1126],{"class":61},[51,75644,1100],{"class":65},[51,75646,75617],{"class":57},[51,75648,546],{"class":65},[51,75650,75651],{"class":61},"'哈哈'",[51,75653,75625],{"class":65},[51,75655,75628],{"class":601},[51,75657,75658,75660,75662,75664,75666,75668,75670,75672,75674,75676,75679,75682],{"class":53,"line":334},[51,75659,74125],{"class":65},[51,75661,58619],{"class":57},[51,75663,546],{"class":65},[51,75665,1126],{"class":61},[51,75667,75610],{"class":48349},[51,75669,1126],{"class":61},[51,75671,1100],{"class":65},[51,75673,75617],{"class":57},[51,75675,546],{"class":65},[51,75677,75678],{"class":61},"'二哈'",[51,75680,75681],{"class":65},"))   ",[51,75683,75628],{"class":601},[51,75685,75686],{"class":53,"line":340},[51,75687,206],{"emptyLinePlaceholder":205},[51,75689,75690],{"class":53,"line":345},[51,75691,75692],{"class":601},"    \u002F\u002F 1.边界符\n",[51,75694,75695,75697,75699,75701,75703,75705,75707,75709,75711,75713,75715,75717,75719],{"class":53,"line":357},[51,75696,74125],{"class":65},[51,75698,58619],{"class":57},[51,75700,546],{"class":65},[51,75702,1126],{"class":61},[51,75704,1508],{"class":69},[51,75706,75610],{"class":48349},[51,75708,1126],{"class":61},[51,75710,1100],{"class":65},[51,75712,75617],{"class":57},[51,75714,546],{"class":65},[51,75716,75622],{"class":61},[51,75718,75625],{"class":65},[51,75720,75628],{"class":601},[51,75722,75723,75725,75727,75729,75731,75733,75735,75737,75739,75741,75743,75745,75747,75749],{"class":53,"line":366},[51,75724,74125],{"class":65},[51,75726,58619],{"class":57},[51,75728,546],{"class":65},[51,75730,1126],{"class":61},[51,75732,1508],{"class":69},[51,75734,75610],{"class":48349},[51,75736,844],{"class":69},[51,75738,1126],{"class":61},[51,75740,1100],{"class":65},[51,75742,75617],{"class":57},[51,75744,546],{"class":65},[51,75746,75651],{"class":61},[51,75748,75625],{"class":65},[51,75750,75751],{"class":601},"\u002F\u002Ffalse\n",[51,75753,75754],{"class":53,"line":383},[51,75755,75756],{"class":601},"    \u002F\u002F 2.量词\n",[51,75758,75759],{"class":53,"line":392},[51,75760,75761],{"class":601},"    \u002F\u002F 量词 * 类似于 >= 0\n",[51,75763,75764,75766,75768,75770,75772,75774,75776,75779,75781,75783,75785,75787,75789,75791],{"class":53,"line":403},[51,75765,74125],{"class":65},[51,75767,58619],{"class":57},[51,75769,546],{"class":65},[51,75771,1126],{"class":61},[51,75773,1508],{"class":69},[51,75775,75610],{"class":48349},[51,75777,75778],{"class":69},"*$",[51,75780,1126],{"class":61},[51,75782,1100],{"class":65},[51,75784,75617],{"class":57},[51,75786,546],{"class":65},[51,75788,75651],{"class":61},[51,75790,75625],{"class":65},[51,75792,75628],{"class":601},[51,75794,75795,75797,75799,75801,75803,75805,75807,75809,75811,75813,75815,75817,75820,75822],{"class":53,"line":409},[51,75796,74125],{"class":65},[51,75798,58619],{"class":57},[51,75800,546],{"class":65},[51,75802,1126],{"class":61},[51,75804,1508],{"class":69},[51,75806,75610],{"class":48349},[51,75808,75778],{"class":69},[51,75810,1126],{"class":61},[51,75812,1100],{"class":65},[51,75814,75617],{"class":57},[51,75816,546],{"class":65},[51,75818,75819],{"class":61},"'二哈好傻'",[51,75821,75625],{"class":65},[51,75823,75824],{"class":601},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[51,75826,75827,75829,75831,75833,75835,75837,75839,75841,75843,75845,75847,75849,75852,75854],{"class":53,"line":414},[51,75828,74125],{"class":65},[51,75830,58619],{"class":57},[51,75832,546],{"class":65},[51,75834,1126],{"class":61},[51,75836,1508],{"class":69},[51,75838,75610],{"class":48349},[51,75840,75778],{"class":69},[51,75842,1126],{"class":61},[51,75844,1100],{"class":65},[51,75846,75617],{"class":57},[51,75848,546],{"class":65},[51,75850,75851],{"class":61},"'哈好哈'",[51,75853,75681],{"class":65},[51,75855,75856],{"class":601},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[51,75858,75859],{"class":53,"line":433},[51,75860,206],{"emptyLinePlaceholder":205},[51,75862,75863],{"class":53,"line":439},[51,75864,75865],{"class":601},"    \u002F\u002F +类似于>=1\n",[51,75867,75868,75870,75872,75874,75876,75878,75880,75883,75885,75887,75889,75891,75893,75895],{"class":53,"line":444},[51,75869,74125],{"class":65},[51,75871,58619],{"class":57},[51,75873,546],{"class":65},[51,75875,1126],{"class":61},[51,75877,1508],{"class":69},[51,75879,75610],{"class":48349},[51,75881,75882],{"class":69},"+$",[51,75884,1126],{"class":61},[51,75886,1100],{"class":65},[51,75888,75617],{"class":57},[51,75890,546],{"class":65},[51,75892,75651],{"class":61},[51,75894,75625],{"class":65},[51,75896,75628],{"class":601},[51,75898,75899,75901,75903,75905,75907,75909,75911,75913,75915,75917,75919,75921,75923,75925],{"class":53,"line":453},[51,75900,74125],{"class":65},[51,75902,58619],{"class":57},[51,75904,546],{"class":65},[51,75906,1126],{"class":61},[51,75908,1508],{"class":69},[51,75910,75610],{"class":48349},[51,75912,75882],{"class":69},[51,75914,1126],{"class":61},[51,75916,1100],{"class":65},[51,75918,75617],{"class":57},[51,75920,546],{"class":65},[51,75922,75819],{"class":61},[51,75924,75625],{"class":65},[51,75926,75824],{"class":601},[51,75928,75929,75931,75933,75935,75937,75939,75941,75943,75945,75947,75949,75951,75953,75955],{"class":53,"line":2174},[51,75930,74125],{"class":65},[51,75932,58619],{"class":57},[51,75934,546],{"class":65},[51,75936,1126],{"class":61},[51,75938,1508],{"class":69},[51,75940,75610],{"class":48349},[51,75942,75882],{"class":69},[51,75944,1126],{"class":61},[51,75946,1100],{"class":65},[51,75948,75617],{"class":57},[51,75950,546],{"class":65},[51,75952,75851],{"class":61},[51,75954,75681],{"class":65},[51,75956,75751],{"class":601},[51,75958,75959],{"class":53,"line":2965},[51,75960,206],{"emptyLinePlaceholder":205},[51,75962,75963],{"class":53,"line":2979},[51,75964,75965],{"class":601},"    \u002F\u002F ?类似于0次或一次\n",[51,75967,75968,75970,75972,75974,75976,75978,75981,75983,75985,75987,75989,75991,75993,75995],{"class":53,"line":2987},[51,75969,74125],{"class":65},[51,75971,58619],{"class":57},[51,75973,546],{"class":65},[51,75975,1126],{"class":61},[51,75977,1508],{"class":69},[51,75979,75980],{"class":48349},"哈？",[51,75982,844],{"class":69},[51,75984,1126],{"class":61},[51,75986,1100],{"class":65},[51,75988,75617],{"class":57},[51,75990,546],{"class":65},[51,75992,74600],{"class":61},[51,75994,75681],{"class":65},[51,75996,75628],{"class":601},[51,75998,75999,76001,76003,76005,76007,76009,76011,76014,76016,76018,76020,76022,76024,76026],{"class":53,"line":2992},[51,76000,74125],{"class":65},[51,76002,58619],{"class":57},[51,76004,546],{"class":65},[51,76006,1126],{"class":61},[51,76008,1508],{"class":69},[51,76010,75610],{"class":48349},[51,76012,76013],{"class":69},"?$",[51,76015,1126],{"class":61},[51,76017,1100],{"class":65},[51,76019,75617],{"class":57},[51,76021,546],{"class":65},[51,76023,75651],{"class":61},[51,76025,75625],{"class":65},[51,76027,75751],{"class":601},[51,76029,76030,76032,76034,76036,76038,76040,76042,76044,76046,76048,76050,76052,76054,76056],{"class":53,"line":2998},[51,76031,74125],{"class":65},[51,76033,58619],{"class":57},[51,76035,546],{"class":65},[51,76037,1126],{"class":61},[51,76039,1508],{"class":69},[51,76041,75610],{"class":48349},[51,76043,76013],{"class":69},[51,76045,1126],{"class":61},[51,76047,1100],{"class":65},[51,76049,75617],{"class":57},[51,76051,546],{"class":65},[51,76053,75819],{"class":61},[51,76055,75625],{"class":65},[51,76057,75824],{"class":601},[51,76059,76060,76062,76064,76066,76068,76070,76072,76074,76076,76078,76080,76082,76084,76086],{"class":53,"line":3004},[51,76061,74125],{"class":65},[51,76063,58619],{"class":57},[51,76065,546],{"class":65},[51,76067,1126],{"class":61},[51,76069,1508],{"class":69},[51,76071,75610],{"class":48349},[51,76073,76013],{"class":69},[51,76075,1126],{"class":61},[51,76077,1100],{"class":65},[51,76079,75617],{"class":57},[51,76081,546],{"class":65},[51,76083,75851],{"class":61},[51,76085,75625],{"class":65},[51,76087,75751],{"class":601},[51,76089,76090],{"class":53,"line":3009},[51,76091,206],{"emptyLinePlaceholder":205},[51,76093,76094],{"class":53,"line":8332},[51,76095,76096],{"class":601},"    \u002F\u002F {n}写几，就必须出现几次\n",[51,76098,76099,76101,76103,76105,76107,76109,76111,76114,76116,76118,76120,76122,76125,76128],{"class":53,"line":8356},[51,76100,74125],{"class":65},[51,76102,58619],{"class":57},[51,76104,546],{"class":65},[51,76106,1126],{"class":61},[51,76108,1508],{"class":69},[51,76110,75610],{"class":48349},[51,76112,76113],{"class":69},"{4}$",[51,76115,1126],{"class":61},[51,76117,1100],{"class":65},[51,76119,75617],{"class":57},[51,76121,546],{"class":65},[51,76123,76124],{"class":61},"'哈哈哈哈'",[51,76126,76127],{"class":65},")) ",[51,76129,75628],{"class":601},[51,76131,76132],{"class":53,"line":8361},[51,76133,206],{"emptyLinePlaceholder":205},[51,76135,76136],{"class":53,"line":8367},[51,76137,76138],{"class":601},"    \u002F\u002F {n,}大于等于n次\n",[51,76140,76141,76143,76145,76147,76149,76151,76153,76156,76158,76160,76162,76164,76166,76168],{"class":53,"line":8394},[51,76142,74125],{"class":65},[51,76144,58619],{"class":57},[51,76146,546],{"class":65},[51,76148,1126],{"class":61},[51,76150,1508],{"class":69},[51,76152,75610],{"class":48349},[51,76154,76155],{"class":69},"{4,}$",[51,76157,1126],{"class":61},[51,76159,1100],{"class":65},[51,76161,75617],{"class":57},[51,76163,546],{"class":65},[51,76165,76124],{"class":61},[51,76167,76127],{"class":65},[51,76169,75628],{"class":601},[51,76171,76172,76174,76176,76178,76180,76182,76184,76186,76188,76190,76192,76194,76197,76199],{"class":53,"line":8399},[51,76173,74125],{"class":65},[51,76175,58619],{"class":57},[51,76177,546],{"class":65},[51,76179,1126],{"class":61},[51,76181,1508],{"class":69},[51,76183,75610],{"class":48349},[51,76185,76155],{"class":69},[51,76187,1126],{"class":61},[51,76189,1100],{"class":65},[51,76191,75617],{"class":57},[51,76193,546],{"class":65},[51,76195,76196],{"class":61},"'哈哈哈哈哈'",[51,76198,76127],{"class":65},[51,76200,75628],{"class":601},[51,76202,76203],{"class":53,"line":8405},[51,76204,206],{"emptyLinePlaceholder":205},[51,76206,76207],{"class":53,"line":8417},[51,76208,76209],{"class":601},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[51,76211,76212,76214,76216,76218,76220,76222,76224,76227,76229,76231,76233,76235,76237,76239],{"class":53,"line":8429},[51,76213,74125],{"class":65},[51,76215,58619],{"class":57},[51,76217,546],{"class":65},[51,76219,1126],{"class":61},[51,76221,1508],{"class":69},[51,76223,75610],{"class":48349},[51,76225,76226],{"class":69},"{4,6}$",[51,76228,1126],{"class":61},[51,76230,1100],{"class":65},[51,76232,75617],{"class":57},[51,76234,546],{"class":65},[51,76236,76124],{"class":61},[51,76238,76127],{"class":65},[51,76240,75628],{"class":601},[51,76242,76243,76245,76247,76249,76251,76253,76255,76257,76259,76261,76263,76265,76267,76269],{"class":53,"line":8441},[51,76244,74125],{"class":65},[51,76246,58619],{"class":57},[51,76248,546],{"class":65},[51,76250,1126],{"class":61},[51,76252,1508],{"class":69},[51,76254,75610],{"class":48349},[51,76256,76226],{"class":69},[51,76258,1126],{"class":61},[51,76260,1100],{"class":65},[51,76262,75617],{"class":57},[51,76264,546],{"class":65},[51,76266,76196],{"class":61},[51,76268,76127],{"class":65},[51,76270,75628],{"class":601},[51,76272,76273,76275,76277,76279,76281,76283,76285,76287,76289,76291,76293,76295,76298,76300],{"class":53,"line":10100},[51,76274,74125],{"class":65},[51,76276,58619],{"class":57},[51,76278,546],{"class":65},[51,76280,1126],{"class":61},[51,76282,1508],{"class":69},[51,76284,75610],{"class":48349},[51,76286,76226],{"class":69},[51,76288,1126],{"class":61},[51,76290,1100],{"class":65},[51,76292,75617],{"class":57},[51,76294,546],{"class":65},[51,76296,76297],{"class":61},"'哈哈哈哈哈哈哈'",[51,76299,76127],{"class":65},[51,76301,75751],{"class":601},[51,76303,76304],{"class":53,"line":10125},[51,76305,206],{"emptyLinePlaceholder":205},[51,76307,76308],{"class":53,"line":10148},[51,76309,76310],{"class":601},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[51,76312,76313,76315,76317,76319,76321,76323,76326,76328,76330,76332,76334,76336,76339,76341],{"class":53,"line":10172},[51,76314,74125],{"class":65},[51,76316,58619],{"class":57},[51,76318,546],{"class":65},[51,76320,1126],{"class":61},[51,76322,1508],{"class":69},[51,76324,76325],{"class":278},"[abc]",[51,76327,844],{"class":69},[51,76329,1126],{"class":61},[51,76331,1100],{"class":65},[51,76333,75617],{"class":57},[51,76335,546],{"class":65},[51,76337,76338],{"class":61},"'a'",[51,76340,75625],{"class":65},[51,76342,75628],{"class":601},[51,76344,76345,76347,76349,76351,76353,76355,76357,76359,76361,76363,76365,76367,76370,76372],{"class":53,"line":10177},[51,76346,74125],{"class":65},[51,76348,58619],{"class":57},[51,76350,546],{"class":65},[51,76352,1126],{"class":61},[51,76354,1508],{"class":69},[51,76356,76325],{"class":278},[51,76358,844],{"class":69},[51,76360,1126],{"class":61},[51,76362,1100],{"class":65},[51,76364,75617],{"class":57},[51,76366,546],{"class":65},[51,76368,76369],{"class":61},"'b'",[51,76371,75625],{"class":65},[51,76373,75628],{"class":601},[51,76375,76376,76378,76380,76382,76384,76386,76388,76390,76392,76394,76396,76398,76401,76403],{"class":53,"line":10182},[51,76377,74125],{"class":65},[51,76379,58619],{"class":57},[51,76381,546],{"class":65},[51,76383,1126],{"class":61},[51,76385,1508],{"class":69},[51,76387,76325],{"class":278},[51,76389,844],{"class":69},[51,76391,1126],{"class":61},[51,76393,1100],{"class":65},[51,76395,75617],{"class":57},[51,76397,546],{"class":65},[51,76399,76400],{"class":61},"'c'",[51,76402,75625],{"class":65},[51,76404,75628],{"class":601},[51,76406,76407,76409,76411,76413,76415,76417,76419,76421,76423,76425,76428,76430],{"class":53,"line":10187},[51,76408,74125],{"class":65},[51,76410,58619],{"class":57},[51,76412,546],{"class":65},[51,76414,1126],{"class":61},[51,76416,76325],{"class":278},[51,76418,1126],{"class":61},[51,76420,1100],{"class":65},[51,76422,75617],{"class":57},[51,76424,546],{"class":65},[51,76426,76427],{"class":61},"'ab'",[51,76429,75625],{"class":65},[51,76431,75628],{"class":601},[51,76433,76434,76436,76438,76440,76442,76444,76446,76448,76450,76452,76454,76456,76458,76460],{"class":53,"line":10196},[51,76435,74125],{"class":65},[51,76437,58619],{"class":57},[51,76439,546],{"class":65},[51,76441,1126],{"class":61},[51,76443,1508],{"class":69},[51,76445,76325],{"class":278},[51,76447,844],{"class":69},[51,76449,1126],{"class":61},[51,76451,1100],{"class":65},[51,76453,75617],{"class":57},[51,76455,546],{"class":65},[51,76457,76427],{"class":61},[51,76459,75625],{"class":65},[51,76461,76462],{"class":601},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[51,76464,76465,76467,76469,76471,76473,76475,76477,76480,76482,76484,76486,76488,76490,76492],{"class":53,"line":10201},[51,76466,74125],{"class":65},[51,76468,58619],{"class":57},[51,76470,546],{"class":65},[51,76472,1126],{"class":61},[51,76474,1508],{"class":69},[51,76476,76325],{"class":278},[51,76478,76479],{"class":69},"{2}$",[51,76481,1126],{"class":61},[51,76483,1100],{"class":65},[51,76485,75617],{"class":57},[51,76487,546],{"class":65},[51,76489,76427],{"class":61},[51,76491,75625],{"class":65},[51,76493,76494],{"class":601},"\u002F\u002Ftrue   可以选两个\n",[51,76496,76497,76499,76501,76503,76505,76507,76510,76512,76514,76516,76518,76520,76523,76525],{"class":53,"line":10207},[51,76498,74125],{"class":65},[51,76500,58619],{"class":57},[51,76502,546],{"class":65},[51,76504,1126],{"class":61},[51,76506,1508],{"class":69},[51,76508,76509],{"class":278},"[a-z]",[51,76511,844],{"class":69},[51,76513,1126],{"class":61},[51,76515,1100],{"class":65},[51,76517,75617],{"class":57},[51,76519,546],{"class":65},[51,76521,76522],{"class":61},"'p'",[51,76524,75681],{"class":65},[51,76526,76527],{"class":601},"\u002F\u002Ftrue   依然只能选一个\n",[51,76529,76530,76532,76534,76536,76538,76540,76543,76545,76547,76549,76551,76553,76555,76557],{"class":53,"line":10228},[51,76531,74125],{"class":65},[51,76533,58619],{"class":57},[51,76535,546],{"class":65},[51,76537,1126],{"class":61},[51,76539,1508],{"class":69},[51,76541,76542],{"class":278},"[A-Z]",[51,76544,844],{"class":69},[51,76546,1126],{"class":61},[51,76548,1100],{"class":65},[51,76550,75617],{"class":57},[51,76552,546],{"class":65},[51,76554,76522],{"class":61},[51,76556,75681],{"class":65},[51,76558,75751],{"class":601},[51,76560,76561,76563,76565,76567,76569,76571,76573,76575,76577,76579,76581,76583,76586,76588],{"class":53,"line":10234},[51,76562,74125],{"class":65},[51,76564,58619],{"class":57},[51,76566,546],{"class":65},[51,76568,1126],{"class":61},[51,76570,1508],{"class":69},[51,76572,76542],{"class":278},[51,76574,844],{"class":69},[51,76576,1126],{"class":61},[51,76578,1100],{"class":65},[51,76580,75617],{"class":57},[51,76582,546],{"class":65},[51,76584,76585],{"class":61},"'P'",[51,76587,75681],{"class":65},[51,76589,75628],{"class":601},[51,76591,76592,76594,76596,76598,76600,76602,76605,76607,76609,76611,76613,76615,76618,76620],{"class":53,"line":10248},[51,76593,74125],{"class":65},[51,76595,58619],{"class":57},[51,76597,546],{"class":65},[51,76599,1126],{"class":61},[51,76601,1508],{"class":69},[51,76603,76604],{"class":278},"[0-9]",[51,76606,844],{"class":69},[51,76608,1126],{"class":61},[51,76610,1100],{"class":65},[51,76612,75617],{"class":57},[51,76614,546],{"class":65},[51,76616,76617],{"class":61},"'0'",[51,76619,75681],{"class":65},[51,76621,75628],{"class":601},[51,76623,76624,76626,76628,76630,76632,76634,76637,76639,76641,76643,76645,76647,76649,76651],{"class":53,"line":10254},[51,76625,74125],{"class":65},[51,76627,58619],{"class":57},[51,76629,546],{"class":65},[51,76631,1126],{"class":61},[51,76633,1508],{"class":69},[51,76635,76636],{"class":278},"[a-zA-Z0-9]",[51,76638,844],{"class":69},[51,76640,1126],{"class":61},[51,76642,1100],{"class":65},[51,76644,75617],{"class":57},[51,76646,546],{"class":65},[51,76648,76522],{"class":61},[51,76650,75625],{"class":65},[51,76652,75628],{"class":601},[51,76654,76655,76657,76659],{"class":53,"line":10281},[51,76656,52789],{"class":65},[51,76658,52185],{"class":51672},[51,76660,51679],{"class":65},[51,76662,76663,76665,76667],{"class":53,"line":10290},[51,76664,52157],{"class":65},[51,76666,52172],{"class":51672},[51,76668,51679],{"class":65},[51,76670,76671],{"class":53,"line":10296},[51,76672,206],{"emptyLinePlaceholder":205},[51,76674,76675,76677,76679],{"class":53,"line":10304},[51,76676,52157],{"class":65},[51,76678,51007],{"class":51672},[51,76680,51679],{"class":65},[22381,76682,76684],{"id":76683},"_3624-修饰符","3.6.2.4 修饰符",[10,76686,76687],{},[460,76688],{"alt":46,"src":76689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[10,76691,76692],{},"replace是个方法，使用的时候一定不要忘记括号()",[10,76694,76695],{},[460,76696],{"alt":46,"src":76697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[41,76699,76701],{"className":51005,"code":76700,"language":51007,"meta":46,"style":46},"\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",[48,76702,76703,76713,76727,76735,76749,76769,76781,76789,76797,76805,76837,76868,76873,76905,76916,76949,76958,76966,76974],{"__ignoreMap":46},[51,76704,76705,76707,76709,76711],{"class":53,"line":54},[51,76706,51669],{"class":65},[51,76708,51673],{"class":51672},[51,76710,51676],{"class":57},[51,76712,51679],{"class":65},[51,76714,76715,76717,76719,76721,76723,76725],{"class":53,"line":185},[51,76716,1452],{"class":65},[51,76718,51007],{"class":51672},[51,76720,51688],{"class":57},[51,76722,70],{"class":65},[51,76724,51693],{"class":61},[51,76726,51679],{"class":65},[51,76728,76729,76731,76733],{"class":53,"line":202},[51,76730,1452],{"class":65},[51,76732,51706],{"class":51672},[51,76734,51679],{"class":65},[51,76736,76737,76739,76741,76743,76745,76747],{"class":53,"line":209},[51,76738,52516],{"class":65},[51,76740,51716],{"class":51672},[51,76742,51719],{"class":57},[51,76744,70],{"class":65},[51,76746,51724],{"class":61},[51,76748,51679],{"class":65},[51,76750,76751,76753,76755,76757,76759,76761,76763,76765,76767],{"class":53,"line":223},[51,76752,52516],{"class":65},[51,76754,51716],{"class":51672},[51,76756,15304],{"class":57},[51,76758,70],{"class":65},[51,76760,51763],{"class":61},[51,76762,51743],{"class":57},[51,76764,70],{"class":65},[51,76766,51770],{"class":61},[51,76768,51679],{"class":65},[51,76770,76771,76773,76775,76777,76779],{"class":53,"line":237},[51,76772,52516],{"class":65},[51,76774,51779],{"class":51672},[51,76776,51782],{"class":65},[51,76778,51779],{"class":51672},[51,76780,51679],{"class":65},[51,76782,76783,76785,76787],{"class":53,"line":242},[51,76784,52157],{"class":65},[51,76786,51706],{"class":51672},[51,76788,51679],{"class":65},[51,76790,76791,76793,76795],{"class":53,"line":257},[51,76792,1452],{"class":65},[51,76794,52172],{"class":51672},[51,76796,51679],{"class":65},[51,76798,76799,76801,76803],{"class":53,"line":262},[51,76800,52516],{"class":65},[51,76802,52185],{"class":51672},[51,76804,51679],{"class":65},[51,76806,76807,76809,76811,76813,76815,76817,76820,76822,76824,76826,76828,76830,76833,76835],{"class":53,"line":285},[51,76808,74125],{"class":65},[51,76810,58619],{"class":57},[51,76812,546],{"class":65},[51,76814,1126],{"class":61},[51,76816,1508],{"class":69},[51,76818,76819],{"class":48349},"java",[51,76821,844],{"class":69},[51,76823,1126],{"class":61},[51,76825,1100],{"class":65},[51,76827,75617],{"class":57},[51,76829,546],{"class":65},[51,76831,76832],{"class":61},"'java'",[51,76834,76127],{"class":65},[51,76836,75628],{"class":601},[51,76838,76839,76841,76843,76845,76847,76849,76851,76853,76855,76857,76859,76861,76864,76866],{"class":53,"line":296},[51,76840,74125],{"class":65},[51,76842,58619],{"class":57},[51,76844,546],{"class":65},[51,76846,1126],{"class":61},[51,76848,1508],{"class":69},[51,76850,76819],{"class":48349},[51,76852,844],{"class":69},[51,76854,1126],{"class":61},[51,76856,1100],{"class":65},[51,76858,75617],{"class":57},[51,76860,546],{"class":65},[51,76862,76863],{"class":61},"'Java'",[51,76865,76127],{"class":65},[51,76867,75751],{"class":601},[51,76869,76870],{"class":53,"line":307},[51,76871,76872],{"class":601},"    \u002F\u002F 不区分大小写、\n",[51,76874,76875,76877,76879,76881,76883,76885,76887,76889,76891,76893,76895,76897,76899,76901,76903],{"class":53,"line":324},[51,76876,74125],{"class":65},[51,76878,58619],{"class":57},[51,76880,546],{"class":65},[51,76882,1126],{"class":61},[51,76884,1508],{"class":69},[51,76886,76819],{"class":48349},[51,76888,844],{"class":69},[51,76890,1126],{"class":61},[51,76892,983],{"class":69},[51,76894,1100],{"class":65},[51,76896,75617],{"class":57},[51,76898,546],{"class":65},[51,76900,76863],{"class":61},[51,76902,76127],{"class":65},[51,76904,75628],{"class":601},[51,76906,76907,76909,76911,76913],{"class":53,"line":329},[51,76908,11605],{"class":69},[51,76910,74291],{"class":278},[51,76912,13948],{"class":69},[51,76914,76915],{"class":61}," 'java是一门编程语言，学完java工资很高'\n",[51,76917,76918,76920,76923,76925,76928,76931,76933,76935,76937,76939,76942,76944,76947],{"class":53,"line":334},[51,76919,11605],{"class":69},[51,76921,76922],{"class":278}," result",[51,76924,13948],{"class":69},[51,76926,76927],{"class":65}," str.",[51,76929,76930],{"class":57},"replace",[51,76932,546],{"class":65},[51,76934,1126],{"class":61},[51,76936,76819],{"class":48349},[51,76938,1126],{"class":61},[51,76940,76941],{"class":69},"ig",[51,76943,12819],{"class":65},[51,76945,76946],{"class":61},"'前端'",[51,76948,282],{"class":65},[51,76950,76951,76953,76955],{"class":53,"line":340},[51,76952,74125],{"class":65},[51,76954,58619],{"class":57},[51,76956,76957],{"class":65},"(result)\n",[51,76959,76960,76962,76964],{"class":53,"line":345},[51,76961,52789],{"class":65},[51,76963,52185],{"class":51672},[51,76965,51679],{"class":65},[51,76967,76968,76970,76972],{"class":53,"line":357},[51,76969,52157],{"class":65},[51,76971,52172],{"class":51672},[51,76973,51679],{"class":65},[51,76975,76976,76978,76980],{"class":53,"line":366},[51,76977,52157],{"class":65},[51,76979,51007],{"class":51672},[51,76981,51679],{"class":65},[464,76983,76984],{},"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":46,"searchDepth":185,"depth":185,"links":76986},[76987,76997,77009,77026,77033,77041],{"id":53732,"depth":185,"text":53733,"children":76988},[76989,76990,76991,76992,76993,76994,76995,76996],{"id":53736,"depth":202,"text":53737},{"id":53769,"depth":202,"text":53770},{"id":53808,"depth":202,"text":53809},{"id":53966,"depth":202,"text":53967},{"id":54014,"depth":202,"text":54015},{"id":54151,"depth":202,"text":54152},{"id":54473,"depth":202,"text":54474},{"id":57461,"depth":202,"text":57462},{"id":57489,"depth":185,"text":57490,"children":76998},[76999,77000,77001,77002,77003,77004,77005,77006,77007,77008],{"id":57493,"depth":202,"text":57494},{"id":57516,"depth":202,"text":57517},{"id":58431,"depth":202,"text":58432},{"id":59121,"depth":202,"text":59122},{"id":59403,"depth":202,"text":59404},{"id":63564,"depth":202,"text":63565},{"id":63734,"depth":202,"text":63735},{"id":63862,"depth":202,"text":63863},{"id":63887,"depth":202,"text":63888},{"id":65276,"depth":202,"text":65277},{"id":66429,"depth":185,"text":66430,"children":77010},[77011,77012,77013,77014,77015,77016,77017,77018,77019,77020,77021,77022,77023,77024,77025],{"id":66433,"depth":202,"text":66434},{"id":67087,"depth":202,"text":67088},{"id":68782,"depth":202,"text":68783},{"id":68823,"depth":202,"text":68824},{"id":68865,"depth":202,"text":68866},{"id":68879,"depth":202,"text":68880},{"id":68928,"depth":202,"text":68929},{"id":68940,"depth":202,"text":68941},{"id":68955,"depth":202,"text":68956},{"id":68991,"depth":202,"text":68992},{"id":69072,"depth":202,"text":69073},{"id":69200,"depth":202,"text":69201},{"id":69212,"depth":202,"text":69213},{"id":69231,"depth":202,"text":69232},{"id":71342,"depth":202,"text":71343},{"id":71361,"depth":185,"text":71362,"children":77027},[77028,77029,77030,77031,77032],{"id":71382,"depth":202,"text":71383},{"id":71402,"depth":202,"text":71403},{"id":71451,"depth":202,"text":71452},{"id":71576,"depth":202,"text":71577},{"id":71757,"depth":202,"text":71758},{"id":71775,"depth":185,"text":71776,"children":77034},[77035,77036,77037,77038,77039,77040],{"id":71790,"depth":202,"text":71791},{"id":71849,"depth":202,"text":71850},{"id":71873,"depth":202,"text":71874},{"id":72193,"depth":202,"text":72194},{"id":72225,"depth":202,"text":72226},{"id":72248,"depth":202,"text":72249},{"id":75316,"depth":185,"text":75317,"children":77042},[77043,77044],{"id":75350,"depth":202,"text":75351},{"id":75389,"depth":202,"text":75390},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53704,"description":23760},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77051,"title":77052,"body":77053,"description":23760,"extension":469,"meta":93190,"navigation":205,"path":93191,"seo":93192,"stem":93193,"__hash__":93194},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77054,"toc":93126},[77055,77058,77061,77065,77069,77074,77079,77090,77094,77099,77102,77106,77109,77114,77118,77122,77125,77130,77133,77137,77140,77148,77151,77155,77160,77165,77168,77172,77177,77182,77185,77189,77194,77197,77202,77205,77210,77213,77218,77223,77226,77229,77233,77238,77243,77246,77250,77254,77257,77260,77263,77267,77271,77276,77281,77284,77288,77293,77298,77301,77304,77307,77310,77313,77316,77319,77322,77325,77330,77334,77339,77344,77347,77350,77353,77356,77359,77362,77365,77368,77372,77376,77379,77382,77385,77390,77392,77395,77398,77401,77404,77407,77410,77413,77416,77419,77422,77425,77428,77431,77436,77441,77446,77449,77453,77456,77461,77465,77467,77478,77483,77584,77587,77590,77593,77596,77599,77602,77605,77608,77610,77613,77616,77619,77622,77625,77627,77630,77633,77636,77639,77642,77645,77647,77650,77652,77654,77657,77661,77665,77668,77671,77674,77677,77680,77683,77686,77689,77692,77697,77817,77820,77823,77828,77831,77834,77837,77840,77845,77848,77851,77854,77857,77862,77865,77965,78030,78104,78108,78111,78114,78118,78121,78135,78164,78167,78170,78173,78176,78179,78182,78185,78187,78190,78193,78196,78199,78203,78208,78212,78217,78292,78295,78478,78481,78484,78487,78490,78493,78495,78498,78501,78504,78507,78510,78513,78515,78519,78522,78527,78530,78533,78536,78539,78541,78546,78549,78552,78555,78558,78560,78565,78568,78571,78573,78575,78578,78582,78585,78588,78593,78596,78599,78602,78652,78657,78661,78666,78669,78738,78741,78750,78754,78759,78762,78765,78773,78776,78793,80595,80599,80603,80608,80611,80615,80621,80627,80779,80784,80789,80792,80795,80798,80801,80804,80807,80810,80813,80816,80819,80822,80825,80830,80834,80837,80848,80852,80857,80860,80863,80866,80869,80872,80874,80877,80880,80883,80886,80888,80905,80908,80912,80915,80920,80925,80928,80931,80935,80938,80941,80950,80953,80957,80960,80965,80970,81037,81041,81044,81047,81052,81057,81143,81148,81152,81155,81158,81173,81176,81181,81185,81190,81299,81302,81313,81463,81467,81472,81581,81585,81590,81595,81600,81603,81610,81630,81666,81830,81835,81838,81843,81850,81853,81856,81859,81918,81974,82030,82034,82039,82354,82357,82361,82364,82369,82478,82483,82487,82492,82496,82567,82571,82573,82576,82579,82617,82893,82897,82914,82980,83014,83018,83021,83026,83055,83062,83071,83076,83091,83096,83105,83108,83245,83249,83311,83315,83320,83565,83569,83574,83577,83580,83583,83586,83590,83595,85176,85180,85184,85190,85193,85198,85202,85205,85210,85213,85224,85228,85233,85237,85242,85247,85250,85255,85259,85263,85266,85271,85276,85279,85282,85285,85407,85412,85514,85517,85520,85524,85529,85701,85706,85710,85713,85718,85784,85789,85792,85923,85926,85931,85934,85937,86028,86033,86036,86039,86042,86045,86050,86055,86058,86063,86068,86073,86077,86080,86083,86088,86093,86098,86103,86157,86160,86163,86168,86171,86174,86179,86184,86189,86193,86198,86212,86217,86220,86225,86229,86234,86239,86244,86249,86254,86259,86264,86269,86272,86276,86281,86284,86287,86290,86295,86300,86303,86306,86310,86313,86316,86321,86326,86331,86336,86339,86344,86349,86410,86415,86418,86423,87664,87669,87673,87677,87682,87685,87690,87695,87698,87703,87705,87710,87714,87717,87720,87731,87735,87740,87745,87800,87805,87810,87815,88026,88031,88035,88040,88043,88045,88048,88051,88498,88503,88510,88516,88519,88522,88786,88791,88795,89060,89065,89069,89074,89079,89084,89089,89420,89423,89428,89433,89436,89440,89444,89449,89454,89459,89464,89469,89474,89478,89481,89486,89491,89494,89568,89573,89578,89583,89585,89588,89958,89963,89968,89973,89976,89979,90081,90086,90091,90194,90198,90203,90207,90211,90216,90221,90224,90229,90232,90235,90628,90633,90636,90639,90642,90645,91165,91169,91174,91179,91184,91187,91192,91195,91198,91580,91585,91587,91589,91592,91595,92107,92111,92172,92175,92178,92181,92185,92188,92193,92198,93123],[14,77056,77052],{"id":77057},"_4js进阶",[10,77059,77060],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[486,77062,77064],{"id":77063},"_41-作用域","4.1 作用域",[513,77066,77068],{"id":77067},"_411-局部作用域","4.1.1 局部作用域",[10,77070,77071],{},[460,77072],{"alt":46,"src":77073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[10,77075,77076],{},[460,77077],{"alt":46,"src":77078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1549,77080,77081,77084,77087],{},[22,77082,77083],{},"函数作用域在函数内部",[22,77085,77086],{},"块级作用域在{}",[22,77088,77089],{},"对象的那个{}不是作用域，不是块作用域",[513,77091,77093],{"id":77092},"_412-全局作用域","4.1.2 全局作用域",[10,77095,77096],{},[460,77097],{"alt":46,"src":77098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[10,77100,77101],{},"window.a=10不要这样写",[513,77103,77105],{"id":77104},"_413-作用域链","4.1.3 作用域链",[10,77107,77108],{},"变量查找机制",[10,77110,77111],{},[460,77112],{"alt":46,"src":77113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[486,77115,77117],{"id":77116},"_42-垃圾回收机制","4.2 垃圾回收机制",[513,77119,77121],{"id":77120},"_421-大体介绍","4.2.1 大体介绍",[10,77123,77124],{},"垃圾回收机制(Garbage Collection) 简称 GC",[10,77126,77127],{},[460,77128],{"alt":46,"src":77129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[10,77131,77132],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[513,77134,77136],{"id":77135},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[10,77138,77139],{},"堆栈空间分配区别：",[19,77141,77142,77145],{},[22,77143,77144],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[22,77146,77147],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[10,77149,77150],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22381,77152,77154],{"id":77153},"_4221-引用计数","4.2.2.1 引用计数",[10,77156,77157],{},[460,77158],{"alt":46,"src":77159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[10,77161,77162],{},[460,77163],{"alt":46,"src":77164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[10,77166,77167],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22381,77169,77171],{"id":77170},"_4222-标记清除法","4.2.2.2 标记清除法",[10,77173,77174],{},[460,77175],{"alt":46,"src":77176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[10,77178,77179],{},[460,77180],{"alt":46,"src":77181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[10,77183,77184],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[486,77186,77188],{"id":77187},"_43-闭包","4.3 闭包",[10,77190,77191],{},[460,77192],{"alt":46,"src":77193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[10,77195,77196],{},"闭包：内层函数+外层函数的变量",[10,77198,77199],{},[460,77200],{"alt":46,"src":77201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[10,77203,77204],{},"closure就是闭包",[10,77206,77207],{},[460,77208],{"alt":46,"src":77209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[10,77211,77212],{},"内层函数必须包含外层函数的变量才是闭包",[10,77214,77215],{},[460,77216],{"alt":46,"src":77217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[10,77219,77220],{},[460,77221],{"alt":46,"src":77222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[10,77224,77225],{},"闭包可能会引起内存泄漏",[10,77227,77228],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[486,77230,77232],{"id":77231},"_44-变量提升","4.4 变量提升",[10,77234,77235],{},[460,77236],{"alt":46,"src":77237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[10,77239,77240],{},[460,77241],{"alt":46,"src":77242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[10,77244,77245],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[486,77247,77249],{"id":77248},"_45-函数进阶","4.5 函数进阶",[513,77251,77253],{"id":77252},"_451-函数提升","4.5.1 函数提升",[10,77255,77256],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[10,77258,77259],{},"只提升函数声明，不提升函数调用",[52185,77261,77262],{},"\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",[513,77264,77266],{"id":77265},"_452-函数参数","4.5.2 函数参数",[22381,77268,77270],{"id":77269},"_4521-动态参数","4.5.2.1 动态参数",[10,77272,77273],{},[460,77274],{"alt":46,"src":77275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[10,77277,77278],{},[460,77279],{"alt":46,"src":77280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[10,77282,77283],{},"箭头函数里边没有arguments",[22381,77285,77287],{"id":77286},"_4522-剩余参数","4.5.2.2 剩余参数",[10,77289,77290],{},[460,77291],{"alt":46,"src":77292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[10,77294,77295],{},[460,77296],{"alt":46,"src":77297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[10,77299,77300],{},"剩余参数使用的时候不需要写...",[10,77302,77303],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[10,77305,77306],{},"  function getSum(a,b,...arr) {",[10,77308,77309],{},"  console.log(11)",[10,77311,77312],{},"  }",[10,77314,77315],{},"  getSum(1,2,3,4)",[10,77317,77318],{},"  将1传给a，2传给b，剩下的传给剩余参数",[10,77320,77321],{},"  getSum(1,2)",[10,77323,77324],{},"  将1传给a，2传给b，剩余参数为一个空数组",[10,77326,77327],{},[460,77328],{"alt":46,"src":77329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22381,77331,77333],{"id":77332},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[10,77335,77336],{},[460,77337],{"alt":46,"src":77338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[10,77340,77341],{},[460,77342],{"alt":46,"src":77343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[10,77345,77346],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[10,77348,77349],{},"展开运算符可以用于数组之间的合并：",[10,77351,77352],{},"const arr1 = [1, 2, 3]",[10,77354,77355],{},"const arr2 = [3, 4, 5]",[10,77357,77358],{},"const arr = [...arr1, ...arr2]",[10,77360,77361],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[10,77363,77364],{},"剩余参数：函数参数使用，得到真数组",[10,77366,77367],{},"展开运算符：数组中使用，数组展开",[513,77369,77371],{"id":77370},"_453-箭头函数","4.5.3 箭头函数",[22381,77373,77375],{"id":77374},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[10,77377,77378],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[10,77380,77381],{},"它不是万能的！！！",[10,77383,77384],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[10,77386,77387],{},[460,77388],{"alt":46,"src":77389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[10,77391,574],{},[10,77393,77394],{},"① 只有一个形参的时候，可以省略小括号：",[10,77396,77397],{},"const fn=x=>{console.log(x)}",[10,77399,77400],{},"② 只有一行代码时可以省略大括号：",[10,77402,77403],{},"const fn=x=>console.log(11)",[10,77405,77406],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[10,77408,77409],{},"const fn=x=>x+x",[10,77411,77412],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[10,77414,77415],{},"⑤ 阻止表单默认提交：",[10,77417,77418],{},"const form = document.querySelector('form')",[10,77420,77421],{},"form.addEventListener('click', ev => ev.preventDefault())",[10,77423,77424],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[10,77426,77427],{},"const fn=uname=>({uname:uname})",[10,77429,77430],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[10,77432,77433],{},[460,77434],{"alt":46,"src":77435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[10,77437,77438],{},[460,77439],{"alt":46,"src":77440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[10,77442,77443],{},[460,77444],{"alt":46,"src":77445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[10,77447,77448],{},"一定不要忘记用()，有()就理解为自带return",[22381,77450,77452],{"id":77451},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[10,77454,77455],{},"箭头函数是没有动态参数的arguments",[10,77457,77458],{},[460,77459],{"alt":46,"src":77460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22381,77462,77464],{"id":77463},"_4533-箭头函数this","4.5.3.3 箭头函数this",[10,77466,11716],{},[19,77468,77469,77472,77475],{},[22,77470,77471],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[22,77473,77474],{},"事件回调函数使用箭头函数时，this 为全局的 window",[22,77476,77477],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[10,77479,77480],{},[460,77481],{"alt":46,"src":77482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[41,77484,77486],{"className":53439,"code":77485,"language":53441,"meta":46,"style":46},"  \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",[48,77487,77488,77496,77501,77506,77511,77516,77521,77525,77530,77534,77538,77543,77548,77553,77557,77561,77566,77571,77576],{"__ignoreMap":46},[51,77489,77490,77492,77494],{"class":53,"line":54},[51,77491,52516],{"class":65},[51,77493,52185],{"class":51672},[51,77495,51679],{"class":65},[51,77497,77498],{"class":53,"line":185},[51,77499,77500],{"class":65},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[51,77502,77503],{"class":53,"line":202},[51,77504,77505],{"class":65},"    console.log(this) \u002F\u002F指向window\n",[51,77507,77508],{"class":53,"line":209},[51,77509,77510],{"class":65},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[51,77512,77513],{"class":53,"line":223},[51,77514,77515],{"class":65},"    function fn() {\n",[51,77517,77518],{"class":53,"line":237},[51,77519,77520],{"class":65},"      console.log(this)  \u002F\u002F指向window\n",[51,77522,77523],{"class":53,"line":242},[51,77524,2577],{"class":65},[51,77526,77527],{"class":53,"line":257},[51,77528,77529],{"class":65},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[51,77531,77532],{"class":53,"line":262},[51,77533,206],{"emptyLinePlaceholder":205},[51,77535,77536],{"class":53,"line":285},[51,77537,71895],{"class":65},[51,77539,77540],{"class":53,"line":296},[51,77541,77542],{"class":65},"      name: 'andy',\n",[51,77544,77545],{"class":53,"line":307},[51,77546,77547],{"class":65},"      sayHai: function () {\n",[51,77549,77550],{"class":53,"line":324},[51,77551,77552],{"class":65},"        console.log(this)\n",[51,77554,77555],{"class":53,"line":329},[51,77556,52770],{"class":65},[51,77558,77559],{"class":53,"line":334},[51,77560,2577],{"class":65},[51,77562,77563],{"class":53,"line":340},[51,77564,77565],{"class":65},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[51,77567,77568],{"class":53,"line":345},[51,77569,77570],{"class":65},"    \u002F\u002F 2.箭头函数的this\n",[51,77572,77573],{"class":53,"line":357},[51,77574,77575],{"class":65},"    const fn = () => console.log(this)\n",[51,77577,77578,77580,77582],{"class":53,"line":366},[51,77579,52789],{"class":65},[51,77581,52185],{"class":51672},[51,77583,51679],{"class":65},[10,77585,77586],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[10,77588,77589],{},"const fn = () => console.log(this)",[10,77591,77592],{},"fn() \u002F\u002F指向window",[10,77594,77595],{},"\u002F\u002F 3.对象方法箭头函数 this",[10,77597,77598],{},"①",[10,77600,77601],{},"const obj = {",[10,77603,77604],{},"uname: 'pink老师',",[10,77606,77607],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[10,77609,1488],{},[10,77611,77612],{},"调用对象里边的函数",[10,77614,77615],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[10,77617,77618],{},"obj.sayHai()",[10,77620,77621],{},"②",[10,77623,77624],{},"const obj1 = {",[10,77626,77604],{},[10,77628,77629],{},"sayHai: function () {",[10,77631,77632],{},"let i = 10",[10,77634,77635],{},"const count = () => {",[10,77637,77638],{},"console.log(this)",[10,77640,77641],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[10,77643,77644],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[10,77646,1488],{},[10,77648,77649],{},"count()",[10,77651,1488],{},[10,77653,1488],{},[10,77655,77656],{},"obj1.sayHai()",[486,77658,77660],{"id":77659},"_46-解构赋值","4.6 解构赋值",[513,77662,77664],{"id":77663},"_461-数组解构","4.6.1 数组解构",[10,77666,77667],{},"以前要是使用数组中的值的话：",[10,77669,77670],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[10,77672,77673],{},"const arr=[100,60,80]",[10,77675,77676],{},"const max=arr[0]",[10,77678,77679],{},"const min=arr[1]",[10,77681,77682],{},"const avg=arr[2]",[10,77684,77685],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[10,77687,77688],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[10,77690,77691],{},"这个写法就类似于上边的那种用很多const的方法",[10,77693,77694],{},[460,77695],{"alt":46,"src":77696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[41,77698,77700],{"className":51005,"code":77699,"language":51007,"meta":46,"style":46},"①变量之间交换值:\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",[48,77701,77702,77707,77712,77717,77722,77727,77731,77735,77740,77744,77749,77754,77758,77763,77768,77779,77789,77794,77799,77804,77808,77812],{"__ignoreMap":46},[51,77703,77704],{"class":53,"line":54},[51,77705,77706],{"class":65},"①变量之间交换值:\n",[51,77708,77709],{"class":53,"line":185},[51,77710,77711],{"class":65},"let a=1\n",[51,77713,77714],{"class":53,"line":202},[51,77715,77716],{"class":65},"let b=2;\n",[51,77718,77719],{"class":53,"line":209},[51,77720,77721],{"class":65},"必须加这行代码，不然就会报错\n",[51,77723,77724],{"class":53,"line":223},[51,77725,77726],{"class":65},"[b,a]=[a,b]\n",[51,77728,77729],{"class":53,"line":237},[51,77730,206],{"emptyLinePlaceholder":205},[51,77732,77733],{"class":53,"line":242},[51,77734,206],{"emptyLinePlaceholder":205},[51,77736,77737],{"class":53,"line":257},[51,77738,77739],{"class":65},"可以写成下面的方式：\n",[51,77741,77742],{"class":53,"line":262},[51,77743,77711],{"class":65},[51,77745,77746],{"class":53,"line":285},[51,77747,77748],{"class":65},"let b=2\n",[51,77750,77751],{"class":53,"line":296},[51,77752,77753],{"class":65},";[b,a]=[a,b]\n",[51,77755,77756],{"class":53,"line":307},[51,77757,206],{"emptyLinePlaceholder":205},[51,77759,77760],{"class":53,"line":324},[51,77761,77762],{"class":65},"②排序\n",[51,77764,77765],{"class":53,"line":329},[51,77766,77767],{"class":65},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[51,77769,77770,77773,77776],{"class":53,"line":334},[51,77771,77772],{"class":65},"for (let i = 0; i ",[51,77774,1452],{"class":77775},"s7hpK",[51,77777,77778],{"class":65}," arr1.length; i++) {\n",[51,77780,77781,77784,77786],{"class":53,"line":340},[51,77782,77783],{"class":65},"   for (let j = 0; j ",[51,77785,1452],{"class":77775},[51,77787,77788],{"class":65}," arr1.length - 1; j++) {\n",[51,77790,77791],{"class":53,"line":345},[51,77792,77793],{"class":65},"      if (arr1[j] > arr1[j + 1]) {\n",[51,77795,77796],{"class":53,"line":357},[51,77797,77798],{"class":65},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[51,77800,77801],{"class":53,"line":366},[51,77802,77803],{"class":65},"       }\n",[51,77805,77806],{"class":53,"line":383},[51,77807,4695],{"class":65},[51,77809,77810],{"class":53,"line":392},[51,77811,1974],{"class":65},[51,77813,77814],{"class":53,"line":403},[51,77815,77816],{"class":65},"console.log(arr1)\n",[10,77818,77819],{},"数组解构的细节：",[10,77821,77822],{},"①变量多，单元值少",[10,77824,77825],{},[460,77826],{"alt":46,"src":77827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[10,77829,77830],{},"防止出现undefined的方法：",[10,77832,77833],{},"const [a=0,b=0] =[1]",[10,77835,77836],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[10,77838,77839],{},"②变量少，单元值多",[10,77841,77842],{},[460,77843],{"alt":46,"src":77844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[10,77846,77847],{},"此时可以使用剩余参数来接收多余的值",[10,77849,77850],{},"const [a,b,...c]=[1,2,3,4]",[10,77852,77853],{},"console.log(c) 输出[3,4]",[10,77855,77856],{},"③可以按需导入，忽略某些返回值",[10,77858,77859],{},[460,77860],{"alt":46,"src":77861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[10,77863,77864],{},"④支持多维数组的结构",[41,77866,77870],{"className":77867,"code":77868,"language":77869,"meta":46,"style":46},"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",[48,77871,77872,77900,77916,77931,77946],{"__ignoreMap":46},[51,77873,77874,77876,77878,77880,77882,77884,77886,77888,77891,77893,77895,77897],{"class":53,"line":54},[51,77875,7176],{"class":69},[51,77877,52205],{"class":65},[51,77879,70],{"class":69},[51,77881,52598],{"class":65},[51,77883,759],{"class":278},[51,77885,12819],{"class":65},[51,77887,620],{"class":278},[51,77889,77890],{"class":65},", [",[51,77892,614],{"class":278},[51,77894,12819],{"class":65},[51,77896,835],{"class":278},[51,77898,77899],{"class":65},"]]\n",[51,77901,77902,77905,77907,77909,77911,77913],{"class":53,"line":185},[51,77903,77904],{"class":65},"console.",[51,77906,58619],{"class":57},[51,77908,4237],{"class":65},[51,77910,733],{"class":278},[51,77912,4602],{"class":65},[51,77914,77915],{"class":601},"  \u002F\u002F1\n",[51,77917,77918,77920,77922,77924,77926,77928],{"class":53,"line":202},[51,77919,77904],{"class":65},[51,77921,58619],{"class":57},[51,77923,4237],{"class":65},[51,77925,759],{"class":278},[51,77927,4602],{"class":65},[51,77929,77930],{"class":601},"  \u002F\u002F2\n",[51,77932,77933,77935,77937,77939,77941,77943],{"class":53,"line":209},[51,77934,77904],{"class":65},[51,77936,58619],{"class":57},[51,77938,4237],{"class":65},[51,77940,620],{"class":278},[51,77942,4602],{"class":65},[51,77944,77945],{"class":601},"  \u002F\u002F[3,4]\n",[51,77947,77948,77950,77952,77954,77956,77958,77960,77962],{"class":53,"line":223},[51,77949,77904],{"class":65},[51,77951,58619],{"class":57},[51,77953,4237],{"class":65},[51,77955,620],{"class":278},[51,77957,5286],{"class":65},[51,77959,733],{"class":278},[51,77961,4602],{"class":65},[51,77963,77964],{"class":601},"  \u002F\u002F3\n",[41,77966,77968],{"className":77867,"code":77967,"language":77869,"meta":46,"style":46},"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",[48,77969,77970,77997,78008,78019],{"__ignoreMap":46},[51,77971,77972,77974,77977,77979,77981,77983,77985,77987,77989,77991,77993,77995],{"class":53,"line":54},[51,77973,7176],{"class":69},[51,77975,77976],{"class":65}," [a, b, c] ",[51,77978,70],{"class":69},[51,77980,52598],{"class":65},[51,77982,759],{"class":278},[51,77984,12819],{"class":65},[51,77986,620],{"class":278},[51,77988,77890],{"class":65},[51,77990,614],{"class":278},[51,77992,12819],{"class":65},[51,77994,835],{"class":278},[51,77996,77899],{"class":65},[51,77998,77999,78001,78003,78006],{"class":53,"line":185},[51,78000,77904],{"class":65},[51,78002,58619],{"class":57},[51,78004,78005],{"class":65},"(a)",[51,78007,77915],{"class":601},[51,78009,78010,78012,78014,78017],{"class":53,"line":202},[51,78011,77904],{"class":65},[51,78013,58619],{"class":57},[51,78015,78016],{"class":65},"(b)",[51,78018,77930],{"class":601},[51,78020,78021,78023,78025,78028],{"class":53,"line":209},[51,78022,77904],{"class":65},[51,78024,58619],{"class":57},[51,78026,78027],{"class":65},"(c)",[51,78029,77945],{"class":601},[41,78031,78033],{"className":77867,"code":78032,"language":77869,"meta":46,"style":46},"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",[48,78034,78035,78062,78072,78082,78092],{"__ignoreMap":46},[51,78036,78037,78039,78042,78044,78046,78048,78050,78052,78054,78056,78058,78060],{"class":53,"line":54},[51,78038,7176],{"class":69},[51,78040,78041],{"class":65}," [a, b, [c, d]] ",[51,78043,70],{"class":69},[51,78045,52598],{"class":65},[51,78047,759],{"class":278},[51,78049,12819],{"class":65},[51,78051,620],{"class":278},[51,78053,77890],{"class":65},[51,78055,614],{"class":278},[51,78057,12819],{"class":65},[51,78059,835],{"class":278},[51,78061,77899],{"class":65},[51,78063,78064,78066,78068,78070],{"class":53,"line":185},[51,78065,77904],{"class":65},[51,78067,58619],{"class":57},[51,78069,78005],{"class":65},[51,78071,77915],{"class":601},[51,78073,78074,78076,78078,78080],{"class":53,"line":202},[51,78075,77904],{"class":65},[51,78077,58619],{"class":57},[51,78079,78016],{"class":65},[51,78081,77930],{"class":601},[51,78083,78084,78086,78088,78090],{"class":53,"line":209},[51,78085,77904],{"class":65},[51,78087,58619],{"class":57},[51,78089,78027],{"class":65},[51,78091,77964],{"class":601},[51,78093,78094,78096,78098,78101],{"class":53,"line":223},[51,78095,77904],{"class":65},[51,78097,58619],{"class":57},[51,78099,78100],{"class":65},"(d)",[51,78102,78103],{"class":601},"  \u002F\u002F4\n",[513,78105,78107],{"id":78106},"_462-对象解构","4.6.2 对象解构",[10,78109,78110],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[10,78112,78113],{},"用的非常非常多！！！！！！",[22381,78115,78117],{"id":78116},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[10,78119,78120],{},"基本语法：",[19,78122,78123,78126,78129,78132],{},[22,78124,78125],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[22,78127,78128],{},"对象属性的值将被赋值给与属性名相同的变量",[22,78130,78131],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[22,78133,78134],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[41,78136,78138],{"className":51005,"code":78137,"language":51007,"meta":46,"style":46},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[48,78139,78140,78145,78150,78155,78159],{"__ignoreMap":46},[51,78141,78142],{"class":53,"line":54},[51,78143,78144],{"class":65},"const obj = {\n",[51,78146,78147],{"class":53,"line":185},[51,78148,78149],{"class":65},"   uname: 'pink老师',\n",[51,78151,78152],{"class":53,"line":202},[51,78153,78154],{"class":65},"   age: 18,\n",[51,78156,78157],{"class":53,"line":209},[51,78158,1974],{"class":65},[51,78160,78161],{"class":53,"line":223},[51,78162,78163],{"class":65},"const { uname, age } = obj\n",[10,78165,78166],{},"上方代码这样写等价于：",[10,78168,78169],{},"const uname等价于obj.uname",[10,78171,78172],{},"变量名可以重新改名：",[10,78174,78175],{},"const uname='red老师'",[10,78177,78178],{},"const user={",[10,78180,78181],{},"  uname:'pink老师',",[10,78183,78184],{},"  age:18",[10,78186,1488],{},[10,78188,78189],{},"const {uname,age}=user",[10,78191,78192],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[10,78194,78195],{},"const {旧变量名：新变量名}=对象",[10,78197,78198],{},"const {uname:username,age}=user",[22381,78200,78202],{"id":78201},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[10,78204,78205],{},[460,78206],{"alt":46,"src":78207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22381,78209,78211],{"id":78210},"_4623-多级对象解构","4.6.2.3 多级对象解构",[10,78213,78214],{},[460,78215],{"alt":46,"src":78216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[41,78218,78220],{"className":53439,"code":78219,"language":53441,"meta":46,"style":46},"  \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",[48,78221,78222,78230,78235,78240,78245,78250,78255,78260,78265,78270,78274,78279,78284],{"__ignoreMap":46},[51,78223,78224,78226,78228],{"class":53,"line":54},[51,78225,52516],{"class":65},[51,78227,52185],{"class":51672},[51,78229,51679],{"class":65},[51,78231,78232],{"class":53,"line":185},[51,78233,78234],{"class":65},"    const pig = {\n",[51,78236,78237],{"class":53,"line":202},[51,78238,78239],{"class":65},"      name: '佩奇',\n",[51,78241,78242],{"class":53,"line":209},[51,78243,78244],{"class":65},"      family: {\n",[51,78246,78247],{"class":53,"line":223},[51,78248,78249],{"class":65},"        mother: '猪妈妈',\n",[51,78251,78252],{"class":53,"line":237},[51,78253,78254],{"class":65},"        father: '猪爸爸',\n",[51,78256,78257],{"class":53,"line":242},[51,78258,78259],{"class":65},"        sister: '乔治'\n",[51,78261,78262],{"class":53,"line":257},[51,78263,78264],{"class":65},"      },\n",[51,78266,78267],{"class":53,"line":262},[51,78268,78269],{"class":65},"      age: 6\n",[51,78271,78272],{"class":53,"line":285},[51,78273,2577],{"class":65},[51,78275,78276],{"class":53,"line":296},[51,78277,78278],{"class":65},"    \u002F\u002F 多级对象解构\n",[51,78280,78281],{"class":53,"line":307},[51,78282,78283],{"class":65},"    const { name, family: { mother, father, sister }, age } = pig\n",[51,78285,78286,78288,78290],{"class":53,"line":324},[51,78287,52789],{"class":65},[51,78289,52185],{"class":51672},[51,78291,51679],{"class":65},[10,78293,78294],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[41,78296,78299],{"className":78297,"code":78298,"language":76819,"meta":46,"style":46},"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",[48,78300,78301,78306,78317,78329,78341,78350,78354,78365,78377,78387,78392,78396,78406,78417,78426,78430,78434,78445,78456,78465,78469,78474],{"__ignoreMap":46},[51,78302,78303],{"class":53,"line":54},[51,78304,78305],{"class":601},"    \u002F\u002F 这是后台传递过来的数据\n",[51,78307,78308,78310,78313,78315],{"class":53,"line":185},[51,78309,11605],{"class":69},[51,78311,78312],{"class":65}," msg ",[51,78314,70],{"class":69},[51,78316,15956],{"class":65},[51,78318,78319,78322,78324,78327],{"class":53,"line":202},[51,78320,78321],{"class":61},"      \"code\"",[51,78323,1401],{"class":69},[51,78325,78326],{"class":278}," 200",[51,78328,31843],{"class":65},[51,78330,78331,78334,78336,78339],{"class":53,"line":209},[51,78332,78333],{"class":61},"      \"msg\"",[51,78335,1401],{"class":69},[51,78337,78338],{"class":61}," \"获取新闻列表成功\"",[51,78340,31843],{"class":65},[51,78342,78343,78346,78348],{"class":53,"line":223},[51,78344,78345],{"class":61},"      \"data\"",[51,78347,1401],{"class":69},[51,78349,55819],{"class":65},[51,78351,78352],{"class":53,"line":237},[51,78353,2898],{"class":65},[51,78355,78356,78359,78361,78363],{"class":53,"line":242},[51,78357,78358],{"class":61},"          \"id\"",[51,78360,1401],{"class":69},[51,78362,25500],{"class":278},[51,78364,31843],{"class":65},[51,78366,78367,78370,78372,78375],{"class":53,"line":257},[51,78368,78369],{"class":61},"          \"title\"",[51,78371,1401],{"class":69},[51,78373,78374],{"class":61}," \"5G商用自己，三大运用商收入下降\"",[51,78376,31843],{"class":65},[51,78378,78379,78382,78384],{"class":53,"line":262},[51,78380,78381],{"class":61},"          \"count\"",[51,78383,1401],{"class":69},[51,78385,78386],{"class":278}," 58\n",[51,78388,78389],{"class":53,"line":285},[51,78390,78391],{"class":65},"        },\n",[51,78393,78394],{"class":53,"line":296},[51,78395,2898],{"class":65},[51,78397,78398,78400,78402,78404],{"class":53,"line":307},[51,78399,78358],{"class":61},[51,78401,1401],{"class":69},[51,78403,15139],{"class":278},[51,78405,31843],{"class":65},[51,78407,78408,78410,78412,78415],{"class":53,"line":324},[51,78409,78369],{"class":61},[51,78411,1401],{"class":69},[51,78413,78414],{"class":61}," \"国际媒体头条速览\"",[51,78416,31843],{"class":65},[51,78418,78419,78421,78423],{"class":53,"line":329},[51,78420,78381],{"class":61},[51,78422,1401],{"class":69},[51,78424,78425],{"class":278}," 56\n",[51,78427,78428],{"class":53,"line":334},[51,78429,78391],{"class":65},[51,78431,78432],{"class":53,"line":340},[51,78433,2898],{"class":65},[51,78435,78436,78438,78440,78443],{"class":53,"line":345},[51,78437,78358],{"class":61},[51,78439,1401],{"class":69},[51,78441,78442],{"class":278}," 3",[51,78444,31843],{"class":65},[51,78446,78447,78449,78451,78454],{"class":53,"line":357},[51,78448,78369],{"class":61},[51,78450,1401],{"class":69},[51,78452,78453],{"class":61}," \"乌克兰和俄罗斯持续冲突\"",[51,78455,31843],{"class":65},[51,78457,78458,78460,78462],{"class":53,"line":366},[51,78459,78381],{"class":61},[51,78461,1401],{"class":69},[51,78463,78464],{"class":278}," 1669\n",[51,78466,78467],{"class":53,"line":383},[51,78468,78391],{"class":65},[51,78470,78471],{"class":53,"line":392},[51,78472,78473],{"class":65},"      ]\n",[51,78475,78476],{"class":53,"line":403},[51,78477,2577],{"class":65},[10,78479,78480],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[10,78482,78483],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[10,78485,78486],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[10,78488,78489],{},"function({data}) {",[10,78491,78492],{},"console.log(data)",[10,78494,1488],{},[10,78496,78497],{},"render(msg)",[10,78499,78500],{},"实参传递给形参的时候解构了",[10,78502,78503],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[10,78505,78506],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[10,78508,78509],{},"function render({data:mydata}) {",[10,78511,78512],{},"  console.log(data)",[10,78514,1488],{},[513,78516,78518],{"id":78517},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[10,78520,78521],{},"有两种情况：一个是数组结构，一个是立即执行函数",[19,78523,78524],{},[22,78525,78526],{},"如果对一个数组进行遍历，有两种方式：",[10,78528,78529],{},"①法1",[10,78531,78532],{},"const arr=[1,2,3]",[10,78534,78535],{},"arr.map(function(item,index) {",[10,78537,78538],{},"  console.log(item)",[10,78540,52836],{},[10,78542,78543],{},[460,78544],{"alt":46,"src":78545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[10,78547,78548],{},"②法2",[10,78550,78551],{},"const str='pink'",[10,78553,78554],{},"[1,2,3].map(function(item,index) {",[10,78556,78557],{},"console.log(item)",[10,78559,52836],{},[10,78561,78562],{},[460,78563],{"alt":46,"src":78564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[10,78566,78567],{},"此时会报错",[10,78569,78570],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[10,78572,78557],{},[10,78574,52836],{},[10,78576,78577],{},"内部会当成这样处理，所以我们用分号进行隔开",[486,78579,78581],{"id":78580},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[10,78583,78584],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[10,78586,78587],{},"可以理解为加强版的for循环",[10,78589,78590],{},[460,78591],{"alt":46,"src":78592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[10,78594,78595],{},"里边不写return，不返回数组，只遍历不返回",[10,78597,78598],{},"map是返回数组",[10,78600,78601],{},"forEach主要用于遍历数组对象",[41,78603,78605],{"className":53439,"code":78604,"language":53441,"meta":46,"style":46},"  \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",[48,78606,78607,78615,78620,78625,78630,78635,78639,78644],{"__ignoreMap":46},[51,78608,78609,78611,78613],{"class":53,"line":54},[51,78610,52516],{"class":65},[51,78612,52185],{"class":51672},[51,78614,51679],{"class":65},[51,78616,78617],{"class":53,"line":185},[51,78618,78619],{"class":65},"    const arr = ['red', 'green', 'pink']\n",[51,78621,78622],{"class":53,"line":202},[51,78623,78624],{"class":65},"    const result = arr.forEach(function (item, index) {\n",[51,78626,78627],{"class":53,"line":209},[51,78628,78629],{"class":65},"      console.log(item)\n",[51,78631,78632],{"class":53,"line":223},[51,78633,78634],{"class":65},"      console.log(index)\n",[51,78636,78637],{"class":53,"line":237},[51,78638,33836],{"class":65},[51,78640,78641],{"class":53,"line":242},[51,78642,78643],{"class":65},"    console.log(result)\n",[51,78645,78646,78648,78650],{"class":53,"line":257},[51,78647,52789],{"class":65},[51,78649,52185],{"class":51672},[51,78651,51679],{"class":65},[10,78653,78654],{},[460,78655],{"alt":46,"src":78656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[486,78658,78660],{"id":78659},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[10,78662,78663],{},[460,78664],{"alt":46,"src":78665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[10,78667,78668],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[41,78670,78672],{"className":53439,"code":78671,"language":53441,"meta":46,"style":46},"\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",[48,78673,78674,78682,78690,78695,78700,78704,78708,78713,78717,78722,78730],{"__ignoreMap":46},[51,78675,78676,78678,78680],{"class":53,"line":54},[51,78677,1452],{"class":65},[51,78679,52172],{"class":51672},[51,78681,51679],{"class":65},[51,78683,78684,78686,78688],{"class":53,"line":185},[51,78685,52516],{"class":65},[51,78687,52185],{"class":51672},[51,78689,51679],{"class":65},[51,78691,78692],{"class":53,"line":202},[51,78693,78694],{"class":65},"    const arr = [10, 20, 30]\n",[51,78696,78697],{"class":53,"line":209},[51,78698,78699],{"class":65},"    const newArr = arr.filter(function (item, index) {\n",[51,78701,78702],{"class":53,"line":223},[51,78703,78629],{"class":65},[51,78705,78706],{"class":53,"line":237},[51,78707,78634],{"class":65},[51,78709,78710],{"class":53,"line":242},[51,78711,78712],{"class":65},"      return item >= 20\n",[51,78714,78715],{"class":53,"line":257},[51,78716,33836],{"class":65},[51,78718,78719],{"class":53,"line":262},[51,78720,78721],{"class":65},"    console.log(newArr)\n",[51,78723,78724,78726,78728],{"class":53,"line":285},[51,78725,52789],{"class":65},[51,78727,52185],{"class":51672},[51,78729,51679],{"class":65},[51,78731,78732,78734,78736],{"class":53,"line":296},[51,78733,52157],{"class":65},[51,78735,52172],{"class":51672},[51,78737,51679],{"class":65},[10,78739,78740],{},"这个也可以写成箭头函数：",[41,78742,78744],{"className":51005,"code":78743,"language":51007,"meta":46,"style":46},"const newArr = arr.filter(item => item >= 20)\n",[48,78745,78746],{"__ignoreMap":46},[51,78747,78748],{"class":53,"line":54},[51,78749,78743],{"class":65},[486,78751,78753],{"id":78752},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[10,78755,78756],{},[460,78757],{"alt":46,"src":78758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[10,78760,78761],{},"步骤：",[10,78763,78764],{},"①：渲染页面模块",[1549,78766,78767,78770],{},[22,78768,78769],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[22,78771,78772],{},"用forEach+字符串的形式",[10,78774,78775],{},"②：点击不同需求，显示不同页面内容",[1549,78777,78778,78781,78784,78787,78790],{},[22,78779,78780],{},"点击采取事件委托方式 .filter",[22,78782,78783],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[22,78785,78786],{},"筛选条件是根据点击的 data-index 来判断",[22,78788,78789],{},"可以使用对象解构，把事件对象解构",[22,78791,78792],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[41,78794,78796],{"className":51005,"code":78795,"language":51007,"meta":46,"style":46},"\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",[48,78797,78798,78808,78822,78826,78834,78848,78868,78880,78888,78894,78904,78914,78924,78928,78932,78938,78951,78963,78973,78985,78989,78993,79000,79013,79025,79042,79060,79073,79077,79081,79093,79103,79107,79111,79118,79159,79186,79196,79200,79204,79212,79224,79228,79232,79240,79252,79264,79275,79279,79283,79292,79304,79315,79319,79323,79332,79344,79356,79360,79364,79371,79381,79393,79405,79420,79424,79428,79436,79452,79462,79472,79482,79494,79498,79502,79512,79523,79533,79537,79545,79553,79557,79565,79580,79606,79631,79656,79675,79683,79697,79702,79707,79712,79717,79722,79730,79738,79743,79754,79759,79769,79779,79789,79799,79803,79807,79816,79825,79834,79843,79847,79851,79860,79869,79878,79887,79891,79895,79904,79913,79922,79931,79935,79939,79948,79957,79966,79975,79979,79983,79992,80001,80010,80019,80023,80027,80036,80045,80054,80063,80067,80071,80080,80089,80097,80106,80110,80114,80118,80123,80135,80140,80152,80156,80173,80201,80210,80215,80225,80235,80244,80249,80254,80258,80263,80280,80284,80289,80297,80302,80329,80334,80354,80359,80371,80376,80381,80386,80397,80411,80448,80466,80499,80516,80540,80544,80549,80555,80559,80563,80567,80575,80583,80587],{"__ignoreMap":46},[51,78799,78800,78802,78804,78806],{"class":53,"line":54},[51,78801,51669],{"class":65},[51,78803,51673],{"class":51672},[51,78805,51676],{"class":57},[51,78807,51679],{"class":65},[51,78809,78810,78812,78814,78816,78818,78820],{"class":53,"line":185},[51,78811,1452],{"class":65},[51,78813,51007],{"class":51672},[51,78815,51688],{"class":57},[51,78817,70],{"class":65},[51,78819,51693],{"class":61},[51,78821,51679],{"class":65},[51,78823,78824],{"class":53,"line":202},[51,78825,206],{"emptyLinePlaceholder":205},[51,78827,78828,78830,78832],{"class":53,"line":209},[51,78829,1452],{"class":65},[51,78831,51706],{"class":51672},[51,78833,51679],{"class":65},[51,78835,78836,78838,78840,78842,78844,78846],{"class":53,"line":223},[51,78837,52516],{"class":65},[51,78839,51716],{"class":51672},[51,78841,51719],{"class":57},[51,78843,70],{"class":65},[51,78845,51724],{"class":61},[51,78847,51679],{"class":65},[51,78849,78850,78852,78854,78856,78858,78860,78862,78864,78866],{"class":53,"line":237},[51,78851,52516],{"class":65},[51,78853,51716],{"class":51672},[51,78855,15304],{"class":57},[51,78857,70],{"class":65},[51,78859,51763],{"class":61},[51,78861,51743],{"class":57},[51,78863,70],{"class":65},[51,78865,51770],{"class":61},[51,78867,51679],{"class":65},[51,78869,78870,78872,78874,78876,78878],{"class":53,"line":242},[51,78871,52516],{"class":65},[51,78873,51779],{"class":51672},[51,78875,51782],{"class":65},[51,78877,51779],{"class":51672},[51,78879,51679],{"class":65},[51,78881,78882,78884,78886],{"class":53,"line":257},[51,78883,52516],{"class":65},[51,78885,464],{"class":51672},[51,78887,51679],{"class":65},[51,78889,78890,78892],{"class":53,"line":262},[51,78891,6787],{"class":51672},[51,78893,15956],{"class":65},[51,78895,78896,78898,78900,78902],{"class":53,"line":285},[51,78897,55067],{"class":278},[51,78899,51809],{"class":65},[51,78901,733],{"class":278},[51,78903,1703],{"class":65},[51,78905,78906,78908,78910,78912],{"class":53,"line":296},[51,78907,55078],{"class":278},[51,78909,51809],{"class":65},[51,78911,733],{"class":278},[51,78913,1703],{"class":65},[51,78915,78916,78918,78920,78922],{"class":53,"line":307},[51,78917,72968],{"class":278},[51,78919,51809],{"class":65},[51,78921,60877],{"class":278},[51,78923,1703],{"class":65},[51,78925,78926],{"class":53,"line":324},[51,78927,2577],{"class":65},[51,78929,78930],{"class":53,"line":329},[51,78931,206],{"emptyLinePlaceholder":205},[51,78933,78934,78936],{"class":53,"line":334},[51,78935,62495],{"class":57},[51,78937,15956],{"class":65},[51,78939,78940,78942,78944,78947,78949],{"class":53,"line":340},[51,78941,55143],{"class":278},[51,78943,51809],{"class":65},[51,78945,78946],{"class":278},"990",[51,78948,51864],{"class":69},[51,78950,1703],{"class":65},[51,78952,78953,78955,78957,78959,78961],{"class":53,"line":345},[51,78954,55078],{"class":278},[51,78956,51809],{"class":65},[51,78958,733],{"class":278},[51,78960,51928],{"class":278},[51,78962,1703],{"class":65},[51,78964,78965,78967,78969,78971],{"class":53,"line":357},[51,78966,55381],{"class":278},[51,78968,51809],{"class":65},[51,78970,51849],{"class":278},[51,78972,1703],{"class":65},[51,78974,78975,78978,78980,78983],{"class":53,"line":366},[51,78976,78977],{"class":278},"      flex-wrap",[51,78979,51809],{"class":65},[51,78981,78982],{"class":278},"wrap",[51,78984,1703],{"class":65},[51,78986,78987],{"class":53,"line":383},[51,78988,2577],{"class":65},[51,78990,78991],{"class":53,"line":392},[51,78992,206],{"emptyLinePlaceholder":205},[51,78994,78995,78998],{"class":53,"line":403},[51,78996,78997],{"class":57},"    .item",[51,78999,15956],{"class":65},[51,79001,79002,79004,79006,79009,79011],{"class":53,"line":409},[51,79003,55143],{"class":278},[51,79005,51809],{"class":65},[51,79007,79008],{"class":278},"240",[51,79010,51864],{"class":69},[51,79012,1703],{"class":65},[51,79014,79015,79017,79019,79021,79023],{"class":53,"line":414},[51,79016,62372],{"class":278},[51,79018,51809],{"class":65},[51,79020,988],{"class":278},[51,79022,51864],{"class":69},[51,79024,1703],{"class":65},[51,79026,79027,79029,79031,79033,79035,79038,79040],{"class":53,"line":433},[51,79028,55067],{"class":278},[51,79030,51809],{"class":65},[51,79032,1242],{"class":278},[51,79034,51864],{"class":69},[51,79036,79037],{"class":278}," 30",[51,79039,51864],{"class":69},[51,79041,1703],{"class":65},[51,79043,79044,79046,79048,79050,79053,79056,79058],{"class":53,"line":439},[51,79045,62232],{"class":278},[51,79047,51809],{"class":65},[51,79049,28503],{"class":278},[51,79051,79052],{"class":278}," ease",[51,79054,79055],{"class":278}," .5",[51,79057,1237],{"class":69},[51,79059,1703],{"class":65},[51,79061,79062,79065,79067,79069,79071],{"class":53,"line":444},[51,79063,79064],{"class":278},"      margin-bottom",[51,79066,51809],{"class":65},[51,79068,1242],{"class":278},[51,79070,51864],{"class":69},[51,79072,1703],{"class":65},[51,79074,79075],{"class":53,"line":453},[51,79076,2577],{"class":65},[51,79078,79079],{"class":53,"line":2174},[51,79080,206],{"emptyLinePlaceholder":205},[51,79082,79083,79086,79088,79091],{"class":53,"line":2965},[51,79084,79085],{"class":57},"    .item:nth-child",[51,79087,546],{"class":65},[51,79089,79090],{"class":278},"4n",[51,79092,12826],{"class":65},[51,79094,79095,79097,79099,79101],{"class":53,"line":2979},[51,79096,62372],{"class":278},[51,79098,51809],{"class":65},[51,79100,733],{"class":278},[51,79102,1703],{"class":65},[51,79104,79105],{"class":53,"line":2987},[51,79106,2577],{"class":65},[51,79108,79109],{"class":53,"line":2992},[51,79110,206],{"emptyLinePlaceholder":205},[51,79112,79113,79116],{"class":53,"line":2998},[51,79114,79115],{"class":57},"    .item:hover",[51,79117,15956],{"class":65},[51,79119,79120,79123,79125,79127,79129,79131,79133,79135,79137,79140,79142,79144,79146,79148,79150,79152,79154,79157],{"class":53,"line":3004},[51,79121,79122],{"class":278},"      box-shadow",[51,79124,51809],{"class":65},[51,79126,733],{"class":278},[51,79128,51864],{"class":69},[51,79130,4479],{"class":278},[51,79132,51864],{"class":69},[51,79134,2538],{"class":278},[51,79136,51864],{"class":69},[51,79138,79139],{"class":278}," rgba",[51,79141,546],{"class":65},[51,79143,733],{"class":278},[51,79145,12819],{"class":65},[51,79147,733],{"class":278},[51,79149,12819],{"class":65},[51,79151,733],{"class":278},[51,79153,12819],{"class":65},[51,79155,79156],{"class":278},".2",[51,79158,3107],{"class":65},[51,79160,79161,79164,79166,79169,79171,79173,79175,79178,79180,79182,79184],{"class":53,"line":3009},[51,79162,79163],{"class":278},"      transform",[51,79165,51809],{"class":65},[51,79167,79168],{"class":278},"translate3d",[51,79170,546],{"class":65},[51,79172,733],{"class":278},[51,79174,12819],{"class":65},[51,79176,79177],{"class":278},"-4",[51,79179,51864],{"class":69},[51,79181,12819],{"class":65},[51,79183,733],{"class":278},[51,79185,3107],{"class":65},[51,79187,79188,79190,79192,79194],{"class":53,"line":8332},[51,79189,62397],{"class":278},[51,79191,51809],{"class":65},[51,79193,62402],{"class":278},[51,79195,1703],{"class":65},[51,79197,79198],{"class":53,"line":8356},[51,79199,2577],{"class":65},[51,79201,79202],{"class":53,"line":8361},[51,79203,206],{"emptyLinePlaceholder":205},[51,79205,79206,79208,79210],{"class":53,"line":8367},[51,79207,78997],{"class":57},[51,79209,55987],{"class":51672},[51,79211,15956],{"class":65},[51,79213,79214,79216,79218,79220,79222],{"class":53,"line":8394},[51,79215,55143],{"class":278},[51,79217,51809],{"class":65},[51,79219,853],{"class":278},[51,79221,870],{"class":69},[51,79223,1703],{"class":65},[51,79225,79226],{"class":53,"line":8399},[51,79227,2577],{"class":65},[51,79229,79230],{"class":53,"line":8405},[51,79231,206],{"emptyLinePlaceholder":205},[51,79233,79234,79236,79238],{"class":53,"line":8417},[51,79235,78997],{"class":57},[51,79237,62676],{"class":57},[51,79239,15956],{"class":65},[51,79241,79242,79244,79246,79248,79250],{"class":53,"line":8429},[51,79243,55294],{"class":278},[51,79245,51809],{"class":65},[51,79247,1192],{"class":278},[51,79249,51864],{"class":69},[51,79251,1703],{"class":65},[51,79253,79254,79256,79258,79260,79262],{"class":53,"line":8441},[51,79255,79064],{"class":278},[51,79257,51809],{"class":65},[51,79259,988],{"class":278},[51,79261,51864],{"class":69},[51,79263,1703],{"class":65},[51,79265,79266,79268,79270,79273],{"class":53,"line":10100},[51,79267,57788],{"class":278},[51,79269,51809],{"class":65},[51,79271,79272],{"class":278},"#666",[51,79274,1703],{"class":65},[51,79276,79277],{"class":53,"line":10125},[51,79278,2577],{"class":65},[51,79280,79281],{"class":53,"line":10148},[51,79282,206],{"emptyLinePlaceholder":205},[51,79284,79285,79287,79290],{"class":53,"line":10172},[51,79286,78997],{"class":57},[51,79288,79289],{"class":57}," .price",[51,79291,15956],{"class":65},[51,79293,79294,79296,79298,79300,79302],{"class":53,"line":10177},[51,79295,55294],{"class":278},[51,79297,51809],{"class":65},[51,79299,1292],{"class":278},[51,79301,51864],{"class":69},[51,79303,1703],{"class":65},[51,79305,79306,79308,79310,79313],{"class":53,"line":10182},[51,79307,57788],{"class":278},[51,79309,51809],{"class":65},[51,79311,79312],{"class":278},"firebrick",[51,79314,1703],{"class":65},[51,79316,79317],{"class":53,"line":10187},[51,79318,2577],{"class":65},[51,79320,79321],{"class":53,"line":10196},[51,79322,206],{"emptyLinePlaceholder":205},[51,79324,79325,79327,79330],{"class":53,"line":10201},[51,79326,78997],{"class":57},[51,79328,79329],{"class":57}," .price::before",[51,79331,15956],{"class":65},[51,79333,79334,79337,79339,79342],{"class":53,"line":10207},[51,79335,79336],{"class":278},"      content",[51,79338,51809],{"class":65},[51,79340,79341],{"class":61},"'￥'",[51,79343,1703],{"class":65},[51,79345,79346,79348,79350,79352,79354],{"class":53,"line":10228},[51,79347,55294],{"class":278},[51,79349,51809],{"class":65},[51,79351,1091],{"class":278},[51,79353,51864],{"class":69},[51,79355,1703],{"class":65},[51,79357,79358],{"class":53,"line":10234},[51,79359,2577],{"class":65},[51,79361,79362],{"class":53,"line":10248},[51,79363,206],{"emptyLinePlaceholder":205},[51,79365,79366,79369],{"class":53,"line":10254},[51,79367,79368],{"class":57},"    .filter",[51,79370,15956],{"class":65},[51,79372,79373,79375,79377,79379],{"class":53,"line":10281},[51,79374,55381],{"class":278},[51,79376,51809],{"class":65},[51,79378,51849],{"class":278},[51,79380,1703],{"class":65},[51,79382,79383,79385,79387,79389,79391],{"class":53,"line":10290},[51,79384,55143],{"class":278},[51,79386,51809],{"class":65},[51,79388,78946],{"class":278},[51,79390,51864],{"class":69},[51,79392,1703],{"class":65},[51,79394,79395,79397,79399,79401,79403],{"class":53,"line":10296},[51,79396,55078],{"class":278},[51,79398,51809],{"class":65},[51,79400,733],{"class":278},[51,79402,51928],{"class":278},[51,79404,1703],{"class":65},[51,79406,79407,79409,79411,79413,79415,79417],{"class":53,"line":10304},[51,79408,55067],{"class":278},[51,79410,51809],{"class":65},[51,79412,1198],{"class":278},[51,79414,51864],{"class":69},[51,79416,79037],{"class":278},[51,79418,79419],{"class":69},"px\n",[51,79421,79422],{"class":53,"line":10309},[51,79423,2577],{"class":65},[51,79425,79426],{"class":53,"line":16987},[51,79427,206],{"emptyLinePlaceholder":205},[51,79429,79430,79432,79434],{"class":53,"line":16993},[51,79431,79368],{"class":57},[51,79433,1808],{"class":51672},[51,79435,15956],{"class":65},[51,79437,79438,79440,79442,79444,79446,79448,79450],{"class":53,"line":17016},[51,79439,55067],{"class":278},[51,79441,51809],{"class":65},[51,79443,988],{"class":278},[51,79445,51864],{"class":69},[51,79447,9334],{"class":278},[51,79449,51864],{"class":69},[51,79451,1703],{"class":65},[51,79453,79454,79456,79458,79460],{"class":53,"line":17022},[51,79455,62093],{"class":278},[51,79457,51809],{"class":65},[51,79459,62190],{"class":278},[51,79461,1703],{"class":65},[51,79463,79464,79466,79468,79470],{"class":53,"line":17045},[51,79465,57788],{"class":278},[51,79467,51809],{"class":65},[51,79469,79272],{"class":278},[51,79471,1703],{"class":65},[51,79473,79474,79476,79478,79480],{"class":53,"line":17059},[51,79475,64342],{"class":278},[51,79477,51809],{"class":65},[51,79479,55109],{"class":278},[51,79481,1703],{"class":65},[51,79483,79484,79486,79488,79490,79492],{"class":53,"line":17079},[51,79485,62122],{"class":278},[51,79487,51809],{"class":65},[51,79489,1242],{"class":278},[51,79491,51864],{"class":69},[51,79493,1703],{"class":65},[51,79495,79496],{"class":53,"line":17085},[51,79497,2577],{"class":65},[51,79499,79500],{"class":53,"line":17096},[51,79501,206],{"emptyLinePlaceholder":205},[51,79503,79504,79506,79508,79510],{"class":53,"line":17119},[51,79505,79368],{"class":57},[51,79507,1808],{"class":51672},[51,79509,62272],{"class":57},[51,79511,15956],{"class":65},[51,79513,79514,79516,79518,79521],{"class":53,"line":17141},[51,79515,55256],{"class":278},[51,79517,51809],{"class":65},[51,79519,79520],{"class":278},"#05943c",[51,79522,1703],{"class":65},[51,79524,79525,79527,79529,79531],{"class":53,"line":17146},[51,79526,57788],{"class":278},[51,79528,51809],{"class":65},[51,79530,61214],{"class":278},[51,79532,1703],{"class":65},[51,79534,79535],{"class":53,"line":17152},[51,79536,2577],{"class":65},[51,79538,79539,79541,79543],{"class":53,"line":17166},[51,79540,52789],{"class":65},[51,79542,464],{"class":51672},[51,79544,51679],{"class":65},[51,79546,79547,79549,79551],{"class":53,"line":17179},[51,79548,52157],{"class":65},[51,79550,51706],{"class":51672},[51,79552,51679],{"class":65},[51,79554,79555],{"class":53,"line":17184},[51,79556,206],{"emptyLinePlaceholder":205},[51,79558,79559,79561,79563],{"class":53,"line":17198},[51,79560,1452],{"class":65},[51,79562,52172],{"class":51672},[51,79564,51679],{"class":65},[51,79566,79567,79569,79571,79573,79575,79578],{"class":53,"line":17203},[51,79568,52516],{"class":65},[51,79570,51983],{"class":51672},[51,79572,53858],{"class":57},[51,79574,70],{"class":65},[51,79576,79577],{"class":61},"\"filter\"",[51,79579,51679],{"class":65},[51,79581,79582,79584,79586,79588,79590,79592,79595,79597,79599,79602,79604],{"class":53,"line":17209},[51,79583,51713],{"class":65},[51,79585,780],{"class":51672},[51,79587,61429],{"class":57},[51,79589,70],{"class":65},[51,79591,61434],{"class":61},[51,79593,79594],{"class":57}," data-index",[51,79596,70],{"class":65},[51,79598,4065],{"class":61},[51,79600,79601],{"class":65},">0-100元\u003C\u002F",[51,79603,780],{"class":51672},[51,79605,51679],{"class":65},[51,79607,79608,79610,79612,79614,79616,79618,79620,79622,79624,79627,79629],{"class":53,"line":17214},[51,79609,51713],{"class":65},[51,79611,780],{"class":51672},[51,79613,61429],{"class":57},[51,79615,70],{"class":65},[51,79617,61434],{"class":61},[51,79619,79594],{"class":57},[51,79621,70],{"class":65},[51,79623,4088],{"class":61},[51,79625,79626],{"class":65},">100-300元\u003C\u002F",[51,79628,780],{"class":51672},[51,79630,51679],{"class":65},[51,79632,79633,79635,79637,79639,79641,79643,79645,79647,79649,79652,79654],{"class":53,"line":17228},[51,79634,51713],{"class":65},[51,79636,780],{"class":51672},[51,79638,61429],{"class":57},[51,79640,70],{"class":65},[51,79642,61434],{"class":61},[51,79644,79594],{"class":57},[51,79646,70],{"class":65},[51,79648,4101],{"class":61},[51,79650,79651],{"class":65},">300元以上\u003C\u002F",[51,79653,780],{"class":51672},[51,79655,51679],{"class":65},[51,79657,79658,79660,79662,79664,79666,79668,79671,79673],{"class":53,"line":17233},[51,79659,51713],{"class":65},[51,79661,780],{"class":51672},[51,79663,61429],{"class":57},[51,79665,70],{"class":65},[51,79667,61434],{"class":61},[51,79669,79670],{"class":65},">全部区间\u003C\u002F",[51,79672,780],{"class":51672},[51,79674,51679],{"class":65},[51,79676,79677,79679,79681],{"class":53,"line":17238},[51,79678,52789],{"class":65},[51,79680,51983],{"class":51672},[51,79682,51679],{"class":65},[51,79684,79685,79687,79689,79691,79693,79695],{"class":53,"line":17252},[51,79686,52516],{"class":65},[51,79688,51983],{"class":51672},[51,79690,53858],{"class":57},[51,79692,70],{"class":65},[51,79694,62980],{"class":61},[51,79696,51679],{"class":65},[51,79698,79699],{"class":53,"line":17264},[51,79700,79701],{"class":601},"    \u003C!-- \u003Cdiv class=\"item\">\n",[51,79703,79704],{"class":53,"line":17269},[51,79705,79706],{"class":601},"      \u003Cimg src=\"\" alt=\"\">\n",[51,79708,79709],{"class":53,"line":17282},[51,79710,79711],{"class":601},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[51,79713,79714],{"class":53,"line":17287},[51,79715,79716],{"class":601},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[51,79718,79719],{"class":53,"line":17292},[51,79720,79721],{"class":601},"    \u003C\u002Fdiv> -->\n",[51,79723,79724,79726,79728],{"class":53,"line":17297},[51,79725,52789],{"class":65},[51,79727,51983],{"class":51672},[51,79729,51679],{"class":65},[51,79731,79732,79734,79736],{"class":53,"line":17310},[51,79733,52516],{"class":65},[51,79735,52185],{"class":51672},[51,79737,51679],{"class":65},[51,79739,79740],{"class":53,"line":17315},[51,79741,79742],{"class":601},"    \u002F\u002F 2. 初始化数据\n",[51,79744,79745,79747,79750,79752],{"class":53,"line":33008},[51,79746,11605],{"class":69},[51,79748,79749],{"class":278}," goodsList",[51,79751,13948],{"class":69},[51,79753,55819],{"class":65},[51,79755,79756],{"class":53,"line":33014},[51,79757,79758],{"class":65},"      {\n",[51,79760,79761,79764,79767],{"class":53,"line":33020},[51,79762,79763],{"class":65},"        id: ",[51,79765,79766],{"class":61},"'4001172'",[51,79768,31843],{"class":65},[51,79770,79771,79774,79777],{"class":53,"line":33026},[51,79772,79773],{"class":65},"        name: ",[51,79775,79776],{"class":61},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[51,79778,31843],{"class":65},[51,79780,79781,79784,79787],{"class":53,"line":33032},[51,79782,79783],{"class":65},"        price: ",[51,79785,79786],{"class":61},"'289.00'",[51,79788,31843],{"class":65},[51,79790,79791,79794,79797],{"class":53,"line":33043},[51,79792,79793],{"class":65},"        picture: ",[51,79795,79796],{"class":61},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[51,79798,31843],{"class":65},[51,79800,79801],{"class":53,"line":33049},[51,79802,78264],{"class":65},[51,79804,79805],{"class":53,"line":33069},[51,79806,79758],{"class":65},[51,79808,79809,79811,79814],{"class":53,"line":33075},[51,79810,79763],{"class":65},[51,79812,79813],{"class":61},"'4001594'",[51,79815,31843],{"class":65},[51,79817,79818,79820,79823],{"class":53,"line":33086},[51,79819,79773],{"class":65},[51,79821,79822],{"class":61},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[51,79824,31843],{"class":65},[51,79826,79827,79829,79832],{"class":53,"line":33092},[51,79828,79783],{"class":65},[51,79830,79831],{"class":61},"'288.00'",[51,79833,31843],{"class":65},[51,79835,79836,79838,79841],{"class":53,"line":33098},[51,79837,79793],{"class":65},[51,79839,79840],{"class":61},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[51,79842,31843],{"class":65},[51,79844,79845],{"class":53,"line":33104},[51,79846,78264],{"class":65},[51,79848,79849],{"class":53,"line":33110},[51,79850,79758],{"class":65},[51,79852,79853,79855,79858],{"class":53,"line":33116},[51,79854,79763],{"class":65},[51,79856,79857],{"class":61},"'4001009'",[51,79859,31843],{"class":65},[51,79861,79862,79864,79867],{"class":53,"line":33122},[51,79863,79773],{"class":65},[51,79865,79866],{"class":61},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[51,79868,31843],{"class":65},[51,79870,79871,79873,79876],{"class":53,"line":33128},[51,79872,79783],{"class":65},[51,79874,79875],{"class":61},"'109.00'",[51,79877,31843],{"class":65},[51,79879,79880,79882,79885],{"class":53,"line":33148},[51,79881,79793],{"class":65},[51,79883,79884],{"class":61},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[51,79886,31843],{"class":65},[51,79888,79889],{"class":53,"line":33154},[51,79890,78264],{"class":65},[51,79892,79893],{"class":53,"line":33170},[51,79894,79758],{"class":65},[51,79896,79897,79899,79902],{"class":53,"line":33176},[51,79898,79763],{"class":65},[51,79900,79901],{"class":61},"'4001874'",[51,79903,31843],{"class":65},[51,79905,79906,79908,79911],{"class":53,"line":33190},[51,79907,79773],{"class":65},[51,79909,79910],{"class":61},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[51,79912,31843],{"class":65},[51,79914,79915,79917,79920],{"class":53,"line":33196},[51,79916,79783],{"class":65},[51,79918,79919],{"class":61},"'488.00'",[51,79921,31843],{"class":65},[51,79923,79924,79926,79929],{"class":53,"line":33211},[51,79925,79793],{"class":65},[51,79927,79928],{"class":61},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[51,79930,31843],{"class":65},[51,79932,79933],{"class":53,"line":33217},[51,79934,78264],{"class":65},[51,79936,79937],{"class":53,"line":33226},[51,79938,79758],{"class":65},[51,79940,79941,79943,79946],{"class":53,"line":33232},[51,79942,79763],{"class":65},[51,79944,79945],{"class":61},"'4001649'",[51,79947,31843],{"class":65},[51,79949,79950,79952,79955],{"class":53,"line":33241},[51,79951,79773],{"class":65},[51,79953,79954],{"class":61},"'大师监制龙泉青瓷茶叶罐'",[51,79956,31843],{"class":65},[51,79958,79959,79961,79964],{"class":53,"line":33247},[51,79960,79783],{"class":65},[51,79962,79963],{"class":61},"'139.00'",[51,79965,31843],{"class":65},[51,79967,79968,79970,79973],{"class":53,"line":33253},[51,79969,79793],{"class":65},[51,79971,79972],{"class":61},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[51,79974,31843],{"class":65},[51,79976,79977],{"class":53,"line":33262},[51,79978,78264],{"class":65},[51,79980,79981],{"class":53,"line":33268},[51,79982,79758],{"class":65},[51,79984,79985,79987,79990],{"class":53,"line":33279},[51,79986,79763],{"class":65},[51,79988,79989],{"class":61},"'3997185'",[51,79991,31843],{"class":65},[51,79993,79994,79996,79999],{"class":53,"line":33285},[51,79995,79773],{"class":65},[51,79997,79998],{"class":61},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[51,80000,31843],{"class":65},[51,80002,80003,80005,80008],{"class":53,"line":33304},[51,80004,79783],{"class":65},[51,80006,80007],{"class":61},"'108.00'",[51,80009,31843],{"class":65},[51,80011,80012,80014,80017],{"class":53,"line":33310},[51,80013,79793],{"class":65},[51,80015,80016],{"class":61},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[51,80018,31843],{"class":65},[51,80020,80021],{"class":53,"line":33321},[51,80022,78264],{"class":65},[51,80024,80025],{"class":53,"line":33327},[51,80026,79758],{"class":65},[51,80028,80029,80031,80034],{"class":53,"line":33347},[51,80030,79763],{"class":65},[51,80032,80033],{"class":61},"'3997403'",[51,80035,31843],{"class":65},[51,80037,80038,80040,80043],{"class":53,"line":33363},[51,80039,79773],{"class":65},[51,80041,80042],{"class":61},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[51,80044,31843],{"class":65},[51,80046,80047,80049,80052],{"class":53,"line":33369},[51,80048,79783],{"class":65},[51,80050,80051],{"class":61},"'100.00'",[51,80053,31843],{"class":65},[51,80055,80056,80058,80061],{"class":53,"line":33383},[51,80057,79793],{"class":65},[51,80059,80060],{"class":61},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[51,80062,31843],{"class":65},[51,80064,80065],{"class":53,"line":33389},[51,80066,78264],{"class":65},[51,80068,80069],{"class":53,"line":33395},[51,80070,79758],{"class":65},[51,80072,80073,80075,80078],{"class":53,"line":33406},[51,80074,79763],{"class":65},[51,80076,80077],{"class":61},"'3998274'",[51,80079,31843],{"class":65},[51,80081,80082,80084,80087],{"class":53,"line":33412},[51,80083,79773],{"class":65},[51,80085,80086],{"class":61},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[51,80088,31843],{"class":65},[51,80090,80091,80093,80095],{"class":53,"line":33418},[51,80092,79783],{"class":65},[51,80094,79963],{"class":61},[51,80096,31843],{"class":65},[51,80098,80099,80101,80104],{"class":53,"line":33428},[51,80100,79793],{"class":65},[51,80102,80103],{"class":61},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[51,80105,31843],{"class":65},[51,80107,80108],{"class":53,"line":33434},[51,80109,78264],{"class":65},[51,80111,80112],{"class":53,"line":33445},[51,80113,53481],{"class":65},[51,80115,80116],{"class":53,"line":33451},[51,80117,206],{"emptyLinePlaceholder":205},[51,80119,80120],{"class":53,"line":33461},[51,80121,80122],{"class":601},"    \u002F\u002F 1.渲染函数\n",[51,80124,80125,80127,80129,80131,80133],{"class":53,"line":33466},[51,80126,70456],{"class":69},[51,80128,70459],{"class":57},[51,80130,546],{"class":65},[51,80132,4266],{"class":248},[51,80134,12826],{"class":65},[51,80136,80137],{"class":53,"line":33472},[51,80138,80139],{"class":601},"      \u002F\u002F 声明空字符串\n",[51,80141,80142,80145,80148,80150],{"class":53,"line":33521},[51,80143,80144],{"class":69},"      let",[51,80146,80147],{"class":65}," str ",[51,80149,70],{"class":69},[51,80151,70476],{"class":61},[51,80153,80154],{"class":53,"line":33568},[51,80155,70481],{"class":601},[51,80157,80158,80160,80163,80165,80168,80171],{"class":53,"line":33573},[51,80159,58379],{"class":65},[51,80161,80162],{"class":57},"forEach",[51,80164,546],{"class":65},[51,80166,80167],{"class":248},"item",[51,80169,80170],{"class":69}," =>",[51,80172,15956],{"class":65},[51,80174,80175,80177,80180,80183,80185,80188,80190,80193,80196,80198],{"class":53,"line":33579},[51,80176,61642],{"class":69},[51,80178,80179],{"class":65}," { ",[51,80181,80182],{"class":278},"name",[51,80184,12819],{"class":65},[51,80186,80187],{"class":278},"price",[51,80189,12819],{"class":65},[51,80191,80192],{"class":278},"picture",[51,80194,80195],{"class":65}," } ",[51,80197,70],{"class":69},[51,80199,80200],{"class":65}," item\n",[51,80202,80203,80206,80208],{"class":53,"line":33598},[51,80204,80205],{"class":65},"        str ",[51,80207,9861],{"class":69},[51,80209,70540],{"class":61},[51,80211,80212],{"class":53,"line":33604},[51,80213,80214],{"class":61},"          \u003Cdiv class=\"item\">\n",[51,80216,80217,80220,80222],{"class":53,"line":33624},[51,80218,80219],{"class":61},"            \u003Cimg src=\"${",[51,80221,80192],{"class":65},[51,80223,80224],{"class":61},"}\" alt=\"\">\n",[51,80226,80227,80230,80232],{"class":53,"line":33630},[51,80228,80229],{"class":61},"            \u003Cp class=\"name\">${",[51,80231,80182],{"class":65},[51,80233,80234],{"class":61},"}\u003C\u002Fp>\n",[51,80236,80237,80240,80242],{"class":53,"line":33636},[51,80238,80239],{"class":61},"            \u003Cp class=\"price\">${",[51,80241,80187],{"class":65},[51,80243,80234],{"class":61},[51,80245,80246],{"class":53,"line":33646},[51,80247,80248],{"class":61},"          \u003C\u002Fdiv>\n",[51,80250,80251],{"class":53,"line":33651},[51,80252,80253],{"class":61},"        `\n",[51,80255,80256],{"class":53,"line":33657},[51,80257,65187],{"class":65},[51,80259,80260],{"class":53,"line":33673},[51,80261,80262],{"class":601},"      \u002F\u002F 追加给List\n",[51,80264,80265,80267,80269,80271,80274,80276,80278],{"class":53,"line":33718},[51,80266,56143],{"class":65},[51,80268,54771],{"class":57},[51,80270,546],{"class":65},[51,80272,80273],{"class":61},"'.list'",[51,80275,74621],{"class":65},[51,80277,70],{"class":69},[51,80279,74357],{"class":65},[51,80281,80282],{"class":53,"line":33724},[51,80283,2577],{"class":65},[51,80285,80286],{"class":53,"line":33730},[51,80287,80288],{"class":601},"    \u002F\u002F 页面一打开就需要渲染\n",[51,80290,80291,80294],{"class":53,"line":33736},[51,80292,80293],{"class":57},"    render",[51,80295,80296],{"class":65},"(goodsList)\n",[51,80298,80299],{"class":53,"line":33747},[51,80300,80301],{"class":601},"    \u002F\u002F 2.过滤筛选\n",[51,80303,80304,80306,80308,80310,80313,80315,80317,80319,80321,80323,80325,80327],{"class":53,"line":33753},[51,80305,52779],{"class":65},[51,80307,54771],{"class":57},[51,80309,546],{"class":65},[51,80311,80312],{"class":61},"'.filter'",[51,80314,31204],{"class":65},[51,80316,58185],{"class":57},[51,80318,546],{"class":65},[51,80320,58190],{"class":61},[51,80322,12819],{"class":65},[51,80324,617],{"class":248},[51,80326,80170],{"class":69},[51,80328,15956],{"class":65},[51,80330,80331],{"class":53,"line":33759},[51,80332,80333],{"class":601},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[51,80335,80336,80338,80340,80343,80345,80347,80349,80351],{"class":53,"line":33765},[51,80337,58600],{"class":69},[51,80339,80179],{"class":65},[51,80341,80342],{"class":278},"tagName",[51,80344,12819],{"class":65},[51,80346,31913],{"class":278},[51,80348,80195],{"class":65},[51,80350,70],{"class":69},[51,80352,80353],{"class":65}," e.target\n",[51,80355,80356],{"class":53,"line":33783},[51,80357,80358],{"class":601},"      \u002F\u002F 判断\n",[51,80360,80361,80363,80365,80367,80369],{"class":53,"line":33797},[51,80362,54852],{"class":69},[51,80364,67406],{"class":65},[51,80366,54858],{"class":69},[51,80368,68628],{"class":61},[51,80370,12826],{"class":65},[51,80372,80373],{"class":53,"line":33806},[51,80374,80375],{"class":601},"        \u002F\u002F console.log(11)\n",[51,80377,80378],{"class":53,"line":33815},[51,80379,80380],{"class":601},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[51,80382,80383],{"class":53,"line":33824},[51,80384,80385],{"class":601},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[51,80387,80388,80390,80392,80394],{"class":53,"line":33833},[51,80389,52202],{"class":69},[51,80391,52205],{"class":65},[51,80393,70],{"class":69},[51,80395,80396],{"class":65}," goodsList\n",[51,80398,80399,80401,80404,80406,80409],{"class":53,"line":33839},[51,80400,369],{"class":69},[51,80402,80403],{"class":65}," (dataset.index ",[51,80405,54858],{"class":69},[51,80407,80408],{"class":61}," '1'",[51,80410,12826],{"class":65},[51,80412,80413,80416,80418,80421,80424,80426,80428,80430,80433,80435,80437,80440,80442,80444,80446],{"class":53,"line":33845},[51,80414,80415],{"class":65},"          arr ",[51,80417,70],{"class":69},[51,80419,80420],{"class":65}," goodsList.",[51,80422,80423],{"class":57},"filter",[51,80425,546],{"class":65},[51,80427,80167],{"class":248},[51,80429,80170],{"class":69},[51,80431,80432],{"class":65}," item.price ",[51,80434,2108],{"class":69},[51,80436,4479],{"class":278},[51,80438,80439],{"class":69}," &&",[51,80441,80432],{"class":65},[51,80443,1997],{"class":69},[51,80445,6138],{"class":278},[51,80447,282],{"class":65},[51,80449,80450,80453,80455,80457,80459,80461,80464],{"class":53,"line":33853},[51,80451,80452],{"class":65},"        } ",[51,80454,2099],{"class":69},[51,80456,2102],{"class":69},[51,80458,80403],{"class":65},[51,80460,54858],{"class":69},[51,80462,80463],{"class":61}," '2'",[51,80465,12826],{"class":65},[51,80467,80468,80470,80472,80474,80476,80478,80480,80482,80484,80486,80488,80490,80492,80494,80497],{"class":53,"line":33858},[51,80469,80415],{"class":65},[51,80471,70],{"class":69},[51,80473,80420],{"class":65},[51,80475,80423],{"class":57},[51,80477,546],{"class":65},[51,80479,80167],{"class":248},[51,80481,80170],{"class":69},[51,80483,80432],{"class":65},[51,80485,2108],{"class":69},[51,80487,6138],{"class":278},[51,80489,80439],{"class":69},[51,80491,80432],{"class":65},[51,80493,1997],{"class":69},[51,80495,80496],{"class":278}," 300",[51,80498,282],{"class":65},[51,80500,80501,80503,80505,80507,80509,80511,80514],{"class":53,"line":33864},[51,80502,80452],{"class":65},[51,80504,2099],{"class":69},[51,80506,2102],{"class":69},[51,80508,80403],{"class":65},[51,80510,54858],{"class":69},[51,80512,80513],{"class":61}," '3'",[51,80515,12826],{"class":65},[51,80517,80518,80520,80522,80524,80526,80528,80530,80532,80534,80536,80538],{"class":53,"line":33875},[51,80519,80415],{"class":65},[51,80521,70],{"class":69},[51,80523,80420],{"class":65},[51,80525,80423],{"class":57},[51,80527,546],{"class":65},[51,80529,80167],{"class":248},[51,80531,80170],{"class":69},[51,80533,80432],{"class":65},[51,80535,2108],{"class":69},[51,80537,80496],{"class":278},[51,80539,282],{"class":65},[51,80541,80542],{"class":53,"line":33881},[51,80543,2917],{"class":65},[51,80545,80546],{"class":53,"line":33901},[51,80547,80548],{"class":601},"        \u002F\u002F 渲染函数\n",[51,80550,80551,80553],{"class":53,"line":33907},[51,80552,70780],{"class":57},[51,80554,52784],{"class":65},[51,80556,80557],{"class":53,"line":33913},[51,80558,52770],{"class":65},[51,80560,80561],{"class":53,"line":33919},[51,80562,206],{"emptyLinePlaceholder":205},[51,80564,80565],{"class":53,"line":33936},[51,80566,33836],{"class":65},[51,80568,80569,80571,80573],{"class":53,"line":33942},[51,80570,52789],{"class":65},[51,80572,52185],{"class":51672},[51,80574,51679],{"class":65},[51,80576,80577,80579,80581],{"class":53,"line":33948},[51,80578,52157],{"class":65},[51,80580,52172],{"class":51672},[51,80582,51679],{"class":65},[51,80584,80585],{"class":53,"line":33954},[51,80586,206],{"emptyLinePlaceholder":205},[51,80588,80589,80591,80593],{"class":53,"line":33960},[51,80590,52157],{"class":65},[51,80592,51007],{"class":51672},[51,80594,51679],{"class":65},[486,80596,80598],{"id":80597},"_410-深入了解对象","4.10 深入了解对象",[513,80600,80602],{"id":80601},"_4101-创建对象","4.10.1 创建对象",[10,80604,80605],{},[460,80606],{"alt":46,"src":80607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[10,80609,80610],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[513,80612,80614],{"id":80613},"_4102-构造函数","4.10.2 构造函数",[10,80616,80617,80620],{},[691,80618,80619],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[10,80622,80623,80626],{},[691,80624,80625],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[41,80628,80630],{"className":51005,"code":80629,"language":51007,"meta":46,"style":46},"\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",[48,80631,80632,80640,80645,80666,80679,80691,80703,80707,80712,80739,80744,80771],{"__ignoreMap":46},[51,80633,80634,80636,80638],{"class":53,"line":54},[51,80635,1452],{"class":65},[51,80637,52185],{"class":51672},[51,80639,51679],{"class":65},[51,80641,80642],{"class":53,"line":185},[51,80643,80644],{"class":601},"\u002F\u002F例：\n",[51,80646,80647,80649,80652,80654,80656,80658,80660,80662,80664],{"class":53,"line":202},[51,80648,54821],{"class":69},[51,80650,80651],{"class":57}," Pig",[51,80653,546],{"class":65},[51,80655,80182],{"class":248},[51,80657,920],{"class":65},[51,80659,70593],{"class":248},[51,80661,920],{"class":65},[51,80663,70610],{"class":248},[51,80665,12826],{"class":65},[51,80667,80668,80671,80674,80676],{"class":53,"line":209},[51,80669,80670],{"class":278},"    this",[51,80672,80673],{"class":65},".name",[51,80675,70],{"class":69},[51,80677,80678],{"class":65},"name\n",[51,80680,80681,80683,80686,80688],{"class":53,"line":223},[51,80682,80670],{"class":278},[51,80684,80685],{"class":65},".age",[51,80687,70],{"class":69},[51,80689,80690],{"class":65},"age\n",[51,80692,80693,80695,80698,80700],{"class":53,"line":237},[51,80694,80670],{"class":278},[51,80696,80697],{"class":65},".gender",[51,80699,70],{"class":69},[51,80701,80702],{"class":65},"gender    \n",[51,80704,80705],{"class":53,"line":242},[51,80706,1974],{"class":65},[51,80708,80709],{"class":53,"line":257},[51,80710,80711],{"class":601},"\u002F\u002F创建佩奇对象\n",[51,80713,80714,80716,80719,80721,80723,80725,80728,80730,80732,80734,80737],{"class":53,"line":262},[51,80715,7176],{"class":69},[51,80717,80718],{"class":278}," Peppa",[51,80720,12101],{"class":69},[51,80722,80651],{"class":57},[51,80724,546],{"class":65},[51,80726,80727],{"class":61},"'佩奇'",[51,80729,920],{"class":65},[51,80731,886],{"class":278},[51,80733,920],{"class":65},[51,80735,80736],{"class":61},"'女'",[51,80738,282],{"class":65},[51,80740,80741],{"class":53,"line":285},[51,80742,80743],{"class":601},"\u002F\u002F创建乔治对象\n",[51,80745,80746,80748,80751,80753,80755,80757,80760,80762,80764,80766,80769],{"class":53,"line":296},[51,80747,7176],{"class":69},[51,80749,80750],{"class":278}," George",[51,80752,12101],{"class":69},[51,80754,80651],{"class":57},[51,80756,546],{"class":65},[51,80758,80759],{"class":61},"'乔治'",[51,80761,920],{"class":65},[51,80763,614],{"class":278},[51,80765,920],{"class":65},[51,80767,80768],{"class":61},"'男'",[51,80770,282],{"class":65},[51,80772,80773,80775,80777],{"class":53,"line":307},[51,80774,52157],{"class":65},[51,80776,52185],{"class":51672},[51,80778,51679],{"class":65},[10,80780,80781],{},[460,80782],{"alt":46,"src":80783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[10,80785,80786],{},[460,80787],{"alt":46,"src":80788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[10,80790,80791],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[10,80793,80794],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[10,80796,80797],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[10,80799,80800],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[10,80802,80803],{},"这里用等号是因为：对象.属性=值",[10,80805,80806],{},"①利用对象字面量创建对象",[10,80808,80809],{},"const o={",[10,80811,80812],{},"name:'pink'",[10,80814,80815],{},"} ②利用new Object创建对象",[10,80817,80818],{},"const o=new Object({name:'pink'})",[10,80820,80821],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[10,80823,80824],{},"构造函数创建对象的执行过程：",[10,80826,80827],{},[460,80828],{"alt":46,"src":80829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[513,80831,80833],{"id":80832},"_4103-实例成员","4.10.3 实例成员",[10,80835,80836],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[19,80838,80839,80842,80845],{},[22,80840,80841],{},"实例对象的属性和方法即为实例成员",[22,80843,80844],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[22,80846,80847],{},"构造函数创建的实例对象彼此独立互不影响",[513,80849,80851],{"id":80850},"_4104-静态成员","4.10.4 静态成员",[10,80853,80854],{},[460,80855],{"alt":46,"src":80856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[10,80858,80859],{},"静态成员有Date.now() Math.PI Math.random()",[10,80861,80862],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[10,80864,80865],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[10,80867,80868],{},"function Pig(name) n {",[10,80870,80871],{},"this.name=name",[10,80873,1488],{},[10,80875,80876],{},"Pig.eyes=2",[10,80878,80879],{},"Pig.sayHai=function () { console.log(this) }",[10,80881,80882],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[10,80884,80885],{},"console.log(Pig.eyes) \u002F\u002F2",[10,80887,11716],{},[19,80889,80890,80893,80896,80899,80902],{},[22,80891,80892],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[22,80894,80895],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[22,80897,80898],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[22,80900,80901],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[22,80903,80904],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[10,80906,80907],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[513,80909,80911],{"id":80910},"_4105-内置构造函数","4.10.5 内置构造函数",[10,80913,80914],{},"内置构造函数包含：",[10,80916,80917],{},[460,80918],{"alt":46,"src":80919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[10,80921,80922],{},[460,80923],{"alt":46,"src":80924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[10,80926,80927],{},"这些基本数据类型，js对他们进行了包装",[52185,80929,80930],{},"\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",[22381,80932,80934],{"id":80933},"_41051-object","4.10.5.1 Object",[10,80936,80937],{},"Object 是内置的构造函数，用于创建普通对象",[10,80939,80940],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[41,80942,80944],{"className":51005,"code":80943,"language":51007,"meta":46,"style":46},"const user=new Object({name:'小明',age:15})\n",[48,80945,80946],{"__ignoreMap":46},[51,80947,80948],{"class":53,"line":54},[51,80949,80943],{"class":65},[10,80951,80952],{},"三个常用的静态方法：",[23293,80954,80956],{"id":80955},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[10,80958,80959],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[10,80961,80962],{},[460,80963],{"alt":46,"src":80964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[10,80966,80967],{},[460,80968],{"alt":46,"src":80969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[41,80971,80973],{"className":53439,"code":80972,"language":53441,"meta":46,"style":46},"\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",[48,80974,80975,80983,80991,80996,81001,81006,81011,81016,81021,81029],{"__ignoreMap":46},[51,80976,80977,80979,80981],{"class":53,"line":54},[51,80978,1452],{"class":65},[51,80980,52172],{"class":51672},[51,80982,51679],{"class":65},[51,80984,80985,80987,80989],{"class":53,"line":185},[51,80986,52516],{"class":65},[51,80988,52185],{"class":51672},[51,80990,51679],{"class":65},[51,80992,80993],{"class":53,"line":202},[51,80994,80995],{"class":65},"    const o = { name: 'pink', age: 6 }\n",[51,80997,80998],{"class":53,"line":209},[51,80999,81000],{"class":65},"    \u002F\u002F 获得所有属性名\n",[51,81002,81003],{"class":53,"line":223},[51,81004,81005],{"class":65},"    const arr = Object.keys(o)\n",[51,81007,81008],{"class":53,"line":237},[51,81009,81010],{"class":65},"    console.log(arr)\n",[51,81012,81013],{"class":53,"line":242},[51,81014,81015],{"class":65},"    \u002F\u002F 获得所有属性值\n",[51,81017,81018],{"class":53,"line":257},[51,81019,81020],{"class":65},"    console.log(Object.values(o))\n",[51,81022,81023,81025,81027],{"class":53,"line":262},[51,81024,52789],{"class":65},[51,81026,52185],{"class":51672},[51,81028,51679],{"class":65},[51,81030,81031,81033,81035],{"class":53,"line":285},[51,81032,52157],{"class":65},[51,81034,52172],{"class":51672},[51,81036,51679],{"class":65},[23293,81038,81040],{"id":81039},"_410512-object-assign","4.10.5.1.2 Object. assign",[10,81042,81043],{},"Object.assign(oo,o)",[10,81045,81046],{},"后的东西添加给前 是追加",[10,81048,81049],{},[460,81050],{"alt":46,"src":81051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[10,81053,81054],{},[460,81055],{"alt":46,"src":81056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[41,81058,81060],{"className":53439,"code":81059,"language":53441,"meta":46,"style":46},"\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",[48,81061,81062,81070,81078,81082,81086,81090,81094,81098,81102,81107,81112,81117,81122,81127,81135],{"__ignoreMap":46},[51,81063,81064,81066,81068],{"class":53,"line":54},[51,81065,1452],{"class":65},[51,81067,52172],{"class":51672},[51,81069,51679],{"class":65},[51,81071,81072,81074,81076],{"class":53,"line":185},[51,81073,52516],{"class":65},[51,81075,52185],{"class":51672},[51,81077,51679],{"class":65},[51,81079,81080],{"class":53,"line":202},[51,81081,80995],{"class":65},[51,81083,81084],{"class":53,"line":209},[51,81085,81000],{"class":65},[51,81087,81088],{"class":53,"line":223},[51,81089,81005],{"class":65},[51,81091,81092],{"class":53,"line":237},[51,81093,81010],{"class":65},[51,81095,81096],{"class":53,"line":242},[51,81097,81015],{"class":65},[51,81099,81100],{"class":53,"line":257},[51,81101,81020],{"class":65},[51,81103,81104],{"class":53,"line":262},[51,81105,81106],{"class":65},"    const oo = {}\n",[51,81108,81109],{"class":53,"line":285},[51,81110,81111],{"class":65},"    Object.assign(oo, o)\n",[51,81113,81114],{"class":53,"line":296},[51,81115,81116],{"class":65},"    console.log(oo)\n",[51,81118,81119],{"class":53,"line":307},[51,81120,81121],{"class":65},"    Object.assign(o, { gender: '女' })\n",[51,81123,81124],{"class":53,"line":324},[51,81125,81126],{"class":65},"    console.log(o)\n",[51,81128,81129,81131,81133],{"class":53,"line":329},[51,81130,52789],{"class":65},[51,81132,52185],{"class":51672},[51,81134,51679],{"class":65},[51,81136,81137,81139,81141],{"class":53,"line":334},[51,81138,52157],{"class":65},[51,81140,52172],{"class":51672},[51,81142,51679],{"class":65},[10,81144,81145],{},[460,81146],{"alt":46,"src":81147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22381,81149,81151],{"id":81150},"_41052-array","4.10.5.2 Array",[10,81153,81154],{},"Array 是内置的构造函数，用于创建数组",[10,81156,81157],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[41,81159,81161],{"className":51005,"code":81160,"language":51007,"meta":46,"style":46},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[48,81162,81163,81168],{"__ignoreMap":46},[51,81164,81165],{"class":53,"line":54},[51,81166,81167],{"class":65},"const arr=new Array(3,5)\n",[51,81169,81170],{"class":53,"line":185},[51,81171,81172],{"class":65},"console.log(arr)  \u002F\u002F[3,5]\n",[10,81174,81175],{},"Array的实例方法，这个方法是实例成员",[10,81177,81178],{},[460,81179],{"alt":46,"src":81180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23293,81182,81184],{"id":81183},"_410521-reduce","4.10.5.2.1 reduce",[10,81186,81187],{},[460,81188],{"alt":46,"src":81189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[41,81191,81193],{"className":53439,"code":81192,"language":53441,"meta":46,"style":46},"\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",[48,81194,81195,81203,81211,81216,81221,81226,81231,81235,81240,81245,81250,81254,81259,81264,81268,81273,81278,81283,81291],{"__ignoreMap":46},[51,81196,81197,81199,81201],{"class":53,"line":54},[51,81198,1452],{"class":65},[51,81200,52172],{"class":51672},[51,81202,51679],{"class":65},[51,81204,81205,81207,81209],{"class":53,"line":185},[51,81206,52516],{"class":65},[51,81208,52185],{"class":51672},[51,81210,51679],{"class":65},[51,81212,81213],{"class":53,"line":202},[51,81214,81215],{"class":65},"    const arr = [1, 5, 8]\n",[51,81217,81218],{"class":53,"line":209},[51,81219,81220],{"class":65},"    \u002F\u002F 1.没有初始值\n",[51,81222,81223],{"class":53,"line":223},[51,81224,81225],{"class":65},"    const total = arr.reduce(function (prev, current) {\n",[51,81227,81228],{"class":53,"line":237},[51,81229,81230],{"class":65},"      return prev + current\n",[51,81232,81233],{"class":53,"line":242},[51,81234,33836],{"class":65},[51,81236,81237],{"class":53,"line":257},[51,81238,81239],{"class":65},"    console.log(total)   \u002F\u002F14\n",[51,81241,81242],{"class":53,"line":262},[51,81243,81244],{"class":65},"    \u002F\u002F 2.有初始值\n",[51,81246,81247],{"class":53,"line":285},[51,81248,81249],{"class":65},"    const total1 = arr.reduce(function (prev, current) {\n",[51,81251,81252],{"class":53,"line":296},[51,81253,81230],{"class":65},[51,81255,81256],{"class":53,"line":307},[51,81257,81258],{"class":65},"    }, 10)\n",[51,81260,81261],{"class":53,"line":324},[51,81262,81263],{"class":65},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[51,81265,81266],{"class":53,"line":329},[51,81267,206],{"emptyLinePlaceholder":205},[51,81269,81270],{"class":53,"line":334},[51,81271,81272],{"class":65},"    \u002F\u002F 3.箭头函数写法\n",[51,81274,81275],{"class":53,"line":340},[51,81276,81277],{"class":65},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[51,81279,81280],{"class":53,"line":345},[51,81281,81282],{"class":65},"    console.log(total2)   \u002F\u002F24\n",[51,81284,81285,81287,81289],{"class":53,"line":357},[51,81286,52789],{"class":65},[51,81288,52185],{"class":51672},[51,81290,51679],{"class":65},[51,81292,81293,81295,81297],{"class":53,"line":366},[51,81294,52157],{"class":65},[51,81296,52172],{"class":51672},[51,81298,51679],{"class":65},[10,81300,81301],{},"执行过程：",[19,81303,81304,81307,81310],{},[22,81305,81306],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[22,81308,81309],{},"每一次循环，把返回值给作为下一次循环的上一次值",[22,81311,81312],{},"如果有起始值，则起始值作为上一次值",[41,81314,81316],{"className":53439,"code":81315,"language":53441,"meta":46,"style":46},"\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",[48,81317,81318,81326,81334,81338,81342,81346,81350,81354,81358,81363,81368,81373,81378,81383,81387,81391,81395,81399,81403,81407,81412,81416,81421,81425,81430,81435,81439,81443,81447,81455],{"__ignoreMap":46},[51,81319,81320,81322,81324],{"class":53,"line":54},[51,81321,1452],{"class":65},[51,81323,52172],{"class":51672},[51,81325,51679],{"class":65},[51,81327,81328,81330,81332],{"class":53,"line":185},[51,81329,52516],{"class":65},[51,81331,52185],{"class":51672},[51,81333,51679],{"class":65},[51,81335,81336],{"class":53,"line":202},[51,81337,81215],{"class":65},[51,81339,81340],{"class":53,"line":209},[51,81341,81220],{"class":65},[51,81343,81344],{"class":53,"line":223},[51,81345,81225],{"class":65},[51,81347,81348],{"class":53,"line":237},[51,81349,81230],{"class":65},[51,81351,81352],{"class":53,"line":242},[51,81353,33836],{"class":65},[51,81355,81356],{"class":53,"line":257},[51,81357,81239],{"class":65},[51,81359,81360],{"class":53,"line":262},[51,81361,81362],{"class":65},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[51,81364,81365],{"class":53,"line":285},[51,81366,81367],{"class":65},"    \u002F\u002F     1              5                    6\n",[51,81369,81370],{"class":53,"line":296},[51,81371,81372],{"class":65},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[51,81374,81375],{"class":53,"line":307},[51,81376,81377],{"class":65},"    \u002F\u002F     6              8                    14\n",[51,81379,81380],{"class":53,"line":324},[51,81381,81382],{"class":65},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[51,81384,81385],{"class":53,"line":329},[51,81386,81244],{"class":65},[51,81388,81389],{"class":53,"line":334},[51,81390,81249],{"class":65},[51,81392,81393],{"class":53,"line":340},[51,81394,81230],{"class":65},[51,81396,81397],{"class":53,"line":345},[51,81398,81258],{"class":65},[51,81400,81401],{"class":53,"line":357},[51,81402,81263],{"class":65},[51,81404,81405],{"class":53,"line":366},[51,81406,81362],{"class":65},[51,81408,81409],{"class":53,"line":383},[51,81410,81411],{"class":65},"    \u002F\u002F     10             1                     11\n",[51,81413,81414],{"class":53,"line":392},[51,81415,81372],{"class":65},[51,81417,81418],{"class":53,"line":403},[51,81419,81420],{"class":65},"    \u002F\u002F     11             5                    16\n",[51,81422,81423],{"class":53,"line":409},[51,81424,81372],{"class":65},[51,81426,81427],{"class":53,"line":414},[51,81428,81429],{"class":65},"    \u002F\u002F     16             8                    24\n",[51,81431,81432],{"class":53,"line":433},[51,81433,81434],{"class":65},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[51,81436,81437],{"class":53,"line":439},[51,81438,81272],{"class":65},[51,81440,81441],{"class":53,"line":444},[51,81442,81277],{"class":65},[51,81444,81445],{"class":53,"line":453},[51,81446,81282],{"class":65},[51,81448,81449,81451,81453],{"class":53,"line":2174},[51,81450,52789],{"class":65},[51,81452,52185],{"class":51672},[51,81454,51679],{"class":65},[51,81456,81457,81459,81461],{"class":53,"line":2965},[51,81458,52157],{"class":65},[51,81460,52172],{"class":51672},[51,81462,51679],{"class":65},[23293,81464,81466],{"id":81465},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[10,81468,81469],{},[460,81470],{"alt":46,"src":81471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[41,81473,81475],{"className":53439,"code":81474,"language":53441,"meta":46,"style":46},"\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",[48,81476,81477,81485,81493,81498,81503,81508,81513,81517,81522,81527,81532,81537,81542,81547,81551,81556,81560,81565,81573],{"__ignoreMap":46},[51,81478,81479,81481,81483],{"class":53,"line":54},[51,81480,1452],{"class":65},[51,81482,52172],{"class":51672},[51,81484,51679],{"class":65},[51,81486,81487,81489,81491],{"class":53,"line":185},[51,81488,52516],{"class":65},[51,81490,52185],{"class":51672},[51,81492,51679],{"class":65},[51,81494,81495],{"class":53,"line":202},[51,81496,81497],{"class":65},"    const arr = [\n",[51,81499,81500],{"class":53,"line":209},[51,81501,81502],{"class":65},"      { name: '张三', salary: 10000 },\n",[51,81504,81505],{"class":53,"line":223},[51,81506,81507],{"class":65},"      { name: '李四', salary: 10000 },\n",[51,81509,81510],{"class":53,"line":237},[51,81511,81512],{"class":65},"      { name: '王五', salary: 10000 }\n",[51,81514,81515],{"class":53,"line":242},[51,81516,53481],{"class":65},[51,81518,81519],{"class":53,"line":257},[51,81520,81521],{"class":65},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[51,81523,81524],{"class":53,"line":262},[51,81525,81526],{"class":65},"    \u002F\u002F prev是累计值\n",[51,81528,81529],{"class":53,"line":285},[51,81530,81531],{"class":65},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[51,81533,81534],{"class":53,"line":296},[51,81535,81536],{"class":65},"    console.log(total)\n",[51,81538,81539],{"class":53,"line":307},[51,81540,81541],{"class":65},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[51,81543,81544],{"class":53,"line":324},[51,81545,81546],{"class":65},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[51,81548,81549],{"class":53,"line":329},[51,81550,81541],{"class":65},[51,81552,81553],{"class":53,"line":334},[51,81554,81555],{"class":65},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[51,81557,81558],{"class":53,"line":340},[51,81559,81541],{"class":65},[51,81561,81562],{"class":53,"line":345},[51,81563,81564],{"class":65},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[51,81566,81567,81569,81571],{"class":53,"line":357},[51,81568,52789],{"class":65},[51,81570,52185],{"class":51672},[51,81572,51679],{"class":65},[51,81574,81575,81577,81579],{"class":53,"line":366},[51,81576,52157],{"class":65},[51,81578,52172],{"class":51672},[51,81580,51679],{"class":65},[23293,81582,81584],{"id":81583},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[10,81586,81587],{},[460,81588],{"alt":46,"src":81589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[10,81591,81592],{},[460,81593],{"alt":46,"src":81594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[19,81596,81597],{},[22,81598,81599],{},"find()",[10,81601,81602],{},"循环查找，找到第一个就ok",[10,81604,81605],{},[780,81606,81609],{"href":81607,"rel":81608},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24246],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[41,81611,81613],{"className":51005,"code":81612,"language":51007,"meta":46,"style":46},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[48,81614,81615,81620,81625],{"__ignoreMap":46},[51,81616,81617],{"class":53,"line":54},[51,81618,81619],{"class":65},"const array1 = [5, 12, 8, 130, 44]\n",[51,81621,81622],{"class":53,"line":185},[51,81623,81624],{"class":65},"const found = array1.find((element) => element > 10)\n",[51,81626,81627],{"class":53,"line":202},[51,81628,81629],{"class":65},"console.log(found)  \u002F\u002F12\n",[10,81631,81632,81634,81635,81640,81641,81644,81645,81647,81648,81653,81654,81656,81657,81659,81660,81662,81663],{},[48,81633,81599],{}," 方法是一个",[780,81636,81639],{"href":81637,"rel":81638},"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",[24246],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[48,81642,81643],{},"callbackFn"," 函数，直到 ",[48,81646,81643],{}," 返回一个",[780,81649,81652],{"href":81650,"rel":81651},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24246],"真值","。然后 ",[48,81655,81599],{}," 返回该元素并停止迭代数组。如果 ",[48,81658,81643],{}," 从未返回真值，则 ",[48,81661,81599],{}," 返回 ",[48,81664,81665],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[41,81667,81669],{"className":53439,"code":81668,"language":53441,"meta":46,"style":46},"\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",[48,81670,81671,81679,81687,81692,81697,81702,81706,81711,81716,81720,81725,81730,81734,81738,81743,81748,81752,81756,81761,81766,81771,81776,81781,81785,81790,81795,81800,81805,81809,81814,81822],{"__ignoreMap":46},[51,81672,81673,81675,81677],{"class":53,"line":54},[51,81674,1452],{"class":65},[51,81676,52172],{"class":51672},[51,81678,51679],{"class":65},[51,81680,81681,81683,81685],{"class":53,"line":185},[51,81682,52516],{"class":65},[51,81684,52185],{"class":51672},[51,81686,51679],{"class":65},[51,81688,81689],{"class":53,"line":202},[51,81690,81691],{"class":65},"    const arr = ['red', 'blue', 'green']\n",[51,81693,81694],{"class":53,"line":209},[51,81695,81696],{"class":65},"    const found = arr.find(item => item === 'pink')\n",[51,81698,81699],{"class":53,"line":223},[51,81700,81701],{"class":65},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[51,81703,81704],{"class":53,"line":237},[51,81705,206],{"emptyLinePlaceholder":205},[51,81707,81708],{"class":53,"line":242},[51,81709,81710],{"class":65},"    \u002F\u002F 使用场景，用于查找数据\n",[51,81712,81713],{"class":53,"line":257},[51,81714,81715],{"class":65},"    const arr1 = [\n",[51,81717,81718],{"class":53,"line":262},[51,81719,79758],{"class":65},[51,81721,81722],{"class":53,"line":285},[51,81723,81724],{"class":65},"        name: '小米',\n",[51,81726,81727],{"class":53,"line":296},[51,81728,81729],{"class":65},"        price: 1999\n",[51,81731,81732],{"class":53,"line":307},[51,81733,78264],{"class":65},[51,81735,81736],{"class":53,"line":324},[51,81737,79758],{"class":65},[51,81739,81740],{"class":53,"line":329},[51,81741,81742],{"class":65},"        name: '华为',\n",[51,81744,81745],{"class":53,"line":334},[51,81746,81747],{"class":65},"        price: 3999\n",[51,81749,81750],{"class":53,"line":340},[51,81751,52770],{"class":65},[51,81753,81754],{"class":53,"line":345},[51,81755,53481],{"class":65},[51,81757,81758],{"class":53,"line":357},[51,81759,81760],{"class":65},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[51,81762,81763],{"class":53,"line":366},[51,81764,81765],{"class":65},"    \u002F\u002F const found1 = arr1.find(item => {\n",[51,81767,81768],{"class":53,"line":383},[51,81769,81770],{"class":65},"    \u002F\u002F   if (item.name === '小米') {\n",[51,81772,81773],{"class":53,"line":392},[51,81774,81775],{"class":65},"    \u002F\u002F     return item\n",[51,81777,81778],{"class":53,"line":403},[51,81779,81780],{"class":65},"    \u002F\u002F   }\n",[51,81782,81783],{"class":53,"line":409},[51,81784,63662],{"class":65},[51,81786,81787],{"class":53,"line":414},[51,81788,81789],{"class":65},"    \u002F\u002F 另一种写法\n",[51,81791,81792],{"class":53,"line":433},[51,81793,81794],{"class":65},"    const found1 = arr1.find(item => {\n",[51,81796,81797],{"class":53,"line":439},[51,81798,81799],{"class":65},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[51,81801,81802],{"class":53,"line":444},[51,81803,81804],{"class":65},"      return item.name = '小米'\n",[51,81806,81807],{"class":53,"line":453},[51,81808,33836],{"class":65},[51,81810,81811],{"class":53,"line":2174},[51,81812,81813],{"class":65},"    console.log(found1)\n",[51,81815,81816,81818,81820],{"class":53,"line":2965},[51,81817,52789],{"class":65},[51,81819,52185],{"class":51672},[51,81821,51679],{"class":65},[51,81823,81824,81826,81828],{"class":53,"line":2979},[51,81825,52157],{"class":65},[51,81827,52172],{"class":51672},[51,81829,51679],{"class":65},[10,81831,81832],{},[460,81833],{"alt":46,"src":81834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[10,81836,81837],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[19,81839,81840],{"start":185},[22,81841,81842],{},"every()返回的是布尔值",[10,81844,81845],{},[780,81846,81849],{"href":81847,"rel":81848},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24246],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[10,81851,81852],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[10,81854,81855],{},"some是只有有一个就没问题",[10,81857,81858],{},"every是必须全是才行",[41,81860,81864],{"className":81861,"code":81862,"language":81863,"meta":46,"style":46},"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",[48,81865,81866,81882,81896,81900,81909],{"__ignoreMap":46},[51,81867,81868,81870,81873,81875,81877,81880],{"class":53,"line":54},[51,81869,54821],{"class":69},[51,81871,81872],{"class":65}," isBigEnough(element, ",[51,81874,74430],{"class":69},[51,81876,12819],{"class":65},[51,81878,81879],{"class":69},"array",[51,81881,12826],{"class":65},[51,81883,81884,81887,81890,81892,81894],{"class":53,"line":185},[51,81885,81886],{"class":69},"  return",[51,81888,81889],{"class":65}," element ",[51,81891,2108],{"class":69},[51,81893,2428],{"class":278},[51,81895,1703],{"class":65},[51,81897,81898],{"class":53,"line":202},[51,81899,1974],{"class":65},[51,81901,81902,81905,81907],{"class":53,"line":209},[51,81903,81904],{"class":65},"[12, 5, 8, 130, 44].every(isBigEnough); ",[51,81906,33704],{"class":69},[51,81908,54888],{"class":65},[51,81910,81911,81914,81916],{"class":53,"line":223},[51,81912,81913],{"class":65},"[12, 54, 18, 130, 44].every(isBigEnough); ",[51,81915,33704],{"class":69},[51,81917,58312],{"class":65},[41,81919,81921],{"className":53439,"code":81920,"language":53441,"meta":46,"style":46},"\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",[48,81922,81923,81931,81939,81944,81948,81953,81958,81966],{"__ignoreMap":46},[51,81924,81925,81927,81929],{"class":53,"line":54},[51,81926,1452],{"class":65},[51,81928,52172],{"class":51672},[51,81930,51679],{"class":65},[51,81932,81933,81935,81937],{"class":53,"line":185},[51,81934,52516],{"class":65},[51,81936,52185],{"class":51672},[51,81938,51679],{"class":65},[51,81940,81941],{"class":53,"line":202},[51,81942,81943],{"class":65},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[51,81945,81946],{"class":53,"line":209},[51,81947,78694],{"class":65},[51,81949,81950],{"class":53,"line":223},[51,81951,81952],{"class":65},"    const flag = arr.every(item => item >= 10)\n",[51,81954,81955],{"class":53,"line":237},[51,81956,81957],{"class":65},"    console.log(flag)    \u002F\u002Ftrue\n",[51,81959,81960,81962,81964],{"class":53,"line":242},[51,81961,52789],{"class":65},[51,81963,52185],{"class":51672},[51,81965,51679],{"class":65},[51,81967,81968,81970,81972],{"class":53,"line":257},[51,81969,52157],{"class":65},[51,81971,52172],{"class":51672},[51,81973,51679],{"class":65},[41,81975,81977],{"className":53439,"code":81976,"language":53441,"meta":46,"style":46},"\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",[48,81978,81979,81987,81995,81999,82004,82009,82014,82022],{"__ignoreMap":46},[51,81980,81981,81983,81985],{"class":53,"line":54},[51,81982,1452],{"class":65},[51,81984,52172],{"class":51672},[51,81986,51679],{"class":65},[51,81988,81989,81991,81993],{"class":53,"line":185},[51,81990,52516],{"class":65},[51,81992,52185],{"class":51672},[51,81994,51679],{"class":65},[51,81996,81997],{"class":53,"line":202},[51,81998,81943],{"class":65},[51,82000,82001],{"class":53,"line":209},[51,82002,82003],{"class":65},"    const arr = [10, 0, 5]\n",[51,82005,82006],{"class":53,"line":223},[51,82007,82008],{"class":65},"    const flag = arr.some(item => item >= 10)\n",[51,82010,82011],{"class":53,"line":237},[51,82012,82013],{"class":65},"    console.log(flag)   \u002F\u002Ftrue\n",[51,82015,82016,82018,82020],{"class":53,"line":242},[51,82017,52789],{"class":65},[51,82019,52185],{"class":51672},[51,82021,51679],{"class":65},[51,82023,82024,82026,82028],{"class":53,"line":257},[51,82025,52157],{"class":65},[51,82027,52172],{"class":51672},[51,82029,51679],{"class":65},[23293,82031,82033],{"id":82032},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[10,82035,82036],{},[460,82037],{"alt":46,"src":82038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[41,82040,82042],{"className":51005,"code":82041,"language":51007,"meta":46,"style":46},"\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",[48,82043,82044,82054,82068,82072,82080,82094,82114,82126,82134,82141,82153,82165,82177,82189,82199,82209,82213,82221,82229,82233,82241,82253,82261,82283,82288,82293,82326,82334,82342,82346],{"__ignoreMap":46},[51,82045,82046,82048,82050,82052],{"class":53,"line":54},[51,82047,51669],{"class":65},[51,82049,51673],{"class":51672},[51,82051,51676],{"class":57},[51,82053,51679],{"class":65},[51,82055,82056,82058,82060,82062,82064,82066],{"class":53,"line":185},[51,82057,1452],{"class":65},[51,82059,51007],{"class":51672},[51,82061,51688],{"class":57},[51,82063,70],{"class":65},[51,82065,51693],{"class":61},[51,82067,51679],{"class":65},[51,82069,82070],{"class":53,"line":202},[51,82071,206],{"emptyLinePlaceholder":205},[51,82073,82074,82076,82078],{"class":53,"line":209},[51,82075,1452],{"class":65},[51,82077,51706],{"class":51672},[51,82079,51679],{"class":65},[51,82081,82082,82084,82086,82088,82090,82092],{"class":53,"line":223},[51,82083,52516],{"class":65},[51,82085,51716],{"class":51672},[51,82087,51719],{"class":57},[51,82089,70],{"class":65},[51,82091,51724],{"class":61},[51,82093,51679],{"class":65},[51,82095,82096,82098,82100,82102,82104,82106,82108,82110,82112],{"class":53,"line":237},[51,82097,52516],{"class":65},[51,82099,51716],{"class":51672},[51,82101,15304],{"class":57},[51,82103,70],{"class":65},[51,82105,51763],{"class":61},[51,82107,51743],{"class":57},[51,82109,70],{"class":65},[51,82111,51770],{"class":61},[51,82113,51679],{"class":65},[51,82115,82116,82118,82120,82122,82124],{"class":53,"line":242},[51,82117,52516],{"class":65},[51,82119,51779],{"class":51672},[51,82121,51782],{"class":65},[51,82123,51779],{"class":51672},[51,82125,51679],{"class":65},[51,82127,82128,82130,82132],{"class":53,"line":257},[51,82129,52516],{"class":65},[51,82131,464],{"class":51672},[51,82133,51679],{"class":65},[51,82135,82136,82139],{"class":53,"line":262},[51,82137,82138],{"class":51672},"    div",[51,82140,15956],{"class":65},[51,82142,82143,82145,82147,82149,82151],{"class":53,"line":285},[51,82144,55143],{"class":278},[51,82146,51809],{"class":65},[51,82148,2120],{"class":278},[51,82150,51864],{"class":69},[51,82152,1703],{"class":65},[51,82154,82155,82157,82159,82161,82163],{"class":53,"line":296},[51,82156,55157],{"class":278},[51,82158,51809],{"class":65},[51,82160,943],{"class":278},[51,82162,51864],{"class":69},[51,82164,1703],{"class":65},[51,82166,82167,82169,82171,82173,82175],{"class":53,"line":307},[51,82168,57731],{"class":278},[51,82170,51809],{"class":65},[51,82172,943],{"class":278},[51,82174,51864],{"class":69},[51,82176,1703],{"class":65},[51,82178,82179,82181,82183,82185,82187],{"class":53,"line":324},[51,82180,65505],{"class":278},[51,82182,51809],{"class":65},[51,82184,1040],{"class":278},[51,82186,51864],{"class":69},[51,82188,1703],{"class":65},[51,82190,82191,82193,82195,82197],{"class":53,"line":329},[51,82192,57658],{"class":278},[51,82194,51809],{"class":65},[51,82196,51964],{"class":278},[51,82198,1703],{"class":65},[51,82200,82201,82203,82205,82207],{"class":53,"line":334},[51,82202,55256],{"class":278},[51,82204,51809],{"class":65},[51,82206,52017],{"class":278},[51,82208,1703],{"class":65},[51,82210,82211],{"class":53,"line":340},[51,82212,2577],{"class":65},[51,82214,82215,82217,82219],{"class":53,"line":345},[51,82216,52789],{"class":65},[51,82218,464],{"class":51672},[51,82220,51679],{"class":65},[51,82222,82223,82225,82227],{"class":53,"line":357},[51,82224,52157],{"class":65},[51,82226,51706],{"class":51672},[51,82228,51679],{"class":65},[51,82230,82231],{"class":53,"line":366},[51,82232,206],{"emptyLinePlaceholder":205},[51,82234,82235,82237,82239],{"class":53,"line":383},[51,82236,1452],{"class":65},[51,82238,52172],{"class":51672},[51,82240,51679],{"class":65},[51,82242,82243,82245,82247,82249,82251],{"class":53,"line":392},[51,82244,52516],{"class":65},[51,82246,51983],{"class":51672},[51,82248,55686],{"class":65},[51,82250,51983],{"class":51672},[51,82252,51679],{"class":65},[51,82254,82255,82257,82259],{"class":53,"line":403},[51,82256,52516],{"class":65},[51,82258,52185],{"class":51672},[51,82260,51679],{"class":65},[51,82262,82263,82265,82268,82270,82273,82276,82278,82281],{"class":53,"line":409},[51,82264,11605],{"class":69},[51,82266,82267],{"class":278}," spec",[51,82269,13948],{"class":69},[51,82271,82272],{"class":65}," { size: ",[51,82274,82275],{"class":61},"'40cm*40cm'",[51,82277,55836],{"class":65},[51,82279,82280],{"class":61},"'黑色'",[51,82282,55976],{"class":65},[51,82284,82285],{"class":53,"line":414},[51,82286,82287],{"class":601},"    \u002F\u002F const arr = Object.values(spec)\n",[51,82289,82290],{"class":53,"line":433},[51,82291,82292],{"class":601},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[51,82294,82295,82297,82299,82301,82304,82306,82308,82311,82314,82317,82319,82321,82324],{"class":53,"line":439},[51,82296,52779],{"class":65},[51,82298,54771],{"class":57},[51,82300,546],{"class":65},[51,82302,82303],{"class":61},"'div'",[51,82305,74621],{"class":65},[51,82307,70],{"class":69},[51,82309,82310],{"class":65}," Object.",[51,82312,82313],{"class":57},"values",[51,82315,82316],{"class":65},"(spec).",[51,82318,74595],{"class":57},[51,82320,546],{"class":65},[51,82322,82323],{"class":61},"'\u002F'",[51,82325,282],{"class":65},[51,82327,82328,82330,82332],{"class":53,"line":444},[51,82329,52789],{"class":65},[51,82331,52185],{"class":51672},[51,82333,51679],{"class":65},[51,82335,82336,82338,82340],{"class":53,"line":453},[51,82337,52157],{"class":65},[51,82339,52172],{"class":51672},[51,82341,51679],{"class":65},[51,82343,82344],{"class":53,"line":2174},[51,82345,206],{"emptyLinePlaceholder":205},[51,82347,82348,82350,82352],{"class":53,"line":2965},[51,82349,52157],{"class":65},[51,82351,51007],{"class":51672},[51,82353,51679],{"class":65},[10,82355,82356],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23293,82358,82360],{"id":82359},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[10,82362,82363],{},"静态方法，将伪数组转换为真数组",[10,82365,82366],{},[460,82367],{"alt":46,"src":82368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[41,82370,82372],{"className":53439,"code":82371,"language":53441,"meta":46,"style":46},"\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",[48,82373,82374,82382,82390,82402,82414,82426,82434,82442,82447,82452,82457,82462,82470],{"__ignoreMap":46},[51,82375,82376,82378,82380],{"class":53,"line":54},[51,82377,1452],{"class":65},[51,82379,52172],{"class":51672},[51,82381,51679],{"class":65},[51,82383,82384,82386,82388],{"class":53,"line":185},[51,82385,52516],{"class":65},[51,82387,1549],{"class":51672},[51,82389,51679],{"class":65},[51,82391,82392,82394,82396,82398,82400],{"class":53,"line":202},[51,82393,51713],{"class":65},[51,82395,22],{"class":51672},[51,82397,55686],{"class":65},[51,82399,22],{"class":51672},[51,82401,51679],{"class":65},[51,82403,82404,82406,82408,82410,82412],{"class":53,"line":209},[51,82405,51713],{"class":65},[51,82407,22],{"class":51672},[51,82409,55686],{"class":65},[51,82411,22],{"class":51672},[51,82413,51679],{"class":65},[51,82415,82416,82418,82420,82422,82424],{"class":53,"line":223},[51,82417,51713],{"class":65},[51,82419,22],{"class":51672},[51,82421,55686],{"class":65},[51,82423,22],{"class":51672},[51,82425,51679],{"class":65},[51,82427,82428,82430,82432],{"class":53,"line":237},[51,82429,52789],{"class":65},[51,82431,1549],{"class":51672},[51,82433,51679],{"class":65},[51,82435,82436,82438,82440],{"class":53,"line":242},[51,82437,52516],{"class":65},[51,82439,52185],{"class":51672},[51,82441,51679],{"class":65},[51,82443,82444],{"class":53,"line":257},[51,82445,82446],{"class":65},"    const lis = document.querySelectorAll('li')\n",[51,82448,82449],{"class":53,"line":262},[51,82450,82451],{"class":65},"    const liss = Array.from(lis)\n",[51,82453,82454],{"class":53,"line":285},[51,82455,82456],{"class":65},"    liss.pop()\n",[51,82458,82459],{"class":53,"line":296},[51,82460,82461],{"class":65},"    console.log(liss)\n",[51,82463,82464,82466,82468],{"class":53,"line":307},[51,82465,52789],{"class":65},[51,82467,52185],{"class":51672},[51,82469,51679],{"class":65},[51,82471,82472,82474,82476],{"class":53,"line":324},[51,82473,52157],{"class":65},[51,82475,52172],{"class":51672},[51,82477,51679],{"class":65},[10,82479,82480],{},[460,82481],{"alt":46,"src":82482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22381,82484,82486],{"id":82485},"_41053-string","4.10.5.3 String",[10,82488,82489],{},[460,82490],{"alt":46,"src":82491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23293,82493,82495],{"id":82494},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[41,82497,82499],{"className":53439,"code":82498,"language":53441,"meta":46,"style":46},"\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",[48,82500,82501,82509,82517,82522,82527,82532,82536,82541,82546,82551,82559],{"__ignoreMap":46},[51,82502,82503,82505,82507],{"class":53,"line":54},[51,82504,1452],{"class":65},[51,82506,52172],{"class":51672},[51,82508,51679],{"class":65},[51,82510,82511,82513,82515],{"class":53,"line":185},[51,82512,52516],{"class":65},[51,82514,52185],{"class":51672},[51,82516,51679],{"class":65},[51,82518,82519],{"class":53,"line":202},[51,82520,82521],{"class":65},"    \u002F\u002F 把字符串转化为数组\n",[51,82523,82524],{"class":53,"line":209},[51,82525,82526],{"class":65},"    const str = 'pink,red'\n",[51,82528,82529],{"class":53,"line":223},[51,82530,82531],{"class":65},"    const arr = str.split(',')\n",[51,82533,82534],{"class":53,"line":237},[51,82535,81010],{"class":65},[51,82537,82538],{"class":53,"line":242},[51,82539,82540],{"class":65},"    const str1 = '2025-8-25'\n",[51,82542,82543],{"class":53,"line":257},[51,82544,82545],{"class":65},"    const arr1 = str1.split('-')\n",[51,82547,82548],{"class":53,"line":262},[51,82549,82550],{"class":65},"    console.log(arr1)\n",[51,82552,82553,82555,82557],{"class":53,"line":285},[51,82554,52789],{"class":65},[51,82556,52185],{"class":51672},[51,82558,51679],{"class":65},[51,82560,82561,82563,82565],{"class":53,"line":296},[51,82562,52157],{"class":65},[51,82564,52172],{"class":51672},[51,82566,51679],{"class":65},[23293,82568,82570],{"id":82569},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[10,82572,5566],{},[10,82574,82575],{},"substring(indexStart)",[10,82577,82578],{},"substring(indexStart, indexEnd)",[1549,82580,82581,82592,82604,82614],{},[22,82582,82583,82584,82587,82588,82591],{},"如果省略了 ",[48,82585,82586],{},"indexEnd","，则 ",[48,82589,82590],{},"substring()"," 提取字符直到字符串的末尾",[22,82593,82594,82595,82598,82599,82587,82601,82603],{},"如果 ",[48,82596,82597],{},"indexStart"," 等于 ",[48,82600,82586],{},[48,82602,82590],{}," 返回一个空字符串",[22,82605,82594,82606,82608,82609,82587,82611,82613],{},[48,82607,82597],{}," 大于 ",[48,82610,82586],{},[48,82612,82590],{}," 的效果就像交换了这两个参数一样",[22,82615,82616],{},"结束的索引号不包含想要截取的部分",[41,82618,82620],{"className":81861,"code":82619,"language":81863,"meta":46,"style":46},"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",[48,82621,82622,82634,82638,82672,82702,82706,82737,82741,82768,82798,82828,82832,82863],{"__ignoreMap":46},[51,82623,82624,82627,82629,82632],{"class":53,"line":54},[51,82625,82626],{"class":65},"const anyString ",[51,82628,70],{"class":69},[51,82630,82631],{"class":61}," \"Mozilla\"",[51,82633,1703],{"class":65},[51,82635,82636],{"class":53,"line":185},[51,82637,206],{"emptyLinePlaceholder":205},[51,82639,82640,82643,82645,82647,82649,82652,82654,82657,82659,82661,82663,82665,82667,82669],{"class":53,"line":202},[51,82641,82642],{"class":278},"console",[51,82644,1100],{"class":65},[51,82646,58619],{"class":278},[51,82648,546],{"class":65},[51,82650,82651],{"class":278},"anyString",[51,82653,1100],{"class":65},[51,82655,82656],{"class":278},"substring",[51,82658,546],{"class":65},[51,82660,733],{"class":278},[51,82662,12819],{"class":65},[51,82664,759],{"class":278},[51,82666,75625],{"class":65},[51,82668,33704],{"class":69},[51,82670,82671],{"class":61}," 'M'\n",[51,82673,82674,82676,82678,82680,82682,82684,82686,82688,82690,82692,82694,82696,82698,82700],{"class":53,"line":209},[51,82675,82642],{"class":278},[51,82677,1100],{"class":65},[51,82679,58619],{"class":278},[51,82681,546],{"class":65},[51,82683,82651],{"class":278},[51,82685,1100],{"class":65},[51,82687,82656],{"class":278},[51,82689,546],{"class":65},[51,82691,759],{"class":278},[51,82693,12819],{"class":65},[51,82695,733],{"class":278},[51,82697,75625],{"class":65},[51,82699,33704],{"class":69},[51,82701,82671],{"class":61},[51,82703,82704],{"class":53,"line":223},[51,82705,206],{"emptyLinePlaceholder":205},[51,82707,82708,82710,82712,82714,82716,82718,82720,82722,82724,82726,82728,82730,82732,82734],{"class":53,"line":237},[51,82709,82642],{"class":278},[51,82711,1100],{"class":65},[51,82713,58619],{"class":278},[51,82715,546],{"class":65},[51,82717,82651],{"class":278},[51,82719,1100],{"class":65},[51,82721,82656],{"class":278},[51,82723,546],{"class":65},[51,82725,733],{"class":278},[51,82727,12819],{"class":65},[51,82729,886],{"class":278},[51,82731,75625],{"class":65},[51,82733,33704],{"class":69},[51,82735,82736],{"class":61}," 'Mozill'\n",[51,82738,82739],{"class":53,"line":242},[51,82740,206],{"emptyLinePlaceholder":205},[51,82742,82743,82745,82747,82749,82751,82753,82755,82757,82759,82761,82763,82765],{"class":53,"line":257},[51,82744,82642],{"class":278},[51,82746,1100],{"class":65},[51,82748,58619],{"class":278},[51,82750,546],{"class":65},[51,82752,82651],{"class":278},[51,82754,1100],{"class":65},[51,82756,82656],{"class":278},[51,82758,546],{"class":65},[51,82760,835],{"class":278},[51,82762,75625],{"class":65},[51,82764,33704],{"class":69},[51,82766,82767],{"class":61}," 'lla'\n",[51,82769,82770,82772,82774,82776,82778,82780,82782,82784,82786,82788,82790,82792,82794,82796],{"class":53,"line":262},[51,82771,82642],{"class":278},[51,82773,1100],{"class":65},[51,82775,58619],{"class":278},[51,82777,546],{"class":65},[51,82779,82651],{"class":278},[51,82781,1100],{"class":65},[51,82783,82656],{"class":278},[51,82785,546],{"class":65},[51,82787,835],{"class":278},[51,82789,12819],{"class":65},[51,82791,911],{"class":278},[51,82793,75681],{"class":65},[51,82795,33704],{"class":69},[51,82797,82767],{"class":61},[51,82799,82800,82802,82804,82806,82808,82810,82812,82814,82816,82818,82820,82822,82824,82826],{"class":53,"line":285},[51,82801,82642],{"class":278},[51,82803,1100],{"class":65},[51,82805,58619],{"class":278},[51,82807,546],{"class":65},[51,82809,82651],{"class":278},[51,82811,1100],{"class":65},[51,82813,82656],{"class":278},[51,82815,546],{"class":65},[51,82817,911],{"class":278},[51,82819,12819],{"class":65},[51,82821,835],{"class":278},[51,82823,75625],{"class":65},[51,82825,33704],{"class":69},[51,82827,82767],{"class":61},[51,82829,82830],{"class":53,"line":296},[51,82831,206],{"emptyLinePlaceholder":205},[51,82833,82834,82836,82838,82840,82842,82844,82846,82848,82850,82852,82854,82856,82858,82860],{"class":53,"line":307},[51,82835,82642],{"class":278},[51,82837,1100],{"class":65},[51,82839,58619],{"class":278},[51,82841,546],{"class":65},[51,82843,82651],{"class":278},[51,82845,1100],{"class":65},[51,82847,82656],{"class":278},[51,82849,546],{"class":65},[51,82851,733],{"class":278},[51,82853,12819],{"class":65},[51,82855,911],{"class":278},[51,82857,75625],{"class":65},[51,82859,33704],{"class":69},[51,82861,82862],{"class":61}," 'Mozilla'\n",[51,82864,82865,82867,82869,82871,82873,82875,82877,82879,82881,82883,82885,82887,82889,82891],{"class":53,"line":324},[51,82866,82642],{"class":278},[51,82868,1100],{"class":65},[51,82870,58619],{"class":278},[51,82872,546],{"class":65},[51,82874,82651],{"class":278},[51,82876,1100],{"class":65},[51,82878,82656],{"class":278},[51,82880,546],{"class":65},[51,82882,733],{"class":278},[51,82884,12819],{"class":65},[51,82886,988],{"class":278},[51,82888,75625],{"class":65},[51,82890,33704],{"class":69},[51,82892,82862],{"class":61},[23293,82894,82896],{"id":82895},"_410533-startswith","4.10.5.3.3 startsWith",[10,82898,82899,82902,82903,82908,82909,82911,82912],{},[48,82900,82901],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[691,82904,82905],{},[48,82906,82907],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[48,82910,1772],{}," 或 ",[48,82913,66392],{},[41,82915,82917],{"className":77867,"code":82916,"language":77869,"meta":46,"style":46},"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",[48,82918,82919,82931,82950,82955,82975],{"__ignoreMap":46},[51,82920,82921,82923,82926,82928],{"class":53,"line":54},[51,82922,7176],{"class":69},[51,82924,82925],{"class":65}," str1 ",[51,82927,70],{"class":69},[51,82929,82930],{"class":61}," \"Saturday night plans\"\n",[51,82932,82933,82935,82937,82940,82943,82945,82948],{"class":53,"line":185},[51,82934,77904],{"class":65},[51,82936,58619],{"class":57},[51,82938,82939],{"class":65},"(str1.",[51,82941,82942],{"class":57},"startsWith",[51,82944,546],{"class":65},[51,82946,82947],{"class":61},"\"Sat\"",[51,82949,30876],{"class":65},[51,82951,82952],{"class":53,"line":202},[51,82953,82954],{"class":601},"\u002F\u002F Expected output: true\n",[51,82956,82957,82959,82961,82963,82965,82967,82969,82971,82973],{"class":53,"line":209},[51,82958,77904],{"class":65},[51,82960,58619],{"class":57},[51,82962,82939],{"class":65},[51,82964,82942],{"class":57},[51,82966,546],{"class":65},[51,82968,82947],{"class":61},[51,82970,12819],{"class":65},[51,82972,614],{"class":278},[51,82974,30876],{"class":65},[51,82976,82977],{"class":53,"line":223},[51,82978,82979],{"class":601},"\u002F\u002F Expected output: false\n",[41,82981,82983],{"className":51005,"code":82982,"language":51007,"meta":46,"style":46},"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",[48,82984,82985,82990,82995,82999,83004,83009],{"__ignoreMap":46},[51,82986,82987],{"class":53,"line":54},[51,82988,82989],{"class":65},"startsWith(searchString)\n",[51,82991,82992],{"class":53,"line":185},[51,82993,82994],{"class":65},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[51,82996,82997],{"class":53,"line":202},[51,82998,206],{"emptyLinePlaceholder":205},[51,83000,83001],{"class":53,"line":209},[51,83002,83003],{"class":65},"const str3 = 'pink老师上课中'\n",[51,83005,83006],{"class":53,"line":223},[51,83007,83008],{"class":65},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[51,83010,83011],{"class":53,"line":237},[51,83012,83013],{"class":65},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23293,83015,83017],{"id":83016},"_410534-includes","4.10.5.3.4 includes",[10,83019,83020],{},"includes(searchString) includes(searchString, position)",[19,83022,83023],{},[22,83024,83025],{},"searchString:",[10,83027,83028,83029,83031,83032,83037,83038,83043,83044,21883,83047,83050,83051,83054],{},"一个要在 ",[48,83030,1712],{}," 中查找的字符串。",[780,83033,83036],{"href":83034,"rel":83035},"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",[24246],"不能是正则表达式","。所有非正则表达式的值都会被",[780,83039,83042],{"href":83040,"rel":83041},"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",[24246],"强制转换为字符串","，因此如果该参数被省略或传入 ",[48,83045,83046],{},"undefined",[48,83048,83049],{},"includes()"," 方法会在字符串中搜索 ",[48,83052,83053],{},"\"undefined\"","，这通常不是你想要的",[19,83056,83057],{"start":185},[22,83058,83059,1401],{},[48,83060,83061],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[10,83063,83064,83065,83068,83069],{},"在字符串中开始搜索 ",[48,83066,83067],{},"searchString"," 的位置。默认值为 ",[48,83070,733],{},[19,83072,83073],{"start":202},[22,83074,83075],{},"返回值：",[10,83077,83078,83079,83081,83082,83086,83087],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[48,83080,83067],{}," 为空字符串的情况），则返回 ",[691,83083,83084],{},[48,83085,1772],{}," ，否则返回 ",[691,83088,83089],{},[48,83090,66392],{},[19,83092,83093],{"start":209},[22,83094,83095],{},"异常：",[10,83097,82594,83098,14179,83100,83104],{},[48,83099,83067],{},[780,83101,83103],{"href":83034,"rel":83102},[24246],"是一个正则表达式","，则会抛出",[10,83106,83107],{},"只要是有就是true，不需要非得以谁开头结尾",[41,83109,83111],{"className":77867,"code":83110,"language":77869,"meta":46,"style":46},"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",[48,83112,83113,83124,83147,83166,83186,83208,83227],{"__ignoreMap":46},[51,83114,83115,83117,83119,83121],{"class":53,"line":54},[51,83116,7176],{"class":69},[51,83118,80147],{"class":65},[51,83120,70],{"class":69},[51,83122,83123],{"class":61}," \"To be, or not to be, that is the question.\"\n",[51,83125,83126,83128,83130,83133,83136,83138,83141,83144],{"class":53,"line":185},[51,83127,77904],{"class":65},[51,83129,58619],{"class":57},[51,83131,83132],{"class":65},"(str.",[51,83134,83135],{"class":57},"includes",[51,83137,546],{"class":65},[51,83139,83140],{"class":61},"\"To be\"",[51,83142,83143],{"class":65},"))",[51,83145,83146],{"class":601},"  \u002F\u002F true\n",[51,83148,83149,83151,83153,83155,83157,83159,83162,83164],{"class":53,"line":202},[51,83150,77904],{"class":65},[51,83152,58619],{"class":57},[51,83154,83132],{"class":65},[51,83156,83135],{"class":57},[51,83158,546],{"class":65},[51,83160,83161],{"class":61},"\"question\"",[51,83163,83143],{"class":65},[51,83165,83146],{"class":601},[51,83167,83168,83170,83172,83174,83176,83178,83181,83183],{"class":53,"line":209},[51,83169,77904],{"class":65},[51,83171,58619],{"class":57},[51,83173,83132],{"class":65},[51,83175,83135],{"class":57},[51,83177,546],{"class":65},[51,83179,83180],{"class":61},"\"nonexistent\"",[51,83182,83143],{"class":65},[51,83184,83185],{"class":601},"  \u002F\u002F false\n",[51,83187,83188,83190,83192,83194,83196,83198,83200,83202,83204,83206],{"class":53,"line":223},[51,83189,77904],{"class":65},[51,83191,58619],{"class":57},[51,83193,83132],{"class":65},[51,83195,83135],{"class":57},[51,83197,546],{"class":65},[51,83199,83140],{"class":61},[51,83201,12819],{"class":65},[51,83203,759],{"class":278},[51,83205,83143],{"class":65},[51,83207,83185],{"class":601},[51,83209,83210,83212,83214,83216,83218,83220,83223,83225],{"class":53,"line":237},[51,83211,77904],{"class":65},[51,83213,58619],{"class":57},[51,83215,83132],{"class":65},[51,83217,83135],{"class":57},[51,83219,546],{"class":65},[51,83221,83222],{"class":61},"\"TO BE\"",[51,83224,83143],{"class":65},[51,83226,83185],{"class":601},[51,83228,83229,83231,83233,83235,83237,83239,83241,83243],{"class":53,"line":242},[51,83230,77904],{"class":65},[51,83232,58619],{"class":57},[51,83234,83132],{"class":65},[51,83236,83135],{"class":57},[51,83238,546],{"class":65},[51,83240,8036],{"class":61},[51,83242,83143],{"class":65},[51,83244,83146],{"class":601},[23293,83246,83248],{"id":83247},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[41,83250,83252],{"className":53439,"code":83251,"language":53441,"meta":46,"style":46},"\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",[48,83253,83254,83262,83270,83275,83280,83285,83290,83295,83303],{"__ignoreMap":46},[51,83255,83256,83258,83260],{"class":53,"line":54},[51,83257,1452],{"class":65},[51,83259,52172],{"class":51672},[51,83261,51679],{"class":65},[51,83263,83264,83266,83268],{"class":53,"line":185},[51,83265,52516],{"class":65},[51,83267,52185],{"class":51672},[51,83269,51679],{"class":65},[51,83271,83272],{"class":53,"line":202},[51,83273,83274],{"class":65},"    const num = 10\n",[51,83276,83277],{"class":53,"line":209},[51,83278,83279],{"class":65},"    \u002F\u002F 强制转换\n",[51,83281,83282],{"class":53,"line":223},[51,83283,83284],{"class":65},"    console.log(String(num))\n",[51,83286,83287],{"class":53,"line":237},[51,83288,83289],{"class":65},"    \u002F\u002F toString()方法转换\n",[51,83291,83292],{"class":53,"line":242},[51,83293,83294],{"class":65},"    console.log(num.toString())\n",[51,83296,83297,83299,83301],{"class":53,"line":257},[51,83298,52789],{"class":65},[51,83300,52185],{"class":51672},[51,83302,51679],{"class":65},[51,83304,83305,83307,83309],{"class":53,"line":262},[51,83306,52157],{"class":65},[51,83308,52172],{"class":51672},[51,83310,51679],{"class":65},[23293,83312,83314],{"id":83313},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[10,83316,83317],{},[460,83318],{"alt":46,"src":83319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[41,83321,83323],{"className":51005,"code":83322,"language":51007,"meta":46,"style":46},"\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",[48,83324,83325,83335,83349,83353,83361,83375,83395,83407,83415,83419,83427,83439,83447,83459,83464,83469,83474,83521,83537,83545,83553,83557],{"__ignoreMap":46},[51,83326,83327,83329,83331,83333],{"class":53,"line":54},[51,83328,51669],{"class":65},[51,83330,51673],{"class":51672},[51,83332,51676],{"class":57},[51,83334,51679],{"class":65},[51,83336,83337,83339,83341,83343,83345,83347],{"class":53,"line":185},[51,83338,1452],{"class":65},[51,83340,51007],{"class":51672},[51,83342,51688],{"class":57},[51,83344,70],{"class":65},[51,83346,51693],{"class":61},[51,83348,51679],{"class":65},[51,83350,83351],{"class":53,"line":202},[51,83352,206],{"emptyLinePlaceholder":205},[51,83354,83355,83357,83359],{"class":53,"line":209},[51,83356,1452],{"class":65},[51,83358,51706],{"class":51672},[51,83360,51679],{"class":65},[51,83362,83363,83365,83367,83369,83371,83373],{"class":53,"line":223},[51,83364,52516],{"class":65},[51,83366,51716],{"class":51672},[51,83368,51719],{"class":57},[51,83370,70],{"class":65},[51,83372,51724],{"class":61},[51,83374,51679],{"class":65},[51,83376,83377,83379,83381,83383,83385,83387,83389,83391,83393],{"class":53,"line":237},[51,83378,52516],{"class":65},[51,83380,51716],{"class":51672},[51,83382,15304],{"class":57},[51,83384,70],{"class":65},[51,83386,51763],{"class":61},[51,83388,51743],{"class":57},[51,83390,70],{"class":65},[51,83392,51770],{"class":61},[51,83394,51679],{"class":65},[51,83396,83397,83399,83401,83403,83405],{"class":53,"line":242},[51,83398,52516],{"class":65},[51,83400,51779],{"class":51672},[51,83402,51782],{"class":65},[51,83404,51779],{"class":51672},[51,83406,51679],{"class":65},[51,83408,83409,83411,83413],{"class":53,"line":257},[51,83410,52157],{"class":65},[51,83412,51706],{"class":51672},[51,83414,51679],{"class":65},[51,83416,83417],{"class":53,"line":262},[51,83418,206],{"emptyLinePlaceholder":205},[51,83420,83421,83423,83425],{"class":53,"line":285},[51,83422,1452],{"class":65},[51,83424,52172],{"class":51672},[51,83426,51679],{"class":65},[51,83428,83429,83431,83433,83435,83437],{"class":53,"line":296},[51,83430,52516],{"class":65},[51,83432,51983],{"class":51672},[51,83434,55686],{"class":65},[51,83436,51983],{"class":51672},[51,83438,51679],{"class":65},[51,83440,83441,83443,83445],{"class":53,"line":307},[51,83442,52516],{"class":65},[51,83444,52185],{"class":51672},[51,83446,51679],{"class":65},[51,83448,83449,83451,83454,83456],{"class":53,"line":324},[51,83450,11605],{"class":69},[51,83452,83453],{"class":278}," gift",[51,83455,13948],{"class":69},[51,83457,83458],{"class":61}," '50g的茶叶，清洗球'\n",[51,83460,83461],{"class":53,"line":329},[51,83462,83463],{"class":601},"    \u002F\u002F 1.把字符串拆分为数组\n",[51,83465,83466],{"class":53,"line":334},[51,83467,83468],{"class":601},"    \u002F\u002F console.log(gift.split(','))\n",[51,83470,83471],{"class":53,"line":340},[51,83472,83473],{"class":601},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[51,83475,83476,83478,83480,83482,83485,83488,83490,83493,83495,83497,83499,83501,83503,83506,83508,83511,83513,83515,83517,83519],{"class":53,"line":345},[51,83477,11605],{"class":69},[51,83479,74291],{"class":278},[51,83481,13948],{"class":69},[51,83483,83484],{"class":65}," gift.",[51,83486,83487],{"class":57},"split",[51,83489,546],{"class":65},[51,83491,83492],{"class":61},"'，'",[51,83494,31204],{"class":65},[51,83496,74416],{"class":57},[51,83498,546],{"class":65},[51,83500,80167],{"class":248},[51,83502,80170],{"class":69},[51,83504,83505],{"class":61}," `\u003Cspan>【赠品】${",[51,83507,80167],{"class":65},[51,83509,83510],{"class":61},"}\u003C\u002Fspan>\u003Cbr>`",[51,83512,31204],{"class":65},[51,83514,74595],{"class":57},[51,83516,546],{"class":65},[51,83518,74600],{"class":61},[51,83520,282],{"class":65},[51,83522,83523,83525,83527,83529,83531,83533,83535],{"class":53,"line":357},[51,83524,52779],{"class":65},[51,83526,54771],{"class":57},[51,83528,546],{"class":65},[51,83530,82303],{"class":61},[51,83532,74621],{"class":65},[51,83534,70],{"class":69},[51,83536,74357],{"class":65},[51,83538,83539,83541,83543],{"class":53,"line":366},[51,83540,52789],{"class":65},[51,83542,52185],{"class":51672},[51,83544,51679],{"class":65},[51,83546,83547,83549,83551],{"class":53,"line":383},[51,83548,52157],{"class":65},[51,83550,52172],{"class":51672},[51,83552,51679],{"class":65},[51,83554,83555],{"class":53,"line":392},[51,83556,206],{"emptyLinePlaceholder":205},[51,83558,83559,83561,83563],{"class":53,"line":403},[51,83560,52157],{"class":65},[51,83562,51007],{"class":51672},[51,83564,51679],{"class":65},[22381,83566,83568],{"id":83567},"_41054-number","4.10.5.4 Number",[10,83570,83571],{},[460,83572],{"alt":46,"src":83573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[10,83575,83576],{},"整数也可以进行toFixed来保留小数",[10,83578,83579],{},"比如：",[10,83581,83582],{},"const price=10",[10,83584,83585],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22381,83587,83589],{"id":83588},"_41055-购物车展示","4.10.5.5 购物车展示",[10,83591,83592],{},[460,83593],{"alt":46,"src":83594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[41,83596,83598],{"className":51005,"code":83597,"language":51007,"meta":46,"style":46},"\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",[48,83599,83600,83610,83624,83628,83636,83650,83670,83682,83690,83696,83706,83716,83726,83730,83734,83740,83752,83766,83770,83774,83780,83792,83808,83818,83834,83838,83842,83848,83858,83868,83872,83876,83884,83896,83908,83920,83924,83928,83936,83948,83952,83956,83967,83977,83989,84001,84011,84015,84019,84027,84036,84048,84058,84068,84072,84076,84084,84093,84100,84110,84122,84126,84130,84139,84149,84160,84172,84184,84188,84192,84201,84211,84222,84226,84230,84236,84248,84260,84270,84280,84298,84310,84314,84318,84327,84339,84349,84359,84371,84375,84383,84391,84395,84403,84417,84425,84439,84467,84475,84483,84493,84497,84505,84513,84522,84530,84539,84549,84553,84557,84565,84573,84582,84590,84598,84611,84615,84619,84627,84635,84644,84652,84660,84675,84679,84683,84691,84699,84708,84716,84724,84738,84746,84750,84754,84759,84785,84790,84827,84832,84855,84860,84914,84919,84955,84959,84965,84970,84979,84993,85002,85021,85030,85040,85045,85050,85063,85068,85122,85148,85156,85164,85168],{"__ignoreMap":46},[51,83601,83602,83604,83606,83608],{"class":53,"line":54},[51,83603,51669],{"class":65},[51,83605,51673],{"class":51672},[51,83607,51676],{"class":57},[51,83609,51679],{"class":65},[51,83611,83612,83614,83616,83618,83620,83622],{"class":53,"line":185},[51,83613,1452],{"class":65},[51,83615,51007],{"class":51672},[51,83617,51688],{"class":57},[51,83619,70],{"class":65},[51,83621,51693],{"class":61},[51,83623,51679],{"class":65},[51,83625,83626],{"class":53,"line":202},[51,83627,206],{"emptyLinePlaceholder":205},[51,83629,83630,83632,83634],{"class":53,"line":209},[51,83631,1452],{"class":65},[51,83633,51706],{"class":51672},[51,83635,51679],{"class":65},[51,83637,83638,83640,83642,83644,83646,83648],{"class":53,"line":223},[51,83639,52516],{"class":65},[51,83641,51716],{"class":51672},[51,83643,51719],{"class":57},[51,83645,70],{"class":65},[51,83647,51724],{"class":61},[51,83649,51679],{"class":65},[51,83651,83652,83654,83656,83658,83660,83662,83664,83666,83668],{"class":53,"line":237},[51,83653,52516],{"class":65},[51,83655,51716],{"class":51672},[51,83657,15304],{"class":57},[51,83659,70],{"class":65},[51,83661,51763],{"class":61},[51,83663,51743],{"class":57},[51,83665,70],{"class":65},[51,83667,51770],{"class":61},[51,83669,51679],{"class":65},[51,83671,83672,83674,83676,83678,83680],{"class":53,"line":242},[51,83673,52516],{"class":65},[51,83675,51779],{"class":51672},[51,83677,51782],{"class":65},[51,83679,51779],{"class":51672},[51,83681,51679],{"class":65},[51,83683,83684,83686,83688],{"class":53,"line":257},[51,83685,52516],{"class":65},[51,83687,464],{"class":51672},[51,83689,51679],{"class":65},[51,83691,83692,83694],{"class":53,"line":262},[51,83693,6787],{"class":51672},[51,83695,15956],{"class":65},[51,83697,83698,83700,83702,83704],{"class":53,"line":285},[51,83699,55067],{"class":278},[51,83701,51809],{"class":65},[51,83703,733],{"class":278},[51,83705,1703],{"class":65},[51,83707,83708,83710,83712,83714],{"class":53,"line":296},[51,83709,55078],{"class":278},[51,83711,51809],{"class":65},[51,83713,733],{"class":278},[51,83715,1703],{"class":65},[51,83717,83718,83720,83722,83724],{"class":53,"line":307},[51,83719,72968],{"class":278},[51,83721,51809],{"class":65},[51,83723,60877],{"class":278},[51,83725,1703],{"class":65},[51,83727,83728],{"class":53,"line":324},[51,83729,2577],{"class":65},[51,83731,83732],{"class":53,"line":329},[51,83733,206],{"emptyLinePlaceholder":205},[51,83735,83736,83738],{"class":53,"line":334},[51,83737,62495],{"class":57},[51,83739,15956],{"class":65},[51,83741,83742,83744,83746,83748,83750],{"class":53,"line":340},[51,83743,55143],{"class":278},[51,83745,51809],{"class":65},[51,83747,78946],{"class":278},[51,83749,51864],{"class":69},[51,83751,1703],{"class":65},[51,83753,83754,83756,83758,83760,83762,83764],{"class":53,"line":345},[51,83755,55078],{"class":278},[51,83757,51809],{"class":65},[51,83759,853],{"class":278},[51,83761,51864],{"class":69},[51,83763,51928],{"class":278},[51,83765,1703],{"class":65},[51,83767,83768],{"class":53,"line":357},[51,83769,2577],{"class":65},[51,83771,83772],{"class":53,"line":366},[51,83773,206],{"emptyLinePlaceholder":205},[51,83775,83776,83778],{"class":53,"line":383},[51,83777,78997],{"class":57},[51,83779,15956],{"class":65},[51,83781,83782,83784,83786,83788,83790],{"class":53,"line":392},[51,83783,55067],{"class":278},[51,83785,51809],{"class":65},[51,83787,1117],{"class":278},[51,83789,51864],{"class":69},[51,83791,1703],{"class":65},[51,83793,83794,83796,83798,83800,83802,83804,83806],{"class":53,"line":403},[51,83795,62232],{"class":278},[51,83797,51809],{"class":65},[51,83799,28503],{"class":278},[51,83801,79052],{"class":278},[51,83803,79055],{"class":278},[51,83805,1237],{"class":69},[51,83807,1703],{"class":65},[51,83809,83810,83812,83814,83816],{"class":53,"line":409},[51,83811,55381],{"class":278},[51,83813,51809],{"class":65},[51,83815,51849],{"class":278},[51,83817,1703],{"class":65},[51,83819,83820,83822,83824,83826,83828,83830,83832],{"class":53,"line":414},[51,83821,62349],{"class":278},[51,83823,51809],{"class":65},[51,83825,759],{"class":278},[51,83827,51864],{"class":69},[51,83829,51893],{"class":278},[51,83831,62616],{"class":278},[51,83833,1703],{"class":65},[51,83835,83836],{"class":53,"line":433},[51,83837,2577],{"class":65},[51,83839,83840],{"class":53,"line":439},[51,83841,206],{"emptyLinePlaceholder":205},[51,83843,83844,83846],{"class":53,"line":444},[51,83845,79115],{"class":57},[51,83847,15956],{"class":65},[51,83849,83850,83852,83854,83856],{"class":53,"line":453},[51,83851,62397],{"class":278},[51,83853,51809],{"class":65},[51,83855,62402],{"class":278},[51,83857,1703],{"class":65},[51,83859,83860,83862,83864,83866],{"class":53,"line":2174},[51,83861,55256],{"class":278},[51,83863,51809],{"class":65},[51,83865,62190],{"class":278},[51,83867,1703],{"class":65},[51,83869,83870],{"class":53,"line":2965},[51,83871,2577],{"class":65},[51,83873,83874],{"class":53,"line":2979},[51,83875,206],{"emptyLinePlaceholder":205},[51,83877,83878,83880,83882],{"class":53,"line":2987},[51,83879,78997],{"class":57},[51,83881,55987],{"class":51672},[51,83883,15956],{"class":65},[51,83885,83886,83888,83890,83892,83894],{"class":53,"line":2992},[51,83887,55143],{"class":278},[51,83889,51809],{"class":65},[51,83891,1154],{"class":278},[51,83893,51864],{"class":69},[51,83895,1703],{"class":65},[51,83897,83898,83900,83902,83904,83906],{"class":53,"line":2998},[51,83899,55157],{"class":278},[51,83901,51809],{"class":65},[51,83903,1154],{"class":278},[51,83905,51864],{"class":69},[51,83907,1703],{"class":65},[51,83909,83910,83912,83914,83916,83918],{"class":53,"line":3004},[51,83911,62122],{"class":278},[51,83913,51809],{"class":65},[51,83915,861],{"class":278},[51,83917,51864],{"class":69},[51,83919,1703],{"class":65},[51,83921,83922],{"class":53,"line":3009},[51,83923,2577],{"class":65},[51,83925,83926],{"class":53,"line":8332},[51,83927,206],{"emptyLinePlaceholder":205},[51,83929,83930,83932,83934],{"class":53,"line":8356},[51,83931,78997],{"class":57},[51,83933,62676],{"class":57},[51,83935,15956],{"class":65},[51,83937,83938,83940,83942,83944,83946],{"class":53,"line":8361},[51,83939,55143],{"class":278},[51,83941,51809],{"class":65},[51,83943,2120],{"class":278},[51,83945,51864],{"class":69},[51,83947,1703],{"class":65},[51,83949,83950],{"class":53,"line":8367},[51,83951,2577],{"class":65},[51,83953,83954],{"class":53,"line":8394},[51,83955,206],{"emptyLinePlaceholder":205},[51,83957,83958,83960,83962,83965],{"class":53,"line":8399},[51,83959,78997],{"class":57},[51,83961,62676],{"class":57},[51,83963,83964],{"class":57}," .tag",[51,83966,15956],{"class":65},[51,83968,83969,83971,83973,83975],{"class":53,"line":8405},[51,83970,55381],{"class":278},[51,83972,51809],{"class":65},[51,83974,61241],{"class":278},[51,83976,1703],{"class":65},[51,83978,83979,83981,83983,83985,83987],{"class":53,"line":8417},[51,83980,55067],{"class":278},[51,83982,51809],{"class":65},[51,83984,620],{"class":278},[51,83986,51864],{"class":69},[51,83988,1703],{"class":65},[51,83990,83991,83993,83995,83997,83999],{"class":53,"line":8429},[51,83992,55294],{"class":278},[51,83994,51809],{"class":65},[51,83996,1040],{"class":278},[51,83998,51864],{"class":69},[51,84000,1703],{"class":65},[51,84002,84003,84005,84007,84009],{"class":53,"line":8441},[51,84004,57788],{"class":278},[51,84006,51809],{"class":65},[51,84008,62442],{"class":278},[51,84010,1703],{"class":65},[51,84012,84013],{"class":53,"line":10100},[51,84014,2577],{"class":65},[51,84016,84017],{"class":53,"line":10125},[51,84018,206],{"emptyLinePlaceholder":205},[51,84020,84021,84023,84025],{"class":53,"line":10148},[51,84022,78997],{"class":57},[51,84024,79289],{"class":57},[51,84026,31843],{"class":65},[51,84028,84029,84031,84034],{"class":53,"line":10172},[51,84030,78997],{"class":57},[51,84032,84033],{"class":57}," .sub-total",[51,84035,15956],{"class":65},[51,84037,84038,84040,84042,84044,84046],{"class":53,"line":10177},[51,84039,55294],{"class":278},[51,84041,51809],{"class":65},[51,84043,1192],{"class":278},[51,84045,51864],{"class":69},[51,84047,1703],{"class":65},[51,84049,84050,84052,84054,84056],{"class":53,"line":10182},[51,84051,57788],{"class":278},[51,84053,51809],{"class":65},[51,84055,79312],{"class":278},[51,84057,1703],{"class":65},[51,84059,84060,84062,84064,84066],{"class":53,"line":10187},[51,84061,62209],{"class":278},[51,84063,51809],{"class":65},[51,84065,759],{"class":278},[51,84067,1703],{"class":65},[51,84069,84070],{"class":53,"line":10196},[51,84071,2577],{"class":65},[51,84073,84074],{"class":53,"line":10201},[51,84075,206],{"emptyLinePlaceholder":205},[51,84077,84078,84080,84082],{"class":53,"line":10207},[51,84079,78997],{"class":57},[51,84081,79329],{"class":57},[51,84083,31843],{"class":65},[51,84085,84086,84088,84091],{"class":53,"line":10228},[51,84087,78997],{"class":57},[51,84089,84090],{"class":57}," .sub-total::before",[51,84092,31843],{"class":65},[51,84094,84095,84098],{"class":53,"line":10234},[51,84096,84097],{"class":57},"    .amount::before",[51,84099,15956],{"class":65},[51,84101,84102,84104,84106,84108],{"class":53,"line":10248},[51,84103,79336],{"class":278},[51,84105,51809],{"class":65},[51,84107,79341],{"class":61},[51,84109,1703],{"class":65},[51,84111,84112,84114,84116,84118,84120],{"class":53,"line":10254},[51,84113,55294],{"class":278},[51,84115,51809],{"class":65},[51,84117,1040],{"class":278},[51,84119,51864],{"class":69},[51,84121,1703],{"class":65},[51,84123,84124],{"class":53,"line":10281},[51,84125,2577],{"class":65},[51,84127,84128],{"class":53,"line":10290},[51,84129,206],{"emptyLinePlaceholder":205},[51,84131,84132,84134,84137],{"class":53,"line":10296},[51,84133,78997],{"class":57},[51,84135,84136],{"class":57}," .spec",[51,84138,15956],{"class":65},[51,84140,84141,84143,84145,84147],{"class":53,"line":10304},[51,84142,62209],{"class":278},[51,84144,51809],{"class":65},[51,84146,620],{"class":278},[51,84148,1703],{"class":65},[51,84150,84151,84153,84155,84158],{"class":53,"line":10309},[51,84152,57788],{"class":278},[51,84154,51809],{"class":65},[51,84156,84157],{"class":278},"#888",[51,84159,1703],{"class":65},[51,84161,84162,84164,84166,84168,84170],{"class":53,"line":16987},[51,84163,55294],{"class":278},[51,84165,51809],{"class":65},[51,84167,1091],{"class":278},[51,84169,51864],{"class":69},[51,84171,1703],{"class":65},[51,84173,84174,84176,84178,84180,84182],{"class":53,"line":16993},[51,84175,62372],{"class":278},[51,84177,51809],{"class":65},[51,84179,1242],{"class":278},[51,84181,51864],{"class":69},[51,84183,1703],{"class":65},[51,84185,84186],{"class":53,"line":17016},[51,84187,2577],{"class":65},[51,84189,84190],{"class":53,"line":17022},[51,84191,206],{"emptyLinePlaceholder":205},[51,84193,84194,84196,84199],{"class":53,"line":17045},[51,84195,78997],{"class":57},[51,84197,84198],{"class":57}," .count",[51,84200,15956],{"class":65},[51,84202,84203,84205,84207,84209],{"class":53,"line":17059},[51,84204,62209],{"class":278},[51,84206,51809],{"class":65},[51,84208,759],{"class":278},[51,84210,1703],{"class":65},[51,84212,84213,84215,84217,84220],{"class":53,"line":17079},[51,84214,57788],{"class":278},[51,84216,51809],{"class":65},[51,84218,84219],{"class":278},"#aaa",[51,84221,1703],{"class":65},[51,84223,84224],{"class":53,"line":17085},[51,84225,2577],{"class":65},[51,84227,84228],{"class":53,"line":17096},[51,84229,206],{"emptyLinePlaceholder":205},[51,84231,84232,84234],{"class":53,"line":17119},[51,84233,72847],{"class":57},[51,84235,15956],{"class":65},[51,84237,84238,84240,84242,84244,84246],{"class":53,"line":17141},[51,84239,55143],{"class":278},[51,84241,51809],{"class":65},[51,84243,78946],{"class":278},[51,84245,51864],{"class":69},[51,84247,1703],{"class":65},[51,84249,84250,84252,84254,84256,84258],{"class":53,"line":17146},[51,84251,55078],{"class":278},[51,84253,51809],{"class":65},[51,84255,733],{"class":278},[51,84257,51928],{"class":278},[51,84259,1703],{"class":65},[51,84261,84262,84264,84266,84268],{"class":53,"line":17152},[51,84263,55381],{"class":278},[51,84265,51809],{"class":65},[51,84267,51849],{"class":278},[51,84269,1703],{"class":65},[51,84271,84272,84274,84276,84278],{"class":53,"line":17166},[51,84273,55392],{"class":278},[51,84275,51809],{"class":65},[51,84277,51952],{"class":278},[51,84279,1703],{"class":65},[51,84281,84282,84285,84287,84289,84291,84293,84296],{"class":53,"line":17179},[51,84283,84284],{"class":278},"      border-top",[51,84286,51809],{"class":65},[51,84288,759],{"class":278},[51,84290,51864],{"class":69},[51,84292,51893],{"class":278},[51,84294,84295],{"class":278}," #4e4e4e",[51,84297,1703],{"class":65},[51,84299,84300,84302,84304,84306,84308],{"class":53,"line":17184},[51,84301,55067],{"class":278},[51,84303,51809],{"class":65},[51,84305,1242],{"class":278},[51,84307,51864],{"class":69},[51,84309,1703],{"class":65},[51,84311,84312],{"class":53,"line":17198},[51,84313,2577],{"class":65},[51,84315,84316],{"class":53,"line":17203},[51,84317,206],{"emptyLinePlaceholder":205},[51,84319,84320,84322,84325],{"class":53,"line":17209},[51,84321,72847],{"class":57},[51,84323,84324],{"class":57}," .amount",[51,84326,15956],{"class":65},[51,84328,84329,84331,84333,84335,84337],{"class":53,"line":17214},[51,84330,55294],{"class":278},[51,84332,51809],{"class":65},[51,84334,1192],{"class":278},[51,84336,51864],{"class":69},[51,84338,1703],{"class":65},[51,84340,84341,84343,84345,84347],{"class":53,"line":17228},[51,84342,57788],{"class":278},[51,84344,51809],{"class":65},[51,84346,79312],{"class":278},[51,84348,1703],{"class":65},[51,84350,84351,84353,84355,84357],{"class":53,"line":17233},[51,84352,62706],{"class":278},[51,84354,51809],{"class":65},[51,84356,51861],{"class":278},[51,84358,1703],{"class":65},[51,84360,84361,84363,84365,84367,84369],{"class":53,"line":17238},[51,84362,62122],{"class":278},[51,84364,51809],{"class":65},[51,84366,1198],{"class":278},[51,84368,51864],{"class":69},[51,84370,1703],{"class":65},[51,84372,84373],{"class":53,"line":17252},[51,84374,2577],{"class":65},[51,84376,84377,84379,84381],{"class":53,"line":17264},[51,84378,52789],{"class":65},[51,84380,464],{"class":51672},[51,84382,51679],{"class":65},[51,84384,84385,84387,84389],{"class":53,"line":17269},[51,84386,52157],{"class":65},[51,84388,51706],{"class":51672},[51,84390,51679],{"class":65},[51,84392,84393],{"class":53,"line":17282},[51,84394,206],{"emptyLinePlaceholder":205},[51,84396,84397,84399,84401],{"class":53,"line":17287},[51,84398,1452],{"class":65},[51,84400,52172],{"class":51672},[51,84402,51679],{"class":65},[51,84404,84405,84407,84409,84411,84413,84415],{"class":53,"line":17292},[51,84406,52516],{"class":65},[51,84408,51983],{"class":51672},[51,84410,53858],{"class":57},[51,84412,70],{"class":65},[51,84414,62980],{"class":61},[51,84416,51679],{"class":65},[51,84418,84419,84421,84423],{"class":53,"line":17297},[51,84420,52789],{"class":65},[51,84422,51983],{"class":51672},[51,84424,51679],{"class":65},[51,84426,84427,84429,84431,84433,84435,84437],{"class":53,"line":17310},[51,84428,52516],{"class":65},[51,84430,51983],{"class":51672},[51,84432,53858],{"class":57},[51,84434,70],{"class":65},[51,84436,62952],{"class":61},[51,84438,51679],{"class":65},[51,84440,84441,84443,84445,84448,84450,84452,84454,84457,84459,84461,84463,84465],{"class":53,"line":17315},[51,84442,51713],{"class":65},[51,84444,51983],{"class":51672},[51,84446,84447],{"class":65},">合计：\u003C",[51,84449,51],{"class":51672},[51,84451,53858],{"class":57},[51,84453,70],{"class":65},[51,84455,84456],{"class":61},"\"amount\"",[51,84458,55686],{"class":65},[51,84460,51],{"class":51672},[51,84462,55686],{"class":65},[51,84464,51983],{"class":51672},[51,84466,51679],{"class":65},[51,84468,84469,84471,84473],{"class":53,"line":33008},[51,84470,52789],{"class":65},[51,84472,51983],{"class":51672},[51,84474,51679],{"class":65},[51,84476,84477,84479,84481],{"class":53,"line":33014},[51,84478,52516],{"class":65},[51,84480,52185],{"class":51672},[51,84482,51679],{"class":65},[51,84484,84485,84487,84489,84491],{"class":53,"line":33020},[51,84486,11605],{"class":69},[51,84488,79749],{"class":278},[51,84490,13948],{"class":69},[51,84492,55819],{"class":65},[51,84494,84495],{"class":53,"line":33026},[51,84496,79758],{"class":65},[51,84498,84499,84501,84503],{"class":53,"line":33032},[51,84500,79763],{"class":65},[51,84502,79766],{"class":61},[51,84504,31843],{"class":65},[51,84506,84507,84509,84511],{"class":53,"line":33043},[51,84508,79773],{"class":65},[51,84510,79776],{"class":61},[51,84512,31843],{"class":65},[51,84514,84515,84517,84520],{"class":53,"line":33049},[51,84516,79783],{"class":65},[51,84518,84519],{"class":278},"289.9",[51,84521,31843],{"class":65},[51,84523,84524,84526,84528],{"class":53,"line":33069},[51,84525,79793],{"class":65},[51,84527,79796],{"class":61},[51,84529,31843],{"class":65},[51,84531,84532,84535,84537],{"class":53,"line":33075},[51,84533,84534],{"class":65},"        count: ",[51,84536,620],{"class":278},[51,84538,31843],{"class":65},[51,84540,84541,84544,84547],{"class":53,"line":33086},[51,84542,84543],{"class":65},"        spec: { color: ",[51,84545,84546],{"class":61},"'白色'",[51,84548,55976],{"class":65},[51,84550,84551],{"class":53,"line":33092},[51,84552,78264],{"class":65},[51,84554,84555],{"class":53,"line":33098},[51,84556,79758],{"class":65},[51,84558,84559,84561,84563],{"class":53,"line":33104},[51,84560,79763],{"class":65},[51,84562,79857],{"class":61},[51,84564,31843],{"class":65},[51,84566,84567,84569,84571],{"class":53,"line":33110},[51,84568,79773],{"class":65},[51,84570,79866],{"class":61},[51,84572,31843],{"class":65},[51,84574,84575,84577,84580],{"class":53,"line":33116},[51,84576,79783],{"class":65},[51,84578,84579],{"class":278},"109.8",[51,84581,31843],{"class":65},[51,84583,84584,84586,84588],{"class":53,"line":33122},[51,84585,79793],{"class":65},[51,84587,79884],{"class":61},[51,84589,31843],{"class":65},[51,84591,84592,84594,84596],{"class":53,"line":33128},[51,84593,84534],{"class":65},[51,84595,614],{"class":278},[51,84597,31843],{"class":65},[51,84599,84600,84603,84605,84607,84609],{"class":53,"line":33148},[51,84601,84602],{"class":65},"        spec: { size: ",[51,84604,82275],{"class":61},[51,84606,55836],{"class":65},[51,84608,82280],{"class":61},[51,84610,55976],{"class":65},[51,84612,84613],{"class":53,"line":33154},[51,84614,78264],{"class":65},[51,84616,84617],{"class":53,"line":33170},[51,84618,79758],{"class":65},[51,84620,84621,84623,84625],{"class":53,"line":33176},[51,84622,79763],{"class":65},[51,84624,79901],{"class":61},[51,84626,31843],{"class":65},[51,84628,84629,84631,84633],{"class":53,"line":33190},[51,84630,79773],{"class":65},[51,84632,79910],{"class":61},[51,84634,31843],{"class":65},[51,84636,84637,84639,84642],{"class":53,"line":33196},[51,84638,79783],{"class":65},[51,84640,84641],{"class":278},"488",[51,84643,31843],{"class":65},[51,84645,84646,84648,84650],{"class":53,"line":33211},[51,84647,79793],{"class":65},[51,84649,79928],{"class":61},[51,84651,31843],{"class":65},[51,84653,84654,84656,84658],{"class":53,"line":33217},[51,84655,84534],{"class":65},[51,84657,759],{"class":278},[51,84659,31843],{"class":65},[51,84661,84662,84664,84667,84670,84673],{"class":53,"line":33226},[51,84663,84543],{"class":65},[51,84665,84666],{"class":61},"'青色'",[51,84668,84669],{"class":65},", sum: ",[51,84671,84672],{"class":61},"'一大四小'",[51,84674,55976],{"class":65},[51,84676,84677],{"class":53,"line":33232},[51,84678,78264],{"class":65},[51,84680,84681],{"class":53,"line":33241},[51,84682,79758],{"class":65},[51,84684,84685,84687,84689],{"class":53,"line":33247},[51,84686,79763],{"class":65},[51,84688,79945],{"class":61},[51,84690,31843],{"class":65},[51,84692,84693,84695,84697],{"class":53,"line":33253},[51,84694,79773],{"class":65},[51,84696,79954],{"class":61},[51,84698,31843],{"class":65},[51,84700,84701,84703,84706],{"class":53,"line":33262},[51,84702,79783],{"class":65},[51,84704,84705],{"class":278},"139",[51,84707,31843],{"class":65},[51,84709,84710,84712,84714],{"class":53,"line":33268},[51,84711,79793],{"class":65},[51,84713,79972],{"class":61},[51,84715,31843],{"class":65},[51,84717,84718,84720,84722],{"class":53,"line":33279},[51,84719,84534],{"class":65},[51,84721,759],{"class":278},[51,84723,31843],{"class":65},[51,84725,84726,84728,84731,84733,84736],{"class":53,"line":33285},[51,84727,84602],{"class":65},[51,84729,84730],{"class":61},"'小号'",[51,84732,55836],{"class":65},[51,84734,84735],{"class":61},"'紫色'",[51,84737,55842],{"class":65},[51,84739,84740,84743],{"class":53,"line":33304},[51,84741,84742],{"class":65},"        gift: ",[51,84744,84745],{"class":61},"'50g茶叶,清洗球'\n",[51,84747,84748],{"class":53,"line":33310},[51,84749,52770],{"class":65},[51,84751,84752],{"class":53,"line":33321},[51,84753,53481],{"class":65},[51,84755,84756],{"class":53,"line":33327},[51,84757,84758],{"class":601},"    \u002F\u002F  1.根据数据渲染页面\n",[51,84760,84761,84763,84765,84767,84769,84771,84773,84775,84777,84779,84781,84783],{"class":53,"line":33347},[51,84762,52779],{"class":65},[51,84764,54771],{"class":57},[51,84766,546],{"class":65},[51,84768,80273],{"class":61},[51,84770,74621],{"class":65},[51,84772,70],{"class":69},[51,84774,80420],{"class":65},[51,84776,74416],{"class":57},[51,84778,546],{"class":65},[51,84780,80167],{"class":248},[51,84782,80170],{"class":69},[51,84784,15956],{"class":65},[51,84786,84787],{"class":53,"line":33363},[51,84788,84789],{"class":601},"      \u002F\u002F 对象解构\n",[51,84791,84792,84794,84796,84798,84800,84802,84804,84807,84809,84811,84813,84816,84818,84821,84823,84825],{"class":53,"line":33369},[51,84793,58600],{"class":69},[51,84795,80179],{"class":65},[51,84797,80192],{"class":278},[51,84799,12819],{"class":65},[51,84801,80182],{"class":278},[51,84803,12819],{"class":65},[51,84805,84806],{"class":278},"count",[51,84808,12819],{"class":65},[51,84810,80187],{"class":278},[51,84812,12819],{"class":65},[51,84814,84815],{"class":278},"spec",[51,84817,12819],{"class":65},[51,84819,84820],{"class":278},"gift",[51,84822,80195],{"class":65},[51,84824,70],{"class":69},[51,84826,80200],{"class":65},[51,84828,84829],{"class":53,"line":33383},[51,84830,84831],{"class":601},"      \u002F\u002F 规格文字模块处理\n",[51,84833,84834,84836,84839,84841,84843,84845,84847,84849,84851,84853],{"class":53,"line":33389},[51,84835,58600],{"class":69},[51,84837,84838],{"class":278}," text",[51,84840,13948],{"class":69},[51,84842,82310],{"class":65},[51,84844,82313],{"class":57},[51,84846,82316],{"class":65},[51,84848,74595],{"class":57},[51,84850,546],{"class":65},[51,84852,82323],{"class":61},[51,84854,282],{"class":65},[51,84856,84857],{"class":53,"line":33395},[51,84858,84859],{"class":601},"      \u002F\u002F 处理赠品模块\n",[51,84861,84862,84864,84866,84868,84871,84873,84875,84877,84879,84882,84884,84886,84888,84890,84892,84895,84897,84900,84902,84904,84906,84908,84910,84912],{"class":53,"line":33406},[51,84863,58600],{"class":69},[51,84865,74291],{"class":278},[51,84867,13948],{"class":69},[51,84869,84870],{"class":65}," gift ",[51,84872,1528],{"class":69},[51,84874,83484],{"class":65},[51,84876,83487],{"class":57},[51,84878,546],{"class":65},[51,84880,84881],{"class":61},"','",[51,84883,31204],{"class":65},[51,84885,74416],{"class":57},[51,84887,546],{"class":65},[51,84889,80167],{"class":248},[51,84891,80170],{"class":69},[51,84893,84894],{"class":61}," `\u003Cspan class=\"tag\">【赠品】${",[51,84896,80167],{"class":65},[51,84898,84899],{"class":61},"}\u003C\u002Fspan>`",[51,84901,31204],{"class":65},[51,84903,74595],{"class":57},[51,84905,546],{"class":65},[51,84907,74600],{"class":61},[51,84909,14098],{"class":65},[51,84911,1401],{"class":69},[51,84913,70476],{"class":61},[51,84915,84916],{"class":53,"line":33412},[51,84917,84918],{"class":601},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[51,84920,84921,84923,84926,84928,84931,84933,84935,84937,84940,84942,84944,84946,84949,84951,84953],{"class":53,"line":33418},[51,84922,58600],{"class":69},[51,84924,84925],{"class":278}," subtotal",[51,84927,13948],{"class":69},[51,84929,84930],{"class":65}," ((price ",[51,84932,997],{"class":69},[51,84934,6138],{"class":278},[51,84936,6902],{"class":69},[51,84938,84939],{"class":65}," count) ",[51,84941,1126],{"class":69},[51,84943,6138],{"class":278},[51,84945,31204],{"class":65},[51,84947,84948],{"class":57},"toFixed",[51,84950,546],{"class":65},[51,84952,620],{"class":278},[51,84954,282],{"class":65},[51,84956,84957],{"class":53,"line":33428},[51,84958,206],{"emptyLinePlaceholder":205},[51,84960,84961,84963],{"class":53,"line":33434},[51,84962,74354],{"class":69},[51,84964,70540],{"class":61},[51,84966,84967],{"class":53,"line":33445},[51,84968,84969],{"class":61},"        \u003Cdiv class=\"item\">\n",[51,84971,84972,84975,84977],{"class":53,"line":33451},[51,84973,84974],{"class":61},"          \u003Cimg src=\"${",[51,84976,80192],{"class":65},[51,84978,80224],{"class":61},[51,84980,84981,84984,84986,84989,84991],{"class":53,"line":33461},[51,84982,84983],{"class":61},"          \u003Cp class=\"name\">${",[51,84985,80182],{"class":65},[51,84987,84988],{"class":61},"}${",[51,84990,1712],{"class":65},[51,84992,80234],{"class":61},[51,84994,84995,84998,85000],{"class":53,"line":33466},[51,84996,84997],{"class":61},"          \u003Cp class=\"spec\">${",[51,84999,5572],{"class":65},[51,85001,80234],{"class":61},[51,85003,85004,85007,85009,85011,85013,85015,85017,85019],{"class":53,"line":33472},[51,85005,85006],{"class":61},"          \u003Cp class=\"price\">${",[51,85008,80187],{"class":65},[51,85010,1100],{"class":61},[51,85012,84948],{"class":57},[51,85014,546],{"class":61},[51,85016,620],{"class":278},[51,85018,971],{"class":61},[51,85020,80234],{"class":61},[51,85022,85023,85026,85028],{"class":53,"line":33521},[51,85024,85025],{"class":61},"          \u003Cp class=\"count\">x${",[51,85027,84806],{"class":65},[51,85029,80234],{"class":61},[51,85031,85032,85035,85038],{"class":53,"line":33568},[51,85033,85034],{"class":61},"          \u003Cp class=\"sub-total\">${",[51,85036,85037],{"class":65},"subtotal",[51,85039,80234],{"class":61},[51,85041,85042],{"class":53,"line":33573},[51,85043,85044],{"class":61},"        \u003C\u002Fdiv> \n",[51,85046,85047],{"class":53,"line":33579},[51,85048,85049],{"class":61},"             `\n",[51,85051,85052,85055,85057,85059,85061],{"class":53,"line":33598},[51,85053,85054],{"class":65},"    }).",[51,85056,74595],{"class":57},[51,85058,546],{"class":65},[51,85060,74600],{"class":61},[51,85062,282],{"class":65},[51,85064,85065],{"class":53,"line":33604},[51,85066,85067],{"class":601},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[51,85069,85070,85072,85074,85076,85078,85081,85083,85086,85088,85090,85092,85095,85098,85100,85103,85105,85107,85109,85112,85114,85116,85118,85120],{"class":53,"line":33624},[51,85071,11605],{"class":69},[51,85073,63157],{"class":278},[51,85075,13948],{"class":69},[51,85077,80420],{"class":65},[51,85079,85080],{"class":57},"reduce",[51,85082,2766],{"class":65},[51,85084,85085],{"class":248},"prev",[51,85087,12819],{"class":65},[51,85089,80167],{"class":248},[51,85091,14098],{"class":65},[51,85093,85094],{"class":69},"=>",[51,85096,85097],{"class":65}," prev ",[51,85099,1023],{"class":69},[51,85101,85102],{"class":65}," (item.price ",[51,85104,997],{"class":69},[51,85106,6138],{"class":278},[51,85108,6902],{"class":69},[51,85110,85111],{"class":65}," item.count) ",[51,85113,1126],{"class":69},[51,85115,6138],{"class":278},[51,85117,12819],{"class":65},[51,85119,733],{"class":278},[51,85121,282],{"class":65},[51,85123,85124,85126,85128,85130,85133,85135,85137,85140,85142,85144,85146],{"class":53,"line":33630},[51,85125,52779],{"class":65},[51,85127,54771],{"class":57},[51,85129,546],{"class":65},[51,85131,85132],{"class":61},"'.amount'",[51,85134,74621],{"class":65},[51,85136,70],{"class":69},[51,85138,85139],{"class":65}," total.",[51,85141,84948],{"class":57},[51,85143,546],{"class":65},[51,85145,620],{"class":278},[51,85147,282],{"class":65},[51,85149,85150,85152,85154],{"class":53,"line":33636},[51,85151,52789],{"class":65},[51,85153,52185],{"class":51672},[51,85155,51679],{"class":65},[51,85157,85158,85160,85162],{"class":53,"line":33646},[51,85159,52157],{"class":65},[51,85161,52172],{"class":51672},[51,85163,51679],{"class":65},[51,85165,85166],{"class":53,"line":33651},[51,85167,206],{"emptyLinePlaceholder":205},[51,85169,85170,85172,85174],{"class":53,"line":33657},[51,85171,52157],{"class":65},[51,85173,51007],{"class":51672},[51,85175,51679],{"class":65},[486,85177,85179],{"id":85178},"_411-编程思想","4.11 编程思想",[513,85181,85183],{"id":85182},"_4111-面向过程介绍","4.11.1 面向过程介绍",[10,85185,85186,85189],{},[691,85187,85188],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[10,85191,85192],{},"调用就可以了",[10,85194,85195],{},[460,85196],{"alt":46,"src":85197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[513,85199,85201],{"id":85200},"_4112-面向对象","4.11.2 面向对象",[10,85203,85204],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[10,85206,85207],{},[460,85208],{"alt":46,"src":85209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[10,85211,85212],{},"面向对象的特性：",[1549,85214,85215,85218,85221],{},[22,85216,85217],{},"封装性",[22,85219,85220],{},"继承性",[22,85222,85223],{},"多态性",[513,85225,85227],{"id":85226},"_4113-两者比较","4.11.3 两者比较",[10,85229,85230],{},[460,85231],{"alt":46,"src":85232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[486,85234,85236],{"id":85235},"_412-构造函数回顾","4.12 构造函数回顾",[10,85238,85239],{},[460,85240],{"alt":46,"src":85241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[10,85243,85244],{},[460,85245],{"alt":46,"src":85246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[10,85248,85249],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[10,85251,85252],{},[460,85253],{"alt":46,"src":85254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[486,85256,85258],{"id":85257},"_413-原型","4.13 原型",[513,85260,85262],{"id":85261},"_4131-原型对象的认识","4.13.1 原型对象的认识",[10,85264,85265],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[10,85267,85268],{},[460,85269],{"alt":46,"src":85270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[10,85272,85273],{},[460,85274],{"alt":46,"src":85275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[10,85277,85278],{},"原型是构造函数的属性，它也是一个对象",[10,85280,85281],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[10,85283,85284],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[41,85286,85288],{"className":53439,"code":85287,"language":53441,"meta":46,"style":46},"\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",[48,85289,85290,85298,85303,85311,85316,85321,85326,85331,85336,85340,85344,85348,85353,85358,85362,85367,85372,85377,85382,85387,85391,85399],{"__ignoreMap":46},[51,85291,85292,85294,85296],{"class":53,"line":54},[51,85293,1452],{"class":65},[51,85295,52172],{"class":51672},[51,85297,51679],{"class":65},[51,85299,85300],{"class":53,"line":185},[51,85301,85302],{"class":601},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[51,85304,85305,85307,85309],{"class":53,"line":202},[51,85306,52516],{"class":65},[51,85308,52185],{"class":51672},[51,85310,51679],{"class":65},[51,85312,85313],{"class":53,"line":209},[51,85314,85315],{"class":65},"    function Star(uname, age) {\n",[51,85317,85318],{"class":53,"line":223},[51,85319,85320],{"class":65},"      this.uname = uname,\n",[51,85322,85323],{"class":53,"line":237},[51,85324,85325],{"class":65},"        this.age = age\n",[51,85327,85328],{"class":53,"line":242},[51,85329,85330],{"class":65},"      \u002F\u002F this.sing = function () {\n",[51,85332,85333],{"class":53,"line":257},[51,85334,85335],{"class":65},"      \u002F\u002F   console.log('唱歌')\n",[51,85337,85338],{"class":53,"line":262},[51,85339,206],{"emptyLinePlaceholder":205},[51,85341,85342],{"class":53,"line":285},[51,85343,60409],{"class":65},[51,85345,85346],{"class":53,"line":296},[51,85347,2577],{"class":65},[51,85349,85350],{"class":53,"line":307},[51,85351,85352],{"class":65},"    Star.prototype.sing = function () {\n",[51,85354,85355],{"class":53,"line":324},[51,85356,85357],{"class":65},"      console.log('唱歌')\n",[51,85359,85360],{"class":53,"line":329},[51,85361,2577],{"class":65},[51,85363,85364],{"class":53,"line":334},[51,85365,85366],{"class":65},"    \u002F\u002F console.dir(Star.prototype)\n",[51,85368,85369],{"class":53,"line":340},[51,85370,85371],{"class":65},"    const pink = new Star('pink', 18)\n",[51,85373,85374],{"class":53,"line":345},[51,85375,85376],{"class":65},"    const red = new Star('red', 20)\n",[51,85378,85379],{"class":53,"line":357},[51,85380,85381],{"class":65},"    pink.sing()\n",[51,85383,85384],{"class":53,"line":366},[51,85385,85386],{"class":65},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[51,85388,85389],{"class":53,"line":383},[51,85390,206],{"emptyLinePlaceholder":205},[51,85392,85393,85395,85397],{"class":53,"line":392},[51,85394,52789],{"class":65},[51,85396,52185],{"class":51672},[51,85398,51679],{"class":65},[51,85400,85401,85403,85405],{"class":53,"line":403},[51,85402,52157],{"class":65},[51,85404,52172],{"class":51672},[51,85406,51679],{"class":65},[10,85408,85409],{},[460,85410],{"alt":46,"src":85411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[41,85413,85415],{"className":53439,"code":85414,"language":53441,"meta":46,"style":46},"\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",[48,85416,85417,85425,85433,85438,85443,85448,85453,85457,85462,85467,85472,85476,85481,85485,85489,85494,85498,85506],{"__ignoreMap":46},[51,85418,85419,85421,85423],{"class":53,"line":54},[51,85420,1452],{"class":65},[51,85422,52172],{"class":51672},[51,85424,51679],{"class":65},[51,85426,85427,85429,85431],{"class":53,"line":185},[51,85428,52516],{"class":65},[51,85430,52185],{"class":51672},[51,85432,51679],{"class":65},[51,85434,85435],{"class":53,"line":202},[51,85436,85437],{"class":65},"    let that\n",[51,85439,85440],{"class":53,"line":209},[51,85441,85442],{"class":65},"    function Star(uname) {\n",[51,85444,85445],{"class":53,"line":223},[51,85446,85447],{"class":65},"      this.uname = uname\n",[51,85449,85450],{"class":53,"line":237},[51,85451,85452],{"class":65},"      that = this\n",[51,85454,85455],{"class":53,"line":242},[51,85456,2577],{"class":65},[51,85458,85459],{"class":53,"line":257},[51,85460,85461],{"class":65},"    \u002F\u002F 实例对象是 ldh\n",[51,85463,85464],{"class":53,"line":262},[51,85465,85466],{"class":65},"    const ldh = new Star('刘德华')\n",[51,85468,85469],{"class":53,"line":285},[51,85470,85471],{"class":65},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[51,85473,85474],{"class":53,"line":296},[51,85475,206],{"emptyLinePlaceholder":205},[51,85477,85478],{"class":53,"line":307},[51,85479,85480],{"class":65},"    Star.sing = function () {\n",[51,85482,85483],{"class":53,"line":324},[51,85484,85357],{"class":65},[51,85486,85487],{"class":53,"line":329},[51,85488,2577],{"class":65},[51,85490,85491],{"class":53,"line":334},[51,85492,85493],{"class":65},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[51,85495,85496],{"class":53,"line":340},[51,85497,206],{"emptyLinePlaceholder":205},[51,85499,85500,85502,85504],{"class":53,"line":345},[51,85501,52789],{"class":65},[51,85503,52185],{"class":51672},[51,85505,51679],{"class":65},[51,85507,85508,85510,85512],{"class":53,"line":357},[51,85509,52157],{"class":65},[51,85511,52172],{"class":51672},[51,85513,51679],{"class":65},[10,85515,85516],{},"构造函数的this指向的是实例对象；",[10,85518,85519],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[513,85521,85523],{"id":85522},"_4132-数组扩展方法","4.13.2 数组扩展方法",[10,85525,85526],{},[460,85527],{"alt":46,"src":85528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[41,85530,85532],{"className":53439,"code":85531,"language":53441,"meta":46,"style":46},"\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",[48,85533,85534,85542,85550,85555,85560,85565,85570,85575,85580,85585,85590,85595,85600,85604,85609,85614,85619,85624,85628,85633,85638,85643,85648,85652,85657,85662,85667,85672,85676,85681,85685,85693],{"__ignoreMap":46},[51,85535,85536,85538,85540],{"class":53,"line":54},[51,85537,1452],{"class":65},[51,85539,52172],{"class":51672},[51,85541,51679],{"class":65},[51,85543,85544,85546,85548],{"class":53,"line":185},[51,85545,52516],{"class":65},[51,85547,52185],{"class":51672},[51,85549,51679],{"class":65},[51,85551,85552],{"class":53,"line":202},[51,85553,85554],{"class":65},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[51,85556,85557],{"class":53,"line":209},[51,85558,85559],{"class":65},"    const arr = [1, 2, 3]\n",[51,85561,85562],{"class":53,"line":223},[51,85563,85564],{"class":65},"    \u002F\u002F 自己定义数组的扩展方法\n",[51,85566,85567],{"class":53,"line":237},[51,85568,85569],{"class":65},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[51,85571,85572],{"class":53,"line":242},[51,85573,85574],{"class":65},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[51,85576,85577],{"class":53,"line":257},[51,85578,85579],{"class":65},"    \u002F\u002F ①.最大值\n",[51,85581,85582],{"class":53,"line":262},[51,85583,85584],{"class":65},"    Array.prototype.max = function () {\n",[51,85586,85587],{"class":53,"line":285},[51,85588,85589],{"class":65},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[51,85591,85592],{"class":53,"line":296},[51,85593,85594],{"class":65},"      return Math.max(...this)\n",[51,85596,85597],{"class":53,"line":307},[51,85598,85599],{"class":65},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[51,85601,85602],{"class":53,"line":324},[51,85603,2577],{"class":65},[51,85605,85606],{"class":53,"line":329},[51,85607,85608],{"class":65},"    console.log(arr.max())\n",[51,85610,85611],{"class":53,"line":334},[51,85612,85613],{"class":65},"    \u002F\u002F ②最小值\n",[51,85615,85616],{"class":53,"line":340},[51,85617,85618],{"class":65},"    Array.prototype.min = function () {\n",[51,85620,85621],{"class":53,"line":345},[51,85622,85623],{"class":65},"      return Math.min(...this)\n",[51,85625,85626],{"class":53,"line":357},[51,85627,2577],{"class":65},[51,85629,85630],{"class":53,"line":366},[51,85631,85632],{"class":65},"    console.log(arr.min())\n",[51,85634,85635],{"class":53,"line":383},[51,85636,85637],{"class":65},"    \u002F\u002F③求和\n",[51,85639,85640],{"class":53,"line":392},[51,85641,85642],{"class":65},"    Array.prototype.sum = function () {\n",[51,85644,85645],{"class":53,"line":403},[51,85646,85647],{"class":65},"      return this.reduce((prev, current) => prev + current, 0)\n",[51,85649,85650],{"class":53,"line":409},[51,85651,2577],{"class":65},[51,85653,85654],{"class":53,"line":414},[51,85655,85656],{"class":65},"    console.log(arr.sum())\n",[51,85658,85659],{"class":53,"line":433},[51,85660,85661],{"class":65},"    \u002F\u002F ③排序\n",[51,85663,85664],{"class":53,"line":439},[51,85665,85666],{"class":65},"    Array.prototype.rever = function () {\n",[51,85668,85669],{"class":53,"line":444},[51,85670,85671],{"class":65},"      return this.reverse()\n",[51,85673,85674],{"class":53,"line":453},[51,85675,2577],{"class":65},[51,85677,85678],{"class":53,"line":2174},[51,85679,85680],{"class":65},"    console.log(arr.rever())\n",[51,85682,85683],{"class":53,"line":2965},[51,85684,206],{"emptyLinePlaceholder":205},[51,85686,85687,85689,85691],{"class":53,"line":2979},[51,85688,52789],{"class":65},[51,85690,52185],{"class":51672},[51,85692,51679],{"class":65},[51,85694,85695,85697,85699],{"class":53,"line":2987},[51,85696,52157],{"class":65},[51,85698,52172],{"class":51672},[51,85700,51679],{"class":65},[10,85702,85703],{},[460,85704],{"alt":46,"src":85705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[513,85707,85709],{"id":85708},"_4133-constructor-属性","4.13.3 constructor 属性",[10,85711,85712],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[10,85714,85715],{},[460,85716],{"alt":46,"src":85717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[41,85719,85721],{"className":53439,"code":85720,"language":53441,"meta":46,"style":46},"\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",[48,85722,85723,85731,85739,85744,85749,85753,85758,85763,85768,85776],{"__ignoreMap":46},[51,85724,85725,85727,85729],{"class":53,"line":54},[51,85726,1452],{"class":65},[51,85728,52172],{"class":51672},[51,85730,51679],{"class":65},[51,85732,85733,85735,85737],{"class":53,"line":185},[51,85734,52516],{"class":65},[51,85736,52185],{"class":51672},[51,85738,51679],{"class":65},[51,85740,85741],{"class":53,"line":202},[51,85742,85743],{"class":65},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[51,85745,85746],{"class":53,"line":209},[51,85747,85748],{"class":65},"    function Star() {\n",[51,85750,85751],{"class":53,"line":223},[51,85752,2577],{"class":65},[51,85754,85755],{"class":53,"line":237},[51,85756,85757],{"class":65},"    const ldh = new Star()\n",[51,85759,85760],{"class":53,"line":242},[51,85761,85762],{"class":65},"    console.log(Star.prototype)\n",[51,85764,85765],{"class":53,"line":257},[51,85766,85767],{"class":65},"    console.log(Star.prototype.constructor === Star)\n",[51,85769,85770,85772,85774],{"class":53,"line":262},[51,85771,52789],{"class":65},[51,85773,52185],{"class":51672},[51,85775,51679],{"class":65},[51,85777,85778,85780,85782],{"class":53,"line":285},[51,85779,52157],{"class":65},[51,85781,52172],{"class":51672},[51,85783,51679],{"class":65},[10,85785,85786],{},[460,85787],{"alt":46,"src":85788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[10,85790,85791],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[41,85793,85795],{"className":53439,"code":85794,"language":53441,"meta":46,"style":46},"  \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",[48,85796,85797,85805,85809,85813,85817,85822,85827,85832,85836,85841,85846,85851,85856,85861,85866,85870,85874,85879,85884,85889,85893,85898,85903,85907,85911,85915],{"__ignoreMap":46},[51,85798,85799,85801,85803],{"class":53,"line":54},[51,85800,52516],{"class":65},[51,85802,52185],{"class":51672},[51,85804,51679],{"class":65},[51,85806,85807],{"class":53,"line":185},[51,85808,85743],{"class":65},[51,85810,85811],{"class":53,"line":202},[51,85812,85748],{"class":65},[51,85814,85815],{"class":53,"line":209},[51,85816,2577],{"class":65},[51,85818,85819],{"class":53,"line":223},[51,85820,85821],{"class":65},"    \u002F\u002F const ldh = new Star()\n",[51,85823,85824],{"class":53,"line":237},[51,85825,85826],{"class":65},"    \u002F\u002F console.log(Star.prototype)\n",[51,85828,85829],{"class":53,"line":242},[51,85830,85831],{"class":65},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[51,85833,85834],{"class":53,"line":257},[51,85835,206],{"emptyLinePlaceholder":205},[51,85837,85838],{"class":53,"line":262},[51,85839,85840],{"class":65},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[51,85842,85843],{"class":53,"line":285},[51,85844,85845],{"class":65},"    \u002F\u002F Star.prototype.sing = function () {\n",[51,85847,85848],{"class":53,"line":296},[51,85849,85850],{"class":65},"    \u002F\u002F   console.log('唱歌')\n",[51,85852,85853],{"class":53,"line":307},[51,85854,85855],{"class":65},"    \u002F\u002F }\n",[51,85857,85858],{"class":53,"line":324},[51,85859,85860],{"class":65},"    \u002F\u002F Star.prototype.dance = function () {\n",[51,85862,85863],{"class":53,"line":329},[51,85864,85865],{"class":65},"    \u002F\u002F   console.log('跳舞')\n",[51,85867,85868],{"class":53,"line":334},[51,85869,85855],{"class":65},[51,85871,85872],{"class":53,"line":340},[51,85873,85762],{"class":65},[51,85875,85876],{"class":53,"line":345},[51,85877,85878],{"class":65},"    Star.prototype = {\n",[51,85880,85881],{"class":53,"line":357},[51,85882,85883],{"class":65},"      sing: function () {\n",[51,85885,85886],{"class":53,"line":366},[51,85887,85888],{"class":65},"        console.log('唱歌')\n",[51,85890,85891],{"class":53,"line":383},[51,85892,78264],{"class":65},[51,85894,85895],{"class":53,"line":392},[51,85896,85897],{"class":65},"      dance: function () {\n",[51,85899,85900],{"class":53,"line":403},[51,85901,85902],{"class":65},"        console.log('跳舞')\n",[51,85904,85905],{"class":53,"line":409},[51,85906,52770],{"class":65},[51,85908,85909],{"class":53,"line":414},[51,85910,2577],{"class":65},[51,85912,85913],{"class":53,"line":433},[51,85914,85762],{"class":65},[51,85916,85917,85919,85921],{"class":53,"line":439},[51,85918,52789],{"class":65},[51,85920,52185],{"class":51672},[51,85922,51679],{"class":65},[10,85924,85925],{},"进行输出结果后会发现：",[10,85927,85928],{},[460,85929],{"alt":46,"src":85930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[10,85932,85933],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[10,85935,85936],{},"所以，要重新指回创造这个原型对象的构造函数",[41,85938,85940],{"className":71585,"code":85939,"language":71587,"meta":46,"style":46},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[48,85941,85942,85956,85961,85966,85977,85990,85995,86006,86020,86024],{"__ignoreMap":46},[51,85943,85944,85947,85949,85952,85954],{"class":53,"line":54},[51,85945,85946],{"class":278},"Star",[51,85948,1100],{"class":65},[51,85950,85951],{"class":278},"prototype",[51,85953,13948],{"class":69},[51,85955,15956],{"class":65},[51,85957,85958],{"class":53,"line":185},[51,85959,85960],{"class":601},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[51,85962,85963],{"class":53,"line":202},[51,85964,85965],{"class":65},"  constructor: Star,\n",[51,85967,85968,85971,85973,85975],{"class":53,"line":209},[51,85969,85970],{"class":57},"  sing",[51,85972,51809],{"class":65},[51,85974,54821],{"class":69},[51,85976,54824],{"class":65},[51,85978,85979,85981,85983,85985,85988],{"class":53,"line":223},[51,85980,74125],{"class":65},[51,85982,58619],{"class":57},[51,85984,546],{"class":65},[51,85986,85987],{"class":61},"'唱歌'",[51,85989,282],{"class":65},[51,85991,85992],{"class":53,"line":237},[51,85993,85994],{"class":65},"   },\n",[51,85996,85997,86000,86002,86004],{"class":53,"line":242},[51,85998,85999],{"class":57},"   dance",[51,86001,51809],{"class":65},[51,86003,54821],{"class":69},[51,86005,54824],{"class":65},[51,86007,86008,86011,86013,86015,86018],{"class":53,"line":257},[51,86009,86010],{"class":65},"     console.",[51,86012,58619],{"class":57},[51,86014,546],{"class":65},[51,86016,86017],{"class":61},"'跳舞'",[51,86019,282],{"class":65},[51,86021,86022],{"class":53,"line":262},[51,86023,4695],{"class":65},[51,86025,86026],{"class":53,"line":285},[51,86027,1974],{"class":65},[10,86029,86030],{},[460,86031],{"alt":46,"src":86032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[10,86034,86035],{},"总结1：",[10,86037,86038],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[10,86040,86041],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[10,86043,86044],{},"constructor指的是他的来源",[10,86046,86047],{},[460,86048],{"alt":46,"src":86049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[10,86051,86052],{},[460,86053],{"alt":46,"src":86054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[10,86056,86057],{},"总结2：",[10,86059,86060],{},[460,86061],{"alt":46,"src":86062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[10,86064,86065],{},[460,86066],{"alt":46,"src":86067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[10,86069,86070],{},[460,86071],{"alt":46,"src":86072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[513,86074,86076],{"id":86075},"_4134-对象原型","4.13.4 对象原型",[10,86078,86079],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[10,86081,86082],{},"对象原型就是__proto__这个属性",[10,86084,86085],{},[460,86086],{"alt":46,"src":86087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[10,86089,86090],{},[460,86091],{"alt":46,"src":86092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[10,86094,86095],{},[460,86096],{"alt":46,"src":86097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[10,86099,86100],{},[460,86101],{"alt":46,"src":86102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[41,86104,86106],{"className":53439,"code":86105,"language":53441,"meta":46,"style":46},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[48,86107,86108,86116,86124,86128,86132,86136,86141,86149],{"__ignoreMap":46},[51,86109,86110,86112,86114],{"class":53,"line":54},[51,86111,1452],{"class":65},[51,86113,52172],{"class":51672},[51,86115,51679],{"class":65},[51,86117,86118,86120,86122],{"class":53,"line":185},[51,86119,52516],{"class":65},[51,86121,52185],{"class":51672},[51,86123,51679],{"class":65},[51,86125,86126],{"class":53,"line":202},[51,86127,85748],{"class":65},[51,86129,86130],{"class":53,"line":209},[51,86131,2577],{"class":65},[51,86133,86134],{"class":53,"line":223},[51,86135,85757],{"class":65},[51,86137,86138],{"class":53,"line":237},[51,86139,86140],{"class":65},"    console.log(ldh)\n",[51,86142,86143,86145,86147],{"class":53,"line":242},[51,86144,52789],{"class":65},[51,86146,52185],{"class":51672},[51,86148,51679],{"class":65},[51,86150,86151,86153,86155],{"class":53,"line":257},[51,86152,52157],{"class":65},[51,86154,52172],{"class":51672},[51,86156,51679],{"class":65},[10,86158,86159],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[10,86161,86162],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[10,86164,86165],{},[460,86166],{"alt":46,"src":86167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[10,86169,86170],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[10,86172,86173],{},"对象原型指向原型对象",[10,86175,86176],{},[460,86177],{"alt":46,"src":86178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[10,86180,86181],{},[460,86182],{"alt":46,"src":86183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[10,86185,86186],{},[460,86187],{"alt":46,"src":86188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[513,86190,86192],{"id":86191},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[10,86194,86195],{},[460,86196],{"alt":46,"src":86197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[19,86199,86200,86203,86206,86209],{},[22,86201,86202],{},"构造函数通过new的形式实例化得到实例对象",[22,86204,86205],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[22,86207,86208],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[22,86210,86211],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[10,86213,86214],{},[460,86215],{"alt":46,"src":86216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[10,86218,86219],{},"题目梳理：",[10,86221,86222],{},[460,86223],{"alt":46,"src":86224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[513,86226,86228],{"id":86227},"_4136-原型继承","4.13.6 原型继承",[10,86230,86231],{},[460,86232],{"alt":46,"src":86233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[10,86235,86236],{},[460,86237],{"alt":46,"src":86238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[10,86240,86241],{},[460,86242],{"alt":46,"src":86243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[10,86245,86246],{},[460,86247],{"alt":46,"src":86248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[10,86250,86251],{},[460,86252],{"alt":46,"src":86253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[10,86255,86256],{},[460,86257],{"alt":46,"src":86258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[10,86260,86261],{},[460,86262],{"alt":46,"src":86263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[10,86265,86266],{},[460,86267],{"alt":46,"src":86268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[10,86270,86271],{},"回顾：构造函数每次new得到对象都是不同的",[513,86273,86275],{"id":86274},"_4137-原型链","4.13.7 原型链",[10,86277,86278],{},[460,86279],{"alt":46,"src":86280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[10,86282,86283],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[10,86285,86286],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[10,86288,86289],{},"大哥是Object",[10,86291,86292],{},[460,86293],{"alt":46,"src":86294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[10,86296,86297],{},[460,86298],{"alt":46,"src":86299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[10,86301,86302],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[10,86304,86305],{},"万物皆对象",[513,86307,86309],{"id":86308},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[10,86311,86312],{},"模态框",[10,86314,86315],{},"以后遇见这个效果直接使用这个就行",[10,86317,86318],{},[460,86319],{"alt":46,"src":86320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[10,86322,86323],{},[460,86324],{"alt":46,"src":86325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[10,86327,86328],{},[460,86329],{"alt":46,"src":86330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[10,86332,86333],{},[460,86334],{"alt":46,"src":86335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[10,86337,86338],{},"补充知识点：",[19,86340,86341],{},[22,86342,86343],{},"append()",[10,86345,86346],{},[460,86347],{"alt":46,"src":86348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[41,86350,86352],{"className":51005,"code":86351,"language":51007,"meta":46,"style":46},"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",[48,86353,86354,86359,86364,86369,86373,86377,86381,86386,86391,86396,86400],{"__ignoreMap":46},[51,86355,86356],{"class":53,"line":54},[51,86357,86358],{"class":65},"append(param1)\n",[51,86360,86361],{"class":53,"line":185},[51,86362,86363],{"class":65},"append(param1, param2)\n",[51,86365,86366],{"class":53,"line":202},[51,86367,86368],{"class":65},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[51,86370,86371],{"class":53,"line":209},[51,86372,206],{"emptyLinePlaceholder":205},[51,86374,86375],{"class":53,"line":223},[51,86376,206],{"emptyLinePlaceholder":205},[51,86378,86379],{"class":53,"line":237},[51,86380,206],{"emptyLinePlaceholder":205},[51,86382,86383],{"class":53,"line":242},[51,86384,86385],{"class":65},"let div = document.createElement(\"div\");\n",[51,86387,86388],{"class":53,"line":257},[51,86389,86390],{"class":65},"let p = document.createElement(\"p\");\n",[51,86392,86393],{"class":53,"line":262},[51,86394,86395],{"class":65},"div.append(p);\n",[51,86397,86398],{"class":53,"line":285},[51,86399,206],{"emptyLinePlaceholder":205},[51,86401,86402,86405,86407],{"class":53,"line":296},[51,86403,86404],{"class":65},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[51,86406,10],{"class":51672},[51,86408,86409],{"class":65},"> ]\n",[19,86411,86412],{"start":185},[22,86413,86414],{},"remove()",[10,86416,86417],{},"自己删自己",[10,86419,86420],{},[460,86421],{"alt":46,"src":86422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[41,86424,86426],{"className":51005,"code":86425,"language":51007,"meta":46,"style":46},"\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",[48,86427,86428,86438,86452,86456,86464,86478,86498,86510,86518,86525,86537,86550,86585,86597,86608,86620,86632,86644,86671,86681,86685,86689,86698,86710,86724,86734,86746,86750,86754,86764,86775,86785,86795,86808,86821,86831,86835,86839,86848,86858,86870,86874,86878,86887,86897,86907,86919,86923,86927,86937,86953,86964,86974,86984,86996,87008,87020,87024,87028,87041,87052,87056,87064,87072,87076,87084,87104,87124,87132,87137,87163,87168,87173,87192,87197,87209,87214,87225,87235,87245,87250,87255,87259,87264,87269,87274,87294,87299,87319,87324,87338,87343,87348,87353,87369,87373,87378,87407,87412,87417,87422,87433,87437,87441,87445,87450,87475,87480,87505,87510,87519,87523,87528,87553,87557,87582,87586,87595,87599,87604,87622,87632,87636,87644,87652,87656],{"__ignoreMap":46},[51,86429,86430,86432,86434,86436],{"class":53,"line":54},[51,86431,51669],{"class":65},[51,86433,51673],{"class":51672},[51,86435,51676],{"class":57},[51,86437,51679],{"class":65},[51,86439,86440,86442,86444,86446,86448,86450],{"class":53,"line":185},[51,86441,1452],{"class":65},[51,86443,51007],{"class":51672},[51,86445,51688],{"class":57},[51,86447,70],{"class":65},[51,86449,51693],{"class":61},[51,86451,51679],{"class":65},[51,86453,86454],{"class":53,"line":202},[51,86455,206],{"emptyLinePlaceholder":205},[51,86457,86458,86460,86462],{"class":53,"line":209},[51,86459,1452],{"class":65},[51,86461,51706],{"class":51672},[51,86463,51679],{"class":65},[51,86465,86466,86468,86470,86472,86474,86476],{"class":53,"line":223},[51,86467,52516],{"class":65},[51,86469,51716],{"class":51672},[51,86471,51719],{"class":57},[51,86473,70],{"class":65},[51,86475,51724],{"class":61},[51,86477,51679],{"class":65},[51,86479,86480,86482,86484,86486,86488,86490,86492,86494,86496],{"class":53,"line":237},[51,86481,52516],{"class":65},[51,86483,51716],{"class":51672},[51,86485,15304],{"class":57},[51,86487,70],{"class":65},[51,86489,51763],{"class":61},[51,86491,51743],{"class":57},[51,86493,70],{"class":65},[51,86495,51770],{"class":61},[51,86497,51679],{"class":65},[51,86499,86500,86502,86504,86506,86508],{"class":53,"line":242},[51,86501,52516],{"class":65},[51,86503,51779],{"class":51672},[51,86505,51782],{"class":65},[51,86507,51779],{"class":51672},[51,86509,51679],{"class":65},[51,86511,86512,86514,86516],{"class":53,"line":257},[51,86513,52516],{"class":65},[51,86515,464],{"class":51672},[51,86517,51679],{"class":65},[51,86519,86520,86523],{"class":53,"line":262},[51,86521,86522],{"class":57},"    .modal",[51,86524,15956],{"class":65},[51,86526,86527,86529,86531,86533,86535],{"class":53,"line":285},[51,86528,55143],{"class":278},[51,86530,51809],{"class":65},[51,86532,4359],{"class":278},[51,86534,51864],{"class":69},[51,86536,1703],{"class":65},[51,86538,86539,86542,86544,86546,86548],{"class":53,"line":296},[51,86540,86541],{"class":278},"      min-height",[51,86543,51809],{"class":65},[51,86545,853],{"class":278},[51,86547,51864],{"class":69},[51,86549,1703],{"class":65},[51,86551,86552,86554,86556,86558,86560,86562,86564,86566,86568,86570,86572,86574,86576,86578,86580,86583],{"class":53,"line":307},[51,86553,79122],{"class":278},[51,86555,51809],{"class":65},[51,86557,733],{"class":278},[51,86559,4479],{"class":278},[51,86561,2428],{"class":278},[51,86563,51864],{"class":69},[51,86565,79139],{"class":278},[51,86567,546],{"class":65},[51,86569,733],{"class":278},[51,86571,12819],{"class":65},[51,86573,733],{"class":278},[51,86575,12819],{"class":65},[51,86577,733],{"class":278},[51,86579,12819],{"class":65},[51,86581,86582],{"class":278},"0.1",[51,86584,3107],{"class":65},[51,86586,86587,86589,86591,86593,86595],{"class":53,"line":324},[51,86588,55506],{"class":278},[51,86590,51809],{"class":65},[51,86592,835],{"class":278},[51,86594,51864],{"class":69},[51,86596,1703],{"class":65},[51,86598,86599,86601,86603,86606],{"class":53,"line":329},[51,86600,55131],{"class":278},[51,86602,51809],{"class":65},[51,86604,86605],{"class":278},"fixed",[51,86607,1703],{"class":65},[51,86609,86610,86613,86615,86618],{"class":53,"line":334},[51,86611,86612],{"class":278},"      z-index",[51,86614,51809],{"class":65},[51,86616,86617],{"class":278},"999",[51,86619,1703],{"class":65},[51,86621,86622,86624,86626,86628,86630],{"class":53,"line":340},[51,86623,55210],{"class":278},[51,86625,51809],{"class":65},[51,86627,1198],{"class":278},[51,86629,870],{"class":69},[51,86631,1703],{"class":65},[51,86633,86634,86636,86638,86640,86642],{"class":53,"line":345},[51,86635,55319],{"class":278},[51,86637,51809],{"class":65},[51,86639,1198],{"class":278},[51,86641,870],{"class":69},[51,86643,1703],{"class":65},[51,86645,86646,86648,86650,86652,86654,86657,86659,86661,86663,86665,86667,86669],{"class":53,"line":357},[51,86647,79163],{"class":278},[51,86649,51809],{"class":65},[51,86651,79168],{"class":278},[51,86653,546],{"class":65},[51,86655,86656],{"class":278},"-50",[51,86658,870],{"class":69},[51,86660,12819],{"class":65},[51,86662,86656],{"class":278},[51,86664,870],{"class":69},[51,86666,12819],{"class":65},[51,86668,733],{"class":278},[51,86670,3107],{"class":65},[51,86672,86673,86675,86677,86679],{"class":53,"line":366},[51,86674,55256],{"class":278},[51,86676,51809],{"class":65},[51,86678,61214],{"class":278},[51,86680,1703],{"class":65},[51,86682,86683],{"class":53,"line":383},[51,86684,2577],{"class":65},[51,86686,86687],{"class":53,"line":392},[51,86688,206],{"emptyLinePlaceholder":205},[51,86690,86691,86693,86696],{"class":53,"line":403},[51,86692,86522],{"class":57},[51,86694,86695],{"class":57}," .header",[51,86697,15956],{"class":65},[51,86699,86700,86702,86704,86706,86708],{"class":53,"line":409},[51,86701,57731],{"class":278},[51,86703,51809],{"class":65},[51,86705,943],{"class":278},[51,86707,51864],{"class":69},[51,86709,1703],{"class":65},[51,86711,86712,86714,86716,86718,86720,86722],{"class":53,"line":414},[51,86713,55067],{"class":278},[51,86715,51809],{"class":65},[51,86717,733],{"class":278},[51,86719,2428],{"class":278},[51,86721,51864],{"class":69},[51,86723,1703],{"class":65},[51,86725,86726,86728,86730,86732],{"class":53,"line":433},[51,86727,55131],{"class":278},[51,86729,51809],{"class":65},[51,86731,55136],{"class":278},[51,86733,1703],{"class":65},[51,86735,86736,86738,86740,86742,86744],{"class":53,"line":439},[51,86737,55294],{"class":278},[51,86739,51809],{"class":65},[51,86741,1242],{"class":278},[51,86743,51864],{"class":69},[51,86745,1703],{"class":65},[51,86747,86748],{"class":53,"line":444},[51,86749,2577],{"class":65},[51,86751,86752],{"class":53,"line":453},[51,86753,206],{"emptyLinePlaceholder":205},[51,86755,86756,86758,86760,86762],{"class":53,"line":2174},[51,86757,86522],{"class":57},[51,86759,86695],{"class":57},[51,86761,3419],{"class":51672},[51,86763,15956],{"class":65},[51,86765,86766,86769,86771,86773],{"class":53,"line":2965},[51,86767,86768],{"class":278},"      font-style",[51,86770,51809],{"class":65},[51,86772,64213],{"class":278},[51,86774,1703],{"class":65},[51,86776,86777,86779,86781,86783],{"class":53,"line":2979},[51,86778,57788],{"class":278},[51,86780,51809],{"class":65},[51,86782,62442],{"class":278},[51,86784,1703],{"class":65},[51,86786,86787,86789,86791,86793],{"class":53,"line":2987},[51,86788,55131],{"class":278},[51,86790,51809],{"class":65},[51,86792,55203],{"class":278},[51,86794,1703],{"class":65},[51,86796,86797,86800,86802,86804,86806],{"class":53,"line":2992},[51,86798,86799],{"class":278},"      right",[51,86801,51809],{"class":65},[51,86803,1117],{"class":278},[51,86805,51864],{"class":69},[51,86807,1703],{"class":65},[51,86809,86810,86812,86814,86817,86819],{"class":53,"line":2998},[51,86811,55319],{"class":278},[51,86813,51809],{"class":65},[51,86815,86816],{"class":278},"-2",[51,86818,51864],{"class":69},[51,86820,1703],{"class":65},[51,86822,86823,86825,86827,86829],{"class":53,"line":3004},[51,86824,62397],{"class":278},[51,86826,51809],{"class":65},[51,86828,62402],{"class":278},[51,86830,1703],{"class":65},[51,86832,86833],{"class":53,"line":3009},[51,86834,2577],{"class":65},[51,86836,86837],{"class":53,"line":8332},[51,86838,206],{"emptyLinePlaceholder":205},[51,86840,86841,86843,86846],{"class":53,"line":8356},[51,86842,86522],{"class":57},[51,86844,86845],{"class":57}," .body",[51,86847,15956],{"class":65},[51,86849,86850,86852,86854,86856],{"class":53,"line":8361},[51,86851,57658],{"class":278},[51,86853,51809],{"class":65},[51,86855,51964],{"class":278},[51,86857,1703],{"class":65},[51,86859,86860,86862,86864,86866,86868],{"class":53,"line":8367},[51,86861,55067],{"class":278},[51,86863,51809],{"class":65},[51,86865,988],{"class":278},[51,86867,51864],{"class":69},[51,86869,1703],{"class":65},[51,86871,86872],{"class":53,"line":8394},[51,86873,2577],{"class":65},[51,86875,86876],{"class":53,"line":8399},[51,86877,206],{"emptyLinePlaceholder":205},[51,86879,86880,86882,86885],{"class":53,"line":8405},[51,86881,86522],{"class":57},[51,86883,86884],{"class":57}," .footer",[51,86886,15956],{"class":65},[51,86888,86889,86891,86893,86895],{"class":53,"line":8417},[51,86890,55381],{"class":278},[51,86892,51809],{"class":65},[51,86894,51849],{"class":278},[51,86896,1703],{"class":65},[51,86898,86899,86901,86903,86905],{"class":53,"line":8429},[51,86900,55392],{"class":278},[51,86902,51809],{"class":65},[51,86904,51952],{"class":278},[51,86906,1703],{"class":65},[51,86908,86909,86911,86913,86915,86917],{"class":53,"line":8441},[51,86910,55067],{"class":278},[51,86912,51809],{"class":65},[51,86914,988],{"class":278},[51,86916,51864],{"class":69},[51,86918,1703],{"class":65},[51,86920,86921],{"class":53,"line":10100},[51,86922,2577],{"class":65},[51,86924,86925],{"class":53,"line":10125},[51,86926,206],{"emptyLinePlaceholder":205},[51,86928,86929,86931,86933,86935],{"class":53,"line":10148},[51,86930,86522],{"class":57},[51,86932,86884],{"class":57},[51,86934,1808],{"class":51672},[51,86936,15956],{"class":65},[51,86938,86939,86941,86943,86945,86947,86949,86951],{"class":53,"line":10172},[51,86940,55067],{"class":278},[51,86942,51809],{"class":65},[51,86944,614],{"class":278},[51,86946,51864],{"class":69},[51,86948,2473],{"class":278},[51,86950,51864],{"class":69},[51,86952,1703],{"class":65},[51,86954,86955,86957,86959,86962],{"class":53,"line":10177},[51,86956,62093],{"class":278},[51,86958,51809],{"class":65},[51,86960,86961],{"class":278},"#ccc",[51,86963,1703],{"class":65},[51,86965,86966,86968,86970,86972],{"class":53,"line":10182},[51,86967,64342],{"class":278},[51,86969,51809],{"class":65},[51,86971,55109],{"class":278},[51,86973,1703],{"class":65},[51,86975,86976,86978,86980,86982],{"class":53,"line":10187},[51,86977,57788],{"class":278},[51,86979,51809],{"class":65},[51,86981,61214],{"class":278},[51,86983,1703],{"class":65},[51,86985,86986,86988,86990,86992,86994],{"class":53,"line":10196},[51,86987,55506],{"class":278},[51,86989,51809],{"class":65},[51,86991,620],{"class":278},[51,86993,51864],{"class":69},[51,86995,1703],{"class":65},[51,86997,86998,87000,87002,87004,87006],{"class":53,"line":10201},[51,86999,62122],{"class":278},[51,87001,51809],{"class":65},[51,87003,988],{"class":278},[51,87005,51864],{"class":69},[51,87007,1703],{"class":65},[51,87009,87010,87012,87014,87016,87018],{"class":53,"line":10207},[51,87011,55294],{"class":278},[51,87013,51809],{"class":65},[51,87015,1091],{"class":278},[51,87017,51864],{"class":69},[51,87019,1703],{"class":65},[51,87021,87022],{"class":53,"line":10228},[51,87023,2577],{"class":65},[51,87025,87026],{"class":53,"line":10234},[51,87027,206],{"emptyLinePlaceholder":205},[51,87029,87030,87032,87034,87036,87039],{"class":53,"line":10248},[51,87031,86522],{"class":57},[51,87033,86884],{"class":57},[51,87035,1808],{"class":51672},[51,87037,87038],{"class":57},".submit",[51,87040,15956],{"class":65},[51,87042,87043,87045,87047,87050],{"class":53,"line":10254},[51,87044,55256],{"class":278},[51,87046,51809],{"class":65},[51,87048,87049],{"class":278},"#369",[51,87051,1703],{"class":65},[51,87053,87054],{"class":53,"line":10281},[51,87055,2577],{"class":65},[51,87057,87058,87060,87062],{"class":53,"line":10290},[51,87059,52789],{"class":65},[51,87061,464],{"class":51672},[51,87063,51679],{"class":65},[51,87065,87066,87068,87070],{"class":53,"line":10296},[51,87067,52157],{"class":65},[51,87069,51706],{"class":51672},[51,87071,51679],{"class":65},[51,87073,87074],{"class":53,"line":10304},[51,87075,206],{"emptyLinePlaceholder":205},[51,87077,87078,87080,87082],{"class":53,"line":10309},[51,87079,1452],{"class":65},[51,87081,52172],{"class":51672},[51,87083,51679],{"class":65},[51,87085,87086,87088,87090,87092,87094,87097,87100,87102],{"class":53,"line":16987},[51,87087,52516],{"class":65},[51,87089,54259],{"class":51672},[51,87091,15343],{"class":57},[51,87093,70],{"class":65},[51,87095,87096],{"class":61},"\"delete\"",[51,87098,87099],{"class":65},">删除\u003C\u002F",[51,87101,54259],{"class":51672},[51,87103,51679],{"class":65},[51,87105,87106,87108,87110,87112,87114,87117,87120,87122],{"class":53,"line":16993},[51,87107,52516],{"class":65},[51,87109,54259],{"class":51672},[51,87111,15343],{"class":57},[51,87113,70],{"class":65},[51,87115,87116],{"class":61},"\"login\"",[51,87118,87119],{"class":65},">登录\u003C\u002F",[51,87121,54259],{"class":51672},[51,87123,51679],{"class":65},[51,87125,87126,87128,87130],{"class":53,"line":17016},[51,87127,52516],{"class":65},[51,87129,52185],{"class":51672},[51,87131,51679],{"class":65},[51,87133,87134],{"class":53,"line":17022},[51,87135,87136],{"class":601},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[51,87138,87139,87141,87144,87146,87148,87150,87152,87154,87157,87159,87161],{"class":53,"line":17045},[51,87140,70456],{"class":69},[51,87142,87143],{"class":57}," Modal",[51,87145,546],{"class":65},[51,87147,51779],{"class":248},[51,87149,13948],{"class":69},[51,87151,70302],{"class":61},[51,87153,12819],{"class":65},[51,87155,87156],{"class":248},"message",[51,87158,13948],{"class":69},[51,87160,70302],{"class":61},[51,87162,12826],{"class":65},[51,87164,87165],{"class":53,"line":17059},[51,87166,87167],{"class":601},"      \u002F\u002F 创建Model 模态框盒子\n",[51,87169,87170],{"class":53,"line":17079},[51,87171,87172],{"class":601},"      \u002F\u002F 1.1 创建div标签\n",[51,87174,87175,87177,87180,87182,87184,87186,87188,87190],{"class":53,"line":17085},[51,87176,70423],{"class":278},[51,87178,87179],{"class":65},".modalBox ",[51,87181,70],{"class":69},[51,87183,54768],{"class":65},[51,87185,70523],{"class":57},[51,87187,546],{"class":65},[51,87189,82303],{"class":61},[51,87191,282],{"class":65},[51,87193,87194],{"class":53,"line":17096},[51,87195,87196],{"class":601},"      \u002F\u002F 1.2 给div 添加类名为model\n",[51,87198,87199,87201,87204,87206],{"class":53,"line":17119},[51,87200,70423],{"class":278},[51,87202,87203],{"class":65},".modalBox.className ",[51,87205,70],{"class":69},[51,87207,87208],{"class":61}," 'modal'\n",[51,87210,87211],{"class":53,"line":17141},[51,87212,87213],{"class":601},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[51,87215,87216,87218,87221,87223],{"class":53,"line":17146},[51,87217,70423],{"class":278},[51,87219,87220],{"class":65},".modalBox.innerHTML ",[51,87222,70],{"class":69},[51,87224,70540],{"class":61},[51,87226,87227,87230,87232],{"class":53,"line":17152},[51,87228,87229],{"class":61},"        \u003Cdiv class=\"header\">${",[51,87231,51779],{"class":65},[51,87233,87234],{"class":61},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[51,87236,87237,87240,87242],{"class":53,"line":17166},[51,87238,87239],{"class":61},"        \u003Cdiv class=\"body\">${",[51,87241,87156],{"class":65},[51,87243,87244],{"class":61},"}\u003C\u002Fdiv>\n",[51,87246,87247],{"class":53,"line":17179},[51,87248,87249],{"class":61},"      `\n",[51,87251,87252],{"class":53,"line":17184},[51,87253,87254],{"class":601},"      \u002F\u002F console.log(this.modalBox)\n",[51,87256,87257],{"class":53,"line":17198},[51,87258,2577],{"class":65},[51,87260,87261],{"class":53,"line":17203},[51,87262,87263],{"class":601},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[51,87265,87266],{"class":53,"line":17209},[51,87267,87268],{"class":601},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[51,87270,87271],{"class":53,"line":17214},[51,87272,87273],{"class":601},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[51,87275,87276,87279,87281,87283,87285,87288,87290,87292],{"class":53,"line":17228},[51,87277,87278],{"class":278},"    Modal",[51,87280,1100],{"class":65},[51,87282,85951],{"class":278},[51,87284,1100],{"class":65},[51,87286,87287],{"class":57},"open",[51,87289,13948],{"class":69},[51,87291,59290],{"class":69},[51,87293,54824],{"class":65},[51,87295,87296],{"class":53,"line":17233},[51,87297,87298],{"class":601},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[51,87300,87301,87303,87306,87308,87310,87312,87314,87317],{"class":53,"line":17238},[51,87302,58600],{"class":69},[51,87304,87305],{"class":278}," box",[51,87307,13948],{"class":69},[51,87309,54768],{"class":65},[51,87311,54771],{"class":57},[51,87313,546],{"class":65},[51,87315,87316],{"class":61},"'.modal'",[51,87318,282],{"class":65},[51,87320,87321],{"class":53,"line":17252},[51,87322,87323],{"class":601},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[51,87325,87326,87329,87331,87334,87336],{"class":53,"line":17264},[51,87327,87328],{"class":65},"      box ",[51,87330,2113],{"class":69},[51,87332,87333],{"class":65}," box.",[51,87335,57378],{"class":57},[51,87337,2366],{"class":65},[51,87339,87340],{"class":53,"line":17269},[51,87341,87342],{"class":601},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[51,87344,87345],{"class":53,"line":17282},[51,87346,87347],{"class":601},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[51,87349,87350],{"class":53,"line":17287},[51,87351,87352],{"class":601},"      \u002F\u002F append可以增加对象\n",[51,87354,87355,87358,87361,87363,87366],{"class":53,"line":17292},[51,87356,87357],{"class":65},"      document.body.",[51,87359,87360],{"class":57},"append",[51,87362,546],{"class":65},[51,87364,87365],{"class":278},"this",[51,87367,87368],{"class":65},".modalBox)\n",[51,87370,87371],{"class":53,"line":17297},[51,87372,206],{"emptyLinePlaceholder":205},[51,87374,87375],{"class":53,"line":17310},[51,87376,87377],{"class":601},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[51,87379,87380,87382,87385,87387,87389,87392,87394,87396,87398,87400,87403,87405],{"class":53,"line":17315},[51,87381,70423],{"class":278},[51,87383,87384],{"class":65},".modalBox.",[51,87386,54771],{"class":57},[51,87388,546],{"class":65},[51,87390,87391],{"class":61},"'i'",[51,87393,31204],{"class":65},[51,87395,58185],{"class":57},[51,87397,546],{"class":65},[51,87399,58190],{"class":61},[51,87401,87402],{"class":65},", () ",[51,87404,85094],{"class":69},[51,87406,15956],{"class":65},[51,87408,87409],{"class":53,"line":33008},[51,87410,87411],{"class":601},"        \u002F\u002F 这个地方需要用到箭头函数\n",[51,87413,87414],{"class":53,"line":33014},[51,87415,87416],{"class":601},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[51,87418,87419],{"class":53,"line":33020},[51,87420,87421],{"class":601},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[51,87423,87424,87426,87428,87431],{"class":53,"line":33026},[51,87425,65098],{"class":278},[51,87427,1100],{"class":65},[51,87429,87430],{"class":57},"close",[51,87432,2366],{"class":65},[51,87434,87435],{"class":53,"line":33032},[51,87436,65187],{"class":65},[51,87438,87439],{"class":53,"line":33043},[51,87440,2577],{"class":65},[51,87442,87443],{"class":53,"line":33049},[51,87444,206],{"emptyLinePlaceholder":205},[51,87446,87447],{"class":53,"line":33069},[51,87448,87449],{"class":601},"    \u002F\u002F 测试一下 点击 删除按钮\n",[51,87451,87452,87454,87456,87458,87461,87463,87465,87467,87469,87471,87473],{"class":53,"line":33075},[51,87453,52779],{"class":65},[51,87455,54771],{"class":57},[51,87457,546],{"class":65},[51,87459,87460],{"class":61},"'#delete'",[51,87462,31204],{"class":65},[51,87464,58185],{"class":57},[51,87466,546],{"class":65},[51,87468,58190],{"class":61},[51,87470,87402],{"class":65},[51,87472,85094],{"class":69},[51,87474,15956],{"class":65},[51,87476,87477],{"class":53,"line":33086},[51,87478,87479],{"class":601},"      \u002F\u002F 先调用Model构造函数\n",[51,87481,87482,87484,87487,87489,87491,87493,87495,87498,87500,87503],{"class":53,"line":33092},[51,87483,58600],{"class":69},[51,87485,87486],{"class":278}," del",[51,87488,13948],{"class":69},[51,87490,11962],{"class":69},[51,87492,87143],{"class":57},[51,87494,546],{"class":65},[51,87496,87497],{"class":61},"'温馨的提示'",[51,87499,12819],{"class":65},[51,87501,87502],{"class":61},"'您没有删除权限操作'",[51,87504,282],{"class":65},[51,87506,87507],{"class":53,"line":33098},[51,87508,87509],{"class":601},"      \u002F\u002F 实例对象调用open方法\n",[51,87511,87512,87515,87517],{"class":53,"line":33104},[51,87513,87514],{"class":65},"      del.",[51,87516,87287],{"class":57},[51,87518,2366],{"class":65},[51,87520,87521],{"class":53,"line":33110},[51,87522,33836],{"class":65},[51,87524,87525],{"class":53,"line":33116},[51,87526,87527],{"class":601},"    \u002F\u002F 测试一下 点击 登录按钮\n",[51,87529,87530,87532,87534,87536,87539,87541,87543,87545,87547,87549,87551],{"class":53,"line":33122},[51,87531,52779],{"class":65},[51,87533,54771],{"class":57},[51,87535,546],{"class":65},[51,87537,87538],{"class":61},"'#login'",[51,87540,31204],{"class":65},[51,87542,58185],{"class":57},[51,87544,546],{"class":65},[51,87546,58190],{"class":61},[51,87548,87402],{"class":65},[51,87550,85094],{"class":69},[51,87552,15956],{"class":65},[51,87554,87555],{"class":53,"line":33128},[51,87556,87479],{"class":601},[51,87558,87559,87561,87564,87566,87568,87570,87572,87575,87577,87580],{"class":53,"line":33148},[51,87560,58600],{"class":69},[51,87562,87563],{"class":278}," log",[51,87565,13948],{"class":69},[51,87567,11962],{"class":69},[51,87569,87143],{"class":57},[51,87571,546],{"class":65},[51,87573,87574],{"class":61},"'友情提示'",[51,87576,12819],{"class":65},[51,87578,87579],{"class":61},"'您还没有登录呢'",[51,87581,282],{"class":65},[51,87583,87584],{"class":53,"line":33154},[51,87585,87509],{"class":601},[51,87587,87588,87591,87593],{"class":53,"line":33170},[51,87589,87590],{"class":65},"      log.",[51,87592,87287],{"class":57},[51,87594,2366],{"class":65},[51,87596,87597],{"class":53,"line":33176},[51,87598,33836],{"class":65},[51,87600,87601],{"class":53,"line":33190},[51,87602,87603],{"class":601},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[51,87605,87606,87608,87610,87612,87614,87616,87618,87620],{"class":53,"line":33196},[51,87607,87278],{"class":278},[51,87609,1100],{"class":65},[51,87611,85951],{"class":278},[51,87613,1100],{"class":65},[51,87615,87430],{"class":57},[51,87617,13948],{"class":69},[51,87619,59290],{"class":69},[51,87621,54824],{"class":65},[51,87623,87624,87626,87628,87630],{"class":53,"line":33211},[51,87625,70423],{"class":278},[51,87627,87384],{"class":65},[51,87629,57378],{"class":57},[51,87631,2366],{"class":65},[51,87633,87634],{"class":53,"line":33217},[51,87635,2577],{"class":65},[51,87637,87638,87640,87642],{"class":53,"line":33226},[51,87639,52789],{"class":65},[51,87641,52185],{"class":51672},[51,87643,51679],{"class":65},[51,87645,87646,87648,87650],{"class":53,"line":33232},[51,87647,52157],{"class":65},[51,87649,52172],{"class":51672},[51,87651,51679],{"class":65},[51,87653,87654],{"class":53,"line":33241},[51,87655,206],{"emptyLinePlaceholder":205},[51,87657,87658,87660,87662],{"class":53,"line":33247},[51,87659,52157],{"class":65},[51,87661,51007],{"class":51672},[51,87663,51679],{"class":65},[10,87665,87666],{},[460,87667],{"alt":46,"src":87668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[486,87670,87672],{"id":87671},"_414-深浅拷贝","4.14 深浅拷贝",[513,87674,87676],{"id":87675},"_4141-浅拷贝","4.14.1 浅拷贝",[10,87678,87679],{},[460,87680],{"alt":46,"src":87681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[10,87683,87684],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[10,87686,87687],{},[460,87688],{"alt":46,"src":87689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[10,87691,87692],{},[460,87693],{"alt":46,"src":87694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[10,87696,87697],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[10,87699,87700],{},[460,87701],{"alt":46,"src":87702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[10,87704,11716],{},[10,87706,87707],{},[460,87708],{"alt":46,"src":87709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[513,87711,87713],{"id":87712},"_4142-深拷贝","4.14.2 深拷贝",[10,87715,87716],{},"深拷贝：拷贝的是对象，不是地址",[10,87718,87719],{},"常用的三种方法：",[19,87721,87722,87725,87728],{},[22,87723,87724],{},"通过递归实现深拷贝",[22,87726,87727],{},"lodash\u002FcloneDeep",[22,87729,87730],{},"通过JSON.stringify()实现",[22381,87732,87734],{"id":87733},"_41421-递归函数","4.14.2.1 递归函数",[10,87736,87737],{},[460,87738],{"alt":46,"src":87739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[19,87741,87742],{},[22,87743,87744],{},"死递归占溢出：",[41,87746,87748],{"className":53439,"code":87747,"language":53441,"meta":46,"style":46},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[48,87749,87750,87758,87766,87770,87775,87779,87784,87792],{"__ignoreMap":46},[51,87751,87752,87754,87756],{"class":53,"line":54},[51,87753,1452],{"class":65},[51,87755,52172],{"class":51672},[51,87757,51679],{"class":65},[51,87759,87760,87762,87764],{"class":53,"line":185},[51,87761,52516],{"class":65},[51,87763,52185],{"class":51672},[51,87765,51679],{"class":65},[51,87767,87768],{"class":53,"line":202},[51,87769,77515],{"class":65},[51,87771,87772],{"class":53,"line":209},[51,87773,87774],{"class":65},"      fn()\n",[51,87776,87777],{"class":53,"line":223},[51,87778,2577],{"class":65},[51,87780,87781],{"class":53,"line":237},[51,87782,87783],{"class":65},"    fn()\n",[51,87785,87786,87788,87790],{"class":53,"line":242},[51,87787,52789],{"class":65},[51,87789,52185],{"class":51672},[51,87791,51679],{"class":65},[51,87793,87794,87796,87798],{"class":53,"line":257},[51,87795,52157],{"class":65},[51,87797,52172],{"class":51672},[51,87799,51679],{"class":65},[19,87801,87802],{"start":185},[22,87803,87804],{},"递归函数要加判断条件：",[10,87806,87807],{},[460,87808],{"alt":46,"src":87809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[19,87811,87812],{"start":202},[22,87813,87814],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[41,87816,87818],{"className":51005,"code":87817,"language":51007,"meta":46,"style":46},"\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",[48,87819,87820,87830,87844,87848,87856,87870,87890,87902,87910,87914,87922,87934,87942,87950,87975,87987,87991,87998,88006,88014,88018],{"__ignoreMap":46},[51,87821,87822,87824,87826,87828],{"class":53,"line":54},[51,87823,51669],{"class":65},[51,87825,51673],{"class":51672},[51,87827,51676],{"class":57},[51,87829,51679],{"class":65},[51,87831,87832,87834,87836,87838,87840,87842],{"class":53,"line":185},[51,87833,1452],{"class":65},[51,87835,51007],{"class":51672},[51,87837,51688],{"class":57},[51,87839,70],{"class":65},[51,87841,51693],{"class":61},[51,87843,51679],{"class":65},[51,87845,87846],{"class":53,"line":202},[51,87847,206],{"emptyLinePlaceholder":205},[51,87849,87850,87852,87854],{"class":53,"line":209},[51,87851,1452],{"class":65},[51,87853,51706],{"class":51672},[51,87855,51679],{"class":65},[51,87857,87858,87860,87862,87864,87866,87868],{"class":53,"line":223},[51,87859,52516],{"class":65},[51,87861,51716],{"class":51672},[51,87863,51719],{"class":57},[51,87865,70],{"class":65},[51,87867,51724],{"class":61},[51,87869,51679],{"class":65},[51,87871,87872,87874,87876,87878,87880,87882,87884,87886,87888],{"class":53,"line":237},[51,87873,52516],{"class":65},[51,87875,51716],{"class":51672},[51,87877,15304],{"class":57},[51,87879,70],{"class":65},[51,87881,51763],{"class":61},[51,87883,51743],{"class":57},[51,87885,70],{"class":65},[51,87887,51770],{"class":61},[51,87889,51679],{"class":65},[51,87891,87892,87894,87896,87898,87900],{"class":53,"line":242},[51,87893,52516],{"class":65},[51,87895,51779],{"class":51672},[51,87897,51782],{"class":65},[51,87899,51779],{"class":51672},[51,87901,51679],{"class":65},[51,87903,87904,87906,87908],{"class":53,"line":257},[51,87905,52157],{"class":65},[51,87907,51706],{"class":51672},[51,87909,51679],{"class":65},[51,87911,87912],{"class":53,"line":262},[51,87913,206],{"emptyLinePlaceholder":205},[51,87915,87916,87918,87920],{"class":53,"line":285},[51,87917,1452],{"class":65},[51,87919,52172],{"class":51672},[51,87921,51679],{"class":65},[51,87923,87924,87926,87928,87930,87932],{"class":53,"line":296},[51,87925,52516],{"class":65},[51,87927,51983],{"class":51672},[51,87929,55686],{"class":65},[51,87931,51983],{"class":51672},[51,87933,51679],{"class":65},[51,87935,87936,87938,87940],{"class":53,"line":307},[51,87937,52516],{"class":65},[51,87939,52185],{"class":51672},[51,87941,51679],{"class":65},[51,87943,87944,87946,87948],{"class":53,"line":324},[51,87945,70456],{"class":69},[51,87947,74145],{"class":57},[51,87949,11237],{"class":65},[51,87951,87952,87954,87956,87958,87960,87962,87964,87966,87968,87970,87973],{"class":53,"line":329},[51,87953,56143],{"class":65},[51,87955,54771],{"class":57},[51,87957,546],{"class":65},[51,87959,82303],{"class":61},[51,87961,74621],{"class":65},[51,87963,70],{"class":69},[51,87965,11962],{"class":69},[51,87967,74161],{"class":57},[51,87969,17644],{"class":65},[51,87971,87972],{"class":57},"toLocaleString",[51,87974,2366],{"class":65},[51,87976,87977,87980,87983,87985],{"class":53,"line":334},[51,87978,87979],{"class":57},"      setTimeout",[51,87981,87982],{"class":65},"(getTime, ",[51,87984,6794],{"class":278},[51,87986,282],{"class":65},[51,87988,87989],{"class":53,"line":340},[51,87990,2577],{"class":65},[51,87992,87993,87996],{"class":53,"line":345},[51,87994,87995],{"class":57},"    getTime",[51,87997,2366],{"class":65},[51,87999,88000,88002,88004],{"class":53,"line":357},[51,88001,52789],{"class":65},[51,88003,52185],{"class":51672},[51,88005,51679],{"class":65},[51,88007,88008,88010,88012],{"class":53,"line":366},[51,88009,52157],{"class":65},[51,88011,52172],{"class":51672},[51,88013,51679],{"class":65},[51,88015,88016],{"class":53,"line":383},[51,88017,206],{"emptyLinePlaceholder":205},[51,88019,88020,88022,88024],{"class":53,"line":392},[51,88021,52157],{"class":65},[51,88023,51007],{"class":51672},[51,88025,51679],{"class":65},[10,88027,88028],{},[460,88029],{"alt":46,"src":88030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[19,88032,88033],{"start":209},[22,88034,87724],{},[10,88036,88037],{},[460,88038],{"alt":46,"src":88039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[10,88041,88042],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[10,88044,39563],{},[10,88046,88047],{},"这个是简易版的递归函数深拷贝",[10,88049,88050],{},"一定要注意先数组再对象，因为万物皆可对象",[41,88052,88054],{"className":51005,"code":88053,"language":51007,"meta":46,"style":46},"\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",[48,88055,88056,88066,88080,88084,88092,88106,88126,88138,88146,88150,88158,88166,88176,88185,88193,88209,88213,88221,88225,88229,88241,88246,88265,88281,88286,88291,88296,88311,88316,88321,88330,88338,88355,88363,88369,88377,88382,88387,88396,88400,88404,88408,88419,88428,88438,88452,88462,88470,88478,88486,88490],{"__ignoreMap":46},[51,88057,88058,88060,88062,88064],{"class":53,"line":54},[51,88059,51669],{"class":65},[51,88061,51673],{"class":51672},[51,88063,51676],{"class":57},[51,88065,51679],{"class":65},[51,88067,88068,88070,88072,88074,88076,88078],{"class":53,"line":185},[51,88069,1452],{"class":65},[51,88071,51007],{"class":51672},[51,88073,51688],{"class":57},[51,88075,70],{"class":65},[51,88077,51693],{"class":61},[51,88079,51679],{"class":65},[51,88081,88082],{"class":53,"line":202},[51,88083,206],{"emptyLinePlaceholder":205},[51,88085,88086,88088,88090],{"class":53,"line":209},[51,88087,1452],{"class":65},[51,88089,51706],{"class":51672},[51,88091,51679],{"class":65},[51,88093,88094,88096,88098,88100,88102,88104],{"class":53,"line":223},[51,88095,52516],{"class":65},[51,88097,51716],{"class":51672},[51,88099,51719],{"class":57},[51,88101,70],{"class":65},[51,88103,51724],{"class":61},[51,88105,51679],{"class":65},[51,88107,88108,88110,88112,88114,88116,88118,88120,88122,88124],{"class":53,"line":237},[51,88109,52516],{"class":65},[51,88111,51716],{"class":51672},[51,88113,15304],{"class":57},[51,88115,70],{"class":65},[51,88117,51763],{"class":61},[51,88119,51743],{"class":57},[51,88121,70],{"class":65},[51,88123,51770],{"class":61},[51,88125,51679],{"class":65},[51,88127,88128,88130,88132,88134,88136],{"class":53,"line":242},[51,88129,52516],{"class":65},[51,88131,51779],{"class":51672},[51,88133,51782],{"class":65},[51,88135,51779],{"class":51672},[51,88137,51679],{"class":65},[51,88139,88140,88142,88144],{"class":53,"line":257},[51,88141,52157],{"class":65},[51,88143,51706],{"class":51672},[51,88145,51679],{"class":65},[51,88147,88148],{"class":53,"line":262},[51,88149,206],{"emptyLinePlaceholder":205},[51,88151,88152,88154,88156],{"class":53,"line":285},[51,88153,1452],{"class":65},[51,88155,52172],{"class":51672},[51,88157,51679],{"class":65},[51,88159,88160,88162,88164],{"class":53,"line":296},[51,88161,52516],{"class":65},[51,88163,52185],{"class":51672},[51,88165,51679],{"class":65},[51,88167,88168,88170,88172,88174],{"class":53,"line":307},[51,88169,11605],{"class":69},[51,88171,70343],{"class":278},[51,88173,13948],{"class":69},[51,88175,15956],{"class":65},[51,88177,88178,88180,88183],{"class":53,"line":324},[51,88179,71988],{"class":65},[51,88181,88182],{"class":61},"'pink'",[51,88184,31843],{"class":65},[51,88186,88187,88189,88191],{"class":53,"line":329},[51,88188,71998],{"class":65},[51,88190,1192],{"class":278},[51,88192,31843],{"class":65},[51,88194,88195,88198,88201,88203,88206],{"class":53,"line":334},[51,88196,88197],{"class":65},"      hobby: [",[51,88199,88200],{"class":61},"'乒乓球'",[51,88202,12819],{"class":65},[51,88204,88205],{"class":61},"'足球'",[51,88207,88208],{"class":65},"],\n",[51,88210,88211],{"class":53,"line":340},[51,88212,78244],{"class":65},[51,88214,88215,88218],{"class":53,"line":345},[51,88216,88217],{"class":65},"        baby: ",[51,88219,88220],{"class":61},"'小pink'\n",[51,88222,88223],{"class":53,"line":357},[51,88224,52770],{"class":65},[51,88226,88227],{"class":53,"line":366},[51,88228,2577],{"class":65},[51,88230,88231,88233,88236,88238],{"class":53,"line":383},[51,88232,11605],{"class":69},[51,88234,88235],{"class":278}," o",[51,88237,13948],{"class":69},[51,88239,88240],{"class":65}," {}\n",[51,88242,88243],{"class":53,"line":392},[51,88244,88245],{"class":601},"    \u002F\u002F 拷贝函数\n",[51,88247,88248,88250,88253,88255,88258,88260,88263],{"class":53,"line":403},[51,88249,70456],{"class":69},[51,88251,88252],{"class":57}," deepCopy",[51,88254,546],{"class":65},[51,88256,88257],{"class":248},"newObj",[51,88259,12819],{"class":65},[51,88261,88262],{"class":248},"oldObj",[51,88264,12826],{"class":65},[51,88266,88267,88269,88271,88273,88276,88278],{"class":53,"line":409},[51,88268,52656],{"class":69},[51,88270,2060],{"class":65},[51,88272,52219],{"class":69},[51,88274,88275],{"class":65}," k ",[51,88277,26425],{"class":69},[51,88279,88280],{"class":65}," oldObj) {\n",[51,88282,88283],{"class":53,"line":414},[51,88284,88285],{"class":601},"        \u002F\u002F 处理数组的问题\n",[51,88287,88288],{"class":53,"line":433},[51,88289,88290],{"class":601},"        \u002F\u002F 判断是否属于数组\n",[51,88292,88293],{"class":53,"line":439},[51,88294,88295],{"class":601},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[51,88297,88298,88300,88303,88306,88309],{"class":53,"line":444},[51,88299,369],{"class":69},[51,88301,88302],{"class":65}," (oldObj[k] ",[51,88304,88305],{"class":69},"instanceof",[51,88307,88308],{"class":57}," Array",[51,88310,12826],{"class":65},[51,88312,88313],{"class":53,"line":453},[51,88314,88315],{"class":601},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[51,88317,88318],{"class":53,"line":2174},[51,88319,88320],{"class":601},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[51,88322,88323,88326,88328],{"class":53,"line":2965},[51,88324,88325],{"class":65},"          newObj[k] ",[51,88327,70],{"class":69},[51,88329,52210],{"class":65},[51,88331,88332,88335],{"class":53,"line":2979},[51,88333,88334],{"class":57},"          deepCopy",[51,88336,88337],{"class":65},"(newObj[k], oldObj[k])\n",[51,88339,88340,88342,88344,88346,88348,88350,88353],{"class":53,"line":2987},[51,88341,80452],{"class":65},[51,88343,2099],{"class":69},[51,88345,2102],{"class":69},[51,88347,88302],{"class":65},[51,88349,88305],{"class":69},[51,88351,88352],{"class":57}," Object",[51,88354,12826],{"class":65},[51,88356,88357,88359,88361],{"class":53,"line":2992},[51,88358,88325],{"class":65},[51,88360,70],{"class":69},[51,88362,88240],{"class":65},[51,88364,88365,88367],{"class":53,"line":2998},[51,88366,88334],{"class":57},[51,88368,88337],{"class":65},[51,88370,88371,88373,88375],{"class":53,"line":3004},[51,88372,80452],{"class":65},[51,88374,2099],{"class":69},[51,88376,15956],{"class":65},[51,88378,88379],{"class":53,"line":3009},[51,88380,88381],{"class":601},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[51,88383,88384],{"class":53,"line":8332},[51,88385,88386],{"class":601},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[51,88388,88389,88391,88393],{"class":53,"line":8356},[51,88390,88325],{"class":65},[51,88392,70],{"class":69},[51,88394,88395],{"class":65}," oldObj[k]\n",[51,88397,88398],{"class":53,"line":8361},[51,88399,2917],{"class":65},[51,88401,88402],{"class":53,"line":8367},[51,88403,52770],{"class":65},[51,88405,88406],{"class":53,"line":8394},[51,88407,2577],{"class":65},[51,88409,88410,88413,88416],{"class":53,"line":8399},[51,88411,88412],{"class":57},"    deepCopy",[51,88414,88415],{"class":65},"(o, obj) ",[51,88417,88418],{"class":601},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[51,88420,88421,88423,88425],{"class":53,"line":8405},[51,88422,74125],{"class":65},[51,88424,58619],{"class":57},[51,88426,88427],{"class":65},"(o)\n",[51,88429,88430,88433,88435],{"class":53,"line":8417},[51,88431,88432],{"class":65},"    o.age ",[51,88434,70],{"class":69},[51,88436,88437],{"class":278}," 20\n",[51,88439,88440,88443,88445,88447,88449],{"class":53,"line":8429},[51,88441,88442],{"class":65},"    o.hobby[",[51,88444,733],{"class":278},[51,88446,194],{"class":65},[51,88448,70],{"class":69},[51,88450,88451],{"class":61}," '篮球'\n",[51,88453,88454,88457,88459],{"class":53,"line":8441},[51,88455,88456],{"class":65},"    o.family ",[51,88458,70],{"class":69},[51,88460,88461],{"class":61}," '老pink'\n",[51,88463,88464,88466,88468],{"class":53,"line":10100},[51,88465,74125],{"class":65},[51,88467,58619],{"class":57},[51,88469,70408],{"class":65},[51,88471,88472,88474,88476],{"class":53,"line":10125},[51,88473,52789],{"class":65},[51,88475,52185],{"class":51672},[51,88477,51679],{"class":65},[51,88479,88480,88482,88484],{"class":53,"line":10148},[51,88481,52157],{"class":65},[51,88483,52172],{"class":51672},[51,88485,51679],{"class":65},[51,88487,88488],{"class":53,"line":10172},[51,88489,206],{"emptyLinePlaceholder":205},[51,88491,88492,88494,88496],{"class":53,"line":10177},[51,88493,52157],{"class":65},[51,88495,51007],{"class":51672},[51,88497,51679],{"class":65},[10,88499,88500],{},[460,88501],{"alt":46,"src":88502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22381,88504,88506,88507],{"id":88505},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[691,88508,88509],{},"js库lodash里面cloneDeep内部实现了深拷贝",[10,88511,88512],{},[780,88513,88514],{"href":88514,"rel":88515},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24246],[10,88517,88518],{},"lodash里边的方法都要加上一个下划线_",[10,88520,88521],{},"_.cloneDeep()",[41,88523,88525],{"className":51005,"code":88524,"language":51007,"meta":46,"style":46},"\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",[48,88526,88527,88537,88551,88555,88563,88577,88597,88609,88617,88621,88629,88634,88653,88661,88671,88679,88687,88699,88703,88709,88713,88717,88733,88741,88750,88758,88766,88774,88778],{"__ignoreMap":46},[51,88528,88529,88531,88533,88535],{"class":53,"line":54},[51,88530,51669],{"class":65},[51,88532,51673],{"class":51672},[51,88534,51676],{"class":57},[51,88536,51679],{"class":65},[51,88538,88539,88541,88543,88545,88547,88549],{"class":53,"line":185},[51,88540,1452],{"class":65},[51,88542,51007],{"class":51672},[51,88544,51688],{"class":57},[51,88546,70],{"class":65},[51,88548,51693],{"class":61},[51,88550,51679],{"class":65},[51,88552,88553],{"class":53,"line":202},[51,88554,206],{"emptyLinePlaceholder":205},[51,88556,88557,88559,88561],{"class":53,"line":209},[51,88558,1452],{"class":65},[51,88560,51706],{"class":51672},[51,88562,51679],{"class":65},[51,88564,88565,88567,88569,88571,88573,88575],{"class":53,"line":223},[51,88566,52516],{"class":65},[51,88568,51716],{"class":51672},[51,88570,51719],{"class":57},[51,88572,70],{"class":65},[51,88574,51724],{"class":61},[51,88576,51679],{"class":65},[51,88578,88579,88581,88583,88585,88587,88589,88591,88593,88595],{"class":53,"line":237},[51,88580,52516],{"class":65},[51,88582,51716],{"class":51672},[51,88584,15304],{"class":57},[51,88586,70],{"class":65},[51,88588,51763],{"class":61},[51,88590,51743],{"class":57},[51,88592,70],{"class":65},[51,88594,51770],{"class":61},[51,88596,51679],{"class":65},[51,88598,88599,88601,88603,88605,88607],{"class":53,"line":242},[51,88600,52516],{"class":65},[51,88602,51779],{"class":51672},[51,88604,51782],{"class":65},[51,88606,51779],{"class":51672},[51,88608,51679],{"class":65},[51,88610,88611,88613,88615],{"class":53,"line":257},[51,88612,52157],{"class":65},[51,88614,51706],{"class":51672},[51,88616,51679],{"class":65},[51,88618,88619],{"class":53,"line":262},[51,88620,206],{"emptyLinePlaceholder":205},[51,88622,88623,88625,88627],{"class":53,"line":285},[51,88624,1452],{"class":65},[51,88626,52172],{"class":51672},[51,88628,51679],{"class":65},[51,88630,88631],{"class":53,"line":296},[51,88632,88633],{"class":601},"  \u003C!-- 先引用这个库 -->\n",[51,88635,88636,88638,88640,88642,88644,88647,88649,88651],{"class":53,"line":307},[51,88637,52516],{"class":65},[51,88639,52185],{"class":51672},[51,88641,55611],{"class":57},[51,88643,70],{"class":65},[51,88645,88646],{"class":61},"\"lodash.min.js\"",[51,88648,55686],{"class":65},[51,88650,52185],{"class":51672},[51,88652,51679],{"class":65},[51,88654,88655,88657,88659],{"class":53,"line":324},[51,88656,52516],{"class":65},[51,88658,52185],{"class":51672},[51,88660,51679],{"class":65},[51,88662,88663,88665,88667,88669],{"class":53,"line":329},[51,88664,11605],{"class":69},[51,88666,70343],{"class":278},[51,88668,13948],{"class":69},[51,88670,15956],{"class":65},[51,88672,88673,88675,88677],{"class":53,"line":334},[51,88674,71988],{"class":65},[51,88676,88182],{"class":61},[51,88678,31843],{"class":65},[51,88680,88681,88683,88685],{"class":53,"line":340},[51,88682,71998],{"class":65},[51,88684,1192],{"class":278},[51,88686,31843],{"class":65},[51,88688,88689,88691,88693,88695,88697],{"class":53,"line":345},[51,88690,88197],{"class":65},[51,88692,88200],{"class":61},[51,88694,12819],{"class":65},[51,88696,88205],{"class":61},[51,88698,88208],{"class":65},[51,88700,88701],{"class":53,"line":357},[51,88702,78244],{"class":65},[51,88704,88705,88707],{"class":53,"line":366},[51,88706,88217],{"class":65},[51,88708,88220],{"class":61},[51,88710,88711],{"class":53,"line":383},[51,88712,52770],{"class":65},[51,88714,88715],{"class":53,"line":392},[51,88716,2577],{"class":65},[51,88718,88719,88721,88723,88725,88728,88731],{"class":53,"line":403},[51,88720,11605],{"class":69},[51,88722,88235],{"class":278},[51,88724,13948],{"class":69},[51,88726,88727],{"class":65}," _.",[51,88729,88730],{"class":57},"cloneDeep",[51,88732,70408],{"class":65},[51,88734,88735,88737,88739],{"class":53,"line":409},[51,88736,74125],{"class":65},[51,88738,58619],{"class":57},[51,88740,88427],{"class":65},[51,88742,88743,88746,88748],{"class":53,"line":414},[51,88744,88745],{"class":65},"    o.family.baby ",[51,88747,70],{"class":69},[51,88749,88461],{"class":61},[51,88751,88752,88754,88756],{"class":53,"line":433},[51,88753,74125],{"class":65},[51,88755,58619],{"class":57},[51,88757,70408],{"class":65},[51,88759,88760,88762,88764],{"class":53,"line":439},[51,88761,52789],{"class":65},[51,88763,52185],{"class":51672},[51,88765,51679],{"class":65},[51,88767,88768,88770,88772],{"class":53,"line":444},[51,88769,52157],{"class":65},[51,88771,52172],{"class":51672},[51,88773,51679],{"class":65},[51,88775,88776],{"class":53,"line":453},[51,88777,206],{"emptyLinePlaceholder":205},[51,88779,88780,88782,88784],{"class":53,"line":2174},[51,88781,52157],{"class":65},[51,88783,51007],{"class":51672},[51,88785,51679],{"class":65},[10,88787,88788],{},[460,88789],{"alt":46,"src":88790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22381,88792,88794],{"id":88793},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[41,88796,88798],{"className":51005,"code":88797,"language":51007,"meta":46,"style":46},"\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",[48,88799,88800,88810,88824,88828,88836,88850,88870,88882,88890,88894,88902,88910,88920,88928,88936,88948,88952,88958,88962,88966,88971,88976,88981,89007,89015,89024,89032,89040,89048,89052],{"__ignoreMap":46},[51,88801,88802,88804,88806,88808],{"class":53,"line":54},[51,88803,51669],{"class":65},[51,88805,51673],{"class":51672},[51,88807,51676],{"class":57},[51,88809,51679],{"class":65},[51,88811,88812,88814,88816,88818,88820,88822],{"class":53,"line":185},[51,88813,1452],{"class":65},[51,88815,51007],{"class":51672},[51,88817,51688],{"class":57},[51,88819,70],{"class":65},[51,88821,51693],{"class":61},[51,88823,51679],{"class":65},[51,88825,88826],{"class":53,"line":202},[51,88827,206],{"emptyLinePlaceholder":205},[51,88829,88830,88832,88834],{"class":53,"line":209},[51,88831,1452],{"class":65},[51,88833,51706],{"class":51672},[51,88835,51679],{"class":65},[51,88837,88838,88840,88842,88844,88846,88848],{"class":53,"line":223},[51,88839,52516],{"class":65},[51,88841,51716],{"class":51672},[51,88843,51719],{"class":57},[51,88845,70],{"class":65},[51,88847,51724],{"class":61},[51,88849,51679],{"class":65},[51,88851,88852,88854,88856,88858,88860,88862,88864,88866,88868],{"class":53,"line":237},[51,88853,52516],{"class":65},[51,88855,51716],{"class":51672},[51,88857,15304],{"class":57},[51,88859,70],{"class":65},[51,88861,51763],{"class":61},[51,88863,51743],{"class":57},[51,88865,70],{"class":65},[51,88867,51770],{"class":61},[51,88869,51679],{"class":65},[51,88871,88872,88874,88876,88878,88880],{"class":53,"line":242},[51,88873,52516],{"class":65},[51,88875,51779],{"class":51672},[51,88877,51782],{"class":65},[51,88879,51779],{"class":51672},[51,88881,51679],{"class":65},[51,88883,88884,88886,88888],{"class":53,"line":257},[51,88885,52157],{"class":65},[51,88887,51706],{"class":51672},[51,88889,51679],{"class":65},[51,88891,88892],{"class":53,"line":262},[51,88893,206],{"emptyLinePlaceholder":205},[51,88895,88896,88898,88900],{"class":53,"line":285},[51,88897,1452],{"class":65},[51,88899,52172],{"class":51672},[51,88901,51679],{"class":65},[51,88903,88904,88906,88908],{"class":53,"line":296},[51,88905,52516],{"class":65},[51,88907,52185],{"class":51672},[51,88909,51679],{"class":65},[51,88911,88912,88914,88916,88918],{"class":53,"line":307},[51,88913,11605],{"class":69},[51,88915,70343],{"class":278},[51,88917,13948],{"class":69},[51,88919,15956],{"class":65},[51,88921,88922,88924,88926],{"class":53,"line":324},[51,88923,71988],{"class":65},[51,88925,88182],{"class":61},[51,88927,31843],{"class":65},[51,88929,88930,88932,88934],{"class":53,"line":329},[51,88931,71998],{"class":65},[51,88933,1192],{"class":278},[51,88935,31843],{"class":65},[51,88937,88938,88940,88942,88944,88946],{"class":53,"line":334},[51,88939,88197],{"class":65},[51,88941,88200],{"class":61},[51,88943,12819],{"class":65},[51,88945,88205],{"class":61},[51,88947,88208],{"class":65},[51,88949,88950],{"class":53,"line":340},[51,88951,78244],{"class":65},[51,88953,88954,88956],{"class":53,"line":345},[51,88955,88217],{"class":65},[51,88957,88220],{"class":61},[51,88959,88960],{"class":53,"line":357},[51,88961,52770],{"class":65},[51,88963,88964],{"class":53,"line":366},[51,88965,2577],{"class":65},[51,88967,88968],{"class":53,"line":383},[51,88969,88970],{"class":601},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[51,88972,88973],{"class":53,"line":392},[51,88974,88975],{"class":601},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[51,88977,88978],{"class":53,"line":403},[51,88979,88980],{"class":601},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[51,88982,88983,88985,88987,88989,88992,88994,88997,88999,89001,89003,89005],{"class":53,"line":409},[51,88984,11605],{"class":69},[51,88986,88235],{"class":278},[51,88988,13948],{"class":69},[51,88990,88991],{"class":278}," JSON",[51,88993,1100],{"class":65},[51,88995,88996],{"class":57},"parse",[51,88998,546],{"class":65},[51,89000,72036],{"class":278},[51,89002,1100],{"class":65},[51,89004,72041],{"class":57},[51,89006,72044],{"class":65},[51,89008,89009,89011,89013],{"class":53,"line":414},[51,89010,74125],{"class":65},[51,89012,58619],{"class":57},[51,89014,88427],{"class":65},[51,89016,89017,89019,89021],{"class":53,"line":433},[51,89018,88745],{"class":65},[51,89020,70],{"class":69},[51,89022,89023],{"class":61}," '123'\n",[51,89025,89026,89028,89030],{"class":53,"line":439},[51,89027,74125],{"class":65},[51,89029,58619],{"class":57},[51,89031,70408],{"class":65},[51,89033,89034,89036,89038],{"class":53,"line":444},[51,89035,52789],{"class":65},[51,89037,52185],{"class":51672},[51,89039,51679],{"class":65},[51,89041,89042,89044,89046],{"class":53,"line":453},[51,89043,52157],{"class":65},[51,89045,52172],{"class":51672},[51,89047,51679],{"class":65},[51,89049,89050],{"class":53,"line":2174},[51,89051,206],{"emptyLinePlaceholder":205},[51,89053,89054,89056,89058],{"class":53,"line":2965},[51,89055,52157],{"class":65},[51,89057,51007],{"class":51672},[51,89059,51679],{"class":65},[10,89061,89062],{},[460,89063],{"alt":46,"src":89064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[486,89066,89068],{"id":89067},"_415-异常处理","4.15 异常处理",[19,89070,89071],{},[22,89072,89073],{},"throw抛异常",[10,89075,89076],{},[460,89077],{"alt":46,"src":89078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[19,89080,89081],{"start":185},[22,89082,89083],{},"try\u002Fcatch 捕获错误信息",[10,89085,89086],{},[460,89087],{"alt":46,"src":89088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[41,89090,89092],{"className":51005,"code":89091,"language":51007,"meta":46,"style":46},"\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",[48,89093,89094,89104,89118,89122,89130,89144,89164,89176,89184,89188,89196,89208,89216,89225,89232,89237,89256,89265,89276,89281,89291,89296,89301,89306,89323,89327,89332,89339,89351,89355,89367,89371,89375,89380,89385,89392,89400,89408,89412],{"__ignoreMap":46},[51,89095,89096,89098,89100,89102],{"class":53,"line":54},[51,89097,51669],{"class":65},[51,89099,51673],{"class":51672},[51,89101,51676],{"class":57},[51,89103,51679],{"class":65},[51,89105,89106,89108,89110,89112,89114,89116],{"class":53,"line":185},[51,89107,1452],{"class":65},[51,89109,51007],{"class":51672},[51,89111,51688],{"class":57},[51,89113,70],{"class":65},[51,89115,51693],{"class":61},[51,89117,51679],{"class":65},[51,89119,89120],{"class":53,"line":202},[51,89121,206],{"emptyLinePlaceholder":205},[51,89123,89124,89126,89128],{"class":53,"line":209},[51,89125,1452],{"class":65},[51,89127,51706],{"class":51672},[51,89129,51679],{"class":65},[51,89131,89132,89134,89136,89138,89140,89142],{"class":53,"line":223},[51,89133,52516],{"class":65},[51,89135,51716],{"class":51672},[51,89137,51719],{"class":57},[51,89139,70],{"class":65},[51,89141,51724],{"class":61},[51,89143,51679],{"class":65},[51,89145,89146,89148,89150,89152,89154,89156,89158,89160,89162],{"class":53,"line":237},[51,89147,52516],{"class":65},[51,89149,51716],{"class":51672},[51,89151,15304],{"class":57},[51,89153,70],{"class":65},[51,89155,51763],{"class":61},[51,89157,51743],{"class":57},[51,89159,70],{"class":65},[51,89161,51770],{"class":61},[51,89163,51679],{"class":65},[51,89165,89166,89168,89170,89172,89174],{"class":53,"line":242},[51,89167,52516],{"class":65},[51,89169,51779],{"class":51672},[51,89171,51782],{"class":65},[51,89173,51779],{"class":51672},[51,89175,51679],{"class":65},[51,89177,89178,89180,89182],{"class":53,"line":257},[51,89179,52157],{"class":65},[51,89181,51706],{"class":51672},[51,89183,51679],{"class":65},[51,89185,89186],{"class":53,"line":262},[51,89187,206],{"emptyLinePlaceholder":205},[51,89189,89190,89192,89194],{"class":53,"line":285},[51,89191,1452],{"class":65},[51,89193,52172],{"class":51672},[51,89195,51679],{"class":65},[51,89197,89198,89200,89202,89204,89206],{"class":53,"line":296},[51,89199,52516],{"class":65},[51,89201,10],{"class":51672},[51,89203,53866],{"class":65},[51,89205,10],{"class":51672},[51,89207,51679],{"class":65},[51,89209,89210,89212,89214],{"class":53,"line":307},[51,89211,52516],{"class":65},[51,89213,52185],{"class":51672},[51,89215,51679],{"class":65},[51,89217,89218,89220,89223],{"class":53,"line":324},[51,89219,70456],{"class":69},[51,89221,89222],{"class":57}," fn",[51,89224,11237],{"class":65},[51,89226,89227,89230],{"class":53,"line":329},[51,89228,89229],{"class":69},"      try",[51,89231,15956],{"class":65},[51,89233,89234],{"class":53,"line":334},[51,89235,89236],{"class":601},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[51,89238,89239,89241,89243,89245,89247,89249,89251,89254],{"class":53,"line":340},[51,89240,61642],{"class":69},[51,89242,7209],{"class":278},[51,89244,13948],{"class":69},[51,89246,54768],{"class":65},[51,89248,54771],{"class":57},[51,89250,546],{"class":65},[51,89252,89253],{"class":61},"'.p'",[51,89255,282],{"class":65},[51,89257,89258,89261,89263],{"class":53,"line":345},[51,89259,89260],{"class":65},"        p.style.color ",[51,89262,70],{"class":69},[51,89264,67423],{"class":61},[51,89266,89267,89270,89273],{"class":53,"line":357},[51,89268,89269],{"class":65},"      } ",[51,89271,89272],{"class":69},"catch",[51,89274,89275],{"class":65}," (err) {\n",[51,89277,89278],{"class":53,"line":366},[51,89279,89280],{"class":601},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[51,89282,89283,89286,89288],{"class":53,"line":383},[51,89284,89285],{"class":65},"        console.",[51,89287,58619],{"class":57},[51,89289,89290],{"class":65},"(err.message)\n",[51,89292,89293],{"class":53,"line":392},[51,89294,89295],{"class":601},"        \u002F\u002F 想要中断程序，需要加return\n",[51,89297,89298],{"class":53,"line":403},[51,89299,89300],{"class":601},"        \u002F\u002F return\n",[51,89302,89303],{"class":53,"line":409},[51,89304,89305],{"class":601},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[51,89307,89308,89311,89313,89316,89318,89321],{"class":53,"line":414},[51,89309,89310],{"class":69},"        throw",[51,89312,11962],{"class":69},[51,89314,89315],{"class":57}," Error",[51,89317,546],{"class":65},[51,89319,89320],{"class":61},"'你看看，选择器错误了吧'",[51,89322,282],{"class":65},[51,89324,89325],{"class":53,"line":433},[51,89326,52770],{"class":65},[51,89328,89329],{"class":53,"line":439},[51,89330,89331],{"class":601},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[51,89333,89334,89337],{"class":53,"line":444},[51,89335,89336],{"class":69},"      finally",[51,89338,15956],{"class":65},[51,89340,89341,89344,89346,89349],{"class":53,"line":453},[51,89342,89343],{"class":57},"        alert",[51,89345,546],{"class":65},[51,89347,89348],{"class":61},"'弹出对话框'",[51,89350,282],{"class":65},[51,89352,89353],{"class":53,"line":2174},[51,89354,52770],{"class":65},[51,89356,89357,89359,89361,89363,89365],{"class":53,"line":2965},[51,89358,58616],{"class":65},[51,89360,58619],{"class":57},[51,89362,546],{"class":65},[51,89364,1014],{"class":278},[51,89366,282],{"class":65},[51,89368,89369],{"class":53,"line":2979},[51,89370,206],{"emptyLinePlaceholder":205},[51,89372,89373],{"class":53,"line":2987},[51,89374,2577],{"class":65},[51,89376,89377],{"class":53,"line":2992},[51,89378,89379],{"class":601},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[51,89381,89382],{"class":53,"line":2998},[51,89383,89384],{"class":601},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[51,89386,89387,89390],{"class":53,"line":3004},[51,89388,89389],{"class":57},"    fn",[51,89391,2366],{"class":65},[51,89393,89394,89396,89398],{"class":53,"line":3009},[51,89395,52789],{"class":65},[51,89397,52185],{"class":51672},[51,89399,51679],{"class":65},[51,89401,89402,89404,89406],{"class":53,"line":8332},[51,89403,52157],{"class":65},[51,89405,52172],{"class":51672},[51,89407,51679],{"class":65},[51,89409,89410],{"class":53,"line":8356},[51,89411,206],{"emptyLinePlaceholder":205},[51,89413,89414,89416,89418],{"class":53,"line":8361},[51,89415,52157],{"class":65},[51,89417,51007],{"class":51672},[51,89419,51679],{"class":65},[10,89421,89422],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[19,89424,89425],{"start":202},[22,89426,89427],{},"debugger",[10,89429,89430],{},[460,89431],{"alt":46,"src":89432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[10,89434,89435],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[486,89437,89439],{"id":89438},"_416-处理this","4.16 处理this",[513,89441,89443],{"id":89442},"_4161-this的指向","4.16.1 this的指向",[19,89445,89446],{},[22,89447,89448],{},"普通函数的this",[10,89450,89451],{},[460,89452],{"alt":46,"src":89453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[19,89455,89456],{"start":185},[22,89457,89458],{},"箭头函数的this",[10,89460,89461],{},[460,89462],{"alt":46,"src":89463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[10,89465,89466],{},[460,89467],{"alt":46,"src":89468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[10,89470,89471],{},[460,89472],{"alt":46,"src":89473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[513,89475,89477],{"id":89476},"_4162-this的改变","4.16.2 this的改变",[10,89479,89480],{},"call() apply() bind()",[19,89482,89483],{},[22,89484,89485],{},"call()",[10,89487,89488],{},[460,89489],{"alt":46,"src":89490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[10,89492,89493],{},"两个作用：①调用函数；②改变this指向",[41,89495,89497],{"className":53439,"code":89496,"language":53441,"meta":46,"style":46},"\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",[48,89498,89499,89507,89515,89519,89524,89528,89533,89538,89543,89547,89552,89560],{"__ignoreMap":46},[51,89500,89501,89503,89505],{"class":53,"line":54},[51,89502,1452],{"class":65},[51,89504,52172],{"class":51672},[51,89506,51679],{"class":65},[51,89508,89509,89511,89513],{"class":53,"line":185},[51,89510,52516],{"class":65},[51,89512,52185],{"class":51672},[51,89514,51679],{"class":65},[51,89516,89517],{"class":53,"line":202},[51,89518,71895],{"class":65},[51,89520,89521],{"class":53,"line":209},[51,89522,89523],{"class":65},"      uname: 'pink'\n",[51,89525,89526],{"class":53,"line":223},[51,89527,2577],{"class":65},[51,89529,89530],{"class":53,"line":237},[51,89531,89532],{"class":65},"    function fn(x, y) {\n",[51,89534,89535],{"class":53,"line":242},[51,89536,89537],{"class":65},"      console.log(this)  \u002F\u002Fwindow\n",[51,89539,89540],{"class":53,"line":257},[51,89541,89542],{"class":65},"      console.log(x + y)\n",[51,89544,89545],{"class":53,"line":262},[51,89546,2577],{"class":65},[51,89548,89549],{"class":53,"line":285},[51,89550,89551],{"class":65},"    fn.call(obj, 1, 2)\n",[51,89553,89554,89556,89558],{"class":53,"line":296},[51,89555,52789],{"class":65},[51,89557,52185],{"class":51672},[51,89559,51679],{"class":65},[51,89561,89562,89564,89566],{"class":53,"line":307},[51,89563,52157],{"class":65},[51,89565,52172],{"class":51672},[51,89567,51679],{"class":65},[10,89569,89570],{},[460,89571],{"alt":46,"src":89572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[19,89574,89575],{"start":185},[22,89576,89577],{},"apply()",[10,89579,89580],{},[460,89581],{"alt":46,"src":89582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[10,89584,89493],{},[10,89586,89587],{},"call传递的是普通参数，而apply必须传递的是数组",[41,89589,89591],{"className":51005,"code":89590,"language":51007,"meta":46,"style":46},"\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",[48,89592,89593,89603,89617,89621,89629,89643,89663,89675,89683,89687,89695,89703,89713,89720,89724,89729,89745,89757,89771,89775,89780,89799,89804,89808,89813,89818,89826,89831,89853,89858,89874,89890,89902,89906,89911,89930,89938,89946,89950],{"__ignoreMap":46},[51,89594,89595,89597,89599,89601],{"class":53,"line":54},[51,89596,51669],{"class":65},[51,89598,51673],{"class":51672},[51,89600,51676],{"class":57},[51,89602,51679],{"class":65},[51,89604,89605,89607,89609,89611,89613,89615],{"class":53,"line":185},[51,89606,1452],{"class":65},[51,89608,51007],{"class":51672},[51,89610,51688],{"class":57},[51,89612,70],{"class":65},[51,89614,51693],{"class":61},[51,89616,51679],{"class":65},[51,89618,89619],{"class":53,"line":202},[51,89620,206],{"emptyLinePlaceholder":205},[51,89622,89623,89625,89627],{"class":53,"line":209},[51,89624,1452],{"class":65},[51,89626,51706],{"class":51672},[51,89628,51679],{"class":65},[51,89630,89631,89633,89635,89637,89639,89641],{"class":53,"line":223},[51,89632,52516],{"class":65},[51,89634,51716],{"class":51672},[51,89636,51719],{"class":57},[51,89638,70],{"class":65},[51,89640,51724],{"class":61},[51,89642,51679],{"class":65},[51,89644,89645,89647,89649,89651,89653,89655,89657,89659,89661],{"class":53,"line":237},[51,89646,52516],{"class":65},[51,89648,51716],{"class":51672},[51,89650,15304],{"class":57},[51,89652,70],{"class":65},[51,89654,51763],{"class":61},[51,89656,51743],{"class":57},[51,89658,70],{"class":65},[51,89660,51770],{"class":61},[51,89662,51679],{"class":65},[51,89664,89665,89667,89669,89671,89673],{"class":53,"line":242},[51,89666,52516],{"class":65},[51,89668,51779],{"class":51672},[51,89670,51782],{"class":65},[51,89672,51779],{"class":51672},[51,89674,51679],{"class":65},[51,89676,89677,89679,89681],{"class":53,"line":257},[51,89678,52157],{"class":65},[51,89680,51706],{"class":51672},[51,89682,51679],{"class":65},[51,89684,89685],{"class":53,"line":262},[51,89686,206],{"emptyLinePlaceholder":205},[51,89688,89689,89691,89693],{"class":53,"line":285},[51,89690,1452],{"class":65},[51,89692,52172],{"class":51672},[51,89694,51679],{"class":65},[51,89696,89697,89699,89701],{"class":53,"line":296},[51,89698,52516],{"class":65},[51,89700,52185],{"class":51672},[51,89702,51679],{"class":65},[51,89704,89705,89707,89709,89711],{"class":53,"line":307},[51,89706,11605],{"class":69},[51,89708,70343],{"class":278},[51,89710,13948],{"class":69},[51,89712,15956],{"class":65},[51,89714,89715,89717],{"class":53,"line":324},[51,89716,71998],{"class":65},[51,89718,89719],{"class":278},"18\n",[51,89721,89722],{"class":53,"line":329},[51,89723,2577],{"class":65},[51,89725,89726],{"class":53,"line":334},[51,89727,89728],{"class":601},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[51,89730,89731,89733,89735,89737,89739,89741,89743],{"class":53,"line":340},[51,89732,70456],{"class":69},[51,89734,89222],{"class":57},[51,89736,546],{"class":65},[51,89738,1362],{"class":248},[51,89740,12819],{"class":65},[51,89742,1387],{"class":248},[51,89744,12826],{"class":65},[51,89746,89747,89749,89751,89753,89755],{"class":53,"line":345},[51,89748,58616],{"class":65},[51,89750,58619],{"class":57},[51,89752,546],{"class":65},[51,89754,87365],{"class":278},[51,89756,282],{"class":65},[51,89758,89759,89761,89763,89766,89768],{"class":53,"line":357},[51,89760,58616],{"class":65},[51,89762,58619],{"class":57},[51,89764,89765],{"class":65},"(x ",[51,89767,1023],{"class":69},[51,89769,89770],{"class":65}," y)\n",[51,89772,89773],{"class":53,"line":366},[51,89774,2577],{"class":65},[51,89776,89777],{"class":53,"line":383},[51,89778,89779],{"class":601},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[51,89781,89782,89785,89788,89791,89793,89795,89797],{"class":53,"line":392},[51,89783,89784],{"class":65},"    fn.",[51,89786,89787],{"class":57},"apply",[51,89789,89790],{"class":65},"(obj, [",[51,89792,759],{"class":278},[51,89794,12819],{"class":65},[51,89796,620],{"class":278},[51,89798,5042],{"class":65},[51,89800,89801],{"class":53,"line":403},[51,89802,89803],{"class":601},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[51,89805,89806],{"class":53,"line":409},[51,89807,206],{"emptyLinePlaceholder":205},[51,89809,89810],{"class":53,"line":414},[51,89811,89812],{"class":601},"    \u002F\u002F 使用场景：求数组最大值\n",[51,89814,89815],{"class":53,"line":433},[51,89816,89817],{"class":601},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[51,89819,89820,89823],{"class":53,"line":439},[51,89821,89822],{"class":601},"    \u002F\u002F console.log(max)",[51,89824,89825],{"class":601},"   \u002F\u002F3\n",[51,89827,89828],{"class":53,"line":444},[51,89829,89830],{"class":601},"    \u002F\u002F 指向空或者Math都是可以的\n",[51,89832,89833,89835,89837,89839,89841,89843,89845,89847,89849,89851],{"class":53,"line":453},[51,89834,11605],{"class":69},[51,89836,58067],{"class":278},[51,89838,13948],{"class":69},[51,89840,52598],{"class":65},[51,89842,853],{"class":278},[51,89844,12819],{"class":65},[51,89846,1046],{"class":278},[51,89848,12819],{"class":65},[51,89850,1077],{"class":278},[51,89852,33621],{"class":65},[51,89854,89855],{"class":53,"line":2174},[51,89856,89857],{"class":601},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[51,89859,89860,89862,89864,89866,89869,89871],{"class":53,"line":2965},[51,89861,11605],{"class":69},[51,89863,6335],{"class":278},[51,89865,13948],{"class":69},[51,89867,89868],{"class":65}," Math.max.",[51,89870,89787],{"class":57},[51,89872,89873],{"class":65},"(Math, arr)\n",[51,89875,89876,89878,89881,89883,89886,89888],{"class":53,"line":2979},[51,89877,11605],{"class":69},[51,89879,89880],{"class":278}," min",[51,89882,13948],{"class":69},[51,89884,89885],{"class":65}," Math.min.",[51,89887,89787],{"class":57},[51,89889,89873],{"class":65},[51,89891,89892,89894,89896,89899],{"class":53,"line":2987},[51,89893,74125],{"class":65},[51,89895,58619],{"class":57},[51,89897,89898],{"class":65},"(max, min)     ",[51,89900,89901],{"class":601},"\u002F\u002F100,4\n",[51,89903,89904],{"class":53,"line":2992},[51,89905,206],{"emptyLinePlaceholder":205},[51,89907,89908],{"class":53,"line":2998},[51,89909,89910],{"class":601},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[51,89912,89913,89915,89917,89920,89922,89924,89927],{"class":53,"line":3004},[51,89914,74125],{"class":65},[51,89916,58619],{"class":57},[51,89918,89919],{"class":65},"(Max.",[51,89921,6399],{"class":57},[51,89923,546],{"class":65},[51,89925,89926],{"class":69},"...",[51,89928,89929],{"class":65},"arr))\n",[51,89931,89932,89934,89936],{"class":53,"line":3009},[51,89933,52789],{"class":65},[51,89935,52185],{"class":51672},[51,89937,51679],{"class":65},[51,89939,89940,89942,89944],{"class":53,"line":8332},[51,89941,52157],{"class":65},[51,89943,52172],{"class":51672},[51,89945,51679],{"class":65},[51,89947,89948],{"class":53,"line":8356},[51,89949,206],{"emptyLinePlaceholder":205},[51,89951,89952,89954,89956],{"class":53,"line":8361},[51,89953,52157],{"class":65},[51,89955,51007],{"class":51672},[51,89957,51679],{"class":65},[10,89959,89960],{},[460,89961],{"alt":46,"src":89962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[19,89964,89965],{"start":202},[22,89966,89967],{},"bind()",[10,89969,89970],{},[460,89971],{"alt":46,"src":89972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[10,89974,89975],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[10,89977,89978],{},"bind的语法跟call很相似",[41,89980,89982],{"className":53439,"code":89981,"language":53441,"meta":46,"style":46},"\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",[48,89983,89984,89992,90000,90004,90009,90013,90017,90022,90026,90031,90036,90041,90046,90051,90056,90061,90065,90073],{"__ignoreMap":46},[51,89985,89986,89988,89990],{"class":53,"line":54},[51,89987,1452],{"class":65},[51,89989,52172],{"class":51672},[51,89991,51679],{"class":65},[51,89993,89994,89996,89998],{"class":53,"line":185},[51,89995,52516],{"class":65},[51,89997,52185],{"class":51672},[51,89999,51679],{"class":65},[51,90001,90002],{"class":53,"line":202},[51,90003,71895],{"class":65},[51,90005,90006],{"class":53,"line":209},[51,90007,90008],{"class":65},"      age: 18\n",[51,90010,90011],{"class":53,"line":223},[51,90012,2577],{"class":65},[51,90014,90015],{"class":53,"line":237},[51,90016,77515],{"class":65},[51,90018,90019],{"class":53,"line":242},[51,90020,90021],{"class":65},"      console.log(this)\n",[51,90023,90024],{"class":53,"line":257},[51,90025,2577],{"class":65},[51,90027,90028],{"class":53,"line":262},[51,90029,90030],{"class":65},"    \u002F\u002F 1.bind 不会调用函数\n",[51,90032,90033],{"class":53,"line":285},[51,90034,90035],{"class":65},"    \u002F\u002F 2.bind能改变this的指向\n",[51,90037,90038],{"class":53,"line":296},[51,90039,90040],{"class":65},"    fn.bind()\n",[51,90042,90043],{"class":53,"line":307},[51,90044,90045],{"class":65},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[51,90047,90048],{"class":53,"line":324},[51,90049,90050],{"class":65},"    const fun = fn.bind(obj)\n",[51,90052,90053],{"class":53,"line":329},[51,90054,90055],{"class":65},"    \u002F\u002F console.log(fun)\n",[51,90057,90058],{"class":53,"line":334},[51,90059,90060],{"class":65},"    \u002F\u002F 调用,查看this的指向\n",[51,90062,90063],{"class":53,"line":340},[51,90064,53023],{"class":65},[51,90066,90067,90069,90071],{"class":53,"line":345},[51,90068,52789],{"class":65},[51,90070,52185],{"class":51672},[51,90072,51679],{"class":65},[51,90074,90075,90077,90079],{"class":53,"line":357},[51,90076,52157],{"class":65},[51,90078,52172],{"class":51672},[51,90080,51679],{"class":65},[10,90082,90083],{},[460,90084],{"alt":46,"src":90085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[19,90087,90088],{"start":209},[22,90089,90090],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[41,90092,90094],{"className":53439,"code":90093,"language":53441,"meta":46,"style":46},"\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",[48,90095,90096,90104,90117,90125,90130,90134,90139,90144,90149,90154,90159,90164,90169,90174,90178,90186],{"__ignoreMap":46},[51,90097,90098,90100,90102],{"class":53,"line":54},[51,90099,1452],{"class":65},[51,90101,52172],{"class":51672},[51,90103,51679],{"class":65},[51,90105,90106,90108,90110,90113,90115],{"class":53,"line":185},[51,90107,52516],{"class":65},[51,90109,54259],{"class":51672},[51,90111,90112],{"class":65},">禁用\u003C\u002F",[51,90114,54259],{"class":51672},[51,90116,51679],{"class":65},[51,90118,90119,90121,90123],{"class":53,"line":202},[51,90120,52516],{"class":65},[51,90122,52185],{"class":51672},[51,90124,51679],{"class":65},[51,90126,90127],{"class":53,"line":209},[51,90128,90129],{"class":65},"    const btn = document.querySelector('button')\n",[51,90131,90132],{"class":53,"line":223},[51,90133,59388],{"class":65},[51,90135,90136],{"class":53,"line":237},[51,90137,90138],{"class":65},"      this.disabled = true\n",[51,90140,90141],{"class":53,"line":242},[51,90142,90143],{"class":65},"      \u002F\u002F 定时器是window进行调用的\n",[51,90145,90146],{"class":53,"line":257},[51,90147,90148],{"class":65},"      setTimeout(function () {\n",[51,90150,90151],{"class":53,"line":262},[51,90152,90153],{"class":65},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[51,90155,90156],{"class":53,"line":285},[51,90157,90158],{"class":65},"        this.disabled = false\n",[51,90160,90161],{"class":53,"line":296},[51,90162,90163],{"class":65},"      }.bind(this), 2000)\n",[51,90165,90166],{"class":53,"line":307},[51,90167,90168],{"class":65},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[51,90170,90171],{"class":53,"line":324},[51,90172,90173],{"class":65},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[51,90175,90176],{"class":53,"line":329},[51,90177,33836],{"class":65},[51,90179,90180,90182,90184],{"class":53,"line":334},[51,90181,52789],{"class":65},[51,90183,52185],{"class":51672},[51,90185,51679],{"class":65},[51,90187,90188,90190,90192],{"class":53,"line":340},[51,90189,52157],{"class":65},[51,90191,52172],{"class":51672},[51,90193,51679],{"class":65},[19,90195,90196],{"start":223},[22,90197,22336],{},[10,90199,90200],{},[460,90201],{"alt":46,"src":90202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[486,90204,90206],{"id":90205},"_417-性能优化","4.17 性能优化",[513,90208,90210],{"id":90209},"_4171-防抖","4.17.1 防抖",[10,90212,90213],{},[460,90214],{"alt":46,"src":90215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[10,90217,90218],{},[691,90219,90220],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[10,90222,90223],{},"防抖实现方式：",[1549,90225,90226],{},[22,90227,90228],{},"lodash 提供了防抖处理",[10,90230,90231],{},"_.debounce(func,[wait=0],[options={}])",[10,90233,90234],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[41,90236,90238],{"className":51005,"code":90237,"language":51007,"meta":46,"style":46},"\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",[48,90239,90240,90250,90264,90268,90276,90290,90310,90322,90330,90336,90346,90358,90370,90381,90393,90403,90413,90426,90430,90438,90446,90450,90458,90476,90494,90502,90521,90531,90540,90551,90556,90560,90565,90570,90575,90600,90608,90616,90620],{"__ignoreMap":46},[51,90241,90242,90244,90246,90248],{"class":53,"line":54},[51,90243,51669],{"class":65},[51,90245,51673],{"class":51672},[51,90247,51676],{"class":57},[51,90249,51679],{"class":65},[51,90251,90252,90254,90256,90258,90260,90262],{"class":53,"line":185},[51,90253,1452],{"class":65},[51,90255,51007],{"class":51672},[51,90257,51688],{"class":57},[51,90259,70],{"class":65},[51,90261,51693],{"class":61},[51,90263,51679],{"class":65},[51,90265,90266],{"class":53,"line":202},[51,90267,206],{"emptyLinePlaceholder":205},[51,90269,90270,90272,90274],{"class":53,"line":209},[51,90271,1452],{"class":65},[51,90273,51706],{"class":51672},[51,90275,51679],{"class":65},[51,90277,90278,90280,90282,90284,90286,90288],{"class":53,"line":223},[51,90279,52516],{"class":65},[51,90281,51716],{"class":51672},[51,90283,51719],{"class":57},[51,90285,70],{"class":65},[51,90287,51724],{"class":61},[51,90289,51679],{"class":65},[51,90291,90292,90294,90296,90298,90300,90302,90304,90306,90308],{"class":53,"line":237},[51,90293,52516],{"class":65},[51,90295,51716],{"class":51672},[51,90297,15304],{"class":57},[51,90299,70],{"class":65},[51,90301,51763],{"class":61},[51,90303,51743],{"class":57},[51,90305,70],{"class":65},[51,90307,51770],{"class":61},[51,90309,51679],{"class":65},[51,90311,90312,90314,90316,90318,90320],{"class":53,"line":242},[51,90313,52516],{"class":65},[51,90315,51779],{"class":51672},[51,90317,51782],{"class":65},[51,90319,51779],{"class":51672},[51,90321,51679],{"class":65},[51,90323,90324,90326,90328],{"class":53,"line":257},[51,90325,52516],{"class":65},[51,90327,464],{"class":51672},[51,90329,51679],{"class":65},[51,90331,90332,90334],{"class":53,"line":262},[51,90333,55124],{"class":57},[51,90335,15956],{"class":65},[51,90337,90338,90340,90342,90344],{"class":53,"line":285},[51,90339,72968],{"class":278},[51,90341,51809],{"class":65},[51,90343,60877],{"class":278},[51,90345,1703],{"class":65},[51,90347,90348,90350,90352,90354,90356],{"class":53,"line":296},[51,90349,55143],{"class":278},[51,90351,51809],{"class":65},[51,90353,2120],{"class":278},[51,90355,51864],{"class":69},[51,90357,1703],{"class":65},[51,90359,90360,90362,90364,90366,90368],{"class":53,"line":307},[51,90361,55157],{"class":278},[51,90363,51809],{"class":65},[51,90365,2120],{"class":278},[51,90367,51864],{"class":69},[51,90369,1703],{"class":65},[51,90371,90372,90374,90376,90379],{"class":53,"line":324},[51,90373,55256],{"class":278},[51,90375,51809],{"class":65},[51,90377,90378],{"class":278},"gray",[51,90380,1703],{"class":65},[51,90382,90383,90385,90387,90389,90391],{"class":53,"line":329},[51,90384,55294],{"class":278},[51,90386,51809],{"class":65},[51,90388,1367],{"class":278},[51,90390,51864],{"class":69},[51,90392,1703],{"class":65},[51,90394,90395,90397,90399,90401],{"class":53,"line":334},[51,90396,57788],{"class":278},[51,90398,51809],{"class":65},[51,90400,61214],{"class":278},[51,90402,1703],{"class":65},[51,90404,90405,90407,90409,90411],{"class":53,"line":340},[51,90406,57658],{"class":278},[51,90408,51809],{"class":65},[51,90410,51964],{"class":278},[51,90412,1703],{"class":65},[51,90414,90415,90418,90420,90422,90424],{"class":53,"line":345},[51,90416,90417],{"class":278},"      padding-top",[51,90419,51809],{"class":65},[51,90421,861],{"class":278},[51,90423,51864],{"class":69},[51,90425,1703],{"class":65},[51,90427,90428],{"class":53,"line":357},[51,90429,2577],{"class":65},[51,90431,90432,90434,90436],{"class":53,"line":366},[51,90433,52789],{"class":65},[51,90435,464],{"class":51672},[51,90437,51679],{"class":65},[51,90439,90440,90442,90444],{"class":53,"line":383},[51,90441,52157],{"class":65},[51,90443,51706],{"class":51672},[51,90445,51679],{"class":65},[51,90447,90448],{"class":53,"line":392},[51,90449,206],{"emptyLinePlaceholder":205},[51,90451,90452,90454,90456],{"class":53,"line":403},[51,90453,1452],{"class":65},[51,90455,52172],{"class":51672},[51,90457,51679],{"class":65},[51,90459,90460,90462,90464,90466,90468,90470,90472,90474],{"class":53,"line":409},[51,90461,52516],{"class":65},[51,90463,51983],{"class":51672},[51,90465,53858],{"class":57},[51,90467,70],{"class":65},[51,90469,53863],{"class":61},[51,90471,55686],{"class":65},[51,90473,51983],{"class":51672},[51,90475,51679],{"class":65},[51,90477,90478,90480,90482,90484,90486,90488,90490,90492],{"class":53,"line":414},[51,90479,52516],{"class":65},[51,90481,52185],{"class":51672},[51,90483,55611],{"class":57},[51,90485,70],{"class":65},[51,90487,88646],{"class":61},[51,90489,55686],{"class":65},[51,90491,52185],{"class":51672},[51,90493,51679],{"class":65},[51,90495,90496,90498,90500],{"class":53,"line":433},[51,90497,52516],{"class":65},[51,90499,52185],{"class":51672},[51,90501,51679],{"class":65},[51,90503,90504,90506,90508,90510,90512,90514,90516,90519],{"class":53,"line":439},[51,90505,11605],{"class":69},[51,90507,87305],{"class":278},[51,90509,13948],{"class":69},[51,90511,54768],{"class":65},[51,90513,54771],{"class":57},[51,90515,546],{"class":65},[51,90517,90518],{"class":61},"'.box'",[51,90520,282],{"class":65},[51,90522,90523,90525,90527,90529],{"class":53,"line":444},[51,90524,52591],{"class":69},[51,90526,9822],{"class":65},[51,90528,70],{"class":69},[51,90530,47705],{"class":278},[51,90532,90533,90535,90538],{"class":53,"line":453},[51,90534,70456],{"class":69},[51,90536,90537],{"class":57}," mouseMove",[51,90539,11237],{"class":65},[51,90541,90542,90545,90547,90549],{"class":53,"line":2174},[51,90543,90544],{"class":65},"      box.innerHTML ",[51,90546,70],{"class":69},[51,90548,3419],{"class":65},[51,90550,3090],{"class":69},[51,90552,90553],{"class":53,"line":2965},[51,90554,90555],{"class":601},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[51,90557,90558],{"class":53,"line":2979},[51,90559,2577],{"class":65},[51,90561,90562],{"class":53,"line":2987},[51,90563,90564],{"class":601},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[51,90566,90567],{"class":53,"line":2992},[51,90568,90569],{"class":601},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[51,90571,90572],{"class":53,"line":2998},[51,90573,90574],{"class":601},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[51,90576,90577,90580,90582,90584,90587,90590,90593,90596,90598],{"class":53,"line":3004},[51,90578,90579],{"class":65},"    box.",[51,90581,58185],{"class":57},[51,90583,546],{"class":65},[51,90585,90586],{"class":61},"'mousemove'",[51,90588,90589],{"class":65},", _.",[51,90591,90592],{"class":57},"debounce",[51,90594,90595],{"class":65},"(mouseMove, ",[51,90597,65446],{"class":278},[51,90599,30876],{"class":65},[51,90601,90602,90604,90606],{"class":53,"line":3009},[51,90603,52789],{"class":65},[51,90605,52185],{"class":51672},[51,90607,51679],{"class":65},[51,90609,90610,90612,90614],{"class":53,"line":8332},[51,90611,52157],{"class":65},[51,90613,52172],{"class":51672},[51,90615,51679],{"class":65},[51,90617,90618],{"class":53,"line":8356},[51,90619,206],{"emptyLinePlaceholder":205},[51,90621,90622,90624,90626],{"class":53,"line":8361},[51,90623,52157],{"class":65},[51,90625,51007],{"class":51672},[51,90627,51679],{"class":65},[1549,90629,90630],{},[22,90631,90632],{},"手写一个防抖函数来处理",[10,90634,90635],{},"防抖的核心就是利用定时器来实现的：",[10,90637,90638],{},"①声明一个定时器变量",[10,90640,90641],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[10,90643,90644],{},"③如果没有定时器则开启定时器，记得存到变量里面",[41,90646,90648],{"className":51005,"code":90647,"language":51007,"meta":46,"style":46},"\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",[48,90649,90650,90660,90674,90678,90686,90700,90720,90732,90740,90746,90756,90768,90780,90790,90802,90812,90822,90834,90838,90846,90854,90858,90866,90884,90902,90910,90928,90938,90946,90956,90960,90964,90968,90973,90978,90983,90988,90993,90998,91016,91023,91028,91036,91041,91054,91070,91080,91085,91089,91093,91113,91117,91122,91127,91132,91137,91145,91153,91157],{"__ignoreMap":46},[51,90651,90652,90654,90656,90658],{"class":53,"line":54},[51,90653,51669],{"class":65},[51,90655,51673],{"class":51672},[51,90657,51676],{"class":57},[51,90659,51679],{"class":65},[51,90661,90662,90664,90666,90668,90670,90672],{"class":53,"line":185},[51,90663,1452],{"class":65},[51,90665,51007],{"class":51672},[51,90667,51688],{"class":57},[51,90669,70],{"class":65},[51,90671,51693],{"class":61},[51,90673,51679],{"class":65},[51,90675,90676],{"class":53,"line":202},[51,90677,206],{"emptyLinePlaceholder":205},[51,90679,90680,90682,90684],{"class":53,"line":209},[51,90681,1452],{"class":65},[51,90683,51706],{"class":51672},[51,90685,51679],{"class":65},[51,90687,90688,90690,90692,90694,90696,90698],{"class":53,"line":223},[51,90689,52516],{"class":65},[51,90691,51716],{"class":51672},[51,90693,51719],{"class":57},[51,90695,70],{"class":65},[51,90697,51724],{"class":61},[51,90699,51679],{"class":65},[51,90701,90702,90704,90706,90708,90710,90712,90714,90716,90718],{"class":53,"line":237},[51,90703,52516],{"class":65},[51,90705,51716],{"class":51672},[51,90707,15304],{"class":57},[51,90709,70],{"class":65},[51,90711,51763],{"class":61},[51,90713,51743],{"class":57},[51,90715,70],{"class":65},[51,90717,51770],{"class":61},[51,90719,51679],{"class":65},[51,90721,90722,90724,90726,90728,90730],{"class":53,"line":242},[51,90723,52516],{"class":65},[51,90725,51779],{"class":51672},[51,90727,51782],{"class":65},[51,90729,51779],{"class":51672},[51,90731,51679],{"class":65},[51,90733,90734,90736,90738],{"class":53,"line":257},[51,90735,52516],{"class":65},[51,90737,464],{"class":51672},[51,90739,51679],{"class":65},[51,90741,90742,90744],{"class":53,"line":262},[51,90743,55124],{"class":57},[51,90745,15956],{"class":65},[51,90747,90748,90750,90752,90754],{"class":53,"line":285},[51,90749,72968],{"class":278},[51,90751,51809],{"class":65},[51,90753,60877],{"class":278},[51,90755,1703],{"class":65},[51,90757,90758,90760,90762,90764,90766],{"class":53,"line":296},[51,90759,55143],{"class":278},[51,90761,51809],{"class":65},[51,90763,2120],{"class":278},[51,90765,51864],{"class":69},[51,90767,1703],{"class":65},[51,90769,90770,90772,90774,90776,90778],{"class":53,"line":307},[51,90771,55157],{"class":278},[51,90773,51809],{"class":65},[51,90775,2120],{"class":278},[51,90777,51864],{"class":69},[51,90779,1703],{"class":65},[51,90781,90782,90784,90786,90788],{"class":53,"line":324},[51,90783,55256],{"class":278},[51,90785,51809],{"class":65},[51,90787,90378],{"class":278},[51,90789,1703],{"class":65},[51,90791,90792,90794,90796,90798,90800],{"class":53,"line":329},[51,90793,55294],{"class":278},[51,90795,51809],{"class":65},[51,90797,1367],{"class":278},[51,90799,51864],{"class":69},[51,90801,1703],{"class":65},[51,90803,90804,90806,90808,90810],{"class":53,"line":334},[51,90805,57788],{"class":278},[51,90807,51809],{"class":65},[51,90809,61214],{"class":278},[51,90811,1703],{"class":65},[51,90813,90814,90816,90818,90820],{"class":53,"line":340},[51,90815,57658],{"class":278},[51,90817,51809],{"class":65},[51,90819,51964],{"class":278},[51,90821,1703],{"class":65},[51,90823,90824,90826,90828,90830,90832],{"class":53,"line":345},[51,90825,90417],{"class":278},[51,90827,51809],{"class":65},[51,90829,861],{"class":278},[51,90831,51864],{"class":69},[51,90833,1703],{"class":65},[51,90835,90836],{"class":53,"line":357},[51,90837,2577],{"class":65},[51,90839,90840,90842,90844],{"class":53,"line":366},[51,90841,52789],{"class":65},[51,90843,464],{"class":51672},[51,90845,51679],{"class":65},[51,90847,90848,90850,90852],{"class":53,"line":383},[51,90849,52157],{"class":65},[51,90851,51706],{"class":51672},[51,90853,51679],{"class":65},[51,90855,90856],{"class":53,"line":392},[51,90857,206],{"emptyLinePlaceholder":205},[51,90859,90860,90862,90864],{"class":53,"line":403},[51,90861,1452],{"class":65},[51,90863,52172],{"class":51672},[51,90865,51679],{"class":65},[51,90867,90868,90870,90872,90874,90876,90878,90880,90882],{"class":53,"line":409},[51,90869,52516],{"class":65},[51,90871,51983],{"class":51672},[51,90873,53858],{"class":57},[51,90875,70],{"class":65},[51,90877,53863],{"class":61},[51,90879,55686],{"class":65},[51,90881,51983],{"class":51672},[51,90883,51679],{"class":65},[51,90885,90886,90888,90890,90892,90894,90896,90898,90900],{"class":53,"line":414},[51,90887,52516],{"class":65},[51,90889,52185],{"class":51672},[51,90891,55611],{"class":57},[51,90893,70],{"class":65},[51,90895,88646],{"class":61},[51,90897,55686],{"class":65},[51,90899,52185],{"class":51672},[51,90901,51679],{"class":65},[51,90903,90904,90906,90908],{"class":53,"line":433},[51,90905,52516],{"class":65},[51,90907,52185],{"class":51672},[51,90909,51679],{"class":65},[51,90911,90912,90914,90916,90918,90920,90922,90924,90926],{"class":53,"line":439},[51,90913,11605],{"class":69},[51,90915,87305],{"class":278},[51,90917,13948],{"class":69},[51,90919,54768],{"class":65},[51,90921,54771],{"class":57},[51,90923,546],{"class":65},[51,90925,90518],{"class":61},[51,90927,282],{"class":65},[51,90929,90930,90932,90934,90936],{"class":53,"line":444},[51,90931,52591],{"class":69},[51,90933,9822],{"class":65},[51,90935,70],{"class":69},[51,90937,47705],{"class":278},[51,90939,90940,90942,90944],{"class":53,"line":453},[51,90941,70456],{"class":69},[51,90943,90537],{"class":57},[51,90945,11237],{"class":65},[51,90947,90948,90950,90952,90954],{"class":53,"line":2174},[51,90949,90544],{"class":65},[51,90951,70],{"class":69},[51,90953,3419],{"class":65},[51,90955,3090],{"class":69},[51,90957,90958],{"class":53,"line":2965},[51,90959,90555],{"class":601},[51,90961,90962],{"class":53,"line":2979},[51,90963,2577],{"class":65},[51,90965,90966],{"class":53,"line":2987},[51,90967,90564],{"class":601},[51,90969,90970],{"class":53,"line":2992},[51,90971,90972],{"class":601},"    \u002F\u002F 手写防抖函数\n",[51,90974,90975],{"class":53,"line":2998},[51,90976,90977],{"class":601},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[51,90979,90980],{"class":53,"line":3004},[51,90981,90982],{"class":601},"    \u002F\u002F 1.声明定时器变量\n",[51,90984,90985],{"class":53,"line":3009},[51,90986,90987],{"class":601},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[51,90989,90990],{"class":53,"line":8332},[51,90991,90992],{"class":601},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[51,90994,90995],{"class":53,"line":8356},[51,90996,90997],{"class":601},"    \u002F\u002F 4.定时器里面写函数调用\n",[51,90999,91000,91002,91005,91007,91010,91012,91014],{"class":53,"line":8361},[51,91001,70456],{"class":69},[51,91003,91004],{"class":57}," debounce",[51,91006,546],{"class":65},[51,91008,91009],{"class":248},"fn",[51,91011,12819],{"class":65},[51,91013,1262],{"class":248},[51,91015,12826],{"class":65},[51,91017,91018,91020],{"class":53,"line":8367},[51,91019,80144],{"class":69},[51,91021,91022],{"class":65}," timer\n",[51,91024,91025],{"class":53,"line":8394},[51,91026,91027],{"class":601},"      \u002F\u002F return 返回一个匿名函数\n",[51,91029,91030,91032,91034],{"class":53,"line":8399},[51,91031,74354],{"class":69},[51,91033,59290],{"class":69},[51,91035,54824],{"class":65},[51,91037,91038],{"class":53,"line":8405},[51,91039,91040],{"class":601},"        \u002F\u002F 这里边写第二三四步\n",[51,91042,91043,91045,91048,91051],{"class":53,"line":8417},[51,91044,369],{"class":69},[51,91046,91047],{"class":65}," (timer) ",[51,91049,91050],{"class":57},"clearTimeout",[51,91052,91053],{"class":65},"(timer)\n",[51,91055,91056,91059,91061,91064,91066,91068],{"class":53,"line":8429},[51,91057,91058],{"class":65},"        timer ",[51,91060,70],{"class":69},[51,91062,91063],{"class":57}," setTimeout",[51,91065,546],{"class":65},[51,91067,54821],{"class":69},[51,91069,54824],{"class":65},[51,91071,91072,91075,91077],{"class":53,"line":8441},[51,91073,91074],{"class":57},"          fn",[51,91076,13434],{"class":65},[51,91078,91079],{"class":601},"\u002F\u002F加小括号调用fn }, t)\n",[51,91081,91082],{"class":53,"line":10100},[51,91083,91084],{"class":65},"        }, t)\n",[51,91086,91087],{"class":53,"line":10125},[51,91088,52770],{"class":65},[51,91090,91091],{"class":53,"line":10148},[51,91092,2577],{"class":65},[51,91094,91095,91097,91099,91101,91103,91105,91107,91109,91111],{"class":53,"line":10172},[51,91096,90579],{"class":65},[51,91098,58185],{"class":57},[51,91100,546],{"class":65},[51,91102,90586],{"class":61},[51,91104,12819],{"class":65},[51,91106,90592],{"class":57},[51,91108,90595],{"class":65},[51,91110,65446],{"class":278},[51,91112,30876],{"class":65},[51,91114,91115],{"class":53,"line":10177},[51,91116,206],{"emptyLinePlaceholder":205},[51,91118,91119],{"class":53,"line":10182},[51,91120,91121],{"class":601},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[51,91123,91124],{"class":53,"line":10187},[51,91125,91126],{"class":601},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[51,91128,91129],{"class":53,"line":10196},[51,91130,91131],{"class":601},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[51,91133,91134],{"class":53,"line":10201},[51,91135,91136],{"class":601},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[51,91138,91139,91141,91143],{"class":53,"line":10207},[51,91140,52789],{"class":65},[51,91142,52185],{"class":51672},[51,91144,51679],{"class":65},[51,91146,91147,91149,91151],{"class":53,"line":10228},[51,91148,52157],{"class":65},[51,91150,52172],{"class":51672},[51,91152,51679],{"class":65},[51,91154,91155],{"class":53,"line":10234},[51,91156,206],{"emptyLinePlaceholder":205},[51,91158,91159,91161,91163],{"class":53,"line":10248},[51,91160,52157],{"class":65},[51,91162,51007],{"class":51672},[51,91164,51679],{"class":65},[513,91166,91168],{"id":91167},"_4172-节流","4.17.2 节流",[10,91170,91171],{},[460,91172],{"alt":46,"src":91173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[10,91175,91176],{},[460,91177],{"alt":46,"src":91178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[10,91180,91181],{},[691,91182,91183],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[10,91185,91186],{},"实现方式：",[1549,91188,91189],{},[22,91190,91191],{},"lodash 提供的节流函数来处理",[10,91193,91194],{},"_.throttle(func,[wait=0],[options=])",[10,91196,91197],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[41,91199,91201],{"className":51005,"code":91200,"language":51007,"meta":46,"style":46},"\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",[48,91202,91203,91213,91227,91231,91239,91253,91273,91285,91293,91299,91309,91321,91333,91343,91355,91365,91375,91387,91391,91399,91407,91411,91419,91437,91455,91463,91481,91491,91499,91509,91513,91517,91521,91526,91531,91552,91560,91568,91572],{"__ignoreMap":46},[51,91204,91205,91207,91209,91211],{"class":53,"line":54},[51,91206,51669],{"class":65},[51,91208,51673],{"class":51672},[51,91210,51676],{"class":57},[51,91212,51679],{"class":65},[51,91214,91215,91217,91219,91221,91223,91225],{"class":53,"line":185},[51,91216,1452],{"class":65},[51,91218,51007],{"class":51672},[51,91220,51688],{"class":57},[51,91222,70],{"class":65},[51,91224,51693],{"class":61},[51,91226,51679],{"class":65},[51,91228,91229],{"class":53,"line":202},[51,91230,206],{"emptyLinePlaceholder":205},[51,91232,91233,91235,91237],{"class":53,"line":209},[51,91234,1452],{"class":65},[51,91236,51706],{"class":51672},[51,91238,51679],{"class":65},[51,91240,91241,91243,91245,91247,91249,91251],{"class":53,"line":223},[51,91242,52516],{"class":65},[51,91244,51716],{"class":51672},[51,91246,51719],{"class":57},[51,91248,70],{"class":65},[51,91250,51724],{"class":61},[51,91252,51679],{"class":65},[51,91254,91255,91257,91259,91261,91263,91265,91267,91269,91271],{"class":53,"line":237},[51,91256,52516],{"class":65},[51,91258,51716],{"class":51672},[51,91260,15304],{"class":57},[51,91262,70],{"class":65},[51,91264,51763],{"class":61},[51,91266,51743],{"class":57},[51,91268,70],{"class":65},[51,91270,51770],{"class":61},[51,91272,51679],{"class":65},[51,91274,91275,91277,91279,91281,91283],{"class":53,"line":242},[51,91276,52516],{"class":65},[51,91278,51779],{"class":51672},[51,91280,51782],{"class":65},[51,91282,51779],{"class":51672},[51,91284,51679],{"class":65},[51,91286,91287,91289,91291],{"class":53,"line":257},[51,91288,52516],{"class":65},[51,91290,464],{"class":51672},[51,91292,51679],{"class":65},[51,91294,91295,91297],{"class":53,"line":262},[51,91296,55124],{"class":57},[51,91298,15956],{"class":65},[51,91300,91301,91303,91305,91307],{"class":53,"line":285},[51,91302,72968],{"class":278},[51,91304,51809],{"class":65},[51,91306,60877],{"class":278},[51,91308,1703],{"class":65},[51,91310,91311,91313,91315,91317,91319],{"class":53,"line":296},[51,91312,55143],{"class":278},[51,91314,51809],{"class":65},[51,91316,2120],{"class":278},[51,91318,51864],{"class":69},[51,91320,1703],{"class":65},[51,91322,91323,91325,91327,91329,91331],{"class":53,"line":307},[51,91324,55157],{"class":278},[51,91326,51809],{"class":65},[51,91328,2120],{"class":278},[51,91330,51864],{"class":69},[51,91332,1703],{"class":65},[51,91334,91335,91337,91339,91341],{"class":53,"line":324},[51,91336,55256],{"class":278},[51,91338,51809],{"class":65},[51,91340,90378],{"class":278},[51,91342,1703],{"class":65},[51,91344,91345,91347,91349,91351,91353],{"class":53,"line":329},[51,91346,55294],{"class":278},[51,91348,51809],{"class":65},[51,91350,1367],{"class":278},[51,91352,51864],{"class":69},[51,91354,1703],{"class":65},[51,91356,91357,91359,91361,91363],{"class":53,"line":334},[51,91358,57788],{"class":278},[51,91360,51809],{"class":65},[51,91362,61214],{"class":278},[51,91364,1703],{"class":65},[51,91366,91367,91369,91371,91373],{"class":53,"line":340},[51,91368,57658],{"class":278},[51,91370,51809],{"class":65},[51,91372,51964],{"class":278},[51,91374,1703],{"class":65},[51,91376,91377,91379,91381,91383,91385],{"class":53,"line":345},[51,91378,90417],{"class":278},[51,91380,51809],{"class":65},[51,91382,861],{"class":278},[51,91384,51864],{"class":69},[51,91386,1703],{"class":65},[51,91388,91389],{"class":53,"line":357},[51,91390,2577],{"class":65},[51,91392,91393,91395,91397],{"class":53,"line":366},[51,91394,52789],{"class":65},[51,91396,464],{"class":51672},[51,91398,51679],{"class":65},[51,91400,91401,91403,91405],{"class":53,"line":383},[51,91402,52157],{"class":65},[51,91404,51706],{"class":51672},[51,91406,51679],{"class":65},[51,91408,91409],{"class":53,"line":392},[51,91410,206],{"emptyLinePlaceholder":205},[51,91412,91413,91415,91417],{"class":53,"line":403},[51,91414,1452],{"class":65},[51,91416,52172],{"class":51672},[51,91418,51679],{"class":65},[51,91420,91421,91423,91425,91427,91429,91431,91433,91435],{"class":53,"line":409},[51,91422,52516],{"class":65},[51,91424,51983],{"class":51672},[51,91426,53858],{"class":57},[51,91428,70],{"class":65},[51,91430,53863],{"class":61},[51,91432,55686],{"class":65},[51,91434,51983],{"class":51672},[51,91436,51679],{"class":65},[51,91438,91439,91441,91443,91445,91447,91449,91451,91453],{"class":53,"line":414},[51,91440,52516],{"class":65},[51,91442,52185],{"class":51672},[51,91444,55611],{"class":57},[51,91446,70],{"class":65},[51,91448,88646],{"class":61},[51,91450,55686],{"class":65},[51,91452,52185],{"class":51672},[51,91454,51679],{"class":65},[51,91456,91457,91459,91461],{"class":53,"line":433},[51,91458,52516],{"class":65},[51,91460,52185],{"class":51672},[51,91462,51679],{"class":65},[51,91464,91465,91467,91469,91471,91473,91475,91477,91479],{"class":53,"line":439},[51,91466,11605],{"class":69},[51,91468,87305],{"class":278},[51,91470,13948],{"class":69},[51,91472,54768],{"class":65},[51,91474,54771],{"class":57},[51,91476,546],{"class":65},[51,91478,90518],{"class":61},[51,91480,282],{"class":65},[51,91482,91483,91485,91487,91489],{"class":53,"line":444},[51,91484,52591],{"class":69},[51,91486,9822],{"class":65},[51,91488,70],{"class":69},[51,91490,47705],{"class":278},[51,91492,91493,91495,91497],{"class":53,"line":453},[51,91494,70456],{"class":69},[51,91496,90537],{"class":57},[51,91498,11237],{"class":65},[51,91500,91501,91503,91505,91507],{"class":53,"line":2174},[51,91502,90544],{"class":65},[51,91504,70],{"class":69},[51,91506,3419],{"class":65},[51,91508,3090],{"class":69},[51,91510,91511],{"class":53,"line":2965},[51,91512,90555],{"class":601},[51,91514,91515],{"class":53,"line":2979},[51,91516,2577],{"class":65},[51,91518,91519],{"class":53,"line":2987},[51,91520,90564],{"class":601},[51,91522,91523],{"class":53,"line":2992},[51,91524,91525],{"class":601},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[51,91527,91528],{"class":53,"line":2998},[51,91529,91530],{"class":601},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[51,91532,91533,91535,91537,91539,91541,91543,91546,91548,91550],{"class":53,"line":3004},[51,91534,90579],{"class":65},[51,91536,58185],{"class":57},[51,91538,546],{"class":65},[51,91540,90586],{"class":61},[51,91542,90589],{"class":65},[51,91544,91545],{"class":57},"throttle",[51,91547,90595],{"class":65},[51,91549,65446],{"class":278},[51,91551,30876],{"class":65},[51,91553,91554,91556,91558],{"class":53,"line":3009},[51,91555,52789],{"class":65},[51,91557,52185],{"class":51672},[51,91559,51679],{"class":65},[51,91561,91562,91564,91566],{"class":53,"line":8332},[51,91563,52157],{"class":65},[51,91565,52172],{"class":51672},[51,91567,51679],{"class":65},[51,91569,91570],{"class":53,"line":8356},[51,91571,206],{"emptyLinePlaceholder":205},[51,91573,91574,91576,91578],{"class":53,"line":8361},[51,91575,52157],{"class":65},[51,91577,51007],{"class":51672},[51,91579,51679],{"class":65},[1549,91581,91582],{},[22,91583,91584],{},"手写一个节流函数来处理",[10,91586,71324],{},[10,91588,90638],{},[10,91590,91591],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[10,91593,91594],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[41,91596,91598],{"className":51005,"code":91597,"language":51007,"meta":46,"style":46},"\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",[48,91599,91600,91610,91624,91628,91636,91650,91670,91682,91690,91696,91706,91718,91730,91740,91752,91762,91772,91784,91788,91796,91804,91808,91816,91834,91852,91860,91878,91888,91896,91906,91910,91914,91918,91923,91928,91933,91938,91943,91948,91965,91971,91979,91990,92005,92012,92017,92022,92032,92037,92042,92047,92051,92055,92059,92079,92087,92095,92099],{"__ignoreMap":46},[51,91601,91602,91604,91606,91608],{"class":53,"line":54},[51,91603,51669],{"class":65},[51,91605,51673],{"class":51672},[51,91607,51676],{"class":57},[51,91609,51679],{"class":65},[51,91611,91612,91614,91616,91618,91620,91622],{"class":53,"line":185},[51,91613,1452],{"class":65},[51,91615,51007],{"class":51672},[51,91617,51688],{"class":57},[51,91619,70],{"class":65},[51,91621,51693],{"class":61},[51,91623,51679],{"class":65},[51,91625,91626],{"class":53,"line":202},[51,91627,206],{"emptyLinePlaceholder":205},[51,91629,91630,91632,91634],{"class":53,"line":209},[51,91631,1452],{"class":65},[51,91633,51706],{"class":51672},[51,91635,51679],{"class":65},[51,91637,91638,91640,91642,91644,91646,91648],{"class":53,"line":223},[51,91639,52516],{"class":65},[51,91641,51716],{"class":51672},[51,91643,51719],{"class":57},[51,91645,70],{"class":65},[51,91647,51724],{"class":61},[51,91649,51679],{"class":65},[51,91651,91652,91654,91656,91658,91660,91662,91664,91666,91668],{"class":53,"line":237},[51,91653,52516],{"class":65},[51,91655,51716],{"class":51672},[51,91657,15304],{"class":57},[51,91659,70],{"class":65},[51,91661,51763],{"class":61},[51,91663,51743],{"class":57},[51,91665,70],{"class":65},[51,91667,51770],{"class":61},[51,91669,51679],{"class":65},[51,91671,91672,91674,91676,91678,91680],{"class":53,"line":242},[51,91673,52516],{"class":65},[51,91675,51779],{"class":51672},[51,91677,51782],{"class":65},[51,91679,51779],{"class":51672},[51,91681,51679],{"class":65},[51,91683,91684,91686,91688],{"class":53,"line":257},[51,91685,52516],{"class":65},[51,91687,464],{"class":51672},[51,91689,51679],{"class":65},[51,91691,91692,91694],{"class":53,"line":262},[51,91693,55124],{"class":57},[51,91695,15956],{"class":65},[51,91697,91698,91700,91702,91704],{"class":53,"line":285},[51,91699,72968],{"class":278},[51,91701,51809],{"class":65},[51,91703,60877],{"class":278},[51,91705,1703],{"class":65},[51,91707,91708,91710,91712,91714,91716],{"class":53,"line":296},[51,91709,55143],{"class":278},[51,91711,51809],{"class":65},[51,91713,2120],{"class":278},[51,91715,51864],{"class":69},[51,91717,1703],{"class":65},[51,91719,91720,91722,91724,91726,91728],{"class":53,"line":307},[51,91721,55157],{"class":278},[51,91723,51809],{"class":65},[51,91725,2120],{"class":278},[51,91727,51864],{"class":69},[51,91729,1703],{"class":65},[51,91731,91732,91734,91736,91738],{"class":53,"line":324},[51,91733,55256],{"class":278},[51,91735,51809],{"class":65},[51,91737,90378],{"class":278},[51,91739,1703],{"class":65},[51,91741,91742,91744,91746,91748,91750],{"class":53,"line":329},[51,91743,55294],{"class":278},[51,91745,51809],{"class":65},[51,91747,1367],{"class":278},[51,91749,51864],{"class":69},[51,91751,1703],{"class":65},[51,91753,91754,91756,91758,91760],{"class":53,"line":334},[51,91755,57788],{"class":278},[51,91757,51809],{"class":65},[51,91759,61214],{"class":278},[51,91761,1703],{"class":65},[51,91763,91764,91766,91768,91770],{"class":53,"line":340},[51,91765,57658],{"class":278},[51,91767,51809],{"class":65},[51,91769,51964],{"class":278},[51,91771,1703],{"class":65},[51,91773,91774,91776,91778,91780,91782],{"class":53,"line":345},[51,91775,90417],{"class":278},[51,91777,51809],{"class":65},[51,91779,861],{"class":278},[51,91781,51864],{"class":69},[51,91783,1703],{"class":65},[51,91785,91786],{"class":53,"line":357},[51,91787,2577],{"class":65},[51,91789,91790,91792,91794],{"class":53,"line":366},[51,91791,52789],{"class":65},[51,91793,464],{"class":51672},[51,91795,51679],{"class":65},[51,91797,91798,91800,91802],{"class":53,"line":383},[51,91799,52157],{"class":65},[51,91801,51706],{"class":51672},[51,91803,51679],{"class":65},[51,91805,91806],{"class":53,"line":392},[51,91807,206],{"emptyLinePlaceholder":205},[51,91809,91810,91812,91814],{"class":53,"line":403},[51,91811,1452],{"class":65},[51,91813,52172],{"class":51672},[51,91815,51679],{"class":65},[51,91817,91818,91820,91822,91824,91826,91828,91830,91832],{"class":53,"line":409},[51,91819,52516],{"class":65},[51,91821,51983],{"class":51672},[51,91823,53858],{"class":57},[51,91825,70],{"class":65},[51,91827,53863],{"class":61},[51,91829,55686],{"class":65},[51,91831,51983],{"class":51672},[51,91833,51679],{"class":65},[51,91835,91836,91838,91840,91842,91844,91846,91848,91850],{"class":53,"line":414},[51,91837,52516],{"class":65},[51,91839,52185],{"class":51672},[51,91841,55611],{"class":57},[51,91843,70],{"class":65},[51,91845,88646],{"class":61},[51,91847,55686],{"class":65},[51,91849,52185],{"class":51672},[51,91851,51679],{"class":65},[51,91853,91854,91856,91858],{"class":53,"line":433},[51,91855,52516],{"class":65},[51,91857,52185],{"class":51672},[51,91859,51679],{"class":65},[51,91861,91862,91864,91866,91868,91870,91872,91874,91876],{"class":53,"line":439},[51,91863,11605],{"class":69},[51,91865,87305],{"class":278},[51,91867,13948],{"class":69},[51,91869,54768],{"class":65},[51,91871,54771],{"class":57},[51,91873,546],{"class":65},[51,91875,90518],{"class":61},[51,91877,282],{"class":65},[51,91879,91880,91882,91884,91886],{"class":53,"line":444},[51,91881,52591],{"class":69},[51,91883,9822],{"class":65},[51,91885,70],{"class":69},[51,91887,47705],{"class":278},[51,91889,91890,91892,91894],{"class":53,"line":453},[51,91891,70456],{"class":69},[51,91893,90537],{"class":57},[51,91895,11237],{"class":65},[51,91897,91898,91900,91902,91904],{"class":53,"line":2174},[51,91899,90544],{"class":65},[51,91901,70],{"class":69},[51,91903,3419],{"class":65},[51,91905,3090],{"class":69},[51,91907,91908],{"class":53,"line":2965},[51,91909,90555],{"class":601},[51,91911,91912],{"class":53,"line":2979},[51,91913,2577],{"class":65},[51,91915,91916],{"class":53,"line":2987},[51,91917,90564],{"class":601},[51,91919,91920],{"class":53,"line":2992},[51,91921,91922],{"class":601},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[51,91924,91925],{"class":53,"line":2998},[51,91926,91927],{"class":601},"    \u002F\u002F 1.声明一个定时器变量\n",[51,91929,91930],{"class":53,"line":3004},[51,91931,91932],{"class":601},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[51,91934,91935],{"class":53,"line":3009},[51,91936,91937],{"class":601},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[51,91939,91940],{"class":53,"line":8332},[51,91941,91942],{"class":601},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[51,91944,91945],{"class":53,"line":8356},[51,91946,91947],{"class":601},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[51,91949,91950,91952,91955,91957,91959,91961,91963],{"class":53,"line":8361},[51,91951,70456],{"class":69},[51,91953,91954],{"class":57}," throttle",[51,91956,546],{"class":65},[51,91958,91009],{"class":248},[51,91960,12819],{"class":65},[51,91962,1262],{"class":248},[51,91964,12826],{"class":65},[51,91966,91967,91969],{"class":53,"line":8367},[51,91968,80144],{"class":69},[51,91970,91022],{"class":65},[51,91972,91973,91975,91977],{"class":53,"line":8394},[51,91974,74354],{"class":69},[51,91976,59290],{"class":69},[51,91978,54824],{"class":65},[51,91980,91981,91983,91985,91987],{"class":53,"line":8399},[51,91982,369],{"class":69},[51,91984,2060],{"class":65},[51,91986,768],{"class":69},[51,91988,91989],{"class":65},"timer) {\n",[51,91991,91992,91995,91997,91999,92001,92003],{"class":53,"line":8405},[51,91993,91994],{"class":65},"          timer ",[51,91996,70],{"class":69},[51,91998,91063],{"class":57},[51,92000,546],{"class":65},[51,92002,54821],{"class":69},[51,92004,54824],{"class":65},[51,92006,92007,92010],{"class":53,"line":8417},[51,92008,92009],{"class":57},"            fn",[51,92011,2366],{"class":65},[51,92013,92014],{"class":53,"line":8429},[51,92015,92016],{"class":601},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[51,92018,92019],{"class":53,"line":8441},[51,92020,92021],{"class":601},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[51,92023,92024,92027,92029],{"class":53,"line":10100},[51,92025,92026],{"class":65},"            timer ",[51,92028,70],{"class":69},[51,92030,92031],{"class":278}," null\n",[51,92033,92034],{"class":53,"line":10125},[51,92035,92036],{"class":601},"            \u002F\u002F 不能用clearTimeout(timer)\n",[51,92038,92039],{"class":53,"line":10148},[51,92040,92041],{"class":601},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[51,92043,92044],{"class":53,"line":10172},[51,92045,92046],{"class":65},"          }, t)\n",[51,92048,92049],{"class":53,"line":10177},[51,92050,2917],{"class":65},[51,92052,92053],{"class":53,"line":10182},[51,92054,52770],{"class":65},[51,92056,92057],{"class":53,"line":10187},[51,92058,2577],{"class":65},[51,92060,92061,92063,92065,92067,92069,92071,92073,92075,92077],{"class":53,"line":10196},[51,92062,90579],{"class":65},[51,92064,58185],{"class":57},[51,92066,546],{"class":65},[51,92068,90586],{"class":61},[51,92070,12819],{"class":65},[51,92072,91545],{"class":57},[51,92074,90595],{"class":65},[51,92076,65446],{"class":278},[51,92078,30876],{"class":65},[51,92080,92081,92083,92085],{"class":53,"line":10201},[51,92082,52789],{"class":65},[51,92084,52185],{"class":51672},[51,92086,51679],{"class":65},[51,92088,92089,92091,92093],{"class":53,"line":10207},[51,92090,52157],{"class":65},[51,92092,52172],{"class":51672},[51,92094,51679],{"class":65},[51,92096,92097],{"class":53,"line":10228},[51,92098,206],{"emptyLinePlaceholder":205},[51,92100,92101,92103,92105],{"class":53,"line":10234},[51,92102,52157],{"class":65},[51,92104,51007],{"class":51672},[51,92106,51679],{"class":65},[513,92108,92110],{"id":92109},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[41,92112,92114],{"className":53439,"code":92113,"language":53441,"meta":46,"style":46},"\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",[48,92115,92116,92124,92132,92137,92142,92147,92152,92156,92164],{"__ignoreMap":46},[51,92117,92118,92120,92122],{"class":53,"line":54},[51,92119,1452],{"class":65},[51,92121,52172],{"class":51672},[51,92123,51679],{"class":65},[51,92125,92126,92128,92130],{"class":53,"line":185},[51,92127,52516],{"class":65},[51,92129,52185],{"class":51672},[51,92131,51679],{"class":65},[51,92133,92134],{"class":53,"line":202},[51,92135,92136],{"class":65},"    let timer = null\n",[51,92138,92139],{"class":53,"line":209},[51,92140,92141],{"class":65},"    timer = setTimeout(() => {\n",[51,92143,92144],{"class":53,"line":223},[51,92145,92146],{"class":65},"      clearTimeout(timer)\n",[51,92148,92149],{"class":53,"line":237},[51,92150,92151],{"class":65},"      console.log(timer)\n",[51,92153,92154],{"class":53,"line":242},[51,92155,60597],{"class":65},[51,92157,92158,92160,92162],{"class":53,"line":257},[51,92159,52789],{"class":65},[51,92161,52185],{"class":51672},[51,92163,51679],{"class":65},[51,92165,92166,92168,92170],{"class":53,"line":262},[51,92167,52157],{"class":65},[51,92169,52172],{"class":51672},[51,92171,51679],{"class":65},[10,92173,92174],{},"输出为1",[10,92176,92177],{},"在开启的定时器里边写清除定时器",[10,92179,92180],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[513,92182,92184],{"id":92183},"_4174-节流综合案例","4.17.4 节流综合案例",[10,92186,92187],{},"页面打开，可以记录上一次的视频播放位置",[10,92189,92190],{},[460,92191],{"alt":46,"src":92192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[10,92194,92195],{},[460,92196],{"alt":46,"src":92197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[41,92199,92201],{"className":51005,"code":92200,"language":51007,"meta":46,"style":46},"\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",[48,92202,92203,92213,92227,92231,92239,92253,92273,92293,92315,92328,92336,92342,92352,92362,92372,92376,92380,92387,92400,92412,92416,92420,92430,92442,92456,92460,92464,92471,92481,92494,92506,92516,92526,92542,92554,92558,92562,92570,92580,92592,92602,92612,92622,92626,92630,92640,92651,92655,92663,92671,92675,92683,92698,92713,92728,92749,92757,92765,92780,92802,92810,92825,92851,92877,92903,92911,92919,92938,92946,92951,92970,92975,92993,92998,93003,93011,93016,93030,93038,93043,93060,93064,93069,93091,93095,93103,93111,93115],{"__ignoreMap":46},[51,92204,92205,92207,92209,92211],{"class":53,"line":54},[51,92206,51669],{"class":65},[51,92208,51673],{"class":51672},[51,92210,51676],{"class":57},[51,92212,51679],{"class":65},[51,92214,92215,92217,92219,92221,92223,92225],{"class":53,"line":185},[51,92216,1452],{"class":65},[51,92218,51007],{"class":51672},[51,92220,51688],{"class":57},[51,92222,70],{"class":65},[51,92224,51693],{"class":61},[51,92226,51679],{"class":65},[51,92228,92229],{"class":53,"line":202},[51,92230,206],{"emptyLinePlaceholder":205},[51,92232,92233,92235,92237],{"class":53,"line":209},[51,92234,1452],{"class":65},[51,92236,51706],{"class":51672},[51,92238,51679],{"class":65},[51,92240,92241,92243,92245,92247,92249,92251],{"class":53,"line":223},[51,92242,52516],{"class":65},[51,92244,51716],{"class":51672},[51,92246,51719],{"class":57},[51,92248,70],{"class":65},[51,92250,51724],{"class":61},[51,92252,59499],{"class":65},[51,92254,92255,92257,92259,92261,92263,92265,92267,92269,92271],{"class":53,"line":237},[51,92256,52516],{"class":65},[51,92258,51716],{"class":51672},[51,92260,51735],{"class":57},[51,92262,70],{"class":65},[51,92264,51740],{"class":61},[51,92266,51743],{"class":57},[51,92268,70],{"class":65},[51,92270,51748],{"class":61},[51,92272,59499],{"class":65},[51,92274,92275,92277,92279,92281,92283,92285,92287,92289,92291],{"class":53,"line":242},[51,92276,52516],{"class":65},[51,92278,51716],{"class":51672},[51,92280,15304],{"class":57},[51,92282,70],{"class":65},[51,92284,51763],{"class":61},[51,92286,51743],{"class":57},[51,92288,70],{"class":65},[51,92290,51770],{"class":61},[51,92292,59499],{"class":65},[51,92294,92295,92297,92299,92301,92303,92306,92308,92310,92313],{"class":53,"line":257},[51,92296,52516],{"class":65},[51,92298,51716],{"class":51672},[51,92300,15304],{"class":57},[51,92302,70],{"class":65},[51,92304,92305],{"class":61},"\"referrer\"",[51,92307,51743],{"class":57},[51,92309,70],{"class":65},[51,92311,92312],{"class":61},"\"never\"",[51,92314,59499],{"class":65},[51,92316,92317,92319,92321,92324,92326],{"class":53,"line":262},[51,92318,52516],{"class":65},[51,92320,51779],{"class":51672},[51,92322,92323],{"class":65},">综合案例\u003C\u002F",[51,92325,51779],{"class":51672},[51,92327,51679],{"class":65},[51,92329,92330,92332,92334],{"class":53,"line":285},[51,92331,52516],{"class":65},[51,92333,464],{"class":51672},[51,92335,51679],{"class":65},[51,92337,92338,92340],{"class":53,"line":296},[51,92339,6787],{"class":51672},[51,92341,15956],{"class":65},[51,92343,92344,92346,92348,92350],{"class":53,"line":307},[51,92345,55067],{"class":278},[51,92347,51809],{"class":65},[51,92349,733],{"class":278},[51,92351,1703],{"class":65},[51,92353,92354,92356,92358,92360],{"class":53,"line":324},[51,92355,55078],{"class":278},[51,92357,51809],{"class":65},[51,92359,733],{"class":278},[51,92361,1703],{"class":65},[51,92363,92364,92366,92368,92370],{"class":53,"line":329},[51,92365,72968],{"class":278},[51,92367,51809],{"class":65},[51,92369,60877],{"class":278},[51,92371,1703],{"class":65},[51,92373,92374],{"class":53,"line":334},[51,92375,2577],{"class":65},[51,92377,92378],{"class":53,"line":340},[51,92379,206],{"emptyLinePlaceholder":205},[51,92381,92382,92385],{"class":53,"line":345},[51,92383,92384],{"class":57},"    .container",[51,92386,15956],{"class":65},[51,92388,92389,92391,92393,92396,92398],{"class":53,"line":357},[51,92390,55143],{"class":278},[51,92392,51809],{"class":65},[51,92394,92395],{"class":278},"1200",[51,92397,51864],{"class":69},[51,92399,1703],{"class":65},[51,92401,92402,92404,92406,92408,92410],{"class":53,"line":366},[51,92403,55078],{"class":278},[51,92405,51809],{"class":65},[51,92407,733],{"class":278},[51,92409,51928],{"class":278},[51,92411,1703],{"class":65},[51,92413,92414],{"class":53,"line":383},[51,92415,2577],{"class":65},[51,92417,92418],{"class":53,"line":392},[51,92419,206],{"emptyLinePlaceholder":205},[51,92421,92422,92425,92428],{"class":53,"line":403},[51,92423,92424],{"class":57},"    .video",[51,92426,92427],{"class":51672}," video",[51,92429,15956],{"class":65},[51,92431,92432,92434,92436,92438,92440],{"class":53,"line":409},[51,92433,55143],{"class":278},[51,92435,51809],{"class":65},[51,92437,853],{"class":278},[51,92439,870],{"class":69},[51,92441,1703],{"class":65},[51,92443,92444,92446,92448,92450,92452,92454],{"class":53,"line":414},[51,92445,55067],{"class":278},[51,92447,51809],{"class":65},[51,92449,1242],{"class":278},[51,92451,51864],{"class":69},[51,92453,4479],{"class":278},[51,92455,1703],{"class":65},[51,92457,92458],{"class":53,"line":433},[51,92459,2577],{"class":65},[51,92461,92462],{"class":53,"line":439},[51,92463,206],{"emptyLinePlaceholder":205},[51,92465,92466,92469],{"class":53,"line":444},[51,92467,92468],{"class":57},"    .elevator",[51,92470,15956],{"class":65},[51,92472,92473,92475,92477,92479],{"class":53,"line":453},[51,92474,55131],{"class":278},[51,92476,51809],{"class":65},[51,92478,86605],{"class":278},[51,92480,1703],{"class":65},[51,92482,92483,92485,92487,92490,92492],{"class":53,"line":2174},[51,92484,55319],{"class":278},[51,92486,51809],{"class":65},[51,92488,92489],{"class":278},"280",[51,92491,51864],{"class":69},[51,92493,1703],{"class":65},[51,92495,92496,92498,92500,92502,92504],{"class":53,"line":2965},[51,92497,86799],{"class":278},[51,92499,51809],{"class":65},[51,92501,1242],{"class":278},[51,92503,51864],{"class":69},[51,92505,1703],{"class":65},[51,92507,92508,92510,92512,92514],{"class":53,"line":2979},[51,92509,86612],{"class":278},[51,92511,51809],{"class":65},[51,92513,86617],{"class":278},[51,92515,1703],{"class":65},[51,92517,92518,92520,92522,92524],{"class":53,"line":2987},[51,92519,62093],{"class":278},[51,92521,51809],{"class":65},[51,92523,61214],{"class":278},[51,92525,1703],{"class":65},[51,92527,92528,92530,92532,92534,92536,92538,92540],{"class":53,"line":2992},[51,92529,62349],{"class":278},[51,92531,51809],{"class":65},[51,92533,759],{"class":278},[51,92535,51864],{"class":69},[51,92537,51893],{"class":278},[51,92539,62616],{"class":278},[51,92541,1703],{"class":65},[51,92543,92544,92546,92548,92550,92552],{"class":53,"line":2998},[51,92545,55143],{"class":278},[51,92547,51809],{"class":65},[51,92549,1449],{"class":278},[51,92551,51864],{"class":69},[51,92553,1703],{"class":65},[51,92555,92556],{"class":53,"line":3004},[51,92557,2577],{"class":65},[51,92559,92560],{"class":53,"line":3009},[51,92561,206],{"emptyLinePlaceholder":205},[51,92563,92564,92566,92568],{"class":53,"line":8332},[51,92565,92468],{"class":57},[51,92567,1808],{"class":51672},[51,92569,15956],{"class":65},[51,92571,92572,92574,92576,92578],{"class":53,"line":8356},[51,92573,55381],{"class":278},[51,92575,51809],{"class":65},[51,92577,61241],{"class":278},[51,92579,1703],{"class":65},[51,92581,92582,92584,92586,92588,92590],{"class":53,"line":8361},[51,92583,55067],{"class":278},[51,92585,51809],{"class":65},[51,92587,988],{"class":278},[51,92589,51864],{"class":69},[51,92591,1703],{"class":65},[51,92593,92594,92596,92598,92600],{"class":53,"line":8367},[51,92595,64342],{"class":278},[51,92597,51809],{"class":65},[51,92599,55109],{"class":278},[51,92601,1703],{"class":65},[51,92603,92604,92606,92608,92610],{"class":53,"line":8394},[51,92605,57658],{"class":278},[51,92607,51809],{"class":65},[51,92609,51964],{"class":278},[51,92611,1703],{"class":65},[51,92613,92614,92616,92618,92620],{"class":53,"line":8399},[51,92615,57788],{"class":278},[51,92617,51809],{"class":65},[51,92619,62442],{"class":278},[51,92621,1703],{"class":65},[51,92623,92624],{"class":53,"line":8405},[51,92625,2577],{"class":65},[51,92627,92628],{"class":53,"line":8417},[51,92629,206],{"emptyLinePlaceholder":205},[51,92631,92632,92634,92636,92638],{"class":53,"line":8429},[51,92633,92468],{"class":57},[51,92635,1808],{"class":51672},[51,92637,64396],{"class":57},[51,92639,15956],{"class":65},[51,92641,92642,92644,92646,92649],{"class":53,"line":8441},[51,92643,57788],{"class":278},[51,92645,51809],{"class":65},[51,92647,92648],{"class":278},"#1286ff",[51,92650,1703],{"class":65},[51,92652,92653],{"class":53,"line":10100},[51,92654,2577],{"class":65},[51,92656,92657,92659,92661],{"class":53,"line":10125},[51,92658,52789],{"class":65},[51,92660,464],{"class":51672},[51,92662,51679],{"class":65},[51,92664,92665,92667,92669],{"class":53,"line":10148},[51,92666,52157],{"class":65},[51,92668,51706],{"class":51672},[51,92670,51679],{"class":65},[51,92672,92673],{"class":53,"line":10172},[51,92674,206],{"emptyLinePlaceholder":205},[51,92676,92677,92679,92681],{"class":53,"line":10177},[51,92678,1452],{"class":65},[51,92680,52172],{"class":51672},[51,92682,51679],{"class":65},[51,92684,92685,92687,92689,92691,92693,92696],{"class":53,"line":10182},[51,92686,52516],{"class":65},[51,92688,51983],{"class":51672},[51,92690,53858],{"class":57},[51,92692,70],{"class":65},[51,92694,92695],{"class":61},"\"container\"",[51,92697,51679],{"class":65},[51,92699,92700,92702,92704,92706,92708,92711],{"class":53,"line":10187},[51,92701,51713],{"class":65},[51,92703,51983],{"class":51672},[51,92705,53858],{"class":57},[51,92707,70],{"class":65},[51,92709,92710],{"class":61},"\"header\"",[51,92712,51679],{"class":65},[51,92714,92715,92717,92719,92721,92723,92726],{"class":53,"line":10196},[51,92716,55606],{"class":65},[51,92718,780],{"class":51672},[51,92720,61429],{"class":57},[51,92722,70],{"class":65},[51,92724,92725],{"class":61},"\"http:\u002F\u002Fpip.itcast.cn\"",[51,92727,51679],{"class":65},[51,92729,92730,92732,92734,92736,92738,92741,92743,92745,92747],{"class":53,"line":10201},[51,92731,55674],{"class":65},[51,92733,460],{"class":51672},[51,92735,55611],{"class":57},[51,92737,70],{"class":65},[51,92739,92740],{"class":61},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[51,92742,55619],{"class":57},[51,92744,70],{"class":65},[51,92746,8036],{"class":61},[51,92748,59499],{"class":65},[51,92750,92751,92753,92755],{"class":53,"line":10207},[51,92752,55779],{"class":65},[51,92754,780],{"class":51672},[51,92756,51679],{"class":65},[51,92758,92759,92761,92763],{"class":53,"line":10228},[51,92760,52148],{"class":65},[51,92762,51983],{"class":51672},[51,92764,51679],{"class":65},[51,92766,92767,92769,92771,92773,92775,92778],{"class":53,"line":10234},[51,92768,51713],{"class":65},[51,92770,51983],{"class":51672},[51,92772,53858],{"class":57},[51,92774,70],{"class":65},[51,92776,92777],{"class":61},"\"video\"",[51,92779,51679],{"class":65},[51,92781,92782,92784,92786,92788,92790,92793,92796,92798,92800],{"class":53,"line":10248},[51,92783,55606],{"class":65},[51,92785,28565],{"class":51672},[51,92787,55611],{"class":57},[51,92789,70],{"class":65},[51,92791,92792],{"class":61},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[51,92794,92795],{"class":57}," controls",[51,92797,55686],{"class":65},[51,92799,28565],{"class":51672},[51,92801,51679],{"class":65},[51,92803,92804,92806,92808],{"class":53,"line":10254},[51,92805,52148],{"class":65},[51,92807,51983],{"class":51672},[51,92809,51679],{"class":65},[51,92811,92812,92814,92816,92818,92820,92823],{"class":53,"line":10281},[51,92813,51713],{"class":65},[51,92815,51983],{"class":51672},[51,92817,53858],{"class":57},[51,92819,70],{"class":65},[51,92821,92822],{"class":61},"\"elevator\"",[51,92824,51679],{"class":65},[51,92826,92827,92829,92831,92833,92835,92837,92840,92842,92844,92847,92849],{"class":53,"line":10290},[51,92828,55606],{"class":65},[51,92830,780],{"class":51672},[51,92832,61429],{"class":57},[51,92834,70],{"class":65},[51,92836,64608],{"class":61},[51,92838,92839],{"class":57}," data-ref",[51,92841,70],{"class":65},[51,92843,92777],{"class":61},[51,92845,92846],{"class":65},">视频介绍\u003C\u002F",[51,92848,780],{"class":51672},[51,92850,51679],{"class":65},[51,92852,92853,92855,92857,92859,92861,92863,92865,92867,92870,92873,92875],{"class":53,"line":10296},[51,92854,55606],{"class":65},[51,92856,780],{"class":51672},[51,92858,61429],{"class":57},[51,92860,70],{"class":65},[51,92862,64608],{"class":61},[51,92864,92839],{"class":57},[51,92866,70],{"class":65},[51,92868,92869],{"class":61},"\"intro\"",[51,92871,92872],{"class":65},">课程简介\u003C\u002F",[51,92874,780],{"class":51672},[51,92876,51679],{"class":65},[51,92878,92879,92881,92883,92885,92887,92889,92891,92893,92896,92899,92901],{"class":53,"line":10304},[51,92880,55606],{"class":65},[51,92882,780],{"class":51672},[51,92884,61429],{"class":57},[51,92886,70],{"class":65},[51,92888,64608],{"class":61},[51,92890,92839],{"class":57},[51,92892,70],{"class":65},[51,92894,92895],{"class":61},"\"outline\"",[51,92897,92898],{"class":65},">评论列表\u003C\u002F",[51,92900,780],{"class":51672},[51,92902,51679],{"class":65},[51,92904,92905,92907,92909],{"class":53,"line":10309},[51,92906,52148],{"class":65},[51,92908,51983],{"class":51672},[51,92910,51679],{"class":65},[51,92912,92913,92915,92917],{"class":53,"line":16987},[51,92914,52789],{"class":65},[51,92916,51983],{"class":51672},[51,92918,51679],{"class":65},[51,92920,92921,92923,92925,92927,92929,92932,92934,92936],{"class":53,"line":16993},[51,92922,52516],{"class":65},[51,92924,52185],{"class":51672},[51,92926,55611],{"class":57},[51,92928,70],{"class":65},[51,92930,92931],{"class":61},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[51,92933,55686],{"class":65},[51,92935,52185],{"class":51672},[51,92937,51679],{"class":65},[51,92939,92940,92942,92944],{"class":53,"line":17016},[51,92941,52516],{"class":65},[51,92943,52185],{"class":51672},[51,92945,51679],{"class":65},[51,92947,92948],{"class":53,"line":17022},[51,92949,92950],{"class":601},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[51,92952,92953,92955,92957,92959,92961,92963,92965,92968],{"class":53,"line":17045},[51,92954,11605],{"class":69},[51,92956,92427],{"class":278},[51,92958,13948],{"class":69},[51,92960,54768],{"class":65},[51,92962,54771],{"class":57},[51,92964,546],{"class":65},[51,92966,92967],{"class":61},"'video'",[51,92969,282],{"class":65},[51,92971,92972],{"class":53,"line":17059},[51,92973,92974],{"class":601},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[51,92976,92977,92980,92982,92984,92986,92989,92991],{"class":53,"line":17079},[51,92978,92979],{"class":65},"    video.ontimeupdate ",[51,92981,70],{"class":69},[51,92983,88727],{"class":65},[51,92985,91545],{"class":57},[51,92987,92988],{"class":65},"(() ",[51,92990,85094],{"class":69},[51,92992,15956],{"class":65},[51,92994,92995],{"class":53,"line":17085},[51,92996,92997],{"class":601},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[51,92999,93000],{"class":53,"line":17096},[51,93001,93002],{"class":601},"      \u002F\u002F 控制台输出当前的时间\n",[51,93004,93005,93008],{"class":53,"line":17119},[51,93006,93007],{"class":601},"      \u002F\u002F console.log(video.currentTime)",[51,93009,93010],{"class":601},"  \u002F\u002F获得当前的视频时间\n",[51,93012,93013],{"class":53,"line":17141},[51,93014,93015],{"class":601},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[51,93017,93018,93020,93022,93024,93027],{"class":53,"line":17146},[51,93019,75055],{"class":65},[51,93021,72026],{"class":57},[51,93023,546],{"class":65},[51,93025,93026],{"class":61},"'currentTime'",[51,93028,93029],{"class":65},", video.currentTime)\n",[51,93031,93032,93034,93036],{"class":53,"line":17152},[51,93033,54907],{"class":65},[51,93035,6794],{"class":278},[51,93037,282],{"class":65},[51,93039,93040],{"class":53,"line":17166},[51,93041,93042],{"class":601},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[51,93044,93045,93048,93051,93053,93056,93058],{"class":53,"line":17179},[51,93046,93047],{"class":65},"    video.",[51,93049,93050],{"class":57},"onloadeddata",[51,93052,13948],{"class":69},[51,93054,93055],{"class":65}," () ",[51,93057,85094],{"class":69},[51,93059,15956],{"class":65},[51,93061,93062],{"class":53,"line":17184},[51,93063,60384],{"class":601},[51,93065,93066],{"class":53,"line":17198},[51,93067,93068],{"class":601},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[51,93070,93071,93074,93076,93079,93081,93083,93085,93087,93089],{"class":53,"line":17203},[51,93072,93073],{"class":65},"      video.currentTime ",[51,93075,70],{"class":69},[51,93077,93078],{"class":65}," localStorage.",[51,93080,72057],{"class":57},[51,93082,546],{"class":65},[51,93084,93026],{"class":61},[51,93086,14098],{"class":65},[51,93088,71729],{"class":69},[51,93090,47705],{"class":278},[51,93092,93093],{"class":53,"line":17209},[51,93094,2577],{"class":65},[51,93096,93097,93099,93101],{"class":53,"line":17214},[51,93098,52789],{"class":65},[51,93100,52185],{"class":51672},[51,93102,51679],{"class":65},[51,93104,93105,93107,93109],{"class":53,"line":17228},[51,93106,52157],{"class":65},[51,93108,52172],{"class":51672},[51,93110,51679],{"class":65},[51,93112,93113],{"class":53,"line":17233},[51,93114,206],{"emptyLinePlaceholder":205},[51,93116,93117,93119,93121],{"class":53,"line":17238},[51,93118,52157],{"class":65},[51,93120,51007],{"class":51672},[51,93122,51679],{"class":65},[464,93124,93125],{},"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":46,"searchDepth":185,"depth":185,"links":93127},[93128,93133,93137,93138,93139,93144,93149,93150,93151,93152,93159,93164,93165,93175,93179,93180,93184],{"id":77063,"depth":185,"text":77064,"children":93129},[93130,93131,93132],{"id":77067,"depth":202,"text":77068},{"id":77092,"depth":202,"text":77093},{"id":77104,"depth":202,"text":77105},{"id":77116,"depth":185,"text":77117,"children":93134},[93135,93136],{"id":77120,"depth":202,"text":77121},{"id":77135,"depth":202,"text":77136},{"id":77187,"depth":185,"text":77188},{"id":77231,"depth":185,"text":77232},{"id":77248,"depth":185,"text":77249,"children":93140},[93141,93142,93143],{"id":77252,"depth":202,"text":77253},{"id":77265,"depth":202,"text":77266},{"id":77370,"depth":202,"text":77371},{"id":77659,"depth":185,"text":77660,"children":93145},[93146,93147,93148],{"id":77663,"depth":202,"text":77664},{"id":78106,"depth":202,"text":78107},{"id":78517,"depth":202,"text":78518},{"id":78580,"depth":185,"text":78581},{"id":78659,"depth":185,"text":78660},{"id":78752,"depth":185,"text":78753},{"id":80597,"depth":185,"text":80598,"children":93153},[93154,93155,93156,93157,93158],{"id":80601,"depth":202,"text":80602},{"id":80613,"depth":202,"text":80614},{"id":80832,"depth":202,"text":80833},{"id":80850,"depth":202,"text":80851},{"id":80910,"depth":202,"text":80911},{"id":85178,"depth":185,"text":85179,"children":93160},[93161,93162,93163],{"id":85182,"depth":202,"text":85183},{"id":85200,"depth":202,"text":85201},{"id":85226,"depth":202,"text":85227},{"id":85235,"depth":185,"text":85236},{"id":85257,"depth":185,"text":85258,"children":93166},[93167,93168,93169,93170,93171,93172,93173,93174],{"id":85261,"depth":202,"text":85262},{"id":85522,"depth":202,"text":85523},{"id":85708,"depth":202,"text":85709},{"id":86075,"depth":202,"text":86076},{"id":86191,"depth":202,"text":86192},{"id":86227,"depth":202,"text":86228},{"id":86274,"depth":202,"text":86275},{"id":86308,"depth":202,"text":86309},{"id":87671,"depth":185,"text":87672,"children":93176},[93177,93178],{"id":87675,"depth":202,"text":87676},{"id":87712,"depth":202,"text":87713},{"id":89067,"depth":185,"text":89068},{"id":89438,"depth":185,"text":89439,"children":93181},[93182,93183],{"id":89442,"depth":202,"text":89443},{"id":89476,"depth":202,"text":89477},{"id":90205,"depth":185,"text":90206,"children":93185},[93186,93187,93188,93189],{"id":90209,"depth":202,"text":90210},{"id":91167,"depth":202,"text":91168},{"id":92109,"depth":202,"text":92110},{"id":92183,"depth":202,"text":92184},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77052,"description":23760},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93196,"title":93197,"body":93198,"description":93209,"extension":469,"meta":93210,"navigation":205,"path":93212,"seo":93213,"stem":93214,"__hash__":93215},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93199,"toc":93207},[93200],[10,93201,93202,93203],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[780,93204,93205],{"href":93205,"rel":93206},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24246],{"title":46,"searchDepth":185,"depth":185,"links":93208},[],"三件套第三套学习",{"category":93211},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93197,"description":93209},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93217,"title":93218,"body":93219,"description":23760,"extension":469,"meta":93324,"navigation":205,"path":93325,"seo":93326,"stem":93327,"__hash__":93328},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93220,"toc":93319},[93221,93228,93231,93234,93237,93241,93250,93253,93256,93260,93269,93272,93276,93279,93299,93302,93316],[10,93222,93223],{},[780,93224,93227],{"href":93225,"rel":93226},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24246],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[14,93229,93218],{"id":93230},"_1安装",[10,93232,93233],{},"numpy是科学计算基础库,底层是C语言",[10,93235,93236],{},"三种方式：",[486,93238,93240],{"id":93239},"_11-通过pip安装","1.1 通过pip安装",[41,93242,93244],{"className":170,"code":93243,"language":172,"meta":46,"style":46},"pip install numpy\n",[48,93245,93246],{"__ignoreMap":46},[51,93247,93248],{"class":53,"line":54},[51,93249,93243],{"class":65},[10,93251,93252],{},"首选方式，自动处理依赖项",[10,93254,93255],{},"在提示系统命令符中使用cmd",[486,93257,93259],{"id":93258},"_12-通过anaconda安装","1.2 通过Anaconda安装",[41,93261,93263],{"className":170,"code":93262,"language":172,"meta":46,"style":46},"conda install numpy\n",[48,93264,93265],{"__ignoreMap":46},[51,93266,93267],{"class":53,"line":54},[51,93268,93262],{"class":65},[10,93270,93271],{},"自动解决环境依赖",[486,93273,93275],{"id":93274},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[10,93277,93278],{},"对于Debian\u002FUbuntu",[41,93280,93282],{"className":170,"code":93281,"language":172,"meta":46,"style":46},"sudo apt-get install python3-numpy\n",[48,93283,93284],{"__ignoreMap":46},[51,93285,93286,93289,93291,93294,93296],{"class":53,"line":54},[51,93287,93288],{"class":65},"sudo apt",[51,93290,1074],{"class":69},[51,93292,93293],{"class":65},"get install python3",[51,93295,1074],{"class":69},[51,93297,93298],{"class":65},"numpy\n",[10,93300,93301],{},"对于Fedora:",[41,93303,93305],{"className":170,"code":93304,"language":172,"meta":46,"style":46},"sudo dnf install python3-numpy\n",[48,93306,93307],{"__ignoreMap":46},[51,93308,93309,93312,93314],{"class":53,"line":54},[51,93310,93311],{"class":65},"sudo dnf install python3",[51,93313,1074],{"class":69},[51,93315,93298],{"class":65},[464,93317,93318],{},"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":46,"searchDepth":185,"depth":185,"links":93320},[93321,93322,93323],{"id":93239,"depth":185,"text":93240},{"id":93258,"depth":185,"text":93259},{"id":93274,"depth":185,"text":93275},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93218,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93330,"title":93331,"body":93332,"description":23760,"extension":469,"meta":93445,"navigation":205,"path":93446,"seo":93447,"stem":93448,"__hash__":93449},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93333,"toc":93443},[93334,93337,93340,93343,93346,93349,93352,93355,93358,93361,93437,93440],[14,93335,93331],{"id":93336},"_10算数函数",[10,93338,93339],{},"加减乘除运算跟python基础语法没区别",[10,93341,93342],{},"除了python那种方法外还可以使用函数",[10,93344,93345],{},"加：np.add(a,b)",[10,93347,93348],{},"减：np.subtract(a,b)",[10,93350,93351],{},"乘：np.multiply(a,b)",[10,93353,93354],{},"除：np.divide(a,b) == a\u002Fb",[10,93356,93357],{},"取余：np.mod(a,b) == a%b",[10,93359,93360],{},"必须会的用法：",[41,93362,93364],{"className":170,"code":93363,"language":172,"meta":46,"style":46},"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",[48,93365,93366,93388,93409,93419,93432],{"__ignoreMap":46},[51,93367,93368,93370,93372,93375,93377,93380,93382,93384,93386],{"class":53,"line":54},[51,93369,780],{"class":65},[51,93371,70],{"class":69},[51,93373,93374],{"class":65},"np.arange(",[51,93376,962],{"class":278},[51,93378,93379],{"class":65},").reshape(",[51,93381,614],{"class":278},[51,93383,920],{"class":65},[51,93385,614],{"class":278},[51,93387,282],{"class":65},[51,93389,93390,93392,93394,93397,93399,93401,93403,93405,93407],{"class":53,"line":185},[51,93391,805],{"class":65},[51,93393,70],{"class":69},[51,93395,93396],{"class":65},"np.array([",[51,93398,988],{"class":278},[51,93400,920],{"class":65},[51,93402,988],{"class":278},[51,93404,920],{"class":65},[51,93406,988],{"class":278},[51,93408,5042],{"class":65},[51,93410,93411,93414,93416],{"class":53,"line":202},[51,93412,93413],{"class":65},"result",[51,93415,70],{"class":69},[51,93417,93418],{"class":65},"np.empty_like(a)\n",[51,93420,93421,93424,93427,93429],{"class":53,"line":209},[51,93422,93423],{"class":65},"np.add(a,b,",[51,93425,93426],{"class":248},"out",[51,93428,70],{"class":69},[51,93430,93431],{"class":65},"result)\n",[51,93433,93434],{"class":53,"line":223},[51,93435,93436],{"class":65},"result\n",[10,93438,93439],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[464,93441,93442],{},"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":46,"searchDepth":185,"depth":185,"links":93444},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93331,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93451,"title":93452,"body":93453,"description":23760,"extension":469,"meta":94215,"navigation":205,"path":94216,"seo":94217,"stem":94218,"__hash__":94219},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93454,"toc":94202},[93455,93458,93461,93464,93468,93507,93511,93555,93615,93619,93622,93661,93664,93709,93713,93749,93753,93822,93826,93890,93894,93897,93900,93903,93906,93942,93946,93986,93990,94062,94065,94069,94132,94136,94199],[14,93456,93452],{"id":93457},"_11统计函数",[10,93459,93460],{},"sum max min mean",[10,93462,93463],{},"这些有axis参数，可以指定方向",[486,93465,93467],{"id":93466},"_111-sum求和函数","11.1 sum()求和函数",[41,93469,93471],{"className":170,"code":93470,"language":172,"meta":46,"style":46},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[48,93472,93473,93478,93499],{"__ignoreMap":46},[51,93474,93475],{"class":53,"line":54},[51,93476,93477],{"class":601},"#创建一维数组\n",[51,93479,93480,93482,93484,93487,93489,93491,93493,93495,93497],{"class":53,"line":185},[51,93481,780],{"class":65},[51,93483,70],{"class":69},[51,93485,93486],{"class":65},"np.random.randint(",[51,93488,759],{"class":278},[51,93490,920],{"class":65},[51,93492,853],{"class":278},[51,93494,920],{"class":65},[51,93496,1242],{"class":278},[51,93498,282],{"class":65},[51,93500,93501,93504],{"class":53,"line":202},[51,93502,93503],{"class":65},"np.sum(a)",[51,93505,93506],{"class":601},"#求和\n",[486,93508,93510],{"id":93509},"_112-max求最大值函数","11.2 max()求最大值函数",[41,93512,93514],{"className":170,"code":93513,"language":172,"meta":46,"style":46},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[48,93515,93516,93520,93540,93545,93550],{"__ignoreMap":46},[51,93517,93518],{"class":53,"line":54},[51,93519,93477],{"class":601},[51,93521,93522,93524,93526,93528,93530,93532,93534,93536,93538],{"class":53,"line":185},[51,93523,780],{"class":65},[51,93525,70],{"class":69},[51,93527,93486],{"class":65},[51,93529,759],{"class":278},[51,93531,920],{"class":65},[51,93533,853],{"class":278},[51,93535,920],{"class":65},[51,93537,1242],{"class":278},[51,93539,282],{"class":65},[51,93541,93542],{"class":53,"line":202},[51,93543,93544],{"class":65},"np.max(a)\n",[51,93546,93547],{"class":53,"line":209},[51,93548,93549],{"class":601},"#最大索引(求最大元素的索引)arg\n",[51,93551,93552],{"class":53,"line":223},[51,93553,93554],{"class":65},"np.argmax(a)\n",[41,93556,93558],{"className":170,"code":93557,"language":172,"meta":46,"style":46},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[48,93559,93560,93581,93601,93605],{"__ignoreMap":46},[51,93561,93562,93564,93566,93569,93571,93573,93575,93577,93579],{"class":53,"line":54},[51,93563,11303],{"class":65},[51,93565,70],{"class":69},[51,93567,93568],{"class":65}," np.array([",[51,93570,759],{"class":278},[51,93572,12819],{"class":65},[51,93574,861],{"class":278},[51,93576,12819],{"class":65},[51,93578,614],{"class":278},[51,93580,5042],{"class":65},[51,93582,93583,93585,93587,93589,93591,93593,93595,93597,93599],{"class":53,"line":185},[51,93584,11329],{"class":65},[51,93586,70],{"class":69},[51,93588,93568],{"class":65},[51,93590,614],{"class":278},[51,93592,12819],{"class":65},[51,93594,620],{"class":278},[51,93596,12819],{"class":65},[51,93598,835],{"class":278},[51,93600,5042],{"class":65},[51,93602,93603],{"class":53,"line":202},[51,93604,206],{"emptyLinePlaceholder":205},[51,93606,93607,93609,93612],{"class":53,"line":209},[51,93608,30794],{"class":278},[51,93610,93611],{"class":65},"(np.maximum(a, b))   ",[51,93613,93614],{"class":601},"# [3 5 4]，每个位置上取较大值\n",[486,93616,93618],{"id":93617},"_113-mean求平均值函数","11.3 mean()求平均值函数",[10,93620,93621],{},"①一维数组：",[41,93623,93625],{"className":170,"code":93624,"language":172,"meta":46,"style":46},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[48,93626,93627,93631,93651,93656],{"__ignoreMap":46},[51,93628,93629],{"class":53,"line":54},[51,93630,93477],{"class":601},[51,93632,93633,93635,93637,93639,93641,93643,93645,93647,93649],{"class":53,"line":185},[51,93634,780],{"class":65},[51,93636,70],{"class":69},[51,93638,93486],{"class":65},[51,93640,759],{"class":278},[51,93642,920],{"class":65},[51,93644,853],{"class":278},[51,93646,920],{"class":65},[51,93648,1242],{"class":278},[51,93650,282],{"class":65},[51,93652,93653],{"class":53,"line":202},[51,93654,93655],{"class":601},"#求平均值\n",[51,93657,93658],{"class":53,"line":209},[51,93659,93660],{"class":65},"np.mean(a)\n",[10,93662,93663],{},"②二维数组",[41,93665,93667],{"className":170,"code":93666,"language":172,"meta":46,"style":46},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[48,93668,93669,93674,93699,93704],{"__ignoreMap":46},[51,93670,93671],{"class":53,"line":54},[51,93672,93673],{"class":601},"#二维数组\n",[51,93675,93676,93679,93681,93683,93685,93687,93689,93691,93693,93695,93697],{"class":53,"line":185},[51,93677,93678],{"class":65},"aa",[51,93680,70],{"class":69},[51,93682,93374],{"class":65},[51,93684,759],{"class":278},[51,93686,920],{"class":65},[51,93688,1065],{"class":278},[51,93690,93379],{"class":65},[51,93692,614],{"class":278},[51,93694,920],{"class":65},[51,93696,835],{"class":278},[51,93698,282],{"class":65},[51,93700,93701],{"class":53,"line":202},[51,93702,93703],{"class":601},"#对数组中的所有数求平均\n",[51,93705,93706],{"class":53,"line":209},[51,93707,93708],{"class":65},"np.mean(aa)\n",[486,93710,93712],{"id":93711},"_114-median求中位数函数","11.4 median()求中位数函数",[41,93714,93716],{"className":170,"code":93715,"language":172,"meta":46,"style":46},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[48,93717,93718,93723,93739,93744],{"__ignoreMap":46},[51,93719,93720],{"class":53,"line":54},[51,93721,93722],{"class":601},"#求中位数\n",[51,93724,93725,93727,93729,93731,93733,93735,93737],{"class":53,"line":185},[51,93726,805],{"class":65},[51,93728,70],{"class":69},[51,93730,93374],{"class":65},[51,93732,759],{"class":278},[51,93734,920],{"class":65},[51,93736,988],{"class":278},[51,93738,282],{"class":65},[51,93740,93741],{"class":53,"line":202},[51,93742,93743],{"class":65},"np.median(b)\n",[51,93745,93746],{"class":53,"line":209},[51,93747,93748],{"class":601},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[486,93750,93752],{"id":93751},"_115-power求幂运算函数","11.5 power()求幂运算函数",[41,93754,93756],{"className":170,"code":93755,"language":172,"meta":46,"style":46},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[48,93757,93758,93774,93779,93784,93793,93798,93807],{"__ignoreMap":46},[51,93759,93760,93762,93764,93766,93768,93770,93772],{"class":53,"line":54},[51,93761,805],{"class":65},[51,93763,70],{"class":69},[51,93765,93374],{"class":65},[51,93767,759],{"class":278},[51,93769,920],{"class":65},[51,93771,988],{"class":278},[51,93773,282],{"class":65},[51,93775,93776],{"class":53,"line":185},[51,93777,93778],{"class":601},"#幂运算\n",[51,93780,93781],{"class":53,"line":202},[51,93782,93783],{"class":601},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[51,93785,93786,93789,93791],{"class":53,"line":209},[51,93787,93788],{"class":65},"np.power(b,",[51,93790,620],{"class":278},[51,93792,282],{"class":65},[51,93794,93795],{"class":53,"line":223},[51,93796,93797],{"class":601},"#或者以下代码，将数据存储起来\n",[51,93799,93800,93802,93804],{"class":53,"line":237},[51,93801,1387],{"class":65},[51,93803,70],{"class":69},[51,93805,93806],{"class":65},"np.empty_like(b)\n",[51,93808,93809,93811,93813,93815,93817,93819],{"class":53,"line":242},[51,93810,93788],{"class":65},[51,93812,620],{"class":278},[51,93814,920],{"class":65},[51,93816,93426],{"class":248},[51,93818,70],{"class":69},[51,93820,93821],{"class":65},"y)\n",[486,93823,93825],{"id":93824},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[41,93827,93829],{"className":170,"code":93828,"language":172,"meta":46,"style":46},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[48,93830,93831,93847,93852,93857,93861,93879],{"__ignoreMap":46},[51,93832,93833,93835,93837,93839,93841,93843,93845],{"class":53,"line":54},[51,93834,805],{"class":65},[51,93836,70],{"class":69},[51,93838,93374],{"class":65},[51,93840,759],{"class":278},[51,93842,920],{"class":65},[51,93844,988],{"class":278},[51,93846,282],{"class":65},[51,93848,93849],{"class":53,"line":185},[51,93850,93851],{"class":601},"#开方\n",[51,93853,93854],{"class":53,"line":202},[51,93855,93856],{"class":65},"np.sqrt(b)\n",[51,93858,93859],{"class":53,"line":209},[51,93860,93797],{"class":601},[51,93862,93863,93865,93867,93870,93873,93875,93877],{"class":53,"line":223},[51,93864,1387],{"class":65},[51,93866,70],{"class":69},[51,93868,93869],{"class":65},"np.empty_like(b,",[51,93871,93872],{"class":248},"dtype",[51,93874,70],{"class":69},[51,93876,584],{"class":278},[51,93878,282],{"class":65},[51,93880,93881,93884,93886,93888],{"class":53,"line":237},[51,93882,93883],{"class":65},"np.sqrt(b,",[51,93885,93426],{"class":248},[51,93887,70],{"class":69},[51,93889,93821],{"class":65},[486,93891,93893],{"id":93892},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[10,93895,93896],{},"对数组中的元素累计求和，可指定轴",[10,93898,93899],{},"#累计求和的意思是：",[10,93901,93902],{},"a = np.array([1, 2, 3, 4])",[10,93904,93905],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[41,93907,93909],{"className":170,"code":93908,"language":172,"meta":46,"style":46},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[48,93910,93911,93927,93932,93937],{"__ignoreMap":46},[51,93912,93913,93915,93917,93919,93921,93923,93925],{"class":53,"line":54},[51,93914,805],{"class":65},[51,93916,70],{"class":69},[51,93918,93374],{"class":65},[51,93920,759],{"class":278},[51,93922,920],{"class":65},[51,93924,988],{"class":278},[51,93926,282],{"class":65},[51,93928,93929],{"class":53,"line":185},[51,93930,93931],{"class":65},"np.cumsum(b)\n",[51,93933,93934],{"class":53,"line":202},[51,93935,93936],{"class":601},"#结果：\n",[51,93938,93939],{"class":53,"line":209},[51,93940,93941],{"class":601},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[486,93943,93945],{"id":93944},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[41,93947,93949],{"className":170,"code":93948,"language":172,"meta":46,"style":46},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[48,93950,93951,93967,93972,93977,93981],{"__ignoreMap":46},[51,93952,93953,93955,93957,93959,93961,93963,93965],{"class":53,"line":54},[51,93954,805],{"class":65},[51,93956,70],{"class":69},[51,93958,93374],{"class":65},[51,93960,759],{"class":278},[51,93962,920],{"class":65},[51,93964,988],{"class":278},[51,93966,282],{"class":65},[51,93968,93969],{"class":53,"line":185},[51,93970,93971],{"class":601},"#对数组中的元素累计求积，可指定轴\n",[51,93973,93974],{"class":53,"line":202},[51,93975,93976],{"class":65},"np.cumprod(b)\n",[51,93978,93979],{"class":53,"line":209},[51,93980,93936],{"class":601},[51,93982,93983],{"class":53,"line":223},[51,93984,93985],{"class":601},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[486,93987,93989],{"id":93988},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[41,93991,93993],{"className":170,"code":93992,"language":172,"meta":46,"style":46},"#删除数组中的重复数据，并对数据进行排序\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",[48,93994,93995,94000,94048,94053,94057],{"__ignoreMap":46},[51,93996,93997],{"class":53,"line":54},[51,93998,93999],{"class":601},"#删除数组中的重复数据，并对数据进行排序\n",[51,94001,94002,94004,94006,94008,94010,94012,94014,94016,94018,94020,94022,94024,94026,94028,94030,94032,94034,94036,94038,94040,94042,94044,94046],{"class":53,"line":185},[51,94003,780],{"class":65},[51,94005,70],{"class":69},[51,94007,93396],{"class":65},[51,94009,759],{"class":278},[51,94011,920],{"class":65},[51,94013,620],{"class":278},[51,94015,920],{"class":65},[51,94017,614],{"class":278},[51,94019,920],{"class":65},[51,94021,1040],{"class":278},[51,94023,920],{"class":65},[51,94025,614],{"class":278},[51,94027,920],{"class":65},[51,94029,988],{"class":278},[51,94031,920],{"class":65},[51,94033,739],{"class":278},[51,94035,920],{"class":65},[51,94037,733],{"class":278},[51,94039,920],{"class":65},[51,94041,1317],{"class":278},[51,94043,920],{"class":65},[51,94045,835],{"class":278},[51,94047,5042],{"class":65},[51,94049,94050],{"class":53,"line":202},[51,94051,94052],{"class":65},"np.unique(a)\n",[51,94054,94055],{"class":53,"line":209},[51,94056,93936],{"class":601},[51,94058,94059],{"class":53,"line":223},[51,94060,94061],{"class":601},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[10,94063,94064],{},"升序形式排序",[486,94066,94068],{"id":94067},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[41,94070,94072],{"className":170,"code":94071,"language":172,"meta":46,"style":46},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[48,94073,94074,94122,94127],{"__ignoreMap":46},[51,94075,94076,94078,94080,94082,94084,94086,94088,94090,94092,94094,94096,94098,94100,94102,94104,94106,94108,94110,94112,94114,94116,94118,94120],{"class":53,"line":54},[51,94077,780],{"class":65},[51,94079,70],{"class":69},[51,94081,93396],{"class":65},[51,94083,759],{"class":278},[51,94085,920],{"class":65},[51,94087,620],{"class":278},[51,94089,920],{"class":65},[51,94091,614],{"class":278},[51,94093,920],{"class":65},[51,94095,1040],{"class":278},[51,94097,920],{"class":65},[51,94099,614],{"class":278},[51,94101,920],{"class":65},[51,94103,988],{"class":278},[51,94105,920],{"class":65},[51,94107,739],{"class":278},[51,94109,920],{"class":65},[51,94111,733],{"class":278},[51,94113,920],{"class":65},[51,94115,1317],{"class":278},[51,94117,920],{"class":65},[51,94119,835],{"class":278},[51,94121,5042],{"class":65},[51,94123,94124],{"class":53,"line":185},[51,94125,94126],{"class":601},"#返回数组中非零元素的索引\n",[51,94128,94129],{"class":53,"line":202},[51,94130,94131],{"class":65},"np.nonzero(a)\n",[486,94133,94135],{"id":94134},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[41,94137,94139],{"className":170,"code":94138,"language":172,"meta":46,"style":46},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[48,94140,94141,94189,94194],{"__ignoreMap":46},[51,94142,94143,94145,94147,94149,94151,94153,94155,94157,94159,94161,94163,94165,94167,94169,94171,94173,94175,94177,94179,94181,94183,94185,94187],{"class":53,"line":54},[51,94144,780],{"class":65},[51,94146,70],{"class":69},[51,94148,93396],{"class":65},[51,94150,759],{"class":278},[51,94152,920],{"class":65},[51,94154,620],{"class":278},[51,94156,920],{"class":65},[51,94158,614],{"class":278},[51,94160,920],{"class":65},[51,94162,1040],{"class":278},[51,94164,920],{"class":65},[51,94166,614],{"class":278},[51,94168,920],{"class":65},[51,94170,988],{"class":278},[51,94172,920],{"class":65},[51,94174,739],{"class":278},[51,94176,920],{"class":65},[51,94178,733],{"class":278},[51,94180,920],{"class":65},[51,94182,1317],{"class":278},[51,94184,920],{"class":65},[51,94186,835],{"class":278},[51,94188,5042],{"class":65},[51,94190,94191],{"class":53,"line":185},[51,94192,94193],{"class":601},"#计算一组数中最大值与最小值的差，可指定轴\n",[51,94195,94196],{"class":53,"line":202},[51,94197,94198],{"class":65},"np.ptp(a)\n",[464,94200,94201],{},"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":46,"searchDepth":185,"depth":185,"links":94203},[94204,94205,94206,94207,94208,94209,94210,94211,94212,94213,94214],{"id":93466,"depth":185,"text":93467},{"id":93509,"depth":185,"text":93510},{"id":93617,"depth":185,"text":93618},{"id":93711,"depth":185,"text":93712},{"id":93751,"depth":185,"text":93752},{"id":93824,"depth":185,"text":93825},{"id":93892,"depth":185,"text":93893},{"id":93944,"depth":185,"text":93945},{"id":93988,"depth":185,"text":93989},{"id":94067,"depth":185,"text":94068},{"id":94134,"depth":185,"text":94135},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93452,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94221,"title":94222,"body":94223,"description":23760,"extension":469,"meta":94878,"navigation":205,"path":94879,"seo":94880,"stem":94881,"__hash__":94882},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94224,"toc":94866},[94225,94228,94232,94235,94451,94455,94458,94667,94671,94737,94742,94746,94749,94752,94790,94794,94797,94802,94806,94809,94812,94817,94821,94824,94828,94831,94834,94839,94843,94846,94849,94854,94858,94863],[14,94226,94222],{"id":94227},"_12其他常用函数",[486,94229,94231],{"id":94230},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[10,94233,94234],{},"将数组的数据按照行列复制扩展",[41,94236,94238],{"className":170,"code":94237,"language":172,"meta":46,"style":46},"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",[48,94239,94240,94256,94265,94269,94274,94279,94292,94296,94301,94306,94311,94315,94320,94344,94356,94360,94364,94369,94374,94379,94384,94388,94401,94405,94409,94414,94419,94424,94429,94434,94438,94442,94447],{"__ignoreMap":46},[51,94241,94242,94244,94246,94248,94250,94252,94254],{"class":53,"line":54},[51,94243,780],{"class":65},[51,94245,70],{"class":69},[51,94247,93374],{"class":65},[51,94249,759],{"class":278},[51,94251,920],{"class":65},[51,94253,861],{"class":278},[51,94255,282],{"class":65},[51,94257,94258,94261,94263],{"class":53,"line":185},[51,94259,94260],{"class":65},"np.tile(a,",[51,94262,620],{"class":278},[51,94264,282],{"class":65},[51,94266,94267],{"class":53,"line":202},[51,94268,93936],{"class":601},[51,94270,94271],{"class":53,"line":209},[51,94272,94273],{"class":601},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[51,94275,94276],{"class":53,"line":223},[51,94277,94278],{"class":601},"#行复制两次，列复制三次\n",[51,94280,94281,94284,94286,94288,94290],{"class":53,"line":237},[51,94282,94283],{"class":65},"np.tile(a,(",[51,94285,620],{"class":278},[51,94287,920],{"class":65},[51,94289,614],{"class":278},[51,94291,30876],{"class":65},[51,94293,94294],{"class":53,"line":242},[51,94295,93936],{"class":601},[51,94297,94298],{"class":53,"line":257},[51,94299,94300],{"class":61},"'''\n",[51,94302,94303],{"class":53,"line":262},[51,94304,94305],{"class":61},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[51,94307,94308],{"class":53,"line":285},[51,94309,94310],{"class":61},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[51,94312,94313],{"class":53,"line":296},[51,94314,94300],{"class":61},[51,94316,94317],{"class":53,"line":307},[51,94318,94319],{"class":601},"#创建二维数组\n",[51,94321,94322,94324,94326,94328,94330,94332,94334,94336,94338,94340,94342],{"class":53,"line":324},[51,94323,93678],{"class":65},[51,94325,70],{"class":69},[51,94327,93374],{"class":65},[51,94329,759],{"class":278},[51,94331,920],{"class":65},[51,94333,1065],{"class":278},[51,94335,93379],{"class":65},[51,94337,835],{"class":278},[51,94339,920],{"class":65},[51,94341,614],{"class":278},[51,94343,282],{"class":65},[51,94345,94346,94349,94351,94353],{"class":53,"line":329},[51,94347,94348],{"class":65},"np.tile(aa,",[51,94350,620],{"class":278},[51,94352,971],{"class":65},[51,94354,94355],{"class":601},"#一个数的时候就是行\n",[51,94357,94358],{"class":53,"line":334},[51,94359,93936],{"class":601},[51,94361,94362],{"class":53,"line":340},[51,94363,94300],{"class":61},[51,94365,94366],{"class":53,"line":345},[51,94367,94368],{"class":61},"array([[ 1,  2,  3,  1,  2,  3],\n",[51,94370,94371],{"class":53,"line":357},[51,94372,94373],{"class":61},"       [ 4,  5,  6,  4,  5,  6],\n",[51,94375,94376],{"class":53,"line":366},[51,94377,94378],{"class":61},"       [ 7,  8,  9,  7,  8,  9],\n",[51,94380,94381],{"class":53,"line":383},[51,94382,94383],{"class":61},"       [10, 11, 12, 10, 11, 12]])\n",[51,94385,94386],{"class":53,"line":392},[51,94387,94300],{"class":61},[51,94389,94390,94393,94395,94397,94399],{"class":53,"line":403},[51,94391,94392],{"class":65},"np.tile(aa,(",[51,94394,620],{"class":278},[51,94396,920],{"class":65},[51,94398,614],{"class":278},[51,94400,30876],{"class":65},[51,94402,94403],{"class":53,"line":409},[51,94404,93936],{"class":601},[51,94406,94407],{"class":53,"line":414},[51,94408,94300],{"class":61},[51,94410,94411],{"class":53,"line":433},[51,94412,94413],{"class":61},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[51,94415,94416],{"class":53,"line":439},[51,94417,94418],{"class":61},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[51,94420,94421],{"class":53,"line":444},[51,94422,94423],{"class":61},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[51,94425,94426],{"class":53,"line":453},[51,94427,94428],{"class":61},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[51,94430,94431],{"class":53,"line":2174},[51,94432,94433],{"class":61},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[51,94435,94436],{"class":53,"line":2965},[51,94437,94418],{"class":61},[51,94439,94440],{"class":53,"line":2979},[51,94441,94423],{"class":61},[51,94443,94444],{"class":53,"line":2987},[51,94445,94446],{"class":61},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[51,94448,94449],{"class":53,"line":2992},[51,94450,94300],{"class":61},[486,94452,94454],{"id":94453},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[10,94456,94457],{},"repeat()将数组中的每个元素重复若干次",[41,94459,94461],{"className":170,"code":94460,"language":172,"meta":46,"style":46},"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",[48,94462,94463,94479,94488,94492,94497,94521,94526,94535,94539,94544,94548,94553,94569,94573,94577,94582,94587,94592,94596,94601,94605,94610,94615,94619,94635,94639,94643,94648,94653,94658,94663],{"__ignoreMap":46},[51,94464,94465,94467,94469,94471,94473,94475,94477],{"class":53,"line":54},[51,94466,780],{"class":65},[51,94468,70],{"class":69},[51,94470,93374],{"class":65},[51,94472,759],{"class":278},[51,94474,920],{"class":65},[51,94476,861],{"class":278},[51,94478,282],{"class":65},[51,94480,94481,94484,94486],{"class":53,"line":185},[51,94482,94483],{"class":65},"np.repeat(a,",[51,94485,614],{"class":278},[51,94487,282],{"class":65},[51,94489,94490],{"class":53,"line":202},[51,94491,93936],{"class":601},[51,94493,94494],{"class":53,"line":209},[51,94495,94496],{"class":601},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[51,94498,94499,94501,94503,94505,94507,94509,94511,94513,94515,94517,94519],{"class":53,"line":223},[51,94500,93678],{"class":65},[51,94502,70],{"class":69},[51,94504,93374],{"class":65},[51,94506,759],{"class":278},[51,94508,920],{"class":65},[51,94510,1065],{"class":278},[51,94512,93379],{"class":65},[51,94514,835],{"class":278},[51,94516,920],{"class":65},[51,94518,614],{"class":278},[51,94520,282],{"class":65},[51,94522,94523],{"class":53,"line":237},[51,94524,94525],{"class":601},"#这个重复之后二维变成一维\n",[51,94527,94528,94531,94533],{"class":53,"line":242},[51,94529,94530],{"class":65},"np.repeat(aa,",[51,94532,620],{"class":278},[51,94534,282],{"class":65},[51,94536,94537],{"class":53,"line":257},[51,94538,94300],{"class":61},[51,94540,94541],{"class":53,"line":262},[51,94542,94543],{"class":61},"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",[51,94545,94546],{"class":53,"line":285},[51,94547,94300],{"class":61},[51,94549,94550],{"class":53,"line":296},[51,94551,94552],{"class":601},"#指定axis\n",[51,94554,94555,94557,94559,94561,94563,94565,94567],{"class":53,"line":307},[51,94556,94530],{"class":65},[51,94558,620],{"class":278},[51,94560,920],{"class":65},[51,94562,47886],{"class":248},[51,94564,70],{"class":69},[51,94566,733],{"class":278},[51,94568,282],{"class":65},[51,94570,94571],{"class":53,"line":324},[51,94572,93936],{"class":601},[51,94574,94575],{"class":53,"line":329},[51,94576,94300],{"class":61},[51,94578,94579],{"class":53,"line":334},[51,94580,94581],{"class":61},"array([[ 1,  2,  3],\n",[51,94583,94584],{"class":53,"line":340},[51,94585,94586],{"class":61},"       [ 1,  2,  3],\n",[51,94588,94589],{"class":53,"line":345},[51,94590,94591],{"class":61},"       [ 4,  5,  6],\n",[51,94593,94594],{"class":53,"line":357},[51,94595,94591],{"class":61},[51,94597,94598],{"class":53,"line":366},[51,94599,94600],{"class":61},"       [ 7,  8,  9],\n",[51,94602,94603],{"class":53,"line":383},[51,94604,94600],{"class":61},[51,94606,94607],{"class":53,"line":392},[51,94608,94609],{"class":61},"       [10, 11, 12],\n",[51,94611,94612],{"class":53,"line":403},[51,94613,94614],{"class":61},"       [10, 11, 12]])\n",[51,94616,94617],{"class":53,"line":409},[51,94618,94300],{"class":61},[51,94620,94621,94623,94625,94627,94629,94631,94633],{"class":53,"line":414},[51,94622,94530],{"class":65},[51,94624,620],{"class":278},[51,94626,920],{"class":65},[51,94628,47886],{"class":248},[51,94630,70],{"class":69},[51,94632,759],{"class":278},[51,94634,282],{"class":65},[51,94636,94637],{"class":53,"line":433},[51,94638,93936],{"class":601},[51,94640,94641],{"class":53,"line":439},[51,94642,94300],{"class":61},[51,94644,94645],{"class":53,"line":444},[51,94646,94647],{"class":61},"array([[ 1,  1,  2,  2,  3,  3],\n",[51,94649,94650],{"class":53,"line":453},[51,94651,94652],{"class":61},"       [ 4,  4,  5,  5,  6,  6],\n",[51,94654,94655],{"class":53,"line":2174},[51,94656,94657],{"class":61},"       [ 7,  7,  8,  8,  9,  9],\n",[51,94659,94660],{"class":53,"line":2965},[51,94661,94662],{"class":61},"       [10, 10, 11, 11, 12, 12]])\n",[51,94664,94665],{"class":53,"line":2979},[51,94666,94300],{"class":61},[486,94668,94670],{"id":94669},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[41,94672,94674],{"className":170,"code":94673,"language":172,"meta":46,"style":46},"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",[48,94675,94676,94692,94697,94709,94713,94718,94728,94732],{"__ignoreMap":46},[51,94677,94678,94680,94682,94684,94686,94688,94690],{"class":53,"line":54},[51,94679,780],{"class":65},[51,94681,70],{"class":69},[51,94683,93374],{"class":65},[51,94685,759],{"class":278},[51,94687,920],{"class":65},[51,94689,861],{"class":278},[51,94691,282],{"class":65},[51,94693,94694],{"class":53,"line":185},[51,94695,94696],{"class":601},"#array([，2，3，4])\n",[51,94698,94699,94702,94704,94706],{"class":53,"line":202},[51,94700,94701],{"class":65},"np.roll(a,",[51,94703,620],{"class":278},[51,94705,971],{"class":65},[51,94707,94708],{"class":601},"#传正数向后调多少位，传负数向前调多少位\n",[51,94710,94711],{"class":53,"line":209},[51,94712,93936],{"class":601},[51,94714,94715],{"class":53,"line":223},[51,94716,94717],{"class":601},"#array([3, 4, 1, 2])\n",[51,94719,94720,94722,94724,94726],{"class":53,"line":237},[51,94721,94701],{"class":65},[51,94723,1074],{"class":69},[51,94725,759],{"class":278},[51,94727,282],{"class":65},[51,94729,94730],{"class":53,"line":242},[51,94731,93936],{"class":601},[51,94733,94734],{"class":53,"line":257},[51,94735,94736],{"class":601},"#array([2, 3, 4, 1])\n",[10,94738,94739],{},[460,94740],{"alt":46,"src":94741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[486,94743,94745],{"id":94744},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[10,94747,94748],{},"resize()重新调整数组的大小",[10,94750,94751],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[41,94753,94755],{"className":170,"code":94754,"language":172,"meta":46,"style":46},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[48,94756,94757,94762,94775],{"__ignoreMap":46},[51,94758,94759],{"class":53,"line":54},[51,94760,94761],{"class":601},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[51,94763,94764,94767,94769,94771,94773],{"class":53,"line":185},[51,94765,94766],{"class":65},"np.resize(aa,(",[51,94768,620],{"class":278},[51,94770,920],{"class":65},[51,94772,886],{"class":278},[51,94774,30876],{"class":65},[51,94776,94777,94779,94781,94783,94785,94787],{"class":53,"line":202},[51,94778,94766],{"class":65},[51,94780,620],{"class":278},[51,94782,920],{"class":65},[51,94784,962],{"class":278},[51,94786,83143],{"class":65},[51,94788,94789],{"class":601},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[486,94791,94793],{"id":94792},"_125-placeput函数","12.5 place()\u002Fput()函数",[10,94795,94796],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[10,94798,94799],{},[460,94800],{"alt":46,"src":94801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[486,94803,94805],{"id":94804},"_126-保存加载文件","12.6 保存加载文件",[10,94807,94808],{},"savetxt():将数据保存到txt文件中",[10,94810,94811],{},"loadtxt():从文件加载数据",[10,94813,94814],{},[460,94815],{"alt":46,"src":94816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[486,94818,94820],{"id":94819},"_127-genfromtxt函数","12.7 genfromtxt()函数",[10,94822,94823],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[486,94825,94827],{"id":94826},"_128-anyall函数","12.8 any()\u002Fall()函数",[10,94829,94830],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[10,94832,94833],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[10,94835,94836],{},[460,94837],{"alt":46,"src":94838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[486,94840,94842],{"id":94841},"_129-where语句","12.9 where语句",[10,94844,94845],{},"np.where(条件,x,y)",[10,94847,94848],{},"如果条件为True,对应值为x,否则对应值为y",[10,94850,94851],{},[460,94852],{"alt":46,"src":94853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[486,94855,94857],{"id":94856},"_1210-dot矩阵","12.10 dot()矩阵",[10,94859,94860],{},[460,94861],{"alt":46,"src":94862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[464,94864,94865],{},"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":46,"searchDepth":185,"depth":185,"links":94867},[94868,94869,94870,94871,94872,94873,94874,94875,94876,94877],{"id":94230,"depth":185,"text":94231},{"id":94453,"depth":185,"text":94454},{"id":94669,"depth":185,"text":94670},{"id":94744,"depth":185,"text":94745},{"id":94792,"depth":185,"text":94793},{"id":94804,"depth":185,"text":94805},{"id":94819,"depth":185,"text":94820},{"id":94826,"depth":185,"text":94827},{"id":94841,"depth":185,"text":94842},{"id":94856,"depth":185,"text":94857},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94222,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94884,"title":94885,"body":94886,"description":23760,"extension":469,"meta":95239,"navigation":205,"path":95240,"seo":95241,"stem":95242,"__hash__":95243},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94887,"toc":95237},[94888,94891,94894,94897,94900,94903,94968,94970,95234],[14,94889,94885],{"id":94890},"_13数组排序",[10,94892,94893],{},"排序主要用到的方法是np.sort和np.argsort",[10,94895,94896],{},"其中np.sort()对数组直接排序",[10,94898,94899],{},"而np.argsort()是返回排序后的原始索引",[10,94901,94902],{},"①一维数组",[41,94904,94906],{"className":170,"code":94905,"language":172,"meta":46,"style":46},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[48,94907,94908,94912,94952,94960],{"__ignoreMap":46},[51,94909,94910],{"class":53,"line":54},[51,94911,93477],{"class":601},[51,94913,94914,94916,94918,94920,94922,94924,94926,94928,94930,94932,94934,94936,94938,94940,94942,94944,94946,94948,94950],{"class":53,"line":185},[51,94915,780],{"class":65},[51,94917,70],{"class":69},[51,94919,93396],{"class":65},[51,94921,614],{"class":278},[51,94923,920],{"class":65},[51,94925,1040],{"class":278},[51,94927,920],{"class":65},[51,94929,937],{"class":278},[51,94931,920],{"class":65},[51,94933,1317],{"class":278},[51,94935,920],{"class":65},[51,94937,821],{"class":278},[51,94939,920],{"class":65},[51,94941,1435],{"class":278},[51,94943,920],{"class":65},[51,94945,886],{"class":278},[51,94947,920],{"class":65},[51,94949,988],{"class":278},[51,94951,5042],{"class":65},[51,94953,94954,94957],{"class":53,"line":202},[51,94955,94956],{"class":65},"np.sort(a)",[51,94958,94959],{"class":601},"#升序排序\n",[51,94961,94962,94965],{"class":53,"line":209},[51,94963,94964],{"class":65},"np.argsort(a)",[51,94966,94967],{"class":601},"#按照元素大小来索引排序\n",[10,94969,93663],{},[41,94971,94973],{"className":170,"code":94972,"language":172,"meta":46,"style":46},"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",[48,94974,94975,94987,95013,95018,95022,95027,95032,95037,95042,95046,95054,95058,95063,95068,95073,95078,95082,95087,95100,95104,95109,95114,95119,95124,95128,95133,95145,95149,95153,95157,95161,95165,95169,95174,95189,95194,95203,95208,95212,95216,95221,95225,95230],{"__ignoreMap":46},[51,94976,94977,94980,94982,94984],{"class":53,"line":54},[51,94978,94979],{"class":65},"np.random.seed(",[51,94981,733],{"class":278},[51,94983,971],{"class":65},[51,94985,94986],{"class":601},"#保证每次值一样\n",[51,94988,94989,94991,94993,94995,94997,94999,95001,95003,95005,95007,95009,95011],{"class":53,"line":185},[51,94990,93678],{"class":65},[51,94992,70],{"class":69},[51,94994,93486],{"class":65},[51,94996,853],{"class":278},[51,94998,920],{"class":65},[51,95000,31872],{"class":248},[51,95002,70],{"class":69},[51,95004,546],{"class":65},[51,95006,835],{"class":278},[51,95008,920],{"class":65},[51,95010,886],{"class":278},[51,95012,30876],{"class":65},[51,95014,95015],{"class":53,"line":202},[51,95016,95017],{"class":601},"#原数组：\n",[51,95019,95020],{"class":53,"line":209},[51,95021,94300],{"class":61},[51,95023,95024],{"class":53,"line":223},[51,95025,95026],{"class":61},"array([[44, 47, 64, 67, 67,  9],\n",[51,95028,95029],{"class":53,"line":237},[51,95030,95031],{"class":61},"       [83, 21, 36, 87, 70, 88],\n",[51,95033,95034],{"class":53,"line":242},[51,95035,95036],{"class":61},"       [88, 12, 58, 65, 39, 87],\n",[51,95038,95039],{"class":53,"line":257},[51,95040,95041],{"class":61},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[51,95043,95044],{"class":53,"line":262},[51,95045,94300],{"class":61},[51,95047,95048,95051],{"class":53,"line":285},[51,95049,95050],{"class":65},"np.sort(aa)",[51,95052,95053],{"class":601},"#每行进行了排序\n",[51,95055,95056],{"class":53,"line":296},[51,95057,94300],{"class":61},[51,95059,95060],{"class":53,"line":307},[51,95061,95062],{"class":61},"array([[ 9, 44, 47, 64, 67, 67],\n",[51,95064,95065],{"class":53,"line":324},[51,95066,95067],{"class":61},"       [21, 36, 70, 83, 87, 88],\n",[51,95069,95070],{"class":53,"line":329},[51,95071,95072],{"class":61},"       [12, 39, 58, 65, 87, 88],\n",[51,95074,95075],{"class":53,"line":334},[51,95076,95077],{"class":61},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[51,95079,95080],{"class":53,"line":340},[51,95081,94300],{"class":61},[51,95083,95084],{"class":53,"line":345},[51,95085,95086],{"class":601},"#axis=0时\n",[51,95088,95089,95092,95094,95096,95098],{"class":53,"line":357},[51,95090,95091],{"class":65},"np.sort(aa,",[51,95093,47886],{"class":248},[51,95095,70],{"class":69},[51,95097,733],{"class":278},[51,95099,282],{"class":65},[51,95101,95102],{"class":53,"line":366},[51,95103,94300],{"class":61},[51,95105,95106],{"class":53,"line":383},[51,95107,95108],{"class":61},"array([[44, 12, 36, 37, 25,  9],\n",[51,95110,95111],{"class":53,"line":392},[51,95112,95113],{"class":61},"       [46, 21, 58, 65, 39, 77],\n",[51,95115,95116],{"class":53,"line":403},[51,95117,95118],{"class":61},"       [83, 47, 64, 67, 67, 87],\n",[51,95120,95121],{"class":53,"line":409},[51,95122,95123],{"class":61},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[51,95125,95126],{"class":53,"line":414},[51,95127,94300],{"class":61},[51,95129,95130],{"class":53,"line":433},[51,95131,95132],{"class":601},"#axis=1时,为默认值\n",[51,95134,95135,95137,95139,95141,95143],{"class":53,"line":439},[51,95136,95091],{"class":65},[51,95138,47886],{"class":248},[51,95140,70],{"class":69},[51,95142,759],{"class":278},[51,95144,282],{"class":65},[51,95146,95147],{"class":53,"line":444},[51,95148,94300],{"class":61},[51,95150,95151],{"class":53,"line":453},[51,95152,95062],{"class":61},[51,95154,95155],{"class":53,"line":2174},[51,95156,95067],{"class":61},[51,95158,95159],{"class":53,"line":2965},[51,95160,95072],{"class":61},[51,95162,95163],{"class":53,"line":2979},[51,95164,95077],{"class":61},[51,95166,95167],{"class":53,"line":2987},[51,95168,94300],{"class":61},[51,95170,95171],{"class":53,"line":2992},[51,95172,95173],{"class":601},"#按最后一列排序\n",[51,95175,95176,95178,95180,95183,95185,95187],{"class":53,"line":2998},[51,95177,805],{"class":65},[51,95179,70],{"class":69},[51,95181,95182],{"class":65},"aa[:,",[51,95184,1074],{"class":69},[51,95186,759],{"class":278},[51,95188,33621],{"class":65},[51,95190,95191],{"class":53,"line":3004},[51,95192,95193],{"class":601},"#获取最后一列排好序的索引\n",[51,95195,95196,95198,95200],{"class":53,"line":3009},[51,95197,74430],{"class":65},[51,95199,70],{"class":69},[51,95201,95202],{"class":65},"np.argsort(b)\n",[51,95204,95205],{"class":53,"line":8332},[51,95206,95207],{"class":65},"aa[index]\n",[51,95209,95210],{"class":53,"line":8356},[51,95211,94300],{"class":61},[51,95213,95214],{"class":53,"line":8361},[51,95215,95026],{"class":61},[51,95217,95218],{"class":53,"line":8367},[51,95219,95220],{"class":61},"       [46, 88, 81, 37, 25, 77],\n",[51,95222,95223],{"class":53,"line":8394},[51,95224,95036],{"class":61},[51,95226,95227],{"class":53,"line":8399},[51,95228,95229],{"class":61},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[51,95231,95232],{"class":53,"line":8405},[51,95233,94300],{"class":61},[464,95235,95236],{},"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":46,"searchDepth":185,"depth":185,"links":95238},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94885,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95245,"title":95246,"body":95247,"description":23760,"extension":469,"meta":95277,"navigation":205,"path":95278,"seo":95279,"stem":95280,"__hash__":95281},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95248,"toc":95275},[95249,95252,95255,95258,95261,95264,95267,95270],[14,95250,95246],{"id":95251},"_14广播机制",[10,95253,95254],{},"广播的规则：",[10,95256,95257],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[10,95259,95260],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[10,95262,95263],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[10,95265,95266],{},"3.如果没有维度形状为1，则会引发异常",[10,95268,95269],{},"也就是只有维度或者个数为1才可以进行广播操作",[10,95271,95272],{},[460,95273],{"alt":46,"src":95274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":46,"searchDepth":185,"depth":185,"links":95276},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95246,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95283,"title":95284,"body":95285,"description":23760,"extension":469,"meta":95383,"navigation":205,"path":95384,"seo":95385,"stem":95386,"__hash__":95387},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95286,"toc":95381},[95287,95290,95293,95378],[14,95288,95284],{"id":95289},"_15比较掩码",[10,95291,95292],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[41,95294,95296],{"className":170,"code":95295,"language":172,"meta":46,"style":46},"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",[48,95297,95298,95344,95355,95369,95373],{"__ignoreMap":46},[51,95299,95300,95302,95304,95307,95309,95311,95313,95315,95317,95319,95321,95323,95325,95327,95329,95331,95333,95335,95337,95339,95341],{"class":53,"line":54},[51,95301,780],{"class":65},[51,95303,70],{"class":69},[51,95305,95306],{"class":65},"np.array([[",[51,95308,759],{"class":278},[51,95310,920],{"class":65},[51,95312,620],{"class":278},[51,95314,920],{"class":65},[51,95316,614],{"class":278},[51,95318,48402],{"class":65},[51,95320,1014],{"class":278},[51,95322,920],{"class":65},[51,95324,1040],{"class":278},[51,95326,920],{"class":65},[51,95328,1065],{"class":278},[51,95330,48402],{"class":65},[51,95332,1267],{"class":278},[51,95334,920],{"class":65},[51,95336,1292],{"class":278},[51,95338,920],{"class":65},[51,95340,1317],{"class":278},[51,95342,95343],{"class":65},"]])\n",[51,95345,95346,95348,95350,95352],{"class":53,"line":185},[51,95347,780],{"class":65},[51,95349,1452],{"class":69},[51,95351,1242],{"class":278},[51,95353,95354],{"class":601},"#结果是一个由True,False组成的数组\n",[51,95356,95357,95360,95362,95364,95366],{"class":53,"line":202},[51,95358,95359],{"class":65},"a[a",[51,95361,1452],{"class":69},[51,95363,1242],{"class":278},[51,95365,1482],{"class":65},[51,95367,95368],{"class":601},"#小于20的元素会存到这个数组中\n",[51,95370,95371],{"class":53,"line":209},[51,95372,93936],{"class":601},[51,95374,95375],{"class":53,"line":223},[51,95376,95377],{"class":601},"#array([ 1,  2,  3, 11, 12, 13])\n",[464,95379,95380],{},"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":46,"searchDepth":185,"depth":185,"links":95382},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95284,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95389,"title":95390,"body":95391,"description":23760,"extension":469,"meta":95483,"navigation":205,"path":95484,"seo":95485,"stem":95486,"__hash__":95487},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95392,"toc":95481},[95393,95396,95399,95402,95405,95408,95473,95478],[14,95394,95390],{"id":95395},"_16魔法命令time",[10,95397,95398],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[10,95400,95401],{},"%:行模式",[10,95403,95404],{},"%%:单元格模式",[10,95406,95407],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[41,95409,95411],{"className":170,"code":95410,"language":172,"meta":46,"style":46},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[48,95412,95413,95418,95425,95430,95439,95452,95456,95464],{"__ignoreMap":46},[51,95414,95415],{"class":53,"line":54},[51,95416,95417],{"class":601},"#程序执行时间\n",[51,95419,95420,95422],{"class":53,"line":185},[51,95421,179],{"class":69},[51,95423,95424],{"class":65}," time \n",[51,95426,95427],{"class":53,"line":202},[51,95428,95429],{"class":601},"#获取时间\n",[51,95431,95432,95435,95437],{"class":53,"line":209},[51,95433,95434],{"class":65},"start",[51,95436,70],{"class":69},[51,95438,32793],{"class":65},[51,95440,95441,95444,95447,95449],{"class":53,"line":223},[51,95442,95443],{"class":65},"time.sleep(",[51,95445,95446],{"class":278},"0.4",[51,95448,971],{"class":65},[51,95450,95451],{"class":601},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[51,95453,95454],{"class":53,"line":237},[51,95455,95429],{"class":601},[51,95457,95458,95460,95462],{"class":53,"line":242},[51,95459,46173],{"class":65},[51,95461,70],{"class":69},[51,95463,32793],{"class":65},[51,95465,95466,95468,95470],{"class":53,"line":257},[51,95467,46173],{"class":65},[51,95469,1074],{"class":69},[51,95471,95472],{"class":65},"start\n",[10,95474,95475],{},[460,95476],{"alt":46,"src":95477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[464,95479,95480],{},"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":46,"searchDepth":185,"depth":185,"links":95482},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95390,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95489,"title":95490,"body":95491,"description":23760,"extension":469,"meta":95526,"navigation":205,"path":95527,"seo":95528,"stem":95529,"__hash__":95530},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95492,"toc":95524},[95493,95496,95499,95502,95505,95508,95511,95514,95519],[14,95494,95490],{"id":95495},"_17魔法命令timeit",[10,95497,95498],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[10,95500,95501],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[10,95503,95504],{},"单元格模式：",[10,95506,95507],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[10,95509,95510],{},"初始化语句执行次数由轮数来决定",[10,95512,95513],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[10,95515,95516],{},[460,95517],{"alt":46,"src":95518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[10,95520,95521],{},[460,95522],{"alt":46,"src":95523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":46,"searchDepth":185,"depth":185,"links":95525},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95490,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95532,"title":95533,"body":95534,"description":23760,"extension":469,"meta":95552,"navigation":205,"path":95553,"seo":95554,"stem":95555,"__hash__":95556},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95535,"toc":95550},[95536,95539,95542,95545],[14,95537,95533],{"id":95538},"_18魔法命令writefile和run",[10,95540,95541],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[10,95543,95544],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[10,95546,95547],{},[460,95548],{"alt":46,"src":95549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":46,"searchDepth":185,"depth":185,"links":95551},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95533,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95558,"title":95559,"body":95560,"description":23760,"extension":469,"meta":95613,"navigation":205,"path":95614,"seo":95615,"stem":95616,"__hash__":95617},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95561,"toc":95611},[95562,95565,95568,95570,95573,95576,95581,95584,95587,95590,95593,95596,95599,95602,95605,95608],[14,95563,95559],{"id":95564},"_19魔法命令memit",[10,95566,95567],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[10,95569,24981],{},[10,95571,95572],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[10,95574,95575],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[10,95577,95578],{},[460,95579],{"alt":46,"src":95580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[10,95582,95583],{},"补充：",[10,95585,95586],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[10,95588,95589],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[10,95591,95592],{},"解决方法：",[10,95594,95595],{},"1.cmd",[10,95597,95598],{},"2.依次输入以下代码：",[10,95600,95601],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[10,95603,95604],{},"pip install --upgrade ipython",[10,95606,95607],{},"#升级 memory_profiler 和 setuptools",[10,95609,95610],{},"pip install --upgrade memory_profiler setuptools",{"title":46,"searchDepth":185,"depth":185,"links":95612},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95559,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95619,"title":95620,"body":95621,"description":23760,"extension":469,"meta":97267,"navigation":205,"path":97268,"seo":97269,"stem":97270,"__hash__":97271},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95622,"toc":97237},[95623,95626,95630,95634,95695,95698,95703,95707,95712,95717,95722,95727,95730,95735,95739,95743,95776,95779,95782,95785,95837,95840,95876,95879,95921,95925,95946,95948,95985,95987,95992,95994,95999,96003,96006,96034,96038,96042,96095,96099,96191,96195,96199,96202,96207,96211,96236,96241,96245,96248,96251,96254,96257,96260,96263,96266,96278,96282,96286,96289,96321,96324,96347,96350,96376,96379,96405,96408,96442,96445,96507,96511,96514,96518,96521,96547,96550,96553,96558,96561,96630,96632,96637,96698,96701,96712,96718,96723,96727,96730,96743,96747,96762,96764,96787,96789,96815,96818,96821,96824,96872,96874,96879,96883,96887,96914,96918,96945,96948,96953,96958,97048,97052,97110,97115,97118,97121,97163,97167,97223,97228,97231,97234],[14,95624,95620],{"id":95625},"_2创建数组",[486,95627,95629],{"id":95628},"_21-array函数创建数组","2.1 array()函数创建数组",[513,95631,95633],{"id":95632},"_221-函数语句","2.2.1 函数语句",[41,95635,95637],{"className":170,"code":95636,"language":172,"meta":46,"style":46},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[48,95638,95639],{"__ignoreMap":46},[51,95640,95641,95644,95647,95649,95651,95653,95655,95657,95660,95662,95665,95667,95670,95672,95674,95676,95679,95681,95684,95686,95689,95691,95693],{"class":53,"line":54},[51,95642,95643],{"class":65},"numpy.array(",[51,95645,95646],{"class":278},"object",[51,95648,12819],{"class":65},[51,95650,93872],{"class":248},[51,95652,13948],{"class":69},[51,95654,39307],{"class":278},[51,95656,12819],{"class":65},[51,95658,95659],{"class":248},"copy",[51,95661,13948],{"class":69},[51,95663,95664],{"class":278}," True",[51,95666,12819],{"class":65},[51,95668,95669],{"class":248},"order",[51,95671,13948],{"class":69},[51,95673,39307],{"class":278},[51,95675,12819],{"class":65},[51,95677,95678],{"class":248},"subok",[51,95680,13948],{"class":69},[51,95682,95683],{"class":278}," False",[51,95685,12819],{"class":65},[51,95687,95688],{"class":248},"ndmin",[51,95690,13948],{"class":69},[51,95692,4479],{"class":278},[51,95694,282],{"class":65},[10,95696,95697],{},"参数：",[10,95699,95700],{},[460,95701],{"alt":46,"src":95702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[513,95704,95706],{"id":95705},"_222-实例","2.2.2 实例",[10,95708,95709],{},[460,95710],{"alt":46,"src":95711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[10,95713,95714],{},[460,95715],{"alt":46,"src":95716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[10,95718,95719],{},[460,95720],{"alt":46,"src":95721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[10,95723,95724],{},[460,95725],{"alt":46,"src":95726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[10,95728,95729],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[10,95731,95732],{},[460,95733],{"alt":46,"src":95734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[486,95736,95738],{"id":95737},"_22-随机数创建数组","2.2 随机数创建数组",[513,95740,95742],{"id":95741},"_221-random语句","2.2.1 random语句",[41,95744,95746],{"className":170,"code":95745,"language":172,"meta":46,"style":46},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[48,95747,95748,95753,95758,95766,95771],{"__ignoreMap":46},[51,95749,95750],{"class":53,"line":54},[51,95751,95752],{"class":601},"#random.random()\n",[51,95754,95755],{"class":53,"line":185},[51,95756,95757],{"class":601},"#确定随机种子,就是每次运行结果是相同的\n",[51,95759,95760,95762,95764],{"class":53,"line":202},[51,95761,94979],{"class":65},[51,95763,733],{"class":278},[51,95765,282],{"class":65},[51,95767,95768],{"class":53,"line":209},[51,95769,95770],{"class":65},"np.random.random()\n",[51,95772,95773],{"class":53,"line":223},[51,95774,95775],{"class":601},"#生成一个随机的数目\n",[10,95777,95778],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[10,95780,95781],{},"可以指定数组形状 size",[10,95783,95784],{},"①生成一维数组",[41,95786,95788],{"className":170,"code":95787,"language":172,"meta":46,"style":46},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[48,95789,95790,95795,95808,95813,95829],{"__ignoreMap":46},[51,95791,95792],{"class":53,"line":54},[51,95793,95794],{"class":601},"#random.random(size())\n",[51,95796,95797,95800,95802,95804,95806],{"class":53,"line":185},[51,95798,95799],{"class":65},"np.random.random(",[51,95801,31872],{"class":248},[51,95803,70],{"class":69},[51,95805,861],{"class":278},[51,95807,282],{"class":65},[51,95809,95810],{"class":53,"line":202},[51,95811,95812],{"class":601},"#生成一位的五个元素\n",[51,95814,95815,95817,95819,95821,95823,95825,95827],{"class":53,"line":209},[51,95816,780],{"class":65},[51,95818,70],{"class":69},[51,95820,95799],{"class":65},[51,95822,31872],{"class":248},[51,95824,70],{"class":69},[51,95826,835],{"class":278},[51,95828,282],{"class":65},[51,95830,95831,95834],{"class":53,"line":223},[51,95832,95833],{"class":65},"a.shape ",[51,95835,95836],{"class":601},"#输出数组形状\n",[10,95838,95839],{},"②生成二维数组",[41,95841,95843],{"className":170,"code":95842,"language":172,"meta":46,"style":46},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[48,95844,95845,95849,95871],{"__ignoreMap":46},[51,95846,95847],{"class":53,"line":54},[51,95848,93673],{"class":601},[51,95850,95851,95853,95855,95857,95859,95861,95863,95865,95867,95869],{"class":53,"line":185},[51,95852,93678],{"class":65},[51,95854,70],{"class":69},[51,95856,95799],{"class":65},[51,95858,31872],{"class":248},[51,95860,70],{"class":69},[51,95862,546],{"class":65},[51,95864,835],{"class":278},[51,95866,920],{"class":65},[51,95868,861],{"class":278},[51,95870,30876],{"class":65},[51,95872,95873],{"class":53,"line":202},[51,95874,95875],{"class":601},"#生成四行五列的数组\n",[10,95877,95878],{},"③生成三维数组",[41,95880,95882],{"className":170,"code":95881,"language":172,"meta":46,"style":46},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[48,95883,95884,95889,95916],{"__ignoreMap":46},[51,95885,95886],{"class":53,"line":54},[51,95887,95888],{"class":601},"#三维数组\n",[51,95890,95891,95894,95896,95898,95900,95902,95904,95906,95908,95910,95912,95914],{"class":53,"line":185},[51,95892,95893],{"class":65},"aaa",[51,95895,70],{"class":69},[51,95897,95799],{"class":65},[51,95899,31872],{"class":248},[51,95901,70],{"class":69},[51,95903,546],{"class":65},[51,95905,620],{"class":278},[51,95907,920],{"class":65},[51,95909,614],{"class":278},[51,95911,920],{"class":65},[51,95913,835],{"class":278},[51,95915,30876],{"class":65},[51,95917,95918],{"class":53,"line":202},[51,95919,95920],{"class":65},"aaa.shape\n",[513,95922,95924],{"id":95923},"_222-randint语句","2.2.2 randint语句",[41,95926,95928],{"className":170,"code":95927,"language":172,"meta":46,"style":46},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[48,95929,95930,95935],{"__ignoreMap":46},[51,95931,95932],{"class":53,"line":54},[51,95933,95934],{"class":601},"#生成随机的整数 random.randint(low,high,size)\n",[51,95936,95937,95939,95941,95943],{"class":53,"line":185},[51,95938,93486],{"class":65},[51,95940,861],{"class":278},[51,95942,14098],{"class":65},[51,95944,95945],{"class":601},"#0~5中的随机一个数\n",[10,95947,95784],{},[41,95949,95951],{"className":170,"code":95950,"language":172,"meta":46,"style":46},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[48,95952,95953,95958,95980],{"__ignoreMap":46},[51,95954,95955],{"class":53,"line":54},[51,95956,95957],{"class":601},"#一维\n",[51,95959,95960,95962,95964,95966,95968,95970,95972,95974,95976,95978],{"class":53,"line":185},[51,95961,93486],{"class":65},[51,95963,759],{"class":278},[51,95965,920],{"class":65},[51,95967,1014],{"class":278},[51,95969,920],{"class":65},[51,95971,31872],{"class":248},[51,95973,70],{"class":69},[51,95975,546],{"class":65},[51,95977,988],{"class":278},[51,95979,30876],{"class":65},[51,95981,95982],{"class":53,"line":202},[51,95983,95984],{"class":601},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[10,95986,95839],{},[10,95988,95989],{},[460,95990],{"alt":46,"src":95991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[10,95993,95878],{},[10,95995,95996],{},[460,95997],{"alt":46,"src":95998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[513,96000,96002],{"id":96001},"_222-rand语句","2.2.2 rand语句",[10,96004,96005],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[41,96007,96009],{"className":170,"code":96008,"language":172,"meta":46,"style":46},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[48,96010,96011,96024,96029],{"__ignoreMap":46},[51,96012,96013,96016,96018,96020,96022],{"class":53,"line":54},[51,96014,96015],{"class":65},"np.random.rand(",[51,96017,853],{"class":278},[51,96019,920],{"class":65},[51,96021,988],{"class":278},[51,96023,282],{"class":65},[51,96025,96026],{"class":53,"line":185},[51,96027,96028],{"class":601},"#第一个参数100：行数，表示有100个样本\n",[51,96030,96031],{"class":53,"line":202},[51,96032,96033],{"class":601},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[486,96035,96037],{"id":96036},"_23-arange创建数组","2.3 arange()创建数组",[513,96039,96041],{"id":96040},"_231-函数语句","2.3.1 函数语句",[41,96043,96045],{"className":170,"code":96044,"language":172,"meta":46,"style":46},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[48,96046,96047,96061,96066,96071,96076,96081,96086,96091],{"__ignoreMap":46},[51,96048,96049,96052,96054,96056,96059],{"class":53,"line":54},[51,96050,96051],{"class":65},"numpy.arange([start,] stop[, step], ",[51,96053,93872],{"class":248},[51,96055,70],{"class":69},[51,96057,96058],{"class":278},"None",[51,96060,282],{"class":65},[51,96062,96063],{"class":53,"line":185},[51,96064,96065],{"class":601},"#参数\n",[51,96067,96068],{"class":53,"line":202},[51,96069,96070],{"class":61},"\"\"\"\n",[51,96072,96073],{"class":53,"line":209},[51,96074,96075],{"class":61},"start:起始值，可选，默认从 0 开始。\n",[51,96077,96078],{"class":53,"line":223},[51,96079,96080],{"class":61},"stop:结束值（不包含该值）。\n",[51,96082,96083],{"class":53,"line":237},[51,96084,96085],{"class":61},"step:步长，可选，默认是 1。可以为浮点数。\n",[51,96087,96088],{"class":53,"line":242},[51,96089,96090],{"class":61},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[51,96092,96093],{"class":53,"line":257},[51,96094,96070],{"class":61},[513,96096,96098],{"id":96097},"_232-实例","2.3.2 实例",[41,96100,96102],{"className":170,"code":96101,"language":172,"meta":46,"style":46},"#创建一维数组\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",[48,96103,96104,96108,96132,96137,96142,96146,96169,96173,96177,96182,96187],{"__ignoreMap":46},[51,96105,96106],{"class":53,"line":54},[51,96107,93477],{"class":601},[51,96109,96110,96112,96114,96116,96118,96120,96122,96124,96126,96128,96130],{"class":53,"line":185},[51,96111,93374],{"class":65},[51,96113,759],{"class":278},[51,96115,920],{"class":65},[51,96117,1267],{"class":278},[51,96119,920],{"class":65},[51,96121,759],{"class":278},[51,96123,920],{"class":65},[51,96125,93872],{"class":248},[51,96127,70],{"class":69},[51,96129,549],{"class":278},[51,96131,282],{"class":65},[51,96133,96134],{"class":53,"line":202},[51,96135,96136],{"class":601},"#输出结果：\n",[51,96138,96139],{"class":53,"line":209},[51,96140,96141],{"class":601},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[51,96143,96144],{"class":53,"line":223},[51,96145,94319],{"class":601},[51,96147,96148,96151,96153,96155,96157,96160,96162,96164,96166],{"class":53,"line":237},[51,96149,96150],{"class":65},"np.array([np.arange(",[51,96152,759],{"class":278},[51,96154,920],{"class":65},[51,96156,835],{"class":278},[51,96158,96159],{"class":65},"),np.arange(",[51,96161,835],{"class":278},[51,96163,920],{"class":65},[51,96165,911],{"class":278},[51,96167,96168],{"class":65},")])\n",[51,96170,96171],{"class":53,"line":242},[51,96172,93936],{"class":601},[51,96174,96175],{"class":53,"line":257},[51,96176,96070],{"class":61},[51,96178,96179],{"class":53,"line":262},[51,96180,96181],{"class":61},"array([[1, 2, 3],\n",[51,96183,96184],{"class":53,"line":285},[51,96185,96186],{"class":61},"       [4, 5, 6]])\n",[51,96188,96189],{"class":53,"line":296},[51,96190,96070],{"class":61},[486,96192,96194],{"id":96193},"_24-生态分布","2.4 生态分布",[513,96196,96198],{"id":96197},"_241-标准正态分布","2.4.1 标准正态分布",[10,96200,96201],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[10,96203,96204],{},[460,96205],{"alt":46,"src":96206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[513,96208,96210],{"id":96209},"_242-常规正态分布","2.4.2 常规正态分布",[41,96212,96214],{"className":170,"code":96213,"language":172,"meta":46,"style":46},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[48,96215,96216,96221,96226,96231],{"__ignoreMap":46},[51,96217,96218],{"class":53,"line":54},[51,96219,96220],{"class":65},"random.normal(loc,scale,size)也可以生成正态分布\n",[51,96222,96223],{"class":53,"line":185},[51,96224,96225],{"class":601},"#loc:期望\n",[51,96227,96228],{"class":53,"line":202},[51,96229,96230],{"class":601},"#scale:方差\n",[51,96232,96233],{"class":53,"line":209},[51,96234,96235],{"class":601},"#size:用于确定是几维的数列\n",[10,96237,96238],{},[460,96239],{"alt":46,"src":96240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[486,96242,96244],{"id":96243},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[10,96246,96247],{},"ndim:秩，维度个数",[10,96249,96250],{},"size:数组元素的个数",[10,96252,96253],{},"shape:数组的形状",[10,96255,96256],{},"dtype:数组元素的类型",[10,96258,96259],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[10,96261,96262],{},"他们都是属性，通过数组.属性的形式来确定",[10,96264,96265],{},"如果需要输出多个可以通过以下方式：",[41,96267,96269],{"className":170,"code":96268,"language":172,"meta":46,"style":46},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[48,96270,96271],{"__ignoreMap":46},[51,96272,96273,96275],{"class":53,"line":54},[51,96274,30794],{"class":278},[51,96276,96277],{"class":65},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[486,96279,96281],{"id":96280},"_26-其他方式创建数组","2.6 其他方式创建数组",[513,96283,96285],{"id":96284},"_261-zeros创建数组","2.6.1 zeros()创建数组",[10,96287,96288],{},"①创建一维数组",[41,96290,96292],{"className":170,"code":96291,"language":172,"meta":46,"style":46},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[48,96293,96294,96303,96307,96312,96317],{"__ignoreMap":46},[51,96295,96296,96299,96301],{"class":53,"line":54},[51,96297,96298],{"class":65},"np.zeros(",[51,96300,988],{"class":278},[51,96302,282],{"class":65},[51,96304,96305],{"class":53,"line":185},[51,96306,96070],{"class":61},[51,96308,96309],{"class":53,"line":202},[51,96310,96311],{"class":61},"输出结果：\n",[51,96313,96314],{"class":53,"line":209},[51,96315,96316],{"class":61},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[51,96318,96319],{"class":53,"line":223},[51,96320,96070],{"class":61},[10,96322,96323],{},"上方代码等价于：",[41,96325,96327],{"className":170,"code":96326,"language":172,"meta":46,"style":46},"np.zeros(shape=(10))#创建10个元素的0数组\n",[48,96328,96329],{"__ignoreMap":46},[51,96330,96331,96333,96336,96338,96340,96342,96344],{"class":53,"line":54},[51,96332,96298],{"class":65},[51,96334,96335],{"class":248},"shape",[51,96337,70],{"class":69},[51,96339,546],{"class":65},[51,96341,988],{"class":278},[51,96343,83143],{"class":65},[51,96345,96346],{"class":601},"#创建10个元素的0数组\n",[10,96348,96349],{},"也可以指定类型",[41,96351,96353],{"className":170,"code":96352,"language":172,"meta":46,"style":46},"#指定类型\nnp.zeros(5,dtype=int)\n",[48,96354,96355,96360],{"__ignoreMap":46},[51,96356,96357],{"class":53,"line":54},[51,96358,96359],{"class":601},"#指定类型\n",[51,96361,96362,96364,96366,96368,96370,96372,96374],{"class":53,"line":185},[51,96363,96298],{"class":65},[51,96365,861],{"class":278},[51,96367,920],{"class":65},[51,96369,93872],{"class":248},[51,96371,70],{"class":69},[51,96373,549],{"class":278},[51,96375,282],{"class":65},[10,96377,96378],{},"②创建二维数组",[41,96380,96382],{"className":170,"code":96381,"language":172,"meta":46,"style":46},"np.zeros((3,4),dtype=int)\n",[48,96383,96384],{"__ignoreMap":46},[51,96385,96386,96389,96391,96393,96395,96397,96399,96401,96403],{"class":53,"line":54},[51,96387,96388],{"class":65},"np.zeros((",[51,96390,614],{"class":278},[51,96392,920],{"class":65},[51,96394,835],{"class":278},[51,96396,42630],{"class":65},[51,96398,93872],{"class":248},[51,96400,70],{"class":69},[51,96402,549],{"class":278},[51,96404,282],{"class":65},[10,96406,96407],{},"③创建三维数组",[41,96409,96411],{"className":170,"code":96410,"language":172,"meta":46,"style":46},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[48,96412,96413,96418],{"__ignoreMap":46},[51,96414,96415],{"class":53,"line":54},[51,96416,96417],{"class":601},"#创建三维数组\n",[51,96419,96420,96422,96424,96426,96428,96430,96432,96434,96436,96438,96440],{"class":53,"line":185},[51,96421,96388],{"class":65},[51,96423,614],{"class":278},[51,96425,920],{"class":65},[51,96427,835],{"class":278},[51,96429,920],{"class":65},[51,96431,861],{"class":278},[51,96433,42630],{"class":65},[51,96435,93872],{"class":248},[51,96437,70],{"class":69},[51,96439,549],{"class":278},[51,96441,282],{"class":65},[10,96443,96444],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[41,96446,96448],{"className":170,"code":96447,"language":172,"meta":46,"style":46},"#使用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",[48,96449,96450,96455,96470,96475,96480,96502],{"__ignoreMap":46},[51,96451,96452],{"class":53,"line":54},[51,96453,96454],{"class":601},"#使用zeros_like将创建的一维数组变成全0的数组\n",[51,96456,96457,96459,96461,96463,96465,96467],{"class":53,"line":185},[51,96458,780],{"class":65},[51,96460,70],{"class":69},[51,96462,93374],{"class":65},[51,96464,835],{"class":278},[51,96466,971],{"class":65},[51,96468,96469],{"class":601},"#这个得到的结果：一维数组0，1，2，3\n",[51,96471,96472],{"class":53,"line":202},[51,96473,96474],{"class":65},"np.zeros_like(a)\n",[51,96476,96477],{"class":53,"line":209},[51,96478,96479],{"class":601},"#使用zeros_like将创建的二维数组变成全0的数组\n",[51,96481,96482,96484,96486,96488,96490,96492,96494,96496,96498,96500],{"class":53,"line":223},[51,96483,93678],{"class":65},[51,96485,70],{"class":69},[51,96487,95799],{"class":65},[51,96489,31872],{"class":248},[51,96491,70],{"class":69},[51,96493,546],{"class":65},[51,96495,835],{"class":278},[51,96497,920],{"class":65},[51,96499,861],{"class":278},[51,96501,30876],{"class":65},[51,96503,96504],{"class":53,"line":237},[51,96505,96506],{"class":65},"np.zeros_like(aa)\n",[513,96508,96510],{"id":96509},"_262-ones创建数组","2.6.2 ones()创建数组",[10,96512,96513],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[513,96515,96517],{"id":96516},"_263-empty创建数组","2.6.3 empty()创建数组",[10,96519,96520],{},"①empty()用法",[41,96522,96524],{"className":170,"code":96523,"language":172,"meta":46,"style":46},"numpy.empty(shape,dtype=float,order='c')\n",[48,96525,96526],{"__ignoreMap":46},[51,96527,96528,96531,96533,96535,96537,96539,96541,96543,96545],{"class":53,"line":54},[51,96529,96530],{"class":65},"numpy.empty(shape,",[51,96532,93872],{"class":248},[51,96534,70],{"class":69},[51,96536,584],{"class":278},[51,96538,920],{"class":65},[51,96540,95669],{"class":248},[51,96542,70],{"class":69},[51,96544,76400],{"class":61},[51,96546,282],{"class":65},[10,96548,96549],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[10,96551,96552],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[10,96554,96555],{},[460,96556],{"alt":46,"src":96557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[10,96559,96560],{},"②empty()用法",[41,96562,96564],{"className":170,"code":96563,"language":172,"meta":46,"style":46},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[48,96565,96566,96587,96599,96620,96625],{"__ignoreMap":46},[51,96567,96568,96570,96572,96575,96577,96579,96581,96583,96585],{"class":53,"line":54},[51,96569,1387],{"class":65},[51,96571,70],{"class":69},[51,96573,96574],{"class":65},"np.empty(",[51,96576,988],{"class":278},[51,96578,920],{"class":65},[51,96580,93872],{"class":248},[51,96582,70],{"class":69},[51,96584,549],{"class":278},[51,96586,282],{"class":65},[51,96588,96589,96591,96593,96595,96597],{"class":53,"line":185},[51,96590,1362],{"class":65},[51,96592,70],{"class":69},[51,96594,93374],{"class":65},[51,96596,861],{"class":278},[51,96598,282],{"class":65},[51,96600,96601,96604,96606,96609,96611,96613,96616,96618],{"class":53,"line":202},[51,96602,96603],{"class":65},"np.add(",[51,96605,620],{"class":278},[51,96607,96608],{"class":65},",x,",[51,96610,93426],{"class":248},[51,96612,70],{"class":69},[51,96614,96615],{"class":65},"y[:",[51,96617,861],{"class":278},[51,96619,5042],{"class":65},[51,96621,96622],{"class":53,"line":209},[51,96623,96624],{"class":601},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[51,96626,96627],{"class":53,"line":223},[51,96628,96629],{"class":65},"y\n",[10,96631,11898],{},[10,96633,96634],{},[460,96635],{"alt":46,"src":96636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[41,96638,96640],{"className":170,"code":96639,"language":172,"meta":46,"style":46},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[48,96641,96642,96658,96678,96693],{"__ignoreMap":46},[51,96643,96644,96646,96648,96650,96652,96654,96656],{"class":53,"line":54},[51,96645,1362],{"class":65},[51,96647,70],{"class":69},[51,96649,93374],{"class":65},[51,96651,759],{"class":278},[51,96653,920],{"class":65},[51,96655,886],{"class":278},[51,96657,282],{"class":65},[51,96659,96660,96662,96664,96666,96668,96670,96672,96674,96676],{"class":53,"line":185},[51,96661,1387],{"class":65},[51,96663,70],{"class":69},[51,96665,96574],{"class":65},[51,96667,861],{"class":278},[51,96669,920],{"class":65},[51,96671,93872],{"class":248},[51,96673,70],{"class":69},[51,96675,549],{"class":278},[51,96677,282],{"class":65},[51,96679,96680,96683,96685,96687,96689,96691],{"class":53,"line":202},[51,96681,96682],{"class":65},"np.add(x,",[51,96684,620],{"class":278},[51,96686,920],{"class":65},[51,96688,93426],{"class":248},[51,96690,70],{"class":69},[51,96692,93821],{"class":65},[51,96694,96695],{"class":53,"line":209},[51,96696,96697],{"class":601},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[10,96699,96700],{},"③empty_like()",[10,96702,96703],{},[691,96704,96705,96706,96711],{},"创建一个",[691,96707,96708],{},[691,96709,96710],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[10,96713,96714,96717],{},[48,96715,96716],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[10,96719,96720],{},[460,96721],{"alt":46,"src":96722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[513,96724,96726],{"id":96725},"_264-用法","2.6.4 ？？用法",[10,96728,96729],{},"当想查看一个函数的参数时，可以通过？？来实现",[41,96731,96733],{"className":170,"code":96732,"language":172,"meta":46,"style":46},"np.full??\n",[48,96734,96735],{"__ignoreMap":46},[51,96736,96737,96740],{"class":53,"line":54},[51,96738,96739],{"class":65},"np.full",[51,96741,96742],{"class":77775},"??\n",[513,96744,96746],{"id":96745},"_265-full创建数组","2.6.5 full()创建数组",[41,96748,96750],{"className":170,"code":96749,"language":172,"meta":46,"style":46},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[48,96751,96752,96757],{"__ignoreMap":46},[51,96753,96754],{"class":53,"line":54},[51,96755,96756],{"class":65},"full(shape,fill_value)\n",[51,96758,96759],{"class":53,"line":185},[51,96760,96761],{"class":65},"创建全为某个指定值的数组\n",[10,96763,94902],{},[41,96765,96767],{"className":170,"code":96766,"language":172,"meta":46,"style":46},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[48,96768,96769,96774],{"__ignoreMap":46},[51,96770,96771],{"class":53,"line":54},[51,96772,96773],{"class":601},"#创建一个一维数组,以20进行填充\n",[51,96775,96776,96779,96781,96783,96785],{"class":53,"line":185},[51,96777,96778],{"class":65},"np.full(",[51,96780,988],{"class":278},[51,96782,920],{"class":65},[51,96784,1242],{"class":278},[51,96786,282],{"class":65},[10,96788,93663],{},[41,96790,96792],{"className":170,"code":96791,"language":172,"meta":46,"style":46},"#创建二维数组\nnp.full((3,5),11)\n",[48,96793,96794,96798],{"__ignoreMap":46},[51,96795,96796],{"class":53,"line":54},[51,96797,94319],{"class":601},[51,96799,96800,96803,96805,96807,96809,96811,96813],{"class":53,"line":185},[51,96801,96802],{"class":65},"np.full((",[51,96804,614],{"class":278},[51,96806,920],{"class":65},[51,96808,861],{"class":278},[51,96810,42630],{"class":65},[51,96812,1014],{"class":278},[51,96814,282],{"class":65},[10,96816,96817],{},"③full_like用法",[10,96819,96820],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[10,96822,96823],{},"这里是指定填充而已",[41,96825,96827],{"className":170,"code":96826,"language":172,"meta":46,"style":46},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[48,96828,96829,96834,96858,96863],{"__ignoreMap":46},[51,96830,96831],{"class":53,"line":54},[51,96832,96833],{"class":601},"#创建一个指定形状数组\n",[51,96835,96836,96838,96840,96842,96844,96846,96848,96850,96852,96854,96856],{"class":53,"line":185},[51,96837,780],{"class":65},[51,96839,70],{"class":69},[51,96841,93374],{"class":65},[51,96843,759],{"class":278},[51,96845,920],{"class":65},[51,96847,867],{"class":278},[51,96849,93379],{"class":65},[51,96851,835],{"class":278},[51,96853,920],{"class":65},[51,96855,962],{"class":278},[51,96857,282],{"class":65},[51,96859,96860],{"class":53,"line":202},[51,96861,96862],{"class":601},"#进行指定填充\n",[51,96864,96865,96868,96870],{"class":53,"line":209},[51,96866,96867],{"class":65},"np.full_like(a,",[51,96869,988],{"class":278},[51,96871,282],{"class":65},[10,96873,11898],{},[10,96875,96876],{},[460,96877],{"alt":46,"src":96878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[513,96880,96882],{"id":96881},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22381,96884,96886],{"id":96885},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[41,96888,96890],{"className":170,"code":96889,"language":172,"meta":46,"style":46},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[48,96891,96892,96909],{"__ignoreMap":46},[51,96893,96894,96897,96899,96901,96903,96905,96907],{"class":53,"line":54},[51,96895,96896],{"class":65},"np.eye(",[51,96898,835],{"class":278},[51,96900,920],{"class":65},[51,96902,93872],{"class":248},[51,96904,70],{"class":69},[51,96906,549],{"class":278},[51,96908,282],{"class":65},[51,96910,96911],{"class":53,"line":185},[51,96912,96913],{"class":601},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22381,96915,96917],{"id":96916},"_2662-法2identity","2.6.6.2 法2：identity()",[41,96919,96921],{"className":170,"code":96920,"language":172,"meta":46,"style":46},"#identity()\nnp.identity(5,dtype=int)\n",[48,96922,96923,96928],{"__ignoreMap":46},[51,96924,96925],{"class":53,"line":54},[51,96926,96927],{"class":601},"#identity()\n",[51,96929,96930,96933,96935,96937,96939,96941,96943],{"class":53,"line":185},[51,96931,96932],{"class":65},"np.identity(",[51,96934,861],{"class":278},[51,96936,920],{"class":65},[51,96938,93872],{"class":248},[51,96940,70],{"class":69},[51,96942,549],{"class":278},[51,96944,282],{"class":65},[10,96946,96947],{},"两个函数是有区别的",[10,96949,96950],{},[460,96951],{"alt":46,"src":96952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[10,96954,96955],{},[460,96956],{"alt":46,"src":96957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[41,96959,96961],{"className":170,"code":96960,"language":172,"meta":46,"style":46},"# 创建一个 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",[48,96962,96963,96968,96980,96985,96990,96995,97000,97004,97009,97029,97033,97038,97043],{"__ignoreMap":46},[51,96964,96965],{"class":53,"line":54},[51,96966,96967],{"class":601},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[51,96969,96970,96972,96974,96976,96978],{"class":53,"line":185},[51,96971,96896],{"class":65},[51,96973,614],{"class":278},[51,96975,12819],{"class":65},[51,96977,835],{"class":278},[51,96979,282],{"class":65},[51,96981,96982],{"class":53,"line":202},[51,96983,96984],{"class":601},"# 输出:\n",[51,96986,96987],{"class":53,"line":209},[51,96988,96989],{"class":601},"# [[1. 0. 0. 0.]\n",[51,96991,96992],{"class":53,"line":223},[51,96993,96994],{"class":601},"#  [0. 1. 0. 0.]\n",[51,96996,96997],{"class":53,"line":237},[51,96998,96999],{"class":601},"#  [0. 0. 1. 0.]]\n",[51,97001,97002],{"class":53,"line":242},[51,97003,206],{"emptyLinePlaceholder":205},[51,97005,97006],{"class":53,"line":257},[51,97007,97008],{"class":601},"# 对角线向上偏移1\n",[51,97010,97011,97013,97015,97017,97019,97021,97023,97025,97027],{"class":53,"line":262},[51,97012,96896],{"class":65},[51,97014,614],{"class":278},[51,97016,12819],{"class":65},[51,97018,835],{"class":278},[51,97020,12819],{"class":65},[51,97022,1035],{"class":248},[51,97024,70],{"class":69},[51,97026,759],{"class":278},[51,97028,282],{"class":65},[51,97030,97031],{"class":53,"line":285},[51,97032,96984],{"class":601},[51,97034,97035],{"class":53,"line":296},[51,97036,97037],{"class":601},"# [[0. 1. 0. 0.]\n",[51,97039,97040],{"class":53,"line":307},[51,97041,97042],{"class":601},"#  [0. 0. 1. 0.]\n",[51,97044,97045],{"class":53,"line":324},[51,97046,97047],{"class":601},"#  [0. 0. 0. 1.]]\n",[513,97049,97051],{"id":97050},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[41,97053,97055],{"className":170,"code":97054,"language":172,"meta":46,"style":46},"#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",[48,97056,97057,97062,97066,97071,97076,97081,97086,97091,97096,97101,97106],{"__ignoreMap":46},[51,97058,97059],{"class":53,"line":54},[51,97060,97061],{"class":601},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[51,97063,97064],{"class":53,"line":185},[51,97065,96070],{"class":61},[51,97067,97068],{"class":53,"line":202},[51,97069,97070],{"class":61},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[51,97072,97073],{"class":53,"line":209},[51,97074,97075],{"class":61},"参数介绍：\n",[51,97077,97078],{"class":53,"line":223},[51,97079,97080],{"class":61},"start：序列的起始值\n",[51,97082,97083],{"class":53,"line":237},[51,97084,97085],{"class":61},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[51,97087,97088],{"class":53,"line":242},[51,97089,97090],{"class":61},"num：要生长的等步长的样本数量，默认为50\n",[51,97092,97093],{"class":53,"line":257},[51,97094,97095],{"class":61},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[51,97097,97098],{"class":53,"line":262},[51,97099,97100],{"class":61},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[51,97102,97103],{"class":53,"line":285},[51,97104,97105],{"class":61},"dtype：ndarry的数据类型\n",[51,97107,97108],{"class":53,"line":296},[51,97109,96070],{"class":61},[10,97111,97112],{},[460,97113],{"alt":46,"src":97114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[10,97116,97117],{},"这里num=是可以省略的",[10,97119,97120],{},"也就是下方两行代码结果是一模一样的",[41,97122,97124],{"className":170,"code":97123,"language":172,"meta":46,"style":46},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[48,97125,97126,97143],{"__ignoreMap":46},[51,97127,97128,97131,97133,97135,97137,97139,97141],{"class":53,"line":54},[51,97129,97130],{"class":65},"np.linspace(",[51,97132,759],{"class":278},[51,97134,920],{"class":65},[51,97136,861],{"class":278},[51,97138,920],{"class":65},[51,97140,861],{"class":278},[51,97142,282],{"class":65},[51,97144,97145,97147,97149,97151,97153,97155,97157,97159,97161],{"class":53,"line":185},[51,97146,97130],{"class":65},[51,97148,759],{"class":278},[51,97150,920],{"class":65},[51,97152,861],{"class":278},[51,97154,920],{"class":65},[51,97156,2067],{"class":248},[51,97158,70],{"class":69},[51,97160,861],{"class":278},[51,97162,282],{"class":65},[513,97164,97166],{"id":97165},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[41,97168,97170],{"className":170,"code":97169,"language":172,"meta":46,"style":46},"#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",[48,97171,97172,97177,97181,97186,97191,97196,97201,97205,97210,97215,97219],{"__ignoreMap":46},[51,97173,97174],{"class":53,"line":54},[51,97175,97176],{"class":601},"#logspace函数用于创建一个等比数列，格式如下：\n",[51,97178,97179],{"class":53,"line":185},[51,97180,96070],{"class":61},[51,97182,97183],{"class":53,"line":202},[51,97184,97185],{"class":61},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[51,97187,97188],{"class":53,"line":209},[51,97189,97190],{"class":61},"参数为：\n",[51,97192,97193],{"class":53,"line":223},[51,97194,97195],{"class":61},"start:序列的起始位置为：base**start\n",[51,97197,97198],{"class":53,"line":237},[51,97199,97200],{"class":61},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[51,97202,97203],{"class":53,"line":242},[51,97204,97090],{"class":61},[51,97206,97207],{"class":53,"line":257},[51,97208,97209],{"class":61},"endpoint：是否包含 stop 这个值，默认是 True\n",[51,97211,97212],{"class":53,"line":262},[51,97213,97214],{"class":61},"base：对数的底数，默认是 10（常见对数）\n",[51,97216,97217],{"class":53,"line":285},[51,97218,97105],{"class":61},[51,97220,97221],{"class":53,"line":296},[51,97222,96070],{"class":61},[10,97224,97225],{},[460,97226],{"alt":46,"src":97227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[10,97229,97230],{},"logspace()函数中的num参数也是可以不写num=的",[10,97232,97233],{},"endpoint是不可以省略的",[464,97235,97236],{},"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":46,"searchDepth":185,"depth":185,"links":97238},[97239,97243,97248,97252,97256,97257],{"id":95628,"depth":185,"text":95629,"children":97240},[97241,97242],{"id":95632,"depth":202,"text":95633},{"id":95705,"depth":202,"text":95706},{"id":95737,"depth":185,"text":95738,"children":97244},[97245,97246,97247],{"id":95741,"depth":202,"text":95742},{"id":95923,"depth":202,"text":95924},{"id":96001,"depth":202,"text":96002},{"id":96036,"depth":185,"text":96037,"children":97249},[97250,97251],{"id":96040,"depth":202,"text":96041},{"id":96097,"depth":202,"text":96098},{"id":96193,"depth":185,"text":96194,"children":97253},[97254,97255],{"id":96197,"depth":202,"text":96198},{"id":96209,"depth":202,"text":96210},{"id":96243,"depth":185,"text":96244},{"id":96280,"depth":185,"text":96281,"children":97258},[97259,97260,97261,97262,97263,97264,97265,97266],{"id":96284,"depth":202,"text":96285},{"id":96509,"depth":202,"text":96510},{"id":96516,"depth":202,"text":96517},{"id":96725,"depth":202,"text":96726},{"id":96745,"depth":202,"text":96746},{"id":96881,"depth":202,"text":96882},{"id":97050,"depth":202,"text":97051},{"id":97165,"depth":202,"text":97166},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95620,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97273,"title":97274,"body":97275,"description":23760,"extension":469,"meta":97368,"navigation":205,"path":97369,"seo":97370,"stem":97371,"__hash__":97372},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97276,"toc":97366},[97277,97280,97283,97286,97289,97292,97295,97298,97301,97304,97307,97310,97312,97315,97318,97323,97326,97329,97363],[14,97278,97274],{"id":97279},"_20魔法命令mprun",[10,97281,97282],{},"逐行分析数据内存的使用情况",[10,97284,97285],{},"语法格式：",[10,97287,97288],{},"%mprun -f 模块名.函数名 模块名.函数名()",[10,97290,97291],{},"分析结果列如下：",[10,97293,97294],{},"Line行号",[10,97296,97297],{},"Mem usage内存使用大小",[10,97299,97300],{},"increment内存增量",[10,97302,97303],{},"Line content代码内容",[10,97305,97306],{},"补充说明：",[10,97308,97309],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[10,97311,95575],{},[10,97313,97314],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[10,97316,97317],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[10,97319,97320],{},[460,97321],{"alt":46,"src":97322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[10,97324,97325],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[10,97327,97328],{},"这时候需要重新加载模块",[41,97330,97332],{"className":170,"code":97331,"language":172,"meta":46,"style":46},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[48,97333,97334,97339,97346,97351],{"__ignoreMap":46},[51,97335,97336],{"class":53,"line":54},[51,97337,97338],{"class":601},"#重新加载模块\n",[51,97340,97341,97343],{"class":53,"line":185},[51,97342,179],{"class":69},[51,97344,97345],{"class":65}," importlib\n",[51,97347,97348],{"class":53,"line":202},[51,97349,97350],{"class":65},"importlib.reload(mprun_test)\n",[51,97352,97353,97355,97358,97360],{"class":53,"line":209},[51,97354,870],{"class":69},[51,97356,97357],{"class":65},"mprun ",[51,97359,1074],{"class":69},[51,97361,97362],{"class":65},"f mprun_test.fun_test mprun_test.fun_test()\n",[464,97364,97365],{},"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":46,"searchDepth":185,"depth":185,"links":97367},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97274,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97374,"title":97375,"body":97376,"description":23760,"extension":469,"meta":97393,"navigation":205,"path":97394,"seo":97395,"stem":97396,"__hash__":97397},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97377,"toc":97391},[97378,97381,97386],[14,97379,97375],{"id":97380},"_3一维数组的索引和切片",[10,97382,97383],{},[460,97384],{"alt":46,"src":97385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[10,97387,97388],{},[460,97389],{"alt":46,"src":97390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":46,"searchDepth":185,"depth":185,"links":97392},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97375,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97399,"title":97400,"body":97401,"description":23760,"extension":469,"meta":97884,"navigation":205,"path":97885,"seo":97886,"stem":97887,"__hash__":97888},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97402,"toc":97882},[97403,97406,97409,97414,97447,97450,97488,97491,97525,97528,97633,97636,97673,97676,97777,97780,97831,97834,97876,97879],[14,97404,97400],{"id":97405},"_4二维数组的索引与切片",[10,97407,97408],{},"①获取指定单个元素",[10,97410,97411],{},[460,97412],{"alt":46,"src":97413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[41,97415,97417],{"className":170,"code":97416,"language":172,"meta":46,"style":46},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[48,97418,97419,97424,97429,97434],{"__ignoreMap":46},[51,97420,97421],{"class":53,"line":54},[51,97422,97423],{"class":601},"#获取元素9\n",[51,97425,97426],{"class":53,"line":185},[51,97427,97428],{"class":601},"#先获取所在行，再获取所在列\n",[51,97430,97431],{"class":53,"line":202},[51,97432,97433],{"class":601},"#数组[行索引号，列索引号]\n",[51,97435,97436,97439,97441,97443,97445],{"class":53,"line":209},[51,97437,97438],{"class":65},"a[",[51,97440,759],{"class":278},[51,97442,920],{"class":65},[51,97444,620],{"class":278},[51,97446,33621],{"class":65},[10,97448,97449],{},"②获取整行元素",[41,97451,97453],{"className":170,"code":97452,"language":172,"meta":46,"style":46},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[48,97454,97455,97460,97465,97473,97478],{"__ignoreMap":46},[51,97456,97457],{"class":53,"line":54},[51,97458,97459],{"class":601},"#获取整行 数组[行索引号]\n",[51,97461,97462],{"class":53,"line":185},[51,97463,97464],{"class":601},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[51,97466,97467,97469,97471],{"class":53,"line":202},[51,97468,97438],{"class":65},[51,97470,620],{"class":278},[51,97472,33621],{"class":65},[51,97474,97475],{"class":53,"line":209},[51,97476,97477],{"class":601},"#也可以负索引获取一行\n",[51,97479,97480,97482,97484,97486],{"class":53,"line":223},[51,97481,97438],{"class":65},[51,97483,1074],{"class":69},[51,97485,759],{"class":278},[51,97487,33621],{"class":65},[10,97489,97490],{},"③获取整列元素",[41,97492,97494],{"className":170,"code":97493,"language":172,"meta":46,"style":46},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[48,97495,97496,97501,97510,97515],{"__ignoreMap":46},[51,97497,97498],{"class":53,"line":54},[51,97499,97500],{"class":601},"#获取整列 数组名[:,列索引]\n",[51,97502,97503,97506,97508],{"class":53,"line":185},[51,97504,97505],{"class":65},"a[:,",[51,97507,620],{"class":278},[51,97509,33621],{"class":65},[51,97511,97512],{"class":53,"line":202},[51,97513,97514],{"class":601},"#也可以负索引获取一列\n",[51,97516,97517,97519,97521,97523],{"class":53,"line":209},[51,97518,97505],{"class":65},[51,97520,1074],{"class":69},[51,97522,759],{"class":278},[51,97524,33621],{"class":65},[10,97526,97527],{},"④部分行部分列的元素",[41,97529,97531],{"className":170,"code":97530,"language":172,"meta":46,"style":46},"#部分行部分列 数组名[行切片，列切片]\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",[48,97532,97533,97538,97548,97552,97556,97561,97566,97570,97582,97586,97590,97595,97600,97605,97610,97614,97619],{"__ignoreMap":46},[51,97534,97535],{"class":53,"line":54},[51,97536,97537],{"class":601},"#部分行部分列 数组名[行切片，列切片]\n",[51,97539,97540,97543,97545],{"class":53,"line":185},[51,97541,97542],{"class":65},"a[:",[51,97544,620],{"class":278},[51,97546,97547],{"class":65},",:]\n",[51,97549,97550],{"class":53,"line":202},[51,97551,93936],{"class":601},[51,97553,97554],{"class":53,"line":209},[51,97555,94300],{"class":61},[51,97557,97558],{"class":53,"line":223},[51,97559,97560],{"class":61},"array([[ 1,  2,  3,  4,  5,  6],\n",[51,97562,97563],{"class":53,"line":237},[51,97564,97565],{"class":61},"       [ 7,  8,  9, 10, 11, 12]])\n",[51,97567,97568],{"class":53,"line":242},[51,97569,94300],{"class":61},[51,97571,97572,97574,97576,97578,97580],{"class":53,"line":257},[51,97573,97505],{"class":65},[51,97575,759],{"class":278},[51,97577,1401],{"class":65},[51,97579,835],{"class":278},[51,97581,33621],{"class":65},[51,97583,97584],{"class":53,"line":262},[51,97585,93936],{"class":601},[51,97587,97588],{"class":53,"line":285},[51,97589,94300],{"class":61},[51,97591,97592],{"class":53,"line":296},[51,97593,97594],{"class":61},"array([[ 2,  3,  4],\n",[51,97596,97597],{"class":53,"line":307},[51,97598,97599],{"class":61},"       [ 8,  9, 10],\n",[51,97601,97602],{"class":53,"line":324},[51,97603,97604],{"class":61},"       [14, 15, 16],\n",[51,97606,97607],{"class":53,"line":329},[51,97608,97609],{"class":61},"       [20, 21, 22]])\n",[51,97611,97612],{"class":53,"line":334},[51,97613,94300],{"class":61},[51,97615,97616],{"class":53,"line":340},[51,97617,97618],{"class":601},"#对列行同时进行切片，使用了step参数\n",[51,97620,97621,97624,97626,97629,97631],{"class":53,"line":345},[51,97622,97623],{"class":65},"a[::",[51,97625,620],{"class":278},[51,97627,97628],{"class":65},",::",[51,97630,620],{"class":278},[51,97632,33621],{"class":65},[10,97634,97635],{},"⑤同时获取两个元素",[41,97637,97639],{"className":170,"code":97638,"language":172,"meta":46,"style":46},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[48,97640,97641,97646,97651],{"__ignoreMap":46},[51,97642,97643],{"class":53,"line":54},[51,97644,97645],{"class":601},"#同时获取第三行第二列，第四行第一列\n",[51,97647,97648],{"class":53,"line":185},[51,97649,97650],{"class":601},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[51,97652,97653,97656,97658,97660,97662,97664,97666,97668,97670],{"class":53,"line":202},[51,97654,97655],{"class":65},"a[(",[51,97657,620],{"class":278},[51,97659,920],{"class":65},[51,97661,614],{"class":278},[51,97663,42621],{"class":65},[51,97665,759],{"class":278},[51,97667,920],{"class":65},[51,97669,733],{"class":278},[51,97671,97672],{"class":65},")]\n",[10,97674,97675],{},"⑥切片，对行进行反向获取",[41,97677,97679],{"className":170,"code":97678,"language":172,"meta":46,"style":46},"#切片 对所有行进行反向获取\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",[48,97680,97681,97686,97696,97700,97704,97709,97714,97719,97724,97728,97733,97749,97753,97758,97763,97768,97773],{"__ignoreMap":46},[51,97682,97683],{"class":53,"line":54},[51,97684,97685],{"class":601},"#切片 对所有行进行反向获取\n",[51,97687,97688,97690,97692,97694],{"class":53,"line":185},[51,97689,97623],{"class":65},[51,97691,1074],{"class":69},[51,97693,759],{"class":278},[51,97695,33621],{"class":65},[51,97697,97698],{"class":53,"line":202},[51,97699,93936],{"class":601},[51,97701,97702],{"class":53,"line":209},[51,97703,94300],{"class":61},[51,97705,97706],{"class":53,"line":223},[51,97707,97708],{"class":61},"array([[19, 20, 21, 22, 23, 24],\n",[51,97710,97711],{"class":53,"line":237},[51,97712,97713],{"class":61},"       [13, 14, 15, 16, 17, 18],\n",[51,97715,97716],{"class":53,"line":242},[51,97717,97718],{"class":61},"       [ 7,  8,  9, 10, 11, 12],\n",[51,97720,97721],{"class":53,"line":257},[51,97722,97723],{"class":61},"       [ 1,  2,  3,  4,  5,  6]])\n",[51,97725,97726],{"class":53,"line":262},[51,97727,94300],{"class":61},[51,97729,97730],{"class":53,"line":285},[51,97731,97732],{"class":601},"#对行列都进行反向切片获取\n",[51,97734,97735,97737,97739,97741,97743,97745,97747],{"class":53,"line":296},[51,97736,97623],{"class":65},[51,97738,1074],{"class":69},[51,97740,759],{"class":278},[51,97742,97628],{"class":65},[51,97744,1074],{"class":69},[51,97746,759],{"class":278},[51,97748,33621],{"class":65},[51,97750,97751],{"class":53,"line":307},[51,97752,94300],{"class":61},[51,97754,97755],{"class":53,"line":324},[51,97756,97757],{"class":61},"array([[24, 23, 22, 21, 20, 19],\n",[51,97759,97760],{"class":53,"line":329},[51,97761,97762],{"class":61},"       [18, 17, 16, 15, 14, 13],\n",[51,97764,97765],{"class":53,"line":334},[51,97766,97767],{"class":61},"       [12, 11, 10,  9,  8,  7],\n",[51,97769,97770],{"class":53,"line":340},[51,97771,97772],{"class":61},"       [ 6,  5,  4,  3,  2,  1]])\n",[51,97774,97775],{"class":53,"line":345},[51,97776,94300],{"class":61},[10,97778,97779],{},"⑦修改元素",[41,97781,97783],{"className":170,"code":97782,"language":172,"meta":46,"style":46},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[48,97784,97785,97790,97808,97813],{"__ignoreMap":46},[51,97786,97787],{"class":53,"line":54},[51,97788,97789],{"class":601},"#获取前两行和前两列\n",[51,97791,97792,97795,97797,97799,97801,97804,97806],{"class":53,"line":185},[51,97793,97794],{"class":65},"sub_a",[51,97796,70],{"class":69},[51,97798,97542],{"class":65},[51,97800,620],{"class":278},[51,97802,97803],{"class":65},",:",[51,97805,620],{"class":278},[51,97807,33621],{"class":65},[51,97809,97810],{"class":53,"line":202},[51,97811,97812],{"class":601},"#修改sub_a第一个元素的值\n",[51,97814,97815,97818,97820,97822,97824,97826,97828],{"class":53,"line":209},[51,97816,97817],{"class":65},"sub_a[",[51,97819,733],{"class":278},[51,97821,920],{"class":65},[51,97823,733],{"class":278},[51,97825,1482],{"class":65},[51,97827,70],{"class":69},[51,97829,97830],{"class":278},"100\n",[10,97832,97833],{},"⑧数组复制copy()",[41,97835,97837],{"className":170,"code":97836,"language":172,"meta":46,"style":46},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[48,97838,97839,97844,97854,97859],{"__ignoreMap":46},[51,97840,97841],{"class":53,"line":54},[51,97842,97843],{"class":601},"#数组复制\n",[51,97845,97846,97849,97851],{"class":53,"line":185},[51,97847,97848],{"class":65},"copy_a",[51,97850,70],{"class":69},[51,97852,97853],{"class":65},"np.copy(sub_a)\n",[51,97855,97856],{"class":53,"line":202},[51,97857,97858],{"class":601},"#修改copy_a后不影响原数组\n",[51,97860,97861,97864,97866,97868,97870,97872,97874],{"class":53,"line":209},[51,97862,97863],{"class":65},"copy_a[",[51,97865,733],{"class":278},[51,97867,920],{"class":65},[51,97869,733],{"class":278},[51,97871,1482],{"class":65},[51,97873,70],{"class":69},[51,97875,97830],{"class":278},[10,97877,97878],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[464,97880,97881],{},"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":46,"searchDepth":185,"depth":185,"links":97883},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97400,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97890,"title":97891,"body":97892,"description":23760,"extension":469,"meta":98384,"navigation":205,"path":98385,"seo":98386,"stem":98387,"__hash__":98388},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97893,"toc":98376},[97894,97897,97901,97904,97907,97960,97963,97988,97991,98010,98030,98033,98049,98053,98099,98103,98145,98149,98152,98155,98158,98161,98164,98226,98286,98290,98293,98350,98354,98359,98368,98373],[14,97895,97891],{"id":97896},"_5改变数组的维度",[486,97898,97900],{"id":97899},"_51-使用reshape","5.1 使用reshape()",[10,97902,97903],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[10,97905,97906],{},"①一维数组转换为二维数组",[41,97908,97910],{"className":170,"code":97909,"language":172,"meta":46,"style":46},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[48,97911,97912,97928,97933,97938,97943],{"__ignoreMap":46},[51,97913,97914,97916,97918,97920,97922,97924,97926],{"class":53,"line":54},[51,97915,780],{"class":65},[51,97917,70],{"class":69},[51,97919,93374],{"class":65},[51,97921,759],{"class":278},[51,97923,920],{"class":65},[51,97925,1065],{"class":278},[51,97927,282],{"class":65},[51,97929,97930],{"class":53,"line":185},[51,97931,97932],{"class":601},"#将一维数组进行转换\n",[51,97934,97935],{"class":53,"line":202},[51,97936,97937],{"class":601},"#注意点：元素个数不可以变\n",[51,97939,97940],{"class":53,"line":209},[51,97941,97942],{"class":601},"#转换维度要保持一致，不一致就异常！！！\n",[51,97944,97945,97947,97949,97952,97954,97956,97958],{"class":53,"line":223},[51,97946,93678],{"class":65},[51,97948,70],{"class":69},[51,97950,97951],{"class":65},"a.reshape(",[51,97953,620],{"class":278},[51,97955,920],{"class":65},[51,97957,886],{"class":278},[51,97959,282],{"class":65},[10,97961,97962],{},"②一维数组转换为三维数组",[41,97964,97966],{"className":170,"code":97965,"language":172,"meta":46,"style":46},"aaa=a.reshape(2,3,2)\n",[48,97967,97968],{"__ignoreMap":46},[51,97969,97970,97972,97974,97976,97978,97980,97982,97984,97986],{"class":53,"line":54},[51,97971,95893],{"class":65},[51,97973,70],{"class":69},[51,97975,97951],{"class":65},[51,97977,620],{"class":278},[51,97979,920],{"class":65},[51,97981,614],{"class":278},[51,97983,920],{"class":65},[51,97985,620],{"class":278},[51,97987,282],{"class":65},[10,97989,97990],{},"③二维数组转化为一维数组",[41,97992,97994],{"className":170,"code":97993,"language":172,"meta":46,"style":46},"#知道元素个数：\naa.reshape(12)\n",[48,97995,97996,98001],{"__ignoreMap":46},[51,97997,97998],{"class":53,"line":54},[51,97999,98000],{"class":601},"#知道元素个数：\n",[51,98002,98003,98006,98008],{"class":53,"line":185},[51,98004,98005],{"class":65},"aa.reshape(",[51,98007,1040],{"class":278},[51,98009,282],{"class":65},[41,98011,98013],{"className":170,"code":98012,"language":172,"meta":46,"style":46},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[48,98014,98015,98020],{"__ignoreMap":46},[51,98016,98017],{"class":53,"line":54},[51,98018,98019],{"class":601},"#不知道元素个数，参数传递-1\n",[51,98021,98022,98024,98026,98028],{"class":53,"line":185},[51,98023,98005],{"class":65},[51,98025,1074],{"class":69},[51,98027,759],{"class":278},[51,98029,282],{"class":65},[10,98031,98032],{},"④三维数组转换为一维数组",[41,98034,98036],{"className":170,"code":98035,"language":172,"meta":46,"style":46},"aaa.reshape(-1)\n",[48,98037,98038],{"__ignoreMap":46},[51,98039,98040,98043,98045,98047],{"class":53,"line":54},[51,98041,98042],{"class":65},"aaa.reshape(",[51,98044,1074],{"class":69},[51,98046,759],{"class":278},[51,98048,282],{"class":65},[486,98050,98052],{"id":98051},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[41,98054,98056],{"className":170,"code":98055,"language":172,"meta":46,"style":46},"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",[48,98057,98058,98085,98090,98094],{"__ignoreMap":46},[51,98059,98060,98062,98064,98066,98068,98070,98072,98074,98076,98078,98080,98082],{"class":53,"line":54},[51,98061,93678],{"class":65},[51,98063,70],{"class":69},[51,98065,93374],{"class":65},[51,98067,759],{"class":278},[51,98069,920],{"class":65},[51,98071,1065],{"class":278},[51,98073,93379],{"class":65},[51,98075,620],{"class":278},[51,98077,920],{"class":65},[51,98079,886],{"class":278},[51,98081,971],{"class":65},[51,98083,98084],{"class":601},"#转换为2行6列的数组\n",[51,98086,98087],{"class":53,"line":185},[51,98088,98089],{"class":65},"aa.revel()\n",[51,98091,98092],{"class":53,"line":202},[51,98093,93936],{"class":601},[51,98095,98096],{"class":53,"line":209},[51,98097,98098],{"class":601},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[486,98100,98102],{"id":98101},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[41,98104,98106],{"className":170,"code":98105,"language":172,"meta":46,"style":46},"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",[48,98107,98108,98132,98137,98141],{"__ignoreMap":46},[51,98109,98110,98112,98114,98116,98118,98120,98122,98124,98126,98128,98130],{"class":53,"line":54},[51,98111,93678],{"class":65},[51,98113,70],{"class":69},[51,98115,93374],{"class":65},[51,98117,759],{"class":278},[51,98119,920],{"class":65},[51,98121,1065],{"class":278},[51,98123,93379],{"class":65},[51,98125,620],{"class":278},[51,98127,920],{"class":65},[51,98129,886],{"class":278},[51,98131,282],{"class":65},[51,98133,98134],{"class":53,"line":185},[51,98135,98136],{"class":65},"aa.flatten()\n",[51,98138,98139],{"class":53,"line":202},[51,98140,93936],{"class":601},[51,98142,98143],{"class":53,"line":209},[51,98144,98098],{"class":601},[486,98146,98148],{"id":98147},"_54-使用resize","5.4 使用resize()",[10,98150,98151],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[10,98153,98154],{},"通过resize方法可以改变数组的维度",[10,98156,98157],{},"#resize修改数组维度",[10,98159,98160],{},"#以元组的形式指定形状",[10,98162,98163],{},"#改变的是原数组",[41,98165,98167],{"className":170,"code":98166,"language":172,"meta":46,"style":46},"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",[48,98168,98169,98185,98205,98218,98222],{"__ignoreMap":46},[51,98170,98171,98173,98175,98177,98179,98181,98183],{"class":53,"line":54},[51,98172,780],{"class":65},[51,98174,70],{"class":69},[51,98176,93374],{"class":65},[51,98178,759],{"class":278},[51,98180,920],{"class":65},[51,98182,1065],{"class":278},[51,98184,282],{"class":65},[51,98186,98187,98190,98192,98194,98196,98198,98200,98202],{"class":53,"line":185},[51,98188,98189],{"class":65},"a.shape",[51,98191,70],{"class":69},[51,98193,546],{"class":65},[51,98195,620],{"class":278},[51,98197,920],{"class":65},[51,98199,886],{"class":278},[51,98201,971],{"class":65},[51,98203,98204],{"class":601},"#改变了原数组\n",[51,98206,98207,98209,98211,98214,98216],{"class":53,"line":202},[51,98208,780],{"class":65},[51,98210,70],{"class":69},[51,98212,98213],{"class":65},"resize((",[51,98215,1040],{"class":278},[51,98217,30876],{"class":65},[51,98219,98220],{"class":53,"line":209},[51,98221,93936],{"class":601},[51,98223,98224],{"class":53,"line":223},[51,98225,98098],{"class":601},[41,98227,98229],{"className":170,"code":98228,"language":172,"meta":46,"style":46},"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",[48,98230,98231,98244,98248,98252,98257,98262,98267,98272,98277,98282],{"__ignoreMap":46},[51,98232,98233,98236,98238,98240,98242],{"class":53,"line":54},[51,98234,98235],{"class":65},"a.resize((",[51,98237,886],{"class":278},[51,98239,920],{"class":65},[51,98241,620],{"class":278},[51,98243,30876],{"class":65},[51,98245,98246],{"class":53,"line":185},[51,98247,93936],{"class":601},[51,98249,98250],{"class":53,"line":202},[51,98251,94300],{"class":61},[51,98253,98254],{"class":53,"line":209},[51,98255,98256],{"class":61},"array([[ 1,  2],\n",[51,98258,98259],{"class":53,"line":223},[51,98260,98261],{"class":61},"       [ 3,  4],\n",[51,98263,98264],{"class":53,"line":237},[51,98265,98266],{"class":61},"       [ 5,  6],\n",[51,98268,98269],{"class":53,"line":242},[51,98270,98271],{"class":61},"       [ 7,  8],\n",[51,98273,98274],{"class":53,"line":257},[51,98275,98276],{"class":61},"       [ 9, 10],\n",[51,98278,98279],{"class":53,"line":262},[51,98280,98281],{"class":61},"       [11, 12]])\n",[51,98283,98284],{"class":53,"line":285},[51,98285,94300],{"class":61},[486,98287,98289],{"id":98288},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[10,98291,98292],{},"改变了原数组",[41,98294,98296],{"className":170,"code":98295,"language":172,"meta":46,"style":46},"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",[48,98297,98298,98314,98330,98334,98338,98342,98346],{"__ignoreMap":46},[51,98299,98300,98302,98304,98306,98308,98310,98312],{"class":53,"line":54},[51,98301,780],{"class":65},[51,98303,70],{"class":69},[51,98305,93374],{"class":65},[51,98307,759],{"class":278},[51,98309,920],{"class":65},[51,98311,1065],{"class":278},[51,98313,282],{"class":65},[51,98315,98316,98318,98320,98322,98324,98326,98328],{"class":53,"line":185},[51,98317,98189],{"class":65},[51,98319,70],{"class":69},[51,98321,546],{"class":65},[51,98323,620],{"class":278},[51,98325,920],{"class":65},[51,98327,886],{"class":278},[51,98329,282],{"class":65},[51,98331,98332],{"class":53,"line":202},[51,98333,93936],{"class":601},[51,98335,98336],{"class":53,"line":209},[51,98337,94300],{"class":61},[51,98339,98340],{"class":53,"line":223},[51,98341,97560],{"class":61},[51,98343,98344],{"class":53,"line":237},[51,98345,97565],{"class":61},[51,98347,98348],{"class":53,"line":242},[51,98349,94300],{"class":61},[486,98351,98353],{"id":98352},"_56-重要比较","5.6 重要比较：",[10,98355,98356],{},[460,98357],{"alt":46,"src":98358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[10,98360,98361,98362,98364,98365,98367],{},"口诀：NumPy 函数要么用 ",[48,98363,96335],{},"，要么用 ",[48,98366,31872],{},"，创建结构用 shape，造数据用 size",[10,98369,98370],{},[460,98371],{"alt":46,"src":98372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[464,98374,98375],{},"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":46,"searchDepth":185,"depth":185,"links":98377},[98378,98379,98380,98381,98382,98383],{"id":97899,"depth":185,"text":97900},{"id":98051,"depth":185,"text":98052},{"id":98101,"depth":185,"text":98102},{"id":98147,"depth":185,"text":98148},{"id":98288,"depth":185,"text":98289},{"id":98352,"depth":185,"text":98353},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97891,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98390,"title":98391,"body":98392,"description":23760,"extension":469,"meta":99464,"navigation":205,"path":99465,"seo":99466,"stem":99467,"__hash__":99468},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98393,"toc":99458},[98394,98397,98401,98404,98407,98410,98475,98478,98518,98521,98603,98606,98611,98633,98635,98640,98645,98648,98651,98806,98809,99011,99015,99018,99021,99089,99091,99096,99099,99102,99182,99186,99189,99191,99264,99266,99271,99273,99353,99357,99360,99363,99366,99369,99372,99375,99455],[14,98395,98391],{"id":98396},"_6数组的拼接",[486,98398,98400],{"id":98399},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[10,98402,98403],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[10,98405,98406],{},"函数内部传两个数列构成的数列或者元组",[10,98408,98409],{},"①一维数组的拼接",[41,98411,98413],{"className":170,"code":98412,"language":172,"meta":46,"style":46},"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",[48,98414,98415,98435,98455,98460,98465,98470],{"__ignoreMap":46},[51,98416,98417,98419,98421,98423,98425,98427,98429,98431,98433],{"class":53,"line":54},[51,98418,780],{"class":65},[51,98420,70],{"class":69},[51,98422,93396],{"class":65},[51,98424,759],{"class":278},[51,98426,920],{"class":65},[51,98428,620],{"class":278},[51,98430,920],{"class":65},[51,98432,614],{"class":278},[51,98434,5042],{"class":65},[51,98436,98437,98439,98441,98443,98445,98447,98449,98451,98453],{"class":53,"line":185},[51,98438,805],{"class":65},[51,98440,70],{"class":69},[51,98442,93396],{"class":65},[51,98444,835],{"class":278},[51,98446,920],{"class":65},[51,98448,861],{"class":278},[51,98450,920],{"class":65},[51,98452,886],{"class":278},[51,98454,5042],{"class":65},[51,98456,98457],{"class":53,"line":202},[51,98458,98459],{"class":601},"#调用concatenate进行数组拼接\n",[51,98461,98462],{"class":53,"line":209},[51,98463,98464],{"class":65},"np.concatenate((a,b))\n",[51,98466,98467],{"class":53,"line":223},[51,98468,98469],{"class":601},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[51,98471,98472],{"class":53,"line":237},[51,98473,98474],{"class":601},"#np.concatenate([a,b])\n",[10,98476,98477],{},"②一维多个数组拼接",[41,98479,98481],{"className":170,"code":98480,"language":172,"meta":46,"style":46},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[48,98482,98483,98488,98508,98513],{"__ignoreMap":46},[51,98484,98485],{"class":53,"line":54},[51,98486,98487],{"class":601},"#也可以多个数组进行拼接\n",[51,98489,98490,98492,98494,98496,98498,98500,98502,98504,98506],{"class":53,"line":185},[51,98491,830],{"class":65},[51,98493,70],{"class":69},[51,98495,93396],{"class":65},[51,98497,988],{"class":278},[51,98499,920],{"class":65},[51,98501,1014],{"class":278},[51,98503,920],{"class":65},[51,98505,1065],{"class":278},[51,98507,5042],{"class":65},[51,98509,98510],{"class":53,"line":202},[51,98511,98512],{"class":65},"c\n",[51,98514,98515],{"class":53,"line":209},[51,98516,98517],{"class":65},"np.concatenate((a,b,c))\n",[10,98519,98520],{},"③二维数组拼接",[41,98522,98524],{"className":170,"code":98523,"language":172,"meta":46,"style":46},"#二维数组使用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",[48,98525,98526,98531,98555,98580,98585,98590],{"__ignoreMap":46},[51,98527,98528],{"class":53,"line":54},[51,98529,98530],{"class":601},"#二维数组使用concatenate进行拼接\n",[51,98532,98533,98535,98537,98539,98541,98543,98545,98547,98549,98551,98553],{"class":53,"line":185},[51,98534,93678],{"class":65},[51,98536,70],{"class":69},[51,98538,93374],{"class":65},[51,98540,759],{"class":278},[51,98542,920],{"class":65},[51,98544,1065],{"class":278},[51,98546,93379],{"class":65},[51,98548,614],{"class":278},[51,98550,920],{"class":65},[51,98552,835],{"class":278},[51,98554,282],{"class":65},[51,98556,98557,98560,98562,98564,98566,98568,98570,98572,98574,98576,98578],{"class":53,"line":202},[51,98558,98559],{"class":65},"bb",[51,98561,70],{"class":69},[51,98563,93374],{"class":65},[51,98565,879],{"class":278},[51,98567,920],{"class":65},[51,98569,1184],{"class":278},[51,98571,93379],{"class":65},[51,98573,614],{"class":278},[51,98575,920],{"class":65},[51,98577,835],{"class":278},[51,98579,282],{"class":65},[51,98581,98582],{"class":53,"line":209},[51,98583,98584],{"class":601},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[51,98586,98587],{"class":53,"line":223},[51,98588,98589],{"class":601},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[51,98591,98592,98595,98597,98599,98601],{"class":53,"line":237},[51,98593,98594],{"class":65},"np.concatenate((aa,bb),",[51,98596,47886],{"class":248},[51,98598,70],{"class":69},[51,98600,733],{"class":278},[51,98602,282],{"class":65},[10,98604,98605],{},"结果：",[10,98607,98608],{},[460,98609],{"alt":46,"src":98610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[41,98612,98614],{"className":170,"code":98613,"language":172,"meta":46,"style":46},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[48,98615,98616,98621],{"__ignoreMap":46},[51,98617,98618],{"class":53,"line":54},[51,98619,98620],{"class":601},"#指定axis为1进行拼接\n",[51,98622,98623,98625,98627,98629,98631],{"class":53,"line":185},[51,98624,98594],{"class":65},[51,98626,47886],{"class":248},[51,98628,70],{"class":69},[51,98630,759],{"class":278},[51,98632,282],{"class":65},[10,98634,98605],{},[10,98636,98637],{},[460,98638],{"alt":46,"src":98639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[10,98641,98642],{},[691,98643,98644],{},"二维数组总结：0竖着方向，1横着方向",[10,98646,98647],{},"④三维数组拼接",[10,98649,98650],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[41,98652,98654],{"className":170,"code":98653,"language":172,"meta":46,"style":46},"#两个三行六列\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",[48,98655,98656,98661,98689,98719,98724,98741,98746,98751,98756,98773,98778,98783,98788,98801],{"__ignoreMap":46},[51,98657,98658],{"class":53,"line":54},[51,98659,98660],{"class":601},"#两个三行六列\n",[51,98662,98663,98665,98667,98669,98671,98673,98675,98677,98679,98681,98683,98685,98687],{"class":53,"line":185},[51,98664,95893],{"class":65},[51,98666,70],{"class":69},[51,98668,93374],{"class":65},[51,98670,759],{"class":278},[51,98672,920],{"class":65},[51,98674,867],{"class":278},[51,98676,93379],{"class":65},[51,98678,620],{"class":278},[51,98680,920],{"class":65},[51,98682,614],{"class":278},[51,98684,920],{"class":65},[51,98686,886],{"class":278},[51,98688,282],{"class":65},[51,98690,98691,98694,98696,98698,98700,98702,98705,98707,98709,98711,98713,98715,98717],{"class":53,"line":202},[51,98692,98693],{"class":65},"bbb",[51,98695,70],{"class":69},[51,98697,93374],{"class":65},[51,98699,879],{"class":278},[51,98701,920],{"class":65},[51,98703,98704],{"class":278},"137",[51,98706,93379],{"class":65},[51,98708,620],{"class":278},[51,98710,920],{"class":65},[51,98712,614],{"class":278},[51,98714,920],{"class":65},[51,98716,886],{"class":278},[51,98718,282],{"class":65},[51,98720,98721],{"class":53,"line":209},[51,98722,98723],{"class":601},"#axis=0\n",[51,98725,98726,98728,98730,98733,98735,98737,98739],{"class":53,"line":223},[51,98727,1237],{"class":65},[51,98729,70],{"class":69},[51,98731,98732],{"class":65},"np.concatenate((aaa,bbb),",[51,98734,47886],{"class":248},[51,98736,70],{"class":69},[51,98738,733],{"class":278},[51,98740,282],{"class":65},[51,98742,98743],{"class":53,"line":237},[51,98744,98745],{"class":65},"s.shape\n",[51,98747,98748],{"class":53,"line":242},[51,98749,98750],{"class":601},"#输出：(4,3,6)\n",[51,98752,98753],{"class":53,"line":257},[51,98754,98755],{"class":601},"#axis=1\n",[51,98757,98758,98761,98763,98765,98767,98769,98771],{"class":53,"line":262},[51,98759,98760],{"class":65},"ss",[51,98762,70],{"class":69},[51,98764,98732],{"class":65},[51,98766,47886],{"class":248},[51,98768,70],{"class":69},[51,98770,759],{"class":278},[51,98772,282],{"class":65},[51,98774,98775],{"class":53,"line":285},[51,98776,98777],{"class":65},"ss.shape\n",[51,98779,98780],{"class":53,"line":296},[51,98781,98782],{"class":601},"#输出：(2,6,6)\n",[51,98784,98785],{"class":53,"line":307},[51,98786,98787],{"class":601},"#axis=2\n",[51,98789,98790,98792,98794,98796,98798],{"class":53,"line":324},[51,98791,98732],{"class":65},[51,98793,47886],{"class":248},[51,98795,70],{"class":69},[51,98797,620],{"class":278},[51,98799,98800],{"class":65},").shape\n",[51,98802,98803],{"class":53,"line":329},[51,98804,98805],{"class":601},"#输出：（2，3，12）\n",[10,98807,98808],{},"⑤四维数组拼接",[41,98810,98812],{"className":170,"code":98811,"language":172,"meta":46,"style":46},"#两个三行六列\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",[48,98813,98814,98818,98846,98874,98899,98925,98929,98942,98947,98951,98963,98968,98972,98984,98989,98994,99006],{"__ignoreMap":46},[51,98815,98816],{"class":53,"line":54},[51,98817,98660],{"class":601},[51,98819,98820,98822,98824,98826,98828,98830,98832,98834,98836,98838,98840,98842,98844],{"class":53,"line":185},[51,98821,95893],{"class":65},[51,98823,70],{"class":69},[51,98825,93374],{"class":65},[51,98827,759],{"class":278},[51,98829,920],{"class":65},[51,98831,867],{"class":278},[51,98833,93379],{"class":65},[51,98835,620],{"class":278},[51,98837,920],{"class":65},[51,98839,614],{"class":278},[51,98841,920],{"class":65},[51,98843,886],{"class":278},[51,98845,282],{"class":65},[51,98847,98848,98850,98852,98854,98856,98858,98860,98862,98864,98866,98868,98870,98872],{"class":53,"line":202},[51,98849,98693],{"class":65},[51,98851,70],{"class":69},[51,98853,93374],{"class":65},[51,98855,879],{"class":278},[51,98857,920],{"class":65},[51,98859,98704],{"class":278},[51,98861,93379],{"class":65},[51,98863,620],{"class":278},[51,98865,920],{"class":65},[51,98867,614],{"class":278},[51,98869,920],{"class":65},[51,98871,886],{"class":278},[51,98873,282],{"class":65},[51,98875,98876,98879,98881,98883,98885,98887,98889,98891,98893,98895,98897],{"class":53,"line":209},[51,98877,98878],{"class":65},"aaaa",[51,98880,70],{"class":69},[51,98882,98042],{"class":65},[51,98884,620],{"class":278},[51,98886,920],{"class":65},[51,98888,614],{"class":278},[51,98890,920],{"class":65},[51,98892,614],{"class":278},[51,98894,920],{"class":65},[51,98896,620],{"class":278},[51,98898,282],{"class":65},[51,98900,98901,98904,98906,98909,98911,98913,98915,98917,98919,98921,98923],{"class":53,"line":223},[51,98902,98903],{"class":65},"bbbb",[51,98905,70],{"class":69},[51,98907,98908],{"class":65},"bbb.reshape(",[51,98910,620],{"class":278},[51,98912,920],{"class":65},[51,98914,614],{"class":278},[51,98916,920],{"class":65},[51,98918,614],{"class":278},[51,98920,920],{"class":65},[51,98922,620],{"class":278},[51,98924,282],{"class":65},[51,98926,98927],{"class":53,"line":237},[51,98928,98723],{"class":601},[51,98930,98931,98934,98936,98938,98940],{"class":53,"line":242},[51,98932,98933],{"class":65},"np.concatenate((aaaa,bbbb),",[51,98935,47886],{"class":248},[51,98937,70],{"class":69},[51,98939,733],{"class":278},[51,98941,98800],{"class":65},[51,98943,98944],{"class":53,"line":257},[51,98945,98946],{"class":601},"#结果：（4，3，3，2）\n",[51,98948,98949],{"class":53,"line":262},[51,98950,98755],{"class":601},[51,98952,98953,98955,98957,98959,98961],{"class":53,"line":285},[51,98954,98933],{"class":65},[51,98956,47886],{"class":248},[51,98958,70],{"class":69},[51,98960,759],{"class":278},[51,98962,98800],{"class":65},[51,98964,98965],{"class":53,"line":296},[51,98966,98967],{"class":601},"#结果：（2，6，3，2）\n",[51,98969,98970],{"class":53,"line":307},[51,98971,98787],{"class":601},[51,98973,98974,98976,98978,98980,98982],{"class":53,"line":324},[51,98975,98933],{"class":65},[51,98977,47886],{"class":248},[51,98979,70],{"class":69},[51,98981,620],{"class":278},[51,98983,98800],{"class":65},[51,98985,98986],{"class":53,"line":329},[51,98987,98988],{"class":601},"#结果：（2，3，6，2）\n",[51,98990,98991],{"class":53,"line":334},[51,98992,98993],{"class":601},"#axis=3\n",[51,98995,98996,98998,99000,99002,99004],{"class":53,"line":340},[51,98997,98933],{"class":65},[51,98999,47886],{"class":248},[51,99001,70],{"class":69},[51,99003,614],{"class":278},[51,99005,98800],{"class":65},[51,99007,99008],{"class":53,"line":345},[51,99009,99010],{"class":601},"#结果：（2，3，3，4）\n",[486,99012,99014],{"id":99013},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[10,99016,99017],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[10,99019,99020],{},"①二维数组",[41,99022,99024],{"className":170,"code":99023,"language":172,"meta":46,"style":46},"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",[48,99025,99026,99050,99074,99079,99084],{"__ignoreMap":46},[51,99027,99028,99030,99032,99034,99036,99038,99040,99042,99044,99046,99048],{"class":53,"line":54},[51,99029,93678],{"class":65},[51,99031,70],{"class":69},[51,99033,93374],{"class":65},[51,99035,759],{"class":278},[51,99037,920],{"class":65},[51,99039,1065],{"class":278},[51,99041,93379],{"class":65},[51,99043,614],{"class":278},[51,99045,920],{"class":65},[51,99047,835],{"class":278},[51,99049,282],{"class":65},[51,99051,99052,99054,99056,99058,99060,99062,99064,99066,99068,99070,99072],{"class":53,"line":185},[51,99053,98559],{"class":65},[51,99055,70],{"class":69},[51,99057,93374],{"class":65},[51,99059,879],{"class":278},[51,99061,920],{"class":65},[51,99063,1184],{"class":278},[51,99065,93379],{"class":65},[51,99067,614],{"class":278},[51,99069,920],{"class":65},[51,99071,835],{"class":278},[51,99073,282],{"class":65},[51,99075,99076],{"class":53,"line":202},[51,99077,99078],{"class":65},"np.hstack((aa,bb))\n",[51,99080,99081],{"class":53,"line":209},[51,99082,99083],{"class":601},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[51,99085,99086],{"class":53,"line":223},[51,99087,99088],{"class":601},"#np.hstack([aa,bb])\n",[10,99090,98605],{},[10,99092,99093],{},[460,99094],{"alt":46,"src":99095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[10,99097,99098],{},"等效于concatenate()函数中axis=1时的情况",[10,99100,99101],{},"②三维数组",[41,99103,99105],{"className":170,"code":99104,"language":172,"meta":46,"style":46},"#两个三行六列\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",[48,99106,99107,99111,99139,99167,99172,99177],{"__ignoreMap":46},[51,99108,99109],{"class":53,"line":54},[51,99110,98660],{"class":601},[51,99112,99113,99115,99117,99119,99121,99123,99125,99127,99129,99131,99133,99135,99137],{"class":53,"line":185},[51,99114,95893],{"class":65},[51,99116,70],{"class":69},[51,99118,93374],{"class":65},[51,99120,759],{"class":278},[51,99122,920],{"class":65},[51,99124,867],{"class":278},[51,99126,93379],{"class":65},[51,99128,620],{"class":278},[51,99130,920],{"class":65},[51,99132,614],{"class":278},[51,99134,920],{"class":65},[51,99136,886],{"class":278},[51,99138,282],{"class":65},[51,99140,99141,99143,99145,99147,99149,99151,99153,99155,99157,99159,99161,99163,99165],{"class":53,"line":202},[51,99142,98693],{"class":65},[51,99144,70],{"class":69},[51,99146,93374],{"class":65},[51,99148,879],{"class":278},[51,99150,920],{"class":65},[51,99152,98704],{"class":278},[51,99154,93379],{"class":65},[51,99156,620],{"class":278},[51,99158,920],{"class":65},[51,99160,614],{"class":278},[51,99162,920],{"class":65},[51,99164,886],{"class":278},[51,99166,282],{"class":65},[51,99168,99169],{"class":53,"line":209},[51,99170,99171],{"class":601},"#使用hstack\n",[51,99173,99174],{"class":53,"line":223},[51,99175,99176],{"class":65},"np.hstack((aaa,bbb)).shape\n",[51,99178,99179],{"class":53,"line":237},[51,99180,99181],{"class":601},"#输出：（2，6，6）\n",[486,99183,99185],{"id":99184},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[10,99187,99188],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[10,99190,99020],{},[41,99192,99194],{"className":170,"code":99193,"language":172,"meta":46,"style":46},"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",[48,99195,99196,99220,99244,99249,99254,99259],{"__ignoreMap":46},[51,99197,99198,99200,99202,99204,99206,99208,99210,99212,99214,99216,99218],{"class":53,"line":54},[51,99199,93678],{"class":65},[51,99201,70],{"class":69},[51,99203,93374],{"class":65},[51,99205,759],{"class":278},[51,99207,920],{"class":65},[51,99209,1065],{"class":278},[51,99211,93379],{"class":65},[51,99213,614],{"class":278},[51,99215,920],{"class":65},[51,99217,835],{"class":278},[51,99219,282],{"class":65},[51,99221,99222,99224,99226,99228,99230,99232,99234,99236,99238,99240,99242],{"class":53,"line":185},[51,99223,98559],{"class":65},[51,99225,70],{"class":69},[51,99227,93374],{"class":65},[51,99229,879],{"class":278},[51,99231,920],{"class":65},[51,99233,1184],{"class":278},[51,99235,93379],{"class":65},[51,99237,614],{"class":278},[51,99239,920],{"class":65},[51,99241,835],{"class":278},[51,99243,282],{"class":65},[51,99245,99246],{"class":53,"line":202},[51,99247,99248],{"class":601},"#vstack 垂直方向进行堆叠\n",[51,99250,99251],{"class":53,"line":209},[51,99252,99253],{"class":65},"np.vstack((aa,bb))\n",[51,99255,99256],{"class":53,"line":223},[51,99257,99258],{"class":601},"#与hstack传的参数类似，等价于：\n",[51,99260,99261],{"class":53,"line":237},[51,99262,99263],{"class":65},"np.vstack([aa,bb])\n",[10,99265,98605],{},[10,99267,99268],{},[460,99269],{"alt":46,"src":99270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[10,99272,99101],{},[41,99274,99276],{"className":170,"code":99275,"language":172,"meta":46,"style":46},"#两个三行六列\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",[48,99277,99278,99282,99310,99338,99343,99348],{"__ignoreMap":46},[51,99279,99280],{"class":53,"line":54},[51,99281,98660],{"class":601},[51,99283,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302,99304,99306,99308],{"class":53,"line":185},[51,99285,95893],{"class":65},[51,99287,70],{"class":69},[51,99289,93374],{"class":65},[51,99291,759],{"class":278},[51,99293,920],{"class":65},[51,99295,867],{"class":278},[51,99297,93379],{"class":65},[51,99299,620],{"class":278},[51,99301,920],{"class":65},[51,99303,614],{"class":278},[51,99305,920],{"class":65},[51,99307,886],{"class":278},[51,99309,282],{"class":65},[51,99311,99312,99314,99316,99318,99320,99322,99324,99326,99328,99330,99332,99334,99336],{"class":53,"line":202},[51,99313,98693],{"class":65},[51,99315,70],{"class":69},[51,99317,93374],{"class":65},[51,99319,879],{"class":278},[51,99321,920],{"class":65},[51,99323,98704],{"class":278},[51,99325,93379],{"class":65},[51,99327,620],{"class":278},[51,99329,920],{"class":65},[51,99331,614],{"class":278},[51,99333,920],{"class":65},[51,99335,886],{"class":278},[51,99337,282],{"class":65},[51,99339,99340],{"class":53,"line":209},[51,99341,99342],{"class":601},"#使用vstack\n",[51,99344,99345],{"class":53,"line":223},[51,99346,99347],{"class":65},"np.vstack((aaa,bbb)).shape\n",[51,99349,99350],{"class":53,"line":237},[51,99351,99352],{"class":601},"#输出：（4，3，6）\n",[486,99354,99356],{"id":99355},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[10,99358,99359],{},"该方法是三维数组特有的方法",[10,99361,99362],{},"也就是说",[10,99364,99365],{},"一维数组拼接方法用：concatenate()",[10,99367,99368],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[10,99370,99371],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[10,99373,99374],{},"四维数组及多维数组只能用concatenate进行拼接",[41,99376,99378],{"className":170,"code":99377,"language":172,"meta":46,"style":46},"#两个三行六列\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",[48,99379,99380,99384,99412,99440,99445,99450],{"__ignoreMap":46},[51,99381,99382],{"class":53,"line":54},[51,99383,98660],{"class":601},[51,99385,99386,99388,99390,99392,99394,99396,99398,99400,99402,99404,99406,99408,99410],{"class":53,"line":185},[51,99387,95893],{"class":65},[51,99389,70],{"class":69},[51,99391,93374],{"class":65},[51,99393,759],{"class":278},[51,99395,920],{"class":65},[51,99397,867],{"class":278},[51,99399,93379],{"class":65},[51,99401,620],{"class":278},[51,99403,920],{"class":65},[51,99405,614],{"class":278},[51,99407,920],{"class":65},[51,99409,886],{"class":278},[51,99411,282],{"class":65},[51,99413,99414,99416,99418,99420,99422,99424,99426,99428,99430,99432,99434,99436,99438],{"class":53,"line":202},[51,99415,98693],{"class":65},[51,99417,70],{"class":69},[51,99419,93374],{"class":65},[51,99421,879],{"class":278},[51,99423,920],{"class":65},[51,99425,98704],{"class":278},[51,99427,93379],{"class":65},[51,99429,620],{"class":278},[51,99431,920],{"class":65},[51,99433,614],{"class":278},[51,99435,920],{"class":65},[51,99437,886],{"class":278},[51,99439,282],{"class":65},[51,99441,99442],{"class":53,"line":209},[51,99443,99444],{"class":601},"#使用dstack\n",[51,99446,99447],{"class":53,"line":223},[51,99448,99449],{"class":65},"np.dstack((aaa,bbb)).shape\n",[51,99451,99452],{"class":53,"line":237},[51,99453,99454],{"class":601},"#结果：（2，3，12）\n",[464,99456,99457],{},"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":46,"searchDepth":185,"depth":185,"links":99459},[99460,99461,99462,99463],{"id":98399,"depth":185,"text":98400},{"id":99013,"depth":185,"text":99014},{"id":99184,"depth":185,"text":99185},{"id":99355,"depth":185,"text":99356},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98391,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99470,"title":99471,"body":99472,"description":23760,"extension":469,"meta":99747,"navigation":205,"path":99748,"seo":99749,"stem":99750,"__hash__":99751},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99473,"toc":99745},[99474,99477,99480,99574,99577,99580,99583,99586,99589,99592,99595,99598,99742],[14,99475,99471],{"id":99476},"_7数组转置",[10,99478,99479],{},"使用transpose()函数",[41,99481,99483],{"className":170,"code":99482,"language":172,"meta":46,"style":46},"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",[48,99484,99485,99495,99519,99524,99529,99534,99539,99547,99551,99555,99560,99565,99570],{"__ignoreMap":46},[51,99486,99487,99489,99491,99493],{"class":53,"line":54},[51,99488,179],{"class":69},[51,99490,31758],{"class":65},[51,99492,217],{"class":69},[51,99494,31763],{"class":65},[51,99496,99497,99499,99501,99503,99505,99507,99509,99511,99513,99515,99517],{"class":53,"line":185},[51,99498,780],{"class":65},[51,99500,70],{"class":69},[51,99502,32093],{"class":65},[51,99504,759],{"class":278},[51,99506,920],{"class":65},[51,99508,1065],{"class":278},[51,99510,93379],{"class":65},[51,99512,835],{"class":278},[51,99514,920],{"class":65},[51,99516,614],{"class":278},[51,99518,282],{"class":65},[51,99520,99521],{"class":53,"line":202},[51,99522,99523],{"class":601},"#二维数组转置\n",[51,99525,99526],{"class":53,"line":209},[51,99527,99528],{"class":601},"#调用transpose()函数\n",[51,99530,99531],{"class":53,"line":223},[51,99532,99533],{"class":65},"a.transpose()\n",[51,99535,99536],{"class":53,"line":237},[51,99537,99538],{"class":601},"#对于二维数组也可以采用.T来实现\n",[51,99540,99541,99544],{"class":53,"line":242},[51,99542,99543],{"class":65},"a.T",[51,99545,99546],{"class":601},"#与上述代码一样\n",[51,99548,99549],{"class":53,"line":257},[51,99550,93936],{"class":601},[51,99552,99553],{"class":53,"line":262},[51,99554,94300],{"class":61},[51,99556,99557],{"class":53,"line":285},[51,99558,99559],{"class":61},"array([[ 1,  4,  7, 10],\n",[51,99561,99562],{"class":53,"line":296},[51,99563,99564],{"class":61},"       [ 2,  5,  8, 11],\n",[51,99566,99567],{"class":53,"line":307},[51,99568,99569],{"class":61},"       [ 3,  6,  9, 12]])\n",[51,99571,99572],{"class":53,"line":324},[51,99573,94300],{"class":61},[10,99575,99576],{},"也可以使用np.transpose()的形式",[10,99578,99579],{},"#多维数组进行转置 np.transpose()",[10,99581,99582],{},"#对二维数组也可以使用np.transpose()进行转置",[10,99584,99585],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[10,99587,99588],{},"第二个参数，维度可以理解为用axis中的数来理解",[10,99590,99591],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[10,99593,99594],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[10,99596,99597],{},"四维及以上的数组也是一样的道理",[41,99599,99601],{"className":170,"code":99600,"language":172,"meta":46,"style":46},"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",[48,99602,99603,99631,99636,99641,99646,99664,99669,99701,99706,99711,99716,99737],{"__ignoreMap":46},[51,99604,99605,99607,99609,99611,99613,99615,99617,99619,99621,99623,99625,99627,99629],{"class":53,"line":54},[51,99606,1362],{"class":65},[51,99608,70],{"class":69},[51,99610,93374],{"class":65},[51,99612,759],{"class":278},[51,99614,920],{"class":65},[51,99616,867],{"class":278},[51,99618,93379],{"class":65},[51,99620,614],{"class":278},[51,99622,920],{"class":65},[51,99624,886],{"class":278},[51,99626,920],{"class":65},[51,99628,620],{"class":278},[51,99630,282],{"class":65},[51,99632,99633],{"class":53,"line":185},[51,99634,99635],{"class":65},"x.shape\n",[51,99637,99638],{"class":53,"line":202},[51,99639,99640],{"class":601},"#结果：（3,6,2）\n",[51,99642,99643],{"class":53,"line":209},[51,99644,99645],{"class":601},"#使用np.transpose()进行转置 变为(2,6,3)\n",[51,99647,99648,99651,99653,99655,99657,99659,99661],{"class":53,"line":223},[51,99649,99650],{"class":65},"np.transpose(x,(",[51,99652,620],{"class":278},[51,99654,920],{"class":65},[51,99656,759],{"class":278},[51,99658,920],{"class":65},[51,99660,733],{"class":278},[51,99662,99663],{"class":65},")).shape\n",[51,99665,99666],{"class":53,"line":237},[51,99667,99668],{"class":601},"#结果：(2,6,3)\n",[51,99670,99671,99673,99675,99677,99679,99681,99683,99685,99687,99689,99691,99693,99695,99697,99699],{"class":53,"line":242},[51,99672,98878],{"class":65},[51,99674,70],{"class":69},[51,99676,93374],{"class":65},[51,99678,759],{"class":278},[51,99680,920],{"class":65},[51,99682,867],{"class":278},[51,99684,93379],{"class":65},[51,99686,614],{"class":278},[51,99688,920],{"class":65},[51,99690,620],{"class":278},[51,99692,920],{"class":65},[51,99694,759],{"class":278},[51,99696,920],{"class":65},[51,99698,886],{"class":278},[51,99700,282],{"class":65},[51,99702,99703],{"class":53,"line":257},[51,99704,99705],{"class":65},"aaaa.shape\n",[51,99707,99708],{"class":53,"line":262},[51,99709,99710],{"class":601},"#结果：（3，2，1，6）\n",[51,99712,99713],{"class":53,"line":285},[51,99714,99715],{"class":601},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[51,99717,99718,99721,99723,99725,99727,99729,99731,99733,99735],{"class":53,"line":296},[51,99719,99720],{"class":65},"np.transpose(aaaa,(",[51,99722,759],{"class":278},[51,99724,920],{"class":65},[51,99726,620],{"class":278},[51,99728,920],{"class":65},[51,99730,733],{"class":278},[51,99732,920],{"class":65},[51,99734,614],{"class":278},[51,99736,99663],{"class":65},[51,99738,99739],{"class":53,"line":307},[51,99740,99741],{"class":601},"#结果：(2,1,3,6)\n",[464,99743,99744],{},"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":46,"searchDepth":185,"depth":185,"links":99746},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99471,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99753,"title":99754,"body":99755,"description":23760,"extension":469,"meta":100489,"navigation":205,"path":100490,"seo":100491,"stem":100492,"__hash__":100493},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99756,"toc":100487},[99757,99760,99763,99766,99769,99772,99775,99778,99781,99890,99893,99896,100484],[14,99758,99754],{"id":99759},"_8数组分割",[10,99761,99762],{},"split分割",[10,99764,99765],{},"numpy.split(ary,indics_or_sections,axis)",[10,99767,99768],{},"解释：",[10,99770,99771],{},"ary:被分割的数组",[10,99773,99774],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[10,99776,99777],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[10,99779,99780],{},"①一维数组的分割",[41,99782,99784],{"className":170,"code":99783,"language":172,"meta":46,"style":46},"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",[48,99785,99786,99802,99807,99816,99820,99825,99833,99837,99842,99847,99860,99864,99869,99881,99885],{"__ignoreMap":46},[51,99787,99788,99790,99792,99794,99796,99798,99800],{"class":53,"line":54},[51,99789,780],{"class":65},[51,99791,70],{"class":69},[51,99793,93374],{"class":65},[51,99795,759],{"class":278},[51,99797,920],{"class":65},[51,99799,962],{"class":278},[51,99801,282],{"class":65},[51,99803,99804],{"class":53,"line":185},[51,99805,99806],{"class":601},"#如果传入整数，必须能够平分，否则会报错\n",[51,99808,99809,99812,99814],{"class":53,"line":202},[51,99810,99811],{"class":65},"np.split(a,",[51,99813,620],{"class":278},[51,99815,282],{"class":65},[51,99817,99818],{"class":53,"line":209},[51,99819,93936],{"class":601},[51,99821,99822],{"class":53,"line":223},[51,99823,99824],{"class":601},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[51,99826,99827,99829,99831],{"class":53,"line":237},[51,99828,99811],{"class":65},[51,99830,835],{"class":278},[51,99832,282],{"class":65},[51,99834,99835],{"class":53,"line":242},[51,99836,93936],{"class":601},[51,99838,99839],{"class":53,"line":257},[51,99840,99841],{"class":601},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[51,99843,99844],{"class":53,"line":262},[51,99845,99846],{"class":601},"#传入数组\n",[51,99848,99849,99852,99854,99856,99858],{"class":53,"line":285},[51,99850,99851],{"class":65},"np.split(a,[",[51,99853,614],{"class":278},[51,99855,920],{"class":65},[51,99857,861],{"class":278},[51,99859,5042],{"class":65},[51,99861,99862],{"class":53,"line":296},[51,99863,93936],{"class":601},[51,99865,99866],{"class":53,"line":307},[51,99867,99868],{"class":601},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[51,99870,99871,99873,99875,99877,99879],{"class":53,"line":324},[51,99872,99851],{"class":65},[51,99874,861],{"class":278},[51,99876,920],{"class":65},[51,99878,911],{"class":278},[51,99880,5042],{"class":65},[51,99882,99883],{"class":53,"line":329},[51,99884,93936],{"class":601},[51,99886,99887],{"class":53,"line":334},[51,99888,99889],{"class":601},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[10,99891,99892],{},"②二维数组的分割",[10,99894,99895],{},"使用split()",[41,99897,99899],{"className":170,"code":99898,"language":172,"meta":46,"style":46},"#二维数组分割\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",[48,99900,99901,99906,99930,99935,99944,99948,99952,99957,99962,99967,99972,99977,99982,99987,99991,100004,100008,100012,100016,100020,100024,100029,100034,100039,100043,100048,100064,100068,100072,100077,100082,100087,100092,100097,100102,100107,100112,100117,100122,100127,100132,100137,100142,100147,100152,100157,100162,100166,100170,100190,100194,100198,100203,100208,100213,100218,100223,100228,100233,100238,100243,100248,100253,100258,100263,100268,100273,100278,100283,100288,100292,100297,100306,100310,100314,100318,100322,100326,100330,100334,100338,100342,100351,100355,100359,100363,100367,100371,100375,100379,100383,100387,100391,100395,100399,100403,100407,100411,100415,100419,100423,100427,100431,100435,100448,100452,100456,100460,100464,100468,100472,100476,100480],{"__ignoreMap":46},[51,99902,99903],{"class":53,"line":54},[51,99904,99905],{"class":601},"#二维数组分割\n",[51,99907,99908,99910,99912,99914,99916,99918,99920,99922,99924,99926,99928],{"class":53,"line":185},[51,99909,93678],{"class":65},[51,99911,70],{"class":69},[51,99913,93374],{"class":65},[51,99915,759],{"class":278},[51,99917,920],{"class":65},[51,99919,867],{"class":278},[51,99921,93379],{"class":65},[51,99923,886],{"class":278},[51,99925,920],{"class":65},[51,99927,886],{"class":278},[51,99929,282],{"class":65},[51,99931,99932],{"class":53,"line":202},[51,99933,99934],{"class":601},"#默认axis=0  传入整数平均分,按行来的\n",[51,99936,99937,99940,99942],{"class":53,"line":209},[51,99938,99939],{"class":65},"np.split(aa,",[51,99941,614],{"class":278},[51,99943,282],{"class":65},[51,99945,99946],{"class":53,"line":223},[51,99947,96136],{"class":601},[51,99949,99950],{"class":53,"line":237},[51,99951,94300],{"class":61},[51,99953,99954],{"class":53,"line":242},[51,99955,99956],{"class":61},"[array([[ 1,  2,  3,  4,  5,  6],\n",[51,99958,99959],{"class":53,"line":257},[51,99960,99961],{"class":61},"        [ 7,  8,  9, 10, 11, 12]]),\n",[51,99963,99964],{"class":53,"line":262},[51,99965,99966],{"class":61}," array([[13, 14, 15, 16, 17, 18],\n",[51,99968,99969],{"class":53,"line":285},[51,99970,99971],{"class":61},"        [19, 20, 21, 22, 23, 24]]),\n",[51,99973,99974],{"class":53,"line":296},[51,99975,99976],{"class":61}," array([[25, 26, 27, 28, 29, 30],\n",[51,99978,99979],{"class":53,"line":307},[51,99980,99981],{"class":61},"        [31, 32, 33, 34, 35, 36]])]\n",[51,99983,99984],{"class":53,"line":324},[51,99985,99986],{"class":61}," '''\n",[51,99988,99989],{"class":53,"line":329},[51,99990,99846],{"class":601},[51,99992,99993,99996,99998,100000,100002],{"class":53,"line":334},[51,99994,99995],{"class":65},"np.split(aa,[",[51,99997,620],{"class":278},[51,99999,920],{"class":65},[51,100001,861],{"class":278},[51,100003,5042],{"class":65},[51,100005,100006],{"class":53,"line":340},[51,100007,96136],{"class":601},[51,100009,100010],{"class":53,"line":345},[51,100011,94300],{"class":61},[51,100013,100014],{"class":53,"line":357},[51,100015,99956],{"class":61},[51,100017,100018],{"class":53,"line":366},[51,100019,99961],{"class":61},[51,100021,100022],{"class":53,"line":383},[51,100023,99966],{"class":61},[51,100025,100026],{"class":53,"line":392},[51,100027,100028],{"class":61},"        [19, 20, 21, 22, 23, 24],\n",[51,100030,100031],{"class":53,"line":403},[51,100032,100033],{"class":61},"        [25, 26, 27, 28, 29, 30]]),\n",[51,100035,100036],{"class":53,"line":409},[51,100037,100038],{"class":61}," array([[31, 32, 33, 34, 35, 36]])]\n",[51,100040,100041],{"class":53,"line":414},[51,100042,94300],{"class":61},[51,100044,100045],{"class":53,"line":433},[51,100046,100047],{"class":601},"#axis=1 按照列来分\n",[51,100049,100050,100052,100054,100056,100058,100060,100062],{"class":53,"line":439},[51,100051,99939],{"class":65},[51,100053,614],{"class":278},[51,100055,920],{"class":65},[51,100057,47886],{"class":248},[51,100059,70],{"class":69},[51,100061,759],{"class":278},[51,100063,282],{"class":65},[51,100065,100066],{"class":53,"line":444},[51,100067,96136],{"class":601},[51,100069,100070],{"class":53,"line":453},[51,100071,94300],{"class":61},[51,100073,100074],{"class":53,"line":2174},[51,100075,100076],{"class":61},"[array([[ 1,  2],\n",[51,100078,100079],{"class":53,"line":2965},[51,100080,100081],{"class":61},"        [ 7,  8],\n",[51,100083,100084],{"class":53,"line":2979},[51,100085,100086],{"class":61},"        [13, 14],\n",[51,100088,100089],{"class":53,"line":2987},[51,100090,100091],{"class":61},"        [19, 20],\n",[51,100093,100094],{"class":53,"line":2992},[51,100095,100096],{"class":61},"        [25, 26],\n",[51,100098,100099],{"class":53,"line":2998},[51,100100,100101],{"class":61},"        [31, 32]]),\n",[51,100103,100104],{"class":53,"line":3004},[51,100105,100106],{"class":61}," array([[ 3,  4],\n",[51,100108,100109],{"class":53,"line":3009},[51,100110,100111],{"class":61},"        [ 9, 10],\n",[51,100113,100114],{"class":53,"line":8332},[51,100115,100116],{"class":61},"        [15, 16],\n",[51,100118,100119],{"class":53,"line":8356},[51,100120,100121],{"class":61},"        [21, 22],\n",[51,100123,100124],{"class":53,"line":8361},[51,100125,100126],{"class":61},"        [27, 28],\n",[51,100128,100129],{"class":53,"line":8367},[51,100130,100131],{"class":61},"        [33, 34]]),\n",[51,100133,100134],{"class":53,"line":8394},[51,100135,100136],{"class":61}," array([[ 5,  6],\n",[51,100138,100139],{"class":53,"line":8399},[51,100140,100141],{"class":61},"        [11, 12],\n",[51,100143,100144],{"class":53,"line":8405},[51,100145,100146],{"class":61},"        [17, 18],\n",[51,100148,100149],{"class":53,"line":8417},[51,100150,100151],{"class":61},"        [23, 24],\n",[51,100153,100154],{"class":53,"line":8429},[51,100155,100156],{"class":61},"        [29, 30],\n",[51,100158,100159],{"class":53,"line":8441},[51,100160,100161],{"class":61},"        [35, 36]])]\n",[51,100163,100164],{"class":53,"line":10100},[51,100165,99986],{"class":61},[51,100167,100168],{"class":53,"line":10125},[51,100169,99846],{"class":601},[51,100171,100172,100174,100176,100178,100180,100182,100184,100186,100188],{"class":53,"line":10148},[51,100173,99995],{"class":65},[51,100175,759],{"class":278},[51,100177,920],{"class":65},[51,100179,620],{"class":278},[51,100181,41983],{"class":65},[51,100183,47886],{"class":248},[51,100185,70],{"class":69},[51,100187,759],{"class":278},[51,100189,282],{"class":65},[51,100191,100192],{"class":53,"line":10172},[51,100193,93936],{"class":601},[51,100195,100196],{"class":53,"line":10177},[51,100197,94300],{"class":61},[51,100199,100200],{"class":53,"line":10182},[51,100201,100202],{"class":61},"[array([[ 1],\n",[51,100204,100205],{"class":53,"line":10187},[51,100206,100207],{"class":61},"        [ 7],\n",[51,100209,100210],{"class":53,"line":10196},[51,100211,100212],{"class":61},"        [13],\n",[51,100214,100215],{"class":53,"line":10201},[51,100216,100217],{"class":61},"        [19],\n",[51,100219,100220],{"class":53,"line":10207},[51,100221,100222],{"class":61},"        [25],\n",[51,100224,100225],{"class":53,"line":10228},[51,100226,100227],{"class":61},"        [31]]),\n",[51,100229,100230],{"class":53,"line":10234},[51,100231,100232],{"class":61}," array([[ 2],\n",[51,100234,100235],{"class":53,"line":10248},[51,100236,100237],{"class":61},"        [ 8],\n",[51,100239,100240],{"class":53,"line":10254},[51,100241,100242],{"class":61},"        [14],\n",[51,100244,100245],{"class":53,"line":10281},[51,100246,100247],{"class":61},"        [20],\n",[51,100249,100250],{"class":53,"line":10290},[51,100251,100252],{"class":61},"        [26],\n",[51,100254,100255],{"class":53,"line":10296},[51,100256,100257],{"class":61},"        [32]]),\n",[51,100259,100260],{"class":53,"line":10304},[51,100261,100262],{"class":61}," array([[ 3,  4,  5,  6],\n",[51,100264,100265],{"class":53,"line":10309},[51,100266,100267],{"class":61},"        [ 9, 10, 11, 12],\n",[51,100269,100270],{"class":53,"line":16987},[51,100271,100272],{"class":61},"        [15, 16, 17, 18],\n",[51,100274,100275],{"class":53,"line":16993},[51,100276,100277],{"class":61},"        [21, 22, 23, 24],\n",[51,100279,100280],{"class":53,"line":17016},[51,100281,100282],{"class":61},"        [27, 28, 29, 30],\n",[51,100284,100285],{"class":53,"line":17022},[51,100286,100287],{"class":61},"        [33, 34, 35, 36]])]\n",[51,100289,100290],{"class":53,"line":17045},[51,100291,94300],{"class":61},[51,100293,100294],{"class":53,"line":17059},[51,100295,100296],{"class":601},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[51,100298,100299,100302,100304],{"class":53,"line":17079},[51,100300,100301],{"class":65},"np.vsplit(aa,",[51,100303,614],{"class":278},[51,100305,282],{"class":65},[51,100307,100308],{"class":53,"line":17085},[51,100309,93936],{"class":601},[51,100311,100312],{"class":53,"line":17096},[51,100313,94300],{"class":61},[51,100315,100316],{"class":53,"line":17119},[51,100317,99956],{"class":61},[51,100319,100320],{"class":53,"line":17141},[51,100321,99961],{"class":61},[51,100323,100324],{"class":53,"line":17146},[51,100325,99966],{"class":61},[51,100327,100328],{"class":53,"line":17152},[51,100329,99971],{"class":61},[51,100331,100332],{"class":53,"line":17166},[51,100333,99976],{"class":61},[51,100335,100336],{"class":53,"line":17179},[51,100337,99981],{"class":61},[51,100339,100340],{"class":53,"line":17184},[51,100341,94300],{"class":61},[51,100343,100344,100347,100349],{"class":53,"line":17198},[51,100345,100346],{"class":65},"np.hsplit(aa,",[51,100348,614],{"class":278},[51,100350,282],{"class":65},[51,100352,100353],{"class":53,"line":17203},[51,100354,93936],{"class":601},[51,100356,100357],{"class":53,"line":17209},[51,100358,94300],{"class":61},[51,100360,100361],{"class":53,"line":17214},[51,100362,100076],{"class":61},[51,100364,100365],{"class":53,"line":17228},[51,100366,100081],{"class":61},[51,100368,100369],{"class":53,"line":17233},[51,100370,100086],{"class":61},[51,100372,100373],{"class":53,"line":17238},[51,100374,100091],{"class":61},[51,100376,100377],{"class":53,"line":17252},[51,100378,100096],{"class":61},[51,100380,100381],{"class":53,"line":17264},[51,100382,100101],{"class":61},[51,100384,100385],{"class":53,"line":17269},[51,100386,100106],{"class":61},[51,100388,100389],{"class":53,"line":17282},[51,100390,100111],{"class":61},[51,100392,100393],{"class":53,"line":17287},[51,100394,100116],{"class":61},[51,100396,100397],{"class":53,"line":17292},[51,100398,100121],{"class":61},[51,100400,100401],{"class":53,"line":17297},[51,100402,100126],{"class":61},[51,100404,100405],{"class":53,"line":17310},[51,100406,100131],{"class":61},[51,100408,100409],{"class":53,"line":17315},[51,100410,100136],{"class":61},[51,100412,100413],{"class":53,"line":33008},[51,100414,100141],{"class":61},[51,100416,100417],{"class":53,"line":33014},[51,100418,100146],{"class":61},[51,100420,100421],{"class":53,"line":33020},[51,100422,100151],{"class":61},[51,100424,100425],{"class":53,"line":33026},[51,100426,100156],{"class":61},[51,100428,100429],{"class":53,"line":33032},[51,100430,100161],{"class":61},[51,100432,100433],{"class":53,"line":33043},[51,100434,94300],{"class":61},[51,100436,100437,100440,100442,100444,100446],{"class":53,"line":33049},[51,100438,100439],{"class":65},"np.vsplit(aa,[",[51,100441,620],{"class":278},[51,100443,920],{"class":65},[51,100445,861],{"class":278},[51,100447,5042],{"class":65},[51,100449,100450],{"class":53,"line":33069},[51,100451,93936],{"class":601},[51,100453,100454],{"class":53,"line":33075},[51,100455,94300],{"class":61},[51,100457,100458],{"class":53,"line":33086},[51,100459,99956],{"class":61},[51,100461,100462],{"class":53,"line":33092},[51,100463,99961],{"class":61},[51,100465,100466],{"class":53,"line":33098},[51,100467,99966],{"class":61},[51,100469,100470],{"class":53,"line":33104},[51,100471,100028],{"class":61},[51,100473,100474],{"class":53,"line":33110},[51,100475,100033],{"class":61},[51,100477,100478],{"class":53,"line":33116},[51,100479,100038],{"class":61},[51,100481,100482],{"class":53,"line":33122},[51,100483,99986],{"class":61},[464,100485,100486],{},"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":46,"searchDepth":185,"depth":185,"links":100488},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99754,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100495,"title":100496,"body":100497,"description":23760,"extension":469,"meta":100991,"navigation":205,"path":100992,"seo":100993,"stem":100994,"__hash__":100995},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100498,"toc":100982},[100499,100502,100505,100530,100534,100593,100645,100649,100651,100687,100741,100743,100781,100852,100856,100861,100865,100868,100901,100904,100908,100911,100914,100917,100920,100925,100929,100932,100935,100938,100941,100946,100950,100955,100958,100979],[14,100500,100496],{"id":100501},"_9数学函数",[10,100503,100504],{},"补充回顾：python的列表推导式",[41,100506,100508],{"className":170,"code":100507,"language":172,"meta":46,"style":46},"[1\u002Fi for i in a]\n",[48,100509,100510],{"__ignoreMap":46},[51,100511,100512,100514,100516,100518,100521,100523,100525,100527],{"class":53,"line":54},[51,100513,1432],{"class":65},[51,100515,759],{"class":278},[51,100517,1126],{"class":69},[51,100519,100520],{"class":65},"i ",[51,100522,3412],{"class":69},[51,100524,9822],{"class":65},[51,100526,26425],{"class":69},[51,100528,100529],{"class":65}," a]\n",[486,100531,100533],{"id":100532},"_91-求倒数","9.1 求倒数",[41,100535,100537],{"className":170,"code":100536,"language":172,"meta":46,"style":46},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[48,100538,100539,100544,100572,100584],{"__ignoreMap":46},[51,100540,100541],{"class":53,"line":54},[51,100542,100543],{"class":601},"#数组求倒数\n",[51,100545,100546,100548,100550,100552,100554,100556,100558,100560,100562,100564,100566,100568,100570],{"class":53,"line":185},[51,100547,780],{"class":65},[51,100549,70],{"class":69},[51,100551,1432],{"class":65},[51,100553,759],{"class":278},[51,100555,920],{"class":65},[51,100557,620],{"class":278},[51,100559,920],{"class":65},[51,100561,614],{"class":278},[51,100563,920],{"class":65},[51,100565,835],{"class":278},[51,100567,920],{"class":65},[51,100569,861],{"class":278},[51,100571,33621],{"class":65},[51,100573,100574,100576,100578,100581],{"class":53,"line":202},[51,100575,805],{"class":65},[51,100577,70],{"class":69},[51,100579,100580],{"class":65},"np.array(a)",[51,100582,100583],{"class":601},"#将列表转换为数组\n",[51,100585,100586,100588,100590],{"class":53,"line":209},[51,100587,759],{"class":278},[51,100589,1126],{"class":69},[51,100591,100592],{"class":65},"b\n",[41,100594,100596],{"className":170,"code":100595,"language":172,"meta":46,"style":46},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[48,100597,100598,100626,100635,100640],{"__ignoreMap":46},[51,100599,100600,100602,100604,100606,100608,100610,100612,100614,100616,100618,100620,100622,100624],{"class":53,"line":54},[51,100601,780],{"class":65},[51,100603,70],{"class":69},[51,100605,1432],{"class":65},[51,100607,759],{"class":278},[51,100609,920],{"class":65},[51,100611,620],{"class":278},[51,100613,920],{"class":65},[51,100615,614],{"class":278},[51,100617,920],{"class":65},[51,100619,835],{"class":278},[51,100621,920],{"class":65},[51,100623,861],{"class":278},[51,100625,33621],{"class":65},[51,100627,100628,100630,100632],{"class":53,"line":185},[51,100629,805],{"class":65},[51,100631,70],{"class":69},[51,100633,100634],{"class":65},"np.array(a)\n",[51,100636,100637],{"class":53,"line":202},[51,100638,100639],{"class":601},"#调用numpy中的函数reciprocal()\n",[51,100641,100642],{"class":53,"line":209},[51,100643,100644],{"class":65},"np.reciprocal(b)\n",[486,100646,100648],{"id":100647},"_92-求平方","9.2 求平方",[10,100650,94902],{},[41,100652,100654],{"className":170,"code":100653,"language":172,"meta":46,"style":46},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[48,100655,100656,100661,100666,100682],{"__ignoreMap":46},[51,100657,100658],{"class":53,"line":54},[51,100659,100660],{"class":601},"#square()，求平方\n",[51,100662,100663],{"class":53,"line":185},[51,100664,100665],{"class":601},"#一维数组\n",[51,100667,100668,100670,100672,100674,100676,100678,100680],{"class":53,"line":202},[51,100669,780],{"class":65},[51,100671,70],{"class":69},[51,100673,93374],{"class":65},[51,100675,759],{"class":278},[51,100677,920],{"class":65},[51,100679,988],{"class":278},[51,100681,282],{"class":65},[51,100683,100684],{"class":53,"line":209},[51,100685,100686],{"class":65},"np.square(a)\n",[41,100688,100690],{"className":170,"code":100689,"language":172,"meta":46,"style":46},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[48,100691,100692,100697,100702,100723],{"__ignoreMap":46},[51,100693,100694],{"class":53,"line":54},[51,100695,100696],{"class":601},"#或者通过循环遍历的形式来计算\n",[51,100698,100699],{"class":53,"line":185},[51,100700,100701],{"class":601},"#这是一个列表\n",[51,100703,100704,100707,100709,100711,100713,100715,100717,100720],{"class":53,"line":202},[51,100705,100706],{"class":65},"[i",[51,100708,997],{"class":69},[51,100710,100520],{"class":65},[51,100712,3412],{"class":69},[51,100714,9822],{"class":65},[51,100716,26425],{"class":69},[51,100718,100719],{"class":65}," a]",[51,100721,100722],{"class":601},"#这个求完之后在数列当中\n",[51,100724,100725,100728,100730,100732,100734,100736,100738],{"class":53,"line":209},[51,100726,100727],{"class":65},"np.array([i",[51,100729,997],{"class":69},[51,100731,100520],{"class":65},[51,100733,3412],{"class":69},[51,100735,9822],{"class":65},[51,100737,26425],{"class":69},[51,100739,100740],{"class":65}," a])\n",[10,100742,93663],{},[41,100744,100746],{"className":170,"code":100745,"language":172,"meta":46,"style":46},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[48,100747,100748,100752,100776],{"__ignoreMap":46},[51,100749,100750],{"class":53,"line":54},[51,100751,93673],{"class":601},[51,100753,100754,100756,100758,100760,100762,100764,100766,100768,100770,100772,100774],{"class":53,"line":185},[51,100755,93678],{"class":65},[51,100757,70],{"class":69},[51,100759,93374],{"class":65},[51,100761,759],{"class":278},[51,100763,920],{"class":65},[51,100765,1065],{"class":278},[51,100767,93379],{"class":65},[51,100769,835],{"class":278},[51,100771,920],{"class":65},[51,100773,614],{"class":278},[51,100775,282],{"class":65},[51,100777,100778],{"class":53,"line":202},[51,100779,100780],{"class":65},"np.square(aa)\n",[41,100782,100784],{"className":170,"code":100783,"language":172,"meta":46,"style":46},"#传统的方式\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",[48,100785,100786,100791,100800,100816,100832,100847],{"__ignoreMap":46},[51,100787,100788],{"class":53,"line":54},[51,100789,100790],{"class":601},"#传统的方式\n",[51,100792,100793,100795,100797],{"class":53,"line":185},[51,100794,98559],{"class":65},[51,100796,70],{"class":69},[51,100798,100799],{"class":65},"np.empty_like(aa)\n",[51,100801,100802,100804,100806,100808,100810,100812,100814],{"class":53,"line":202},[51,100803,3412],{"class":69},[51,100805,9822],{"class":65},[51,100807,26425],{"class":69},[51,100809,32818],{"class":278},[51,100811,546],{"class":65},[51,100813,835],{"class":278},[51,100815,31164],{"class":65},[51,100817,100818,100820,100822,100824,100826,100828,100830],{"class":53,"line":209},[51,100819,3588],{"class":69},[51,100821,9884],{"class":65},[51,100823,26425],{"class":69},[51,100825,32818],{"class":278},[51,100827,546],{"class":65},[51,100829,614],{"class":278},[51,100831,31164],{"class":65},[51,100833,100834,100837,100839,100842,100844],{"class":53,"line":223},[51,100835,100836],{"class":65},"        bb[i,j]",[51,100838,70],{"class":69},[51,100840,100841],{"class":65},"aa[i,j]",[51,100843,997],{"class":69},[51,100845,100846],{"class":65},"aa[i,j]\n",[51,100848,100849],{"class":53,"line":237},[51,100850,100851],{"class":65},"bb\n",[486,100853,100855],{"id":100854},"_93-求各元素的符号","9.3 求各元素的符号",[10,100857,100858],{},[460,100859],{"alt":46,"src":100860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[486,100862,100864],{"id":100863},"_94-modf函数","9.4 modf函数",[10,100866,100867],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[41,100869,100871],{"className":170,"code":100870,"language":172,"meta":46,"style":46},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[48,100872,100873,100896],{"__ignoreMap":46},[51,100874,100875,100877,100879,100881,100883,100885,100887,100889,100891,100894],{"class":53,"line":54},[51,100876,780],{"class":65},[51,100878,70],{"class":69},[51,100880,93374],{"class":65},[51,100882,1074],{"class":69},[51,100884,988],{"class":278},[51,100886,920],{"class":65},[51,100888,988],{"class":278},[51,100890,920],{"class":65},[51,100892,100893],{"class":278},"0.3",[51,100895,282],{"class":65},[51,100897,100898],{"class":53,"line":185},[51,100899,100900],{"class":65},"np.modf(a)\n",[10,100902,100903],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[486,100905,100907],{"id":100906},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[10,100909,100910],{},"np.cell()",[10,100912,100913],{},"np.floor()",[10,100915,100916],{},"np.rint()",[10,100918,100919],{},"对各元素分别向上取整、向下取整、四舍五入",[10,100921,100922],{},[460,100923],{"alt":46,"src":100924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[486,100926,100928],{"id":100927},"_96-around函数","9.6 around()函数",[10,100930,100931],{},"around()函数也可以实现对数的小数位数进行操作",[10,100933,100934],{},"其中的参数：",[10,100936,100937],{},"1.要传的数组",[10,100939,100940],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[10,100942,100943],{},[460,100944],{"alt":46,"src":100945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[486,100947,100949],{"id":100948},"_97-三角函数","9.7 三角函数",[10,100951,100952],{},[460,100953],{"alt":46,"src":100954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[10,100956,100957],{},"引入图像模块非常重要",[41,100959,100961],{"className":170,"code":100960,"language":172,"meta":46,"style":46},"from matplotlib import pyplot as plt\n",[48,100962,100963],{"__ignoreMap":46},[51,100964,100965,100967,100970,100972,100975,100977],{"class":53,"line":54},[51,100966,226],{"class":69},[51,100968,100969],{"class":65}," matplotlib ",[51,100971,179],{"class":69},[51,100973,100974],{"class":65}," pyplot ",[51,100976,217],{"class":69},[51,100978,31814],{"class":65},[464,100980,100981],{},"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":46,"searchDepth":185,"depth":185,"links":100983},[100984,100985,100986,100987,100988,100989,100990],{"id":100532,"depth":185,"text":100533},{"id":100647,"depth":185,"text":100648},{"id":100854,"depth":185,"text":100855},{"id":100863,"depth":185,"text":100864},{"id":100906,"depth":185,"text":100907},{"id":100927,"depth":185,"text":100928},{"id":100948,"depth":185,"text":100949},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100496,"description":23760},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100997,"title":100998,"body":100999,"description":23760,"extension":469,"meta":101003,"navigation":205,"path":101004,"seo":101005,"stem":101006,"__hash__":101007},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101000,"toc":101001},[],{"title":46,"searchDepth":185,"depth":185,"links":101002},[],{"category":50792},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100998,"description":23760},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101009,"title":101010,"body":101011,"description":46,"extension":469,"meta":103019,"navigation":205,"path":103020,"seo":103021,"stem":103022,"__hash__":103023},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101012,"toc":102995},[101013,101016,101020,101023,101026,101032,101035,101058,101061,101095,101098,101139,101143,101146,101239,101242,101286,101289,101306,101309,101323,101326,101329,101374,101377,101414,101418,101421,101427,101432,101452,101456,101459,101525,101528,101546,101550,101553,101582,101592,101598,101602,101605,101611,101622,101626,101629,101659,101662,101942,101945,101948,101959,101962,101965,101987,101994,101997,102015,102018,102021,102035,102043,102046,102072,102078,102081,102084,102094,102106,102126,102135,102155,102165,102189,102202,102216,102221,102262,102279,102304,102316,102336,102342,102387,102406,102423,102436,102452,102459,102471,102480,102515,102536,102561,102574,102598,102613,102638,102641,102662,102671,102674,102685,102689,102692,102698,102710,102717,102721,102724,102736,102739,102753,102756,102766,102776,102779,102819,102822,102826,102832,102835,102849,102853,102856,102889,102893,102896,102919,102927,102930,102936,102942,102945,102948,102976,102980,102983,102989,102992],[14,101014,101010],{"id":101015},"_1环境安装与第一个-mujoco-程序",[486,101017,101019],{"id":101018},"_1目标说明","1.目标说明",[10,101021,101022],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[10,101024,101025],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[41,101027,101030],{"className":101028,"code":101029,"language":5572,"meta":46},[5570],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[48,101031,101029],{"__ignoreMap":46},[10,101033,101034],{},"需要掌握:",[19,101036,101037,101040,101043,101048,101053],{},[22,101038,101039],{},"Fedora 44 下 MuJoCo 的系统依赖",[22,101041,101042],{},"Python 虚拟环境创建",[22,101044,101045],{},[48,101046,101047],{},"mujoco.MjModel",[22,101049,101050],{},[48,101051,101052],{},"mujoco.MjData",[22,101054,101055],{},[48,101056,101057],{},"mujoco.mj_step(model, data)",[10,101059,101060],{},"MuJoCo 中最重要的两个对象:",[679,101062,101063,101073],{},[682,101064,101065],{},[685,101066,101067,101070],{},[688,101068,101069],{"align":24119},"对象",[688,101071,101072],{"align":24119},"含义",[726,101074,101075,101085],{},[685,101076,101077,101082],{},[731,101078,101079],{"align":24119},[48,101080,101081],{},"MjModel",[731,101083,101084],{"align":24119},"模型结构，来自 XML，基本不随时间变化",[685,101086,101087,101092],{},[731,101088,101089],{"align":24119},[48,101090,101091],{},"MjData",[731,101093,101094],{"align":24119},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[10,101096,101097],{},"可以先用一个类比理解：",[679,101099,101100,101110],{},[682,101101,101102],{},[685,101103,101104,101107],{},[688,101105,101106],{"align":24119},"类比",[688,101108,101109],{"align":24119},"MuJoCo 对象",[726,101111,101112,101121,101130],{},[685,101113,101114,101117],{},[731,101115,101116],{"align":24119},"游戏地图和角色配置",[731,101118,101119],{"align":24119},[48,101120,101081],{},[685,101122,101123,101126],{},[731,101124,101125],{"align":24119},"游戏运行到当前帧的状态",[731,101127,101128],{"align":24119},[48,101129,101091],{},[685,101131,101132,101135],{},[731,101133,101134],{"align":24119},"前进一帧",[731,101136,101137],{"align":24119},[48,101138,101057],{},[486,101140,101142],{"id":101141},"_2环境与依赖安装","2.环境与依赖安装",[10,101144,101145],{},"Fedora 44 系统依赖:",[41,101147,101149],{"className":43,"code":101148,"language":45,"meta":46,"style":46},"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",[48,101150,101151,101163,101176,101189,101199,101209,101228],{"__ignoreMap":46},[51,101152,101153,101155,101157,101159,101161],{"class":53,"line":54},[51,101154,24958],{"class":57},[51,101156,26697],{"class":61},[51,101158,24215],{"class":61},[51,101160,26782],{"class":278},[51,101162,25060],{"class":278},[51,101164,101165,101168,101171,101174],{"class":53,"line":185},[51,101166,101167],{"class":61},"  python3",[51,101169,101170],{"class":61}," python3-pip",[51,101172,101173],{"class":61}," python3-virtualenv",[51,101175,25060],{"class":278},[51,101177,101178,101181,101184,101187],{"class":53,"line":202},[51,101179,101180],{"class":61},"  mesa-libGL",[51,101182,101183],{"class":61}," mesa-libGLU",[51,101185,101186],{"class":61}," mesa-dri-drivers",[51,101188,25060],{"class":278},[51,101190,101191,101194,101197],{"class":53,"line":209},[51,101192,101193],{"class":61},"  libglvnd-glx",[51,101195,101196],{"class":61}," libglvnd-opengl",[51,101198,25060],{"class":278},[51,101200,101201,101204,101207],{"class":53,"line":223},[51,101202,101203],{"class":61},"  glfw",[51,101205,101206],{"class":61}," glfw-devel",[51,101208,25060],{"class":278},[51,101210,101211,101214,101217,101220,101223,101226],{"class":53,"line":237},[51,101212,101213],{"class":61},"  libX11",[51,101215,101216],{"class":61}," libXcursor",[51,101218,101219],{"class":61}," libXi",[51,101221,101222],{"class":61}," libXinerama",[51,101224,101225],{"class":61}," libXrandr",[51,101227,25060],{"class":278},[51,101229,101230,101233,101236],{"class":53,"line":242},[51,101231,101232],{"class":61},"  gcc",[51,101234,101235],{"class":61}," gcc-c++",[51,101237,101238],{"class":61}," make\n",[10,101240,101241],{},"创建 Python 环境:",[41,101243,101245],{"className":43,"code":101244,"language":45,"meta":46,"style":46},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[48,101246,101247,101261,101269],{"__ignoreMap":46},[51,101248,101249,101252,101255,101258],{"class":53,"line":54},[51,101250,101251],{"class":57},"python3",[51,101253,101254],{"class":278}," -m",[51,101256,101257],{"class":61}," venv",[51,101259,101260],{"class":61}," .venv\n",[51,101262,101263,101266],{"class":53,"line":185},[51,101264,101265],{"class":278},"source",[51,101267,101268],{"class":61}," .venv\u002Fbin\u002Factivate\n",[51,101270,101271,101273,101275,101278,101280,101283],{"class":53,"line":202},[51,101272,172],{"class":57},[51,101274,101254],{"class":278},[51,101276,101277],{"class":61}," pip",[51,101279,24215],{"class":61},[51,101281,101282],{"class":278}," --upgrade",[51,101284,101285],{"class":61}," pip\n",[10,101287,101288],{},"pip 安装:",[41,101290,101292],{"className":43,"code":101291,"language":45,"meta":46,"style":46},"pip install \"mujoco>=2.3\" numpy\n",[48,101293,101294],{"__ignoreMap":46},[51,101295,101296,101298,101300,101303],{"class":53,"line":54},[51,101297,24212],{"class":57},[51,101299,24215],{"class":61},[51,101301,101302],{"class":61}," \"mujoco>=2.3\"",[51,101304,101305],{"class":61}," numpy\n",[10,101307,101308],{},"安装完成后，先做最小检查：",[41,101310,101312],{"className":43,"code":101311,"language":45,"meta":46,"style":46},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[48,101313,101314],{"__ignoreMap":46},[51,101315,101316,101318,101320],{"class":53,"line":54},[51,101317,172],{"class":57},[51,101319,30740],{"class":278},[51,101321,101322],{"class":61}," \"import mujoco; print(mujoco.__version__)\"\n",[10,101324,101325],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[10,101327,101328],{},"conda 安装:",[41,101330,101332],{"className":43,"code":101331,"language":45,"meta":46,"style":46},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[48,101333,101334,101354,101364],{"__ignoreMap":46},[51,101335,101336,101338,101340,101342,101345,101348,101351],{"class":53,"line":54},[51,101337,30712],{"class":57},[51,101339,29558],{"class":61},[51,101341,25497],{"class":278},[51,101343,101344],{"class":61}," mujoco-study",[51,101346,101347],{"class":61}," python=",[51,101349,101350],{"class":278},"3.10",[51,101352,101353],{"class":278}," -y\n",[51,101355,101356,101358,101361],{"class":53,"line":185},[51,101357,30712],{"class":57},[51,101359,101360],{"class":61}," activate",[51,101362,101363],{"class":61}," mujoco-study\n",[51,101365,101366,101368,101370,101372],{"class":53,"line":202},[51,101367,24212],{"class":57},[51,101369,24215],{"class":61},[51,101371,101302],{"class":61},[51,101373,101305],{"class":61},[10,101375,101376],{},"版本冲突说明:",[19,101378,101379,101385,101395,101404],{},[22,101380,101381,101382,28767],{},"不要安装 ",[48,101383,101384],{},"mujoco-py",[22,101386,101387,101388,101390,101391,101394],{},"如果旧项目里同时安装了 ",[48,101389,101384],{}," 和 ",[48,101392,101393],{},"mujoco","，建议新建干净虚拟环境。",[22,101396,101397,101400,101401,28767],{},[48,101398,101399],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[48,101402,101403],{},"~\u002F.mujoco\u002Fmujoco210",[22,101405,101406,101407,82911,101410,101413],{},"离屏渲染可能涉及 OpenGL 后端，",[48,101408,101409],{},"MUJOCO_GL=egl",[48,101411,101412],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[486,101415,101417],{"id":101416},"_3核心概念解释","3.核心概念解释",[10,101419,101420],{},"MuJoCo 的基本执行流程:",[41,101422,101425],{"className":101423,"code":101424,"language":5572,"meta":46},[5570],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[48,101426,101424],{"__ignoreMap":46},[10,101428,101429,101431],{},[48,101430,101081],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[10,101433,101434,101436,101437,754,101440,754,101443,754,101446,754,101449,28767],{},[48,101435,101091],{}," 存放仿真运行时状态，例如 ",[48,101438,101439],{},"data.time",[48,101441,101442],{},"data.qpos",[48,101444,101445],{},"data.qvel",[48,101447,101448],{},"data.ctrl",[48,101450,101451],{},"data.xpos",[513,101453,101455],{"id":101454},"xml-是什么","XML 是什么",[10,101457,101458],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[41,101460,101462],{"className":53439,"code":101461,"language":53441,"meta":46,"style":46},"\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",[48,101463,101464,101486,101517],{"__ignoreMap":46},[51,101465,101466,101468,101470,101472,101474,101476,101479,101481,101484],{"class":53,"line":54},[51,101467,1452],{"class":65},[51,101469,52172],{"class":51672},[51,101471,15304],{"class":57},[51,101473,70],{"class":65},[51,101475,53863],{"class":61},[51,101477,101478],{"class":57}," pos",[51,101480,70],{"class":65},[51,101482,101483],{"class":61},"\"0 0 1\"",[51,101485,51679],{"class":65},[51,101487,101488,101490,101493,101495,101497,101500,101502,101504,101506,101509,101511,101514],{"class":53,"line":185},[51,101489,52516],{"class":65},[51,101491,101492],{"class":51672},"geom",[51,101494,15304],{"class":57},[51,101496,70],{"class":65},[51,101498,101499],{"class":61},"\"box_geom\"",[51,101501,54196],{"class":57},[51,101503,70],{"class":65},[51,101505,53863],{"class":61},[51,101507,101508],{"class":57}," size",[51,101510,70],{"class":65},[51,101512,101513],{"class":61},"\"0.1 0.1 0.1\"",[51,101515,101516],{"class":65},"\u002F>\n",[51,101518,101519,101521,101523],{"class":53,"line":202},[51,101520,52157],{"class":65},[51,101522,52172],{"class":51672},[51,101524,51679],{"class":65},[10,101526,101527],{},"这段意思是：",[19,101529,101530,101536,101543],{},[22,101531,101532,101533,101535],{},"创建一个叫 ",[48,101534,54086],{}," 的刚体。",[22,101537,101538,101539,101542],{},"它初始放在 ",[48,101540,101541],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[22,101544,101545],{},"它里面有一个盒子形状的几何体。",[513,101547,101549],{"id":101548},"timestep-是什么","timestep 是什么",[10,101551,101552],{},"XML 里的：",[41,101554,101556],{"className":53439,"code":101555,"language":53441,"meta":46,"style":46},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[48,101557,101558],{"__ignoreMap":46},[51,101559,101560,101562,101564,101567,101569,101572,101575,101577,101580],{"class":53,"line":54},[51,101561,1452],{"class":65},[51,101563,69538],{"class":51672},[51,101565,101566],{"class":57}," timestep",[51,101568,70],{"class":65},[51,101570,101571],{"class":61},"\"0.01\"",[51,101573,101574],{"class":57}," gravity",[51,101576,70],{"class":65},[51,101578,101579],{"class":61},"\"0 0 -9.81\"",[51,101581,101516],{"class":65},[10,101583,101584,101585,101588,101589,101591],{},"表示每调用一次 ",[48,101586,101587],{},"mj_step","，仿真时间前进 ",[48,101590,39360],{}," 秒。循环 100 次，大约就是 1 秒：",[41,101593,101596],{"className":101594,"code":101595,"language":5572,"meta":46},[5570],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[48,101597,101595],{"__ignoreMap":46},[513,101599,101601],{"id":101600},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[10,101603,101604],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[41,101606,101609],{"className":101607,"code":101608,"language":5572,"meta":46},[5570],"x y z qw qx qy qz\n",[48,101610,101608],{"__ignoreMap":46},[10,101612,101613,101614,101617,101618,101621],{},"表示一个自由刚体的位置和姿态。其中 ",[48,101615,101616],{},"x y z"," 是位置，",[48,101619,101620],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[486,101623,101625],{"id":101624},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[10,101627,101628],{},"新建文件:",[41,101630,101632],{"className":43,"code":101631,"language":45,"meta":46,"style":46},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[48,101633,101634,101644,101651],{"__ignoreMap":46},[51,101635,101636,101639,101641],{"class":53,"line":54},[51,101637,101638],{"class":57},"mkdir",[51,101640,29598],{"class":278},[51,101642,101643],{"class":61}," mujoco_tutorial\n",[51,101645,101646,101649],{"class":53,"line":185},[51,101647,101648],{"class":278},"cd",[51,101650,101643],{"class":61},[51,101652,101653,101656],{"class":53,"line":202},[51,101654,101655],{"class":57},"touch",[51,101657,101658],{"class":61}," ch1_first_sim.py\n",[10,101660,101661],{},"写入:",[41,101663,101665],{"className":170,"code":101664,"language":172,"meta":46,"style":46},"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",[48,101666,101667,101674,101678,101682,101692,101697,101702,101706,101711,101716,101720,101725,101730,101735,101740,101745,101750,101754,101758,101762,101775,101789,101799,101803,101815,101827,101839,101851,101863,101867,101884,101889,101893,101904,101915,101919,101923,101937],{"__ignoreMap":46},[51,101668,101669,101671],{"class":53,"line":54},[51,101670,179],{"class":69},[51,101672,101673],{"class":65}," mujoco\n",[51,101675,101676],{"class":53,"line":185},[51,101677,206],{"emptyLinePlaceholder":205},[51,101679,101680],{"class":53,"line":202},[51,101681,206],{"emptyLinePlaceholder":205},[51,101683,101684,101687,101689],{"class":53,"line":209},[51,101685,101686],{"class":278},"XML",[51,101688,13948],{"class":69},[51,101690,101691],{"class":61}," \"\"\"\n",[51,101693,101694],{"class":53,"line":223},[51,101695,101696],{"class":61},"\u003Cmujoco model=\"first_sim\">\n",[51,101698,101699],{"class":53,"line":237},[51,101700,101701],{"class":61},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[51,101703,101704],{"class":53,"line":242},[51,101705,206],{"emptyLinePlaceholder":205},[51,101707,101708],{"class":53,"line":257},[51,101709,101710],{"class":61},"  \u003Cworldbody>\n",[51,101712,101713],{"class":53,"line":262},[51,101714,101715],{"class":61},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[51,101717,101718],{"class":53,"line":285},[51,101719,206],{"emptyLinePlaceholder":205},[51,101721,101722],{"class":53,"line":296},[51,101723,101724],{"class":61},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[51,101726,101727],{"class":53,"line":307},[51,101728,101729],{"class":61},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[51,101731,101732],{"class":53,"line":324},[51,101733,101734],{"class":61},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[51,101736,101737],{"class":53,"line":329},[51,101738,101739],{"class":61},"    \u003C\u002Fbody>\n",[51,101741,101742],{"class":53,"line":334},[51,101743,101744],{"class":61},"  \u003C\u002Fworldbody>\n",[51,101746,101747],{"class":53,"line":340},[51,101748,101749],{"class":61},"\u003C\u002Fmujoco>\n",[51,101751,101752],{"class":53,"line":345},[51,101753,96070],{"class":61},[51,101755,101756],{"class":53,"line":357},[51,101757,206],{"emptyLinePlaceholder":205},[51,101759,101760],{"class":53,"line":366},[51,101761,206],{"emptyLinePlaceholder":205},[51,101763,101764,101766,101768,101771,101773],{"class":53,"line":383},[51,101765,348],{"class":69},[51,101767,2363],{"class":57},[51,101769,101770],{"class":65},"() -> ",[51,101772,96058],{"class":278},[51,101774,363],{"class":65},[51,101776,101777,101780,101782,101785,101787],{"class":53,"line":392},[51,101778,101779],{"class":65},"    model ",[51,101781,70],{"class":69},[51,101783,101784],{"class":65}," mujoco.MjModel.from_xml_string(",[51,101786,101686],{"class":278},[51,101788,282],{"class":65},[51,101790,101791,101794,101796],{"class":53,"line":403},[51,101792,101793],{"class":65},"    data ",[51,101795,70],{"class":69},[51,101797,101798],{"class":65}," mujoco.MjData(model)\n",[51,101800,101801],{"class":53,"line":409},[51,101802,206],{"emptyLinePlaceholder":205},[51,101804,101805,101807,101809,101812],{"class":53,"line":414},[51,101806,31677],{"class":278},[51,101808,546],{"class":65},[51,101810,101811],{"class":61},"\"nq:\"",[51,101813,101814],{"class":65},", model.nq)\n",[51,101816,101817,101819,101821,101824],{"class":53,"line":433},[51,101818,31677],{"class":278},[51,101820,546],{"class":65},[51,101822,101823],{"class":61},"\"nv:\"",[51,101825,101826],{"class":65},", model.nv)\n",[51,101828,101829,101831,101833,101836],{"class":53,"line":439},[51,101830,31677],{"class":278},[51,101832,546],{"class":65},[51,101834,101835],{"class":61},"\"nu:\"",[51,101837,101838],{"class":65},", model.nu)\n",[51,101840,101841,101843,101845,101848],{"class":53,"line":444},[51,101842,31677],{"class":278},[51,101844,546],{"class":65},[51,101846,101847],{"class":61},"\"initial time:\"",[51,101849,101850],{"class":65},", data.time)\n",[51,101852,101853,101855,101857,101860],{"class":53,"line":453},[51,101854,31677],{"class":278},[51,101856,546],{"class":65},[51,101858,101859],{"class":61},"\"initial qpos:\"",[51,101861,101862],{"class":65},", data.qpos.copy())\n",[51,101864,101865],{"class":53,"line":2174},[51,101866,206],{"emptyLinePlaceholder":205},[51,101868,101869,101871,101874,101876,101878,101880,101882],{"class":53,"line":2965},[51,101870,3588],{"class":69},[51,101872,101873],{"class":65}," _ ",[51,101875,26425],{"class":69},[51,101877,32818],{"class":278},[51,101879,546],{"class":65},[51,101881,853],{"class":278},[51,101883,31164],{"class":65},[51,101885,101886],{"class":53,"line":2979},[51,101887,101888],{"class":65},"        mujoco.mj_step(model, data)\n",[51,101890,101891],{"class":53,"line":2987},[51,101892,206],{"emptyLinePlaceholder":205},[51,101894,101895,101897,101899,101902],{"class":53,"line":2992},[51,101896,31677],{"class":278},[51,101898,546],{"class":65},[51,101900,101901],{"class":61},"\"final time:\"",[51,101903,101850],{"class":65},[51,101905,101906,101908,101910,101913],{"class":53,"line":2998},[51,101907,31677],{"class":278},[51,101909,546],{"class":65},[51,101911,101912],{"class":61},"\"final qpos:\"",[51,101914,101862],{"class":65},[51,101916,101917],{"class":53,"line":3004},[51,101918,206],{"emptyLinePlaceholder":205},[51,101920,101921],{"class":53,"line":3009},[51,101922,206],{"emptyLinePlaceholder":205},[51,101924,101925,101927,101929,101932,101935],{"class":53,"line":8332},[51,101926,1940],{"class":69},[51,101928,31598],{"class":278},[51,101930,101931],{"class":69}," ==",[51,101933,101934],{"class":61}," \"__main__\"",[51,101936,363],{"class":65},[51,101938,101939],{"class":53,"line":8356},[51,101940,101941],{"class":65},"    main()\n",[513,101943,101944],{"id":101944},"代码逐段解释",[10,101946,101947],{},"导入库：",[41,101949,101951],{"className":170,"code":101950,"language":172,"meta":46,"style":46},"import mujoco\n",[48,101952,101953],{"__ignoreMap":46},[51,101954,101955,101957],{"class":53,"line":54},[51,101956,179],{"class":69},[51,101958,101673],{"class":65},[10,101960,101961],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[10,101963,101964],{},"定义 XML：",[41,101966,101968],{"className":170,"code":101967,"language":172,"meta":46,"style":46},"XML = \"\"\"\n...\n\"\"\"\n",[48,101969,101970,101978,101983],{"__ignoreMap":46},[51,101971,101972,101974,101976],{"class":53,"line":54},[51,101973,101686],{"class":278},[51,101975,13948],{"class":69},[51,101977,101691],{"class":61},[51,101979,101980],{"class":53,"line":185},[51,101981,101982],{"class":61},"...\n",[51,101984,101985],{"class":53,"line":202},[51,101986,96070],{"class":61},[10,101988,101989,101990,101993],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[48,101991,101992],{},"freejoint"," 的方块。",[10,101995,101996],{},"编译模型：",[41,101998,102000],{"className":170,"code":101999,"language":172,"meta":46,"style":46},"model = mujoco.MjModel.from_xml_string(XML)\n",[48,102001,102002],{"__ignoreMap":46},[51,102003,102004,102007,102009,102011,102013],{"class":53,"line":54},[51,102005,102006],{"class":65},"model ",[51,102008,70],{"class":69},[51,102010,101784],{"class":65},[51,102012,101686],{"class":278},[51,102014,282],{"class":65},[10,102016,102017],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[10,102019,102020],{},"创建数据：",[41,102022,102024],{"className":170,"code":102023,"language":172,"meta":46,"style":46},"data = mujoco.MjData(model)\n",[48,102025,102026],{"__ignoreMap":46},[51,102027,102028,102031,102033],{"class":53,"line":54},[51,102029,102030],{"class":65},"data ",[51,102032,70],{"class":69},[51,102034,101798],{"class":65},[10,102036,102037,102039,102040,102042],{},[48,102038,33776],{}," 会保存仿真当前状态。刚创建时，时间是 ",[48,102041,733],{},"，方块还在初始位置。",[10,102044,102045],{},"推进仿真：",[41,102047,102049],{"className":170,"code":102048,"language":172,"meta":46,"style":46},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[48,102050,102051,102067],{"__ignoreMap":46},[51,102052,102053,102055,102057,102059,102061,102063,102065],{"class":53,"line":54},[51,102054,3412],{"class":69},[51,102056,101873],{"class":65},[51,102058,26425],{"class":69},[51,102060,32818],{"class":278},[51,102062,546],{"class":65},[51,102064,853],{"class":278},[51,102066,31164],{"class":65},[51,102068,102069],{"class":53,"line":185},[51,102070,102071],{"class":65},"    mujoco.mj_step(model, data)\n",[10,102073,102074,102075,102077],{},"每次 ",[48,102076,101587],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[513,102079,102080],{"id":102080},"代码逐行细讲",[10,102082,102083],{},"下面把完整代码按新手视角拆开讲。",[41,102085,102086],{"className":170,"code":101950,"language":172,"meta":46,"style":46},[48,102087,102088],{"__ignoreMap":46},[51,102089,102090,102092],{"class":53,"line":54},[51,102091,179],{"class":69},[51,102093,101673],{"class":65},[10,102095,102096,102098,102099,754,102101,754,102103,28767],{},[48,102097,179],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[48,102100,101047],{},[48,102102,101052],{},[48,102104,102105],{},"mujoco.mj_step",[41,102107,102108],{"className":170,"code":101967,"language":172,"meta":46,"style":46},[48,102109,102110,102118,102122],{"__ignoreMap":46},[51,102111,102112,102114,102116],{"class":53,"line":54},[51,102113,101686],{"class":278},[51,102115,13948],{"class":69},[51,102117,101691],{"class":61},[51,102119,102120],{"class":53,"line":185},[51,102121,101982],{"class":61},[51,102123,102124],{"class":53,"line":202},[51,102125,96070],{"class":61},[10,102127,102128,102130,102131,102134],{},[48,102129,101686],{}," 是一个变量名。右边的三引号 ",[48,102132,102133],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[41,102136,102137],{"className":53439,"code":101696,"language":53441,"meta":46,"style":46},[48,102138,102139],{"__ignoreMap":46},[51,102140,102141,102143,102145,102148,102150,102153],{"class":53,"line":54},[51,102142,1452],{"class":65},[51,102144,101393],{"class":51672},[51,102146,102147],{"class":57}," model",[51,102149,70],{"class":65},[51,102151,102152],{"class":61},"\"first_sim\"",[51,102154,51679],{"class":65},[10,102156,102157,102158,102161,102162,28767],{},"这是 XML 的根标签。",[48,102159,102160],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[48,102163,102164],{},"first_sim",[41,102166,102167],{"className":53439,"code":101555,"language":53441,"meta":46,"style":46},[48,102168,102169],{"__ignoreMap":46},[51,102170,102171,102173,102175,102177,102179,102181,102183,102185,102187],{"class":53,"line":54},[51,102172,1452],{"class":65},[51,102174,69538],{"class":51672},[51,102176,101566],{"class":57},[51,102178,70],{"class":65},[51,102180,101571],{"class":61},[51,102182,101574],{"class":57},[51,102184,70],{"class":65},[51,102186,101579],{"class":61},[51,102188,101516],{"class":65},[10,102190,102191,102193,102194,102197,102198,102201],{},[48,102192,69538],{}," 用来设置仿真参数。",[48,102195,102196],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[48,102199,102200],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[41,102203,102205],{"className":53439,"code":102204,"language":53441,"meta":46,"style":46},"\u003Cworldbody>\n",[48,102206,102207],{"__ignoreMap":46},[51,102208,102209,102211,102214],{"class":53,"line":54},[51,102210,1452],{"class":65},[51,102212,102213],{"class":51672},"worldbody",[51,102215,51679],{"class":65},[10,102217,102218,102220],{},[48,102219,102213],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[41,102222,102224],{"className":53439,"code":102223,"language":53441,"meta":46,"style":46},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[48,102225,102226],{"__ignoreMap":46},[51,102227,102228,102230,102232,102234,102236,102239,102241,102243,102246,102248,102250,102253,102255,102257,102260],{"class":53,"line":54},[51,102229,1452],{"class":65},[51,102231,101492],{"class":51672},[51,102233,15304],{"class":57},[51,102235,70],{"class":65},[51,102237,102238],{"class":61},"\"floor\"",[51,102240,54196],{"class":57},[51,102242,70],{"class":65},[51,102244,102245],{"class":61},"\"plane\"",[51,102247,101508],{"class":57},[51,102249,70],{"class":65},[51,102251,102252],{"class":61},"\"2 2 0.1\"",[51,102254,79139],{"class":57},[51,102256,70],{"class":65},[51,102258,102259],{"class":61},"\"0.8 0.8 0.8 1\"",[51,102261,101516],{"class":65},[10,102263,102264,102265,102267,102268,102271,102272,102275,102276,102278],{},"这行创建地面。",[48,102266,101492],{}," 是几何体。",[48,102269,102270],{},"name=\"floor\""," 是名字。",[48,102273,102274],{},"type=\"plane\""," 表示平面。",[48,102277,55482],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[41,102280,102282],{"className":53439,"code":102281,"language":53441,"meta":46,"style":46},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[48,102283,102284],{"__ignoreMap":46},[51,102285,102286,102288,102290,102292,102294,102296,102298,102300,102302],{"class":53,"line":54},[51,102287,1452],{"class":65},[51,102289,52172],{"class":51672},[51,102291,15304],{"class":57},[51,102293,70],{"class":65},[51,102295,53863],{"class":61},[51,102297,101478],{"class":57},[51,102299,70],{"class":65},[51,102301,101483],{"class":61},[51,102303,51679],{"class":65},[10,102305,102306,102307,28767,102309,102312,102313,102315],{},"这行创建一个刚体，名字叫 ",[48,102308,54086],{},[48,102310,102311],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[48,102314,101541],{},"，也就是离地面 1 米高。",[41,102317,102319],{"className":53439,"code":102318,"language":53441,"meta":46,"style":46},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[48,102320,102321],{"__ignoreMap":46},[51,102322,102323,102325,102327,102329,102331,102334],{"class":53,"line":54},[51,102324,1452],{"class":65},[51,102326,101992],{"class":51672},[51,102328,15304],{"class":57},[51,102330,70],{"class":65},[51,102332,102333],{"class":61},"\"box_free\"",[51,102335,101516],{"class":65},[10,102337,102338,102339,102341],{},"这行很重要。",[48,102340,101992],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[41,102343,102345],{"className":53439,"code":102344,"language":53441,"meta":46,"style":46},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[48,102346,102347],{"__ignoreMap":46},[51,102348,102349,102351,102353,102355,102357,102359,102361,102363,102365,102367,102369,102371,102374,102376,102378,102380,102382,102385],{"class":53,"line":54},[51,102350,1452],{"class":65},[51,102352,101492],{"class":51672},[51,102354,15304],{"class":57},[51,102356,70],{"class":65},[51,102358,101499],{"class":61},[51,102360,54196],{"class":57},[51,102362,70],{"class":65},[51,102364,53863],{"class":61},[51,102366,101508],{"class":57},[51,102368,70],{"class":65},[51,102370,101513],{"class":61},[51,102372,102373],{"class":57}," mass",[51,102375,70],{"class":65},[51,102377,4065],{"class":61},[51,102379,79139],{"class":57},[51,102381,70],{"class":65},[51,102383,102384],{"class":61},"\"1 0 0 1\"",[51,102386,101516],{"class":65},[10,102388,102389,102390,102393,102394,102397,102398,102401,102402,102405],{},"这行给 box body 添加一个盒子形状。",[48,102391,102392],{},"type=\"box\""," 表示形状是盒子。",[48,102395,102396],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[48,102399,102400],{},"mass=\"1\""," 表示质量是 1。",[48,102403,102404],{},"rgba=\"1 0 0 1\""," 表示红色。",[41,102407,102409],{"className":170,"code":102408,"language":172,"meta":46,"style":46},"def main() -> None:\n",[48,102410,102411],{"__ignoreMap":46},[51,102412,102413,102415,102417,102419,102421],{"class":53,"line":54},[51,102414,348],{"class":69},[51,102416,2363],{"class":57},[51,102418,101770],{"class":65},[51,102420,96058],{"class":278},[51,102422,363],{"class":65},[10,102424,102425,102427,102428,102431,102432,102435],{},[48,102426,348],{}," 用来定义函数。这里定义了一个叫 ",[48,102429,102430],{},"main"," 的函数。",[48,102433,102434],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[41,102437,102438],{"className":170,"code":101999,"language":172,"meta":46,"style":46},[48,102439,102440],{"__ignoreMap":46},[51,102441,102442,102444,102446,102448,102450],{"class":53,"line":54},[51,102443,102006],{"class":65},[51,102445,70],{"class":69},[51,102447,101784],{"class":65},[51,102449,101686],{"class":278},[51,102451,282],{"class":65},[10,102453,102454,102455,102458],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[48,102456,102457],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[41,102460,102461],{"className":170,"code":102023,"language":172,"meta":46,"style":46},[48,102462,102463],{"__ignoreMap":46},[51,102464,102465,102467,102469],{"class":53,"line":54},[51,102466,102030],{"class":65},[51,102468,70],{"class":69},[51,102470,101798],{"class":65},[10,102472,102473,102474,102476,102477,102479],{},"这行创建仿真数据。",[48,102475,33776],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[48,102478,33776],{}," 都会变化。",[41,102481,102483],{"className":170,"code":102482,"language":172,"meta":46,"style":46},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[48,102484,102485,102495,102505],{"__ignoreMap":46},[51,102486,102487,102489,102491,102493],{"class":53,"line":54},[51,102488,30794],{"class":278},[51,102490,546],{"class":65},[51,102492,101811],{"class":61},[51,102494,101814],{"class":65},[51,102496,102497,102499,102501,102503],{"class":53,"line":185},[51,102498,30794],{"class":278},[51,102500,546],{"class":65},[51,102502,101823],{"class":61},[51,102504,101826],{"class":65},[51,102506,102507,102509,102511,102513],{"class":53,"line":202},[51,102508,30794],{"class":278},[51,102510,546],{"class":65},[51,102512,101835],{"class":61},[51,102514,101838],{"class":65},[10,102516,102517,102519,102520,102523,102524,102527,102528,102531,102532,102535],{},[48,102518,30794],{}," 用来输出信息。",[48,102521,102522],{},"model.nq"," 是位置变量数量，",[48,102525,102526],{},"model.nv"," 是速度变量数量，",[48,102529,102530],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[48,102533,102534],{},"nu"," 是 0。",[41,102537,102539],{"className":170,"code":102538,"language":172,"meta":46,"style":46},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[48,102540,102541,102551],{"__ignoreMap":46},[51,102542,102543,102545,102547,102549],{"class":53,"line":54},[51,102544,30794],{"class":278},[51,102546,546],{"class":65},[51,102548,101847],{"class":61},[51,102550,101850],{"class":65},[51,102552,102553,102555,102557,102559],{"class":53,"line":185},[51,102554,30794],{"class":278},[51,102556,546],{"class":65},[51,102558,101859],{"class":61},[51,102560,101862],{"class":65},[10,102562,102563,102564,102566,102567,102569,102570,102573],{},"这里打印初始时间和初始位置。",[48,102565,101439],{}," 一开始是 0。",[48,102568,101442],{}," 是位置数组。",[48,102571,102572],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[41,102575,102576],{"className":170,"code":102048,"language":172,"meta":46,"style":46},[48,102577,102578,102594],{"__ignoreMap":46},[51,102579,102580,102582,102584,102586,102588,102590,102592],{"class":53,"line":54},[51,102581,3412],{"class":69},[51,102583,101873],{"class":65},[51,102585,26425],{"class":69},[51,102587,32818],{"class":278},[51,102589,546],{"class":65},[51,102591,853],{"class":278},[51,102593,31164],{"class":65},[51,102595,102596],{"class":53,"line":185},[51,102597,102071],{"class":65},[10,102599,102600,102602,102603,102606,102607,102609,102610,102612],{},[48,102601,3412],{}," 是循环。",[48,102604,102605],{},"range(100)"," 表示循环 100 次。",[48,102608,1534],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[48,102611,101587],{},"，仿真就前进一步。",[41,102614,102616],{"className":170,"code":102615,"language":172,"meta":46,"style":46},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[48,102617,102618,102628],{"__ignoreMap":46},[51,102619,102620,102622,102624,102626],{"class":53,"line":54},[51,102621,30794],{"class":278},[51,102623,546],{"class":65},[51,102625,101901],{"class":61},[51,102627,101850],{"class":65},[51,102629,102630,102632,102634,102636],{"class":53,"line":185},[51,102631,30794],{"class":278},[51,102633,546],{"class":65},[51,102635,101912],{"class":61},[51,102637,101862],{"class":65},[10,102639,102640],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[41,102642,102644],{"className":170,"code":102643,"language":172,"meta":46,"style":46},"if __name__ == \"__main__\":\n    main()\n",[48,102645,102646,102658],{"__ignoreMap":46},[51,102647,102648,102650,102652,102654,102656],{"class":53,"line":54},[51,102649,1940],{"class":69},[51,102651,31598],{"class":278},[51,102653,101931],{"class":69},[51,102655,101934],{"class":61},[51,102657,363],{"class":65},[51,102659,102660],{"class":53,"line":185},[51,102661,101941],{"class":65},[10,102663,102664,102665,102668,102669,28767],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[48,102666,102667],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[48,102670,102667],{},[10,102672,102673],{},"运行:",[41,102675,102677],{"className":43,"code":102676,"language":45,"meta":46,"style":46},"python ch1_first_sim.py\n",[48,102678,102679],{"__ignoreMap":46},[51,102680,102681,102683],{"class":53,"line":54},[51,102682,172],{"class":57},[51,102684,101658],{"class":61},[486,102686,102688],{"id":102687},"_5运行结果说明","5.运行结果说明",[10,102690,102691],{},"你应该看到类似输出:",[41,102693,102696],{"className":102694,"code":102695,"language":5572,"meta":46},[5570],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[48,102697,102695],{"__ignoreMap":46},[10,102699,102700,102702,102703,102706,102707,28767],{},[48,102701,101992],{}," 有 7 个位置变量: ",[48,102704,102705],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[48,102708,102709],{},"vx vy vz wx wy wz",[10,102711,102712,102713,102716],{},"你还会看到 ",[48,102714,102715],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[486,102718,102720],{"id":102719},"_6验证步骤","6.验证步骤",[10,102722,102723],{},"确认版本:",[41,102725,102726],{"className":43,"code":101311,"language":45,"meta":46,"style":46},[48,102727,102728],{"__ignoreMap":46},[51,102729,102730,102732,102734],{"class":53,"line":54},[51,102731,172],{"class":57},[51,102733,30740],{"class":278},[51,102735,101322],{"class":61},[10,102737,102738],{},"确认导入的是官方 bindings:",[41,102740,102742],{"className":43,"code":102741,"language":45,"meta":46,"style":46},"python -c \"import mujoco; print(mujoco)\"\n",[48,102743,102744],{"__ignoreMap":46},[51,102745,102746,102748,102750],{"class":53,"line":54},[51,102747,172],{"class":57},[51,102749,30740],{"class":278},[51,102751,102752],{"class":61}," \"import mujoco; print(mujoco)\"\n",[10,102754,102755],{},"运行程序:",[41,102757,102758],{"className":43,"code":102676,"language":45,"meta":46,"style":46},[48,102759,102760],{"__ignoreMap":46},[51,102761,102762,102764],{"class":53,"line":54},[51,102763,172],{"class":57},[51,102765,101658],{"class":61},[10,102767,102768,102769,102772,102773,28767],{},"检查 ",[48,102770,102771],{},"final time"," 是否约等于 ",[48,102774,102775],{},"1.0",[10,102777,102778],{},"再做几个小实验：",[19,102780,102781,102791,102799,102812],{},[22,102782,102783,102784,102786,102787,102790],{},"把 ",[48,102785,102311],{}," 改成 ",[48,102788,102789],{},"pos=\"0 0 2\"","，观察初始高度变化。",[22,102792,102783,102793,102786,102795,102798],{},[48,102794,102200],{},[48,102796,102797],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[22,102800,102783,102801,102786,102803,102806,102807,102809,102810,28767],{},[48,102802,102196],{},[48,102804,102805],{},"timestep=\"0.005\"","，观察 100 步后的 ",[48,102808,102771],{}," 是否变成约 ",[48,102811,35704],{},[22,102813,102814,102815,102818],{},"删除 ",[48,102816,102817],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[10,102820,102821],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[486,102823,102825],{"id":102824},"_7常见错误与解决方案","7.常见错误与解决方案",[513,102827,102829],{"id":102828},"modulenotfounderror-no-module-named-mujoco",[48,102830,102831],{},"ModuleNotFoundError: No module named 'mujoco'",[10,102833,102834],{},"解决:",[41,102836,102838],{"className":43,"code":102837,"language":45,"meta":46,"style":46},"pip install \"mujoco>=2.3\"\n",[48,102839,102840],{"__ignoreMap":46},[51,102841,102842,102844,102846],{"class":53,"line":54},[51,102843,24212],{"class":57},[51,102845,24215],{"class":61},[51,102847,102848],{"class":61}," \"mujoco>=2.3\"\n",[513,102850,102852],{"id":102851},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[10,102854,102855],{},"先安装系统依赖:",[41,102857,102859],{"className":43,"code":102858,"language":45,"meta":46,"style":46},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[48,102860,102861],{"__ignoreMap":46},[51,102862,102863,102865,102867,102869,102871,102874,102876,102879,102881,102884,102886],{"class":53,"line":54},[51,102864,24958],{"class":57},[51,102866,26697],{"class":61},[51,102868,24215],{"class":61},[51,102870,26782],{"class":278},[51,102872,102873],{"class":61}," mesa-libGL",[51,102875,101186],{"class":61},[51,102877,102878],{"class":61}," glfw",[51,102880,101206],{"class":61},[51,102882,102883],{"class":61}," libX11",[51,102885,101219],{"class":61},[51,102887,102888],{"class":61}," libXrandr\n",[513,102890,102892],{"id":102891},"xml-解析失败","XML 解析失败",[10,102894,102895],{},"检查:",[19,102897,102898,102901,102904,102910],{},[22,102899,102900],{},"标签是否闭合",[22,102902,102903],{},"属性是否带引号",[22,102905,102906,102907],{},"根节点是否是 ",[48,102908,102909],{},"\u003Cmujoco>",[22,102911,102912,102914,102915,102918],{},[48,102913,52172],{}," 是否放在 ",[48,102916,102917],{},"\u003Cworldbody>"," 内部",[513,102920,102922,102924,102925],{"id":102921},"final-time-不是严格等于-10",[48,102923,102771],{}," 不是严格等于 ",[48,102926,102775],{},[10,102928,102929],{},"这通常不是错误。浮点数计算可能得到：",[41,102931,102934],{"className":102932,"code":102933,"language":5572,"meta":46},[5570],"1.0000000000000007\n",[48,102935,102933],{"__ignoreMap":46},[10,102937,102938,102939,102941],{},"只要接近 ",[48,102940,102775],{}," 就正常。",[513,102943,102944],{"id":102944},"方块没有掉下来",[10,102946,102947],{},"检查：",[19,102949,102950,102956,102962,102967],{},[22,102951,102952,102953],{},"方块 body 里是否有 ",[48,102954,102955],{},"\u003Cfreejoint\u002F>",[22,102957,102958,102959],{},"重力是否是 ",[48,102960,102961],{},"0 0 -9.81",[22,102963,102964,102965],{},"是否真的调用了 ",[48,102966,101057],{},[22,102968,102969,102970,102972,102973],{},"你看的是否是 ",[48,102971,102715],{},"，不是 ",[48,102974,102975],{},"initial qpos",[486,102977,102979],{"id":102978},"_8本章小结","8.本章小结",[10,102981,102982],{},"本章你已经完成了 MuJoCo 的最小闭环：",[41,102984,102987],{"className":102985,"code":102986,"language":5572,"meta":46},[5570],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[48,102988,102986],{"__ignoreMap":46},[10,102990,102991],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[464,102993,102994],{},"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":46,"searchDepth":185,"depth":185,"links":102996},[102997,102998,102999,103004,103008,103009,103010,103018],{"id":101018,"depth":185,"text":101019},{"id":101141,"depth":185,"text":101142},{"id":101416,"depth":185,"text":101417,"children":103000},[103001,103002,103003],{"id":101454,"depth":202,"text":101455},{"id":101548,"depth":202,"text":101549},{"id":101600,"depth":202,"text":101601},{"id":101624,"depth":185,"text":101625,"children":103005},[103006,103007],{"id":101944,"depth":202,"text":101944},{"id":102080,"depth":202,"text":102080},{"id":102687,"depth":185,"text":102688},{"id":102719,"depth":185,"text":102720},{"id":102824,"depth":185,"text":102825,"children":103011},[103012,103013,103014,103015,103017],{"id":102828,"depth":202,"text":102831},{"id":102851,"depth":202,"text":102852},{"id":102891,"depth":202,"text":102892},{"id":102921,"depth":202,"text":103016},"final time 不是严格等于 1.0",{"id":102944,"depth":202,"text":102944},{"id":102978,"depth":185,"text":102979},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101010,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103025,"title":103026,"body":103027,"description":46,"extension":469,"meta":104683,"navigation":205,"path":104684,"seo":104685,"stem":104686,"__hash__":104687},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103028,"toc":104659},[103029,103032,103034,103037,103040,103057,103152,103155,103161,103163,103165,103189,103192,103206,103209,103250,103252,103265,103267,103270,103318,103330,103333,103336,103342,103355,103422,103425,103444,103447,103450,103456,103458,103467,103470,103474,103483,103565,103574,103578,103584,103598,103608,103610,103940,103943,103955,103957,103968,103970,103973,103991,103994,103997,104015,104026,104029,104044,104054,104056,104077,104094,104114,104120,104160,104176,104192,104198,104201,104225,104241,104246,104276,104293,104318,104321,104336,104345,104360,104369,104384,104391,104393,104403,104416,104423,104426,104465,104472,104474,104526,104528,104534,104537,104544,104551,104554,104556,104574,104577,104580,104614,104626,104628,104631,104653,104656],[14,103030,103026],{"id":103031},"_2xml-与-mjcf-物理建模基础",[486,103033,101019],{"id":101018},[10,103035,103036],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[10,103038,103039],{},"本章结束后，你应该能看懂一个简单模型里：",[19,103041,103042,103045,103048,103051,103054],{},[22,103043,103044],{},"地面在哪里。",[22,103046,103047],{},"物体初始位置在哪里。",[22,103049,103050],{},"几何体是什么形状。",[22,103052,103053],{},"哪些 body 可以自由运动。",[22,103055,103056],{},"如何用名字在 Python 里找到 XML 中的对象。",[679,103058,103059,103069],{},[682,103060,103061],{},[685,103062,103063,103066],{},[688,103064,103065],{"align":24119},"标签",[688,103067,103068],{"align":24119},"作用",[726,103070,103071,103080,103090,103099,103109,103119,103132,103142],{},[685,103072,103073,103077],{},[731,103074,103075],{"align":24119},[48,103076,102909],{},[731,103078,103079],{"align":24119},"根节点",[685,103081,103082,103087],{},[731,103083,103084],{"align":24119},[48,103085,103086],{},"\u003Coption>",[731,103088,103089],{"align":24119},"仿真参数",[685,103091,103092,103096],{},[731,103093,103094],{"align":24119},[48,103095,102917],{},[731,103097,103098],{"align":24119},"世界中的物体",[685,103100,103101,103106],{},[731,103102,103103],{"align":24119},[48,103104,103105],{},"\u003Cbody>",[731,103107,103108],{"align":24119},"刚体",[685,103110,103111,103116],{},[731,103112,103113],{"align":24119},[48,103114,103115],{},"\u003Cgeom>",[731,103117,103118],{"align":24119},"几何体、碰撞体、可视体",[685,103120,103121,103129],{},[731,103122,103123,25360,103126],{"align":24119},[48,103124,103125],{},"\u003Cjoint>",[48,103127,103128],{},"\u003Cfreejoint>",[731,103130,103131],{"align":24119},"关节",[685,103133,103134,103139],{},[731,103135,103136],{"align":24119},[48,103137,103138],{},"\u003Csite>",[731,103140,103141],{"align":24119},"标记点",[685,103143,103144,103149],{},[731,103145,103146],{"align":24119},[48,103147,103148],{},"\u003Cactuator>",[731,103150,103151],{"align":24119},"控制器",[10,103153,103154],{},"初学时可以先记住：",[41,103156,103159],{"className":103157,"code":103158,"language":5572,"meta":46},[5570],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[48,103160,103158],{"__ignoreMap":46},[486,103162,101142],{"id":101141},[10,103164,101145],{},[41,103166,103168],{"className":43,"code":103167,"language":45,"meta":46,"style":46},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[48,103169,103170],{"__ignoreMap":46},[51,103171,103172,103174,103176,103178,103180,103182,103184,103186],{"class":53,"line":54},[51,103173,24958],{"class":57},[51,103175,26697],{"class":61},[51,103177,24215],{"class":61},[51,103179,26782],{"class":278},[51,103181,102873],{"class":61},[51,103183,101186],{"class":61},[51,103185,102878],{"class":61},[51,103187,103188],{"class":61}," glfw-devel\n",[10,103190,103191],{},"pip:",[41,103193,103194],{"className":43,"code":101291,"language":45,"meta":46,"style":46},[48,103195,103196],{"__ignoreMap":46},[51,103197,103198,103200,103202,103204],{"class":53,"line":54},[51,103199,24212],{"class":57},[51,103201,24215],{"class":61},[51,103203,101302],{"class":61},[51,103205,101305],{"class":61},[10,103207,103208],{},"conda:",[41,103210,103212],{"className":43,"code":103211,"language":45,"meta":46,"style":46},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[48,103213,103214,103231,103240],{"__ignoreMap":46},[51,103215,103216,103218,103220,103222,103225,103227,103229],{"class":53,"line":54},[51,103217,30712],{"class":57},[51,103219,29558],{"class":61},[51,103221,25497],{"class":278},[51,103223,103224],{"class":61}," mujoco-xml",[51,103226,101347],{"class":61},[51,103228,101350],{"class":278},[51,103230,101353],{"class":278},[51,103232,103233,103235,103237],{"class":53,"line":185},[51,103234,30712],{"class":57},[51,103236,101360],{"class":61},[51,103238,103239],{"class":61}," mujoco-xml\n",[51,103241,103242,103244,103246,103248],{"class":53,"line":202},[51,103243,24212],{"class":57},[51,103245,24215],{"class":61},[51,103247,101302],{"class":61},[51,103249,101305],{"class":61},[10,103251,101376],{},[19,103253,103254,103257,103262],{},[22,103255,103256],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[22,103258,103259,103260,28767],{},"本章使用基础标签，适用于 ",[48,103261,101399],{},[22,103263,103264],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[486,103266,101417],{"id":101416},[10,103268,103269],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[41,103271,103273],{"className":53439,"code":103272,"language":53441,"meta":46,"style":46},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[48,103274,103275,103289,103297,103302,103310],{"__ignoreMap":46},[51,103276,103277,103279,103281,103283,103285,103287],{"class":53,"line":54},[51,103278,1452],{"class":65},[51,103280,101393],{"class":51672},[51,103282,102147],{"class":57},[51,103284,70],{"class":65},[51,103286,63051],{"class":61},[51,103288,51679],{"class":65},[51,103290,103291,103293,103295],{"class":53,"line":185},[51,103292,52516],{"class":65},[51,103294,102213],{"class":51672},[51,103296,51679],{"class":65},[51,103298,103299],{"class":53,"line":202},[51,103300,103301],{"class":65},"    ...\n",[51,103303,103304,103306,103308],{"class":53,"line":209},[51,103305,52789],{"class":65},[51,103307,102213],{"class":51672},[51,103309,51679],{"class":65},[51,103311,103312,103314,103316],{"class":53,"line":223},[51,103313,52157],{"class":65},[51,103315,101393],{"class":51672},[51,103317,51679],{"class":65},[10,103319,103320,103322,103323,103325,103326,103329],{},[48,103321,52172],{}," 表示刚体。",[48,103324,101492],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[48,103327,103328],{},"joint"," 表示刚体相对父刚体如何运动。",[513,103331,103332],{"id":103332},"层级结构非常重要",[10,103334,103335],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[41,103337,103340],{"className":103338,"code":103339,"language":5572,"meta":46},[5570],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[48,103341,103339],{"__ignoreMap":46},[10,103343,103344,101390,103347,103350,103351,103354],{},[48,103345,103346],{},"red_box_geom",[48,103348,103349],{},"box_center"," 都属于 ",[48,103352,103353],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[41,103356,103358],{"className":53439,"code":103357,"language":53441,"meta":46,"style":46},"\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",[48,103359,103360,103380,103394,103414],{"__ignoreMap":46},[51,103361,103362,103364,103366,103368,103370,103372,103374,103376,103378],{"class":53,"line":54},[51,103363,1452],{"class":65},[51,103365,52172],{"class":51672},[51,103367,15304],{"class":57},[51,103369,70],{"class":65},[51,103371,53863],{"class":61},[51,103373,101478],{"class":57},[51,103375,70],{"class":65},[51,103377,101483],{"class":61},[51,103379,51679],{"class":65},[51,103381,103382,103384,103386,103388,103390,103392],{"class":53,"line":185},[51,103383,52516],{"class":65},[51,103385,101992],{"class":51672},[51,103387,15304],{"class":57},[51,103389,70],{"class":65},[51,103391,102333],{"class":61},[51,103393,101516],{"class":65},[51,103395,103396,103398,103400,103402,103404,103406,103408,103410,103412],{"class":53,"line":202},[51,103397,52516],{"class":65},[51,103399,101492],{"class":51672},[51,103401,54196],{"class":57},[51,103403,70],{"class":65},[51,103405,53863],{"class":61},[51,103407,101508],{"class":57},[51,103409,70],{"class":65},[51,103411,101513],{"class":61},[51,103413,101516],{"class":65},[51,103415,103416,103418,103420],{"class":53,"line":209},[51,103417,52157],{"class":65},[51,103419,52172],{"class":51672},[51,103421,51679],{"class":65},[10,103423,103424],{},"含义:",[19,103426,103427,103433,103438,103441],{},[22,103428,103429,103430,103432],{},"创建名为 ",[48,103431,54086],{}," 的刚体",[22,103434,103435,103436],{},"初始位置在世界坐标 ",[48,103437,101541],{},[22,103439,103440],{},"它有一个自由关节",[22,103442,103443],{},"它有一个盒子几何体",[513,103445,103446],{"id":103446},"坐标怎么理解",[10,103448,103449],{},"MuJoCo 默认使用三维坐标：",[41,103451,103454],{"className":103452,"code":103453,"language":5572,"meta":46},[5570],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[48,103455,103453],{"__ignoreMap":46},[10,103457,15017],{},[41,103459,103461],{"className":53439,"code":103460,"language":53441,"meta":46,"style":46},"pos=\"0 0 1\"\n",[48,103462,103463],{"__ignoreMap":46},[51,103464,103465],{"class":53,"line":54},[51,103466,103460],{"class":65},[10,103468,103469],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[513,103471,103473],{"id":103472},"geom-的-size-怎么理解","geom 的 size 怎么理解",[10,103475,103476,103477,82902,103480,103482],{},"不同 ",[48,103478,103479],{},"type",[48,103481,31872],{}," 含义不同：",[679,103484,103485,103500],{},[682,103486,103487],{},[685,103488,103489,103493,103498],{},[688,103490,103491],{"align":24119},[48,103492,103479],{},[688,103494,103495,103497],{"align":24119},[48,103496,31872],{}," 示例",[688,103499,101072],{"align":24119},[726,103501,103502,103516,103531,103550],{},[685,103503,103504,103508,103513],{},[731,103505,103506],{"align":24119},[48,103507,54086],{},[731,103509,103510],{"align":24119},[48,103511,103512],{},"size=\"0.1 0.2 0.3\"",[731,103514,103515],{"align":24119},"x\u002Fy\u002Fz 半边长，不是完整长度",[685,103517,103518,103523,103528],{},[731,103519,103520],{"align":24119},[48,103521,103522],{},"sphere",[731,103524,103525],{"align":24119},[48,103526,103527],{},"size=\"0.1\"",[731,103529,103530],{"align":24119},"球半径",[685,103532,103533,103538,103543],{},[731,103534,103535],{"align":24119},[48,103536,103537],{},"capsule",[731,103539,103540],{"align":24119},[48,103541,103542],{},"size=\"0.03\"",[731,103544,103545,103546,103549],{"align":24119},"胶囊半径，长度常用 ",[48,103547,103548],{},"fromto"," 指定",[685,103551,103552,103557,103562],{},[731,103553,103554],{"align":24119},[48,103555,103556],{},"plane",[731,103558,103559],{"align":24119},[48,103560,103561],{},"size=\"3 3 0.1\"",[731,103563,103564],{"align":24119},"可视平面大小，通常当地面",[10,103566,103567,103568,103570,103571,103573],{},"最容易踩坑的是 box：",[48,103569,102396],{}," 表示边长大约是 ",[48,103572,32412],{},"，因为 MuJoCo 用的是半边长。",[513,103575,103577],{"id":103576},"site-是什么","site 是什么",[10,103579,103580,103583],{},[48,103581,103582],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[19,103585,103586,103589,103592,103595],{},[22,103587,103588],{},"标记机械臂末端。",[22,103590,103591],{},"标记目标位置。",[22,103593,103594],{},"放传感器或相机参考点。",[22,103596,103597],{},"在 Python 中读取某个关键点的世界坐标。",[10,103599,103600,103601,101390,103604,103607],{},"在后面的 Reacher 任务中，",[48,103602,103603],{},"tip",[48,103605,103606],{},"target"," 就会用 site 表示。",[486,103609,101625],{"id":101624},[41,103611,103613],{"className":170,"code":103612,"language":172,"meta":46,"style":46},"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",[48,103614,103615,103621,103631,103635,103639,103647,103652,103656,103660,103664,103669,103673,103678,103683,103688,103693,103697,103701,103705,103709,103713,103717,103729,103741,103749,103753,103768,103783,103787,103800,103815,103828,103841,103845,103861,103865,103869,103880,103892,103904,103916,103920,103924,103936],{"__ignoreMap":46},[51,103616,103617,103619],{"class":53,"line":54},[51,103618,179],{"class":69},[51,103620,101673],{"class":65},[51,103622,103623,103625,103627,103629],{"class":53,"line":185},[51,103624,179],{"class":69},[51,103626,31758],{"class":65},[51,103628,217],{"class":69},[51,103630,31763],{"class":65},[51,103632,103633],{"class":53,"line":202},[51,103634,206],{"emptyLinePlaceholder":205},[51,103636,103637],{"class":53,"line":209},[51,103638,206],{"emptyLinePlaceholder":205},[51,103640,103641,103643,103645],{"class":53,"line":223},[51,103642,101686],{"class":278},[51,103644,13948],{"class":69},[51,103646,101691],{"class":61},[51,103648,103649],{"class":53,"line":237},[51,103650,103651],{"class":61},"\u003Cmujoco model=\"xml_basic\">\n",[51,103653,103654],{"class":53,"line":242},[51,103655,101701],{"class":61},[51,103657,103658],{"class":53,"line":257},[51,103659,206],{"emptyLinePlaceholder":205},[51,103661,103662],{"class":53,"line":262},[51,103663,101710],{"class":61},[51,103665,103666],{"class":53,"line":285},[51,103667,103668],{"class":61},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[51,103670,103671],{"class":53,"line":296},[51,103672,206],{"emptyLinePlaceholder":205},[51,103674,103675],{"class":53,"line":307},[51,103676,103677],{"class":61},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[51,103679,103680],{"class":53,"line":324},[51,103681,103682],{"class":61},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[51,103684,103685],{"class":53,"line":329},[51,103686,103687],{"class":61},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[51,103689,103690],{"class":53,"line":334},[51,103691,103692],{"class":61},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[51,103694,103695],{"class":53,"line":340},[51,103696,101739],{"class":61},[51,103698,103699],{"class":53,"line":345},[51,103700,101744],{"class":61},[51,103702,103703],{"class":53,"line":357},[51,103704,101749],{"class":61},[51,103706,103707],{"class":53,"line":366},[51,103708,96070],{"class":61},[51,103710,103711],{"class":53,"line":383},[51,103712,206],{"emptyLinePlaceholder":205},[51,103714,103715],{"class":53,"line":392},[51,103716,206],{"emptyLinePlaceholder":205},[51,103718,103719,103721,103723,103725,103727],{"class":53,"line":403},[51,103720,348],{"class":69},[51,103722,2363],{"class":57},[51,103724,101770],{"class":65},[51,103726,96058],{"class":278},[51,103728,363],{"class":65},[51,103730,103731,103733,103735,103737,103739],{"class":53,"line":409},[51,103732,101779],{"class":65},[51,103734,70],{"class":69},[51,103736,101784],{"class":65},[51,103738,101686],{"class":278},[51,103740,282],{"class":65},[51,103742,103743,103745,103747],{"class":53,"line":414},[51,103744,101793],{"class":65},[51,103746,70],{"class":69},[51,103748,101798],{"class":65},[51,103750,103751],{"class":53,"line":433},[51,103752,206],{"emptyLinePlaceholder":205},[51,103754,103755,103758,103760,103763,103766],{"class":53,"line":439},[51,103756,103757],{"class":65},"    box_body_id ",[51,103759,70],{"class":69},[51,103761,103762],{"class":65}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[51,103764,103765],{"class":61},"\"red_box\"",[51,103767,282],{"class":65},[51,103769,103770,103773,103775,103778,103781],{"class":53,"line":444},[51,103771,103772],{"class":65},"    site_id ",[51,103774,70],{"class":69},[51,103776,103777],{"class":65}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[51,103779,103780],{"class":61},"\"box_center\"",[51,103782,282],{"class":65},[51,103784,103785],{"class":53,"line":453},[51,103786,206],{"emptyLinePlaceholder":205},[51,103788,103789,103791,103794,103796,103798],{"class":53,"line":2174},[51,103790,3488],{"class":69},[51,103792,103793],{"class":65}," box_body_id ",[51,103795,1452],{"class":69},[51,103797,4479],{"class":278},[51,103799,363],{"class":65},[51,103801,103802,103805,103808,103810,103813],{"class":53,"line":2965},[51,103803,103804],{"class":69},"        raise",[51,103806,103807],{"class":278}," RuntimeError",[51,103809,546],{"class":65},[51,103811,103812],{"class":61},"\"body red_box not found\"",[51,103814,282],{"class":65},[51,103816,103817,103819,103822,103824,103826],{"class":53,"line":2979},[51,103818,3488],{"class":69},[51,103820,103821],{"class":65}," site_id ",[51,103823,1452],{"class":69},[51,103825,4479],{"class":278},[51,103827,363],{"class":65},[51,103829,103830,103832,103834,103836,103839],{"class":53,"line":2987},[51,103831,103804],{"class":69},[51,103833,103807],{"class":278},[51,103835,546],{"class":65},[51,103837,103838],{"class":61},"\"site box_center not found\"",[51,103840,282],{"class":65},[51,103842,103843],{"class":53,"line":2992},[51,103844,206],{"emptyLinePlaceholder":205},[51,103846,103847,103849,103851,103853,103855,103857,103859],{"class":53,"line":2998},[51,103848,3588],{"class":69},[51,103850,101873],{"class":65},[51,103852,26425],{"class":69},[51,103854,32818],{"class":278},[51,103856,546],{"class":65},[51,103858,2120],{"class":278},[51,103860,31164],{"class":65},[51,103862,103863],{"class":53,"line":3004},[51,103864,101888],{"class":65},[51,103866,103867],{"class":53,"line":3009},[51,103868,206],{"emptyLinePlaceholder":205},[51,103870,103871,103873,103875,103878],{"class":53,"line":8332},[51,103872,31677],{"class":278},[51,103874,546],{"class":65},[51,103876,103877],{"class":61},"\"simulation time:\"",[51,103879,101850],{"class":65},[51,103881,103882,103884,103886,103889],{"class":53,"line":8356},[51,103883,31677],{"class":278},[51,103885,546],{"class":65},[51,103887,103888],{"class":61},"\"box body position:\"",[51,103890,103891],{"class":65},", data.xpos[box_body_id].copy())\n",[51,103893,103894,103896,103898,103901],{"class":53,"line":8361},[51,103895,31677],{"class":278},[51,103897,546],{"class":65},[51,103899,103900],{"class":61},"\"site position:\"",[51,103902,103903],{"class":65},", data.site_xpos[site_id].copy())\n",[51,103905,103906,103908,103910,103913],{"class":53,"line":8367},[51,103907,31677],{"class":278},[51,103909,546],{"class":65},[51,103911,103912],{"class":61},"\"box qpos:\"",[51,103914,103915],{"class":65},", np.array(data.qpos))\n",[51,103917,103918],{"class":53,"line":8394},[51,103919,206],{"emptyLinePlaceholder":205},[51,103921,103922],{"class":53,"line":8399},[51,103923,206],{"emptyLinePlaceholder":205},[51,103925,103926,103928,103930,103932,103934],{"class":53,"line":8405},[51,103927,1940],{"class":69},[51,103929,31598],{"class":278},[51,103931,101931],{"class":69},[51,103933,101934],{"class":61},[51,103935,363],{"class":65},[51,103937,103938],{"class":53,"line":8417},[51,103939,101941],{"class":65},[10,103941,103942],{},"保存为：",[41,103944,103946],{"className":43,"code":103945,"language":45,"meta":46,"style":46},"touch ch2_xml_basic.py\n",[48,103947,103948],{"__ignoreMap":46},[51,103949,103950,103952],{"class":53,"line":54},[51,103951,101655],{"class":57},[51,103953,103954],{"class":61}," ch2_xml_basic.py\n",[10,103956,102673],{},[41,103958,103960],{"className":43,"code":103959,"language":45,"meta":46,"style":46},"python ch2_xml_basic.py\n",[48,103961,103962],{"__ignoreMap":46},[51,103963,103964,103966],{"class":53,"line":54},[51,103965,172],{"class":57},[51,103967,103954],{"class":61},[513,103969,101944],{"id":101944},[10,103971,103972],{},"用名字查找 body：",[41,103974,103976],{"className":170,"code":103975,"language":172,"meta":46,"style":46},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[48,103977,103978],{"__ignoreMap":46},[51,103979,103980,103983,103985,103987,103989],{"class":53,"line":54},[51,103981,103982],{"class":65},"box_body_id ",[51,103984,70],{"class":69},[51,103986,103762],{"class":65},[51,103988,103765],{"class":61},[51,103990,282],{"class":65},[10,103992,103993],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[10,103995,103996],{},"用名字查找 site：",[41,103998,104000],{"className":170,"code":103999,"language":172,"meta":46,"style":46},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[48,104001,104002],{"__ignoreMap":46},[51,104003,104004,104007,104009,104011,104013],{"class":53,"line":54},[51,104005,104006],{"class":65},"site_id ",[51,104008,70],{"class":69},[51,104010,103777],{"class":65},[51,104012,103780],{"class":61},[51,104014,282],{"class":65},[10,104016,104017,104018,104021,104022,104025],{},"注意第二个参数是对象类型。查 body 就用 ",[48,104019,104020],{},"mjOBJ_BODY","，查 site 就用 ",[48,104023,104024],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[10,104027,104028],{},"读取世界坐标：",[41,104030,104032],{"className":170,"code":104031,"language":172,"meta":46,"style":46},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[48,104033,104034,104039],{"__ignoreMap":46},[51,104035,104036],{"class":53,"line":54},[51,104037,104038],{"class":65},"data.xpos[box_body_id]\n",[51,104040,104041],{"class":53,"line":185},[51,104042,104043],{"class":65},"data.site_xpos[site_id]\n",[10,104045,104046,104049,104050,104053],{},[48,104047,104048],{},"xpos"," 是 body 的世界坐标，",[48,104051,104052],{},"site_xpos"," 是 site 的世界坐标。",[513,104055,102080],{"id":102080},[41,104057,104059],{"className":170,"code":104058,"language":172,"meta":46,"style":46},"import mujoco\nimport numpy as np\n",[48,104060,104061,104067],{"__ignoreMap":46},[51,104062,104063,104065],{"class":53,"line":54},[51,104064,179],{"class":69},[51,104066,101673],{"class":65},[51,104068,104069,104071,104073,104075],{"class":53,"line":185},[51,104070,179],{"class":69},[51,104072,31758],{"class":65},[51,104074,217],{"class":69},[51,104076,31763],{"class":65},[10,104078,104079,104080,104083,104084,104087,104088,754,104091,28767],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[48,104081,104082],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[48,104085,104086],{},"as np"," 是习惯写法，后面就可以写 ",[48,104089,104090],{},"np.array(...)",[48,104092,104093],{},"np.round(...)",[41,104095,104096],{"className":170,"code":101967,"language":172,"meta":46,"style":46},[48,104097,104098,104106,104110],{"__ignoreMap":46},[51,104099,104100,104102,104104],{"class":53,"line":54},[51,104101,101686],{"class":278},[51,104103,13948],{"class":69},[51,104105,101691],{"class":61},[51,104107,104108],{"class":53,"line":185},[51,104109,101982],{"class":61},[51,104111,104112],{"class":53,"line":202},[51,104113,96070],{"class":61},[10,104115,104116,104117,28767],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[48,104118,104119],{},"mujoco.MjModel.from_xml_string(XML)",[41,104121,104123],{"className":53439,"code":104122,"language":53441,"meta":46,"style":46},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[48,104124,104125],{"__ignoreMap":46},[51,104126,104127,104129,104131,104133,104135,104137,104139,104141,104144,104146,104148,104151,104153,104155,104158],{"class":53,"line":54},[51,104128,1452],{"class":65},[51,104130,103582],{"class":51672},[51,104132,15304],{"class":57},[51,104134,70],{"class":65},[51,104136,103780],{"class":61},[51,104138,101478],{"class":57},[51,104140,70],{"class":65},[51,104142,104143],{"class":61},"\"0 0 0\"",[51,104145,101508],{"class":57},[51,104147,70],{"class":65},[51,104149,104150],{"class":61},"\"0.03\"",[51,104152,79139],{"class":57},[51,104154,70],{"class":65},[51,104156,104157],{"class":61},"\"0 1 0 1\"",[51,104159,101516],{"class":65},[10,104161,104162,104164,104165,104168,104169,104171,104172,104175],{},[48,104163,103582],{}," 是标记点。",[48,104166,104167],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[48,104170,103542],{}," 表示显示出来的小球大小。",[48,104173,104174],{},"rgba=\"0 1 0 1\""," 表示绿色。",[41,104177,104178],{"className":170,"code":103975,"language":172,"meta":46,"style":46},[48,104179,104180],{"__ignoreMap":46},[51,104181,104182,104184,104186,104188,104190],{"class":53,"line":54},[51,104183,103982],{"class":65},[51,104185,70],{"class":69},[51,104187,103762],{"class":65},[51,104189,103765],{"class":61},[51,104191,282],{"class":65},[10,104193,104194,104195,104197],{},"这行的作用是：根据名字 ",[48,104196,103765],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[10,104199,104200],{},"拆开看：",[19,104202,104203,104209,104214,104220],{},[22,104204,104205,104208],{},[48,104206,104207],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[22,104210,104211,104213],{},[48,104212,102457],{}," 是被查询的模型。",[22,104215,104216,104219],{},[48,104217,104218],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[22,104221,104222,104224],{},[48,104223,103765],{}," 是 XML 里写的名字。",[41,104226,104227],{"className":170,"code":103999,"language":172,"meta":46,"style":46},[48,104228,104229],{"__ignoreMap":46},[51,104230,104231,104233,104235,104237,104239],{"class":53,"line":54},[51,104232,104006],{"class":65},[51,104234,70],{"class":69},[51,104236,103777],{"class":65},[51,104238,103780],{"class":61},[51,104240,282],{"class":65},[10,104242,104243,104244,28767],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[48,104245,103780],{},[41,104247,104249],{"className":170,"code":104248,"language":172,"meta":46,"style":46},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[48,104250,104251,104263],{"__ignoreMap":46},[51,104252,104253,104255,104257,104259,104261],{"class":53,"line":54},[51,104254,1940],{"class":69},[51,104256,103793],{"class":65},[51,104258,1452],{"class":69},[51,104260,4479],{"class":278},[51,104262,363],{"class":65},[51,104264,104265,104268,104270,104272,104274],{"class":53,"line":185},[51,104266,104267],{"class":69},"    raise",[51,104269,103807],{"class":278},[51,104271,546],{"class":65},[51,104273,103812],{"class":61},[51,104275,282],{"class":65},[10,104277,104278,104280,104281,104284,104285,104288,104289,104292],{},[48,104279,1940],{}," 是条件判断。",[48,104282,104283],{},"mj_name2id"," 找不到对象时会返回 ",[48,104286,104287],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[48,104290,104291],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[41,104294,104296],{"className":170,"code":104295,"language":172,"meta":46,"style":46},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[48,104297,104298,104314],{"__ignoreMap":46},[51,104299,104300,104302,104304,104306,104308,104310,104312],{"class":53,"line":54},[51,104301,3412],{"class":69},[51,104303,101873],{"class":65},[51,104305,26425],{"class":69},[51,104307,32818],{"class":278},[51,104309,546],{"class":65},[51,104311,2120],{"class":278},[51,104313,31164],{"class":65},[51,104315,104316],{"class":53,"line":185},[51,104317,102071],{"class":65},[10,104319,104320],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[41,104322,104324],{"className":170,"code":104323,"language":172,"meta":46,"style":46},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[48,104325,104326],{"__ignoreMap":46},[51,104327,104328,104330,104332,104334],{"class":53,"line":54},[51,104329,30794],{"class":278},[51,104331,546],{"class":65},[51,104333,103888],{"class":61},[51,104335,103891],{"class":65},[10,104337,104338,104340,104341,104344],{},[48,104339,101451],{}," 保存所有 body 的世界坐标。",[48,104342,104343],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[41,104346,104348],{"className":170,"code":104347,"language":172,"meta":46,"style":46},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[48,104349,104350],{"__ignoreMap":46},[51,104351,104352,104354,104356,104358],{"class":53,"line":54},[51,104353,30794],{"class":278},[51,104355,546],{"class":65},[51,104357,103900],{"class":61},[51,104359,103903],{"class":65},[10,104361,104362,104365,104366,104368],{},[48,104363,104364],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[48,104367,103349],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[41,104370,104372],{"className":170,"code":104371,"language":172,"meta":46,"style":46},"print(\"box qpos:\", np.array(data.qpos))\n",[48,104373,104374],{"__ignoreMap":46},[51,104375,104376,104378,104380,104382],{"class":53,"line":54},[51,104377,30794],{"class":278},[51,104379,546],{"class":65},[51,104381,103912],{"class":61},[51,104383,103915],{"class":65},[10,104385,104386,104387,104390],{},"这里打印广义位置数组。",[48,104388,104389],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[486,104392,102688],{"id":102687},[10,104394,104395,104396,104399,104400,28767],{},"程序会输出 ",[48,104397,104398],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[48,104401,104402],{},"qpos",[10,104404,104405,104407,104408,104411,104412,104415],{},[48,104406,104343],{}," 是 body 的世界坐标位置。",[48,104409,104410],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[48,104413,104414],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[10,104417,82594,104418,82902,104420,104422],{},[48,104419,103349],{},[48,104421,104167],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[10,104424,104425],{},"如果你把 site 改成：",[41,104427,104429],{"className":53439,"code":104428,"language":53441,"meta":46,"style":46},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[48,104430,104431],{"__ignoreMap":46},[51,104432,104433,104435,104437,104439,104441,104444,104446,104448,104451,104453,104455,104457,104459,104461,104463],{"class":53,"line":54},[51,104434,1452],{"class":65},[51,104436,103582],{"class":51672},[51,104438,15304],{"class":57},[51,104440,70],{"class":65},[51,104442,104443],{"class":61},"\"box_top\"",[51,104445,101478],{"class":57},[51,104447,70],{"class":65},[51,104449,104450],{"class":61},"\"0 0 0.15\"",[51,104452,101508],{"class":57},[51,104454,70],{"class":65},[51,104456,104150],{"class":61},[51,104458,79139],{"class":57},[51,104460,70],{"class":65},[51,104462,104157],{"class":61},[51,104464,101516],{"class":65},[10,104466,104467,104468,104471],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[48,104469,104470],{},"site position"," 就会比 body position 的 z 坐标更高。",[486,104473,102720],{"id":102719},[19,104475,104476,104485,104488,104495,104501,104512],{},[22,104477,102783,104478,104480,104481,102786,104483,28767],{},[48,104479,103353],{}," 的初始高度从 ",[48,104482,759],{},[48,104484,620],{},[22,104486,104487],{},"重新运行程序。",[22,104489,104490,104491,104494],{},"观察 ",[48,104492,104493],{},"box qpos"," 和最终位置是否变化。",[22,104496,104497,104498,104500],{},"故意把 ",[48,104499,103582],{}," 名称改错，确认程序能报错。",[22,104502,102783,104503,104505,104506,102786,104508,104511],{},[48,104504,101492],{}," 的颜色 ",[48,104507,102404],{},[48,104509,104510],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[22,104513,102783,104514,82902,104516,102786,104519,104522,104523,104525],{},[48,104515,103349],{},[48,104517,104518],{},"pos",[48,104520,104521],{},"0 0 0.2","，观察 ",[48,104524,104470],{}," 如何变化。",[486,104527,102825],{"id":102824},[513,104529,104531],{"id":104530},"xml-error-schema-violation",[48,104532,104533],{},"XML Error: Schema violation",[10,104535,104536],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[513,104538,104540,81662,104542],{"id":104539},"mj_name2id-返回-1",[48,104541,104283],{},[48,104543,104287],{},[10,104545,104546,104547,104550],{},"说明名字没有找到。检查 XML 中 ",[48,104548,104549],{},"name=\"...\"","，并确认对象类型正确。",[513,104552,104553],{"id":104553},"物体不下落",[10,104555,102895],{},[19,104557,104558,104563,104568],{},[22,104559,104560,104561],{},"body 是否有 ",[48,104562,101992],{},[22,104564,104565,104566],{},"gravity 是否为 ",[48,104567,102961],{},[22,104569,104570,104571,104573],{},"body 是否被固定在 ",[48,104572,102213],{}," 中",[513,104575,104576],{"id":104576},"坐标看起来不符合预期",[10,104578,104579],{},"先区分两种坐标：",[679,104581,104582,104591],{},[682,104583,104584],{},[685,104585,104586,104589],{},[688,104587,104588],{"align":24119},"坐标",[688,104590,101072],{"align":24119},[726,104592,104593,104603],{},[685,104594,104595,104600],{},[731,104596,104597,104598],{"align":24119},"XML 里的 ",[48,104599,104518],{},[731,104601,104602],{"align":24119},"相对父 body 的局部坐标",[685,104604,104605,104611],{},[731,104606,104607,25360,104609],{"align":24119},[48,104608,101451],{},[48,104610,104364],{},[731,104612,104613],{"align":24119},"仿真更新后的世界坐标",[10,104615,104616,104617,104619,104620,82911,104623,104625],{},"如果你修改了 ",[48,104618,101442],{},"，但还没调用 ",[48,104621,104622],{},"mj_forward",[48,104624,101587],{},"，世界坐标可能还没有更新。",[486,104627,102979],{"id":102978},[10,104629,104630],{},"MJCF 建模先掌握四件事：",[19,104632,104633,104638,104643,104648],{},[22,104634,104635,104637],{},[48,104636,52172],{}," 表示刚体层级。",[22,104639,104640,104642],{},[48,104641,101492],{}," 表示形状、碰撞和质量。",[22,104644,104645,104647],{},[48,104646,103328],{}," 决定 body 能不能动、怎么动。",[22,104649,104650,104652],{},[48,104651,103582],{}," 用来标记关键点，方便 Python 读取位置。",[10,104654,104655],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[464,104657,104658],{},"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":46,"searchDepth":185,"depth":185,"links":104660},[104661,104662,104663,104669,104673,104674,104675,104682],{"id":101018,"depth":185,"text":101019},{"id":101141,"depth":185,"text":101142},{"id":101416,"depth":185,"text":101417,"children":104664},[104665,104666,104667,104668],{"id":103332,"depth":202,"text":103332},{"id":103446,"depth":202,"text":103446},{"id":103472,"depth":202,"text":103473},{"id":103576,"depth":202,"text":103577},{"id":101624,"depth":185,"text":101625,"children":104670},[104671,104672],{"id":101944,"depth":202,"text":101944},{"id":102080,"depth":202,"text":102080},{"id":102687,"depth":185,"text":102688},{"id":102719,"depth":185,"text":102720},{"id":102824,"depth":185,"text":102825,"children":104676},[104677,104678,104680,104681],{"id":104530,"depth":202,"text":104533},{"id":104539,"depth":202,"text":104679},"mj_name2id 返回 -1",{"id":104553,"depth":202,"text":104553},{"id":104576,"depth":202,"text":104576},{"id":102978,"depth":185,"text":102979},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103026,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104689,"title":104690,"body":104691,"description":46,"extension":469,"meta":106186,"navigation":205,"path":106187,"seo":106188,"stem":106189,"__hash__":106190},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104692,"toc":106158},[104693,104696,104698,104701,104704,104742,104745,104751,104754,104756,104758,104785,104787,104801,104803,104844,104846,104870,104872,104875,104884,104893,104896,104905,104913,104922,104925,104935,104938,104990,104997,105003,105011,105059,105062,105081,105084,105092,105096,105105,105138,105140,105488,105490,105502,105504,105515,105517,105520,105541,105547,105550,105575,105585,105588,105596,105599,105602,105623,105634,105636,105656,105659,105680,105689,105708,105714,105739,105742,105756,105763,105787,105790,105798,105807,105823,105835,105843,105852,105854,105857,105881,105886,105889,105911,105913,105952,105954,105961,105963,105971,105974,105977,105989,106030,106037,106048,106055,106058,106107,106110,106113,106119,106121,106126,106152,106155],[14,104694,104690],{"id":104695},"_3python-控制接口读取状态与推进仿真",[486,104697,101019],{"id":101018},[10,104699,104700],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[10,104702,104703],{},"你将学习:",[19,104705,104706,104711,104716,104720,104725,104736],{},[22,104707,104708],{},[48,104709,104710],{},"MjModel.from_xml_string",[22,104712,104713],{},[48,104714,104715],{},"MjData(model)",[22,104717,104718],{},[48,104719,101587],{},[22,104721,104722],{},[48,104723,104724],{},"mj_resetData",[22,104726,104727,104728,754,104730,754,104733],{},"读取 ",[48,104729,104402],{},[48,104731,104732],{},"qvel",[48,104734,104735],{},"ctrl",[22,104737,104738,104739],{},"使用 ",[48,104740,104741],{},"model.opt.timestep",[10,104743,104744],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[41,104746,104749],{"className":104747,"code":104748,"language":5572,"meta":46},[5570],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[48,104750,104748],{"__ignoreMap":46},[10,104752,104753],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[486,104755,101142],{"id":101141},[10,104757,101145],{},[41,104759,104761],{"className":43,"code":104760,"language":45,"meta":46,"style":46},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[48,104762,104763],{"__ignoreMap":46},[51,104764,104765,104767,104769,104771,104773,104776,104778,104780,104782],{"class":53,"line":54},[51,104766,24958],{"class":57},[51,104768,26697],{"class":61},[51,104770,24215],{"class":61},[51,104772,26782],{"class":278},[51,104774,104775],{"class":61}," python3",[51,104777,101170],{"class":61},[51,104779,102873],{"class":61},[51,104781,101186],{"class":61},[51,104783,104784],{"class":61}," glfw\n",[10,104786,103191],{},[41,104788,104789],{"className":43,"code":101291,"language":45,"meta":46,"style":46},[48,104790,104791],{"__ignoreMap":46},[51,104792,104793,104795,104797,104799],{"class":53,"line":54},[51,104794,24212],{"class":57},[51,104796,24215],{"class":61},[51,104798,101302],{"class":61},[51,104800,101305],{"class":61},[10,104802,103208],{},[41,104804,104806],{"className":43,"code":104805,"language":45,"meta":46,"style":46},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[48,104807,104808,104825,104834],{"__ignoreMap":46},[51,104809,104810,104812,104814,104816,104819,104821,104823],{"class":53,"line":54},[51,104811,30712],{"class":57},[51,104813,29558],{"class":61},[51,104815,25497],{"class":278},[51,104817,104818],{"class":61}," mujoco-python-api",[51,104820,101347],{"class":61},[51,104822,101350],{"class":278},[51,104824,101353],{"class":278},[51,104826,104827,104829,104831],{"class":53,"line":185},[51,104828,30712],{"class":57},[51,104830,101360],{"class":61},[51,104832,104833],{"class":61}," mujoco-python-api\n",[51,104835,104836,104838,104840,104842],{"class":53,"line":202},[51,104837,24212],{"class":57},[51,104839,24215],{"class":61},[51,104841,101302],{"class":61},[51,104843,101305],{"class":61},[10,104845,101376],{},[19,104847,104848,104855,104864],{},[22,104849,104850,101390,104852,104854],{},[48,104851,101047],{},[48,104853,101052],{}," 是官方 Python bindings 的类名。",[22,104856,104857,104858,104861,104862,28767],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[48,104859,104860],{},"mjModel"," 在 Python 中是 ",[48,104863,101081],{},[22,104865,104866,104867,28767],{},"不要使用 ",[48,104868,104869],{},"sim = mujoco_py.MjSim(...)",[486,104871,101417],{"id":101416},[10,104873,104874],{},"仿真推进核心代码:",[41,104876,104878],{"className":170,"code":104877,"language":172,"meta":46,"style":46},"mujoco.mj_step(model, data)\n",[48,104879,104880],{"__ignoreMap":46},[51,104881,104882],{"class":53,"line":54},[51,104883,104877],{"class":65},[10,104885,104886,104887,754,104889,754,104891,28767],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[48,104888,101442],{},[48,104890,101445],{},[48,104892,101439],{},[10,104894,104895],{},"重置仿真:",[41,104897,104899],{"className":170,"code":104898,"language":172,"meta":46,"style":46},"mujoco.mj_resetData(model, data)\n",[48,104900,104901],{"__ignoreMap":46},[51,104902,104903],{"class":53,"line":54},[51,104904,104898],{"class":65},[10,104906,104907,104908,82911,104910,104912],{},"如果手动修改了 ",[48,104909,101442],{},[48,104911,101445],{},"，通常应调用:",[41,104914,104916],{"className":170,"code":104915,"language":172,"meta":46,"style":46},"mujoco.mj_forward(model, data)\n",[48,104917,104918],{"__ignoreMap":46},[51,104919,104920],{"class":53,"line":54},[51,104921,104915],{"class":65},[10,104923,104924],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[513,104926,104928,754,104930,754,104932,104934],{"id":104927},"qposqvelctrl-是什么",[48,104929,104402],{},[48,104931,104732],{},[48,104933,104735],{}," 是什么",[10,104936,104937],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[679,104939,104940,104952],{},[682,104941,104942],{},[685,104943,104944,104947,104949],{},[688,104945,104946],{"align":24119},"字段",[688,104948,101072],{"align":24119},[688,104950,104951],{"align":24119},"谁来修改",[726,104953,104954,104966,104978],{},[685,104955,104956,104960,104963],{},[731,104957,104958],{"align":24119},[48,104959,101442],{},[731,104961,104962],{"align":24119},"广义位置，例如小车位置、关节角、自由物体位置姿态",[731,104964,104965],{"align":24119},"MuJoCo 更新，也可以手动设置初始状态",[685,104967,104968,104972,104975],{},[731,104969,104970],{"align":24119},[48,104971,101445],{},[731,104973,104974],{"align":24119},"广义速度，例如小车速度、关节角速度",[731,104976,104977],{"align":24119},"MuJoCo 更新，也可以手动清零",[685,104979,104980,104984,104987],{},[731,104981,104982],{"align":24119},[48,104983,101448],{},[731,104985,104986],{"align":24119},"actuator 的控制输入",[731,104988,104989],{"align":24119},"主要由你的控制代码写入",[10,104991,9409,104992,101390,104994,104996],{},[48,104993,104402],{},[48,104995,104732],{}," 不一定同维。自由刚体就是典型例子：",[41,104998,105001],{"className":104999,"code":105000,"language":5572,"meta":46},[5570],"freejoint: qpos 7 维，qvel 6 维\n",[48,105002,105000],{"__ignoreMap":46},[513,105004,105006,101390,105008,105010],{"id":105005},"mj_step-和-mj_forward-的区别",[48,105007,101587],{},[48,105009,104622],{}," 的区别",[679,105012,105013,105026],{},[682,105014,105015],{},[685,105016,105017,105020,105023],{},[688,105018,105019],{"align":24119},"函数",[688,105021,105022],{"align":24119},"是否推进时间",[688,105024,105025],{"align":24119},"什么时候用",[726,105027,105028,105041],{},[685,105029,105030,105035,105038],{},[731,105031,105032],{"align":24119},[48,105033,105034],{},"mj_step(model, data)",[731,105036,105037],{"align":24119},"是",[731,105039,105040],{"align":24119},"正常仿真循环，每调用一次前进一步",[685,105042,105043,105048,105051],{},[731,105044,105045],{"align":24119},[48,105046,105047],{},"mj_forward(model, data)",[731,105049,105050],{"align":24119},"否",[731,105052,105053,105054,754,105056,105058],{"align":24119},"手动改了 ",[48,105055,104402],{},[48,105057,104732],{}," 后，刷新派生量",[10,105060,105061],{},"例如你写：",[41,105063,105065],{"className":170,"code":105064,"language":172,"meta":46,"style":46},"data.qpos[2] = 2.0\n",[48,105066,105067],{"__ignoreMap":46},[51,105068,105069,105072,105074,105076,105078],{"class":53,"line":54},[51,105070,105071],{"class":65},"data.qpos[",[51,105073,620],{"class":278},[51,105075,194],{"class":65},[51,105077,70],{"class":69},[51,105079,105080],{"class":278}," 2.0\n",[10,105082,105083],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[41,105085,105086],{"className":170,"code":104915,"language":172,"meta":46,"style":46},[48,105087,105088],{"__ignoreMap":46},[51,105089,105090],{"class":53,"line":54},[51,105091,104915],{"class":65},[513,105093,105095],{"id":105094},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[10,105097,105098,105101,105102,105104],{},[48,105099,105100],{},"mujoco.mj_resetData(model, data)"," 会把 ",[48,105103,33776],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[41,105106,105108],{"className":170,"code":105107,"language":172,"meta":46,"style":46},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[48,105109,105110,105114,105124,105134],{"__ignoreMap":46},[51,105111,105112],{"class":53,"line":54},[51,105113,104898],{"class":65},[51,105115,105116,105119,105121],{"class":53,"line":185},[51,105117,105118],{"class":65},"data.qpos[:] ",[51,105120,70],{"class":69},[51,105122,105123],{"class":65}," random_qpos\n",[51,105125,105126,105129,105131],{"class":53,"line":202},[51,105127,105128],{"class":65},"data.qvel[:] ",[51,105130,70],{"class":69},[51,105132,105133],{"class":278}," 0.0\n",[51,105135,105136],{"class":53,"line":209},[51,105137,104915],{"class":65},[486,105139,101625],{"id":101624},[41,105141,105143],{"className":170,"code":105142,"language":172,"meta":46,"style":46},"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",[48,105144,105145,105151,105161,105165,105169,105177,105182,105186,105190,105194,105199,105203,105208,105213,105218,105222,105226,105230,105234,105238,105242,105261,105268,105280,105291,105307,105323,105327,105331,105343,105355,105363,105367,105378,105382,105398,105402,105406,105415,105419,105424,105433,105437,105450,105455,105464,105468,105472,105484],{"__ignoreMap":46},[51,105146,105147,105149],{"class":53,"line":54},[51,105148,179],{"class":69},[51,105150,101673],{"class":65},[51,105152,105153,105155,105157,105159],{"class":53,"line":185},[51,105154,179],{"class":69},[51,105156,31758],{"class":65},[51,105158,217],{"class":69},[51,105160,31763],{"class":65},[51,105162,105163],{"class":53,"line":202},[51,105164,206],{"emptyLinePlaceholder":205},[51,105166,105167],{"class":53,"line":209},[51,105168,206],{"emptyLinePlaceholder":205},[51,105170,105171,105173,105175],{"class":53,"line":223},[51,105172,101686],{"class":278},[51,105174,13948],{"class":69},[51,105176,101691],{"class":61},[51,105178,105179],{"class":53,"line":237},[51,105180,105181],{"class":61},"\u003Cmujoco model=\"state_api\">\n",[51,105183,105184],{"class":53,"line":242},[51,105185,101701],{"class":61},[51,105187,105188],{"class":53,"line":257},[51,105189,206],{"emptyLinePlaceholder":205},[51,105191,105192],{"class":53,"line":262},[51,105193,101710],{"class":61},[51,105195,105196],{"class":53,"line":285},[51,105197,105198],{"class":61},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[51,105200,105201],{"class":53,"line":296},[51,105202,206],{"emptyLinePlaceholder":205},[51,105204,105205],{"class":53,"line":307},[51,105206,105207],{"class":61},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[51,105209,105210],{"class":53,"line":324},[51,105211,105212],{"class":61},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[51,105214,105215],{"class":53,"line":329},[51,105216,105217],{"class":61},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[51,105219,105220],{"class":53,"line":334},[51,105221,101739],{"class":61},[51,105223,105224],{"class":53,"line":340},[51,105225,101744],{"class":61},[51,105227,105228],{"class":53,"line":345},[51,105229,101749],{"class":61},[51,105231,105232],{"class":53,"line":357},[51,105233,96070],{"class":61},[51,105235,105236],{"class":53,"line":366},[51,105237,206],{"emptyLinePlaceholder":205},[51,105239,105240],{"class":53,"line":383},[51,105241,206],{"emptyLinePlaceholder":205},[51,105243,105244,105246,105249,105252,105254,105257,105259],{"class":53,"line":392},[51,105245,348],{"class":69},[51,105247,105248],{"class":57}," print_state",[51,105250,105251],{"class":65},"(prefix: ",[51,105253,1712],{"class":278},[51,105255,105256],{"class":65},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[51,105258,96058],{"class":278},[51,105260,363],{"class":65},[51,105262,105263,105265],{"class":53,"line":403},[51,105264,31677],{"class":278},[51,105266,105267],{"class":65},"(prefix)\n",[51,105269,105270,105272,105274,105277],{"class":53,"line":409},[51,105271,31677],{"class":278},[51,105273,546],{"class":65},[51,105275,105276],{"class":61},"\"  timestep:\"",[51,105278,105279],{"class":65},", model.opt.timestep)\n",[51,105281,105282,105284,105286,105289],{"class":53,"line":414},[51,105283,31677],{"class":278},[51,105285,546],{"class":65},[51,105287,105288],{"class":61},"\"  time:\"",[51,105290,101850],{"class":65},[51,105292,105293,105295,105297,105300,105303,105305],{"class":53,"line":433},[51,105294,31677],{"class":278},[51,105296,546],{"class":65},[51,105298,105299],{"class":61},"\"  qpos:\"",[51,105301,105302],{"class":65},", np.round(data.qpos.copy(), ",[51,105304,835],{"class":278},[51,105306,30876],{"class":65},[51,105308,105309,105311,105313,105316,105319,105321],{"class":53,"line":439},[51,105310,31677],{"class":278},[51,105312,546],{"class":65},[51,105314,105315],{"class":61},"\"  qvel:\"",[51,105317,105318],{"class":65},", np.round(data.qvel.copy(), ",[51,105320,835],{"class":278},[51,105322,30876],{"class":65},[51,105324,105325],{"class":53,"line":444},[51,105326,206],{"emptyLinePlaceholder":205},[51,105328,105329],{"class":53,"line":453},[51,105330,206],{"emptyLinePlaceholder":205},[51,105332,105333,105335,105337,105339,105341],{"class":53,"line":2174},[51,105334,348],{"class":69},[51,105336,2363],{"class":57},[51,105338,101770],{"class":65},[51,105340,96058],{"class":278},[51,105342,363],{"class":65},[51,105344,105345,105347,105349,105351,105353],{"class":53,"line":2965},[51,105346,101779],{"class":65},[51,105348,70],{"class":69},[51,105350,101784],{"class":65},[51,105352,101686],{"class":278},[51,105354,282],{"class":65},[51,105356,105357,105359,105361],{"class":53,"line":2979},[51,105358,101793],{"class":65},[51,105360,70],{"class":69},[51,105362,101798],{"class":65},[51,105364,105365],{"class":53,"line":2987},[51,105366,206],{"emptyLinePlaceholder":205},[51,105368,105369,105372,105375],{"class":53,"line":2992},[51,105370,105371],{"class":65},"    print_state(",[51,105373,105374],{"class":61},"\"initial\"",[51,105376,105377],{"class":65},", model, data)\n",[51,105379,105380],{"class":53,"line":2998},[51,105381,206],{"emptyLinePlaceholder":205},[51,105383,105384,105386,105388,105390,105392,105394,105396],{"class":53,"line":3004},[51,105385,3588],{"class":69},[51,105387,101873],{"class":65},[51,105389,26425],{"class":69},[51,105391,32818],{"class":278},[51,105393,546],{"class":65},[51,105395,1198],{"class":278},[51,105397,31164],{"class":65},[51,105399,105400],{"class":53,"line":3009},[51,105401,101888],{"class":65},[51,105403,105404],{"class":53,"line":8332},[51,105405,206],{"emptyLinePlaceholder":205},[51,105407,105408,105410,105413],{"class":53,"line":8356},[51,105409,105371],{"class":65},[51,105411,105412],{"class":61},"\"after 50 steps\"",[51,105414,105377],{"class":65},[51,105416,105417],{"class":53,"line":8361},[51,105418,206],{"emptyLinePlaceholder":205},[51,105420,105421],{"class":53,"line":8367},[51,105422,105423],{"class":65},"    mujoco.mj_resetData(model, data)\n",[51,105425,105426,105428,105431],{"class":53,"line":8394},[51,105427,105371],{"class":65},[51,105429,105430],{"class":61},"\"after reset\"",[51,105432,105377],{"class":65},[51,105434,105435],{"class":53,"line":8399},[51,105436,206],{"emptyLinePlaceholder":205},[51,105438,105439,105442,105444,105446,105448],{"class":53,"line":8405},[51,105440,105441],{"class":65},"    data.qpos[",[51,105443,620],{"class":278},[51,105445,194],{"class":65},[51,105447,70],{"class":69},[51,105449,105080],{"class":278},[51,105451,105452],{"class":53,"line":8417},[51,105453,105454],{"class":65},"    mujoco.mj_forward(model, data)\n",[51,105456,105457,105459,105462],{"class":53,"line":8429},[51,105458,105371],{"class":65},[51,105460,105461],{"class":61},"\"after manual qpos edit\"",[51,105463,105377],{"class":65},[51,105465,105466],{"class":53,"line":8441},[51,105467,206],{"emptyLinePlaceholder":205},[51,105469,105470],{"class":53,"line":10100},[51,105471,206],{"emptyLinePlaceholder":205},[51,105473,105474,105476,105478,105480,105482],{"class":53,"line":10125},[51,105475,1940],{"class":69},[51,105477,31598],{"class":278},[51,105479,101931],{"class":69},[51,105481,101934],{"class":61},[51,105483,363],{"class":65},[51,105485,105486],{"class":53,"line":10148},[51,105487,101941],{"class":65},[10,105489,103942],{},[41,105491,105493],{"className":43,"code":105492,"language":45,"meta":46,"style":46},"touch ch3_python_state.py\n",[48,105494,105495],{"__ignoreMap":46},[51,105496,105497,105499],{"class":53,"line":54},[51,105498,101655],{"class":57},[51,105500,105501],{"class":61}," ch3_python_state.py\n",[10,105503,102673],{},[41,105505,105507],{"className":43,"code":105506,"language":45,"meta":46,"style":46},"python ch3_python_state.py\n",[48,105508,105509],{"__ignoreMap":46},[51,105510,105511,105513],{"class":53,"line":54},[51,105512,172],{"class":57},[51,105514,105501],{"class":61},[513,105516,101944],{"id":101944},[10,105518,105519],{},"打印状态的函数：",[41,105521,105523],{"className":170,"code":105522,"language":172,"meta":46,"style":46},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[48,105524,105525],{"__ignoreMap":46},[51,105526,105527,105529,105531,105533,105535,105537,105539],{"class":53,"line":54},[51,105528,348],{"class":69},[51,105530,105248],{"class":57},[51,105532,105251],{"class":65},[51,105534,1712],{"class":278},[51,105536,105256],{"class":65},[51,105538,96058],{"class":278},[51,105540,363],{"class":65},[10,105542,105543,105544,105546],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[48,105545,33776],{}," 里发生了什么。",[10,105548,105549],{},"推进 50 步：",[41,105551,105553],{"className":170,"code":105552,"language":172,"meta":46,"style":46},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[48,105554,105555,105571],{"__ignoreMap":46},[51,105556,105557,105559,105561,105563,105565,105567,105569],{"class":53,"line":54},[51,105558,3412],{"class":69},[51,105560,101873],{"class":65},[51,105562,26425],{"class":69},[51,105564,32818],{"class":278},[51,105566,546],{"class":65},[51,105568,1198],{"class":278},[51,105570,31164],{"class":65},[51,105572,105573],{"class":53,"line":185},[51,105574,102071],{"class":65},[10,105576,105577,105578,105581,105582,105584],{},"由于 ",[48,105579,105580],{},"timestep=0.01","，所以 50 步后时间约为 ",[48,105583,35704],{}," 秒。",[10,105586,105587],{},"重置：",[41,105589,105590],{"className":170,"code":104898,"language":172,"meta":46,"style":46},[48,105591,105592],{"__ignoreMap":46},[51,105593,105594],{"class":53,"line":54},[51,105595,104898],{"class":65},[10,105597,105598],{},"这会把时间、位置、速度恢复到初始状态。",[10,105600,105601],{},"手动改高度：",[41,105603,105605],{"className":170,"code":105604,"language":172,"meta":46,"style":46},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[48,105606,105607,105619],{"__ignoreMap":46},[51,105608,105609,105611,105613,105615,105617],{"class":53,"line":54},[51,105610,105071],{"class":65},[51,105612,620],{"class":278},[51,105614,194],{"class":65},[51,105616,70],{"class":69},[51,105618,105080],{"class":278},[51,105620,105621],{"class":53,"line":185},[51,105622,104915],{"class":65},[10,105624,105625,105626,105629,105630,105633],{},"这个例子里 ",[48,105627,105628],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[48,105631,105632],{},"2.0"," 表示把小球放到更高的位置。",[513,105635,102080],{"id":102080},[41,105637,105638],{"className":170,"code":105522,"language":172,"meta":46,"style":46},[48,105639,105640],{"__ignoreMap":46},[51,105641,105642,105644,105646,105648,105650,105652,105654],{"class":53,"line":54},[51,105643,348],{"class":69},[51,105645,105248],{"class":57},[51,105647,105251],{"class":65},[51,105649,1712],{"class":278},[51,105651,105256],{"class":65},[51,105653,96058],{"class":278},[51,105655,363],{"class":65},[10,105657,105658],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[19,105660,105661,105670,105675],{},[22,105662,105663,105666,105667,105669],{},[48,105664,105665],{},"prefix","：一段文字，比如 ",[48,105668,105374],{},"，用来说明现在打印的是哪个阶段。",[22,105671,105672,105674],{},[48,105673,102457],{},"：MuJoCo 模型。",[22,105676,105677,105679],{},[48,105678,33776],{},"：MuJoCo 当前状态。",[10,105681,105682,754,105685,105688],{},[48,105683,105684],{},"prefix: str",[48,105686,105687],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[41,105690,105692],{"className":170,"code":105691,"language":172,"meta":46,"style":46},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[48,105693,105694],{"__ignoreMap":46},[51,105695,105696,105698,105700,105702,105704,105706],{"class":53,"line":54},[51,105697,30794],{"class":278},[51,105699,546],{"class":65},[51,105701,105299],{"class":61},[51,105703,105302],{"class":65},[51,105705,835],{"class":278},[51,105707,30876],{"class":65},[10,105709,105710,105713],{},[48,105711,105712],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[41,105715,105717],{"className":170,"code":105716,"language":172,"meta":46,"style":46},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[48,105718,105719,105731],{"__ignoreMap":46},[51,105720,105721,105723,105725,105727,105729],{"class":53,"line":54},[51,105722,102006],{"class":65},[51,105724,70],{"class":69},[51,105726,101784],{"class":65},[51,105728,101686],{"class":278},[51,105730,282],{"class":65},[51,105732,105733,105735,105737],{"class":53,"line":185},[51,105734,102030],{"class":65},[51,105736,70],{"class":69},[51,105738,101798],{"class":65},[10,105740,105741],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[41,105743,105745],{"className":170,"code":105744,"language":172,"meta":46,"style":46},"print_state(\"initial\", model, data)\n",[48,105746,105747],{"__ignoreMap":46},[51,105748,105749,105752,105754],{"class":53,"line":54},[51,105750,105751],{"class":65},"print_state(",[51,105753,105374],{"class":61},[51,105755,105377],{"class":65},[10,105757,105758,105759,105762],{},"调用刚才定义的 ",[48,105760,105761],{},"print_state"," 函数，打印初始状态。",[41,105764,105765],{"className":170,"code":105552,"language":172,"meta":46,"style":46},[48,105766,105767,105783],{"__ignoreMap":46},[51,105768,105769,105771,105773,105775,105777,105779,105781],{"class":53,"line":54},[51,105770,3412],{"class":69},[51,105772,101873],{"class":65},[51,105774,26425],{"class":69},[51,105776,32818],{"class":278},[51,105778,546],{"class":65},[51,105780,1198],{"class":278},[51,105782,31164],{"class":65},[51,105784,105785],{"class":53,"line":185},[51,105786,102071],{"class":65},[10,105788,105789],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[41,105791,105792],{"className":170,"code":104898,"language":172,"meta":46,"style":46},[48,105793,105794],{"__ignoreMap":46},[51,105795,105796],{"class":53,"line":54},[51,105797,104898],{"class":65},[10,105799,105800,105801,105803,105804,105806],{},"重置 ",[48,105802,33776],{},"。注意它不会重新创建 ",[48,105805,102457],{},"，因为模型结构没有变，只是状态回到初始值。",[41,105808,105809],{"className":170,"code":105064,"language":172,"meta":46,"style":46},[48,105810,105811],{"__ignoreMap":46},[51,105812,105813,105815,105817,105819,105821],{"class":53,"line":54},[51,105814,105071],{"class":65},[51,105816,620],{"class":278},[51,105818,194],{"class":65},[51,105820,70],{"class":69},[51,105822,105080],{"class":278},[10,105824,105825,105826,754,105829,754,105832,105834],{},"这行是“手动改状态”。在 freejoint 中，",[48,105827,105828],{},"qpos[0]",[48,105830,105831],{},"qpos[1]",[48,105833,105628],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[41,105836,105837],{"className":170,"code":104915,"language":172,"meta":46,"style":46},[48,105838,105839],{"__ignoreMap":46},[51,105840,105841],{"class":53,"line":54},[51,105842,104915],{"class":65},[10,105844,105845,105846,105848,105849,105851],{},"手动改完 ",[48,105847,104402],{}," 后，调用 ",[48,105850,104622],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[486,105853,102688],{"id":102687},[10,105855,105856],{},"你会看到:",[19,105858,105859,105864,105869,105872],{},[22,105860,105861,105862],{},"初始时间为 ",[48,105863,733],{},[22,105865,105866,105867],{},"50 步后时间约为 ",[48,105868,35704],{},[22,105870,105871],{},"reset 后状态恢复",[22,105873,105874,105875,105878,105879],{},"手动修改 ",[48,105876,105877],{},"data.qpos[2]"," 后，小球高度变为 ",[48,105880,105632],{},[10,105882,105883,105885],{},[48,105884,105628],{}," 在这个例子中表示自由刚体的 z 坐标。",[10,105887,105888],{},"输出里可以重点看三件事：",[19,105890,105891,105899,105904],{},[22,105892,105893,105895,105896,105898],{},[48,105894,2777],{}," 是否随着 ",[48,105897,101587],{}," 增加。",[22,105900,105901,105903],{},[48,105902,104402],{}," 的 z 坐标是否因为下落而变化。",[22,105905,105906,105908,105909,28767],{},[48,105907,104724],{}," 后时间是否回到 ",[48,105910,733],{},[486,105912,102720],{"id":102719},[19,105914,105915,105921,105927,105933,105936,105945],{},[22,105916,105917,105918,28767],{},"修改 timestep 为 ",[48,105919,105920],{},"0.005",[22,105922,105923,105924,28767],{},"重新运行，检查 50 步后时间是否约为 ",[48,105925,105926],{},"0.25",[22,105928,105929,105930,28767],{},"修改重力为 ",[48,105931,105932],{},"0 0 -1.0",[22,105934,105935],{},"观察小球下降速度是否变慢。",[22,105937,102783,105938,102786,105941,105944],{},[48,105939,105940],{},"data.qpos[2] = 2.0",[48,105942,105943],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[22,105946,105947,105948,105951],{},"注释掉 ",[48,105949,105950],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[486,105953,102825],{"id":102824},[513,105955,105957,105958,105960],{"id":105956},"修改-dataqpos-后位置没有更新","修改 ",[48,105959,101442],{}," 后位置没有更新",[10,105962,102834],{},[41,105964,105965],{"className":170,"code":104915,"language":172,"meta":46,"style":46},[48,105966,105967],{"__ignoreMap":46},[51,105968,105969],{"class":53,"line":54},[51,105970,104915],{"class":65},[513,105972,105973],{"id":105973},"数组维度看不懂",[10,105975,105976],{},"打印模型维度:",[41,105978,105980],{"className":170,"code":105979,"language":172,"meta":46,"style":46},"print(model.nq, model.nv, model.nu)\n",[48,105981,105982],{"__ignoreMap":46},[51,105983,105984,105986],{"class":53,"line":54},[51,105985,30794],{"class":278},[51,105987,105988],{"class":65},"(model.nq, model.nv, model.nu)\n",[679,105990,105991,105999],{},[682,105992,105993],{},[685,105994,105995,105997],{},[688,105996,104946],{"align":24119},[688,105998,101072],{"align":24119},[726,106000,106001,106011,106021],{},[685,106002,106003,106008],{},[731,106004,106005],{"align":24119},[48,106006,106007],{},"nq",[731,106009,106010],{"align":24119},"位置变量数量",[685,106012,106013,106018],{},[731,106014,106015],{"align":24119},[48,106016,106017],{},"nv",[731,106019,106020],{"align":24119},"速度变量数量",[685,106022,106023,106027],{},[731,106024,106025],{"align":24119},[48,106026,102534],{},[731,106028,106029],{"align":24119},"控制输入数量",[513,106031,106033,106034,106036],{"id":106032},"误以为-qpos-一定等于关节数","误以为 ",[48,106035,104402],{}," 一定等于关节数",[10,106038,106039,106040,82902,106042,106044,106045,106047],{},"不是。例如 ",[48,106041,101992],{},[48,106043,104402],{}," 是 7 维，但 ",[48,106046,104732],{}," 是 6 维。",[513,106049,106051,106052,106054],{"id":106050},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[48,106053,104402],{}," 的第几位",[10,106056,106057],{},"初学时可以先打印：",[41,106059,106061],{"className":170,"code":106060,"language":172,"meta":46,"style":46},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[48,106062,106063,106073,106083,106095],{"__ignoreMap":46},[51,106064,106065,106067,106069,106071],{"class":53,"line":54},[51,106066,30794],{"class":278},[51,106068,546],{"class":65},[51,106070,101811],{"class":61},[51,106072,101814],{"class":65},[51,106074,106075,106077,106079,106081],{"class":53,"line":185},[51,106076,30794],{"class":278},[51,106078,546],{"class":65},[51,106080,101823],{"class":61},[51,106082,101826],{"class":65},[51,106084,106085,106087,106089,106092],{"class":53,"line":202},[51,106086,30794],{"class":278},[51,106088,546],{"class":65},[51,106090,106091],{"class":61},"\"qpos:\"",[51,106093,106094],{"class":65},", data.qpos)\n",[51,106096,106097,106099,106101,106104],{"class":53,"line":209},[51,106098,30794],{"class":278},[51,106100,546],{"class":65},[51,106102,106103],{"class":61},"\"qvel:\"",[51,106105,106106],{"class":65},", data.qvel)\n",[10,106108,106109],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[513,106111,106112],{"id":106112},"仿真结果每次都一样",[10,106114,106115,106116,106118],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[48,106117,104402],{},"、目标点或控制输入。",[486,106120,102979],{"id":102978},[10,106122,106123,106124,25000],{},"Python 控制 MuJoCo 的核心就是读写 ",[48,106125,33776],{},[19,106127,106128,106136,106141,106146],{},[22,106129,106130,106131,101390,106133,106135],{},"用 ",[48,106132,101442],{},[48,106134,101445],{}," 读取状态。",[22,106137,106130,106138,106140],{},[48,106139,101448],{}," 写入控制。",[22,106142,106130,106143,106145],{},[48,106144,101587],{}," 推进时间。",[22,106147,106148,106149,106151],{},"手动改状态后用 ",[48,106150,104622],{}," 刷新派生量。",[10,106153,106154],{},"理解这一章后，就可以进入关节和 actuator 控制。",[464,106156,106157],{},"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":46,"searchDepth":185,"depth":185,"links":106159},[106160,106161,106162,106169,106173,106174,106175,106185],{"id":101018,"depth":185,"text":101019},{"id":101141,"depth":185,"text":101142},{"id":101416,"depth":185,"text":101417,"children":106163},[106164,106166,106168],{"id":104927,"depth":202,"text":106165},"qpos、qvel、ctrl 是什么",{"id":105005,"depth":202,"text":106167},"mj_step 和 mj_forward 的区别",{"id":105094,"depth":202,"text":105095},{"id":101624,"depth":185,"text":101625,"children":106170},[106171,106172],{"id":101944,"depth":202,"text":101944},{"id":102080,"depth":202,"text":102080},{"id":102687,"depth":185,"text":102688},{"id":102719,"depth":185,"text":102720},{"id":102824,"depth":185,"text":102825,"children":106176},[106177,106179,106180,106182,106184],{"id":105956,"depth":202,"text":106178},"修改 data.qpos 后位置没有更新",{"id":105973,"depth":202,"text":105973},{"id":106032,"depth":202,"text":106181},"误以为 qpos 一定等于关节数",{"id":106050,"depth":202,"text":106183},"不知道某个元素在 qpos 的第几位",{"id":106112,"depth":202,"text":106112},{"id":102978,"depth":185,"text":102979},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104690,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106192,"title":106193,"body":106194,"description":46,"extension":469,"meta":107884,"navigation":205,"path":107885,"seo":107886,"stem":107887,"__hash__":107888},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106195,"toc":107860},[106196,106199,106201,106204,106206,106231,106234,106253,106256,106258,106260,106284,106286,106300,106302,106343,106345,106369,106371,106374,106408,106410,106423,106426,106494,106503,106507,106510,106544,106550,106553,106557,106596,106599,106619,106623,106666,106668,106697,106700,106706,106709,106711,107105,107107,107119,107121,107132,107134,107137,107166,107174,107177,107212,107215,107217,107225,107228,107230,107241,107251,107271,107274,107310,107322,107370,107389,107431,107444,107472,107477,107498,107508,107526,107529,107563,107566,107586,107589,107608,107614,107616,107619,107625,107631,107641,107644,107650,107659,107661,107707,107709,107715,107721,107724,107727,107747,107750,107756,107762,107764,107787,107790,107793,107802,107805,107843,107845,107848,107854,107857],[14,106197,106193],{"id":106198},"_4关节actuator-与力控制",[486,106200,101019],{"id":101018},[10,106202,106203],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[10,106205,104703],{},[19,106207,106208,106214,106219,106223,106228],{},[22,106209,106210,106213],{},[48,106211,106212],{},"hinge"," 关节",[22,106215,106216],{},[48,106217,106218],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[22,106220,106221],{},[48,106222,101448],{},[22,106224,106225],{},[48,106226,106227],{},"ctrlrange",[22,106229,106230],{},"读取关节角和角速度",[10,106232,106233],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[41,106235,106237],{"className":170,"code":106236,"language":172,"meta":46,"style":46},"data.ctrl[0] = ...\n",[48,106238,106239],{"__ignoreMap":46},[51,106240,106241,106244,106246,106248,106250],{"class":53,"line":54},[51,106242,106243],{"class":65},"data.ctrl[",[51,106245,733],{"class":278},[51,106247,194],{"class":65},[51,106249,70],{"class":69},[51,106251,106252],{"class":278}," ...\n",[10,106254,106255],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[486,106257,101142],{"id":101141},[10,106259,101145],{},[41,106261,106262],{"className":43,"code":104760,"language":45,"meta":46,"style":46},[48,106263,106264],{"__ignoreMap":46},[51,106265,106266,106268,106270,106272,106274,106276,106278,106280,106282],{"class":53,"line":54},[51,106267,24958],{"class":57},[51,106269,26697],{"class":61},[51,106271,24215],{"class":61},[51,106273,26782],{"class":278},[51,106275,104775],{"class":61},[51,106277,101170],{"class":61},[51,106279,102873],{"class":61},[51,106281,101186],{"class":61},[51,106283,104784],{"class":61},[10,106285,103191],{},[41,106287,106288],{"className":43,"code":101291,"language":45,"meta":46,"style":46},[48,106289,106290],{"__ignoreMap":46},[51,106291,106292,106294,106296,106298],{"class":53,"line":54},[51,106293,24212],{"class":57},[51,106295,24215],{"class":61},[51,106297,101302],{"class":61},[51,106299,101305],{"class":61},[10,106301,103208],{},[41,106303,106305],{"className":43,"code":106304,"language":45,"meta":46,"style":46},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[48,106306,106307,106324,106333],{"__ignoreMap":46},[51,106308,106309,106311,106313,106315,106318,106320,106322],{"class":53,"line":54},[51,106310,30712],{"class":57},[51,106312,29558],{"class":61},[51,106314,25497],{"class":278},[51,106316,106317],{"class":61}," mujoco-control",[51,106319,101347],{"class":61},[51,106321,101350],{"class":278},[51,106323,101353],{"class":278},[51,106325,106326,106328,106330],{"class":53,"line":185},[51,106327,30712],{"class":57},[51,106329,101360],{"class":61},[51,106331,106332],{"class":61}," mujoco-control\n",[51,106334,106335,106337,106339,106341],{"class":53,"line":202},[51,106336,24212],{"class":57},[51,106338,24215],{"class":61},[51,106340,101302],{"class":61},[51,106342,101305],{"class":61},[10,106344,101376],{},[19,106346,106347,106353,106360,106366],{},[22,106348,106349,106352],{},[48,106350,106351],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[22,106354,106355,106357,106358,28767],{},[48,106356,101448],{}," 长度等于 ",[48,106359,102530],{},[22,106361,82594,106362,106365],{},[48,106363,106364],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[22,106367,106368],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[486,106370,101417],{"id":101416},[10,106372,106373],{},"关节决定 body 如何运动:",[41,106375,106377],{"className":53439,"code":106376,"language":53441,"meta":46,"style":46},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[48,106378,106379],{"__ignoreMap":46},[51,106380,106381,106383,106385,106387,106389,106392,106394,106396,106398,106401,106403,106406],{"class":53,"line":54},[51,106382,1452],{"class":65},[51,106384,103328],{"class":51672},[51,106386,15304],{"class":57},[51,106388,70],{"class":65},[51,106390,106391],{"class":61},"\"hinge\"",[51,106393,54196],{"class":57},[51,106395,70],{"class":65},[51,106397,106391],{"class":61},[51,106399,106400],{"class":57}," axis",[51,106402,70],{"class":65},[51,106404,106405],{"class":61},"\"0 1 0\"",[51,106407,101516],{"class":65},[10,106409,103424],{},[19,106411,106412,106417,106420],{},[22,106413,106414,106415],{},"名字是 ",[48,106416,106212],{},[22,106418,106419],{},"类型是旋转关节",[22,106421,106422],{},"绕 y 轴旋转",[10,106424,106425],{},"actuator 决定如何施加控制:",[41,106427,106429],{"className":53439,"code":106428,"language":53441,"meta":46,"style":46},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[48,106430,106431,106440,106486],{"__ignoreMap":46},[51,106432,106433,106435,106438],{"class":53,"line":54},[51,106434,1452],{"class":65},[51,106436,106437],{"class":51672},"actuator",[51,106439,51679],{"class":65},[51,106441,106442,106444,106447,106449,106451,106454,106457,106459,106461,106464,106466,106468,106471,106473,106476,106479,106481,106484],{"class":53,"line":185},[51,106443,52516],{"class":65},[51,106445,106446],{"class":51672},"motor",[51,106448,15304],{"class":57},[51,106450,70],{"class":65},[51,106452,106453],{"class":61},"\"hinge_motor\"",[51,106455,106456],{"class":57}," joint",[51,106458,70],{"class":65},[51,106460,106391],{"class":61},[51,106462,106463],{"class":57}," gear",[51,106465,70],{"class":65},[51,106467,4065],{"class":61},[51,106469,106470],{"class":57}," ctrlrange",[51,106472,70],{"class":65},[51,106474,106475],{"class":61},"\"-2 2\"",[51,106477,106478],{"class":57}," ctrllimited",[51,106480,70],{"class":65},[51,106482,106483],{"class":61},"\"true\"",[51,106485,101516],{"class":65},[51,106487,106488,106490,106492],{"class":53,"line":202},[51,106489,52157],{"class":65},[51,106491,106437],{"class":51672},[51,106493,51679],{"class":65},[10,106495,106496,106499,106500,28767],{},[48,106497,106498],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[48,106501,106502],{},"[-2, 2]",[513,106504,106506],{"id":106505},"joint-和-actuator-的关系","joint 和 actuator 的关系",[10,106508,106509],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[679,106511,106512,106522],{},[682,106513,106514],{},[685,106515,106516,106518,106520],{},[688,106517,26135],{"align":24119},[688,106519,103068],{"align":24119},[688,106521,101106],{"align":24119},[726,106523,106524,106534],{},[685,106525,106526,106528,106531],{},[731,106527,103328],{"align":24119},[731,106529,106530],{"align":24119},"定义能怎么动",[731,106532,106533],{"align":24119},"门轴允许门旋转",[685,106535,106536,106538,106541],{},[731,106537,106437],{"align":24119},[731,106539,106540],{"align":24119},"定义怎么施力或控制",[731,106542,106543],{"align":24119},"人推门、马达带动门",[10,106545,106546,106547,106549],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[48,106548,101448],{}," 主动控制它。",[10,106551,106552],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[513,106554,106556],{"id":106555},"hinge-joint","hinge joint",[41,106558,106560],{"className":53439,"code":106559,"language":53441,"meta":46,"style":46},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[48,106561,106562],{"__ignoreMap":46},[51,106563,106564,106566,106568,106570,106572,106574,106576,106578,106580,106582,106584,106586,106589,106591,106594],{"class":53,"line":54},[51,106565,1452],{"class":65},[51,106567,103328],{"class":51672},[51,106569,15304],{"class":57},[51,106571,70],{"class":65},[51,106573,106391],{"class":61},[51,106575,54196],{"class":57},[51,106577,70],{"class":65},[51,106579,106391],{"class":61},[51,106581,106400],{"class":57},[51,106583,70],{"class":65},[51,106585,106405],{"class":61},[51,106587,106588],{"class":57}," damping",[51,106590,70],{"class":65},[51,106592,106593],{"class":61},"\"0.1\"",[51,106595,101516],{"class":65},[10,106597,106598],{},"含义：",[19,106600,106601,106607,106613],{},[22,106602,106603,106606],{},[48,106604,106605],{},"type=\"hinge\"","：只能绕一个轴旋转。",[22,106608,106609,106612],{},[48,106610,106611],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[22,106614,106615,106618],{},[48,106616,106617],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[513,106620,106622],{"id":106621},"motor-actuator","motor actuator",[41,106624,106626],{"className":53439,"code":106625,"language":53441,"meta":46,"style":46},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[48,106627,106628],{"__ignoreMap":46},[51,106629,106630,106632,106634,106636,106638,106640,106642,106644,106646,106648,106650,106652,106654,106656,106658,106660,106662,106664],{"class":53,"line":54},[51,106631,1452],{"class":65},[51,106633,106446],{"class":51672},[51,106635,15304],{"class":57},[51,106637,70],{"class":65},[51,106639,106453],{"class":61},[51,106641,106456],{"class":57},[51,106643,70],{"class":65},[51,106645,106391],{"class":61},[51,106647,106463],{"class":57},[51,106649,70],{"class":65},[51,106651,4065],{"class":61},[51,106653,106470],{"class":57},[51,106655,70],{"class":65},[51,106657,106475],{"class":61},[51,106659,106478],{"class":57},[51,106661,70],{"class":65},[51,106663,106483],{"class":61},[51,106665,101516],{"class":65},[10,106667,106598],{},[19,106669,106670,106679,106685,106691],{},[22,106671,106672,106675,106676,106678],{},[48,106673,106674],{},"joint=\"hinge\"","：这个电机作用在名为 ",[48,106677,106212],{}," 的关节上。",[22,106680,106681,106684],{},[48,106682,106683],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[22,106686,106687,106690],{},[48,106688,106689],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[22,106692,106693,106696],{},[48,106694,106695],{},"ctrllimited=\"true\"","：启用控制范围限制。",[10,106698,106699],{},"简单理解：",[41,106701,106704],{"className":106702,"code":106703,"language":5572,"meta":46},[5570],"实际施加效果 ≈ data.ctrl[0] * gear\n",[48,106705,106703],{"__ignoreMap":46},[10,106707,106708],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[486,106710,101625],{"id":101624},[41,106712,106714],{"className":170,"code":106713,"language":172,"meta":46,"style":46},"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",[48,106715,106716,106723,106727,106733,106743,106747,106751,106759,106764,106769,106773,106777,106782,106787,106791,106796,106801,106806,106811,106815,106819,106823,106828,106833,106838,106842,106846,106850,106854,106866,106878,106886,106890,106900,106910,106920,106924,106937,106950,106954,106971,106985,107020,107024,107028,107039,107054,107069,107081,107085,107089,107101],{"__ignoreMap":46},[51,106717,106718,106720],{"class":53,"line":54},[51,106719,179],{"class":69},[51,106721,106722],{"class":65}," math\n",[51,106724,106725],{"class":53,"line":185},[51,106726,206],{"emptyLinePlaceholder":205},[51,106728,106729,106731],{"class":53,"line":202},[51,106730,179],{"class":69},[51,106732,101673],{"class":65},[51,106734,106735,106737,106739,106741],{"class":53,"line":209},[51,106736,179],{"class":69},[51,106738,31758],{"class":65},[51,106740,217],{"class":69},[51,106742,31763],{"class":65},[51,106744,106745],{"class":53,"line":223},[51,106746,206],{"emptyLinePlaceholder":205},[51,106748,106749],{"class":53,"line":237},[51,106750,206],{"emptyLinePlaceholder":205},[51,106752,106753,106755,106757],{"class":53,"line":242},[51,106754,101686],{"class":278},[51,106756,13948],{"class":69},[51,106758,101691],{"class":61},[51,106760,106761],{"class":53,"line":257},[51,106762,106763],{"class":61},"\u003Cmujoco model=\"one_link_motor\">\n",[51,106765,106766],{"class":53,"line":262},[51,106767,106768],{"class":61},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[51,106770,106771],{"class":53,"line":285},[51,106772,206],{"emptyLinePlaceholder":205},[51,106774,106775],{"class":53,"line":296},[51,106776,101710],{"class":61},[51,106778,106779],{"class":53,"line":307},[51,106780,106781],{"class":61},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[51,106783,106784],{"class":53,"line":324},[51,106785,106786],{"class":61},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[51,106788,106789],{"class":53,"line":329},[51,106790,206],{"emptyLinePlaceholder":205},[51,106792,106793],{"class":53,"line":334},[51,106794,106795],{"class":61},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[51,106797,106798],{"class":53,"line":340},[51,106799,106800],{"class":61},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[51,106802,106803],{"class":53,"line":345},[51,106804,106805],{"class":61},"        \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",[51,106807,106808],{"class":53,"line":357},[51,106809,106810],{"class":61},"      \u003C\u002Fbody>\n",[51,106812,106813],{"class":53,"line":366},[51,106814,101739],{"class":61},[51,106816,106817],{"class":53,"line":383},[51,106818,101744],{"class":61},[51,106820,106821],{"class":53,"line":392},[51,106822,206],{"emptyLinePlaceholder":205},[51,106824,106825],{"class":53,"line":403},[51,106826,106827],{"class":61},"  \u003Cactuator>\n",[51,106829,106830],{"class":53,"line":409},[51,106831,106832],{"class":61},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[51,106834,106835],{"class":53,"line":414},[51,106836,106837],{"class":61},"  \u003C\u002Factuator>\n",[51,106839,106840],{"class":53,"line":433},[51,106841,101749],{"class":61},[51,106843,106844],{"class":53,"line":439},[51,106845,96070],{"class":61},[51,106847,106848],{"class":53,"line":444},[51,106849,206],{"emptyLinePlaceholder":205},[51,106851,106852],{"class":53,"line":453},[51,106853,206],{"emptyLinePlaceholder":205},[51,106855,106856,106858,106860,106862,106864],{"class":53,"line":2174},[51,106857,348],{"class":69},[51,106859,2363],{"class":57},[51,106861,101770],{"class":65},[51,106863,96058],{"class":278},[51,106865,363],{"class":65},[51,106867,106868,106870,106872,106874,106876],{"class":53,"line":2965},[51,106869,101779],{"class":65},[51,106871,70],{"class":69},[51,106873,101784],{"class":65},[51,106875,101686],{"class":278},[51,106877,282],{"class":65},[51,106879,106880,106882,106884],{"class":53,"line":2979},[51,106881,101793],{"class":65},[51,106883,70],{"class":69},[51,106885,101798],{"class":65},[51,106887,106888],{"class":53,"line":2987},[51,106889,206],{"emptyLinePlaceholder":205},[51,106891,106892,106894,106896,106898],{"class":53,"line":2992},[51,106893,31677],{"class":278},[51,106895,546],{"class":65},[51,106897,101811],{"class":61},[51,106899,101814],{"class":65},[51,106901,106902,106904,106906,106908],{"class":53,"line":2998},[51,106903,31677],{"class":278},[51,106905,546],{"class":65},[51,106907,101823],{"class":61},[51,106909,101826],{"class":65},[51,106911,106912,106914,106916,106918],{"class":53,"line":3004},[51,106913,31677],{"class":278},[51,106915,546],{"class":65},[51,106917,101835],{"class":61},[51,106919,101838],{"class":65},[51,106921,106922],{"class":53,"line":3009},[51,106923,206],{"emptyLinePlaceholder":205},[51,106925,106926,106928,106931,106933,106935],{"class":53,"line":8332},[51,106927,3488],{"class":69},[51,106929,106930],{"class":65}," model.nu ",[51,106932,21331],{"class":69},[51,106934,25500],{"class":278},[51,106936,363],{"class":65},[51,106938,106939,106941,106943,106945,106948],{"class":53,"line":8356},[51,106940,103804],{"class":69},[51,106942,103807],{"class":278},[51,106944,546],{"class":65},[51,106946,106947],{"class":61},"\"expected exactly one actuator\"",[51,106949,282],{"class":65},[51,106951,106952],{"class":53,"line":8361},[51,106953,206],{"emptyLinePlaceholder":205},[51,106955,106956,106958,106960,106962,106964,106966,106969],{"class":53,"line":8367},[51,106957,3588],{"class":69},[51,106959,31992],{"class":65},[51,106961,26425],{"class":69},[51,106963,32818],{"class":278},[51,106965,546],{"class":65},[51,106967,106968],{"class":278},"2000",[51,106970,31164],{"class":65},[51,106972,106973,106976,106978,106980,106982],{"class":53,"line":8394},[51,106974,106975],{"class":65},"        t ",[51,106977,70],{"class":69},[51,106979,31992],{"class":65},[51,106981,997],{"class":69},[51,106983,106984],{"class":65}," model.opt.timestep\n",[51,106986,106987,106990,106992,106994,106996,106999,107001,107004,107006,107008,107011,107013,107015,107017],{"class":53,"line":8399},[51,106988,106989],{"class":65},"        data.ctrl[",[51,106991,733],{"class":278},[51,106993,194],{"class":65},[51,106995,70],{"class":69},[51,106997,106998],{"class":278}," 1.5",[51,107000,6902],{"class":69},[51,107002,107003],{"class":65}," math.sin(",[51,107005,105632],{"class":278},[51,107007,6902],{"class":69},[51,107009,107010],{"class":65}," math.pi ",[51,107012,997],{"class":69},[51,107014,62239],{"class":278},[51,107016,6902],{"class":69},[51,107018,107019],{"class":65}," t)\n",[51,107021,107022],{"class":53,"line":8405},[51,107023,101888],{"class":65},[51,107025,107026],{"class":53,"line":8417},[51,107027,206],{"emptyLinePlaceholder":205},[51,107029,107030,107032,107034,107037],{"class":53,"line":8429},[51,107031,31677],{"class":278},[51,107033,546],{"class":65},[51,107035,107036],{"class":61},"\"time:\"",[51,107038,101850],{"class":65},[51,107040,107041,107043,107045,107048,107050,107052],{"class":53,"line":8441},[51,107042,31677],{"class":278},[51,107044,546],{"class":65},[51,107046,107047],{"class":61},"\"joint qpos:\"",[51,107049,105302],{"class":65},[51,107051,835],{"class":278},[51,107053,30876],{"class":65},[51,107055,107056,107058,107060,107063,107065,107067],{"class":53,"line":10100},[51,107057,31677],{"class":278},[51,107059,546],{"class":65},[51,107061,107062],{"class":61},"\"joint qvel:\"",[51,107064,105318],{"class":65},[51,107066,835],{"class":278},[51,107068,30876],{"class":65},[51,107070,107071,107073,107075,107078],{"class":53,"line":10125},[51,107072,31677],{"class":278},[51,107074,546],{"class":65},[51,107076,107077],{"class":61},"\"last ctrl:\"",[51,107079,107080],{"class":65},", data.ctrl.copy())\n",[51,107082,107083],{"class":53,"line":10148},[51,107084,206],{"emptyLinePlaceholder":205},[51,107086,107087],{"class":53,"line":10172},[51,107088,206],{"emptyLinePlaceholder":205},[51,107090,107091,107093,107095,107097,107099],{"class":53,"line":10177},[51,107092,1940],{"class":69},[51,107094,31598],{"class":278},[51,107096,101931],{"class":69},[51,107098,101934],{"class":61},[51,107100,363],{"class":65},[51,107102,107103],{"class":53,"line":10182},[51,107104,101941],{"class":65},[10,107106,103942],{},[41,107108,107110],{"className":43,"code":107109,"language":45,"meta":46,"style":46},"touch ch4_joint_motor.py\n",[48,107111,107112],{"__ignoreMap":46},[51,107113,107114,107116],{"class":53,"line":54},[51,107115,101655],{"class":57},[51,107117,107118],{"class":61}," ch4_joint_motor.py\n",[10,107120,102673],{},[41,107122,107124],{"className":43,"code":107123,"language":45,"meta":46,"style":46},"python ch4_joint_motor.py\n",[48,107125,107126],{"__ignoreMap":46},[51,107127,107128,107130],{"class":53,"line":54},[51,107129,172],{"class":57},[51,107131,107118],{"class":61},[513,107133,101944],{"id":101944},[10,107135,107136],{},"检查 actuator 数量：",[41,107138,107140],{"className":170,"code":107139,"language":172,"meta":46,"style":46},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[48,107141,107142,107154],{"__ignoreMap":46},[51,107143,107144,107146,107148,107150,107152],{"class":53,"line":54},[51,107145,1940],{"class":69},[51,107147,106930],{"class":65},[51,107149,21331],{"class":69},[51,107151,25500],{"class":278},[51,107153,363],{"class":65},[51,107155,107156,107158,107160,107162,107164],{"class":53,"line":185},[51,107157,104267],{"class":69},[51,107159,103807],{"class":278},[51,107161,546],{"class":65},[51,107163,106947],{"class":61},[51,107165,282],{"class":65},[10,107167,107168,107170,107171,107173],{},[48,107169,102530],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[48,107172,101448],{}," 长度应该是 1。",[10,107175,107176],{},"产生正弦控制信号：",[41,107178,107180],{"className":170,"code":107179,"language":172,"meta":46,"style":46},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[48,107181,107182],{"__ignoreMap":46},[51,107183,107184,107186,107188,107190,107192,107194,107196,107198,107200,107202,107204,107206,107208,107210],{"class":53,"line":54},[51,107185,106243],{"class":65},[51,107187,733],{"class":278},[51,107189,194],{"class":65},[51,107191,70],{"class":69},[51,107193,106998],{"class":278},[51,107195,6902],{"class":69},[51,107197,107003],{"class":65},[51,107199,105632],{"class":278},[51,107201,6902],{"class":69},[51,107203,107010],{"class":65},[51,107205,997],{"class":69},[51,107207,62239],{"class":278},[51,107209,6902],{"class":69},[51,107211,107019],{"class":65},[10,107213,107214],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[10,107216,102045],{},[41,107218,107219],{"className":170,"code":104877,"language":172,"meta":46,"style":46},[48,107220,107221],{"__ignoreMap":46},[51,107222,107223],{"class":53,"line":54},[51,107224,104877],{"class":65},[10,107226,107227],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[513,107229,102080],{"id":102080},[41,107231,107233],{"className":170,"code":107232,"language":172,"meta":46,"style":46},"import math\n",[48,107234,107235],{"__ignoreMap":46},[51,107236,107237,107239],{"class":53,"line":54},[51,107238,179],{"class":69},[51,107240,106722],{"class":65},[10,107242,107243,107244,101390,107247,107250],{},"导入 Python 标准库里的数学模块。后面要用 ",[48,107245,107246],{},"math.sin",[48,107248,107249],{},"math.pi"," 生成周期变化的控制信号。",[41,107252,107253],{"className":170,"code":104058,"language":172,"meta":46,"style":46},[48,107254,107255,107261],{"__ignoreMap":46},[51,107256,107257,107259],{"class":53,"line":54},[51,107258,179],{"class":69},[51,107260,101673],{"class":65},[51,107262,107263,107265,107267,107269],{"class":53,"line":185},[51,107264,179],{"class":69},[51,107266,31758],{"class":65},[51,107268,217],{"class":69},[51,107270,31763],{"class":65},[10,107272,107273],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[41,107275,107276],{"className":53439,"code":106559,"language":53441,"meta":46,"style":46},[48,107277,107278],{"__ignoreMap":46},[51,107279,107280,107282,107284,107286,107288,107290,107292,107294,107296,107298,107300,107302,107304,107306,107308],{"class":53,"line":54},[51,107281,1452],{"class":65},[51,107283,103328],{"class":51672},[51,107285,15304],{"class":57},[51,107287,70],{"class":65},[51,107289,106391],{"class":61},[51,107291,54196],{"class":57},[51,107293,70],{"class":65},[51,107295,106391],{"class":61},[51,107297,106400],{"class":57},[51,107299,70],{"class":65},[51,107301,106405],{"class":61},[51,107303,106588],{"class":57},[51,107305,70],{"class":65},[51,107307,106593],{"class":61},[51,107309,101516],{"class":65},[10,107311,107312,107313,107315,107316,107318,107319,107321],{},"这行定义关节。",[48,107314,106212],{}," 表示旋转关节。",[48,107317,106611],{}," 表示绕 y 轴旋转。",[48,107320,106617],{}," 表示有一点阻尼，运动不会完全无损耗。",[41,107323,107325],{"className":53439,"code":107324,"language":53441,"meta":46,"style":46},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[48,107326,107327],{"__ignoreMap":46},[51,107328,107329,107331,107333,107335,107337,107340,107342,107344,107347,107350,107352,107355,107357,107359,107361,107363,107365,107368],{"class":53,"line":54},[51,107330,1452],{"class":65},[51,107332,101492],{"class":51672},[51,107334,15304],{"class":57},[51,107336,70],{"class":65},[51,107338,107339],{"class":61},"\"link_geom\"",[51,107341,54196],{"class":57},[51,107343,70],{"class":65},[51,107345,107346],{"class":61},"\"capsule\"",[51,107348,107349],{"class":57}," fromto",[51,107351,70],{"class":65},[51,107353,107354],{"class":61},"\"0 0 0 0 0 0.5\"",[51,107356,101508],{"class":57},[51,107358,70],{"class":65},[51,107360,104150],{"class":61},[51,107362,102373],{"class":57},[51,107364,70],{"class":65},[51,107366,107367],{"class":61},"\"0.5\"",[51,107369,101516],{"class":65},[10,107371,107372,107373,107375,107376,107378,107379,107382,107383,28767,107386,107388],{},"这行定义摆杆的形状。",[48,107374,103537],{}," 是胶囊体，适合表示杆子。",[48,107377,103548],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[48,107380,107381],{},"(0,0,0)"," 延伸到 ",[48,107384,107385],{},"(0,0,0.5)",[48,107387,103542],{}," 是半径。",[41,107390,107391],{"className":53439,"code":106625,"language":53441,"meta":46,"style":46},[48,107392,107393],{"__ignoreMap":46},[51,107394,107395,107397,107399,107401,107403,107405,107407,107409,107411,107413,107415,107417,107419,107421,107423,107425,107427,107429],{"class":53,"line":54},[51,107396,1452],{"class":65},[51,107398,106446],{"class":51672},[51,107400,15304],{"class":57},[51,107402,70],{"class":65},[51,107404,106453],{"class":61},[51,107406,106456],{"class":57},[51,107408,70],{"class":65},[51,107410,106391],{"class":61},[51,107412,106463],{"class":57},[51,107414,70],{"class":65},[51,107416,4065],{"class":61},[51,107418,106470],{"class":57},[51,107420,70],{"class":65},[51,107422,106475],{"class":61},[51,107424,106478],{"class":57},[51,107426,70],{"class":65},[51,107428,106483],{"class":61},[51,107430,101516],{"class":65},[10,107432,107433,107434,107436,107437,107440,107441,107443],{},"这行定义电机。它作用在 ",[48,107435,106212],{}," 关节上。",[48,107438,107439],{},"gear"," 可以理解成放大倍数。",[48,107442,106227],{}," 限制控制输入范围。",[41,107445,107446],{"className":170,"code":107139,"language":172,"meta":46,"style":46},[48,107447,107448,107460],{"__ignoreMap":46},[51,107449,107450,107452,107454,107456,107458],{"class":53,"line":54},[51,107451,1940],{"class":69},[51,107453,106930],{"class":65},[51,107455,21331],{"class":69},[51,107457,25500],{"class":278},[51,107459,363],{"class":65},[51,107461,107462,107464,107466,107468,107470],{"class":53,"line":185},[51,107463,104267],{"class":69},[51,107465,103807],{"class":278},[51,107467,546],{"class":65},[51,107469,106947],{"class":61},[51,107471,282],{"class":65},[10,107473,107474,107476],{},[48,107475,102530],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[41,107478,107480],{"className":170,"code":107479,"language":172,"meta":46,"style":46},"for step in range(2000):\n",[48,107481,107482],{"__ignoreMap":46},[51,107483,107484,107486,107488,107490,107492,107494,107496],{"class":53,"line":54},[51,107485,3412],{"class":69},[51,107487,31992],{"class":65},[51,107489,26425],{"class":69},[51,107491,32818],{"class":278},[51,107493,546],{"class":65},[51,107495,106968],{"class":278},[51,107497,31164],{"class":65},[10,107499,107500,107501,107503,107504,107507],{},"循环 2000 步。这里没有用 ",[48,107502,1534],{},"，而是用 ",[48,107505,107506],{},"step","，因为后面要用当前步数计算时间。",[41,107509,107511],{"className":170,"code":107510,"language":172,"meta":46,"style":46},"t = step * model.opt.timestep\n",[48,107512,107513],{"__ignoreMap":46},[51,107514,107515,107518,107520,107522,107524],{"class":53,"line":54},[51,107516,107517],{"class":65},"t ",[51,107519,70],{"class":69},[51,107521,31992],{"class":65},[51,107523,997],{"class":69},[51,107525,106984],{"class":65},[10,107527,107528],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[41,107530,107531],{"className":170,"code":107179,"language":172,"meta":46,"style":46},[48,107532,107533],{"__ignoreMap":46},[51,107534,107535,107537,107539,107541,107543,107545,107547,107549,107551,107553,107555,107557,107559,107561],{"class":53,"line":54},[51,107536,106243],{"class":65},[51,107538,733],{"class":278},[51,107540,194],{"class":65},[51,107542,70],{"class":69},[51,107544,106998],{"class":278},[51,107546,6902],{"class":69},[51,107548,107003],{"class":65},[51,107550,105632],{"class":278},[51,107552,6902],{"class":69},[51,107554,107010],{"class":65},[51,107556,997],{"class":69},[51,107558,62239],{"class":278},[51,107560,6902],{"class":69},[51,107562,107019],{"class":65},[10,107564,107565],{},"这行给电机输入一个正弦波。拆开看：",[19,107567,107568,107574,107580],{},[22,107569,107570,107573],{},[48,107571,107572],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[22,107575,107576,107579],{},[48,107577,107578],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[22,107581,107582,107585],{},[48,107583,107584],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[10,107587,107588],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[41,107590,107592],{"className":170,"code":107591,"language":172,"meta":46,"style":46},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[48,107593,107594],{"__ignoreMap":46},[51,107595,107596,107598,107600,107602,107604,107606],{"class":53,"line":54},[51,107597,30794],{"class":278},[51,107599,546],{"class":65},[51,107601,107047],{"class":61},[51,107603,105302],{"class":65},[51,107605,835],{"class":278},[51,107607,30876],{"class":65},[10,107609,107610,107611,107613],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[48,107612,101442],{}," 只有一个数。",[486,107615,102688],{"id":102687},[10,107617,107618],{},"输出类似:",[41,107620,107623],{"className":107621,"code":107622,"language":5572,"meta":46},[5570],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[48,107624,107622],{"__ignoreMap":46},[10,107626,107627,107628,107630],{},"这里 ",[48,107629,106498],{}," 是电机输入。",[10,107632,107633,107636,107637,107640],{},[48,107634,107635],{},"joint qpos"," 是关节角度，单位通常是弧度。",[48,107638,107639],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[10,107642,107643],{},"角度单位提示：",[41,107645,107648],{"className":107646,"code":107647,"language":5572,"meta":46},[5570],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[48,107649,107647],{"__ignoreMap":46},[10,107651,107652,107653,107655,107656,107658],{},"如果你看到 ",[48,107654,104402],{}," 是 ",[48,107657,35704],{},"，大约就是 28.6 度。",[486,107660,102720],{"id":102719},[19,107662,107663,107670,107673,107680,107683,107691,107699],{},[22,107664,102783,107665,102786,107667,28767],{},[48,107666,106683],{},[48,107668,107669],{},"gear=\"5\"",[22,107671,107672],{},"重新运行，观察关节运动是否更剧烈。",[22,107674,102783,107675,102786,107677,28767],{},[48,107676,106227],{},[48,107678,107679],{},"-0.2 0.2",[22,107681,107682],{},"重新运行，观察控制能力是否变弱。",[22,107684,107685,107686,107688,107689,28767],{},"去掉 actuator，确认 ",[48,107687,102530],{}," 变成 ",[48,107690,733],{},[22,107692,102783,107693,102786,107695,107698],{},[48,107694,106617],{},[48,107696,107697],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[22,107700,102783,107701,102786,107703,107706],{},[48,107702,106611],{},[48,107704,107705],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[486,107708,102825],{"id":102824},[513,107710,107712],{"id":107711},"indexerror-index-0-is-out-of-bounds",[48,107713,107714],{},"IndexError: index 0 is out of bounds",[10,107716,107717,107718,107720],{},"原因是 ",[48,107719,106364],{},"，没有 actuator。",[513,107722,107723],{"id":107723},"关节几乎不动",[10,107725,107726],{},"可能原因:",[19,107728,107729,107734,107738,107744],{},[22,107730,107731,107733],{},[48,107732,107439],{}," 太小",[22,107735,107736,107733],{},[48,107737,106227],{},[22,107739,107740,107743],{},[48,107741,107742],{},"damping"," 太大",[22,107745,107746],{},"重力方向导致运动不明显",[513,107748,107749],{"id":107749},"模型编译失败",[10,107751,107752,107753,107755],{},"检查 actuator 引用的 ",[48,107754,106674],{}," 是否存在，joint 名称是否拼写一致。",[513,107757,107759,107761],{"id":107758},"datactrl0-写了但没有效果",[48,107760,106498],{}," 写了但没有效果",[10,107763,102947],{},[19,107765,107766,107771,107774,107779,107784],{},[22,107767,107768,107770],{},[48,107769,102530],{}," 是否大于 0。",[22,107772,107773],{},"motor 是否引用了正确 joint。",[22,107775,107776,107778],{},[48,107777,107439],{}," 是否太小。",[22,107780,107781,107783],{},[48,107782,106227],{}," 是否把输入限制得太小。",[22,107785,107786],{},"body 是否真的有可动 joint。",[513,107788,107789],{"id":107789},"控制输入超过范围会怎样",[10,107791,107792],{},"如果设置了：",[41,107794,107796],{"className":53439,"code":107795,"language":53441,"meta":46,"style":46},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[48,107797,107798],{"__ignoreMap":46},[51,107799,107800],{"class":53,"line":54},[51,107801,107795],{"class":65},[10,107803,107804],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[41,107806,107808],{"className":170,"code":107807,"language":172,"meta":46,"style":46},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[48,107809,107810,107830],{"__ignoreMap":46},[51,107811,107812,107815,107817,107820,107822,107824,107826,107828],{"class":53,"line":54},[51,107813,107814],{"class":65},"action ",[51,107816,70],{"class":69},[51,107818,107819],{"class":65}," np.clip(action, ",[51,107821,1074],{"class":69},[51,107823,105632],{"class":278},[51,107825,12819],{"class":65},[51,107827,105632],{"class":278},[51,107829,282],{"class":65},[51,107831,107832,107834,107836,107838,107840],{"class":53,"line":185},[51,107833,106243],{"class":65},[51,107835,733],{"class":278},[51,107837,194],{"class":65},[51,107839,70],{"class":69},[51,107841,107842],{"class":65}," action\n",[486,107844,102979],{"id":102978},[10,107846,107847],{},"这一章建立了控制任务的基本形式：",[41,107849,107852],{"className":107850,"code":107851,"language":5572,"meta":46},[5570],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[48,107853,107851],{"__ignoreMap":46},[10,107855,107856],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[464,107858,107859],{},"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":46,"searchDepth":185,"depth":185,"links":107861},[107862,107863,107864,107869,107873,107874,107875,107883],{"id":101018,"depth":185,"text":101019},{"id":101141,"depth":185,"text":101142},{"id":101416,"depth":185,"text":101417,"children":107865},[107866,107867,107868],{"id":106505,"depth":202,"text":106506},{"id":106555,"depth":202,"text":106556},{"id":106621,"depth":202,"text":106622},{"id":101624,"depth":185,"text":101625,"children":107870},[107871,107872],{"id":101944,"depth":202,"text":101944},{"id":102080,"depth":202,"text":102080},{"id":102687,"depth":185,"text":102688},{"id":102719,"depth":185,"text":102720},{"id":102824,"depth":185,"text":102825,"children":107876},[107877,107878,107879,107880,107882],{"id":107711,"depth":202,"text":107714},{"id":107723,"depth":202,"text":107723},{"id":107749,"depth":202,"text":107749},{"id":107758,"depth":202,"text":107881},"data.ctrl[0] 写了但没有效果",{"id":107789,"depth":202,"text":107789},{"id":102978,"depth":185,"text":102979},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106193,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107890,"title":107891,"body":107892,"description":46,"extension":469,"meta":109800,"navigation":205,"path":109801,"seo":109802,"stem":109803,"__hash__":109804},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107893,"toc":109776},[107894,107897,107899,107902,107910,107913,107930,107933,107958,107961,108007,108009,108011,108066,108068,108087,108089,108132,108135,108152,108155,108171,108181,108188,108190,108193,108196,108230,108233,108281,108285,108288,108302,108311,108315,108318,108343,108346,108350,108363,108366,108372,108375,108390,108392,108395,108655,108657,108669,108672,108984,108986,108998,109000,109003,109018,109023,109026,109047,109050,109053,109087,109090,109094,109105,109108,109125,109128,109142,109149,109169,109176,109190,109193,109205,109220,109240,109243,109265,109268,109272,109287,109298,109313,109316,109346,109362,109391,109399,109423,109426,109444,109454,109466,109473,109482,109488,109497,109500,109502,109511,109514,109529,109531,109534,109545,109548,109559,109562,109580,109582,109599,109602,109630,109632,109636,109639,109669,109675,109678,109682,109690,109693,109695,109716,109719,109722,109738,109741,109757,109759,109762,109773],[14,107895,107891],{"id":107896},"_5viewer-可视化与-renderer-离屏渲染",[486,107898,101019],{"id":101018},[10,107900,107901],{},"本章掌握两类可视化方式:",[19,107903,107904,107907],{},[22,107905,107906],{},"交互式 viewer: 适合人工观察仿真",[22,107908,107909],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[10,107911,107912],{},"使用官方接口:",[41,107914,107916],{"className":170,"code":107915,"language":172,"meta":46,"style":46},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[48,107917,107918,107925],{"__ignoreMap":46},[51,107919,107920,107922],{"class":53,"line":54},[51,107921,179],{"class":69},[51,107923,107924],{"class":65}," mujoco.viewer\n",[51,107926,107927],{"class":53,"line":185},[51,107928,107929],{"class":65},"mujoco.viewer.launch_passive(model, data)\n",[10,107931,107932],{},"以及:",[41,107934,107936],{"className":170,"code":107935,"language":172,"meta":46,"style":46},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[48,107937,107938,107948],{"__ignoreMap":46},[51,107939,107940,107943,107945],{"class":53,"line":54},[51,107941,107942],{"class":65},"renderer ",[51,107944,70],{"class":69},[51,107946,107947],{"class":65}," mujoco.Renderer(model)\n",[51,107949,107950,107953,107955],{"class":53,"line":185},[51,107951,107952],{"class":65},"image ",[51,107954,70],{"class":69},[51,107956,107957],{"class":65}," renderer.render()\n",[10,107959,107960],{},"新手建议先理解二者区别：",[679,107962,107963,107979],{},[682,107964,107965],{},[685,107966,107967,107970,107973,107976],{},[688,107968,107969],{"align":24119},"工具",[688,107971,107972],{"align":24119},"用途",[688,107974,107975],{"align":24119},"是否打开窗口",[688,107977,107978],{"align":24119},"常见场景",[726,107980,107981,107994],{},[685,107982,107983,107986,107989,107991],{},[731,107984,107985],{"align":24119},"Viewer",[731,107987,107988],{"align":24119},"人眼实时观察仿真",[731,107990,105037],{"align":24119},[731,107992,107993],{"align":24119},"调试模型、看控制效果",[685,107995,107996,107999,108002,108004],{},[731,107997,107998],{"align":24119},"Renderer",[731,108000,108001],{"align":24119},"生成图像数组",[731,108003,105050],{"align":24119},[731,108005,108006],{"align":24119},"保存图片、训练视觉策略、服务器批量采集",[486,108008,101142],{"id":101141},[10,108010,101145],{},[41,108012,108014],{"className":43,"code":108013,"language":45,"meta":46,"style":46},"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",[48,108015,108016,108028,108038,108046,108054],{"__ignoreMap":46},[51,108017,108018,108020,108022,108024,108026],{"class":53,"line":54},[51,108019,24958],{"class":57},[51,108021,26697],{"class":61},[51,108023,24215],{"class":61},[51,108025,26782],{"class":278},[51,108027,25060],{"class":278},[51,108029,108030,108032,108034,108036],{"class":53,"line":185},[51,108031,101180],{"class":61},[51,108033,101183],{"class":61},[51,108035,101186],{"class":61},[51,108037,25060],{"class":278},[51,108039,108040,108042,108044],{"class":53,"line":202},[51,108041,101193],{"class":61},[51,108043,101196],{"class":61},[51,108045,25060],{"class":278},[51,108047,108048,108050,108052],{"class":53,"line":209},[51,108049,101203],{"class":61},[51,108051,101206],{"class":61},[51,108053,25060],{"class":278},[51,108055,108056,108058,108060,108062,108064],{"class":53,"line":223},[51,108057,101213],{"class":61},[51,108059,101216],{"class":61},[51,108061,101219],{"class":61},[51,108063,101222],{"class":61},[51,108065,102888],{"class":61},[10,108067,103191],{},[41,108069,108071],{"className":43,"code":108070,"language":45,"meta":46,"style":46},"pip install \"mujoco>=2.3\" numpy pillow\n",[48,108072,108073],{"__ignoreMap":46},[51,108074,108075,108077,108079,108081,108084],{"class":53,"line":54},[51,108076,24212],{"class":57},[51,108078,24215],{"class":61},[51,108080,101302],{"class":61},[51,108082,108083],{"class":61}," numpy",[51,108085,108086],{"class":61}," pillow\n",[10,108088,103208],{},[41,108090,108092],{"className":43,"code":108091,"language":45,"meta":46,"style":46},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[48,108093,108094,108111,108120],{"__ignoreMap":46},[51,108095,108096,108098,108100,108102,108105,108107,108109],{"class":53,"line":54},[51,108097,30712],{"class":57},[51,108099,29558],{"class":61},[51,108101,25497],{"class":278},[51,108103,108104],{"class":61}," mujoco-render",[51,108106,101347],{"class":61},[51,108108,101350],{"class":278},[51,108110,101353],{"class":278},[51,108112,108113,108115,108117],{"class":53,"line":185},[51,108114,30712],{"class":57},[51,108116,101360],{"class":61},[51,108118,108119],{"class":61}," mujoco-render\n",[51,108121,108122,108124,108126,108128,108130],{"class":53,"line":202},[51,108123,24212],{"class":57},[51,108125,24215],{"class":61},[51,108127,101302],{"class":61},[51,108129,108083],{"class":61},[51,108131,108086],{"class":61},[10,108133,108134],{},"离屏渲染后端:",[41,108136,108138],{"className":43,"code":108137,"language":45,"meta":46,"style":46},"export MUJOCO_GL=egl\n",[48,108139,108140],{"__ignoreMap":46},[51,108141,108142,108144,108147,108149],{"class":53,"line":54},[51,108143,25424],{"class":69},[51,108145,108146],{"class":65}," MUJOCO_GL",[51,108148,70],{"class":69},[51,108150,108151],{"class":65},"egl\n",[10,108153,108154],{},"或:",[41,108156,108158],{"className":43,"code":108157,"language":45,"meta":46,"style":46},"export MUJOCO_GL=osmesa\n",[48,108159,108160],{"__ignoreMap":46},[51,108161,108162,108164,108166,108168],{"class":53,"line":54},[51,108163,25424],{"class":69},[51,108165,108146],{"class":65},[51,108167,70],{"class":69},[51,108169,108170],{"class":65},"osmesa\n",[10,108172,108173,108174,108177,108178,28767],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[48,108175,108176],{},"egl"," 失败，再尝试 ",[48,108179,108180],{},"osmesa",[10,108182,108183,108184,108187],{},"如果你在本机桌面环境运行，通常先不要设置 ",[48,108185,108186],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[486,108189,101417],{"id":101416},[10,108191,108192],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[10,108194,108195],{},"典型 viewer 流程:",[41,108197,108199],{"className":170,"code":108198,"language":172,"meta":46,"style":46},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[48,108200,108201,108214,108221,108225],{"__ignoreMap":46},[51,108202,108203,108206,108209,108211],{"class":53,"line":54},[51,108204,108205],{"class":69},"with",[51,108207,108208],{"class":65}," mujoco.viewer.launch_passive(model, data) ",[51,108210,217],{"class":69},[51,108212,108213],{"class":65}," viewer:\n",[51,108215,108216,108218],{"class":53,"line":185},[51,108217,2641],{"class":69},[51,108219,108220],{"class":65}," viewer.is_running():\n",[51,108222,108223],{"class":53,"line":202},[51,108224,101888],{"class":65},[51,108226,108227],{"class":53,"line":209},[51,108228,108229],{"class":65},"        viewer.sync()\n",[10,108231,108232],{},"典型 renderer 流程:",[41,108234,108236],{"className":170,"code":108235,"language":172,"meta":46,"style":46},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[48,108237,108238,108264,108268,108273],{"__ignoreMap":46},[51,108239,108240,108242,108244,108247,108249,108251,108253,108255,108257,108259,108262],{"class":53,"line":54},[51,108241,107942],{"class":65},[51,108243,70],{"class":69},[51,108245,108246],{"class":65}," mujoco.Renderer(model, ",[51,108248,25363],{"class":248},[51,108250,70],{"class":69},[51,108252,42716],{"class":278},[51,108254,12819],{"class":65},[51,108256,25359],{"class":248},[51,108258,70],{"class":69},[51,108260,108261],{"class":278},"640",[51,108263,282],{"class":65},[51,108265,108266],{"class":53,"line":185},[51,108267,104877],{"class":65},[51,108269,108270],{"class":53,"line":202},[51,108271,108272],{"class":65},"renderer.update_scene(data)\n",[51,108274,108275,108277,108279],{"class":53,"line":209},[51,108276,107952],{"class":65},[51,108278,70],{"class":69},[51,108280,107957],{"class":65},[513,108282,108284],{"id":108283},"viewer-的同步逻辑","viewer 的同步逻辑",[10,108286,108287],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[41,108289,108291],{"className":170,"code":108290,"language":172,"meta":46,"style":46},"mujoco.mj_step(model, data)\nviewer.sync()\n",[48,108292,108293,108297],{"__ignoreMap":46},[51,108294,108295],{"class":53,"line":54},[51,108296,104877],{"class":65},[51,108298,108299],{"class":53,"line":185},[51,108300,108301],{"class":65},"viewer.sync()\n",[10,108303,108304,108306,108307,108310],{},[48,108305,101587],{}," 负责算物理，",[48,108308,108309],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[513,108312,108314],{"id":108313},"为什么要-sleep","为什么要 sleep",[10,108316,108317],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[41,108319,108321],{"className":170,"code":108320,"language":172,"meta":46,"style":46},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[48,108322,108323],{"__ignoreMap":46},[51,108324,108325,108328,108330,108333,108335,108338,108340],{"class":53,"line":54},[51,108326,108327],{"class":65},"sleep_time ",[51,108329,70],{"class":69},[51,108331,108332],{"class":65}," model.opt.timestep ",[51,108334,1074],{"class":69},[51,108336,108337],{"class":65}," (time.time() ",[51,108339,1074],{"class":69},[51,108341,108342],{"class":65}," step_start)\n",[10,108344,108345],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[513,108347,108349],{"id":108348},"renderer-输出是什么","renderer 输出是什么",[41,108351,108353],{"className":170,"code":108352,"language":172,"meta":46,"style":46},"image = renderer.render()\n",[48,108354,108355],{"__ignoreMap":46},[51,108356,108357,108359,108361],{"class":53,"line":54},[51,108358,107952],{"class":65},[51,108360,70],{"class":69},[51,108362,107957],{"class":65},[10,108364,108365],{},"得到的是 NumPy 数组，形状通常是：",[41,108367,108370],{"className":108368,"code":108369,"language":5572,"meta":46},[5570],"(height, width, 3)\n",[48,108371,108369],{"__ignoreMap":46},[10,108373,108374],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[41,108376,108378],{"className":170,"code":108377,"language":172,"meta":46,"style":46},"Image.fromarray(image).save(\"render_output.png\")\n",[48,108379,108380],{"__ignoreMap":46},[51,108381,108382,108385,108388],{"class":53,"line":54},[51,108383,108384],{"class":65},"Image.fromarray(image).save(",[51,108386,108387],{"class":61},"\"render_output.png\"",[51,108389,282],{"class":65},[486,108391,101625],{"id":101624},[10,108393,108394],{},"交互式 Viewer:",[41,108396,108398],{"className":170,"code":108397,"language":172,"meta":46,"style":46},"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",[48,108399,108400,108406,108410,108416,108422,108426,108430,108438,108443,108447,108451,108455,108460,108465,108469,108473,108477,108482,108486,108490,108494,108498,108502,108506,108518,108530,108538,108542,108552,108572,108582,108587,108592,108596,108613,108626,108631,108635,108639,108651],{"__ignoreMap":46},[51,108401,108402,108404],{"class":53,"line":54},[51,108403,179],{"class":69},[51,108405,32205],{"class":65},[51,108407,108408],{"class":53,"line":185},[51,108409,206],{"emptyLinePlaceholder":205},[51,108411,108412,108414],{"class":53,"line":202},[51,108413,179],{"class":69},[51,108415,101673],{"class":65},[51,108417,108418,108420],{"class":53,"line":209},[51,108419,179],{"class":69},[51,108421,107924],{"class":65},[51,108423,108424],{"class":53,"line":223},[51,108425,206],{"emptyLinePlaceholder":205},[51,108427,108428],{"class":53,"line":237},[51,108429,206],{"emptyLinePlaceholder":205},[51,108431,108432,108434,108436],{"class":53,"line":242},[51,108433,101686],{"class":278},[51,108435,13948],{"class":69},[51,108437,101691],{"class":61},[51,108439,108440],{"class":53,"line":257},[51,108441,108442],{"class":61},"\u003Cmujoco model=\"viewer_demo\">\n",[51,108444,108445],{"class":53,"line":262},[51,108446,101701],{"class":61},[51,108448,108449],{"class":53,"line":285},[51,108450,206],{"emptyLinePlaceholder":205},[51,108452,108453],{"class":53,"line":296},[51,108454,101710],{"class":61},[51,108456,108457],{"class":53,"line":307},[51,108458,108459],{"class":61},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[51,108461,108462],{"class":53,"line":324},[51,108463,108464],{"class":61},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[51,108466,108467],{"class":53,"line":329},[51,108468,206],{"emptyLinePlaceholder":205},[51,108470,108471],{"class":53,"line":334},[51,108472,101724],{"class":61},[51,108474,108475],{"class":53,"line":340},[51,108476,101729],{"class":61},[51,108478,108479],{"class":53,"line":345},[51,108480,108481],{"class":61},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[51,108483,108484],{"class":53,"line":357},[51,108485,101739],{"class":61},[51,108487,108488],{"class":53,"line":366},[51,108489,101744],{"class":61},[51,108491,108492],{"class":53,"line":383},[51,108493,101749],{"class":61},[51,108495,108496],{"class":53,"line":392},[51,108497,96070],{"class":61},[51,108499,108500],{"class":53,"line":403},[51,108501,206],{"emptyLinePlaceholder":205},[51,108503,108504],{"class":53,"line":409},[51,108505,206],{"emptyLinePlaceholder":205},[51,108507,108508,108510,108512,108514,108516],{"class":53,"line":414},[51,108509,348],{"class":69},[51,108511,2363],{"class":57},[51,108513,101770],{"class":65},[51,108515,96058],{"class":278},[51,108517,363],{"class":65},[51,108519,108520,108522,108524,108526,108528],{"class":53,"line":433},[51,108521,101779],{"class":65},[51,108523,70],{"class":69},[51,108525,101784],{"class":65},[51,108527,101686],{"class":278},[51,108529,282],{"class":65},[51,108531,108532,108534,108536],{"class":53,"line":439},[51,108533,101793],{"class":65},[51,108535,70],{"class":69},[51,108537,101798],{"class":65},[51,108539,108540],{"class":53,"line":444},[51,108541,206],{"emptyLinePlaceholder":205},[51,108543,108544,108546,108548,108550],{"class":53,"line":453},[51,108545,34553],{"class":69},[51,108547,108208],{"class":65},[51,108549,217],{"class":69},[51,108551,108213],{"class":65},[51,108553,108554,108557,108560,108562,108565,108567,108570],{"class":53,"line":2174},[51,108555,108556],{"class":69},"        while",[51,108558,108559],{"class":65}," viewer.is_running() ",[51,108561,30841],{"class":69},[51,108563,108564],{"class":65}," data.time ",[51,108566,1452],{"class":69},[51,108568,108569],{"class":278}," 5.0",[51,108571,363],{"class":65},[51,108573,108574,108577,108579],{"class":53,"line":2965},[51,108575,108576],{"class":65},"            step_start ",[51,108578,70],{"class":69},[51,108580,108581],{"class":65}," time.time()\n",[51,108583,108584],{"class":53,"line":2979},[51,108585,108586],{"class":65},"            mujoco.mj_step(model, data)\n",[51,108588,108589],{"class":53,"line":2987},[51,108590,108591],{"class":65},"            viewer.sync()\n",[51,108593,108594],{"class":53,"line":2992},[51,108595,206],{"emptyLinePlaceholder":205},[51,108597,108598,108601,108603,108605,108607,108609,108611],{"class":53,"line":2998},[51,108599,108600],{"class":65},"            sleep_time ",[51,108602,70],{"class":69},[51,108604,108332],{"class":65},[51,108606,1074],{"class":69},[51,108608,108337],{"class":65},[51,108610,1074],{"class":69},[51,108612,108342],{"class":65},[51,108614,108615,108617,108620,108622,108624],{"class":53,"line":3004},[51,108616,5027],{"class":69},[51,108618,108619],{"class":65}," sleep_time ",[51,108621,1502],{"class":69},[51,108623,4479],{"class":278},[51,108625,363],{"class":65},[51,108627,108628],{"class":53,"line":3009},[51,108629,108630],{"class":65},"                time.sleep(sleep_time)\n",[51,108632,108633],{"class":53,"line":8332},[51,108634,206],{"emptyLinePlaceholder":205},[51,108636,108637],{"class":53,"line":8356},[51,108638,206],{"emptyLinePlaceholder":205},[51,108640,108641,108643,108645,108647,108649],{"class":53,"line":8361},[51,108642,1940],{"class":69},[51,108644,31598],{"class":278},[51,108646,101931],{"class":69},[51,108648,101934],{"class":61},[51,108650,363],{"class":65},[51,108652,108653],{"class":53,"line":8367},[51,108654,101941],{"class":65},[10,108656,103942],{},[41,108658,108660],{"className":43,"code":108659,"language":45,"meta":46,"style":46},"touch ch5_viewer.py\n",[48,108661,108662],{"__ignoreMap":46},[51,108663,108664,108666],{"class":53,"line":54},[51,108665,101655],{"class":57},[51,108667,108668],{"class":61}," ch5_viewer.py\n",[10,108670,108671],{},"离屏 Renderer 保存图片:",[41,108673,108675],{"className":170,"code":108674,"language":172,"meta":46,"style":46},"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",[48,108676,108677,108689,108693,108699,108709,108713,108717,108725,108730,108734,108738,108742,108746,108751,108755,108759,108763,108767,108771,108775,108779,108783,108787,108791,108795,108807,108819,108827,108852,108856,108872,108876,108880,108895,108904,108908,108922,108927,108932,108936,108948,108960,108964,108968,108980],{"__ignoreMap":46},[51,108678,108679,108681,108684,108686],{"class":53,"line":54},[51,108680,226],{"class":69},[51,108682,108683],{"class":65}," pathlib ",[51,108685,179],{"class":69},[51,108687,108688],{"class":65}," Path\n",[51,108690,108691],{"class":53,"line":185},[51,108692,206],{"emptyLinePlaceholder":205},[51,108694,108695,108697],{"class":53,"line":202},[51,108696,179],{"class":69},[51,108698,101673],{"class":65},[51,108700,108701,108703,108705,108707],{"class":53,"line":209},[51,108702,226],{"class":69},[51,108704,47635],{"class":278},[51,108706,47638],{"class":69},[51,108708,47641],{"class":65},[51,108710,108711],{"class":53,"line":223},[51,108712,206],{"emptyLinePlaceholder":205},[51,108714,108715],{"class":53,"line":237},[51,108716,206],{"emptyLinePlaceholder":205},[51,108718,108719,108721,108723],{"class":53,"line":242},[51,108720,101686],{"class":278},[51,108722,13948],{"class":69},[51,108724,101691],{"class":61},[51,108726,108727],{"class":53,"line":257},[51,108728,108729],{"class":61},"\u003Cmujoco model=\"renderer_demo\">\n",[51,108731,108732],{"class":53,"line":262},[51,108733,101701],{"class":61},[51,108735,108736],{"class":53,"line":285},[51,108737,206],{"emptyLinePlaceholder":205},[51,108739,108740],{"class":53,"line":296},[51,108741,101710],{"class":61},[51,108743,108744],{"class":53,"line":307},[51,108745,108459],{"class":61},[51,108747,108748],{"class":53,"line":324},[51,108749,108750],{"class":61},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[51,108752,108753],{"class":53,"line":329},[51,108754,108464],{"class":61},[51,108756,108757],{"class":53,"line":334},[51,108758,206],{"emptyLinePlaceholder":205},[51,108760,108761],{"class":53,"line":340},[51,108762,101724],{"class":61},[51,108764,108765],{"class":53,"line":345},[51,108766,101729],{"class":61},[51,108768,108769],{"class":53,"line":357},[51,108770,108481],{"class":61},[51,108772,108773],{"class":53,"line":366},[51,108774,101739],{"class":61},[51,108776,108777],{"class":53,"line":383},[51,108778,101744],{"class":61},[51,108780,108781],{"class":53,"line":392},[51,108782,101749],{"class":61},[51,108784,108785],{"class":53,"line":403},[51,108786,96070],{"class":61},[51,108788,108789],{"class":53,"line":409},[51,108790,206],{"emptyLinePlaceholder":205},[51,108792,108793],{"class":53,"line":414},[51,108794,206],{"emptyLinePlaceholder":205},[51,108796,108797,108799,108801,108803,108805],{"class":53,"line":433},[51,108798,348],{"class":69},[51,108800,2363],{"class":57},[51,108802,101770],{"class":65},[51,108804,96058],{"class":278},[51,108806,363],{"class":65},[51,108808,108809,108811,108813,108815,108817],{"class":53,"line":439},[51,108810,101779],{"class":65},[51,108812,70],{"class":69},[51,108814,101784],{"class":65},[51,108816,101686],{"class":278},[51,108818,282],{"class":65},[51,108820,108821,108823,108825],{"class":53,"line":444},[51,108822,101793],{"class":65},[51,108824,70],{"class":69},[51,108826,101798],{"class":65},[51,108828,108829,108832,108834,108836,108838,108840,108842,108844,108846,108848,108850],{"class":53,"line":453},[51,108830,108831],{"class":65},"    renderer ",[51,108833,70],{"class":69},[51,108835,108246],{"class":65},[51,108837,25363],{"class":248},[51,108839,70],{"class":69},[51,108841,42716],{"class":278},[51,108843,12819],{"class":65},[51,108845,25359],{"class":248},[51,108847,70],{"class":69},[51,108849,108261],{"class":278},[51,108851,282],{"class":65},[51,108853,108854],{"class":53,"line":2174},[51,108855,206],{"emptyLinePlaceholder":205},[51,108857,108858,108860,108862,108864,108866,108868,108870],{"class":53,"line":2965},[51,108859,3588],{"class":69},[51,108861,101873],{"class":65},[51,108863,26425],{"class":69},[51,108865,32818],{"class":278},[51,108867,546],{"class":65},[51,108869,853],{"class":278},[51,108871,31164],{"class":65},[51,108873,108874],{"class":53,"line":2979},[51,108875,101888],{"class":65},[51,108877,108878],{"class":53,"line":2987},[51,108879,206],{"emptyLinePlaceholder":205},[51,108881,108882,108885,108888,108890,108893],{"class":53,"line":2992},[51,108883,108884],{"class":65},"    renderer.update_scene(data, ",[51,108886,108887],{"class":248},"camera",[51,108889,70],{"class":69},[51,108891,108892],{"class":61},"\"fixed_camera\"",[51,108894,282],{"class":65},[51,108896,108897,108900,108902],{"class":53,"line":2998},[51,108898,108899],{"class":65},"    image ",[51,108901,70],{"class":69},[51,108903,107957],{"class":65},[51,108905,108906],{"class":53,"line":3004},[51,108907,206],{"emptyLinePlaceholder":205},[51,108909,108910,108913,108915,108918,108920],{"class":53,"line":3009},[51,108911,108912],{"class":65},"    output_path ",[51,108914,70],{"class":69},[51,108916,108917],{"class":65}," Path(",[51,108919,108387],{"class":61},[51,108921,282],{"class":65},[51,108923,108924],{"class":53,"line":8332},[51,108925,108926],{"class":65},"    Image.fromarray(image).save(output_path)\n",[51,108928,108929],{"class":53,"line":8356},[51,108930,108931],{"class":65},"    renderer.close()\n",[51,108933,108934],{"class":53,"line":8361},[51,108935,206],{"emptyLinePlaceholder":205},[51,108937,108938,108940,108942,108945],{"class":53,"line":8367},[51,108939,31677],{"class":278},[51,108941,546],{"class":65},[51,108943,108944],{"class":61},"\"saved:\"",[51,108946,108947],{"class":65},", output_path.resolve())\n",[51,108949,108950,108952,108954,108957],{"class":53,"line":8394},[51,108951,31677],{"class":278},[51,108953,546],{"class":65},[51,108955,108956],{"class":61},"\"image shape:\"",[51,108958,108959],{"class":65},", image.shape)\n",[51,108961,108962],{"class":53,"line":8399},[51,108963,206],{"emptyLinePlaceholder":205},[51,108965,108966],{"class":53,"line":8405},[51,108967,206],{"emptyLinePlaceholder":205},[51,108969,108970,108972,108974,108976,108978],{"class":53,"line":8417},[51,108971,1940],{"class":69},[51,108973,31598],{"class":278},[51,108975,101931],{"class":69},[51,108977,101934],{"class":61},[51,108979,363],{"class":65},[51,108981,108982],{"class":53,"line":8429},[51,108983,101941],{"class":65},[10,108985,103942],{},[41,108987,108989],{"className":43,"code":108988,"language":45,"meta":46,"style":46},"touch ch5_renderer.py\n",[48,108990,108991],{"__ignoreMap":46},[51,108992,108993,108995],{"class":53,"line":54},[51,108994,101655],{"class":57},[51,108996,108997],{"class":61}," ch5_renderer.py\n",[513,108999,101944],{"id":101944},[10,109001,109002],{},"viewer 上下文：",[41,109004,109006],{"className":170,"code":109005,"language":172,"meta":46,"style":46},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[48,109007,109008],{"__ignoreMap":46},[51,109009,109010,109012,109014,109016],{"class":53,"line":54},[51,109011,108205],{"class":69},[51,109013,108208],{"class":65},[51,109015,217],{"class":69},[51,109017,108213],{"class":65},[10,109019,109020,109022],{},[48,109021,108205],{}," 语句会创建窗口，并在退出时自动清理资源。",[10,109024,109025],{},"窗口循环：",[41,109027,109029],{"className":170,"code":109028,"language":172,"meta":46,"style":46},"while viewer.is_running() and data.time \u003C 5.0:\n",[48,109030,109031],{"__ignoreMap":46},[51,109032,109033,109035,109037,109039,109041,109043,109045],{"class":53,"line":54},[51,109034,447],{"class":69},[51,109036,108559],{"class":65},[51,109038,30841],{"class":69},[51,109040,108564],{"class":65},[51,109042,1452],{"class":69},[51,109044,108569],{"class":278},[51,109046,363],{"class":65},[10,109048,109049],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[10,109051,109052],{},"固定相机：",[41,109054,109056],{"className":53439,"code":109055,"language":53441,"meta":46,"style":46},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[48,109057,109058],{"__ignoreMap":46},[51,109059,109060,109062,109064,109066,109068,109070,109072,109074,109077,109080,109082,109085],{"class":53,"line":54},[51,109061,1452],{"class":65},[51,109063,108887],{"class":51672},[51,109065,15304],{"class":57},[51,109067,70],{"class":65},[51,109069,108892],{"class":61},[51,109071,101478],{"class":57},[51,109073,70],{"class":65},[51,109075,109076],{"class":61},"\"1.5 -2.0 1.2\"",[51,109078,109079],{"class":57}," xyaxes",[51,109081,70],{"class":65},[51,109083,109084],{"class":61},"\"1 0.75 0 0 0 1\"",[51,109086,101516],{"class":65},[10,109088,109089],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[513,109091,109093],{"id":109092},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[41,109095,109097],{"className":170,"code":109096,"language":172,"meta":46,"style":46},"import time\n",[48,109098,109099],{"__ignoreMap":46},[51,109100,109101,109103],{"class":53,"line":54},[51,109102,179],{"class":69},[51,109104,32205],{"class":65},[10,109106,109107],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[41,109109,109111],{"className":170,"code":109110,"language":172,"meta":46,"style":46},"import mujoco\nimport mujoco.viewer\n",[48,109112,109113,109119],{"__ignoreMap":46},[51,109114,109115,109117],{"class":53,"line":54},[51,109116,179],{"class":69},[51,109118,101673],{"class":65},[51,109120,109121,109123],{"class":53,"line":185},[51,109122,179],{"class":69},[51,109124,107924],{"class":65},[10,109126,109127],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[41,109129,109130],{"className":170,"code":109005,"language":172,"meta":46,"style":46},[48,109131,109132],{"__ignoreMap":46},[51,109133,109134,109136,109138,109140],{"class":53,"line":54},[51,109135,108205],{"class":69},[51,109137,108208],{"class":65},[51,109139,217],{"class":69},[51,109141,108213],{"class":65},[10,109143,109144,109145,109148],{},"打开一个 viewer 窗口。",[48,109146,109147],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[41,109150,109151],{"className":170,"code":109028,"language":172,"meta":46,"style":46},[48,109152,109153],{"__ignoreMap":46},[51,109154,109155,109157,109159,109161,109163,109165,109167],{"class":53,"line":54},[51,109156,447],{"class":69},[51,109158,108559],{"class":65},[51,109160,30841],{"class":69},[51,109162,108564],{"class":65},[51,109164,1452],{"class":69},[51,109166,108569],{"class":278},[51,109168,363],{"class":65},[10,109170,109171,109172,109175],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[48,109173,109174],{},"viewer.is_running()"," 会变成 false，循环结束。",[41,109177,109179],{"className":170,"code":109178,"language":172,"meta":46,"style":46},"step_start = time.time()\n",[48,109180,109181],{"__ignoreMap":46},[51,109182,109183,109186,109188],{"class":53,"line":54},[51,109184,109185],{"class":65},"step_start ",[51,109187,70],{"class":69},[51,109189,108581],{"class":65},[10,109191,109192],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[41,109194,109195],{"className":170,"code":108290,"language":172,"meta":46,"style":46},[48,109196,109197,109201],{"__ignoreMap":46},[51,109198,109199],{"class":53,"line":54},[51,109200,104877],{"class":65},[51,109202,109203],{"class":53,"line":185},[51,109204,108301],{"class":65},[10,109206,109207,109209,109210,109212,109213,109215,109216,109219],{},[48,109208,101587],{}," 推进物理仿真。",[48,109211,108309],{}," 把最新的 ",[48,109214,33776],{}," 同步到窗口里显示。没有 ",[48,109217,109218],{},"sync()","，窗口可能看不到最新状态。",[41,109221,109222],{"className":170,"code":108320,"language":172,"meta":46,"style":46},[48,109223,109224],{"__ignoreMap":46},[51,109225,109226,109228,109230,109232,109234,109236,109238],{"class":53,"line":54},[51,109227,108327],{"class":65},[51,109229,70],{"class":69},[51,109231,108332],{"class":65},[51,109233,1074],{"class":69},[51,109235,108337],{"class":65},[51,109237,1074],{"class":69},[51,109239,108342],{"class":65},[10,109241,109242],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[41,109244,109246],{"className":170,"code":109245,"language":172,"meta":46,"style":46},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[48,109247,109248,109260],{"__ignoreMap":46},[51,109249,109250,109252,109254,109256,109258],{"class":53,"line":54},[51,109251,1940],{"class":69},[51,109253,108619],{"class":65},[51,109255,1502],{"class":69},[51,109257,4479],{"class":278},[51,109259,363],{"class":65},[51,109261,109262],{"class":53,"line":185},[51,109263,109264],{"class":65},"    time.sleep(sleep_time)\n",[10,109266,109267],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[513,109269,109271],{"id":109270},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[41,109273,109275],{"className":170,"code":109274,"language":172,"meta":46,"style":46},"from pathlib import Path\n",[48,109276,109277],{"__ignoreMap":46},[51,109278,109279,109281,109283,109285],{"class":53,"line":54},[51,109280,226],{"class":69},[51,109282,108683],{"class":65},[51,109284,179],{"class":69},[51,109286,108688],{"class":65},[10,109288,109289,109290,109293,109294,109297],{},"导入 ",[48,109291,109292],{},"Path","，用来处理文件路径。相比直接写字符串，",[48,109295,109296],{},"Path(\"render_output.png\")"," 更清晰。",[41,109299,109301],{"className":170,"code":109300,"language":172,"meta":46,"style":46},"from PIL import Image\n",[48,109302,109303],{"__ignoreMap":46},[51,109304,109305,109307,109309,109311],{"class":53,"line":54},[51,109306,226],{"class":69},[51,109308,47635],{"class":278},[51,109310,47638],{"class":69},[51,109312,47641],{"class":65},[10,109314,109315],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[41,109317,109318],{"className":53439,"code":109055,"language":53441,"meta":46,"style":46},[48,109319,109320],{"__ignoreMap":46},[51,109321,109322,109324,109326,109328,109330,109332,109334,109336,109338,109340,109342,109344],{"class":53,"line":54},[51,109323,1452],{"class":65},[51,109325,108887],{"class":51672},[51,109327,15304],{"class":57},[51,109329,70],{"class":65},[51,109331,108892],{"class":61},[51,109333,101478],{"class":57},[51,109335,70],{"class":65},[51,109337,109076],{"class":61},[51,109339,109079],{"class":57},[51,109341,70],{"class":65},[51,109343,109084],{"class":61},[51,109345,101516],{"class":65},[10,109347,109348,109349,109351,109352,109354,109355,109358,109359,109361],{},"定义一个相机。",[48,109350,80182],{}," 是相机名字。",[48,109353,104518],{}," 是相机在世界里的位置。",[48,109356,109357],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[48,109360,104518],{}," 来调视角。",[41,109363,109365],{"className":170,"code":109364,"language":172,"meta":46,"style":46},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[48,109366,109367],{"__ignoreMap":46},[51,109368,109369,109371,109373,109375,109377,109379,109381,109383,109385,109387,109389],{"class":53,"line":54},[51,109370,107942],{"class":65},[51,109372,70],{"class":69},[51,109374,108246],{"class":65},[51,109376,25363],{"class":248},[51,109378,70],{"class":69},[51,109380,42716],{"class":278},[51,109382,12819],{"class":65},[51,109384,25359],{"class":248},[51,109386,70],{"class":69},[51,109388,108261],{"class":278},[51,109390,282],{"class":65},[10,109392,109393,109394,101390,109396,109398],{},"创建离屏渲染器。",[48,109395,25363],{},[48,109397,25359],{}," 决定输出图片大小。",[41,109400,109401],{"className":170,"code":102048,"language":172,"meta":46,"style":46},[48,109402,109403,109419],{"__ignoreMap":46},[51,109404,109405,109407,109409,109411,109413,109415,109417],{"class":53,"line":54},[51,109406,3412],{"class":69},[51,109408,101873],{"class":65},[51,109410,26425],{"class":69},[51,109412,32818],{"class":278},[51,109414,546],{"class":65},[51,109416,853],{"class":278},[51,109418,31164],{"class":65},[51,109420,109421],{"class":53,"line":185},[51,109422,102071],{"class":65},[10,109424,109425],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[41,109427,109429],{"className":170,"code":109428,"language":172,"meta":46,"style":46},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[48,109430,109431],{"__ignoreMap":46},[51,109432,109433,109436,109438,109440,109442],{"class":53,"line":54},[51,109434,109435],{"class":65},"renderer.update_scene(data, ",[51,109437,108887],{"class":248},[51,109439,70],{"class":69},[51,109441,108892],{"class":61},[51,109443,282],{"class":65},[10,109445,109446,109447,109449,109450,109453],{},"告诉 renderer：用当前 ",[48,109448,33776],{}," 的状态更新画面，并使用名为 ",[48,109451,109452],{},"fixed_camera"," 的相机视角。",[41,109455,109456],{"className":170,"code":108352,"language":172,"meta":46,"style":46},[48,109457,109458],{"__ignoreMap":46},[51,109459,109460,109462,109464],{"class":53,"line":54},[51,109461,107952],{"class":65},[51,109463,70],{"class":69},[51,109465,107957],{"class":65},[10,109467,109468,109469,109472],{},"真正渲染出图像。",[48,109470,109471],{},"image"," 是一个 NumPy 数组，不是文件。",[41,109474,109476],{"className":170,"code":109475,"language":172,"meta":46,"style":46},"Image.fromarray(image).save(output_path)\n",[48,109477,109478],{"__ignoreMap":46},[51,109479,109480],{"class":53,"line":54},[51,109481,109475],{"class":65},[10,109483,109484,109485,28767],{},"把数组转换成图片，并保存到 ",[48,109486,109487],{},"render_output.png",[41,109489,109491],{"className":170,"code":109490,"language":172,"meta":46,"style":46},"renderer.close()\n",[48,109492,109493],{"__ignoreMap":46},[51,109494,109495],{"class":53,"line":54},[51,109496,109490],{"class":65},[10,109498,109499],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[486,109501,102688],{"id":102687},[10,109503,109504,109505,109507,109508,28767],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[48,109506,109487],{},"，并输出图像数组形状，例如 ",[48,109509,109510],{},"(480, 640, 3)",[10,109512,109513],{},"如果图片里看不到方块，先检查：",[19,109515,109516,109519,109522],{},[22,109517,109518],{},"方块是否掉到相机视野外。",[22,109520,109521],{},"camera 位置是否合理。",[22,109523,109524,109525,109528],{},"是否在 ",[48,109526,109527],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[486,109530,102720],{"id":102719},[10,109532,109533],{},"运行 viewer:",[41,109535,109537],{"className":43,"code":109536,"language":45,"meta":46,"style":46},"python ch5_viewer.py\n",[48,109538,109539],{"__ignoreMap":46},[51,109540,109541,109543],{"class":53,"line":54},[51,109542,172],{"class":57},[51,109544,108668],{"class":61},[10,109546,109547],{},"运行 renderer:",[41,109549,109551],{"className":43,"code":109550,"language":45,"meta":46,"style":46},"python ch5_renderer.py\n",[48,109552,109553],{"__ignoreMap":46},[51,109554,109555,109557],{"class":53,"line":54},[51,109556,172],{"class":57},[51,109558,108997],{"class":61},[10,109560,109561],{},"如果在服务器上运行:",[41,109563,109565],{"className":43,"code":109564,"language":45,"meta":46,"style":46},"MUJOCO_GL=egl python ch5_renderer.py\n",[48,109566,109567],{"__ignoreMap":46},[51,109568,109569,109571,109573,109575,109578],{"class":53,"line":54},[51,109570,108186],{"class":65},[51,109572,70],{"class":69},[51,109574,108176],{"class":61},[51,109576,109577],{"class":57}," python",[51,109579,108997],{"class":61},[10,109581,108154],{},[41,109583,109585],{"className":43,"code":109584,"language":45,"meta":46,"style":46},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[48,109586,109587],{"__ignoreMap":46},[51,109588,109589,109591,109593,109595,109597],{"class":53,"line":54},[51,109590,108186],{"class":65},[51,109592,70],{"class":69},[51,109594,108180],{"class":61},[51,109596,109577],{"class":57},[51,109598,108997],{"class":61},[10,109600,109601],{},"再做几个练习：",[19,109603,109604,109611,109614,109620],{},[22,109605,109606,109607,109610],{},"把 renderer 分辨率改成 ",[48,109608,109609],{},"height=240, width=320","，观察输出 shape。",[22,109612,109613],{},"把方块颜色改成蓝色，重新保存图片。",[22,109615,109616,109617,109619],{},"把相机 ",[48,109618,104518],{}," 改远一点，观察画面中物体是否变小。",[22,109621,109622,109623,102786,109626,109629],{},"把 viewer 示例中的 ",[48,109624,109625],{},"data.time \u003C 5.0",[48,109627,109628],{},"data.time \u003C 20.0","，观察更长时间。",[486,109631,102825],{"id":102824},[513,109633,109635],{"id":109634},"viewer-窗口打不开","viewer 窗口打不开",[10,109637,109638],{},"安装:",[41,109640,109642],{"className":43,"code":109641,"language":45,"meta":46,"style":46},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[48,109643,109644],{"__ignoreMap":46},[51,109645,109646,109648,109650,109652,109654,109656,109658,109660,109662,109664,109666],{"class":53,"line":54},[51,109647,24958],{"class":57},[51,109649,26697],{"class":61},[51,109651,24215],{"class":61},[51,109653,26782],{"class":278},[51,109655,102878],{"class":61},[51,109657,101206],{"class":61},[51,109659,102883],{"class":61},[51,109661,101219],{"class":61},[51,109663,101225],{"class":61},[51,109665,101216],{"class":61},[51,109667,109668],{"class":61}," libXinerama\n",[513,109670,109672],{"id":109671},"glfwerror",[48,109673,109674],{},"GLFWError",[10,109676,109677],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[513,109679,109681],{"id":109680},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[10,109683,109684,109685,82911,109687,109689],{},"尝试 ",[48,109686,101409],{},[48,109688,101412],{},"。可能存在版本差异。",[513,109691,109692],{"id":109692},"保存图片是黑的",[10,109694,102947],{},[19,109696,109697,109700,109703,109713],{},[22,109698,109699],{},"XML 里是否有 light。",[22,109701,109702],{},"相机是否对着模型。",[22,109704,109705,109706,109709,109710,28767],{},"是否先 ",[48,109707,109708],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[48,109711,109712],{},"renderer.render()",[22,109714,109715],{},"物体是否已经掉出视野。",[513,109717,109718],{"id":109718},"远程服务器没有显示器",[10,109720,109721],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[41,109723,109724],{"className":43,"code":109564,"language":45,"meta":46,"style":46},[48,109725,109726],{"__ignoreMap":46},[51,109727,109728,109730,109732,109734,109736],{"class":53,"line":54},[51,109729,108186],{"class":65},[51,109731,70],{"class":69},[51,109733,108176],{"class":61},[51,109735,109577],{"class":57},[51,109737,108997],{"class":61},[10,109739,109740],{},"如果 EGL 不可用，再尝试：",[41,109742,109743],{"className":43,"code":109584,"language":45,"meta":46,"style":46},[48,109744,109745],{"__ignoreMap":46},[51,109746,109747,109749,109751,109753,109755],{"class":53,"line":54},[51,109748,108186],{"class":65},[51,109750,70],{"class":69},[51,109752,108180],{"class":61},[51,109754,109577],{"class":57},[51,109756,108997],{"class":61},[486,109758,102979],{"id":102978},[10,109760,109761],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[19,109763,109764,109767,109770],{},[22,109765,109766],{},"先用 viewer 看模型和控制是否正常。",[22,109768,109769],{},"再用 renderer 保存图片或构造视觉观测。",[22,109771,109772],{},"最后把状态、动作、图像、奖励组织成训练数据。",[464,109774,109775],{},"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":46,"searchDepth":185,"depth":185,"links":109777},[109778,109779,109780,109785,109790,109791,109792,109799],{"id":101018,"depth":185,"text":101019},{"id":101141,"depth":185,"text":101142},{"id":101416,"depth":185,"text":101417,"children":109781},[109782,109783,109784],{"id":108283,"depth":202,"text":108284},{"id":108313,"depth":202,"text":108314},{"id":108348,"depth":202,"text":108349},{"id":101624,"depth":185,"text":101625,"children":109786},[109787,109788,109789],{"id":101944,"depth":202,"text":101944},{"id":109092,"depth":202,"text":109093},{"id":109270,"depth":202,"text":109271},{"id":102687,"depth":185,"text":102688},{"id":102719,"depth":185,"text":102720},{"id":102824,"depth":185,"text":102825,"children":109793},[109794,109795,109796,109797,109798],{"id":109634,"depth":202,"text":109635},{"id":109671,"depth":202,"text":109674},{"id":109680,"depth":202,"text":109681},{"id":109692,"depth":202,"text":109692},{"id":109718,"depth":202,"text":109718},{"id":102978,"depth":185,"text":102979},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107891,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109806,"title":109807,"body":109808,"description":46,"extension":469,"meta":111719,"navigation":205,"path":111720,"seo":111721,"stem":111722,"__hash__":111723},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109809,"toc":111695},[109810,109813,109815,109818,109820,109839,109842,109848,109851,109853,109855,109879,109881,109895,109897,109938,109940,109951,109953,109956,109962,109965,109999,110002,110034,110037,110069,110073,110076,110116,110119,110125,110128,110134,110138,110141,110147,110150,110154,110157,110197,110199,110212,110215,110217,110799,110801,110813,110816,110827,110829,110832,110851,110863,110866,110887,110890,110893,110936,110939,110942,110962,110969,110971,110989,111004,111007,111013,111016,111022,111039,111046,111077,111088,111122,111133,111150,111159,111167,111172,111186,111189,111210,111216,111230,111235,111265,111275,111300,111308,111331,111334,111350,111353,111361,111367,111389,111402,111423,111432,111471,111482,111484,111487,111493,111496,111499,111505,111508,111528,111531,111533,111572,111574,111577,111585,111588,111591,111618,111621,111631,111637,111640,111646,111648,111654,111658,111661,111663,111666,111690,111693],[14,109811,109807],{"id":109812},"_6控制任务cartpole",[486,109814,101019],{"id":101018},[10,109816,109817],{},"本章搭建一个最小 Cartpole 控制任务。",[10,109819,104703],{},[19,109821,109822,109825,109827,109830,109833,109836],{},[22,109823,109824],{},"slide joint",[22,109826,106556],{},[22,109828,109829],{},"cart force actuator",[22,109831,109832],{},"状态观测",[22,109834,109835],{},"简单控制循环",[22,109837,109838],{},"reward 设计雏形",[10,109840,109841],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[41,109843,109846],{"className":109844,"code":109845,"language":5572,"meta":46},[5570],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[48,109847,109845],{"__ignoreMap":46},[10,109849,109850],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[486,109852,101142],{"id":101141},[10,109854,101145],{},[41,109856,109857],{"className":43,"code":104760,"language":45,"meta":46,"style":46},[48,109858,109859],{"__ignoreMap":46},[51,109860,109861,109863,109865,109867,109869,109871,109873,109875,109877],{"class":53,"line":54},[51,109862,24958],{"class":57},[51,109864,26697],{"class":61},[51,109866,24215],{"class":61},[51,109868,26782],{"class":278},[51,109870,104775],{"class":61},[51,109872,101170],{"class":61},[51,109874,102873],{"class":61},[51,109876,101186],{"class":61},[51,109878,104784],{"class":61},[10,109880,103191],{},[41,109882,109883],{"className":43,"code":101291,"language":45,"meta":46,"style":46},[48,109884,109885],{"__ignoreMap":46},[51,109886,109887,109889,109891,109893],{"class":53,"line":54},[51,109888,24212],{"class":57},[51,109890,24215],{"class":61},[51,109892,101302],{"class":61},[51,109894,101305],{"class":61},[10,109896,103208],{},[41,109898,109900],{"className":43,"code":109899,"language":45,"meta":46,"style":46},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[48,109901,109902,109919,109928],{"__ignoreMap":46},[51,109903,109904,109906,109908,109910,109913,109915,109917],{"class":53,"line":54},[51,109905,30712],{"class":57},[51,109907,29558],{"class":61},[51,109909,25497],{"class":278},[51,109911,109912],{"class":61}," mujoco-cartpole",[51,109914,101347],{"class":61},[51,109916,101350],{"class":278},[51,109918,101353],{"class":278},[51,109920,109921,109923,109925],{"class":53,"line":185},[51,109922,30712],{"class":57},[51,109924,101360],{"class":61},[51,109926,109927],{"class":61}," mujoco-cartpole\n",[51,109929,109930,109932,109934,109936],{"class":53,"line":202},[51,109931,24212],{"class":57},[51,109933,24215],{"class":61},[51,109935,101302],{"class":61},[51,109937,101305],{"class":61},[10,109939,101376],{},[19,109941,109942,109945,109948],{},[22,109943,109944],{},"本章不依赖 Gymnasium。",[22,109946,109947],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[22,109949,109950],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[486,109952,101417],{"id":101416},[10,109954,109955],{},"Cartpole 的模型结构:",[41,109957,109960],{"className":109958,"code":109959,"language":5572,"meta":46},[5570],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[48,109961,109959],{"__ignoreMap":46},[10,109963,109964],{},"小车通过 slide joint 左右移动:",[41,109966,109968],{"className":53439,"code":109967,"language":53441,"meta":46,"style":46},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[48,109969,109970],{"__ignoreMap":46},[51,109971,109972,109974,109976,109978,109980,109983,109985,109987,109990,109992,109994,109997],{"class":53,"line":54},[51,109973,1452],{"class":65},[51,109975,103328],{"class":51672},[51,109977,15304],{"class":57},[51,109979,70],{"class":65},[51,109981,109982],{"class":61},"\"cart_x\"",[51,109984,54196],{"class":57},[51,109986,70],{"class":65},[51,109988,109989],{"class":61},"\"slide\"",[51,109991,106400],{"class":57},[51,109993,70],{"class":65},[51,109995,109996],{"class":61},"\"1 0 0\"",[51,109998,101516],{"class":65},[10,110000,110001],{},"杆子通过 hinge joint 旋转:",[41,110003,110005],{"className":53439,"code":110004,"language":53441,"meta":46,"style":46},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[48,110006,110007],{"__ignoreMap":46},[51,110008,110009,110011,110013,110015,110017,110020,110022,110024,110026,110028,110030,110032],{"class":53,"line":54},[51,110010,1452],{"class":65},[51,110012,103328],{"class":51672},[51,110014,15304],{"class":57},[51,110016,70],{"class":65},[51,110018,110019],{"class":61},"\"pole_hinge\"",[51,110021,54196],{"class":57},[51,110023,70],{"class":65},[51,110025,106391],{"class":61},[51,110027,106400],{"class":57},[51,110029,70],{"class":65},[51,110031,106405],{"class":61},[51,110033,101516],{"class":65},[10,110035,110036],{},"控制力作用在小车 slide joint 上:",[41,110038,110040],{"className":53439,"code":110039,"language":53441,"meta":46,"style":46},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[48,110041,110042],{"__ignoreMap":46},[51,110043,110044,110046,110048,110050,110052,110055,110057,110059,110061,110063,110065,110067],{"class":53,"line":54},[51,110045,1452],{"class":65},[51,110047,106446],{"class":51672},[51,110049,15304],{"class":57},[51,110051,70],{"class":65},[51,110053,110054],{"class":61},"\"cart_motor\"",[51,110056,106456],{"class":57},[51,110058,70],{"class":65},[51,110060,109982],{"class":61},[51,110062,106463],{"class":57},[51,110064,70],{"class":65},[51,110066,54688],{"class":61},[51,110068,101516],{"class":65},[513,110070,110072],{"id":110071},"cartpole-的状态是什么","Cartpole 的状态是什么",[10,110074,110075],{},"这个简化模型有两个关节：",[679,110077,110078,110089],{},[682,110079,110080],{},[685,110081,110082,110084,110086],{},[688,110083,103131],{"align":24119},[688,110085,24120],{"align":24119},[688,110087,110088],{"align":24119},"对应状态",[726,110090,110091,110104],{},[685,110092,110093,110098,110101],{},[731,110094,110095],{"align":24119},[48,110096,110097],{},"cart_x",[731,110099,110100],{"align":24119},"slide",[731,110102,110103],{"align":24119},"小车 x 位置",[685,110105,110106,110111,110113],{},[731,110107,110108],{"align":24119},[48,110109,110110],{},"pole_hinge",[731,110112,106212],{"align":24119},[731,110114,110115],{"align":24119},"杆子角度",[10,110117,110118],{},"所以：",[41,110120,110123],{"className":110121,"code":110122,"language":5572,"meta":46},[5570],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[48,110124,110122],{"__ignoreMap":46},[10,110126,110127],{},"把它们拼起来就是观测：",[41,110129,110132],{"className":110130,"code":110131,"language":5572,"meta":46},[5570],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[48,110133,110131],{"__ignoreMap":46},[513,110135,110137],{"id":110136},"action-是什么","action 是什么",[10,110139,110140],{},"本章只有一个 actuator：",[41,110142,110145],{"className":110143,"code":110144,"language":5572,"meta":46},[5570],"data.ctrl[0] = action\n",[48,110146,110144],{"__ignoreMap":46},[10,110148,110149],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[513,110151,110153],{"id":110152},"reward-是什么","reward 是什么",[10,110155,110156],{},"奖励函数：",[41,110158,110160],{"className":170,"code":110159,"language":172,"meta":46,"style":46},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[48,110161,110162],{"__ignoreMap":46},[51,110163,110164,110166,110169,110171,110173,110175,110178,110180,110183,110185,110187,110189,110192,110194],{"class":53,"line":54},[51,110165,17429],{"class":69},[51,110167,110168],{"class":278}," float",[51,110170,546],{"class":65},[51,110172,102775],{"class":278},[51,110174,52643],{"class":69},[51,110176,110177],{"class":278}," 0.1",[51,110179,6902],{"class":69},[51,110181,110182],{"class":65}," cart_x ",[51,110184,997],{"class":69},[51,110186,110182],{"class":65},[51,110188,1074],{"class":69},[51,110190,110191],{"class":65}," pole_angle ",[51,110193,997],{"class":69},[51,110195,110196],{"class":65}," pole_angle)\n",[10,110198,106598],{},[19,110200,110201,110206,110209],{},[22,110202,110203,110204,28767],{},"基础奖励是 ",[48,110205,102775],{},[22,110207,110208],{},"小车离中心越远，扣分越多。",[22,110210,110211],{},"杆子角度越大，扣分越多。",[10,110213,110214],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[486,110216,101625],{"id":101624},[41,110218,110220],{"className":170,"code":110219,"language":172,"meta":46,"style":46},"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",[48,110221,110222,110228,110238,110242,110246,110254,110259,110263,110267,110271,110276,110280,110285,110290,110295,110299,110304,110309,110314,110318,110322,110326,110330,110334,110339,110343,110347,110351,110355,110359,110369,110376,110380,110384,110398,110412,110425,110455,110459,110463,110475,110487,110495,110499,110512,110516,110520,110529,110533,110549,110559,110572,110585,110589,110612,110630,110634,110646,110650,110654,110664,110674,110678,110694,110735,110739,110759,110775,110779,110783,110795],{"__ignoreMap":46},[51,110223,110224,110226],{"class":53,"line":54},[51,110225,179],{"class":69},[51,110227,101673],{"class":65},[51,110229,110230,110232,110234,110236],{"class":53,"line":185},[51,110231,179],{"class":69},[51,110233,31758],{"class":65},[51,110235,217],{"class":69},[51,110237,31763],{"class":65},[51,110239,110240],{"class":53,"line":202},[51,110241,206],{"emptyLinePlaceholder":205},[51,110243,110244],{"class":53,"line":209},[51,110245,206],{"emptyLinePlaceholder":205},[51,110247,110248,110250,110252],{"class":53,"line":223},[51,110249,101686],{"class":278},[51,110251,13948],{"class":69},[51,110253,101691],{"class":61},[51,110255,110256],{"class":53,"line":237},[51,110257,110258],{"class":61},"\u003Cmujoco model=\"cartpole\">\n",[51,110260,110261],{"class":53,"line":242},[51,110262,101701],{"class":61},[51,110264,110265],{"class":53,"line":257},[51,110266,206],{"emptyLinePlaceholder":205},[51,110268,110269],{"class":53,"line":262},[51,110270,101710],{"class":61},[51,110272,110273],{"class":53,"line":285},[51,110274,110275],{"class":61},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[51,110277,110278],{"class":53,"line":296},[51,110279,206],{"emptyLinePlaceholder":205},[51,110281,110282],{"class":53,"line":307},[51,110283,110284],{"class":61},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[51,110286,110287],{"class":53,"line":324},[51,110288,110289],{"class":61},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[51,110291,110292],{"class":53,"line":329},[51,110293,110294],{"class":61},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[51,110296,110297],{"class":53,"line":334},[51,110298,206],{"emptyLinePlaceholder":205},[51,110300,110301],{"class":53,"line":340},[51,110302,110303],{"class":61},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[51,110305,110306],{"class":53,"line":345},[51,110307,110308],{"class":61},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[51,110310,110311],{"class":53,"line":357},[51,110312,110313],{"class":61},"        \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",[51,110315,110316],{"class":53,"line":366},[51,110317,106810],{"class":61},[51,110319,110320],{"class":53,"line":383},[51,110321,101739],{"class":61},[51,110323,110324],{"class":53,"line":392},[51,110325,101744],{"class":61},[51,110327,110328],{"class":53,"line":403},[51,110329,206],{"emptyLinePlaceholder":205},[51,110331,110332],{"class":53,"line":409},[51,110333,106827],{"class":61},[51,110335,110336],{"class":53,"line":414},[51,110337,110338],{"class":61},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[51,110340,110341],{"class":53,"line":433},[51,110342,106837],{"class":61},[51,110344,110345],{"class":53,"line":439},[51,110346,101749],{"class":61},[51,110348,110349],{"class":53,"line":444},[51,110350,96070],{"class":61},[51,110352,110353],{"class":53,"line":453},[51,110354,206],{"emptyLinePlaceholder":205},[51,110356,110357],{"class":53,"line":2174},[51,110358,206],{"emptyLinePlaceholder":205},[51,110360,110361,110363,110366],{"class":53,"line":2965},[51,110362,348],{"class":69},[51,110364,110365],{"class":57}," get_observation",[51,110367,110368],{"class":65},"(data: mujoco.MjData) -> np.ndarray:\n",[51,110370,110371,110373],{"class":53,"line":2979},[51,110372,4476],{"class":69},[51,110374,110375],{"class":65}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[51,110377,110378],{"class":53,"line":2987},[51,110379,206],{"emptyLinePlaceholder":205},[51,110381,110382],{"class":53,"line":2992},[51,110383,206],{"emptyLinePlaceholder":205},[51,110385,110386,110388,110391,110394,110396],{"class":53,"line":2998},[51,110387,348],{"class":69},[51,110389,110390],{"class":57}," compute_reward",[51,110392,110393],{"class":65},"(obs: np.ndarray) -> ",[51,110395,584],{"class":278},[51,110397,363],{"class":65},[51,110399,110400,110403,110405,110408,110410],{"class":53,"line":3004},[51,110401,110402],{"class":65},"    cart_x ",[51,110404,70],{"class":69},[51,110406,110407],{"class":65}," obs[",[51,110409,733],{"class":278},[51,110411,33621],{"class":65},[51,110413,110414,110417,110419,110421,110423],{"class":53,"line":3009},[51,110415,110416],{"class":65},"    pole_angle ",[51,110418,70],{"class":69},[51,110420,110407],{"class":65},[51,110422,759],{"class":278},[51,110424,33621],{"class":65},[51,110426,110427,110429,110431,110433,110435,110437,110439,110441,110443,110445,110447,110449,110451,110453],{"class":53,"line":8332},[51,110428,4476],{"class":69},[51,110430,110168],{"class":278},[51,110432,546],{"class":65},[51,110434,102775],{"class":278},[51,110436,52643],{"class":69},[51,110438,110177],{"class":278},[51,110440,6902],{"class":69},[51,110442,110182],{"class":65},[51,110444,997],{"class":69},[51,110446,110182],{"class":65},[51,110448,1074],{"class":69},[51,110450,110191],{"class":65},[51,110452,997],{"class":69},[51,110454,110196],{"class":65},[51,110456,110457],{"class":53,"line":8356},[51,110458,206],{"emptyLinePlaceholder":205},[51,110460,110461],{"class":53,"line":8361},[51,110462,206],{"emptyLinePlaceholder":205},[51,110464,110465,110467,110469,110471,110473],{"class":53,"line":8367},[51,110466,348],{"class":69},[51,110468,2363],{"class":57},[51,110470,101770],{"class":65},[51,110472,96058],{"class":278},[51,110474,363],{"class":65},[51,110476,110477,110479,110481,110483,110485],{"class":53,"line":8394},[51,110478,101779],{"class":65},[51,110480,70],{"class":69},[51,110482,101784],{"class":65},[51,110484,101686],{"class":278},[51,110486,282],{"class":65},[51,110488,110489,110491,110493],{"class":53,"line":8399},[51,110490,101793],{"class":65},[51,110492,70],{"class":69},[51,110494,101798],{"class":65},[51,110496,110497],{"class":53,"line":8405},[51,110498,206],{"emptyLinePlaceholder":205},[51,110500,110501,110503,110505,110507,110509],{"class":53,"line":8417},[51,110502,105441],{"class":65},[51,110504,759],{"class":278},[51,110506,194],{"class":65},[51,110508,70],{"class":69},[51,110510,110511],{"class":278}," 0.1\n",[51,110513,110514],{"class":53,"line":8429},[51,110515,105454],{"class":65},[51,110517,110518],{"class":53,"line":8441},[51,110519,206],{"emptyLinePlaceholder":205},[51,110521,110522,110525,110527],{"class":53,"line":10100},[51,110523,110524],{"class":65},"    total_reward ",[51,110526,70],{"class":69},[51,110528,105133],{"class":278},[51,110530,110531],{"class":53,"line":10125},[51,110532,206],{"emptyLinePlaceholder":205},[51,110534,110535,110537,110539,110541,110543,110545,110547],{"class":53,"line":10148},[51,110536,3588],{"class":69},[51,110538,31992],{"class":65},[51,110540,26425],{"class":69},[51,110542,32818],{"class":278},[51,110544,546],{"class":65},[51,110546,6794],{"class":278},[51,110548,31164],{"class":65},[51,110550,110551,110554,110556],{"class":53,"line":10172},[51,110552,110553],{"class":65},"        obs ",[51,110555,70],{"class":69},[51,110557,110558],{"class":65}," get_observation(data)\n",[51,110560,110561,110564,110566,110568,110570],{"class":53,"line":10177},[51,110562,110563],{"class":65},"        pole_angle ",[51,110565,70],{"class":69},[51,110567,110407],{"class":65},[51,110569,759],{"class":278},[51,110571,33621],{"class":65},[51,110573,110574,110577,110579,110581,110583],{"class":53,"line":10182},[51,110575,110576],{"class":65},"        pole_angular_velocity ",[51,110578,70],{"class":69},[51,110580,110407],{"class":65},[51,110582,614],{"class":278},[51,110584,33621],{"class":65},[51,110586,110587],{"class":53,"line":10187},[51,110588,206],{"emptyLinePlaceholder":205},[51,110590,110591,110594,110596,110599,110601,110603,110605,110607,110609],{"class":53,"line":10196},[51,110592,110593],{"class":65},"        action ",[51,110595,70],{"class":69},[51,110597,110598],{"class":278}," 2.0",[51,110600,6902],{"class":69},[51,110602,110191],{"class":65},[51,110604,1023],{"class":69},[51,110606,62239],{"class":278},[51,110608,6902],{"class":69},[51,110610,110611],{"class":65}," pole_angular_velocity\n",[51,110613,110614,110616,110618,110620,110622,110624,110626,110628],{"class":53,"line":10201},[51,110615,110593],{"class":65},[51,110617,70],{"class":69},[51,110619,107819],{"class":65},[51,110621,1074],{"class":69},[51,110623,102775],{"class":278},[51,110625,12819],{"class":65},[51,110627,102775],{"class":278},[51,110629,282],{"class":65},[51,110631,110632],{"class":53,"line":10207},[51,110633,206],{"emptyLinePlaceholder":205},[51,110635,110636,110638,110640,110642,110644],{"class":53,"line":10228},[51,110637,106989],{"class":65},[51,110639,733],{"class":278},[51,110641,194],{"class":65},[51,110643,70],{"class":69},[51,110645,107842],{"class":65},[51,110647,110648],{"class":53,"line":10234},[51,110649,101888],{"class":65},[51,110651,110652],{"class":53,"line":10248},[51,110653,206],{"emptyLinePlaceholder":205},[51,110655,110656,110659,110661],{"class":53,"line":10254},[51,110657,110658],{"class":65},"        reward ",[51,110660,70],{"class":69},[51,110662,110663],{"class":65}," compute_reward(get_observation(data))\n",[51,110665,110666,110669,110671],{"class":53,"line":10281},[51,110667,110668],{"class":65},"        total_reward ",[51,110670,9861],{"class":69},[51,110672,110673],{"class":65}," reward\n",[51,110675,110676],{"class":53,"line":10290},[51,110677,206],{"emptyLinePlaceholder":205},[51,110679,110680,110682,110684,110686,110688,110690,110692],{"class":53,"line":10296},[51,110681,369],{"class":69},[51,110683,31992],{"class":65},[51,110685,870],{"class":69},[51,110687,6138],{"class":278},[51,110689,101931],{"class":69},[51,110691,4479],{"class":278},[51,110693,363],{"class":65},[51,110695,110696,110698,110700,110703,110706,110709,110712,110714,110717,110720,110722,110724,110726,110728,110731,110733],{"class":53,"line":10304},[51,110697,35025],{"class":278},[51,110699,546],{"class":65},[51,110701,110702],{"class":61},"\"step:\"",[51,110704,110705],{"class":65},", step, ",[51,110707,110708],{"class":61},"\"obs:\"",[51,110710,110711],{"class":65},", np.round(obs, ",[51,110713,614],{"class":278},[51,110715,110716],{"class":65},"), ",[51,110718,110719],{"class":61},"\"action:\"",[51,110721,12819],{"class":65},[51,110723,32393],{"class":278},[51,110725,546],{"class":65},[51,110727,584],{"class":278},[51,110729,110730],{"class":65},"(action), ",[51,110732,614],{"class":278},[51,110734,30876],{"class":65},[51,110736,110737],{"class":53,"line":10309},[51,110738,206],{"emptyLinePlaceholder":205},[51,110740,110741,110743,110745,110748,110750,110752,110755,110757],{"class":53,"line":16987},[51,110742,31677],{"class":278},[51,110744,546],{"class":65},[51,110746,110747],{"class":61},"\"total_reward:\"",[51,110749,12819],{"class":65},[51,110751,32393],{"class":278},[51,110753,110754],{"class":65},"(total_reward, ",[51,110756,614],{"class":278},[51,110758,30876],{"class":65},[51,110760,110761,110763,110765,110768,110771,110773],{"class":53,"line":16993},[51,110762,31677],{"class":278},[51,110764,546],{"class":65},[51,110766,110767],{"class":61},"\"final obs:\"",[51,110769,110770],{"class":65},", np.round(get_observation(data), ",[51,110772,614],{"class":278},[51,110774,30876],{"class":65},[51,110776,110777],{"class":53,"line":17016},[51,110778,206],{"emptyLinePlaceholder":205},[51,110780,110781],{"class":53,"line":17022},[51,110782,206],{"emptyLinePlaceholder":205},[51,110784,110785,110787,110789,110791,110793],{"class":53,"line":17045},[51,110786,1940],{"class":69},[51,110788,31598],{"class":278},[51,110790,101931],{"class":69},[51,110792,101934],{"class":61},[51,110794,363],{"class":65},[51,110796,110797],{"class":53,"line":17059},[51,110798,101941],{"class":65},[10,110800,103942],{},[41,110802,110804],{"className":43,"code":110803,"language":45,"meta":46,"style":46},"touch ch6_cartpole.py\n",[48,110805,110806],{"__ignoreMap":46},[51,110807,110808,110810],{"class":53,"line":54},[51,110809,101655],{"class":57},[51,110811,110812],{"class":61}," ch6_cartpole.py\n",[10,110814,110815],{},"运行：",[41,110817,110819],{"className":43,"code":110818,"language":45,"meta":46,"style":46},"python ch6_cartpole.py\n",[48,110820,110821],{"__ignoreMap":46},[51,110822,110823,110825],{"class":53,"line":54},[51,110824,172],{"class":57},[51,110826,110812],{"class":61},[513,110828,101944],{"id":101944},[10,110830,110831],{},"构造观测：",[41,110833,110835],{"className":170,"code":110834,"language":172,"meta":46,"style":46},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[48,110836,110837,110845],{"__ignoreMap":46},[51,110838,110839,110841,110843],{"class":53,"line":54},[51,110840,348],{"class":69},[51,110842,110365],{"class":57},[51,110844,110368],{"class":65},[51,110846,110847,110849],{"class":53,"line":185},[51,110848,4476],{"class":69},[51,110850,110375],{"class":65},[10,110852,110853,110856,110857,110859,110860,110862],{},[48,110854,110855],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[48,110858,104402],{}," 2 维，",[48,110861,104732],{}," 2 维，所以 obs 是 4 维。",[10,110864,110865],{},"设置初始角度：",[41,110867,110869],{"className":170,"code":110868,"language":172,"meta":46,"style":46},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[48,110870,110871,110883],{"__ignoreMap":46},[51,110872,110873,110875,110877,110879,110881],{"class":53,"line":54},[51,110874,105071],{"class":65},[51,110876,759],{"class":278},[51,110878,194],{"class":65},[51,110880,70],{"class":69},[51,110882,110511],{"class":278},[51,110884,110885],{"class":53,"line":185},[51,110886,104915],{"class":65},[10,110888,110889],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[10,110891,110892],{},"简单反馈控制：",[41,110894,110896],{"className":170,"code":110895,"language":172,"meta":46,"style":46},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[48,110897,110898,110918],{"__ignoreMap":46},[51,110899,110900,110902,110904,110906,110908,110910,110912,110914,110916],{"class":53,"line":54},[51,110901,107814],{"class":65},[51,110903,70],{"class":69},[51,110905,110598],{"class":278},[51,110907,6902],{"class":69},[51,110909,110191],{"class":65},[51,110911,1023],{"class":69},[51,110913,62239],{"class":278},[51,110915,6902],{"class":69},[51,110917,110611],{"class":65},[51,110919,110920,110922,110924,110926,110928,110930,110932,110934],{"class":53,"line":185},[51,110921,107814],{"class":65},[51,110923,70],{"class":69},[51,110925,107819],{"class":65},[51,110927,1074],{"class":69},[51,110929,102775],{"class":278},[51,110931,12819],{"class":65},[51,110933,102775],{"class":278},[51,110935,282],{"class":65},[10,110937,110938],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[10,110940,110941],{},"限制动作：",[41,110943,110945],{"className":170,"code":110944,"language":172,"meta":46,"style":46},"np.clip(action, -1.0, 1.0)\n",[48,110946,110947],{"__ignoreMap":46},[51,110948,110949,110952,110954,110956,110958,110960],{"class":53,"line":54},[51,110950,110951],{"class":65},"np.clip(action, ",[51,110953,1074],{"class":69},[51,110955,102775],{"class":278},[51,110957,12819],{"class":65},[51,110959,102775],{"class":278},[51,110961,282],{"class":65},[10,110963,110964,110965,110968],{},"因为 XML 里 ",[48,110966,110967],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[513,110970,102080],{"id":102080},[41,110972,110973],{"className":170,"code":110834,"language":172,"meta":46,"style":46},[48,110974,110975,110983],{"__ignoreMap":46},[51,110976,110977,110979,110981],{"class":53,"line":54},[51,110978,348],{"class":69},[51,110980,110365],{"class":57},[51,110982,110368],{"class":65},[51,110984,110985,110987],{"class":53,"line":185},[51,110986,4476],{"class":69},[51,110988,110375],{"class":65},[10,110990,110991,110992,110995,110996,110999,111000,111003],{},"这段定义了一个函数，用来获取当前观测。",[48,110993,110994],{},"data.qpos.copy()"," 是位置数组副本，",[48,110997,110998],{},"data.qvel.copy()"," 是速度数组副本。",[48,111001,111002],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[10,111005,111006],{},"在本章模型里：",[41,111008,111011],{"className":111009,"code":111010,"language":5572,"meta":46},[5570],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[48,111012,111010],{"__ignoreMap":46},[10,111014,111015],{},"所以返回的 obs 是：",[41,111017,111020],{"className":111018,"code":111019,"language":5572,"meta":46},[5570],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[48,111021,111019],{"__ignoreMap":46},[41,111023,111025],{"className":170,"code":111024,"language":172,"meta":46,"style":46},"def compute_reward(obs: np.ndarray) -> float:\n",[48,111026,111027],{"__ignoreMap":46},[51,111028,111029,111031,111033,111035,111037],{"class":53,"line":54},[51,111030,348],{"class":69},[51,111032,110390],{"class":57},[51,111034,110393],{"class":65},[51,111036,584],{"class":278},[51,111038,363],{"class":65},[10,111040,111041,111042,111045],{},"这行定义奖励函数。输入是观测 ",[48,111043,111044],{},"obs","，输出是一个浮点数奖励。",[41,111047,111049],{"className":170,"code":111048,"language":172,"meta":46,"style":46},"cart_x = obs[0]\npole_angle = obs[1]\n",[48,111050,111051,111064],{"__ignoreMap":46},[51,111052,111053,111056,111058,111060,111062],{"class":53,"line":54},[51,111054,111055],{"class":65},"cart_x ",[51,111057,70],{"class":69},[51,111059,110407],{"class":65},[51,111061,733],{"class":278},[51,111063,33621],{"class":65},[51,111065,111066,111069,111071,111073,111075],{"class":53,"line":185},[51,111067,111068],{"class":65},"pole_angle ",[51,111070,70],{"class":69},[51,111072,110407],{"class":65},[51,111074,759],{"class":278},[51,111076,33621],{"class":65},[10,111078,111079,111080,111083,111084,111087],{},"数组索引从 0 开始。",[48,111081,111082],{},"obs[0]"," 是第一个元素，也就是小车位置。",[48,111085,111086],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[41,111089,111090],{"className":170,"code":110159,"language":172,"meta":46,"style":46},[48,111091,111092],{"__ignoreMap":46},[51,111093,111094,111096,111098,111100,111102,111104,111106,111108,111110,111112,111114,111116,111118,111120],{"class":53,"line":54},[51,111095,17429],{"class":69},[51,111097,110168],{"class":278},[51,111099,546],{"class":65},[51,111101,102775],{"class":278},[51,111103,52643],{"class":69},[51,111105,110177],{"class":278},[51,111107,6902],{"class":69},[51,111109,110182],{"class":65},[51,111111,997],{"class":69},[51,111113,110182],{"class":65},[51,111115,1074],{"class":69},[51,111117,110191],{"class":65},[51,111119,997],{"class":69},[51,111121,110196],{"class":65},[10,111123,111124,111125,111128,111129,111132],{},"这行计算奖励。",[48,111126,111127],{},"cart_x * cart_x"," 是小车位置的平方，",[48,111130,111131],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[41,111134,111136],{"className":170,"code":111135,"language":172,"meta":46,"style":46},"data.qpos[1] = 0.1\n",[48,111137,111138],{"__ignoreMap":46},[51,111139,111140,111142,111144,111146,111148],{"class":53,"line":54},[51,111141,105071],{"class":65},[51,111143,759],{"class":278},[51,111145,194],{"class":65},[51,111147,70],{"class":69},[51,111149,110511],{"class":278},[10,111151,111152,111153,111155,111156,111158],{},"手动设置杆子的初始角度。因为 ",[48,111154,105828],{}," 是小车位置，",[48,111157,105831],{}," 是杆子角度，所以这里改的是杆子。",[41,111160,111161],{"className":170,"code":104915,"language":172,"meta":46,"style":46},[48,111162,111163],{"__ignoreMap":46},[51,111164,111165],{"class":53,"line":54},[51,111166,104915],{"class":65},[10,111168,105874,111169,111171],{},[48,111170,104402],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[41,111173,111175],{"className":170,"code":111174,"language":172,"meta":46,"style":46},"total_reward = 0.0\n",[48,111176,111177],{"__ignoreMap":46},[51,111178,111179,111182,111184],{"class":53,"line":54},[51,111180,111181],{"class":65},"total_reward ",[51,111183,70],{"class":69},[51,111185,105133],{"class":278},[10,111187,111188],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[41,111190,111192],{"className":170,"code":111191,"language":172,"meta":46,"style":46},"for step in range(1000):\n",[48,111193,111194],{"__ignoreMap":46},[51,111195,111196,111198,111200,111202,111204,111206,111208],{"class":53,"line":54},[51,111197,3412],{"class":69},[51,111199,31992],{"class":65},[51,111201,26425],{"class":69},[51,111203,32818],{"class":278},[51,111205,546],{"class":65},[51,111207,6794],{"class":278},[51,111209,31164],{"class":65},[10,111211,111212,111213,111215],{},"循环 1000 步。",[48,111214,107506],{}," 是当前步数，从 0 到 999。",[41,111217,111219],{"className":170,"code":111218,"language":172,"meta":46,"style":46},"obs = get_observation(data)\n",[48,111220,111221],{"__ignoreMap":46},[51,111222,111223,111226,111228],{"class":53,"line":54},[51,111224,111225],{"class":65},"obs ",[51,111227,70],{"class":69},[51,111229,110558],{"class":65},[10,111231,111232,111233,28767],{},"读取当前状态，保存到 ",[48,111234,111044],{},[41,111236,111238],{"className":170,"code":111237,"language":172,"meta":46,"style":46},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[48,111239,111240,111252],{"__ignoreMap":46},[51,111241,111242,111244,111246,111248,111250],{"class":53,"line":54},[51,111243,111068],{"class":65},[51,111245,70],{"class":69},[51,111247,110407],{"class":65},[51,111249,759],{"class":278},[51,111251,33621],{"class":65},[51,111253,111254,111257,111259,111261,111263],{"class":53,"line":185},[51,111255,111256],{"class":65},"pole_angular_velocity ",[51,111258,70],{"class":69},[51,111260,110407],{"class":65},[51,111262,614],{"class":278},[51,111264,33621],{"class":65},[10,111266,111267,111268,111271,111272,28767],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[48,111269,111270],{},"obs[3]","？因为 obs 的顺序是 ",[48,111273,111274],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[41,111276,111278],{"className":170,"code":111277,"language":172,"meta":46,"style":46},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[48,111279,111280],{"__ignoreMap":46},[51,111281,111282,111284,111286,111288,111290,111292,111294,111296,111298],{"class":53,"line":54},[51,111283,107814],{"class":65},[51,111285,70],{"class":69},[51,111287,110598],{"class":278},[51,111289,6902],{"class":69},[51,111291,110191],{"class":65},[51,111293,1023],{"class":69},[51,111295,62239],{"class":278},[51,111297,6902],{"class":69},[51,111299,110611],{"class":65},[10,111301,111302,111303,101390,111305,111307],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[48,111304,105632],{},[48,111306,35704],{}," 是人为设置的系数，不是固定公式。",[41,111309,111311],{"className":170,"code":111310,"language":172,"meta":46,"style":46},"action = np.clip(action, -1.0, 1.0)\n",[48,111312,111313],{"__ignoreMap":46},[51,111314,111315,111317,111319,111321,111323,111325,111327,111329],{"class":53,"line":54},[51,111316,107814],{"class":65},[51,111318,70],{"class":69},[51,111320,107819],{"class":65},[51,111322,1074],{"class":69},[51,111324,102775],{"class":278},[51,111326,12819],{"class":65},[51,111328,102775],{"class":278},[51,111330,282],{"class":65},[10,111332,111333],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[41,111335,111336],{"className":170,"code":110144,"language":172,"meta":46,"style":46},[48,111337,111338],{"__ignoreMap":46},[51,111339,111340,111342,111344,111346,111348],{"class":53,"line":54},[51,111341,106243],{"class":65},[51,111343,733],{"class":278},[51,111345,194],{"class":65},[51,111347,70],{"class":69},[51,111349,107842],{"class":65},[10,111351,111352],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[41,111354,111355],{"className":170,"code":104877,"language":172,"meta":46,"style":46},[48,111356,111357],{"__ignoreMap":46},[51,111358,111359],{"class":53,"line":54},[51,111360,104877],{"class":65},[10,111362,111363,111364,111366],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[48,111365,106498],{}," 计算小车和杆子的下一刻状态。",[41,111368,111370],{"className":170,"code":111369,"language":172,"meta":46,"style":46},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[48,111371,111372,111381],{"__ignoreMap":46},[51,111373,111374,111377,111379],{"class":53,"line":54},[51,111375,111376],{"class":65},"reward ",[51,111378,70],{"class":69},[51,111380,110663],{"class":65},[51,111382,111383,111385,111387],{"class":53,"line":185},[51,111384,111181],{"class":65},[51,111386,9861],{"class":69},[51,111388,110673],{"class":65},[10,111390,111391,111392,111394,111395,111398,111399,28767],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[48,111393,9861],{}," 是简写，",[48,111396,111397],{},"total_reward += reward"," 等价于 ",[48,111400,111401],{},"total_reward = total_reward + reward",[41,111403,111405],{"className":170,"code":111404,"language":172,"meta":46,"style":46},"if step % 100 == 0:\n",[48,111406,111407],{"__ignoreMap":46},[51,111408,111409,111411,111413,111415,111417,111419,111421],{"class":53,"line":54},[51,111410,1940],{"class":69},[51,111412,31992],{"class":65},[51,111414,870],{"class":69},[51,111416,6138],{"class":278},[51,111418,101931],{"class":69},[51,111420,4479],{"class":278},[51,111422,363],{"class":65},[10,111424,111425,111427,111428,111431],{},[48,111426,870],{}," 是取余数。",[48,111429,111430],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[41,111433,111435],{"className":170,"code":111434,"language":172,"meta":46,"style":46},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[48,111436,111437],{"__ignoreMap":46},[51,111438,111439,111441,111443,111445,111447,111449,111451,111453,111455,111457,111459,111461,111463,111465,111467,111469],{"class":53,"line":54},[51,111440,30794],{"class":278},[51,111442,546],{"class":65},[51,111444,110702],{"class":61},[51,111446,110705],{"class":65},[51,111448,110708],{"class":61},[51,111450,110711],{"class":65},[51,111452,614],{"class":278},[51,111454,110716],{"class":65},[51,111456,110719],{"class":61},[51,111458,12819],{"class":65},[51,111460,32393],{"class":278},[51,111462,546],{"class":65},[51,111464,584],{"class":278},[51,111466,110730],{"class":65},[51,111468,614],{"class":278},[51,111470,30876],{"class":65},[10,111472,111473,111474,111477,111478,111481],{},"打印当前步数、观测和动作。",[48,111475,111476],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[48,111479,111480],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[486,111483,102688],{"id":102687},[10,111485,111486],{},"观测向量:",[41,111488,111491],{"className":111489,"code":111490,"language":5572,"meta":46},[5570],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[48,111492,111490],{"__ignoreMap":46},[10,111494,111495],{},"控制器是教学用的简单线性反馈，不保证最优。",[10,111497,111498],{},"每隔 100 步会打印一次：",[41,111500,111503],{"className":111501,"code":111502,"language":5572,"meta":46},[5570],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[48,111504,111502],{"__ignoreMap":46},[10,111506,111507],{},"重点观察：",[19,111509,111510,111516,111521],{},[22,111511,111512,111515],{},[48,111513,111514],{},"pole_angle"," 是否越来越大。",[22,111517,111518,111520],{},[48,111519,110097],{}," 是否跑得太远。",[22,111522,111523,111524,82911,111526,28767],{},"action 是否经常被 clip 到 ",[48,111525,104287],{},[48,111527,759],{},[10,111529,111530],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[486,111532,102720],{"id":102719},[19,111534,111535,111541,111544,111550,111560,111566,111569],{},[22,111536,111537,111538,28767],{},"把初始角度改为 ",[48,111539,111540],{},"data.qpos[1] = 0.3",[22,111542,111543],{},"重新运行，观察控制是否变差。",[22,111545,111546,111547,111549],{},"把 actuator ",[48,111548,107439],{}," 改小。",[22,111551,111552,111553,111556,111557,28767],{},"打印 ",[48,111554,111555],{},"model.nq, model.nv, model.nu","，应为 ",[48,111558,111559],{},"2 2 1",[22,111561,111562,111563,111565],{},"把 reward 里的 ",[48,111564,111131],{}," 系数改大，观察总奖励变化。",[22,111567,111568],{},"把控制器改成反号，观察杆子是否更容易倒。",[22,111570,111571],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[486,111573,102825],{"id":102824},[513,111575,111576],{"id":111576},"杆子方向和预期不一致",[10,111578,102768,111579,111581,111582,111584],{},[48,111580,106611],{}," 和 capsule 的 ",[48,111583,103548],{},"，必要时用 viewer 可视化确认。",[513,111586,111587],{"id":111587},"控制器越控越倒",[10,111589,111590],{},"说明反馈符号可能反了，尝试:",[41,111592,111594],{"className":170,"code":111593,"language":172,"meta":46,"style":46},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[48,111595,111596],{"__ignoreMap":46},[51,111597,111598,111600,111602,111604,111606,111608,111610,111612,111614,111616],{"class":53,"line":54},[51,111599,107814],{"class":65},[51,111601,70],{"class":69},[51,111603,52643],{"class":69},[51,111605,105632],{"class":278},[51,111607,6902],{"class":69},[51,111609,110191],{"class":65},[51,111611,1074],{"class":69},[51,111613,62239],{"class":278},[51,111615,6902],{"class":69},[51,111617,110611],{"class":65},[513,111619,111620],{"id":111620},"小车飞走",[10,111622,111623,111624,111626,111627,111630],{},"降低 ",[48,111625,107439],{}," 或缩小 ",[48,111628,111629],{},"action"," 的 clip 范围。",[513,111632,111634,111636],{"id":111633},"obs3-为什么是杆子角速度",[48,111635,111270],{}," 为什么是杆子角速度",[10,111638,111639],{},"因为这个模型里：",[41,111641,111644],{"className":111642,"code":111643,"language":5572,"meta":46},[5570],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[48,111645,111643],{"__ignoreMap":46},[10,111647,110118],{},[41,111649,111652],{"className":111650,"code":111651,"language":5572,"meta":46},[5570],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[48,111653,111651],{"__ignoreMap":46},[513,111655,111657],{"id":111656},"reward-变成负数是否错误","reward 变成负数是否错误",[10,111659,111660],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[486,111662,102979],{"id":102978},[10,111664,111665],{},"一个控制任务通常包含：",[19,111667,111668,111671,111679,111684,111687],{},[22,111669,111670],{},"模型：Cartpole 的 body、joint、actuator。",[22,111672,111673,111674,754,111676,111678],{},"观测：从 ",[48,111675,104402],{},[48,111677,104732],{}," 里取状态。",[22,111680,111681,111682,28767],{},"动作：写入 ",[48,111683,101448],{},[22,111685,111686],{},"奖励：根据任务目标打分。",[22,111688,111689],{},"循环：obs -> action -> step -> reward。",[10,111691,111692],{},"这就是后面 Gymnasium 环境的基本骨架。",[464,111694,104658],{},{"title":46,"searchDepth":185,"depth":185,"links":111696},[111697,111698,111699,111704,111708,111709,111710,111718],{"id":101018,"depth":185,"text":101019},{"id":101141,"depth":185,"text":101142},{"id":101416,"depth":185,"text":101417,"children":111700},[111701,111702,111703],{"id":110071,"depth":202,"text":110072},{"id":110136,"depth":202,"text":110137},{"id":110152,"depth":202,"text":110153},{"id":101624,"depth":185,"text":101625,"children":111705},[111706,111707],{"id":101944,"depth":202,"text":101944},{"id":102080,"depth":202,"text":102080},{"id":102687,"depth":185,"text":102688},{"id":102719,"depth":185,"text":102720},{"id":102824,"depth":185,"text":102825,"children":111711},[111712,111713,111714,111715,111717],{"id":111576,"depth":202,"text":111576},{"id":111587,"depth":202,"text":111587},{"id":111620,"depth":202,"text":111620},{"id":111633,"depth":202,"text":111716},"obs[3] 为什么是杆子角速度",{"id":111656,"depth":202,"text":111657},{"id":102978,"depth":185,"text":102979},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109807,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111725,"title":111726,"body":111727,"description":46,"extension":469,"meta":113741,"navigation":205,"path":113742,"seo":113743,"stem":113744,"__hash__":113745},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111728,"toc":113717},[111729,111732,111734,111737,111739,111756,111759,111762,111768,111771,111773,111775,111799,111801,111815,111817,111858,111860,111878,111880,111883,111889,111892,111920,111924,111930,111955,111958,111989,111996,111999,112002,112008,112011,112017,112020,112026,112030,112033,112058,112061,112063,112823,112825,112837,112839,112850,112852,112855,112872,112875,112877,112888,112891,112893,112939,112942,112955,112958,113040,113043,113045,113061,113071,113084,113087,113126,113136,113147,113157,113170,113173,113202,113205,113215,113218,113224,113241,113252,113254,113260,113277,113288,113309,113312,113324,113327,113348,113351,113359,113367,113384,113387,113456,113463,113471,113474,113487,113494,113496,113499,113505,113508,113511,113517,113523,113525,113565,113567,113573,113582,113585,113587,113607,113610,113613,113619,113623,113625,113652,113655,113658,113685,113691,113694,113697,113699,113702,113705,113711,113714],[14,111730,111726],{"id":111731},"_7控制任务reacher-机械臂到达目标",[486,111733,101019],{"id":101018},[10,111735,111736],{},"本章搭建一个二维两关节 reacher 任务。",[10,111738,104703],{},[19,111740,111741,111744,111747,111750,111753],{},[22,111742,111743],{},"两个 hinge joint",[22,111745,111746],{},"两个 motor actuator",[22,111748,111749],{},"site 作为末端点和目标点",[22,111751,111752],{},"根据末端和目标距离设计 reward",[22,111754,111755],{},"构造机械臂任务的基本形式",[10,111757,111758],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[10,111760,111761],{},"Reacher 任务可以理解为：",[41,111763,111766],{"className":111764,"code":111765,"language":5572,"meta":46},[5570],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[48,111767,111765],{"__ignoreMap":46},[10,111769,111770],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[486,111772,101142],{"id":101141},[10,111774,101145],{},[41,111776,111777],{"className":43,"code":104760,"language":45,"meta":46,"style":46},[48,111778,111779],{"__ignoreMap":46},[51,111780,111781,111783,111785,111787,111789,111791,111793,111795,111797],{"class":53,"line":54},[51,111782,24958],{"class":57},[51,111784,26697],{"class":61},[51,111786,24215],{"class":61},[51,111788,26782],{"class":278},[51,111790,104775],{"class":61},[51,111792,101170],{"class":61},[51,111794,102873],{"class":61},[51,111796,101186],{"class":61},[51,111798,104784],{"class":61},[10,111800,103191],{},[41,111802,111803],{"className":43,"code":101291,"language":45,"meta":46,"style":46},[48,111804,111805],{"__ignoreMap":46},[51,111806,111807,111809,111811,111813],{"class":53,"line":54},[51,111808,24212],{"class":57},[51,111810,24215],{"class":61},[51,111812,101302],{"class":61},[51,111814,101305],{"class":61},[10,111816,103208],{},[41,111818,111820],{"className":43,"code":111819,"language":45,"meta":46,"style":46},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[48,111821,111822,111839,111848],{"__ignoreMap":46},[51,111823,111824,111826,111828,111830,111833,111835,111837],{"class":53,"line":54},[51,111825,30712],{"class":57},[51,111827,29558],{"class":61},[51,111829,25497],{"class":278},[51,111831,111832],{"class":61}," mujoco-reacher",[51,111834,101347],{"class":61},[51,111836,101350],{"class":278},[51,111838,101353],{"class":278},[51,111840,111841,111843,111845],{"class":53,"line":185},[51,111842,30712],{"class":57},[51,111844,101360],{"class":61},[51,111846,111847],{"class":61}," mujoco-reacher\n",[51,111849,111850,111852,111854,111856],{"class":53,"line":202},[51,111851,24212],{"class":57},[51,111853,24215],{"class":61},[51,111855,101302],{"class":61},[51,111857,101305],{"class":61},[10,111859,101376],{},[19,111861,111862,111865,111868],{},[22,111863,111864],{},"本章使用低维状态，不使用图像输入。",[22,111866,111867],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[22,111869,111870,111871,754,111873,754,111875,111877],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[48,111872,104402],{},[48,111874,104732],{},[48,111876,104052],{}," 的方法一致。",[486,111879,101417],{"id":101416},[10,111881,111882],{},"Reacher 任务核心:",[41,111884,111887],{"className":111885,"code":111886,"language":5572,"meta":46},[5570],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[48,111888,111886],{"__ignoreMap":46},[10,111890,111891],{},"读取 site 世界坐标:",[41,111893,111895],{"className":170,"code":111894,"language":172,"meta":46,"style":46},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[48,111896,111897,111910],{"__ignoreMap":46},[51,111898,111899,111901,111903,111905,111908],{"class":53,"line":54},[51,111900,104006],{"class":65},[51,111902,70],{"class":69},[51,111904,103777],{"class":65},[51,111906,111907],{"class":61},"\"tip\"",[51,111909,282],{"class":65},[51,111911,111912,111915,111917],{"class":53,"line":185},[51,111913,111914],{"class":65},"tip_pos ",[51,111916,70],{"class":69},[51,111918,111919],{"class":65}," data.site_xpos[site_id]\n",[513,111921,111923],{"id":111922},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[10,111925,111926,111927,111929],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[48,111928,104402],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[41,111931,111933],{"className":170,"code":111932,"language":172,"meta":46,"style":46},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[48,111934,111935,111945],{"__ignoreMap":46},[51,111936,111937,111940,111942],{"class":53,"line":54},[51,111938,111939],{"class":65},"tip ",[51,111941,70],{"class":69},[51,111943,111944],{"class":65}," data.site_xpos[tip_site_id]\n",[51,111946,111947,111950,111952],{"class":53,"line":185},[51,111948,111949],{"class":65},"target ",[51,111951,70],{"class":69},[51,111953,111954],{"class":65}," data.site_xpos[target_site_id]\n",[10,111956,111957],{},"这样 reward 就很容易写：",[41,111959,111961],{"className":170,"code":111960,"language":172,"meta":46,"style":46},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[48,111962,111963,111978],{"__ignoreMap":46},[51,111964,111965,111968,111970,111973,111975],{"class":53,"line":54},[51,111966,111967],{"class":65},"dist ",[51,111969,70],{"class":69},[51,111971,111972],{"class":65}," np.linalg.norm(tip ",[51,111974,1074],{"class":69},[51,111976,111977],{"class":65}," target)\n",[51,111979,111980,111982,111984,111986],{"class":53,"line":185},[51,111981,111376],{"class":65},[51,111983,70],{"class":69},[51,111985,52643],{"class":69},[51,111987,111988],{"class":65},"dist\n",[10,111990,111991,111992,111995],{},"距离越小，",[48,111993,111994],{},"-dist"," 越接近 0，奖励越高。",[513,111997,111998],{"id":111998},"两关节机械臂的状态",[10,112000,112001],{},"这个模型有两个 hinge joint：",[41,112003,112006],{"className":112004,"code":112005,"language":5572,"meta":46},[5570],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[48,112007,112005],{"__ignoreMap":46},[10,112009,112010],{},"再加上末端和目标位置：",[41,112012,112015],{"className":112013,"code":112014,"language":5572,"meta":46},[5570],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[48,112016,112014],{"__ignoreMap":46},[10,112018,112019],{},"总维度：",[41,112021,112024],{"className":112022,"code":112023,"language":5572,"meta":46},[5570],"2 + 2 + 3 + 3 = 10\n",[48,112025,112023],{"__ignoreMap":46},[513,112027,112029],{"id":112028},"为什么-gravity-是-0","为什么 gravity 是 0",[10,112031,112032],{},"本章把重力设为：",[41,112034,112036],{"className":53439,"code":112035,"language":53441,"meta":46,"style":46},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[48,112037,112038],{"__ignoreMap":46},[51,112039,112040,112042,112044,112046,112048,112050,112052,112054,112056],{"class":53,"line":54},[51,112041,1452],{"class":65},[51,112043,69538],{"class":51672},[51,112045,101566],{"class":57},[51,112047,70],{"class":65},[51,112049,101571],{"class":61},[51,112051,101574],{"class":57},[51,112053,70],{"class":65},[51,112055,104143],{"class":61},[51,112057,101516],{"class":65},[10,112059,112060],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[486,112062,101625],{"id":101624},[41,112064,112066],{"className":170,"code":112065,"language":172,"meta":46,"style":46},"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",[48,112067,112068,112074,112084,112088,112092,112100,112105,112110,112114,112118,112123,112128,112132,112137,112142,112147,112151,112156,112161,112166,112171,112175,112179,112183,112187,112191,112196,112201,112205,112209,112213,112217,112221,112236,112245,112257,112280,112287,112291,112295,112305,112319,112333,112340,112344,112348,112362,112374,112386,112399,112414,112431,112435,112439,112451,112463,112471,112479,112483,112499,112504,112517,112530,112545,112549,112584,112616,112620,112624,112633,112637,112653,112663,112674,112690,112706,112722,112738,112742,112760,112780,112799,112803,112807,112819],{"__ignoreMap":46},[51,112069,112070,112072],{"class":53,"line":54},[51,112071,179],{"class":69},[51,112073,101673],{"class":65},[51,112075,112076,112078,112080,112082],{"class":53,"line":185},[51,112077,179],{"class":69},[51,112079,31758],{"class":65},[51,112081,217],{"class":69},[51,112083,31763],{"class":65},[51,112085,112086],{"class":53,"line":202},[51,112087,206],{"emptyLinePlaceholder":205},[51,112089,112090],{"class":53,"line":209},[51,112091,206],{"emptyLinePlaceholder":205},[51,112093,112094,112096,112098],{"class":53,"line":223},[51,112095,101686],{"class":278},[51,112097,13948],{"class":69},[51,112099,101691],{"class":61},[51,112101,112102],{"class":53,"line":237},[51,112103,112104],{"class":61},"\u003Cmujoco model=\"two_link_reacher\">\n",[51,112106,112107],{"class":53,"line":242},[51,112108,112109],{"class":61},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[51,112111,112112],{"class":53,"line":257},[51,112113,206],{"emptyLinePlaceholder":205},[51,112115,112116],{"class":53,"line":262},[51,112117,101710],{"class":61},[51,112119,112120],{"class":53,"line":285},[51,112121,112122],{"class":61},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[51,112124,112125],{"class":53,"line":296},[51,112126,112127],{"class":61},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[51,112129,112130],{"class":53,"line":307},[51,112131,206],{"emptyLinePlaceholder":205},[51,112133,112134],{"class":53,"line":324},[51,112135,112136],{"class":61},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[51,112138,112139],{"class":53,"line":329},[51,112140,112141],{"class":61},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[51,112143,112144],{"class":53,"line":334},[51,112145,112146],{"class":61},"      \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",[51,112148,112149],{"class":53,"line":340},[51,112150,206],{"emptyLinePlaceholder":205},[51,112152,112153],{"class":53,"line":345},[51,112154,112155],{"class":61},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[51,112157,112158],{"class":53,"line":357},[51,112159,112160],{"class":61},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[51,112162,112163],{"class":53,"line":366},[51,112164,112165],{"class":61},"        \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",[51,112167,112168],{"class":53,"line":383},[51,112169,112170],{"class":61},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[51,112172,112173],{"class":53,"line":392},[51,112174,106810],{"class":61},[51,112176,112177],{"class":53,"line":403},[51,112178,101739],{"class":61},[51,112180,112181],{"class":53,"line":409},[51,112182,101744],{"class":61},[51,112184,112185],{"class":53,"line":414},[51,112186,206],{"emptyLinePlaceholder":205},[51,112188,112189],{"class":53,"line":433},[51,112190,106827],{"class":61},[51,112192,112193],{"class":53,"line":439},[51,112194,112195],{"class":61},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[51,112197,112198],{"class":53,"line":444},[51,112199,112200],{"class":61},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[51,112202,112203],{"class":53,"line":453},[51,112204,106837],{"class":61},[51,112206,112207],{"class":53,"line":2174},[51,112208,101749],{"class":61},[51,112210,112211],{"class":53,"line":2965},[51,112212,96070],{"class":61},[51,112214,112215],{"class":53,"line":2979},[51,112216,206],{"emptyLinePlaceholder":205},[51,112218,112219],{"class":53,"line":2987},[51,112220,206],{"emptyLinePlaceholder":205},[51,112222,112223,112225,112228,112231,112233],{"class":53,"line":2992},[51,112224,348],{"class":69},[51,112226,112227],{"class":57}," site_position",[51,112229,112230],{"class":65},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[51,112232,1712],{"class":278},[51,112234,112235],{"class":65},") -> np.ndarray:\n",[51,112237,112238,112240,112242],{"class":53,"line":2998},[51,112239,103772],{"class":65},[51,112241,70],{"class":69},[51,112243,112244],{"class":65}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[51,112246,112247,112249,112251,112253,112255],{"class":53,"line":3004},[51,112248,3488],{"class":69},[51,112250,103821],{"class":65},[51,112252,1452],{"class":69},[51,112254,4479],{"class":278},[51,112256,363],{"class":65},[51,112258,112259,112261,112263,112265,112267,112270,112272,112274,112276,112278],{"class":53,"line":3009},[51,112260,103804],{"class":69},[51,112262,103807],{"class":278},[51,112264,546],{"class":65},[51,112266,595],{"class":69},[51,112268,112269],{"class":61},"\"site not found: ",[51,112271,1438],{"class":278},[51,112273,80182],{"class":65},[51,112275,1488],{"class":278},[51,112277,793],{"class":61},[51,112279,282],{"class":65},[51,112281,112282,112284],{"class":53,"line":8332},[51,112283,4476],{"class":69},[51,112285,112286],{"class":65}," data.site_xpos[site_id].copy()\n",[51,112288,112289],{"class":53,"line":8356},[51,112290,206],{"emptyLinePlaceholder":205},[51,112292,112293],{"class":53,"line":8361},[51,112294,206],{"emptyLinePlaceholder":205},[51,112296,112297,112299,112302],{"class":53,"line":8367},[51,112298,348],{"class":69},[51,112300,112301],{"class":57}," get_obs",[51,112303,112304],{"class":65},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[51,112306,112307,112310,112312,112315,112317],{"class":53,"line":8394},[51,112308,112309],{"class":65},"    tip ",[51,112311,70],{"class":69},[51,112313,112314],{"class":65}," site_position(model, data, ",[51,112316,111907],{"class":61},[51,112318,282],{"class":65},[51,112320,112321,112324,112326,112328,112331],{"class":53,"line":8399},[51,112322,112323],{"class":65},"    target ",[51,112325,70],{"class":69},[51,112327,112314],{"class":65},[51,112329,112330],{"class":61},"\"target\"",[51,112332,282],{"class":65},[51,112334,112335,112337],{"class":53,"line":8405},[51,112336,4476],{"class":69},[51,112338,112339],{"class":65}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[51,112341,112342],{"class":53,"line":8417},[51,112343,206],{"emptyLinePlaceholder":205},[51,112345,112346],{"class":53,"line":8429},[51,112347,206],{"emptyLinePlaceholder":205},[51,112349,112350,112352,112355,112358,112360],{"class":53,"line":8441},[51,112351,348],{"class":69},[51,112353,112354],{"class":57}," reward",[51,112356,112357],{"class":65},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[51,112359,584],{"class":278},[51,112361,363],{"class":65},[51,112363,112364,112366,112368,112370,112372],{"class":53,"line":10100},[51,112365,112309],{"class":65},[51,112367,70],{"class":69},[51,112369,112314],{"class":65},[51,112371,111907],{"class":61},[51,112373,282],{"class":65},[51,112375,112376,112378,112380,112382,112384],{"class":53,"line":10125},[51,112377,112323],{"class":65},[51,112379,70],{"class":69},[51,112381,112314],{"class":65},[51,112383,112330],{"class":61},[51,112385,282],{"class":65},[51,112387,112388,112391,112393,112395,112397],{"class":53,"line":10148},[51,112389,112390],{"class":65},"    dist ",[51,112392,70],{"class":69},[51,112394,111972],{"class":65},[51,112396,1074],{"class":69},[51,112398,111977],{"class":65},[51,112400,112401,112404,112406,112409,112411],{"class":53,"line":10172},[51,112402,112403],{"class":65},"    control_cost ",[51,112405,70],{"class":69},[51,112407,112408],{"class":278}," 0.01",[51,112410,6902],{"class":69},[51,112412,112413],{"class":65}," np.sum(np.square(data.ctrl))\n",[51,112415,112416,112418,112420,112422,112424,112426,112428],{"class":53,"line":10177},[51,112417,4476],{"class":69},[51,112419,110168],{"class":278},[51,112421,546],{"class":65},[51,112423,1074],{"class":69},[51,112425,111967],{"class":65},[51,112427,1074],{"class":69},[51,112429,112430],{"class":65}," control_cost)\n",[51,112432,112433],{"class":53,"line":10182},[51,112434,206],{"emptyLinePlaceholder":205},[51,112436,112437],{"class":53,"line":10187},[51,112438,206],{"emptyLinePlaceholder":205},[51,112440,112441,112443,112445,112447,112449],{"class":53,"line":10196},[51,112442,348],{"class":69},[51,112444,2363],{"class":57},[51,112446,101770],{"class":65},[51,112448,96058],{"class":278},[51,112450,363],{"class":65},[51,112452,112453,112455,112457,112459,112461],{"class":53,"line":10201},[51,112454,101779],{"class":65},[51,112456,70],{"class":69},[51,112458,101784],{"class":65},[51,112460,101686],{"class":278},[51,112462,282],{"class":65},[51,112464,112465,112467,112469],{"class":53,"line":10207},[51,112466,101793],{"class":65},[51,112468,70],{"class":69},[51,112470,101798],{"class":65},[51,112472,112473,112475,112477],{"class":53,"line":10228},[51,112474,110524],{"class":65},[51,112476,70],{"class":69},[51,112478,105133],{"class":278},[51,112480,112481],{"class":53,"line":10234},[51,112482,206],{"emptyLinePlaceholder":205},[51,112484,112485,112487,112489,112491,112493,112495,112497],{"class":53,"line":10248},[51,112486,3588],{"class":69},[51,112488,31992],{"class":65},[51,112490,26425],{"class":69},[51,112492,32818],{"class":278},[51,112494,546],{"class":65},[51,112496,65446],{"class":278},[51,112498,31164],{"class":65},[51,112500,112501],{"class":53,"line":10254},[51,112502,112503],{"class":65},"        mujoco.mj_forward(model, data)\n",[51,112505,112506,112509,112511,112513,112515],{"class":53,"line":10281},[51,112507,112508],{"class":65},"        tip ",[51,112510,70],{"class":69},[51,112512,112314],{"class":65},[51,112514,111907],{"class":61},[51,112516,282],{"class":65},[51,112518,112519,112522,112524,112526,112528],{"class":53,"line":10290},[51,112520,112521],{"class":65},"        target ",[51,112523,70],{"class":69},[51,112525,112314],{"class":65},[51,112527,112330],{"class":61},[51,112529,282],{"class":65},[51,112531,112532,112535,112537,112540,112542],{"class":53,"line":10296},[51,112533,112534],{"class":65},"        error ",[51,112536,70],{"class":69},[51,112538,112539],{"class":65}," target ",[51,112541,1074],{"class":69},[51,112543,112544],{"class":65}," tip\n",[51,112546,112547],{"class":53,"line":10304},[51,112548,206],{"emptyLinePlaceholder":205},[51,112550,112551,112553,112555,112557,112559,112562,112564,112566,112569,112571,112574,112576,112578,112580,112582],{"class":53,"line":10309},[51,112552,106989],{"class":65},[51,112554,733],{"class":278},[51,112556,194],{"class":65},[51,112558,70],{"class":69},[51,112560,112561],{"class":65}," np.clip(",[51,112563,105632],{"class":278},[51,112565,6902],{"class":69},[51,112567,112568],{"class":65}," error[",[51,112570,620],{"class":278},[51,112572,112573],{"class":65},"], ",[51,112575,1074],{"class":69},[51,112577,102775],{"class":278},[51,112579,12819],{"class":65},[51,112581,102775],{"class":278},[51,112583,282],{"class":65},[51,112585,112586,112588,112590,112592,112594,112596,112598,112600,112602,112604,112606,112608,112610,112612,112614],{"class":53,"line":16987},[51,112587,106989],{"class":65},[51,112589,759],{"class":278},[51,112591,194],{"class":65},[51,112593,70],{"class":69},[51,112595,112561],{"class":65},[51,112597,105632],{"class":278},[51,112599,6902],{"class":69},[51,112601,112568],{"class":65},[51,112603,733],{"class":278},[51,112605,112573],{"class":65},[51,112607,1074],{"class":69},[51,112609,102775],{"class":278},[51,112611,12819],{"class":65},[51,112613,102775],{"class":278},[51,112615,282],{"class":65},[51,112617,112618],{"class":53,"line":16993},[51,112619,206],{"emptyLinePlaceholder":205},[51,112621,112622],{"class":53,"line":17016},[51,112623,101888],{"class":65},[51,112625,112626,112628,112630],{"class":53,"line":17022},[51,112627,110668],{"class":65},[51,112629,9861],{"class":69},[51,112631,112632],{"class":65}," reward(model, data)\n",[51,112634,112635],{"class":53,"line":17045},[51,112636,206],{"emptyLinePlaceholder":205},[51,112638,112639,112641,112643,112645,112647,112649,112651],{"class":53,"line":17059},[51,112640,369],{"class":69},[51,112642,31992],{"class":65},[51,112644,870],{"class":69},[51,112646,6138],{"class":278},[51,112648,101931],{"class":69},[51,112650,4479],{"class":278},[51,112652,363],{"class":65},[51,112654,112655,112658,112660],{"class":53,"line":17079},[51,112656,112657],{"class":65},"            obs ",[51,112659,70],{"class":69},[51,112661,112662],{"class":65}," get_obs(model, data)\n",[51,112664,112665,112667,112669,112671],{"class":53,"line":17085},[51,112666,35025],{"class":278},[51,112668,546],{"class":65},[51,112670,110702],{"class":61},[51,112672,112673],{"class":65},", step)\n",[51,112675,112676,112678,112680,112683,112686,112688],{"class":53,"line":17096},[51,112677,35025],{"class":278},[51,112679,546],{"class":65},[51,112681,112682],{"class":61},"\"  tip:\"",[51,112684,112685],{"class":65},", np.round(tip, ",[51,112687,614],{"class":278},[51,112689,30876],{"class":65},[51,112691,112692,112694,112696,112699,112702,112704],{"class":53,"line":17119},[51,112693,35025],{"class":278},[51,112695,546],{"class":65},[51,112697,112698],{"class":61},"\"  target:\"",[51,112700,112701],{"class":65},", np.round(target, ",[51,112703,614],{"class":278},[51,112705,30876],{"class":65},[51,112707,112708,112710,112712,112715,112718,112720],{"class":53,"line":17141},[51,112709,35025],{"class":278},[51,112711,546],{"class":65},[51,112713,112714],{"class":61},"\"  ctrl:\"",[51,112716,112717],{"class":65},", np.round(data.ctrl.copy(), ",[51,112719,614],{"class":278},[51,112721,30876],{"class":65},[51,112723,112724,112726,112728,112731,112734,112736],{"class":53,"line":17146},[51,112725,35025],{"class":278},[51,112727,546],{"class":65},[51,112729,112730],{"class":61},"\"  obs_dim:\"",[51,112732,112733],{"class":65},", obs.shape[",[51,112735,733],{"class":278},[51,112737,5042],{"class":65},[51,112739,112740],{"class":53,"line":17152},[51,112741,206],{"emptyLinePlaceholder":205},[51,112743,112744,112746,112748,112750,112752,112754,112756,112758],{"class":53,"line":17166},[51,112745,31677],{"class":278},[51,112747,546],{"class":65},[51,112749,110747],{"class":61},[51,112751,12819],{"class":65},[51,112753,32393],{"class":278},[51,112755,110754],{"class":65},[51,112757,614],{"class":278},[51,112759,30876],{"class":65},[51,112761,112762,112764,112766,112769,112772,112774,112776,112778],{"class":53,"line":17179},[51,112763,31677],{"class":278},[51,112765,546],{"class":65},[51,112767,112768],{"class":61},"\"final tip:\"",[51,112770,112771],{"class":65},", np.round(site_position(model, data, ",[51,112773,111907],{"class":61},[51,112775,110716],{"class":65},[51,112777,614],{"class":278},[51,112779,30876],{"class":65},[51,112781,112782,112784,112786,112789,112791,112793,112795,112797],{"class":53,"line":17184},[51,112783,31677],{"class":278},[51,112785,546],{"class":65},[51,112787,112788],{"class":61},"\"target:\"",[51,112790,112771],{"class":65},[51,112792,112330],{"class":61},[51,112794,110716],{"class":65},[51,112796,614],{"class":278},[51,112798,30876],{"class":65},[51,112800,112801],{"class":53,"line":17198},[51,112802,206],{"emptyLinePlaceholder":205},[51,112804,112805],{"class":53,"line":17203},[51,112806,206],{"emptyLinePlaceholder":205},[51,112808,112809,112811,112813,112815,112817],{"class":53,"line":17209},[51,112810,1940],{"class":69},[51,112812,31598],{"class":278},[51,112814,101931],{"class":69},[51,112816,101934],{"class":61},[51,112818,363],{"class":65},[51,112820,112821],{"class":53,"line":17214},[51,112822,101941],{"class":65},[10,112824,103942],{},[41,112826,112828],{"className":43,"code":112827,"language":45,"meta":46,"style":46},"touch ch7_reacher.py\n",[48,112829,112830],{"__ignoreMap":46},[51,112831,112832,112834],{"class":53,"line":54},[51,112833,101655],{"class":57},[51,112835,112836],{"class":61}," ch7_reacher.py\n",[10,112838,110815],{},[41,112840,112842],{"className":43,"code":112841,"language":45,"meta":46,"style":46},"python ch7_reacher.py\n",[48,112843,112844],{"__ignoreMap":46},[51,112845,112846,112848],{"class":53,"line":54},[51,112847,172],{"class":57},[51,112849,112836],{"class":61},[513,112851,101944],{"id":101944},[10,112853,112854],{},"读取 site 坐标：",[41,112856,112858],{"className":170,"code":112857,"language":172,"meta":46,"style":46},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[48,112859,112860],{"__ignoreMap":46},[51,112861,112862,112864,112866,112868,112870],{"class":53,"line":54},[51,112863,348],{"class":69},[51,112865,112227],{"class":57},[51,112867,112230],{"class":65},[51,112869,1712],{"class":278},[51,112871,112235],{"class":65},[10,112873,112874],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[10,112876,110831],{},[41,112878,112880],{"className":170,"code":112879,"language":172,"meta":46,"style":46},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[48,112881,112882],{"__ignoreMap":46},[51,112883,112884,112886],{"class":53,"line":54},[51,112885,17429],{"class":69},[51,112887,112339],{"class":65},[10,112889,112890],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[10,112892,110156],{},[41,112894,112896],{"className":170,"code":112895,"language":172,"meta":46,"style":46},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[48,112897,112898,112910,112923],{"__ignoreMap":46},[51,112899,112900,112902,112904,112906,112908],{"class":53,"line":54},[51,112901,111967],{"class":65},[51,112903,70],{"class":69},[51,112905,111972],{"class":65},[51,112907,1074],{"class":69},[51,112909,111977],{"class":65},[51,112911,112912,112915,112917,112919,112921],{"class":53,"line":185},[51,112913,112914],{"class":65},"control_cost ",[51,112916,70],{"class":69},[51,112918,112408],{"class":278},[51,112920,6902],{"class":69},[51,112922,112413],{"class":65},[51,112924,112925,112927,112929,112931,112933,112935,112937],{"class":53,"line":202},[51,112926,17429],{"class":69},[51,112928,110168],{"class":278},[51,112930,546],{"class":65},[51,112932,1074],{"class":69},[51,112934,111967],{"class":65},[51,112936,1074],{"class":69},[51,112938,112430],{"class":65},[10,112940,112941],{},"奖励由两部分组成：",[19,112943,112944,112949],{},[22,112945,112946,112948],{},[48,112947,111994],{},"：末端离目标越远，奖励越低。",[22,112950,112951,112954],{},[48,112952,112953],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[10,112956,112957],{},"简单控制器：",[41,112959,112961],{"className":170,"code":112960,"language":172,"meta":46,"style":46},"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",[48,112962,112963,112976,113008],{"__ignoreMap":46},[51,112964,112965,112968,112970,112972,112974],{"class":53,"line":54},[51,112966,112967],{"class":65},"error ",[51,112969,70],{"class":69},[51,112971,112539],{"class":65},[51,112973,1074],{"class":69},[51,112975,112544],{"class":65},[51,112977,112978,112980,112982,112984,112986,112988,112990,112992,112994,112996,112998,113000,113002,113004,113006],{"class":53,"line":185},[51,112979,106243],{"class":65},[51,112981,733],{"class":278},[51,112983,194],{"class":65},[51,112985,70],{"class":69},[51,112987,112561],{"class":65},[51,112989,105632],{"class":278},[51,112991,6902],{"class":69},[51,112993,112568],{"class":65},[51,112995,620],{"class":278},[51,112997,112573],{"class":65},[51,112999,1074],{"class":69},[51,113001,102775],{"class":278},[51,113003,12819],{"class":65},[51,113005,102775],{"class":278},[51,113007,282],{"class":65},[51,113009,113010,113012,113014,113016,113018,113020,113022,113024,113026,113028,113030,113032,113034,113036,113038],{"class":53,"line":202},[51,113011,106243],{"class":65},[51,113013,759],{"class":278},[51,113015,194],{"class":65},[51,113017,70],{"class":69},[51,113019,112561],{"class":65},[51,113021,105632],{"class":278},[51,113023,6902],{"class":69},[51,113025,112568],{"class":65},[51,113027,733],{"class":278},[51,113029,112573],{"class":65},[51,113031,1074],{"class":69},[51,113033,102775],{"class":278},[51,113035,12819],{"class":65},[51,113037,102775],{"class":278},[51,113039,282],{"class":65},[10,113041,113042],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[513,113044,102080],{"id":102080},[41,113046,113047],{"className":170,"code":112857,"language":172,"meta":46,"style":46},[48,113048,113049],{"__ignoreMap":46},[51,113050,113051,113053,113055,113057,113059],{"class":53,"line":54},[51,113052,348],{"class":69},[51,113054,112227],{"class":57},[51,113056,112230],{"class":65},[51,113058,1712],{"class":278},[51,113060,112235],{"class":65},[10,113062,113063,113064,113066,113067,82911,113069,28767],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[48,113065,80182],{}," 是 site 的名字，比如 ",[48,113068,111907],{},[48,113070,112330],{},[41,113072,113074],{"className":170,"code":113073,"language":172,"meta":46,"style":46},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[48,113075,113076],{"__ignoreMap":46},[51,113077,113078,113080,113082],{"class":53,"line":54},[51,113079,104006],{"class":65},[51,113081,70],{"class":69},[51,113083,112244],{"class":65},[10,113085,113086],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[41,113088,113090],{"className":170,"code":113089,"language":172,"meta":46,"style":46},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[48,113091,113092,113104],{"__ignoreMap":46},[51,113093,113094,113096,113098,113100,113102],{"class":53,"line":54},[51,113095,1940],{"class":69},[51,113097,103821],{"class":65},[51,113099,1452],{"class":69},[51,113101,4479],{"class":278},[51,113103,363],{"class":65},[51,113105,113106,113108,113110,113112,113114,113116,113118,113120,113122,113124],{"class":53,"line":185},[51,113107,104267],{"class":69},[51,113109,103807],{"class":278},[51,113111,546],{"class":65},[51,113113,595],{"class":69},[51,113115,112269],{"class":61},[51,113117,1438],{"class":278},[51,113119,80182],{"class":65},[51,113121,1488],{"class":278},[51,113123,793],{"class":61},[51,113125,282],{"class":65},[10,113127,113128,113129,113132,113133,113135],{},"如果 site 没找到，就主动报错。",[48,113130,113131],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[48,113134,80182],{}," 的值放进字符串里。",[41,113137,113139],{"className":170,"code":113138,"language":172,"meta":46,"style":46},"return data.site_xpos[site_id].copy()\n",[48,113140,113141],{"__ignoreMap":46},[51,113142,113143,113145],{"class":53,"line":54},[51,113144,17429],{"class":69},[51,113146,112286],{"class":65},[10,113148,113149,113150,113152,113153,113156],{},"返回这个 site 的世界坐标。",[48,113151,104052],{}," 里的每一行都是一个 site 的 ",[48,113154,113155],{},"(x, y, z)"," 坐标。",[41,113158,113160],{"className":170,"code":113159,"language":172,"meta":46,"style":46},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[48,113161,113162],{"__ignoreMap":46},[51,113163,113164,113166,113168],{"class":53,"line":54},[51,113165,348],{"class":69},[51,113167,112301],{"class":57},[51,113169,112304],{"class":65},[10,113171,113172],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[41,113174,113176],{"className":170,"code":113175,"language":172,"meta":46,"style":46},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[48,113177,113178,113190],{"__ignoreMap":46},[51,113179,113180,113182,113184,113186,113188],{"class":53,"line":54},[51,113181,111939],{"class":65},[51,113183,70],{"class":69},[51,113185,112314],{"class":65},[51,113187,111907],{"class":61},[51,113189,282],{"class":65},[51,113191,113192,113194,113196,113198,113200],{"class":53,"line":185},[51,113193,111949],{"class":65},[51,113195,70],{"class":69},[51,113197,112314],{"class":65},[51,113199,112330],{"class":61},[51,113201,282],{"class":65},[10,113203,113204],{},"分别读取末端点和目标点的世界坐标。",[41,113206,113207],{"className":170,"code":112879,"language":172,"meta":46,"style":46},[48,113208,113209],{"__ignoreMap":46},[51,113210,113211,113213],{"class":53,"line":54},[51,113212,17429],{"class":69},[51,113214,112339],{"class":65},[10,113216,113217],{},"把四部分拼成一个观测数组：",[41,113219,113222],{"className":113220,"code":113221,"language":5572,"meta":46},[5570],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[48,113223,113221],{"__ignoreMap":46},[41,113225,113227],{"className":170,"code":113226,"language":172,"meta":46,"style":46},"dist = np.linalg.norm(tip - target)\n",[48,113228,113229],{"__ignoreMap":46},[51,113230,113231,113233,113235,113237,113239],{"class":53,"line":54},[51,113232,111967],{"class":65},[51,113234,70],{"class":69},[51,113236,111972],{"class":65},[51,113238,1074],{"class":69},[51,113240,111977],{"class":65},[10,113242,113243,113244,113247,113248,113251],{},"计算 tip 到 target 的距离。",[48,113245,113246],{},"tip - target"," 得到一个三维向量，",[48,113249,113250],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[10,113253,15017],{},[41,113255,113258],{"className":113256,"code":113257,"language":5572,"meta":46},[5570],"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",[48,113259,113257],{"__ignoreMap":46},[41,113261,113263],{"className":170,"code":113262,"language":172,"meta":46,"style":46},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[48,113264,113265],{"__ignoreMap":46},[51,113266,113267,113269,113271,113273,113275],{"class":53,"line":54},[51,113268,112914],{"class":65},[51,113270,70],{"class":69},[51,113272,112408],{"class":278},[51,113274,6902],{"class":69},[51,113276,112413],{"class":65},[10,113278,113279,113280,113283,113284,113287],{},"计算动作惩罚。",[48,113281,113282],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[48,113285,113286],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[41,113289,113291],{"className":170,"code":113290,"language":172,"meta":46,"style":46},"return float(-dist - control_cost)\n",[48,113292,113293],{"__ignoreMap":46},[51,113294,113295,113297,113299,113301,113303,113305,113307],{"class":53,"line":54},[51,113296,17429],{"class":69},[51,113298,110168],{"class":278},[51,113300,546],{"class":65},[51,113302,1074],{"class":69},[51,113304,111967],{"class":65},[51,113306,1074],{"class":69},[51,113308,112430],{"class":65},[10,113310,113311],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[41,113313,113314],{"className":170,"code":111174,"language":172,"meta":46,"style":46},[48,113315,113316],{"__ignoreMap":46},[51,113317,113318,113320,113322],{"class":53,"line":54},[51,113319,111181],{"class":65},[51,113321,70],{"class":69},[51,113323,105133],{"class":278},[10,113325,113326],{},"累计奖励变量，记录整个运行过程的总分。",[41,113328,113330],{"className":170,"code":113329,"language":172,"meta":46,"style":46},"for step in range(500):\n",[48,113331,113332],{"__ignoreMap":46},[51,113333,113334,113336,113338,113340,113342,113344,113346],{"class":53,"line":54},[51,113335,3412],{"class":69},[51,113337,31992],{"class":65},[51,113339,26425],{"class":69},[51,113341,32818],{"class":278},[51,113343,546],{"class":65},[51,113345,65446],{"class":278},[51,113347,31164],{"class":65},[10,113349,113350],{},"运行 500 个控制步。",[41,113352,113353],{"className":170,"code":104915,"language":172,"meta":46,"style":46},[48,113354,113355],{"__ignoreMap":46},[51,113356,113357],{"class":53,"line":54},[51,113358,104915],{"class":65},[10,113360,113361,113362,101390,113364,113366],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[48,113363,103603],{},[48,113365,103606],{}," 是当前状态下的坐标。",[41,113368,113370],{"className":170,"code":113369,"language":172,"meta":46,"style":46},"error = target - tip\n",[48,113371,113372],{"__ignoreMap":46},[51,113373,113374,113376,113378,113380,113382],{"class":53,"line":54},[51,113375,112967],{"class":65},[51,113377,70],{"class":69},[51,113379,112539],{"class":65},[51,113381,1074],{"class":69},[51,113383,112544],{"class":65},[10,113385,113386],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[41,113388,113390],{"className":170,"code":113389,"language":172,"meta":46,"style":46},"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",[48,113391,113392,113424],{"__ignoreMap":46},[51,113393,113394,113396,113398,113400,113402,113404,113406,113408,113410,113412,113414,113416,113418,113420,113422],{"class":53,"line":54},[51,113395,106243],{"class":65},[51,113397,733],{"class":278},[51,113399,194],{"class":65},[51,113401,70],{"class":69},[51,113403,112561],{"class":65},[51,113405,105632],{"class":278},[51,113407,6902],{"class":69},[51,113409,112568],{"class":65},[51,113411,620],{"class":278},[51,113413,112573],{"class":65},[51,113415,1074],{"class":69},[51,113417,102775],{"class":278},[51,113419,12819],{"class":65},[51,113421,102775],{"class":278},[51,113423,282],{"class":65},[51,113425,113426,113428,113430,113432,113434,113436,113438,113440,113442,113444,113446,113448,113450,113452,113454],{"class":53,"line":185},[51,113427,106243],{"class":65},[51,113429,759],{"class":278},[51,113431,194],{"class":65},[51,113433,70],{"class":69},[51,113435,112561],{"class":65},[51,113437,105632],{"class":278},[51,113439,6902],{"class":69},[51,113441,112568],{"class":65},[51,113443,733],{"class":278},[51,113445,112573],{"class":65},[51,113447,1074],{"class":69},[51,113449,102775],{"class":278},[51,113451,12819],{"class":65},[51,113453,102775],{"class":278},[51,113455,282],{"class":65},[10,113457,113458,113459,113462],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[48,113460,113461],{},"error -> ctrl -> step"," 的流程。",[41,113464,113465],{"className":170,"code":104877,"language":172,"meta":46,"style":46},[48,113466,113467],{"__ignoreMap":46},[51,113468,113469],{"class":53,"line":54},[51,113470,104877],{"class":65},[10,113472,113473],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[41,113475,113477],{"className":170,"code":113476,"language":172,"meta":46,"style":46},"obs = get_obs(model, data)\n",[48,113478,113479],{"__ignoreMap":46},[51,113480,113481,113483,113485],{"class":53,"line":54},[51,113482,111225],{"class":65},[51,113484,70],{"class":69},[51,113486,112662],{"class":65},[10,113488,113489,113490,113493],{},"读取最新观测。后面打印 ",[48,113491,113492],{},"obs.shape[0]","，用来确认观测维度是 10。",[486,113495,102688],{"id":102687},[10,113497,113498],{},"观测维度为:",[41,113500,113503],{"className":113501,"code":113502,"language":5572,"meta":46},[5570],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[48,113504,113502],{"__ignoreMap":46},[10,113506,113507],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[10,113509,113510],{},"程序每 100 步打印：",[41,113512,113515],{"className":113513,"code":113514,"language":5572,"meta":46},[5570],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[48,113516,113514],{"__ignoreMap":46},[10,113518,113519,113520,113522],{},"如果控制有效，你应该看到最终 ",[48,113521,103603],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[486,113524,102720],{"id":102719},[19,113526,113527,113530,113533,113539,113545,113552,113562],{},[22,113528,113529],{},"修改目标点位置。",[22,113531,113532],{},"重新运行，观察最终 tip 是否变化。",[22,113534,113535,113536,113538],{},"把 gravity 改成 ",[48,113537,102961],{},"，观察控制是否变差。",[22,113540,111552,113541,111556,113543,28767],{},[48,113542,102530],{},[48,113544,620],{},[22,113546,102783,113547,102786,113549,113551],{},[48,113548,110967],{},[48,113550,107679],{},"，观察机械臂是否更难移动。",[22,113553,102783,113554,82902,113556,102786,113558,113561],{},[48,113555,103606],{},[48,113557,104518],{},[48,113559,113560],{},"0.2 0 0.6","，观察 reward 和 final tip。",[22,113563,113564],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[486,113566,102825],{"id":102824},[513,113568,113570],{"id":113569},"site-not-found",[48,113571,113572],{},"site not found",[10,113574,113575,113576,101390,113579,28767],{},"检查 XML 中是否有 ",[48,113577,113578],{},"site name=\"tip\"",[48,113580,113581],{},"site name=\"target\"",[513,113583,113584],{"id":113584},"机械臂完全不动",[10,113586,102895],{},[19,113588,113589,113594,113597,113602],{},[22,113590,113591,113593],{},[48,113592,102530],{}," 是否为 2",[22,113595,113596],{},"actuator 是否引用正确 joint",[22,113598,113599,113601],{},[48,113600,101448],{}," 是否被赋值",[22,113603,113604,113605],{},"是否执行了 ",[48,113606,101057],{},[513,113608,113609],{"id":113609},"控制效果不好",[10,113611,113612],{},"正常。本章重点不是控制器最优，而是任务结构:",[41,113614,113617],{"className":113615,"code":113616,"language":5572,"meta":46},[5570],"obs → action → mj_step → reward → next_obs\n",[48,113618,113616],{"__ignoreMap":46},[513,113620,113622],{"id":113621},"tip-坐标不变化","tip 坐标不变化",[10,113624,102947],{},[19,113626,113627,113632,113640,113649],{},[22,113628,113629,113630,28767],{},"是否每步调用了 ",[48,113631,101057],{},[22,113633,113634,113635,101390,113637,28767],{},"是否写入了 ",[48,113636,106498],{},[48,113638,113639],{},"data.ctrl[1]",[22,113641,113642,113643,754,113646,28767],{},"actuator 是否正确引用 ",[48,113644,113645],{},"joint1",[48,113647,113648],{},"joint2",[22,113650,113651],{},"控制输入是否太小。",[513,113653,113654],{"id":113654},"目标点不会动",[10,113656,113657],{},"本章的 target 是固定 site：",[41,113659,113661],{"className":53439,"code":113660,"language":53441,"meta":46,"style":46},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[48,113662,113663],{"__ignoreMap":46},[51,113664,113665,113667,113669,113671,113673,113675,113677,113679,113682],{"class":53,"line":54},[51,113666,1452],{"class":65},[51,113668,103582],{"class":51672},[51,113670,15304],{"class":57},[51,113672,70],{"class":65},[51,113674,112330],{"class":61},[51,113676,101478],{"class":57},[51,113678,70],{"class":65},[51,113680,113681],{"class":61},"\"0.5 0 0.4\"",[51,113683,113684],{"class":65}," ...\u002F>\n",[10,113686,113687,113688,113690],{},"它直接挂在 ",[48,113689,102213],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[513,113692,113693],{"id":113693},"机械臂不像真实机械臂",[10,113695,113696],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[486,113698,102979],{"id":102978},[10,113700,113701],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[10,113703,113704],{},"核心公式：",[41,113706,113709],{"className":113707,"code":113708,"language":5572,"meta":46},[5570],"distance = ||tip - target||\nreward = -distance - action_cost\n",[48,113710,113708],{"__ignoreMap":46},[10,113712,113713],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[464,113715,113716],{},"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":46,"searchDepth":185,"depth":185,"links":113718},[113719,113720,113721,113726,113730,113731,113732,113740],{"id":101018,"depth":185,"text":101019},{"id":101141,"depth":185,"text":101142},{"id":101416,"depth":185,"text":101417,"children":113722},[113723,113724,113725],{"id":111922,"depth":202,"text":111923},{"id":111998,"depth":202,"text":111998},{"id":112028,"depth":202,"text":112029},{"id":101624,"depth":185,"text":101625,"children":113727},[113728,113729],{"id":101944,"depth":202,"text":101944},{"id":102080,"depth":202,"text":102080},{"id":102687,"depth":185,"text":102688},{"id":102719,"depth":185,"text":102720},{"id":102824,"depth":185,"text":102825,"children":113733},[113734,113735,113736,113737,113738,113739],{"id":113569,"depth":202,"text":113572},{"id":113584,"depth":202,"text":113584},{"id":113609,"depth":202,"text":113609},{"id":113621,"depth":202,"text":113622},{"id":113654,"depth":202,"text":113654},{"id":113693,"depth":202,"text":113693},{"id":102978,"depth":185,"text":102979},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111726,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113747,"title":113748,"body":113749,"description":46,"extension":469,"meta":117211,"navigation":205,"path":117212,"seo":117213,"stem":117214,"__hash__":117215},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113750,"toc":117182},[113751,113754,113756,113759,113762,113787,113790,113796,113799,113805,113807,113809,113833,113835,113853,113855,113898,113900,113927,113929,113932,113984,113987,113993,114002,114005,114043,114046,114085,114088,114096,114103,114106,114112,114114,114168,114175,114220,114223,114227,114243,114253,114255,115516,115518,115530,115532,115543,115545,115548,115569,115572,115575,115608,115614,115617,115650,115653,115656,115697,115702,115716,115719,115732,115737,115760,115762,115777,115787,115802,115809,115829,115844,115862,115865,115882,115890,115906,115912,115944,115957,115989,115999,116034,116048,116094,116108,116150,116161,116174,116180,116213,116216,116243,116253,116293,116303,116320,116327,116345,116348,116389,116402,116417,116420,116443,116446,116458,116461,116480,116485,116506,116509,116524,116527,116561,116573,116588,116591,116616,116619,116638,116641,116673,116676,116700,116706,116736,116743,116756,116759,116761,116763,116769,116772,116775,116787,116790,116792,116846,116848,116852,116858,116867,116870,116877,116879,116902,116905,116909,116911,116929,116935,116937,116970,116973,116979,116983,116986,117006,117011,117015,117022,117042,117047,117051,117054,117074,117077,117163,117167,117170,117176,117179],[14,113752,113748],{"id":113753},"_8gymnasium-风格强化学习接口基础",[486,113755,101019],{"id":101018},[10,113757,113758],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[10,113760,113761],{},"你将实现:",[41,113763,113765],{"className":170,"code":113764,"language":172,"meta":46,"style":46},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[48,113766,113767,113777],{"__ignoreMap":46},[51,113768,113769,113772,113774],{"class":53,"line":54},[51,113770,113771],{"class":65},"obs, info ",[51,113773,70],{"class":69},[51,113775,113776],{"class":65}," env.reset()\n",[51,113778,113779,113782,113784],{"class":53,"line":185},[51,113780,113781],{"class":65},"obs, reward, terminated, truncated, info ",[51,113783,70],{"class":69},[51,113785,113786],{"class":65}," env.step(action)\n",[10,113788,113789],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[10,113791,113792,113793,113795],{},"前面章节的代码都是“脚本式”的：在 ",[48,113794,102667],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[10,113797,113798],{},"可以先记住 Gymnasium 环境的核心交互：",[41,113800,113803],{"className":113801,"code":113802,"language":5572,"meta":46},[5570],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[48,113804,113802],{"__ignoreMap":46},[486,113806,101142],{"id":101141},[10,113808,101145],{},[41,113810,113811],{"className":43,"code":104760,"language":45,"meta":46,"style":46},[48,113812,113813],{"__ignoreMap":46},[51,113814,113815,113817,113819,113821,113823,113825,113827,113829,113831],{"class":53,"line":54},[51,113816,24958],{"class":57},[51,113818,26697],{"class":61},[51,113820,24215],{"class":61},[51,113822,26782],{"class":278},[51,113824,104775],{"class":61},[51,113826,101170],{"class":61},[51,113828,102873],{"class":61},[51,113830,101186],{"class":61},[51,113832,104784],{"class":61},[10,113834,103191],{},[41,113836,113838],{"className":43,"code":113837,"language":45,"meta":46,"style":46},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[48,113839,113840],{"__ignoreMap":46},[51,113841,113842,113844,113846,113848,113850],{"class":53,"line":54},[51,113843,24212],{"class":57},[51,113845,24215],{"class":61},[51,113847,101302],{"class":61},[51,113849,108083],{"class":61},[51,113851,113852],{"class":61}," gymnasium\n",[10,113854,103208],{},[41,113856,113858],{"className":43,"code":113857,"language":45,"meta":46,"style":46},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[48,113859,113860,113877,113886],{"__ignoreMap":46},[51,113861,113862,113864,113866,113868,113871,113873,113875],{"class":53,"line":54},[51,113863,30712],{"class":57},[51,113865,29558],{"class":61},[51,113867,25497],{"class":278},[51,113869,113870],{"class":61}," mujoco-gym-api",[51,113872,101347],{"class":61},[51,113874,101350],{"class":278},[51,113876,101353],{"class":278},[51,113878,113879,113881,113883],{"class":53,"line":185},[51,113880,30712],{"class":57},[51,113882,101360],{"class":61},[51,113884,113885],{"class":61}," mujoco-gym-api\n",[51,113887,113888,113890,113892,113894,113896],{"class":53,"line":202},[51,113889,24212],{"class":57},[51,113891,24215],{"class":61},[51,113893,101302],{"class":61},[51,113895,108083],{"class":61},[51,113897,113852],{"class":61},[10,113899,101376],{},[19,113901,113902,113912,113915,113921],{},[22,113903,113904,113905,113908,113909,28767],{},"本章使用 ",[48,113906,113907],{},"gymnasium","，不是旧版 ",[48,113910,113911],{},"gym",[22,113913,113914],{},"Gymnasium API 与旧 Gym API 有差异。",[22,113916,113917,113918,28767],{},"旧 Gym 常见返回值是 4 个: ",[48,113919,113920],{},"obs, reward, done, info",[22,113922,113923,113924,28767],{},"Gymnasium 返回值是 5 个: ",[48,113925,113926],{},"obs, reward, terminated, truncated, info",[486,113928,101417],{"id":101416},[10,113930,113931],{},"强化学习环境接口包含:",[679,113933,113934,113943],{},[682,113935,113936],{},[685,113937,113938,113941],{},[688,113939,113940],{"align":24119},"方法",[688,113942,103068],{"align":24119},[726,113944,113945,113955,113965,113975],{},[685,113946,113947,113952],{},[731,113948,113949],{"align":24119},[48,113950,113951],{},"reset()",[731,113953,113954],{"align":24119},"重置环境",[685,113956,113957,113962],{},[731,113958,113959],{"align":24119},[48,113960,113961],{},"step(action)",[731,113963,113964],{"align":24119},"执行动作",[685,113966,113967,113972],{},[731,113968,113969],{"align":24119},[48,113970,113971],{},"observation_space",[731,113973,113974],{"align":24119},"观测空间",[685,113976,113977,113982],{},[731,113978,113979],{"align":24119},[48,113980,113981],{},"action_space",[731,113983,24037],{"align":24119},[10,113985,113986],{},"一个最小环境需要完成:",[41,113988,113991],{"className":113989,"code":113990,"language":5572,"meta":46},[5570],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[48,113992,113990],{"__ignoreMap":46},[513,113994,113996,101390,113999,105010],{"id":113995},"terminated-和-truncated-的区别",[48,113997,113998],{},"terminated",[48,114000,114001],{},"truncated",[10,114003,114004],{},"Gymnasium 把“结束”拆成两个概念：",[679,114006,114007,114017],{},[682,114008,114009],{},[685,114010,114011,114013,114015],{},[688,114012,104946],{"align":24119},[688,114014,101072],{"align":24119},[688,114016,21570],{"align":24119},[726,114018,114019,114031],{},[685,114020,114021,114025,114028],{},[731,114022,114023],{"align":24119},[48,114024,113998],{},[731,114026,114027],{"align":24119},"任务自然结束",[731,114029,114030],{"align":24119},"机械臂到达目标、机器人摔倒",[685,114032,114033,114037,114040],{},[731,114034,114035],{"align":24119},[48,114036,114001],{},[731,114038,114039],{"align":24119},"因外部限制截断",[731,114041,114042],{"align":24119},"达到最大步数、时间限制",[10,114044,114045],{},"本章中：",[41,114047,114049],{"className":170,"code":114048,"language":172,"meta":46,"style":46},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[48,114050,114051,114066],{"__ignoreMap":46},[51,114052,114053,114056,114058,114061,114063],{"class":53,"line":54},[51,114054,114055],{"class":65},"terminated ",[51,114057,70],{"class":69},[51,114059,114060],{"class":65}," dist ",[51,114062,1452],{"class":69},[51,114064,114065],{"class":278}," 0.05\n",[51,114067,114068,114071,114073,114075,114078,114080,114082],{"class":53,"line":185},[51,114069,114070],{"class":65},"truncated ",[51,114072,70],{"class":69},[51,114074,39247],{"class":278},[51,114076,114077],{"class":65},".steps ",[51,114079,2108],{"class":69},[51,114081,39247],{"class":278},[51,114083,114084],{"class":65},".max_steps\n",[10,114086,114087],{},"也就是：",[19,114089,114090,114093],{},[22,114091,114092],{},"末端距离目标小于 0.05，任务成功结束。",[22,114094,114095],{},"步数超过上限，episode 被截断。",[513,114097,114099,101390,114101],{"id":114098},"observation_space-和-action_space",[48,114100,113971],{},[48,114102,113981],{},[10,114104,114105],{},"这两个对象告诉算法：",[41,114107,114110],{"className":114108,"code":114109,"language":5572,"meta":46},[5570],"观测长什么样\n动作允许多大\n",[48,114111,114109],{"__ignoreMap":46},[10,114113,15017],{},[41,114115,114117],{"className":170,"code":114116,"language":172,"meta":46,"style":46},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[48,114118,114119],{"__ignoreMap":46},[51,114120,114121,114123,114126,114128,114131,114134,114137,114139,114141,114144,114146,114148,114150,114152,114154,114156,114158,114161,114163,114165],{"class":53,"line":54},[51,114122,31201],{"class":278},[51,114124,114125],{"class":65},".action_space ",[51,114127,70],{"class":69},[51,114129,114130],{"class":65}," spaces.Box(",[51,114132,114133],{"class":248},"low",[51,114135,114136],{"class":69},"=-",[51,114138,102775],{"class":278},[51,114140,12819],{"class":65},[51,114142,114143],{"class":248},"high",[51,114145,70],{"class":69},[51,114147,102775],{"class":278},[51,114149,12819],{"class":65},[51,114151,96335],{"class":248},[51,114153,70],{"class":69},[51,114155,546],{"class":65},[51,114157,620],{"class":278},[51,114159,114160],{"class":65},",), ",[51,114162,93872],{"class":248},[51,114164,70],{"class":69},[51,114166,114167],{"class":65},"np.float32)\n",[10,114169,114170,114171,114174],{},"表示动作是 2 维数组，每个值都在 ",[48,114172,114173],{},"[-1, 1]"," 范围内。",[41,114176,114178],{"className":170,"code":114177,"language":172,"meta":46,"style":46},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[48,114179,114180],{"__ignoreMap":46},[51,114181,114182,114184,114187,114189,114191,114193,114195,114198,114200,114202,114204,114206,114208,114210,114212,114214,114216,114218],{"class":53,"line":54},[51,114183,31201],{"class":278},[51,114185,114186],{"class":65},".observation_space ",[51,114188,70],{"class":69},[51,114190,114130],{"class":65},[51,114192,114133],{"class":248},[51,114194,114136],{"class":69},[51,114196,114197],{"class":65},"np.inf, ",[51,114199,114143],{"class":248},[51,114201,70],{"class":69},[51,114203,114197],{"class":65},[51,114205,96335],{"class":248},[51,114207,70],{"class":69},[51,114209,546],{"class":65},[51,114211,988],{"class":278},[51,114213,114160],{"class":65},[51,114215,93872],{"class":248},[51,114217,70],{"class":69},[51,114219,114167],{"class":65},[10,114221,114222],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[513,114224,114226],{"id":114225},"frame_skip-是什么","frame_skip 是什么",[41,114228,114230],{"className":170,"code":114229,"language":172,"meta":46,"style":46},"self.frame_skip = 5\n",[48,114231,114232],{"__ignoreMap":46},[51,114233,114234,114236,114239,114241],{"class":53,"line":54},[51,114235,31201],{"class":278},[51,114237,114238],{"class":65},".frame_skip ",[51,114240,70],{"class":69},[51,114242,54799],{"class":278},[10,114244,114245,114246,114249,114250,114252],{},"表示外部调用一次 ",[48,114247,114248],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[48,114251,101587],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[486,114254,101625],{"id":101624},[41,114256,114258],{"className":170,"code":114257,"language":172,"meta":46,"style":46},"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",[48,114259,114260,114272,114278,114288,114299,114303,114307,114315,114320,114324,114328,114332,114336,114340,114344,114348,114353,114357,114361,114365,114370,114374,114378,114382,114386,114390,114394,114398,114402,114406,114410,114414,114418,114422,114440,114455,114459,114472,114482,114497,114514,114518,114539,114558,114583,114597,114601,114611,114623,114633,114637,114679,114717,114721,114731,114747,114762,114781,114788,114792,114805,114820,114835,114848,114867,114883,114887,114928,114943,114958,114962,115001,115012,115025,115029,115039,115048,115052,115062,115077,115095,115099,115110,115127,115140,115144,115154,115158,115169,115180,115184,115198,115212,115228,115232,115245,115262,115277,115284,115288,115292,115304,115314,115332,115344,115356,115360,115368,115384,115393,115402,115410,115452,115465,115470,115474,115492,115496,115500,115512],{"__ignoreMap":46},[51,114261,114262,114264,114267,114269],{"class":53,"line":54},[51,114263,179],{"class":69},[51,114265,114266],{"class":65}," gymnasium ",[51,114268,217],{"class":69},[51,114270,114271],{"class":65}," gym\n",[51,114273,114274,114276],{"class":53,"line":185},[51,114275,179],{"class":69},[51,114277,101673],{"class":65},[51,114279,114280,114282,114284,114286],{"class":53,"line":202},[51,114281,179],{"class":69},[51,114283,31758],{"class":65},[51,114285,217],{"class":69},[51,114287,31763],{"class":65},[51,114289,114290,114292,114294,114296],{"class":53,"line":209},[51,114291,226],{"class":69},[51,114293,114266],{"class":65},[51,114295,179],{"class":69},[51,114297,114298],{"class":65}," spaces\n",[51,114300,114301],{"class":53,"line":223},[51,114302,206],{"emptyLinePlaceholder":205},[51,114304,114305],{"class":53,"line":237},[51,114306,206],{"emptyLinePlaceholder":205},[51,114308,114309,114311,114313],{"class":53,"line":242},[51,114310,101686],{"class":278},[51,114312,13948],{"class":69},[51,114314,101691],{"class":61},[51,114316,114317],{"class":53,"line":257},[51,114318,114319],{"class":61},"\u003Cmujoco model=\"gym_reacher\">\n",[51,114321,114322],{"class":53,"line":262},[51,114323,112109],{"class":61},[51,114325,114326],{"class":53,"line":285},[51,114327,206],{"emptyLinePlaceholder":205},[51,114329,114330],{"class":53,"line":296},[51,114331,101710],{"class":61},[51,114333,114334],{"class":53,"line":307},[51,114335,112127],{"class":61},[51,114337,114338],{"class":53,"line":324},[51,114339,206],{"emptyLinePlaceholder":205},[51,114341,114342],{"class":53,"line":329},[51,114343,112136],{"class":61},[51,114345,114346],{"class":53,"line":334},[51,114347,112141],{"class":61},[51,114349,114350],{"class":53,"line":340},[51,114351,114352],{"class":61},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[51,114354,114355],{"class":53,"line":345},[51,114356,206],{"emptyLinePlaceholder":205},[51,114358,114359],{"class":53,"line":357},[51,114360,112155],{"class":61},[51,114362,114363],{"class":53,"line":366},[51,114364,112160],{"class":61},[51,114366,114367],{"class":53,"line":383},[51,114368,114369],{"class":61},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[51,114371,114372],{"class":53,"line":392},[51,114373,112170],{"class":61},[51,114375,114376],{"class":53,"line":403},[51,114377,106810],{"class":61},[51,114379,114380],{"class":53,"line":409},[51,114381,101739],{"class":61},[51,114383,114384],{"class":53,"line":414},[51,114385,101744],{"class":61},[51,114387,114388],{"class":53,"line":433},[51,114389,206],{"emptyLinePlaceholder":205},[51,114391,114392],{"class":53,"line":439},[51,114393,106827],{"class":61},[51,114395,114396],{"class":53,"line":444},[51,114397,112195],{"class":61},[51,114399,114400],{"class":53,"line":453},[51,114401,112200],{"class":61},[51,114403,114404],{"class":53,"line":2174},[51,114405,106837],{"class":61},[51,114407,114408],{"class":53,"line":2965},[51,114409,101749],{"class":61},[51,114411,114412],{"class":53,"line":2979},[51,114413,96070],{"class":61},[51,114415,114416],{"class":53,"line":2987},[51,114417,206],{"emptyLinePlaceholder":205},[51,114419,114420],{"class":53,"line":2992},[51,114421,206],{"emptyLinePlaceholder":205},[51,114423,114424,114426,114429,114431,114433,114435,114438],{"class":53,"line":2998},[51,114425,15078],{"class":69},[51,114427,114428],{"class":57}," ReacherEnv",[51,114430,546],{"class":65},[51,114432,113911],{"class":57},[51,114434,1100],{"class":65},[51,114436,114437],{"class":57},"Env",[51,114439,31164],{"class":65},[51,114441,114442,114445,114447,114449,114452],{"class":53,"line":3004},[51,114443,114444],{"class":65},"    metadata ",[51,114446,70],{"class":69},[51,114448,4833],{"class":65},[51,114450,114451],{"class":61},"\"render_modes\"",[51,114453,114454],{"class":65},": []}\n",[51,114456,114457],{"class":53,"line":3009},[51,114458,206],{"emptyLinePlaceholder":205},[51,114460,114461,114463,114465,114468,114470],{"class":53,"line":8332},[51,114462,31179],{"class":69},[51,114464,31182],{"class":278},[51,114466,114467],{"class":65},"(self) -> ",[51,114469,96058],{"class":278},[51,114471,363],{"class":65},[51,114473,114474,114476,114478,114480],{"class":53,"line":8356},[51,114475,31195],{"class":278},[51,114477,17644],{"class":65},[51,114479,31207],{"class":278},[51,114481,2366],{"class":65},[51,114483,114484,114486,114489,114491,114493,114495],{"class":53,"line":8361},[51,114485,31223],{"class":278},[51,114487,114488],{"class":65},".model ",[51,114490,70],{"class":69},[51,114492,101784],{"class":65},[51,114494,101686],{"class":278},[51,114496,282],{"class":65},[51,114498,114499,114501,114504,114506,114509,114511],{"class":53,"line":8367},[51,114500,31223],{"class":278},[51,114502,114503],{"class":65},".data ",[51,114505,70],{"class":69},[51,114507,114508],{"class":65}," mujoco.MjData(",[51,114510,31201],{"class":278},[51,114512,114513],{"class":65},".model)\n",[51,114515,114516],{"class":53,"line":8394},[51,114517,206],{"emptyLinePlaceholder":205},[51,114519,114520,114522,114525,114527,114530,114532,114535,114537],{"class":53,"line":8399},[51,114521,31223],{"class":278},[51,114523,114524],{"class":65},".tip_site_id ",[51,114526,70],{"class":69},[51,114528,114529],{"class":65}," mujoco.mj_name2id(",[51,114531,31201],{"class":278},[51,114533,114534],{"class":65},".model, mujoco.mjtObj.mjOBJ_SITE, ",[51,114536,111907],{"class":61},[51,114538,282],{"class":65},[51,114540,114541,114543,114546,114548,114550,114552,114554,114556],{"class":53,"line":8405},[51,114542,31223],{"class":278},[51,114544,114545],{"class":65},".target_site_id ",[51,114547,70],{"class":69},[51,114549,114529],{"class":65},[51,114551,31201],{"class":278},[51,114553,114534],{"class":65},[51,114555,112330],{"class":61},[51,114557,282],{"class":65},[51,114559,114560,114562,114564,114566,114568,114570,114573,114575,114577,114579,114581],{"class":53,"line":8417},[51,114561,369],{"class":69},[51,114563,39247],{"class":278},[51,114565,114524],{"class":65},[51,114567,1452],{"class":69},[51,114569,4479],{"class":278},[51,114571,114572],{"class":69}," or",[51,114574,39247],{"class":278},[51,114576,114545],{"class":65},[51,114578,1452],{"class":69},[51,114580,4479],{"class":278},[51,114582,363],{"class":65},[51,114584,114585,114588,114590,114592,114595],{"class":53,"line":8429},[51,114586,114587],{"class":69},"            raise",[51,114589,103807],{"class":278},[51,114591,546],{"class":65},[51,114593,114594],{"class":61},"\"required sites not found\"",[51,114596,282],{"class":65},[51,114598,114599],{"class":53,"line":8441},[51,114600,206],{"emptyLinePlaceholder":205},[51,114602,114603,114605,114607,114609],{"class":53,"line":10100},[51,114604,31223],{"class":278},[51,114606,114238],{"class":65},[51,114608,70],{"class":69},[51,114610,54799],{"class":278},[51,114612,114613,114615,114618,114620],{"class":53,"line":10125},[51,114614,31223],{"class":278},[51,114616,114617],{"class":65},".max_steps ",[51,114619,70],{"class":69},[51,114621,114622],{"class":278}," 200\n",[51,114624,114625,114627,114629,114631],{"class":53,"line":10148},[51,114626,31223],{"class":278},[51,114628,114077],{"class":65},[51,114630,70],{"class":69},[51,114632,47705],{"class":278},[51,114634,114635],{"class":53,"line":10172},[51,114636,206],{"emptyLinePlaceholder":205},[51,114638,114639,114641,114643,114645,114647,114649,114651,114653,114655,114657,114659,114661,114663,114665,114667,114669,114671,114673,114675,114677],{"class":53,"line":10177},[51,114640,31223],{"class":278},[51,114642,114125],{"class":65},[51,114644,70],{"class":69},[51,114646,114130],{"class":65},[51,114648,114133],{"class":248},[51,114650,114136],{"class":69},[51,114652,102775],{"class":278},[51,114654,12819],{"class":65},[51,114656,114143],{"class":248},[51,114658,70],{"class":69},[51,114660,102775],{"class":278},[51,114662,12819],{"class":65},[51,114664,96335],{"class":248},[51,114666,70],{"class":69},[51,114668,546],{"class":65},[51,114670,620],{"class":278},[51,114672,114160],{"class":65},[51,114674,93872],{"class":248},[51,114676,70],{"class":69},[51,114678,114167],{"class":65},[51,114680,114681,114683,114685,114687,114689,114691,114693,114695,114697,114699,114701,114703,114705,114707,114709,114711,114713,114715],{"class":53,"line":10182},[51,114682,31223],{"class":278},[51,114684,114186],{"class":65},[51,114686,70],{"class":69},[51,114688,114130],{"class":65},[51,114690,114133],{"class":248},[51,114692,114136],{"class":69},[51,114694,114197],{"class":65},[51,114696,114143],{"class":248},[51,114698,70],{"class":69},[51,114700,114197],{"class":65},[51,114702,96335],{"class":248},[51,114704,70],{"class":69},[51,114706,546],{"class":65},[51,114708,988],{"class":278},[51,114710,114160],{"class":65},[51,114712,93872],{"class":248},[51,114714,70],{"class":69},[51,114716,114167],{"class":65},[51,114718,114719],{"class":53,"line":10187},[51,114720,206],{"emptyLinePlaceholder":205},[51,114722,114723,114725,114728],{"class":53,"line":10196},[51,114724,31179],{"class":69},[51,114726,114727],{"class":57}," _get_obs",[51,114729,114730],{"class":65},"(self) -> np.ndarray:\n",[51,114732,114733,114735,114737,114739,114742,114744],{"class":53,"line":10201},[51,114734,112508],{"class":65},[51,114736,70],{"class":69},[51,114738,39247],{"class":278},[51,114740,114741],{"class":65},".data.site_xpos[",[51,114743,31201],{"class":278},[51,114745,114746],{"class":65},".tip_site_id].copy()\n",[51,114748,114749,114751,114753,114755,114757,114759],{"class":53,"line":10207},[51,114750,112521],{"class":65},[51,114752,70],{"class":69},[51,114754,39247],{"class":278},[51,114756,114741],{"class":65},[51,114758,31201],{"class":278},[51,114760,114761],{"class":65},".target_site_id].copy()\n",[51,114763,114764,114766,114768,114771,114773,114776,114778],{"class":53,"line":10228},[51,114765,110553],{"class":65},[51,114767,70],{"class":69},[51,114769,114770],{"class":65}," np.concatenate([",[51,114772,31201],{"class":278},[51,114774,114775],{"class":65},".data.qpos.copy(), ",[51,114777,31201],{"class":278},[51,114779,114780],{"class":65},".data.qvel.copy(), tip, target])\n",[51,114782,114783,114785],{"class":53,"line":10234},[51,114784,15136],{"class":69},[51,114786,114787],{"class":65}," obs.astype(np.float32)\n",[51,114789,114790],{"class":53,"line":10248},[51,114791,206],{"emptyLinePlaceholder":205},[51,114793,114794,114796,114799,114801,114803],{"class":53,"line":10254},[51,114795,31179],{"class":69},[51,114797,114798],{"class":57}," _get_reward",[51,114800,114467],{"class":65},[51,114802,584],{"class":278},[51,114804,363],{"class":65},[51,114806,114807,114809,114811,114813,114815,114817],{"class":53,"line":10281},[51,114808,112508],{"class":65},[51,114810,70],{"class":69},[51,114812,39247],{"class":278},[51,114814,114741],{"class":65},[51,114816,31201],{"class":278},[51,114818,114819],{"class":65},".tip_site_id]\n",[51,114821,114822,114824,114826,114828,114830,114832],{"class":53,"line":10290},[51,114823,112521],{"class":65},[51,114825,70],{"class":69},[51,114827,39247],{"class":278},[51,114829,114741],{"class":65},[51,114831,31201],{"class":278},[51,114833,114834],{"class":65},".target_site_id]\n",[51,114836,114837,114840,114842,114844,114846],{"class":53,"line":10296},[51,114838,114839],{"class":65},"        dist ",[51,114841,70],{"class":69},[51,114843,111972],{"class":65},[51,114845,1074],{"class":69},[51,114847,111977],{"class":65},[51,114849,114850,114853,114855,114857,114859,114862,114864],{"class":53,"line":10304},[51,114851,114852],{"class":65},"        control_cost ",[51,114854,70],{"class":69},[51,114856,112408],{"class":278},[51,114858,6902],{"class":69},[51,114860,114861],{"class":65}," np.sum(np.square(",[51,114863,31201],{"class":278},[51,114865,114866],{"class":65},".data.ctrl))\n",[51,114868,114869,114871,114873,114875,114877,114879,114881],{"class":53,"line":10309},[51,114870,15136],{"class":69},[51,114872,110168],{"class":278},[51,114874,546],{"class":65},[51,114876,1074],{"class":69},[51,114878,111967],{"class":65},[51,114880,1074],{"class":69},[51,114882,112430],{"class":65},[51,114884,114885],{"class":53,"line":16987},[51,114886,206],{"emptyLinePlaceholder":205},[51,114888,114889,114891,114894,114897,114899,114902,114904,114906,114908,114910,114912,114915,114918,114920,114922,114924,114926],{"class":53,"line":16993},[51,114890,31179],{"class":69},[51,114892,114893],{"class":57}," reset",[51,114895,114896],{"class":65},"(self, ",[51,114898,997],{"class":69},[51,114900,114901],{"class":65},", seed: ",[51,114903,549],{"class":278},[51,114905,25491],{"class":69},[51,114907,39307],{"class":278},[51,114909,13948],{"class":69},[51,114911,39307],{"class":278},[51,114913,114914],{"class":65},", options: ",[51,114916,114917],{"class":278},"dict",[51,114919,25491],{"class":69},[51,114921,39307],{"class":278},[51,114923,13948],{"class":69},[51,114925,39307],{"class":278},[51,114927,31164],{"class":65},[51,114929,114930,114932,114935,114938,114940],{"class":53,"line":17016},[51,114931,31195],{"class":278},[51,114933,114934],{"class":65},"().reset(",[51,114936,114937],{"class":248},"seed",[51,114939,70],{"class":69},[51,114941,114942],{"class":65},"seed)\n",[51,114944,114945,114948,114950,114953,114955],{"class":53,"line":17022},[51,114946,114947],{"class":65},"        mujoco.mj_resetData(",[51,114949,31201],{"class":278},[51,114951,114952],{"class":65},".model, ",[51,114954,31201],{"class":278},[51,114956,114957],{"class":65},".data)\n",[51,114959,114960],{"class":53,"line":17045},[51,114961,206],{"emptyLinePlaceholder":205},[51,114963,114964,114966,114969,114971,114973,114976,114978,114980,114982,114984,114986,114988,114990,114992,114994,114996,114998],{"class":53,"line":17059},[51,114965,31223],{"class":278},[51,114967,114968],{"class":65},".data.qpos[:] ",[51,114970,70],{"class":69},[51,114972,39247],{"class":278},[51,114974,114975],{"class":65},".np_random.uniform(",[51,114977,114133],{"class":248},[51,114979,114136],{"class":69},[51,114981,86582],{"class":278},[51,114983,12819],{"class":65},[51,114985,114143],{"class":248},[51,114987,70],{"class":69},[51,114989,86582],{"class":278},[51,114991,12819],{"class":65},[51,114993,31872],{"class":248},[51,114995,70],{"class":69},[51,114997,31201],{"class":278},[51,114999,115000],{"class":65},".model.nq)\n",[51,115002,115003,115005,115008,115010],{"class":53,"line":17079},[51,115004,31223],{"class":278},[51,115006,115007],{"class":65},".data.qvel[:] ",[51,115009,70],{"class":69},[51,115011,105133],{"class":278},[51,115013,115014,115017,115019,115021,115023],{"class":53,"line":17085},[51,115015,115016],{"class":65},"        mujoco.mj_forward(",[51,115018,31201],{"class":278},[51,115020,114952],{"class":65},[51,115022,31201],{"class":278},[51,115024,114957],{"class":65},[51,115026,115027],{"class":53,"line":17096},[51,115028,206],{"emptyLinePlaceholder":205},[51,115030,115031,115033,115035,115037],{"class":53,"line":17119},[51,115032,31223],{"class":278},[51,115034,114077],{"class":65},[51,115036,70],{"class":69},[51,115038,47705],{"class":278},[51,115040,115041,115043,115045],{"class":53,"line":17141},[51,115042,15136],{"class":69},[51,115044,39247],{"class":278},[51,115046,115047],{"class":65},"._get_obs(), {}\n",[51,115049,115050],{"class":53,"line":17146},[51,115051,206],{"emptyLinePlaceholder":205},[51,115053,115054,115056,115059],{"class":53,"line":17152},[51,115055,31179],{"class":69},[51,115057,115058],{"class":57}," step",[51,115060,115061],{"class":65},"(self, action):\n",[51,115063,115064,115066,115068,115071,115073,115075],{"class":53,"line":17166},[51,115065,110593],{"class":65},[51,115067,70],{"class":69},[51,115069,115070],{"class":65}," np.asarray(action, ",[51,115072,93872],{"class":248},[51,115074,70],{"class":69},[51,115076,114167],{"class":65},[51,115078,115079,115081,115083,115085,115087,115090,115092],{"class":53,"line":17179},[51,115080,110593],{"class":65},[51,115082,70],{"class":69},[51,115084,107819],{"class":65},[51,115086,31201],{"class":278},[51,115088,115089],{"class":65},".action_space.low, ",[51,115091,31201],{"class":278},[51,115093,115094],{"class":65},".action_space.high)\n",[51,115096,115097],{"class":53,"line":17184},[51,115098,206],{"emptyLinePlaceholder":205},[51,115100,115101,115103,115106,115108],{"class":53,"line":17198},[51,115102,31223],{"class":278},[51,115104,115105],{"class":65},".data.ctrl[:] ",[51,115107,70],{"class":69},[51,115109,107842],{"class":65},[51,115111,115112,115114,115116,115118,115120,115122,115124],{"class":53,"line":17203},[51,115113,3790],{"class":69},[51,115115,101873],{"class":65},[51,115117,26425],{"class":69},[51,115119,32818],{"class":278},[51,115121,546],{"class":65},[51,115123,31201],{"class":278},[51,115125,115126],{"class":65},".frame_skip):\n",[51,115128,115129,115132,115134,115136,115138],{"class":53,"line":17209},[51,115130,115131],{"class":65},"            mujoco.mj_step(",[51,115133,31201],{"class":278},[51,115135,114952],{"class":65},[51,115137,31201],{"class":278},[51,115139,114957],{"class":65},[51,115141,115142],{"class":53,"line":17214},[51,115143,206],{"emptyLinePlaceholder":205},[51,115145,115146,115148,115150,115152],{"class":53,"line":17228},[51,115147,31223],{"class":278},[51,115149,114077],{"class":65},[51,115151,9861],{"class":69},[51,115153,56071],{"class":278},[51,115155,115156],{"class":53,"line":17233},[51,115157,206],{"emptyLinePlaceholder":205},[51,115159,115160,115162,115164,115166],{"class":53,"line":17238},[51,115161,110553],{"class":65},[51,115163,70],{"class":69},[51,115165,39247],{"class":278},[51,115167,115168],{"class":65},"._get_obs()\n",[51,115170,115171,115173,115175,115177],{"class":53,"line":17252},[51,115172,110658],{"class":65},[51,115174,70],{"class":69},[51,115176,39247],{"class":278},[51,115178,115179],{"class":65},"._get_reward()\n",[51,115181,115182],{"class":53,"line":17264},[51,115183,206],{"emptyLinePlaceholder":205},[51,115185,115186,115188,115190,115192,115194,115196],{"class":53,"line":17269},[51,115187,112508],{"class":65},[51,115189,70],{"class":69},[51,115191,39247],{"class":278},[51,115193,114741],{"class":65},[51,115195,31201],{"class":278},[51,115197,114819],{"class":65},[51,115199,115200,115202,115204,115206,115208,115210],{"class":53,"line":17282},[51,115201,112521],{"class":65},[51,115203,70],{"class":69},[51,115205,39247],{"class":278},[51,115207,114741],{"class":65},[51,115209,31201],{"class":278},[51,115211,114834],{"class":65},[51,115213,115214,115216,115218,115220,115223,115225],{"class":53,"line":17287},[51,115215,114839],{"class":65},[51,115217,70],{"class":69},[51,115219,110168],{"class":278},[51,115221,115222],{"class":65},"(np.linalg.norm(tip ",[51,115224,1074],{"class":69},[51,115226,115227],{"class":65}," target))\n",[51,115229,115230],{"class":53,"line":17292},[51,115231,206],{"emptyLinePlaceholder":205},[51,115233,115234,115237,115239,115241,115243],{"class":53,"line":17297},[51,115235,115236],{"class":65},"        terminated ",[51,115238,70],{"class":69},[51,115240,114060],{"class":65},[51,115242,1452],{"class":69},[51,115244,114065],{"class":278},[51,115246,115247,115250,115252,115254,115256,115258,115260],{"class":53,"line":17310},[51,115248,115249],{"class":65},"        truncated ",[51,115251,70],{"class":69},[51,115253,39247],{"class":278},[51,115255,114077],{"class":65},[51,115257,2108],{"class":69},[51,115259,39247],{"class":278},[51,115261,114084],{"class":65},[51,115263,115264,115267,115269,115271,115274],{"class":53,"line":17315},[51,115265,115266],{"class":65},"        info ",[51,115268,70],{"class":69},[51,115270,4833],{"class":65},[51,115272,115273],{"class":61},"\"distance\"",[51,115275,115276],{"class":65},": dist}\n",[51,115278,115279,115281],{"class":53,"line":33008},[51,115280,15136],{"class":69},[51,115282,115283],{"class":65}," obs, reward, terminated, truncated, info\n",[51,115285,115286],{"class":53,"line":33014},[51,115287,206],{"emptyLinePlaceholder":205},[51,115289,115290],{"class":53,"line":33020},[51,115291,206],{"emptyLinePlaceholder":205},[51,115293,115294,115296,115298,115300,115302],{"class":53,"line":33026},[51,115295,348],{"class":69},[51,115297,2363],{"class":57},[51,115299,101770],{"class":65},[51,115301,96058],{"class":278},[51,115303,363],{"class":65},[51,115305,115306,115309,115311],{"class":53,"line":33032},[51,115307,115308],{"class":65},"    env ",[51,115310,70],{"class":69},[51,115312,115313],{"class":65}," ReacherEnv()\n",[51,115315,115316,115319,115321,115324,115326,115328,115330],{"class":53,"line":33043},[51,115317,115318],{"class":65},"    obs, info ",[51,115320,70],{"class":69},[51,115322,115323],{"class":65}," env.reset(",[51,115325,114937],{"class":248},[51,115327,70],{"class":69},[51,115329,733],{"class":278},[51,115331,282],{"class":65},[51,115333,115334,115336,115338,115341],{"class":53,"line":33049},[51,115335,31677],{"class":278},[51,115337,546],{"class":65},[51,115339,115340],{"class":61},"\"initial obs shape:\"",[51,115342,115343],{"class":65},", obs.shape)\n",[51,115345,115346,115348,115350,115353],{"class":53,"line":33069},[51,115347,31677],{"class":278},[51,115349,546],{"class":65},[51,115351,115352],{"class":61},"\"initial info:\"",[51,115354,115355],{"class":65},", info)\n",[51,115357,115358],{"class":53,"line":33075},[51,115359,206],{"emptyLinePlaceholder":205},[51,115361,115362,115364,115366],{"class":53,"line":33086},[51,115363,110524],{"class":65},[51,115365,70],{"class":69},[51,115367,105133],{"class":278},[51,115369,115370,115372,115374,115376,115378,115380,115382],{"class":53,"line":33092},[51,115371,3588],{"class":69},[51,115373,31992],{"class":65},[51,115375,26425],{"class":69},[51,115377,32818],{"class":278},[51,115379,546],{"class":65},[51,115381,1242],{"class":278},[51,115383,31164],{"class":65},[51,115385,115386,115388,115390],{"class":53,"line":33098},[51,115387,110593],{"class":65},[51,115389,70],{"class":69},[51,115391,115392],{"class":65}," env.action_space.sample()\n",[51,115394,115395,115398,115400],{"class":53,"line":33104},[51,115396,115397],{"class":65},"        obs, reward, terminated, truncated, info ",[51,115399,70],{"class":69},[51,115401,113786],{"class":65},[51,115403,115404,115406,115408],{"class":53,"line":33110},[51,115405,110668],{"class":65},[51,115407,9861],{"class":69},[51,115409,110673],{"class":65},[51,115411,115412,115414,115416,115418,115420,115423,115425,115427,115430,115432,115434,115437,115439,115441,115444,115446,115448,115450],{"class":53,"line":33116},[51,115413,32826],{"class":278},[51,115415,546],{"class":65},[51,115417,110702],{"class":61},[51,115419,110705],{"class":65},[51,115421,115422],{"class":61},"\"reward:\"",[51,115424,12819],{"class":65},[51,115426,32393],{"class":278},[51,115428,115429],{"class":65},"(reward, ",[51,115431,614],{"class":278},[51,115433,110716],{"class":65},[51,115435,115436],{"class":61},"\"distance:\"",[51,115438,12819],{"class":65},[51,115440,32393],{"class":278},[51,115442,115443],{"class":65},"(info[",[51,115445,115273],{"class":61},[51,115447,112573],{"class":65},[51,115449,614],{"class":278},[51,115451,30876],{"class":65},[51,115453,115454,115456,115459,115462],{"class":53,"line":33122},[51,115455,369],{"class":69},[51,115457,115458],{"class":65}," terminated ",[51,115460,115461],{"class":69},"or",[51,115463,115464],{"class":65}," truncated:\n",[51,115466,115467],{"class":53,"line":33128},[51,115468,115469],{"class":69},"            break\n",[51,115471,115472],{"class":53,"line":33148},[51,115473,206],{"emptyLinePlaceholder":205},[51,115475,115476,115478,115480,115482,115484,115486,115488,115490],{"class":53,"line":33154},[51,115477,31677],{"class":278},[51,115479,546],{"class":65},[51,115481,110747],{"class":61},[51,115483,12819],{"class":65},[51,115485,32393],{"class":278},[51,115487,110754],{"class":65},[51,115489,614],{"class":278},[51,115491,30876],{"class":65},[51,115493,115494],{"class":53,"line":33170},[51,115495,206],{"emptyLinePlaceholder":205},[51,115497,115498],{"class":53,"line":33176},[51,115499,206],{"emptyLinePlaceholder":205},[51,115501,115502,115504,115506,115508,115510],{"class":53,"line":33190},[51,115503,1940],{"class":69},[51,115505,31598],{"class":278},[51,115507,101931],{"class":69},[51,115509,101934],{"class":61},[51,115511,363],{"class":65},[51,115513,115514],{"class":53,"line":33196},[51,115515,101941],{"class":65},[10,115517,103942],{},[41,115519,115521],{"className":43,"code":115520,"language":45,"meta":46,"style":46},"touch ch8_gym_env.py\n",[48,115522,115523],{"__ignoreMap":46},[51,115524,115525,115527],{"class":53,"line":54},[51,115526,101655],{"class":57},[51,115528,115529],{"class":61}," ch8_gym_env.py\n",[10,115531,110815],{},[41,115533,115535],{"className":43,"code":115534,"language":45,"meta":46,"style":46},"python ch8_gym_env.py\n",[48,115536,115537],{"__ignoreMap":46},[51,115538,115539,115541],{"class":53,"line":54},[51,115540,172],{"class":57},[51,115542,115529],{"class":61},[513,115544,101944],{"id":101944},[10,115546,115547],{},"继承 Gymnasium 环境：",[41,115549,115551],{"className":170,"code":115550,"language":172,"meta":46,"style":46},"class ReacherEnv(gym.Env):\n",[48,115552,115553],{"__ignoreMap":46},[51,115554,115555,115557,115559,115561,115563,115565,115567],{"class":53,"line":54},[51,115556,15078],{"class":69},[51,115558,114428],{"class":57},[51,115560,546],{"class":65},[51,115562,113911],{"class":57},[51,115564,1100],{"class":65},[51,115566,114437],{"class":57},[51,115568,31164],{"class":65},[10,115570,115571],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[10,115573,115574],{},"初始化模型：",[41,115576,115578],{"className":170,"code":115577,"language":172,"meta":46,"style":46},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[48,115579,115580,115594],{"__ignoreMap":46},[51,115581,115582,115584,115586,115588,115590,115592],{"class":53,"line":54},[51,115583,31201],{"class":278},[51,115585,114488],{"class":65},[51,115587,70],{"class":69},[51,115589,101784],{"class":65},[51,115591,101686],{"class":278},[51,115593,282],{"class":65},[51,115595,115596,115598,115600,115602,115604,115606],{"class":53,"line":185},[51,115597,31201],{"class":278},[51,115599,114503],{"class":65},[51,115601,70],{"class":69},[51,115603,114508],{"class":65},[51,115605,31201],{"class":278},[51,115607,114513],{"class":65},[10,115609,115610,115611,115613],{},"这和前面章节一样，只是现在放到了类的 ",[48,115612,31207],{}," 里。",[10,115615,115616],{},"缓存 site ID：",[41,115618,115620],{"className":170,"code":115619,"language":172,"meta":46,"style":46},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[48,115621,115622,115636],{"__ignoreMap":46},[51,115623,115624,115626,115628,115630,115632,115634],{"class":53,"line":54},[51,115625,31201],{"class":278},[51,115627,114524],{"class":65},[51,115629,70],{"class":69},[51,115631,114529],{"class":65},[51,115633,89926],{"class":278},[51,115635,282],{"class":65},[51,115637,115638,115640,115642,115644,115646,115648],{"class":53,"line":185},[51,115639,31201],{"class":278},[51,115641,114545],{"class":65},[51,115643,70],{"class":69},[51,115645,114529],{"class":65},[51,115647,89926],{"class":278},[51,115649,282],{"class":65},[10,115651,115652],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[10,115654,115655],{},"reset：",[41,115657,115659],{"className":170,"code":115658,"language":172,"meta":46,"style":46},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[48,115660,115661],{"__ignoreMap":46},[51,115662,115663,115665,115667,115669,115671,115673,115675,115677,115679,115681,115683,115685,115687,115689,115691,115693,115695],{"class":53,"line":54},[51,115664,348],{"class":69},[51,115666,114893],{"class":57},[51,115668,114896],{"class":65},[51,115670,997],{"class":69},[51,115672,114901],{"class":65},[51,115674,549],{"class":278},[51,115676,25491],{"class":69},[51,115678,39307],{"class":278},[51,115680,13948],{"class":69},[51,115682,39307],{"class":278},[51,115684,114914],{"class":65},[51,115686,114917],{"class":278},[51,115688,25491],{"class":69},[51,115690,39307],{"class":278},[51,115692,13948],{"class":69},[51,115694,39307],{"class":278},[51,115696,31164],{"class":65},[10,115698,115699,115701],{},[48,115700,70428],{}," 做四件事：",[19,115703,115704,115707,115710,115713],{},[22,115705,115706],{},"设置随机种子。",[22,115708,115709],{},"重置 MuJoCo data。",[22,115711,115712],{},"随机初始化关节角。",[22,115714,115715],{},"返回初始观测和 info。",[10,115717,115718],{},"step：",[41,115720,115722],{"className":170,"code":115721,"language":172,"meta":46,"style":46},"def step(self, action):\n",[48,115723,115724],{"__ignoreMap":46},[51,115725,115726,115728,115730],{"class":53,"line":54},[51,115727,348],{"class":69},[51,115729,115058],{"class":57},[51,115731,115061],{"class":65},[10,115733,115734,115736],{},[48,115735,107506],{}," 做六件事：",[19,115738,115739,115742,115748,115751,115754,115757],{},[22,115740,115741],{},"检查并裁剪 action。",[22,115743,115744,115745,28767],{},"写入 ",[48,115746,115747],{},"self.data.ctrl",[22,115749,115750],{},"连续推进若干个 MuJoCo 物理步。",[22,115752,115753],{},"计算新观测。",[22,115755,115756],{},"计算奖励和结束条件。",[22,115758,115759],{},"返回 Gymnasium 标准五元组。",[513,115761,102080],{"id":102080},[41,115763,115765],{"className":170,"code":115764,"language":172,"meta":46,"style":46},"import gymnasium as gym\n",[48,115766,115767],{"__ignoreMap":46},[51,115768,115769,115771,115773,115775],{"class":53,"line":54},[51,115770,179],{"class":69},[51,115772,114266],{"class":65},[51,115774,217],{"class":69},[51,115776,114271],{"class":65},[10,115778,115779,115780,115782,115783,115786],{},"导入 Gymnasium，并起别名 ",[48,115781,113911],{},"。后面写 ",[48,115784,115785],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[41,115788,115790],{"className":170,"code":115789,"language":172,"meta":46,"style":46},"from gymnasium import spaces\n",[48,115791,115792],{"__ignoreMap":46},[51,115793,115794,115796,115798,115800],{"class":53,"line":54},[51,115795,226],{"class":69},[51,115797,114266],{"class":65},[51,115799,179],{"class":69},[51,115801,114298],{"class":65},[10,115803,115804,115805,115808],{},"导入空间定义工具。",[48,115806,115807],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[41,115810,115811],{"className":170,"code":115550,"language":172,"meta":46,"style":46},[48,115812,115813],{"__ignoreMap":46},[51,115814,115815,115817,115819,115821,115823,115825,115827],{"class":53,"line":54},[51,115816,15078],{"class":69},[51,115818,114428],{"class":57},[51,115820,546],{"class":65},[51,115822,113911],{"class":57},[51,115824,1100],{"class":65},[51,115826,114437],{"class":57},[51,115828,31164],{"class":65},[10,115830,115831,115832,115835,115836,115838,115839,101390,115841,115843],{},"定义一个类，名字叫 ",[48,115833,115834],{},"ReacherEnv","。括号里的 ",[48,115837,115785],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[48,115840,70428],{},[48,115842,107506],{}," 这两个核心方法。",[41,115845,115847],{"className":170,"code":115846,"language":172,"meta":46,"style":46},"metadata = {\"render_modes\": []}\n",[48,115848,115849],{"__ignoreMap":46},[51,115850,115851,115854,115856,115858,115860],{"class":53,"line":54},[51,115852,115853],{"class":65},"metadata ",[51,115855,70],{"class":69},[51,115857,4833],{"class":65},[51,115859,114451],{"class":61},[51,115861,114454],{"class":65},[10,115863,115864],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[41,115866,115868],{"className":170,"code":115867,"language":172,"meta":46,"style":46},"def __init__(self) -> None:\n",[48,115869,115870],{"__ignoreMap":46},[51,115871,115872,115874,115876,115878,115880],{"class":53,"line":54},[51,115873,348],{"class":69},[51,115875,31182],{"class":278},[51,115877,114467],{"class":65},[51,115879,96058],{"class":278},[51,115881,363],{"class":65},[10,115883,115884,115886,115887,28767],{},[48,115885,31207],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[48,115888,115889],{},"env = ReacherEnv()",[41,115891,115893],{"className":170,"code":115892,"language":172,"meta":46,"style":46},"super().__init__()\n",[48,115894,115895],{"__ignoreMap":46},[51,115896,115897,115900,115902,115904],{"class":53,"line":54},[51,115898,115899],{"class":278},"super",[51,115901,17644],{"class":65},[51,115903,31207],{"class":278},[51,115905,2366],{"class":65},[10,115907,115908,115909,115911],{},"调用父类 ",[48,115910,115785],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[41,115913,115914],{"className":170,"code":115577,"language":172,"meta":46,"style":46},[48,115915,115916,115930],{"__ignoreMap":46},[51,115917,115918,115920,115922,115924,115926,115928],{"class":53,"line":54},[51,115919,31201],{"class":278},[51,115921,114488],{"class":65},[51,115923,70],{"class":69},[51,115925,101784],{"class":65},[51,115927,101686],{"class":278},[51,115929,282],{"class":65},[51,115931,115932,115934,115936,115938,115940,115942],{"class":53,"line":185},[51,115933,31201],{"class":278},[51,115935,114503],{"class":65},[51,115937,70],{"class":69},[51,115939,114508],{"class":65},[51,115941,31201],{"class":278},[51,115943,114513],{"class":65},[10,115945,115946,115947,115949,115950,101390,115953,115956],{},"把 MuJoCo 模型和状态保存到 ",[48,115948,31201],{}," 上。",[48,115951,115952],{},"self.model",[48,115954,115955],{},"self.data"," 表示这个环境对象自己的模型和状态。",[41,115958,115959],{"className":170,"code":115619,"language":172,"meta":46,"style":46},[48,115960,115961,115975],{"__ignoreMap":46},[51,115962,115963,115965,115967,115969,115971,115973],{"class":53,"line":54},[51,115964,31201],{"class":278},[51,115966,114524],{"class":65},[51,115968,70],{"class":69},[51,115970,114529],{"class":65},[51,115972,89926],{"class":278},[51,115974,282],{"class":65},[51,115976,115977,115979,115981,115983,115985,115987],{"class":53,"line":185},[51,115978,31201],{"class":278},[51,115980,114545],{"class":65},[51,115982,70],{"class":69},[51,115984,114529],{"class":65},[51,115986,89926],{"class":278},[51,115988,282],{"class":65},[10,115990,115991,115992,101390,115995,115998],{},"提前查好 tip 和 target 的 site ID。这样 ",[48,115993,115994],{},"_get_obs",[48,115996,115997],{},"_get_reward"," 里就不用每次按名字查找。",[41,116000,116002],{"className":170,"code":116001,"language":172,"meta":46,"style":46},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[48,116003,116004,116014,116024],{"__ignoreMap":46},[51,116005,116006,116008,116010,116012],{"class":53,"line":54},[51,116007,31201],{"class":278},[51,116009,114238],{"class":65},[51,116011,70],{"class":69},[51,116013,54799],{"class":278},[51,116015,116016,116018,116020,116022],{"class":53,"line":185},[51,116017,31201],{"class":278},[51,116019,114617],{"class":65},[51,116021,70],{"class":69},[51,116023,114622],{"class":278},[51,116025,116026,116028,116030,116032],{"class":53,"line":202},[51,116027,31201],{"class":278},[51,116029,114077],{"class":65},[51,116031,70],{"class":69},[51,116033,47705],{"class":278},[10,116035,116036,116039,116040,116043,116044,116047],{},[48,116037,116038],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[48,116041,116042],{},"max_steps"," 是一个 episode 最多运行多少步。",[48,116045,116046],{},"steps"," 记录当前 episode 已经走了多少步。",[41,116049,116050],{"className":170,"code":114116,"language":172,"meta":46,"style":46},[48,116051,116052],{"__ignoreMap":46},[51,116053,116054,116056,116058,116060,116062,116064,116066,116068,116070,116072,116074,116076,116078,116080,116082,116084,116086,116088,116090,116092],{"class":53,"line":54},[51,116055,31201],{"class":278},[51,116057,114125],{"class":65},[51,116059,70],{"class":69},[51,116061,114130],{"class":65},[51,116063,114133],{"class":248},[51,116065,114136],{"class":69},[51,116067,102775],{"class":278},[51,116069,12819],{"class":65},[51,116071,114143],{"class":248},[51,116073,70],{"class":69},[51,116075,102775],{"class":278},[51,116077,12819],{"class":65},[51,116079,96335],{"class":248},[51,116081,70],{"class":69},[51,116083,546],{"class":65},[51,116085,620],{"class":278},[51,116087,114160],{"class":65},[51,116089,93872],{"class":248},[51,116091,70],{"class":69},[51,116093,114167],{"class":65},[10,116095,116096,116097,116100,116101,101390,116104,116107],{},"定义动作空间。",[48,116098,116099],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[48,116102,116103],{},"low=-1.0",[48,116105,116106],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[41,116109,116110],{"className":170,"code":114177,"language":172,"meta":46,"style":46},[48,116111,116112],{"__ignoreMap":46},[51,116113,116114,116116,116118,116120,116122,116124,116126,116128,116130,116132,116134,116136,116138,116140,116142,116144,116146,116148],{"class":53,"line":54},[51,116115,31201],{"class":278},[51,116117,114186],{"class":65},[51,116119,70],{"class":69},[51,116121,114130],{"class":65},[51,116123,114133],{"class":248},[51,116125,114136],{"class":69},[51,116127,114197],{"class":65},[51,116129,114143],{"class":248},[51,116131,70],{"class":69},[51,116133,114197],{"class":65},[51,116135,96335],{"class":248},[51,116137,70],{"class":69},[51,116139,546],{"class":65},[51,116141,988],{"class":278},[51,116143,114160],{"class":65},[51,116145,93872],{"class":248},[51,116147,70],{"class":69},[51,116149,114167],{"class":65},[10,116151,116152,116153,116156,116157,116160],{},"定义观测空间。",[48,116154,116155],{},"shape=(10,)"," 表示观测是 10 个数。",[48,116158,116159],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[41,116162,116164],{"className":170,"code":116163,"language":172,"meta":46,"style":46},"def _get_obs(self) -> np.ndarray:\n",[48,116165,116166],{"__ignoreMap":46},[51,116167,116168,116170,116172],{"class":53,"line":54},[51,116169,348],{"class":69},[51,116171,114727],{"class":57},[51,116173,114730],{"class":65},[10,116175,116176,116177,116179],{},"定义内部函数，用来生成观测。函数名前面的 ",[48,116178,1534],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[41,116181,116183],{"className":170,"code":116182,"language":172,"meta":46,"style":46},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[48,116184,116185,116199],{"__ignoreMap":46},[51,116186,116187,116189,116191,116193,116195,116197],{"class":53,"line":54},[51,116188,111939],{"class":65},[51,116190,70],{"class":69},[51,116192,39247],{"class":278},[51,116194,114741],{"class":65},[51,116196,31201],{"class":278},[51,116198,114746],{"class":65},[51,116200,116201,116203,116205,116207,116209,116211],{"class":53,"line":185},[51,116202,111949],{"class":65},[51,116204,70],{"class":69},[51,116206,39247],{"class":278},[51,116208,114741],{"class":65},[51,116210,31201],{"class":278},[51,116212,114761],{"class":65},[10,116214,116215],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[41,116217,116219],{"className":170,"code":116218,"language":172,"meta":46,"style":46},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[48,116220,116221,116237],{"__ignoreMap":46},[51,116222,116223,116225,116227,116229,116231,116233,116235],{"class":53,"line":54},[51,116224,111225],{"class":65},[51,116226,70],{"class":69},[51,116228,114770],{"class":65},[51,116230,31201],{"class":278},[51,116232,114775],{"class":65},[51,116234,31201],{"class":278},[51,116236,114780],{"class":65},[51,116238,116239,116241],{"class":53,"line":185},[51,116240,17429],{"class":69},[51,116242,114787],{"class":65},[10,116244,116245,116246,116249,116250,116252],{},"拼接观测，并转换成 ",[48,116247,116248],{},"float32","。很多强化学习库默认使用 ",[48,116251,116248],{},"，所以这里主动转换。",[41,116254,116255],{"className":170,"code":115658,"language":172,"meta":46,"style":46},[48,116256,116257],{"__ignoreMap":46},[51,116258,116259,116261,116263,116265,116267,116269,116271,116273,116275,116277,116279,116281,116283,116285,116287,116289,116291],{"class":53,"line":54},[51,116260,348],{"class":69},[51,116262,114893],{"class":57},[51,116264,114896],{"class":65},[51,116266,997],{"class":69},[51,116268,114901],{"class":65},[51,116270,549],{"class":278},[51,116272,25491],{"class":69},[51,116274,39307],{"class":278},[51,116276,13948],{"class":69},[51,116278,39307],{"class":278},[51,116280,114914],{"class":65},[51,116282,114917],{"class":278},[51,116284,25491],{"class":69},[51,116286,39307],{"class":278},[51,116288,13948],{"class":69},[51,116290,39307],{"class":278},[51,116292,31164],{"class":65},[10,116294,116295,116296,116298,116299,116302],{},"定义 reset。",[48,116297,114937],{}," 用来控制随机数，保证实验可以复现。",[48,116300,116301],{},"options"," 用来接收额外配置，本章暂时不用。",[41,116304,116306],{"className":170,"code":116305,"language":172,"meta":46,"style":46},"super().reset(seed=seed)\n",[48,116307,116308],{"__ignoreMap":46},[51,116309,116310,116312,116314,116316,116318],{"class":53,"line":54},[51,116311,115899],{"class":278},[51,116313,114934],{"class":65},[51,116315,114937],{"class":248},[51,116317,70],{"class":69},[51,116319,114942],{"class":65},[10,116321,116322,116323,116326],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[48,116324,116325],{},"self.np_random"," 生成可复现的随机数。",[41,116328,116330],{"className":170,"code":116329,"language":172,"meta":46,"style":46},"mujoco.mj_resetData(self.model, self.data)\n",[48,116331,116332],{"__ignoreMap":46},[51,116333,116334,116337,116339,116341,116343],{"class":53,"line":54},[51,116335,116336],{"class":65},"mujoco.mj_resetData(",[51,116338,31201],{"class":278},[51,116340,114952],{"class":65},[51,116342,31201],{"class":278},[51,116344,114957],{"class":65},[10,116346,116347],{},"把 MuJoCo 状态重置到默认状态。",[41,116349,116351],{"className":170,"code":116350,"language":172,"meta":46,"style":46},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[48,116352,116353],{"__ignoreMap":46},[51,116354,116355,116357,116359,116361,116363,116365,116367,116369,116371,116373,116375,116377,116379,116381,116383,116385,116387],{"class":53,"line":54},[51,116356,31201],{"class":278},[51,116358,114968],{"class":65},[51,116360,70],{"class":69},[51,116362,39247],{"class":278},[51,116364,114975],{"class":65},[51,116366,114133],{"class":248},[51,116368,114136],{"class":69},[51,116370,86582],{"class":278},[51,116372,12819],{"class":65},[51,116374,114143],{"class":248},[51,116376,70],{"class":69},[51,116378,86582],{"class":278},[51,116380,12819],{"class":65},[51,116382,31872],{"class":248},[51,116384,70],{"class":69},[51,116386,31201],{"class":278},[51,116388,115000],{"class":65},[10,116390,115712,116391,116394,116395,116398,116399,116401],{},[48,116392,116393],{},"[:]"," 表示修改整个数组。",[48,116396,116397],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[48,116400,102522],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[41,116403,116405],{"className":170,"code":116404,"language":172,"meta":46,"style":46},"self.data.qvel[:] = 0.0\n",[48,116406,116407],{"__ignoreMap":46},[51,116408,116409,116411,116413,116415],{"class":53,"line":54},[51,116410,31201],{"class":278},[51,116412,115007],{"class":65},[51,116414,70],{"class":69},[51,116416,105133],{"class":278},[10,116418,116419],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[41,116421,116423],{"className":170,"code":116422,"language":172,"meta":46,"style":46},"self.steps = 0\nreturn self._get_obs(), {}\n",[48,116424,116425,116435],{"__ignoreMap":46},[51,116426,116427,116429,116431,116433],{"class":53,"line":54},[51,116428,31201],{"class":278},[51,116430,114077],{"class":65},[51,116432,70],{"class":69},[51,116434,47705],{"class":278},[51,116436,116437,116439,116441],{"class":53,"line":185},[51,116438,17429],{"class":69},[51,116440,39247],{"class":278},[51,116442,115047],{"class":65},[10,116444,116445],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[41,116447,116448],{"className":170,"code":115721,"language":172,"meta":46,"style":46},[48,116449,116450],{"__ignoreMap":46},[51,116451,116452,116454,116456],{"class":53,"line":54},[51,116453,348],{"class":69},[51,116455,115058],{"class":57},[51,116457,115061],{"class":65},[10,116459,116460],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[41,116462,116464],{"className":170,"code":116463,"language":172,"meta":46,"style":46},"action = np.asarray(action, dtype=np.float32)\n",[48,116465,116466],{"__ignoreMap":46},[51,116467,116468,116470,116472,116474,116476,116478],{"class":53,"line":54},[51,116469,107814],{"class":65},[51,116471,70],{"class":69},[51,116473,115070],{"class":65},[51,116475,93872],{"class":248},[51,116477,70],{"class":69},[51,116479,114167],{"class":65},[10,116481,116482,116483,28767],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[48,116484,116248],{},[41,116486,116488],{"className":170,"code":116487,"language":172,"meta":46,"style":46},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[48,116489,116490],{"__ignoreMap":46},[51,116491,116492,116494,116496,116498,116500,116502,116504],{"class":53,"line":54},[51,116493,107814],{"class":65},[51,116495,70],{"class":69},[51,116497,107819],{"class":65},[51,116499,31201],{"class":278},[51,116501,115089],{"class":65},[51,116503,31201],{"class":278},[51,116505,115094],{"class":65},[10,116507,116508],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[41,116510,116512],{"className":170,"code":116511,"language":172,"meta":46,"style":46},"self.data.ctrl[:] = action\n",[48,116513,116514],{"__ignoreMap":46},[51,116515,116516,116518,116520,116522],{"class":53,"line":54},[51,116517,31201],{"class":278},[51,116519,115105],{"class":65},[51,116521,70],{"class":69},[51,116523,107842],{"class":65},[10,116525,116526],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[41,116528,116530],{"className":170,"code":116529,"language":172,"meta":46,"style":46},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[48,116531,116532,116548],{"__ignoreMap":46},[51,116533,116534,116536,116538,116540,116542,116544,116546],{"class":53,"line":54},[51,116535,3412],{"class":69},[51,116537,101873],{"class":65},[51,116539,26425],{"class":69},[51,116541,32818],{"class":278},[51,116543,546],{"class":65},[51,116545,31201],{"class":278},[51,116547,115126],{"class":65},[51,116549,116550,116553,116555,116557,116559],{"class":53,"line":185},[51,116551,116552],{"class":65},"    mujoco.mj_step(",[51,116554,31201],{"class":278},[51,116556,114952],{"class":65},[51,116558,31201],{"class":278},[51,116560,114957],{"class":65},[10,116562,116563,116564,116567,116568,116570,116571,28767],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[48,116565,116566],{},"frame_skip=5","，所以外部调用一次 ",[48,116569,114248],{},"，内部实际执行 5 次 ",[48,116572,101587],{},[41,116574,116576],{"className":170,"code":116575,"language":172,"meta":46,"style":46},"self.steps += 1\n",[48,116577,116578],{"__ignoreMap":46},[51,116579,116580,116582,116584,116586],{"class":53,"line":54},[51,116581,31201],{"class":278},[51,116583,114077],{"class":65},[51,116585,9861],{"class":69},[51,116587,56071],{"class":278},[10,116589,116590],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[41,116592,116594],{"className":170,"code":116593,"language":172,"meta":46,"style":46},"obs = self._get_obs()\nreward = self._get_reward()\n",[48,116595,116596,116606],{"__ignoreMap":46},[51,116597,116598,116600,116602,116604],{"class":53,"line":54},[51,116599,111225],{"class":65},[51,116601,70],{"class":69},[51,116603,39247],{"class":278},[51,116605,115168],{"class":65},[51,116607,116608,116610,116612,116614],{"class":53,"line":185},[51,116609,111376],{"class":65},[51,116611,70],{"class":69},[51,116613,39247],{"class":278},[51,116615,115179],{"class":65},[10,116617,116618],{},"计算新的观测和奖励。",[41,116620,116622],{"className":170,"code":116621,"language":172,"meta":46,"style":46},"dist = float(np.linalg.norm(tip - target))\n",[48,116623,116624],{"__ignoreMap":46},[51,116625,116626,116628,116630,116632,116634,116636],{"class":53,"line":54},[51,116627,111967],{"class":65},[51,116629,70],{"class":69},[51,116631,110168],{"class":278},[51,116633,115222],{"class":65},[51,116635,1074],{"class":69},[51,116637,115227],{"class":65},[10,116639,116640],{},"计算末端到目标的距离，并转换成 Python float。",[41,116642,116643],{"className":170,"code":114048,"language":172,"meta":46,"style":46},[48,116644,116645,116657],{"__ignoreMap":46},[51,116646,116647,116649,116651,116653,116655],{"class":53,"line":54},[51,116648,114055],{"class":65},[51,116650,70],{"class":69},[51,116652,114060],{"class":65},[51,116654,1452],{"class":69},[51,116656,114065],{"class":278},[51,116658,116659,116661,116663,116665,116667,116669,116671],{"class":53,"line":185},[51,116660,114070],{"class":65},[51,116662,70],{"class":69},[51,116664,39247],{"class":278},[51,116666,114077],{"class":65},[51,116668,2108],{"class":69},[51,116670,39247],{"class":278},[51,116672,114084],{"class":65},[10,116674,116675],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[41,116677,116679],{"className":170,"code":116678,"language":172,"meta":46,"style":46},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[48,116680,116681,116694],{"__ignoreMap":46},[51,116682,116683,116686,116688,116690,116692],{"class":53,"line":54},[51,116684,116685],{"class":65},"info ",[51,116687,70],{"class":69},[51,116689,4833],{"class":65},[51,116691,115273],{"class":61},[51,116693,115276],{"class":65},[51,116695,116696,116698],{"class":53,"line":185},[51,116697,17429],{"class":69},[51,116699,115283],{"class":65},[10,116701,116702,116705],{},[48,116703,116704],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[41,116707,116709],{"className":170,"code":116708,"language":172,"meta":46,"style":46},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[48,116710,116711,116720],{"__ignoreMap":46},[51,116712,116713,116716,116718],{"class":53,"line":54},[51,116714,116715],{"class":65},"env ",[51,116717,70],{"class":69},[51,116719,115313],{"class":65},[51,116721,116722,116724,116726,116728,116730,116732,116734],{"class":53,"line":185},[51,116723,113771],{"class":65},[51,116725,70],{"class":69},[51,116727,115323],{"class":65},[51,116729,114937],{"class":248},[51,116731,70],{"class":69},[51,116733,733],{"class":278},[51,116735,282],{"class":65},[10,116737,116738,116739,116742],{},"创建环境并重置。",[48,116740,116741],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[41,116744,116746],{"className":170,"code":116745,"language":172,"meta":46,"style":46},"action = env.action_space.sample()\n",[48,116747,116748],{"__ignoreMap":46},[51,116749,116750,116752,116754],{"class":53,"line":54},[51,116751,107814],{"class":65},[51,116753,70],{"class":69},[51,116755,115392],{"class":65},[10,116757,116758],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[486,116760,102688],{"id":102687},[10,116762,105856],{},[41,116764,116767],{"className":116765,"code":116766,"language":5572,"meta":46},[5570],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[48,116768,116766],{"__ignoreMap":46},[10,116770,116771],{},"这个环境已经具备强化学习环境的基本结构。",[10,116773,116774],{},"主函数里使用随机动作：",[41,116776,116777],{"className":170,"code":116745,"language":172,"meta":46,"style":46},[48,116778,116779],{"__ignoreMap":46},[51,116780,116781,116783,116785],{"class":53,"line":54},[51,116782,107814],{"class":65},[51,116784,70],{"class":69},[51,116786,115392],{"class":65},[10,116788,116789],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[486,116791,102720],{"id":102719},[19,116793,116794,116797,116803,116812,116821,116830,116836],{},[22,116795,116796],{},"运行程序。",[22,116798,116799,116800,28767],{},"确认 ",[48,116801,116802],{},"obs.shape == (10,)",[22,116804,111552,116805,116808,116809,28767],{},[48,116806,116807],{},"env.action_space","，应类似 ",[48,116810,116811],{},"Box(-1.0, 1.0, (2,), float32)",[22,116813,105957,116814,116817,116818,28767],{},[48,116815,116816],{},"self.max_steps = 10","，确认环境会更快 ",[48,116819,116820],{},"truncated=True",[22,116822,102783,116823,102786,116826,116829],{},[48,116824,116825],{},"terminated = dist \u003C 0.05",[48,116827,116828],{},"dist \u003C 0.2","，观察是否更容易结束。",[22,116831,102783,116832,116835],{},[48,116833,116834],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[22,116837,116838,116839,116841,116842,116845],{},"在 ",[48,116840,116704],{}," 里加入 ",[48,116843,116844],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[486,116847,102825],{"id":102824},[513,116849,116851],{"id":116850},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[10,116853,116854,116855,116857],{},"Gymnasium 的 ",[48,116856,107506],{}," 返回 5 个值:",[41,116859,116861],{"className":170,"code":116860,"language":172,"meta":46,"style":46},"obs, reward, terminated, truncated, info\n",[48,116862,116863],{"__ignoreMap":46},[51,116864,116865],{"class":53,"line":54},[51,116866,116860],{"class":65},[10,116868,116869],{},"不是旧 Gym 的 4 个值。",[513,116871,116873,116876],{"id":116872},"datactrl-action-维度错误",[48,116874,116875],{},"data.ctrl[:] = action"," 维度错误",[10,116878,102895],{},[41,116880,116882],{"className":170,"code":116881,"language":172,"meta":46,"style":46},"print(self.model.nu)\nprint(action.shape)\n",[48,116883,116884,116895],{"__ignoreMap":46},[51,116885,116886,116888,116890,116892],{"class":53,"line":54},[51,116887,30794],{"class":278},[51,116889,546],{"class":65},[51,116891,31201],{"class":278},[51,116893,116894],{"class":65},".model.nu)\n",[51,116896,116897,116899],{"class":53,"line":185},[51,116898,30794],{"class":278},[51,116900,116901],{"class":65},"(action.shape)\n",[10,116903,116904],{},"两者必须匹配。",[513,116906,116908],{"id":116907},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[10,116910,102834],{},[41,116912,116914],{"className":170,"code":116913,"language":172,"meta":46,"style":46},"mujoco.mj_forward(self.model, self.data)\n",[48,116915,116916],{"__ignoreMap":46},[51,116917,116918,116921,116923,116925,116927],{"class":53,"line":54},[51,116919,116920],{"class":65},"mujoco.mj_forward(",[51,116922,31201],{"class":278},[51,116924,114952],{"class":65},[51,116926,31201],{"class":278},[51,116928,114957],{"class":65},[513,116930,116932,116934],{"id":116931},"observation_space-维度和-obs-不一致",[48,116933,113971],{}," 维度和 obs 不一致",[10,116936,102947],{},[41,116938,116940],{"className":170,"code":116939,"language":172,"meta":46,"style":46},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[48,116941,116942,116952,116959],{"__ignoreMap":46},[51,116943,116944,116946,116948,116950],{"class":53,"line":54},[51,116945,111225],{"class":65},[51,116947,70],{"class":69},[51,116949,39247],{"class":278},[51,116951,115168],{"class":65},[51,116953,116954,116956],{"class":53,"line":185},[51,116955,30794],{"class":278},[51,116957,116958],{"class":65},"(obs.shape)\n",[51,116960,116961,116963,116965,116967],{"class":53,"line":202},[51,116962,30794],{"class":278},[51,116964,546],{"class":65},[51,116966,31201],{"class":278},[51,116968,116969],{"class":65},".observation_space.shape)\n",[10,116971,116972],{},"两者必须一致。本章观测是：",[41,116974,116977],{"className":116975,"code":116976,"language":5572,"meta":46},[5570],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[48,116978,116976],{"__ignoreMap":46},[513,116980,116982],{"id":116981},"action-超过范围","action 超过范围",[10,116984,116985],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[41,116987,116988],{"className":170,"code":116487,"language":172,"meta":46,"style":46},[48,116989,116990],{"__ignoreMap":46},[51,116991,116992,116994,116996,116998,117000,117002,117004],{"class":53,"line":54},[51,116993,107814],{"class":65},[51,116995,70],{"class":69},[51,116997,107819],{"class":65},[51,116999,31201],{"class":278},[51,117001,115089],{"class":65},[51,117003,31201],{"class":278},[51,117005,115094],{"class":65},[10,117007,117008,117009,28767],{},"这能避免无效动作直接写入 ",[48,117010,101448],{},[513,117012,117014],{"id":117013},"忘记返回-info","忘记返回 info",[10,117016,116854,117017,101390,117019,117021],{},[48,117018,70428],{},[48,117020,107506],{}," 都会返回 info：",[41,117023,117024],{"className":170,"code":113764,"language":172,"meta":46,"style":46},[48,117025,117026,117034],{"__ignoreMap":46},[51,117027,117028,117030,117032],{"class":53,"line":54},[51,117029,113771],{"class":65},[51,117031,70],{"class":69},[51,117033,113776],{"class":65},[51,117035,117036,117038,117040],{"class":53,"line":185},[51,117037,113781],{"class":65},[51,117039,70],{"class":69},[51,117041,113786],{"class":65},[10,117043,117044,117045,28767],{},"即使暂时没有额外信息，也返回 ",[48,117046,32834],{},[486,117048,117050],{"id":117049},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[10,117052,117053],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[19,117055,117056,117059,117062,117065,117068,117071],{},[22,117057,117058],{},"更稳定的 reward。",[22,117060,117061],{},"合理的 episode 长度。",[22,117063,117064],{},"可重复的随机目标采样。",[22,117066,117067],{},"render 接口。",[22,117069,117070],{},"环境注册代码。",[22,117072,117073],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[10,117075,117076],{},"如果只是自己写训练循环，最小形式是：",[41,117078,117080],{"className":170,"code":117079,"language":172,"meta":46,"style":46},"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",[48,117081,117082,117090,117106,117110,117126,117135,117144,117154],{"__ignoreMap":46},[51,117083,117084,117086,117088],{"class":53,"line":54},[51,117085,116715],{"class":65},[51,117087,70],{"class":69},[51,117089,115313],{"class":65},[51,117091,117092,117094,117096,117098,117100,117102,117104],{"class":53,"line":185},[51,117093,113771],{"class":65},[51,117095,70],{"class":69},[51,117097,115323],{"class":65},[51,117099,114937],{"class":248},[51,117101,70],{"class":69},[51,117103,733],{"class":278},[51,117105,282],{"class":65},[51,117107,117108],{"class":53,"line":202},[51,117109,206],{"emptyLinePlaceholder":205},[51,117111,117112,117114,117116,117118,117120,117122,117124],{"class":53,"line":209},[51,117113,3412],{"class":69},[51,117115,101873],{"class":65},[51,117117,26425],{"class":69},[51,117119,32818],{"class":278},[51,117121,546],{"class":65},[51,117123,6794],{"class":278},[51,117125,31164],{"class":65},[51,117127,117128,117131,117133],{"class":53,"line":223},[51,117129,117130],{"class":65},"    action ",[51,117132,70],{"class":69},[51,117134,115392],{"class":65},[51,117136,117137,117140,117142],{"class":53,"line":237},[51,117138,117139],{"class":65},"    obs, reward, terminated, truncated, info ",[51,117141,70],{"class":69},[51,117143,113786],{"class":65},[51,117145,117146,117148,117150,117152],{"class":53,"line":242},[51,117147,3488],{"class":69},[51,117149,115458],{"class":65},[51,117151,115461],{"class":69},[51,117153,115464],{"class":65},[51,117155,117156,117159,117161],{"class":53,"line":257},[51,117157,117158],{"class":65},"        obs, info ",[51,117160,70],{"class":69},[51,117162,113776],{"class":65},[486,117164,117166],{"id":117165},"_9本章小结","9.本章小结",[10,117168,117169],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[41,117171,117174],{"className":117172,"code":117173,"language":5572,"meta":46},[5570],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[48,117175,117173],{"__ignoreMap":46},[10,117177,117178],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[464,117180,117181],{},"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":46,"searchDepth":185,"depth":185,"links":117183},[117184,117185,117186,117193,117197,117198,117199,117209,117210],{"id":101018,"depth":185,"text":101019},{"id":101141,"depth":185,"text":101142},{"id":101416,"depth":185,"text":101417,"children":117187},[117188,117190,117192],{"id":113995,"depth":202,"text":117189},"terminated 和 truncated 的区别",{"id":114098,"depth":202,"text":117191},"observation_space 和 action_space",{"id":114225,"depth":202,"text":114226},{"id":101624,"depth":185,"text":101625,"children":117194},[117195,117196],{"id":101944,"depth":202,"text":101944},{"id":102080,"depth":202,"text":102080},{"id":102687,"depth":185,"text":102688},{"id":102719,"depth":185,"text":102720},{"id":102824,"depth":185,"text":102825,"children":117200},[117201,117202,117204,117205,117207,117208],{"id":116850,"depth":202,"text":116851},{"id":116872,"depth":202,"text":117203},"data.ctrl[:] = action 维度错误",{"id":116907,"depth":202,"text":116908},{"id":116931,"depth":202,"text":117206},"observation_space 维度和 obs 不一致",{"id":116981,"depth":202,"text":116982},{"id":117013,"depth":202,"text":117014},{"id":117049,"depth":185,"text":117050},{"id":117165,"depth":185,"text":117166},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113748,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117217,"title":117218,"body":117219,"description":117642,"extension":469,"meta":117643,"navigation":205,"path":117644,"seo":117645,"stem":117646,"__hash__":117647},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117220,"toc":117632},[117221,117225,117228,117231,117251,117257,117263,117273,117276,117279,117299,117302,117306,117309,117315,117318,117332,117335,117338,117412,117415,117421,117424,117447,117450,117500,117503,117509,117512,117515,117518,117537,117540,117546,117549,117552,117555,117575,117578,117581,117584,117629],[14,117222,117224],{"id":117223},"mujoco-学习","MuJoCo 学习",[10,117226,117227],{},"初版",[10,117229,117230],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[19,117232,117233,117236,117239,117248],{},[22,117234,117235],{},"MuJoCo 模型文件在描述什么。",[22,117237,117238],{},"Python 代码怎样读取和推进仿真。",[22,117240,117241,754,117243,754,117245,117247],{},[48,117242,104402],{},[48,117244,104732],{},[48,117246,104735],{}," 这些数组为什么重要。",[22,117249,117250],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[10,117252,117253,117254,117256],{},"默认环境为 Fedora 44、Python >= 3.10、",[48,117255,101399],{}," 官方 Python bindings。",[10,117258,117259,117260,117262],{},"注意：本文禁止使用 ",[48,117261,101384],{},"。所有示例均使用：",[41,117264,117265],{"className":170,"code":101950,"language":172,"meta":46,"style":46},[48,117266,117267],{"__ignoreMap":46},[51,117268,117269,117271],{"class":53,"line":54},[51,117270,179],{"class":69},[51,117272,101673],{"class":65},[486,117274,117275],{"id":117275},"适合谁阅读",[10,117277,117278],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[19,117280,117281,117284,117287,117290],{},[22,117282,117283],{},"没学过 MuJoCo，只会一点 Python。",[22,117285,117286],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[22,117288,117289],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[22,117291,117292,117293,117295,117296,117298],{},"以前接触过 ",[48,117294,101384],{},"，现在想迁移到官方 ",[48,117297,101393],{}," Python bindings。",[10,117300,117301],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[486,117303,117305],{"id":117304},"mujoco-到底是什么","MuJoCo 到底是什么",[10,117307,117308],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[41,117310,117313],{"className":117311,"code":117312,"language":5572,"meta":46},[5570],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[48,117314,117312],{"__ignoreMap":46},[10,117316,117317],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[19,117319,117320,117323,117326,117329],{},[22,117321,117322],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[22,117324,117325],{},"快速测试控制算法，不必一开始就上真实机器人。",[22,117327,117328],{},"生成强化学习环境。",[22,117330,117331],{},"采集状态、动作、图像、奖励等训练数据。",[486,117333,117334],{"id":117334},"学习前的心智模型",[10,117336,117337],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[679,117339,117340,117352],{},[682,117341,117342],{},[685,117343,117344,117347,117350],{},[688,117345,117346],{"align":24119},"部分",[688,117348,117349],{"align":24119},"负责什么",[688,117351,21570],{"align":24119},[726,117353,117354,117365,117377,117389,117401],{},[685,117355,117356,117359,117362],{},[731,117357,117358],{"align":24119},"MJCF XML",[731,117360,117361],{"align":24119},"定义世界和机器人结构",[731,117363,117364],{"align":24119},"地面、盒子、关节、电机、摄像头",[685,117366,117367,117371,117374],{},[731,117368,117369],{"align":24119},[48,117370,101081],{},[731,117372,117373],{"align":24119},"编译后的静态模型",[731,117375,117376],{"align":24119},"有几个关节、有几个电机、时间步长是多少",[685,117378,117379,117383,117386],{},[731,117380,117381],{"align":24119},[48,117382,101091],{},[731,117384,117385],{"align":24119},"运行中的动态状态",[731,117387,117388],{"align":24119},"当前时间、位置、速度、电机输入",[685,117390,117391,117395,117398],{},[731,117392,117393],{"align":24119},[48,117394,101587],{},[731,117396,117397],{"align":24119},"推进一步物理仿真",[731,117399,117400],{"align":24119},"根据重力、力、碰撞更新状态",[685,117402,117403,117406,117409],{},[731,117404,117405],{"align":24119},"Viewer \u002F Renderer",[731,117407,117408],{"align":24119},"把仿真显示出来",[731,117410,117411],{"align":24119},"打开窗口或保存图片",[10,117413,117414],{},"一句话总结：",[41,117416,117419],{"className":117417,"code":117418,"language":5572,"meta":46},[5570],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[48,117420,117418],{"__ignoreMap":46},[10,117422,117423],{},"参考来源：",[1549,117425,117426,117433,117440],{},[22,117427,117428,117429],{},"MuJoCo Python 官方文档：",[780,117430,117431],{"href":117431,"rel":117432},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24246],[22,117434,117435,117436],{},"MuJoCo XML Reference：",[780,117437,117438],{"href":117438,"rel":117439},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24246],[22,117441,117442,117443],{},"MuJoCo Overview：",[780,117444,117445],{"href":117445,"rel":117446},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24246],[486,117448,117449],{"id":117449},"章节目录",[19,117451,117452,117458,117464,117470,117476,117482,117488,117494],{},[22,117453,117454],{},[780,117455,117457],{"href":117456},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[22,117459,117460],{},[780,117461,117463],{"href":117462},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[22,117465,117466],{},[780,117467,117469],{"href":117468},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[22,117471,117472],{},[780,117473,117475],{"href":117474},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[22,117477,117478],{},[780,117479,117481],{"href":117480},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[22,117483,117484],{},[780,117485,117487],{"href":117486},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[22,117489,117490],{},[780,117491,117493],{"href":117492},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[22,117495,117496],{},[780,117497,117499],{"href":117498},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[486,117501,117502],{"id":117502},"推荐学习路线",[41,117504,117507],{"className":117505,"code":117506,"language":5572,"meta":46},[5570],"环境安装\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",[48,117508,117506],{"__ignoreMap":46},[10,117510,117511],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[486,117513,117514],{"id":117514},"建议的目录结构",[10,117516,117517],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[41,117519,117521],{"className":43,"code":117520,"language":45,"meta":46,"style":46},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[48,117522,117523,117531],{"__ignoreMap":46},[51,117524,117525,117527,117529],{"class":53,"line":54},[51,117526,101638],{"class":57},[51,117528,29598],{"class":278},[51,117530,101643],{"class":61},[51,117532,117533,117535],{"class":53,"line":185},[51,117534,101648],{"class":278},[51,117536,101643],{"class":61},[10,117538,117539],{},"每一章的代码都单独保存：",[41,117541,117544],{"className":117542,"code":117543,"language":5572,"meta":46},[5570],"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",[48,117545,117543],{"__ignoreMap":46},[10,117547,117548],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[486,117550,117551],{"id":117551},"学习方法",[10,117553,117554],{},"每章建议按这个顺序操作：",[19,117556,117557,117560,117563,117566,117569,117572],{},[22,117558,117559],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[22,117561,117562],{},"复制最小可运行代码，保存成指定文件。",[22,117564,117565],{},"运行代码，确认没有报错。",[22,117567,117568],{},"对照“运行结果说明”理解输出。",[22,117570,117571],{},"做“验证步骤”，主动改一两个参数。",[22,117573,117574],{},"遇到报错先看“常见错误与解决方案”。",[10,117576,117577],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[486,117579,117580],{"id":117580},"全局排错顺序",[10,117582,117583],{},"遇到问题时，按下面顺序查：",[19,117585,117586,117592,117598,117603,117606,117609,117616,117626],{},[22,117587,117588,117589],{},"Python 环境是否激活：",[48,117590,117591],{},"which python",[22,117593,117594,117595],{},"MuJoCo 是否能导入：",[48,117596,117597],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[22,117599,117600,117601],{},"是否误装了 ",[48,117602,101384],{},[22,117604,117605],{},"XML 标签是否闭合、属性是否拼写正确",[22,117607,117608],{},"actuator 引用的 joint 名字是否存在",[22,117610,117611,117613,117614],{},[48,117612,101448],{}," 的长度是否等于 ",[48,117615,102530],{},[22,117617,105957,117618,82911,117620,117622,117623],{},[48,117619,104402],{},[48,117621,104732],{}," 后是否调用了 ",[48,117624,117625],{},"mujoco.mj_forward",[22,117627,117628],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[464,117630,117631],{},"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":46,"searchDepth":185,"depth":185,"links":117633},[117634,117635,117636,117637,117638,117639,117640,117641],{"id":117275,"depth":185,"text":117275},{"id":117304,"depth":185,"text":117305},{"id":117334,"depth":185,"text":117334},{"id":117449,"depth":185,"text":117449},{"id":117502,"depth":185,"text":117502},{"id":117514,"depth":185,"text":117514},{"id":117551,"depth":185,"text":117551},{"id":117580,"depth":185,"text":117580},"仿真搭建。",{"category":471},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117218,"description":117642},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117649,"title":117650,"body":117651,"description":23760,"extension":469,"meta":118106,"navigation":205,"path":118107,"seo":118108,"stem":118109,"__hash__":118110},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117652,"toc":118104},[117653,117656,117659,117665,118101],[14,117654,117650],{"id":117655},"_1-最常用的基本操作更新",[10,117657,117658],{},"装linux系统教程：",[10,117660,117661],{},[780,117662,117663],{"href":117663,"rel":117664},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24246],[41,117666,117670],{"className":117667,"code":117668,"language":117669,"meta":46,"style":46},"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",[48,117671,117672,117677,117682,117691,117696,117705,117710,117730,117735,117746,117751,117760,117765,117793,117798,117817,117822,117841,117845,117850,117866,117870,117875,117905,117909,117914,117930,117934,117939,117954,117958,117963,117979,117983,117988,118000,118012,118016,118021,118038,118042,118047,118065,118069,118074,118083,118087,118092],{"__ignoreMap":46},[51,117673,117674],{"class":53,"line":54},[51,117675,117676],{"class":601},"#更新相关的知识\n",[51,117678,117679],{"class":53,"line":185},[51,117680,117681],{"class":601},"# 更新软件包列表（从服务器获取最新软件信息）\n",[51,117683,117684,117686,117689],{"class":53,"line":202},[51,117685,24958],{"class":57},[51,117687,117688],{"class":61}," apt",[51,117690,26624],{"class":61},[51,117692,117693],{"class":53,"line":209},[51,117694,117695],{"class":601},"# 升级所有可更新的软件包（不删除旧包）\n",[51,117697,117698,117700,117702],{"class":53,"line":223},[51,117699,24958],{"class":57},[51,117701,117688],{"class":61},[51,117703,117704],{"class":61}," upgrade\n",[51,117706,117707],{"class":53,"line":237},[51,117708,117709],{"class":601},"#更新和升级软件包\n",[51,117711,117712,117714,117716,117719,117721,117723,117725,117728],{"class":53,"line":242},[51,117713,24958],{"class":57},[51,117715,117688],{"class":61},[51,117717,117718],{"class":61}," update",[51,117720,26572],{"class":65},[51,117722,24958],{"class":57},[51,117724,117688],{"class":61},[51,117726,117727],{"class":61}," upgrade",[51,117729,101353],{"class":278},[51,117731,117732],{"class":53,"line":257},[51,117733,117734],{"class":601},"#列出可更新的软件包及版本信息\n",[51,117736,117737,117740,117743],{"class":53,"line":262},[51,117738,117739],{"class":57},"apt",[51,117741,117742],{"class":61}," list",[51,117744,117745],{"class":278}," --upgradable\n",[51,117747,117748],{"class":53,"line":285},[51,117749,117750],{"class":601},"#彻底升级（处理依赖关系，可能删除旧包）\n",[51,117752,117753,117755,117757],{"class":53,"line":296},[51,117754,24958],{"class":57},[51,117756,117688],{"class":61},[51,117758,117759],{"class":61}," full-upgrade\n",[51,117761,117762],{"class":53,"line":307},[51,117763,117764],{"class":601},"#设置指定版本\n",[51,117766,117767,117769,117771,117773,117775,117778,117780,117782,117784,117786,117789,117791],{"class":53,"line":324},[51,117768,24958],{"class":57},[51,117770,117688],{"class":61},[51,117772,24215],{"class":61},[51,117774,29284],{"class":69},[51,117776,117777],{"class":61},"package_nam",[51,117779,617],{"class":65},[51,117781,1502],{"class":69},[51,117783,70],{"class":61},[51,117785,1452],{"class":69},[51,117787,117788],{"class":61},"version_numbe",[51,117790,1212],{"class":65},[51,117792,51679],{"class":69},[51,117794,117795],{"class":53,"line":329},[51,117796,117797],{"class":601},"#只安装软件包不升级\n",[51,117799,117800,117802,117804,117806,117808,117810,117812,117814],{"class":53,"line":334},[51,117801,24958],{"class":57},[51,117803,117688],{"class":61},[51,117805,24215],{"class":61},[51,117807,29284],{"class":69},[51,117809,117777],{"class":61},[51,117811,617],{"class":65},[51,117813,1502],{"class":69},[51,117815,117816],{"class":278}," --no-upgrade\n",[51,117818,117819],{"class":53,"line":340},[51,117820,117821],{"class":601},"#只升级，不存在就不安装\n",[51,117823,117824,117826,117828,117830,117832,117834,117836,117838],{"class":53,"line":345},[51,117825,24958],{"class":57},[51,117827,117688],{"class":61},[51,117829,24215],{"class":61},[51,117831,29284],{"class":69},[51,117833,117777],{"class":61},[51,117835,617],{"class":65},[51,117837,1502],{"class":69},[51,117839,117840],{"class":278}," --only-upgrade\n",[51,117842,117843],{"class":53,"line":357},[51,117844,206],{"emptyLinePlaceholder":205},[51,117846,117847],{"class":53,"line":366},[51,117848,117849],{"class":601},"#安装指定的软件命令\n",[51,117851,117852,117854,117856,117858,117860,117862,117864],{"class":53,"line":383},[51,117853,24958],{"class":57},[51,117855,117688],{"class":61},[51,117857,24215],{"class":61},[51,117859,29284],{"class":69},[51,117861,117777],{"class":61},[51,117863,617],{"class":65},[51,117865,51679],{"class":69},[51,117867,117868],{"class":53,"line":392},[51,117869,206],{"emptyLinePlaceholder":205},[51,117871,117872],{"class":53,"line":403},[51,117873,117874],{"class":601},"#安装多个软件包\n",[51,117876,117877,117879,117881,117883,117885,117888,117891,117893,117895,117898,117900,117902],{"class":53,"line":409},[51,117878,24958],{"class":57},[51,117880,117688],{"class":61},[51,117882,24215],{"class":61},[51,117884,29284],{"class":69},[51,117886,117887],{"class":61},"package_",[51,117889,117890],{"class":69},"1>",[51,117892,29284],{"class":69},[51,117894,117887],{"class":61},[51,117896,117897],{"class":69},"2>",[51,117899,29284],{"class":69},[51,117901,117887],{"class":61},[51,117903,117904],{"class":69},"3>\n",[51,117906,117907],{"class":53,"line":414},[51,117908,206],{"emptyLinePlaceholder":205},[51,117910,117911],{"class":53,"line":433},[51,117912,117913],{"class":601},"#更新指定的软件命令\n",[51,117915,117916,117918,117920,117922,117924,117926,117928],{"class":53,"line":439},[51,117917,24958],{"class":57},[51,117919,117688],{"class":61},[51,117921,117718],{"class":61},[51,117923,29284],{"class":69},[51,117925,117777],{"class":61},[51,117927,617],{"class":65},[51,117929,51679],{"class":69},[51,117931,117932],{"class":53,"line":444},[51,117933,206],{"emptyLinePlaceholder":205},[51,117935,117936],{"class":53,"line":453},[51,117937,117938],{"class":601},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[51,117940,117941,117943,117946,117948,117950,117952],{"class":53,"line":2174},[51,117942,117739],{"class":57},[51,117944,117945],{"class":61}," show",[51,117947,29284],{"class":69},[51,117949,117777],{"class":61},[51,117951,617],{"class":65},[51,117953,51679],{"class":69},[51,117955,117956],{"class":53,"line":2965},[51,117957,206],{"emptyLinePlaceholder":205},[51,117959,117960],{"class":53,"line":2979},[51,117961,117962],{"class":601},"#删除软件包命令\n",[51,117964,117965,117967,117969,117971,117973,117975,117977],{"class":53,"line":2987},[51,117966,24958],{"class":57},[51,117968,117688],{"class":61},[51,117970,26461],{"class":61},[51,117972,29284],{"class":69},[51,117974,117777],{"class":61},[51,117976,617],{"class":65},[51,117978,51679],{"class":69},[51,117980,117981],{"class":53,"line":2992},[51,117982,206],{"emptyLinePlaceholder":205},[51,117984,117985],{"class":53,"line":2998},[51,117986,117987],{"class":601},"# 清理旧版本和缓存（释放磁盘空间）\n",[51,117989,117990,117992,117994,117997],{"class":53,"line":3004},[51,117991,24958],{"class":57},[51,117993,117688],{"class":61},[51,117995,117996],{"class":61}," autoremove",[51,117998,117999],{"class":601},"  # 删除不再需要的依赖和库文件\n",[51,118001,118002,118004,118006,118009],{"class":53,"line":3009},[51,118003,24958],{"class":57},[51,118005,117688],{"class":61},[51,118007,118008],{"class":61}," clean",[51,118010,118011],{"class":601},"       # 清理下载的缓存包\n",[51,118013,118014],{"class":53,"line":8332},[51,118015,206],{"emptyLinePlaceholder":205},[51,118017,118018],{"class":53,"line":8356},[51,118019,118020],{"class":601},"#移除软件包及配置文件\n",[51,118022,118023,118025,118027,118030,118032,118034,118036],{"class":53,"line":8361},[51,118024,24958],{"class":57},[51,118026,117688],{"class":61},[51,118028,118029],{"class":61}," purge",[51,118031,29284],{"class":69},[51,118033,117777],{"class":61},[51,118035,617],{"class":65},[51,118037,51679],{"class":69},[51,118039,118040],{"class":53,"line":8367},[51,118041,206],{"emptyLinePlaceholder":205},[51,118043,118044],{"class":53,"line":8394},[51,118045,118046],{"class":601},"#查找软件包命令\n",[51,118048,118049,118051,118053,118056,118058,118061,118063],{"class":53,"line":8399},[51,118050,24958],{"class":57},[51,118052,117688],{"class":61},[51,118054,118055],{"class":61}," search",[51,118057,29284],{"class":69},[51,118059,118060],{"class":61},"keywor",[51,118062,856],{"class":65},[51,118064,51679],{"class":69},[51,118066,118067],{"class":53,"line":8405},[51,118068,206],{"emptyLinePlaceholder":205},[51,118070,118071],{"class":53,"line":8417},[51,118072,118073],{"class":601},"#列出所有已安装的包\n",[51,118075,118076,118078,118080],{"class":53,"line":8429},[51,118077,117739],{"class":57},[51,118079,117742],{"class":61},[51,118081,118082],{"class":278}," --installed\n",[51,118084,118085],{"class":53,"line":8441},[51,118086,206],{"emptyLinePlaceholder":205},[51,118088,118089],{"class":53,"line":10100},[51,118090,118091],{"class":601},"#列出所有已安装的包的版本信息\n",[51,118093,118094,118096,118098],{"class":53,"line":10125},[51,118095,117739],{"class":57},[51,118097,117742],{"class":61},[51,118099,118100],{"class":278}," --all-versions\n",[464,118102,118103],{},"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":46,"searchDepth":185,"depth":185,"links":118105},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117650,"description":23760},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118112,"title":118113,"body":118114,"description":23760,"extension":469,"meta":118855,"navigation":205,"path":118856,"seo":118857,"stem":118858,"__hash__":118859},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118115,"toc":118842},[118116,118119,118123,118126,118132,118136,118140,118146,118151,118156,118161,118166,118171,118174,118177,118180,118183,118187,118190,118195,118198,118203,118206,118211,118218,118221,118224,118227,118230,118233,118244,118248,118252,118257,118262,118266,118271,118275,118280,118284,118288,118293,118296,118341,118346,118350,118354,118359,118365,118370,118380,118385,118395,118400,118405,118432,118436,118439,118444,118447,118472,118476,118481,118484,118489,118494,118514,118519,118522,118537,118541,118594,118597,118602,118606,118609,118624,118627,118630,118635,118639,118643,118646,118650,118654,118657,118662,118667,118671,118678,118686,118689,118696,118701,118706,118709,118714,118721,118726,118733,118737,118739,118744,118748,118751,118754,118759,118762,118767,118770,118775,118780,118785,118789,118794,118798,118839],[14,118117,118113],{"id":118118},"_2-linux装机教程",[486,118120,118122],{"id":118121},"_21-实体机","2.1 实体机",[10,118124,118125],{},"使用清华源：（Ubuntu24.04）",[10,118127,118128],{},[780,118129,118130],{"href":118130,"rel":118131},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24246],[486,118133,118135],{"id":118134},"_22-普通虚拟机","2.2 普通虚拟机",[513,118137,118139],{"id":118138},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[10,118141,118142],{},[780,118143,118144],{"href":118144,"rel":118145},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24246],[10,118147,118148],{},[460,118149],{"alt":46,"src":118150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[10,118152,118153],{},[460,118154],{"alt":46,"src":118155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[10,118157,118158],{},[460,118159],{"alt":46,"src":118160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[10,118162,118163],{},[460,118164],{"alt":46,"src":118165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[10,118167,118168],{},[460,118169],{"alt":46,"src":118170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[10,118172,118173],{},"内存4G（4096MB）；",[10,118175,118176],{},"CPU给4个核；",[10,118178,118179],{},"硬盘动态分配60G；",[10,118181,118182],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[513,118184,118186],{"id":118185},"_222-安装ubuntu","2.2.2 安装Ubuntu",[10,118188,118189],{},"按照1.1的步骤下载Ubuntu",[10,118191,118192],{},[460,118193],{"alt":46,"src":118194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[10,118196,118197],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[10,118199,118200],{},[460,118201],{"alt":46,"src":118202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[10,118204,118205],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[10,118207,118208],{},[460,118209],{"alt":46,"src":118210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[10,118212,118213,118214,118217],{},"选择“正常安装”(找不到都用Alt+F7)， ",[691,118215,118216],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[10,118219,118220],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[10,118222,118223],{},"将改动写入磁盘吗 继续",[10,118225,118226],{},"选择东八区（shanghai，大致在地图上点一下），继续",[10,118228,118229],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[10,118231,118232],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[10,118234,118235,118236,118239,118240,118243],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[691,118237,118238],{},"除了"," 选不发送系统信息与不升级之外， ",[691,118241,118242],{},"其它"," 都跳过或前进）",[513,118245,118247],{"id":118246},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22381,118249,118251],{"id":118250},"_2231-全屏","2.2.3.1 全屏",[10,118253,118254],{},[460,118255],{"alt":46,"src":118256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[10,118258,118259],{},[460,118260],{"alt":46,"src":118261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22381,118263,118265],{"id":118264},"_2232-文件交换","2.2.3.2 文件交换",[10,118267,118268],{},[460,118269],{"alt":46,"src":118270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22381,118272,118274],{"id":118273},"_2233-新建文本文档","2.2.3.3 新建文本文档",[10,118276,118277],{},[460,118278],{"alt":46,"src":118279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[486,118281,118283],{"id":118282},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[513,118285,118287],{"id":118286},"_231-简介与优缺点","2.3.1 简介与优缺点",[19,118289,118290],{},[22,118291,118292],{},"什么情况下推荐？",[10,118294,118295],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[19,118297,118298],{"start":185},[22,118299,118300,118301],{},"优缺点：",[19,118302,118303,118333],{},[22,118304,118305,118306],{},"优点：",[19,118307,118308,118311,118318,118321,118324,118327,118330],{},[22,118309,118310],{},"WSL2是最好的Linux发行版;(bushi)",[22,118312,118313,118314,118317],{},"性能损耗极低。且比在Windows上跑深度性能 ",[691,118315,118316],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[22,118319,118320],{},"非常方便调用USB设备，可以USB直通;",[22,118322,118323],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[22,118325,118326],{},"非常方便Win与WSL2互相传文件等协同操作;",[22,118328,118329],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[22,118331,118332],{},"非常方便使用Windows的VScode远程开发;",[22,118334,118335,118336],{},"缺点：",[19,118337,118338],{},[22,118339,118340],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[10,118342,118343],{},[460,118344],{"alt":46,"src":118345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[513,118347,118349],{"id":118348},"_232-安装教程","2.3.2 安装教程",[22381,118351,118353],{"id":118352},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[19,118355,118356],{},[22,118357,118358],{},"方法一(图形界面)",[10,118360,118361,118362,25000],{},"用Win+R输入",[48,118363,118364],{},"appwiz.cpl",[10,118366,118367],{},[460,118368],{"alt":46,"src":118369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[10,118371,118372,118373,118376,118377,26855],{},"点击OK进入 ",[691,118374,118375],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[691,118378,118379],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[10,118381,118382],{},[460,118383],{"alt":46,"src":118384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[10,118386,118387,118388,101390,118391,118394],{},"选择 ",[691,118389,118390],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[691,118392,118393],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[10,118396,118397],{},[460,118398],{"alt":46,"src":118399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[19,118401,118402],{"start":185},[22,118403,118404],{},"方法二(命令行)",[41,118406,118410],{"className":118407,"code":118408,"language":118409,"meta":46,"style":46},"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",[48,118411,118412,118417,118422,118427],{"__ignoreMap":46},[51,118413,118414],{"class":53,"line":54},[51,118415,118416],{},"# 开启 Linux 子系统\n",[51,118418,118419],{"class":53,"line":185},[51,118420,118421],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[51,118423,118424],{"class":53,"line":202},[51,118425,118426],{},"# 开启虚拟机平台\n",[51,118428,118429],{"class":53,"line":209},[51,118430,118431],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22381,118433,118435],{"id":118434},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[10,118437,118438],{},"用管理员权限打开powershell",[10,118440,118441],{},[460,118442],{"alt":46,"src":118443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[10,118445,118446],{},"升级WSL并设置默认版本为WSL2",[41,118448,118450],{"className":118407,"code":118449,"language":118409,"meta":46,"style":46},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[48,118451,118452,118457,118462,118467],{"__ignoreMap":46},[51,118453,118454],{"class":53,"line":54},[51,118455,118456],{},"# 更新 wsl\n",[51,118458,118459],{"class":53,"line":185},[51,118460,118461],{},"wsl --update\n",[51,118463,118464],{"class":53,"line":202},[51,118465,118466],{},"# 将 wsl 版本设置为 wsl2\n",[51,118468,118469],{"class":53,"line":209},[51,118470,118471],{},"wsl --set-default-version 2\n",[22381,118473,118475],{"id":118474},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[19,118477,118478],{},[22,118479,118480],{},"方式一(商店下载)",[10,118482,118483],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[10,118485,118486],{},[460,118487],{"alt":46,"src":118488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[19,118490,118491],{"start":185},[22,118492,118493],{},"方式二(命令行安装)",[41,118495,118497],{"className":118407,"code":118496,"language":118409,"meta":46,"style":46},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[48,118498,118499,118504,118509],{"__ignoreMap":46},[51,118500,118501],{"class":53,"line":54},[51,118502,118503],{},"# 列出可安装的 Linux 版本\n",[51,118505,118506],{"class":53,"line":185},[51,118507,118508],{},"#（需要科学手段）\n",[51,118510,118511],{"class":53,"line":202},[51,118512,118513],{},"wsl --list --online\n",[10,118515,118516],{},[460,118517],{"alt":46,"src":118518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[10,118520,118521],{},"选择对应发行版并安装",[41,118523,118525],{"className":118407,"code":118524,"language":118409,"meta":46,"style":46},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[48,118526,118527,118532],{"__ignoreMap":46},[51,118528,118529],{"class":53,"line":54},[51,118530,118531],{},"# Ubuntu安装完毕后需要重启系统\n",[51,118533,118534],{"class":53,"line":185},[51,118535,118536],{},"wsl --install -d Ubuntu-24.04\n",[22381,118538,118540],{"id":118539},"_2324-查看系统状态","2.3.2.4 查看系统状态",[41,118542,118544],{"className":118407,"code":118543,"language":118409,"meta":46,"style":46},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[48,118545,118546,118551,118556,118561,118566,118570,118574,118579,118584,118589],{"__ignoreMap":46},[51,118547,118548],{"class":53,"line":54},[51,118549,118550],{},"# 查看 wsl\n",[51,118552,118553],{"class":53,"line":185},[51,118554,118555],{},"wsl -l\n",[51,118557,118558],{"class":53,"line":202},[51,118559,118560],{},"# 查看 wsl 运行版本或模式\n",[51,118562,118563],{"class":53,"line":209},[51,118564,118565],{},"wsl -l -v\n",[51,118567,118568],{"class":53,"line":223},[51,118569,206],{"emptyLinePlaceholder":205},[51,118571,118572],{"class":53,"line":237},[51,118573,206],{"emptyLinePlaceholder":205},[51,118575,118576],{"class":53,"line":242},[51,118577,118578],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[51,118580,118581],{"class":53,"line":257},[51,118582,118583],{},"wsl --set-version \u003Cdistro> 2\n",[51,118585,118586],{"class":53,"line":262},[51,118587,118588],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[51,118590,118591],{"class":53,"line":285},[51,118592,118593],{},"wsl --unregister \u003Cdistro>\n",[10,118595,118596],{},"输出Version为2即正常",[10,118598,118599],{},[460,118600],{"alt":46,"src":118601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22381,118603,118605],{"id":118604},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[10,118607,118608],{},"直接在Powershell里输入wsl命令进入子系统",[41,118610,118612],{"className":118407,"code":118611,"language":118409,"meta":46,"style":46},"# 进入子系统\nwsl\n",[48,118613,118614,118619],{"__ignoreMap":46},[51,118615,118616],{"class":53,"line":54},[51,118617,118618],{},"# 进入子系统\n",[51,118620,118621],{"class":53,"line":185},[51,118622,118623],{},"wsl\n",[10,118625,118626],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[10,118628,118629],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[10,118631,118632],{},[460,118633],{"alt":46,"src":118634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[513,118636,118638],{"id":118637},"_233-配置各种环境","2.3.3 配置各种环境",[22381,118640,118642],{"id":118641},"_2331-换源","2.3.3.1 换源",[10,118644,118645],{},"(同实体机LINUX，往下找教程)",[22381,118647,118649],{"id":118648},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23293,118651,118653],{"id":118652},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[10,118655,118656],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[10,118658,118659],{},[460,118660],{"alt":46,"src":118661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[10,118663,118664],{},[460,118665],{"alt":46,"src":118666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23293,118668,118670],{"id":118669},"_23322-cuda","2.3.3.2.2 CUDA",[10,118672,118673,118674],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[780,118675,118676],{"href":118676,"rel":118677},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24246],[10,118679,118680,118683],{},[460,118681],{"alt":46,"src":118682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[460,118684],{"alt":46,"src":118685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[10,118687,118688],{},"在下方的网站，选择合适的版本。",[10,118690,118691,118692],{},"WSL2 专属 CUDA 指南：",[780,118693,118694],{"href":118694,"rel":118695},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24246],[10,118697,118698],{},[691,118699,118700],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[10,118702,118703],{},[460,118704],{"alt":46,"src":118705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[10,118707,118708],{},"挨行敲一遍",[10,118710,118711],{},[460,118712],{"alt":46,"src":118713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[10,118715,118716,118717,118720],{},"敲完后，输入",[48,118718,118719],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[10,118722,118723],{},[460,118724],{"alt":46,"src":118725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[10,118727,118728,118729,118732],{},"（请详看下方教程的",[691,118730,118731],{},"安装CUDA的配置环境来看","如何配置环境）",[23293,118734,118736],{"id":118735},"_23323-cudnn","2.3.3.2.3 cuDNN",[10,118738,118645],{},[10,118740,118741],{},[460,118742],{"alt":46,"src":118743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22381,118745,118747],{"id":118746},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[10,118749,118750],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[10,118752,118753],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[10,118755,118756],{},[460,118757],{"alt":46,"src":118758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[10,118760,118761],{},"连接WSL2",[10,118763,118764],{},[460,118765],{"alt":46,"src":118766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[10,118768,118769],{},"远程开发成功。",[10,118771,118772],{},[460,118773],{"alt":46,"src":118774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[10,118776,118777],{},[460,118778],{"alt":46,"src":118779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[10,118781,118782],{},[460,118783],{"alt":46,"src":118784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22381,118786,118788],{"id":118787},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[10,118790,118791],{},[460,118792],{"alt":46,"src":118793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22381,118795,118797],{"id":118796},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[41,118799,118801],{"className":117667,"code":118800,"language":117669,"meta":46,"style":46},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[48,118802,118803,118811,118819,118830,118834],{"__ignoreMap":46},[51,118804,118805,118807,118809],{"class":53,"line":54},[51,118806,24958],{"class":57},[51,118808,117688],{"class":61},[51,118810,26624],{"class":61},[51,118812,118813,118815,118817],{"class":53,"line":185},[51,118814,24958],{"class":57},[51,118816,117688],{"class":61},[51,118818,117704],{"class":61},[51,118820,118821,118823,118825,118827],{"class":53,"line":202},[51,118822,24958],{"class":57},[51,118824,117688],{"class":61},[51,118826,24215],{"class":61},[51,118828,118829],{"class":61}," mesa-utils\n",[51,118831,118832],{"class":53,"line":209},[51,118833,206],{"emptyLinePlaceholder":205},[51,118835,118836],{"class":53,"line":223},[51,118837,118838],{"class":601},"#然后重启wsl2即可\n",[464,118840,118841],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":46,"searchDepth":185,"depth":185,"links":118843},[118844,118845,118850],{"id":118121,"depth":185,"text":118122},{"id":118134,"depth":185,"text":118135,"children":118846},[118847,118848,118849],{"id":118138,"depth":202,"text":118139},{"id":118185,"depth":202,"text":118186},{"id":118246,"depth":202,"text":118247},{"id":118282,"depth":185,"text":118283,"children":118851},[118852,118853,118854],{"id":118286,"depth":202,"text":118287},{"id":118348,"depth":202,"text":118349},{"id":118637,"depth":202,"text":118638},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118113,"description":23760},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118861,"title":118862,"body":118863,"description":23760,"extension":469,"meta":121799,"navigation":205,"path":121800,"seo":121801,"stem":121802,"__hash__":121803},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118864,"toc":121771},[118865,118868,118872,118878,118882,118888,118892,119080,119083,119088,119092,119096,119099,119102,119108,119113,119116,119119,119124,119157,119162,119166,119243,119246,119251,119255,119258,119297,119300,119309,119327,119332,119339,119456,119461,119464,119491,119496,119500,119509,119559,119566,119570,119573,119587,119594,119628,119633,119637,119660,119663,119668,119672,119675,119678,119681,119723,119727,119730,119733,119774,119778,119782,119785,119790,119795,119798,119821,119824,119832,119837,119840,119845,119850,119853,119858,119862,119867,119890,119895,119957,119965,119970,119975,119978,119983,119986,119991,119996,120014,120019,120025,120030,120044,120048,120051,120054,120057,120100,120103,120108,120209,120212,120217,120221,120225,120262,120266,120270,120274,120320,120324,120369,120373,120380,120388,120443,120446,120523,120526,120549,120553,120556,120561,120566,120574,120577,120582,120587,120592,120595,120600,120609,120612,120617,120620,120691,120696,120699,120704,120707,120712,120715,120720,120723,120728,120733,120736,120811,120814,120827,120832,120835,120849,120852,120881,120886,120915,120918,120923,120927,120932,120941,120944,120949,120952,120957,120960,120963,120968,120971,120976,120981,120984,120989,120992,121117,121122,121152,121155,121160,121165,121182,121185,121228,121231,121258,121263,121276,121419,121423,121428,121442,121445,121496,121499,121529,121532,121548,121553,121567,121570,121637,121642,121651,121656,121659,121671,121676,121683,121707,121710,121715,121718,121737,121742,121749,121761,121768],[14,118866,118862],{"id":118867},"_3-安装必备配置",[486,118869,118871],{"id":118870},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[41,118873,118876],{"className":118874,"code":118875,"language":5572},[5570],"  打开下方网站（注意，该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",[48,118877,118875],{"__ignoreMap":46},[513,118879,118881],{"id":118880},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[41,118883,118886],{"className":118884,"code":118885,"language":5572},[5570],"  输入以下命令\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",[48,118887,118885],{"__ignoreMap":46},[513,118889,118891],{"id":118890},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[41,118893,118897],{"className":118894,"code":118895,"language":118896,"meta":46,"style":46},"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",[48,118898,118899,118907,118918,118930,118944,118948,118958,118963,118967,118971,118976,118980,118992,118996,119001,119005,119016,119020,119036,119040,119051,119055,119060,119064,119072],{"__ignoreMap":46},[51,118900,118901,118903,118905],{"class":53,"line":54},[51,118902,24958],{"class":57},[51,118904,117688],{"class":61},[51,118906,26624],{"class":61},[51,118908,118909,118911,118913,118915],{"class":53,"line":185},[51,118910,24958],{"class":57},[51,118912,117688],{"class":61},[51,118914,24215],{"class":61},[51,118916,118917],{"class":61}," vim\n",[51,118919,118920,118922,118925,118927],{"class":53,"line":202},[51,118921,24958],{"class":57},[51,118923,118924],{"class":61}," rm",[51,118926,25707],{"class":278},[51,118928,118929],{"class":61}," \u002Fetc\u002Fapt\u002Fsources.list\n",[51,118931,118932,118934,118936,118938,118941],{"class":53,"line":209},[51,118933,24958],{"class":57},[51,118935,118924],{"class":61},[51,118937,25707],{"class":278},[51,118939,118940],{"class":61}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[51,118942,118943],{"class":278},"**\n",[51,118945,118946],{"class":53,"line":223},[51,118947,206],{"emptyLinePlaceholder":205},[51,118949,118950,118952,118955],{"class":53,"line":237},[51,118951,24958],{"class":57},[51,118953,118954],{"class":61}," vim",[51,118956,118957],{"class":61}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[51,118959,118960],{"class":53,"line":242},[51,118961,118962],{"class":61},"```\n",[51,118964,118965],{"class":53,"line":257},[51,118966,206],{"emptyLinePlaceholder":205},[51,118968,118969],{"class":53,"line":262},[51,118970,206],{"emptyLinePlaceholder":205},[51,118972,118973],{"class":53,"line":285},[51,118974,118975],{"class":57},"选择好Ubuntu版本后，复制下方的内容。\n",[51,118977,118978],{"class":53,"line":296},[51,118979,206],{"emptyLinePlaceholder":205},[51,118981,118982,118984,118987,118990],{"class":53,"line":307},[51,118983,768],{"class":69},[51,118985,118986],{"class":61},"[](",[51,118988,118989],{"class":57},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[51,118991,282],{"class":61},[51,118993,118994],{"class":53,"line":324},[51,118995,206],{"emptyLinePlaceholder":205},[51,118997,118998],{"class":53,"line":329},[51,118999,119000],{"class":57},"粘贴进去\n",[51,119002,119003],{"class":53,"line":334},[51,119004,206],{"emptyLinePlaceholder":205},[51,119006,119007,119009,119011,119014],{"class":53,"line":340},[51,119008,768],{"class":69},[51,119010,118986],{"class":61},[51,119012,119013],{"class":57},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[51,119015,282],{"class":61},[51,119017,119018],{"class":53,"line":345},[51,119019,206],{"emptyLinePlaceholder":205},[51,119021,119022,119025,119028,119031,119033],{"class":53,"line":357},[51,119023,119024],{"class":57},"按一下ESC，然后英文冒号，输入",[51,119026,119027],{"class":61}," `",[51,119029,119030],{"class":57},":wq!",[51,119032,1514],{"class":61},[51,119034,119035],{"class":57},"然后回车\n",[51,119037,119038],{"class":53,"line":366},[51,119039,206],{"emptyLinePlaceholder":205},[51,119041,119042,119044,119046,119049],{"class":53,"line":383},[51,119043,768],{"class":69},[51,119045,118986],{"class":61},[51,119047,119048],{"class":57},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[51,119050,282],{"class":61},[51,119052,119053],{"class":53,"line":392},[51,119054,206],{"emptyLinePlaceholder":205},[51,119056,119057],{"class":53,"line":403},[51,119058,119059],{"class":57},"输入以下命令\n",[51,119061,119062],{"class":53,"line":409},[51,119063,206],{"emptyLinePlaceholder":205},[51,119065,119066,119069],{"class":53,"line":414},[51,119067,119068],{"class":61},"```",[51,119070,119071],{"class":57},"Bash\n",[51,119073,119074,119076,119078],{"class":53,"line":433},[51,119075,24958],{"class":57},[51,119077,117688],{"class":61},[51,119079,26624],{"class":61},[10,119081,119082],{},"这里被替换成对应学校则成功",[10,119084,119085],{},[460,119086],{"alt":46,"src":119087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[486,119089,119091],{"id":119090},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[513,119093,119095],{"id":119094},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[10,119097,119098],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[10,119100,119101],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[10,119103,119104],{},[780,119105,119106],{"href":119106,"rel":119107},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24246],[10,119109,119110],{},[460,119111],{"alt":46,"src":119112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[10,119114,119115],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[10,119117,119118],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[10,119120,119121],{},[460,119122],{"alt":46,"src":119123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[41,119125,119127],{"className":117667,"code":119126,"language":117669,"meta":46,"style":46},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[48,119128,119129,119134,119141,119146],{"__ignoreMap":46},[51,119130,119131],{"class":53,"line":54},[51,119132,119133],{"class":601},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[51,119135,119136,119138],{"class":53,"line":185},[51,119137,101648],{"class":278},[51,119139,119140],{"class":61}," ~\u002FDownloads\n",[51,119142,119143],{"class":53,"line":202},[51,119144,119145],{"class":601},"#下方chrome安装包名不一定是这个，根据名字来看\n",[51,119147,119148,119150,119152,119154],{"class":53,"line":209},[51,119149,24958],{"class":57},[51,119151,117688],{"class":61},[51,119153,24215],{"class":61},[51,119155,119156],{"class":61}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[10,119158,119159],{},[460,119160],{"alt":46,"src":119161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[513,119163,119165],{"id":119164},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[41,119167,119169],{"className":117667,"code":119168,"language":117669,"meta":46,"style":46},"# 老版\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",[48,119170,119171,119176,119184,119195,119200,119204,119209,119219,119227,119238],{"__ignoreMap":46},[51,119172,119173],{"class":53,"line":54},[51,119174,119175],{"class":601},"# 老版\n",[51,119177,119178,119180,119182],{"class":53,"line":185},[51,119179,24958],{"class":57},[51,119181,117688],{"class":61},[51,119183,26624],{"class":61},[51,119185,119186,119188,119190,119192],{"class":53,"line":202},[51,119187,24958],{"class":57},[51,119189,117688],{"class":61},[51,119191,24215],{"class":61},[51,119193,119194],{"class":61}," neofetch\n",[51,119196,119197],{"class":53,"line":209},[51,119198,119199],{"class":57},"neofetch\n",[51,119201,119202],{"class":53,"line":223},[51,119203,206],{"emptyLinePlaceholder":205},[51,119205,119206],{"class":53,"line":237},[51,119207,119208],{"class":601},"# 新版\n",[51,119210,119211,119213,119216],{"class":53,"line":242},[51,119212,24958],{"class":57},[51,119214,119215],{"class":61}," add-apt-repository",[51,119217,119218],{"class":61}," ppa:zhangsongcui3371\u002Ffastfetch\n",[51,119220,119221,119223,119225],{"class":53,"line":257},[51,119222,24958],{"class":57},[51,119224,117688],{"class":61},[51,119226,26624],{"class":61},[51,119228,119229,119231,119233,119235],{"class":53,"line":262},[51,119230,24958],{"class":57},[51,119232,117688],{"class":61},[51,119234,24215],{"class":61},[51,119236,119237],{"class":61}," fastfetch\n",[51,119239,119240],{"class":53,"line":285},[51,119241,119242],{"class":57},"fastfetch\n",[10,119244,119245],{},"这里显示，一共有3162个debian的程序，7个snap程序",[10,119247,119248],{},[460,119249],{"alt":46,"src":119250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[513,119252,119254],{"id":119253},"_323-移除snap应用","3.2.3 移除snap应用",[10,119256,119257],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[41,119259,119261],{"className":117667,"code":119260,"language":117669,"meta":46,"style":46},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[48,119262,119263,119275,119286],{"__ignoreMap":46},[51,119264,119265,119267,119269,119272],{"class":53,"line":54},[51,119266,24958],{"class":57},[51,119268,26895],{"class":61},[51,119270,119271],{"class":61}," disable",[51,119273,119274],{"class":61}," snapd.service\n",[51,119276,119277,119279,119281,119283],{"class":53,"line":185},[51,119278,24958],{"class":57},[51,119280,26895],{"class":61},[51,119282,119271],{"class":61},[51,119284,119285],{"class":61}," snapd.socket\n",[51,119287,119288,119290,119292,119294],{"class":53,"line":202},[51,119289,24958],{"class":57},[51,119291,26895],{"class":61},[51,119293,119271],{"class":61},[51,119295,119296],{"class":61}," snapd.seeded.service\n",[10,119298,119299],{},"然后查看snap应用列表",[10,119301,119302,119303,119308],{},"根据你安装的选择不同（最小安装或普通安装），有",[780,119304,119307],{"href":119305,"rel":119306},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24246],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[41,119310,119312],{"className":117667,"code":119311,"language":117669,"meta":46,"style":46},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[48,119313,119314,119319],{"__ignoreMap":46},[51,119315,119316],{"class":53,"line":54},[51,119317,119318],{"class":601},"# 查询当前系统上snap安装了哪些app\n",[51,119320,119321,119324],{"class":53,"line":185},[51,119322,119323],{"class":57},"snap",[51,119325,119326],{"class":61}," list\n",[10,119328,119329],{},[460,119330],{"alt":46,"src":119331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[10,119333,119334,119335,119338],{},"卸载掉图中所有应用，按照 ",[691,119336,119337],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[41,119340,119342],{"className":117667,"code":119341,"language":117669,"meta":46,"style":46},"#移除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",[48,119343,119344,119349,119361,119366,119377,119382,119393,119398,119409,119414,119418,119423,119434,119445],{"__ignoreMap":46},[51,119345,119346],{"class":53,"line":54},[51,119347,119348],{"class":601},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[51,119350,119351,119353,119356,119358],{"class":53,"line":185},[51,119352,24958],{"class":57},[51,119354,119355],{"class":61}," snap",[51,119357,26461],{"class":61},[51,119359,119360],{"class":61}," snap-store\n",[51,119362,119363],{"class":53,"line":202},[51,119364,119365],{"class":601},"#移除firefox浏览器\n",[51,119367,119368,119370,119372,119374],{"class":53,"line":209},[51,119369,24958],{"class":57},[51,119371,119355],{"class":61},[51,119373,26461],{"class":61},[51,119375,119376],{"class":61}," firefox\n",[51,119378,119379],{"class":53,"line":223},[51,119380,119381],{"class":601},"#移除gnome-42-2204\n",[51,119383,119384,119386,119388,119390],{"class":53,"line":237},[51,119385,24958],{"class":57},[51,119387,119355],{"class":61},[51,119389,26461],{"class":61},[51,119391,119392],{"class":61}," gnome-42-2204\n",[51,119394,119395],{"class":53,"line":242},[51,119396,119397],{"class":601},"#移除gtk-common-themes\n",[51,119399,119400,119402,119404,119406],{"class":53,"line":257},[51,119401,24958],{"class":57},[51,119403,119355],{"class":61},[51,119405,26461],{"class":61},[51,119407,119408],{"class":61}," gtk-common-themes\n",[51,119410,119411],{"class":53,"line":262},[51,119412,119413],{"class":601},"#移除其它...\n",[51,119415,119416],{"class":53,"line":285},[51,119417,3062],{"class":65},[51,119419,119420],{"class":53,"line":296},[51,119421,119422],{"class":601},"#移除core22,bare以及snapd\n",[51,119424,119425,119427,119429,119431],{"class":53,"line":307},[51,119426,24958],{"class":57},[51,119428,119355],{"class":61},[51,119430,26461],{"class":61},[51,119432,119433],{"class":61}," core22\n",[51,119435,119436,119438,119440,119442],{"class":53,"line":324},[51,119437,24958],{"class":57},[51,119439,119355],{"class":61},[51,119441,26461],{"class":61},[51,119443,119444],{"class":61}," bare\n",[51,119446,119447,119449,119451,119453],{"class":53,"line":329},[51,119448,24958],{"class":57},[51,119450,119355],{"class":61},[51,119452,26461],{"class":61},[51,119454,119455],{"class":61}," snapd\n",[10,119457,119458],{},[460,119459],{"alt":46,"src":119460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[10,119462,119463],{},"输入以下命令查看是否还有snap包",[41,119465,119467],{"className":117667,"code":119466,"language":117669,"meta":46,"style":46},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[48,119468,119469,119475,119479,119483,119487],{"__ignoreMap":46},[51,119470,119471,119473],{"class":53,"line":54},[51,119472,119323],{"class":57},[51,119474,119326],{"class":61},[51,119476,119477],{"class":53,"line":185},[51,119478,119175],{"class":601},[51,119480,119481],{"class":53,"line":202},[51,119482,119199],{"class":57},[51,119484,119485],{"class":53,"line":209},[51,119486,119208],{"class":601},[51,119488,119489],{"class":53,"line":223},[51,119490,119242],{"class":57},[10,119492,119493],{},[460,119494],{"alt":46,"src":119495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[513,119497,119499],{"id":119498},"_324-移除snap","3.2.4 移除snap",[10,119501,119502,119503,119508],{},"在删除掉",[780,119504,119507],{"href":119505,"rel":119506},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24246],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[41,119510,119512],{"className":117667,"code":119511,"language":117669,"meta":46,"style":46}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[48,119513,119514,119519,119532,119537,119548],{"__ignoreMap":46},[51,119515,119516],{"class":53,"line":54},[51,119517,119518],{"class":601}," #使用apt移除掉snap\n",[51,119520,119521,119523,119525,119527,119530],{"class":53,"line":185},[51,119522,24958],{"class":57},[51,119524,117688],{"class":61},[51,119526,117996],{"class":61},[51,119528,119529],{"class":278}," --purge",[51,119531,119455],{"class":61},[51,119533,119534],{"class":53,"line":202},[51,119535,119536],{"class":601},"#移除snapd的一些目录\n",[51,119538,119539,119541,119543,119545],{"class":53,"line":209},[51,119540,24958],{"class":57},[51,119542,118924],{"class":61},[51,119544,25707],{"class":278},[51,119546,119547],{"class":61}," \u002Fvar\u002Fcache\u002Fsnapd\n",[51,119549,119550,119552,119554,119556],{"class":53,"line":223},[51,119551,24958],{"class":57},[51,119553,118924],{"class":61},[51,119555,25707],{"class":278},[51,119557,119558],{"class":61}," ~\u002Fsnap\n",[10,119560,119561,119562,119565],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[48,119563,119564],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[513,119567,119569],{"id":119568},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[10,119571,119572],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[41,119574,119576],{"className":117667,"code":119575,"language":117669,"meta":46,"style":46},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[48,119577,119578],{"__ignoreMap":46},[51,119579,119580,119582,119584],{"class":53,"line":54},[51,119581,24958],{"class":57},[51,119583,118954],{"class":61},[51,119585,119586],{"class":61}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[10,119588,119589,119590,119593],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[48,119591,119592],{},":wq"," 回车",[41,119595,119597],{"className":117667,"code":119596,"language":117669,"meta":46,"style":46},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[48,119598,119599,119606,119620],{"__ignoreMap":46},[51,119600,119601,119604],{"class":53,"line":54},[51,119602,119603],{"class":57},"Package:",[51,119605,119455],{"class":61},[51,119607,119608,119611,119614,119617],{"class":53,"line":185},[51,119609,119610],{"class":57},"Pin:",[51,119612,119613],{"class":61}," release",[51,119615,119616],{"class":61}," a=",[51,119618,119619],{"class":278},"*\n",[51,119621,119622,119625],{"class":53,"line":202},[51,119623,119624],{"class":57},"Pin-Priority:",[51,119626,119627],{"class":278}," -10\n",[10,119629,119630],{},[460,119631],{"alt":46,"src":119632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[513,119634,119636],{"id":119635},"_326-测试是否成功","3.2.6 测试是否成功",[41,119638,119640],{"className":117667,"code":119639,"language":117669,"meta":46,"style":46},"sudo apt update\nsudo apt install firefox\n",[48,119641,119642,119650],{"__ignoreMap":46},[51,119643,119644,119646,119648],{"class":53,"line":54},[51,119645,24958],{"class":57},[51,119647,117688],{"class":61},[51,119649,26624],{"class":61},[51,119651,119652,119654,119656,119658],{"class":53,"line":185},[51,119653,24958],{"class":57},[51,119655,117688],{"class":61},[51,119657,24215],{"class":61},[51,119659,119376],{"class":61},[10,119661,119662],{},"这里提示snapd无法被安装，就证明成功了",[10,119664,119665],{},[460,119666],{"alt":46,"src":119667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[513,119669,119671],{"id":119670},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[10,119673,119674],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[10,119676,119677],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[10,119679,119680],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[41,119682,119684],{"className":117667,"code":119683,"language":117669,"meta":46,"style":46},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[48,119685,119686,119691,119700,119705,119713],{"__ignoreMap":46},[51,119687,119688],{"class":53,"line":54},[51,119689,119690],{"class":601},"# 添加Mozilla提供的源\n",[51,119692,119693,119695,119697],{"class":53,"line":185},[51,119694,24958],{"class":57},[51,119696,119215],{"class":61},[51,119698,119699],{"class":61}," ppa:mozillateam\u002Fppa\n",[51,119701,119702],{"class":53,"line":202},[51,119703,119704],{"class":601},"# 安装Firefox\n",[51,119706,119707,119709,119711],{"class":53,"line":209},[51,119708,24958],{"class":57},[51,119710,117688],{"class":61},[51,119712,26624],{"class":61},[51,119714,119715,119717,119719,119721],{"class":53,"line":223},[51,119716,24958],{"class":57},[51,119718,117688],{"class":61},[51,119720,24215],{"class":61},[51,119722,119376],{"class":61},[513,119724,119726],{"id":119725},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[10,119728,119729],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[10,119731,119732],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[41,119734,119736],{"className":117667,"code":119735,"language":117669,"meta":46,"style":46},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[48,119737,119738,119743,119753,119761,119765],{"__ignoreMap":46},[51,119739,119740],{"class":53,"line":54},[51,119741,119742],{"class":601},"#删掉禁止安装snap的配置文件\n",[51,119744,119745,119747,119749,119751],{"class":53,"line":185},[51,119746,24958],{"class":57},[51,119748,118924],{"class":61},[51,119750,25707],{"class":278},[51,119752,119586],{"class":61},[51,119754,119755,119757,119759],{"class":53,"line":202},[51,119756,24958],{"class":57},[51,119758,117688],{"class":61},[51,119760,26624],{"class":61},[51,119762,119763],{"class":53,"line":209},[51,119764,206],{"emptyLinePlaceholder":205},[51,119766,119767,119769,119771],{"class":53,"line":223},[51,119768,24958],{"class":57},[51,119770,117688],{"class":61},[51,119772,119773],{"class":61}," dist-update\n",[486,119775,119777],{"id":119776},"_33-中文输入法","3.3 中文输入法",[513,119779,119781],{"id":119780},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[10,119783,119784],{},"官网下载搜狗输入法",[10,119786,119787],{},[460,119788],{"alt":46,"src":119789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[10,119791,119792],{},[460,119793],{"alt":46,"src":119794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[10,119796,119797],{},"打开终端输入如下",[41,119799,119801],{"className":117667,"code":119800,"language":117669,"meta":46,"style":46},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[48,119802,119803,119810],{"__ignoreMap":46},[51,119804,119805,119807],{"class":53,"line":54},[51,119806,101648],{"class":278},[51,119808,119809],{"class":61}," ~\u002FDownloads\u002F\n",[51,119811,119812,119814,119816,119818],{"class":53,"line":185},[51,119813,24958],{"class":57},[51,119815,117688],{"class":61},[51,119817,24215],{"class":61},[51,119819,119820],{"class":61}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[10,119822,119823],{},"打开Fcitx",[10,119825,119826,119829],{},[460,119827],{"alt":46,"src":119828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[460,119830],{"alt":46,"src":119831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[10,119833,119834],{},[460,119835],{"alt":46,"src":119836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[10,119838,119839],{},"添加搜狗输入法",[10,119841,119842],{},[460,119843],{"alt":46,"src":119844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[10,119846,119847],{},[460,119848],{"alt":46,"src":119849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[10,119851,119852],{},"将搜狗输入法设置为唯一输入法",[10,119854,119855],{},[460,119856],{"alt":46,"src":119857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[513,119859,119861],{"id":119860},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[19,119863,119864],{},[22,119865,119866],{},"卸载旧输入法",[41,119868,119870],{"className":118894,"code":119869,"language":118896,"meta":46,"style":46},"sudo apt purge fcitx* ibus*\n",[48,119871,119872],{"__ignoreMap":46},[51,119873,119874,119876,119878,119880,119883,119885,119888],{"class":53,"line":54},[51,119875,24958],{"class":57},[51,119877,117688],{"class":61},[51,119879,118029],{"class":61},[51,119881,119882],{"class":61}," fcitx",[51,119884,997],{"class":278},[51,119886,119887],{"class":61}," ibus",[51,119889,119619],{"class":278},[19,119891,119892],{"start":185},[22,119893,119894],{},"安装Fcitx5",[41,119896,119898],{"className":117667,"code":119897,"language":117669,"meta":46,"style":46},"# 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",[48,119899,119900,119905,119919,119923,119928,119937,119945],{"__ignoreMap":46},[51,119901,119902],{"class":53,"line":54},[51,119903,119904],{"class":601},"# Ubuntu22.04及以上、Debian12及以上\n",[51,119906,119907,119909,119911,119913,119916],{"class":53,"line":185},[51,119908,24958],{"class":57},[51,119910,117688],{"class":61},[51,119912,24215],{"class":61},[51,119914,119915],{"class":61}," fcitx5",[51,119917,119918],{"class":61}," fcitx5-chinese-addons\n",[51,119920,119921],{"class":53,"line":202},[51,119922,206],{"emptyLinePlaceholder":205},[51,119924,119925],{"class":53,"line":209},[51,119926,119927],{"class":601},"# Ubuntu20.04\n",[51,119929,119930,119932,119934],{"class":53,"line":223},[51,119931,24958],{"class":57},[51,119933,119215],{"class":61},[51,119935,119936],{"class":61}," ppa:zhsj\u002Ffcitx5\n",[51,119938,119939,119941,119943],{"class":53,"line":237},[51,119940,24958],{"class":57},[51,119942,117688],{"class":61},[51,119944,26624],{"class":61},[51,119946,119947,119949,119951,119953,119955],{"class":53,"line":242},[51,119948,24958],{"class":57},[51,119950,117688],{"class":61},[51,119952,24215],{"class":61},[51,119954,119915],{"class":61},[51,119956,119918],{"class":61},[19,119958,119959,119962],{"start":202},[22,119960,119961],{},"Reboot System",[22,119963,119964],{},"启动Fcitx5",[10,119966,119967],{},[460,119968],{"alt":46,"src":119969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[19,119971,119972],{"start":223},[22,119973,119974],{},"修改一些设置",[10,119976,119977],{},"将Pinyin和Keyboard - English US加入到左边。",[10,119979,119980],{},[460,119981],{"alt":46,"src":119982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[10,119984,119985],{},"添加快捷键以便于更好切换中英文",[10,119987,119988],{},[460,119989],{"alt":46,"src":119990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[19,119992,119993],{"start":237},[22,119994,119995],{},"重启",[41,119997,119999],{"className":118894,"code":119998,"language":118896,"meta":46,"style":46},"sudo shutdown -r now\n",[48,120000,120001],{"__ignoreMap":46},[51,120002,120003,120005,120008,120011],{"class":53,"line":54},[51,120004,24958],{"class":57},[51,120006,120007],{"class":61}," shutdown",[51,120009,120010],{"class":278}," -r",[51,120012,120013],{"class":61}," now\n",[19,120015,120016],{"start":242},[22,120017,120018],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[10,120020,120021],{},[780,120022,120023],{"href":120023,"rel":120024},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24246],[19,120026,120027],{"start":257},[22,120028,120029],{},"再重启",[41,120031,120032],{"className":118894,"code":119998,"language":118896,"meta":46,"style":46},[48,120033,120034],{"__ignoreMap":46},[51,120035,120036,120038,120040,120042],{"class":53,"line":54},[51,120037,24958],{"class":57},[51,120039,120007],{"class":61},[51,120041,120010],{"class":278},[51,120043,120013],{"class":61},[486,120045,120047],{"id":120046},"_34-pip3源替换","3.4 pip3源替换",[10,120049,120050],{},"非Debian系发行版需要做。",[10,120052,120053],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[10,120055,120056],{},"使用dnf的系统也可能不用做。",[41,120058,120060],{"className":117667,"code":120059,"language":117669,"meta":46,"style":46},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[48,120061,120062,120067,120074,120079,120084],{"__ignoreMap":46},[51,120063,120064],{"class":53,"line":54},[51,120065,120066],{"class":601},"# 检查是否已安装 pip\n",[51,120068,120069,120072],{"class":53,"line":185},[51,120070,120071],{"class":57},"pip3",[51,120073,26675],{"class":278},[51,120075,120076],{"class":53,"line":202},[51,120077,120078],{"class":601},"# 如果未安装，先安装 pip3（见下方）\n",[51,120080,120081],{"class":53,"line":209},[51,120082,120083],{"class":601},"# 配置 pip 使用清华源\n",[51,120085,120086,120088,120091,120094,120097],{"class":53,"line":223},[51,120087,120071],{"class":57},[51,120089,120090],{"class":61}," config",[51,120092,120093],{"class":61}," set",[51,120095,120096],{"class":61}," global.index-url",[51,120098,120099],{"class":61}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[10,120101,120102],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[10,120104,120105],{},[460,120106],{"alt":46,"src":120107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[41,120109,120111],{"className":117667,"code":120110,"language":117669,"meta":46,"style":46},"#安装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",[48,120112,120113,120118,120126,120137,120141,120146,120165,120169,120174,120186,120190,120195],{"__ignoreMap":46},[51,120114,120115],{"class":53,"line":54},[51,120116,120117],{"class":601},"#安装pip3\n",[51,120119,120120,120122,120124],{"class":53,"line":185},[51,120121,24958],{"class":57},[51,120123,117688],{"class":61},[51,120125,26624],{"class":61},[51,120127,120128,120130,120132,120134],{"class":53,"line":202},[51,120129,24958],{"class":57},[51,120131,26458],{"class":61},[51,120133,24215],{"class":61},[51,120135,120136],{"class":61}," python3-pip\n",[51,120138,120139],{"class":53,"line":209},[51,120140,206],{"emptyLinePlaceholder":205},[51,120142,120143],{"class":53,"line":223},[51,120144,120145],{"class":601},"#更新pip3\n",[51,120147,120148,120150,120152,120154,120156,120158,120161,120163],{"class":53,"line":237},[51,120149,101251],{"class":57},[51,120151,101254],{"class":278},[51,120153,101277],{"class":61},[51,120155,24215],{"class":61},[51,120157,26812],{"class":278},[51,120159,120160],{"class":61}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[51,120162,101282],{"class":278},[51,120164,101285],{"class":61},[51,120166,120167],{"class":53,"line":242},[51,120168,206],{"emptyLinePlaceholder":205},[51,120170,120171],{"class":53,"line":257},[51,120172,120173],{"class":601},"#设置pip源为清华源\n",[51,120175,120176,120178,120180,120182,120184],{"class":53,"line":262},[51,120177,120071],{"class":57},[51,120179,120090],{"class":61},[51,120181,120093],{"class":61},[51,120183,120096],{"class":61},[51,120185,120099],{"class":61},[51,120187,120188],{"class":53,"line":285},[51,120189,206],{"emptyLinePlaceholder":205},[51,120191,120192],{"class":53,"line":296},[51,120193,120194],{"class":601},"#测试\n",[51,120196,120197,120199,120201,120203,120205,120207],{"class":53,"line":307},[51,120198,101251],{"class":57},[51,120200,101254],{"class":278},[51,120202,101277],{"class":61},[51,120204,24215],{"class":61},[51,120206,101282],{"class":278},[51,120208,101285],{"class":61},[10,120210,120211],{},"成功的话，会看到Looking后面是tsinghua字样。",[10,120213,120214],{},[460,120215],{"alt":46,"src":120216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[486,120218,120220],{"id":120219},"_35-显卡驱动安装","3.5 显卡驱动安装",[513,120222,120224],{"id":120223},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[41,120226,120228],{"className":118894,"code":120227,"language":118896,"meta":46,"style":46},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[48,120229,120230,120235,120250,120255],{"__ignoreMap":46},[51,120231,120232],{"class":53,"line":54},[51,120233,120234],{"class":601},"# 如果是使用apt安装的驱动\n",[51,120236,120237,120239,120241,120243,120245,120248],{"class":53,"line":185},[51,120238,24958],{"class":57},[51,120240,26458],{"class":61},[51,120242,26461],{"class":61},[51,120244,119529],{"class":278},[51,120246,120247],{"class":61}," nvidia",[51,120249,119619],{"class":278},[51,120251,120252],{"class":53,"line":202},[51,120253,120254],{"class":601},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[51,120256,120257,120259],{"class":53,"line":209},[51,120258,24958],{"class":57},[51,120260,120261],{"class":61}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[513,120263,120265],{"id":120264},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22381,120267,120269],{"id":120268},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23293,120271,120273],{"id":120272},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[41,120275,120277],{"className":118894,"code":120276,"language":118896,"meta":46,"style":46},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[48,120278,120279,120284,120295,120300,120310,120315],{"__ignoreMap":46},[51,120280,120281],{"class":53,"line":54},[51,120282,120283],{"class":601},"# 安装英伟达驱动\n",[51,120285,120286,120288,120290,120292],{"class":53,"line":185},[51,120287,24958],{"class":57},[51,120289,117688],{"class":61},[51,120291,24215],{"class":61},[51,120293,120294],{"class":61}," nvidia-driver-版本号\n",[51,120296,120297],{"class":53,"line":202},[51,120298,120299],{"class":601},"# 重启 \n",[51,120301,120302,120304,120306,120308],{"class":53,"line":209},[51,120303,24958],{"class":57},[51,120305,120007],{"class":61},[51,120307,120010],{"class":278},[51,120309,120013],{"class":61},[51,120311,120312],{"class":53,"line":223},[51,120313,120314],{"class":601},"# 检查驱动是否安装成功\n",[51,120316,120317],{"class":53,"line":237},[51,120318,120319],{"class":57},"nvidia-smi\n",[23293,120321,120323],{"id":120322},"_35212-debian","3.5.2.1.2 Debian",[41,120325,120327],{"className":118894,"code":120326,"language":118896,"meta":46,"style":46},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[48,120328,120329,120333,120347,120351,120361,120365],{"__ignoreMap":46},[51,120330,120331],{"class":53,"line":54},[51,120332,120283],{"class":601},[51,120334,120335,120337,120339,120341,120344],{"class":53,"line":185},[51,120336,24958],{"class":57},[51,120338,117688],{"class":61},[51,120340,24215],{"class":61},[51,120342,120343],{"class":61}," nvidia-driver",[51,120345,120346],{"class":61}," nvidia-settings\n",[51,120348,120349],{"class":53,"line":202},[51,120350,120299],{"class":601},[51,120352,120353,120355,120357,120359],{"class":53,"line":209},[51,120354,24958],{"class":57},[51,120356,120007],{"class":61},[51,120358,120010],{"class":278},[51,120360,120013],{"class":61},[51,120362,120363],{"class":53,"line":223},[51,120364,120314],{"class":601},[51,120366,120367],{"class":53,"line":237},[51,120368,120319],{"class":57},[22381,120370,120372],{"id":120371},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[10,120374,120375,120376,120379],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[691,120377,120378],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[10,120381,120382,120383],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23936,120384,120385],{},[691,120386,120387],{},"（也可以不禁用桌面环境，直接进行下一步。）",[41,120389,120391],{"className":118894,"code":120390,"language":118896,"meta":46,"style":46},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[48,120392,120393,120398,120408,120413,120426,120431],{"__ignoreMap":46},[51,120394,120395],{"class":53,"line":54},[51,120396,120397],{"class":601},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[51,120399,120400,120402,120405],{"class":53,"line":185},[51,120401,24958],{"class":57},[51,120403,120404],{"class":61}," telinit",[51,120406,120407],{"class":278}," 3\n",[51,120409,120410],{"class":53,"line":202},[51,120411,120412],{"class":601},"# ubuntu 使用下方命令\n",[51,120414,120415,120417,120420,120423],{"class":53,"line":209},[51,120416,24958],{"class":57},[51,120418,120419],{"class":61}," service",[51,120421,120422],{"class":61}," lightdm",[51,120424,120425],{"class":61}," stop\n",[51,120427,120428],{"class":53,"line":223},[51,120429,120430],{"class":601},"# Fedora 使用下方命令\n",[51,120432,120433,120435,120437,120440],{"class":53,"line":237},[51,120434,24958],{"class":57},[51,120436,26895],{"class":61},[51,120438,120439],{"class":61}," isolate",[51,120441,120442],{"class":61}," multi-user.target\n",[10,120444,120445],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[41,120447,120449],{"className":118894,"code":120448,"language":118896,"meta":46,"style":46},"# 编译环境+准备工作\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",[48,120450,120451,120456,120467,120472,120479,120484,120496,120501,120508,120513],{"__ignoreMap":46},[51,120452,120453],{"class":53,"line":54},[51,120454,120455],{"class":601},"# 编译环境+准备工作\n",[51,120457,120458,120460,120462,120464],{"class":53,"line":185},[51,120459,24958],{"class":57},[51,120461,117688],{"class":61},[51,120463,24215],{"class":61},[51,120465,120466],{"class":61}," build-essential\n",[51,120468,120469],{"class":53,"line":202},[51,120470,120471],{"class":601},"# 进入到.run目录中\n",[51,120473,120474,120476],{"class":53,"line":209},[51,120475,101648],{"class":278},[51,120477,120478],{"class":61}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[51,120480,120481],{"class":53,"line":223},[51,120482,120483],{"class":601},"# 给驱动文件增加可执行权限：\n",[51,120485,120486,120488,120490,120493],{"class":53,"line":237},[51,120487,24958],{"class":57},[51,120489,24961],{"class":61},[51,120491,120492],{"class":61}," a+x",[51,120494,120495],{"class":61}," NVIDIA-Linux-x86_64-550.107.02.run\n",[51,120497,120498],{"class":53,"line":242},[51,120499,120500],{"class":601},"# 然后执行安装：\n",[51,120502,120503,120505],{"class":53,"line":257},[51,120504,24958],{"class":57},[51,120506,120507],{"class":61}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[51,120509,120510],{"class":53,"line":262},[51,120511,120512],{"class":601},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[51,120514,120515,120517,120520],{"class":53,"line":285},[51,120516,24958],{"class":57},[51,120518,120519],{"class":61}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[51,120521,120522],{"class":278},"  --no-opengl-files\n",[10,120524,120525],{},"安装完毕重启即可",[41,120527,120529],{"className":118894,"code":120528,"language":118896,"meta":46,"style":46},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[48,120530,120531,120535,120541,120545],{"__ignoreMap":46},[51,120532,120533],{"class":53,"line":54},[51,120534,120299],{"class":601},[51,120536,120537,120539],{"class":53,"line":185},[51,120538,24958],{"class":57},[51,120540,27029],{"class":61},[51,120542,120543],{"class":53,"line":202},[51,120544,120314],{"class":601},[51,120546,120547],{"class":53,"line":209},[51,120548,120319],{"class":57},[513,120550,120552],{"id":120551},"_353-安装cuda","3.5.3 安装CUDA",[10,120554,120555],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[10,120557,120558],{},[460,120559],{"alt":46,"src":120560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[19,120562,120563],{},[22,120564,120565],{},"先查看显卡驱动所支持的最高CUDA版本",[41,120567,120568],{"className":118894,"code":120319,"language":118896,"meta":46,"style":46},[48,120569,120570],{"__ignoreMap":46},[51,120571,120572],{"class":53,"line":54},[51,120573,120319],{"class":57},[10,120575,120576],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[10,120578,120579],{},[460,120580],{"alt":46,"src":120581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[19,120583,120584],{"start":185},[22,120585,120586],{},"下载CUDA并安装CUDA",[10,120588,118673,120589],{},[780,120590,118676],{"href":118676,"rel":120591},[24246],[10,120593,120594],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[10,120596,120597],{},[460,120598],{"alt":46,"src":120599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[10,120601,120602,120603,120608],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[780,120604,120607],{"href":120605,"rel":120606},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24246],"Vinci机器人队单片机教程","）",[10,120610,120611],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[10,120613,120614],{},[460,120615],{"alt":46,"src":120616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[10,120618,120619],{},"将最下方框框里的命令敲入终端",[41,120621,120623],{"className":118894,"code":120622,"language":118896,"meta":46,"style":46},"# 在当前文件夹下创建一个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",[48,120624,120625,120630,120639,120644,120651,120656,120664,120669,120680,120685],{"__ignoreMap":46},[51,120626,120627],{"class":53,"line":54},[51,120628,120629],{"class":601},"# 在当前文件夹下创建一个ttt的子文件夹\n",[51,120631,120632,120634,120636],{"class":53,"line":185},[51,120633,101638],{"class":57},[51,120635,29598],{"class":278},[51,120637,120638],{"class":61}," .\u002Fttt\n",[51,120640,120641],{"class":53,"line":202},[51,120642,120643],{"class":601},"# 进入ttt文件夹\n",[51,120645,120646,120648],{"class":53,"line":209},[51,120647,101648],{"class":278},[51,120649,120650],{"class":61}," ttt\n",[51,120652,120653],{"class":53,"line":223},[51,120654,120655],{"class":601},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[51,120657,120658,120661],{"class":53,"line":237},[51,120659,120660],{"class":57},"wget",[51,120662,120663],{"class":61}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[51,120665,120666],{"class":53,"line":242},[51,120667,120668],{"class":601},"# 给予权限\n",[51,120670,120671,120673,120675,120677],{"class":53,"line":257},[51,120672,24958],{"class":57},[51,120674,24961],{"class":61},[51,120676,120492],{"class":61},[51,120678,120679],{"class":61}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[51,120681,120682],{"class":53,"line":262},[51,120683,120684],{"class":601},"# 运行脚本\n",[51,120686,120687,120689],{"class":53,"line":285},[51,120688,24958],{"class":57},[51,120690,120679],{"class":61},[10,120692,120693],{},[460,120694],{"alt":46,"src":120695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[10,120697,120698],{},"正在安装中：",[10,120700,120701],{},[460,120702],{"alt":46,"src":120703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[10,120705,120706],{},"输入accept接受即可",[10,120708,120709],{},[460,120710],{"alt":46,"src":120711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[10,120713,120714],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[10,120716,120717],{},[460,120718],{"alt":46,"src":120719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[10,120721,120722],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[10,120724,120725],{},[460,120726],{"alt":46,"src":120727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[19,120729,120730],{"start":202},[22,120731,120732],{},"配置环境",[10,120734,120735],{},"根据上方确认一下路径，比如我上面红色框起来的为",[41,120737,120739],{"className":118894,"code":120738,"language":118896,"meta":46,"style":46},"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",[48,120740,120741,120757,120772],{"__ignoreMap":46},[51,120742,120743,120746,120749,120752,120755],{"class":53,"line":54},[51,120744,120745],{"class":57},"Please",[51,120747,120748],{"class":61}," make",[51,120750,120751],{"class":61}," sure",[51,120753,120754],{"class":61}," that",[51,120756,3062],{"class":65},[51,120758,120759,120761,120764,120767,120770],{"class":53,"line":185},[51,120760,52643],{"class":57},[51,120762,120763],{"class":61},"   PATH",[51,120765,120766],{"class":61}," includes",[51,120768,120769],{"class":61}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[51,120771,3062],{"class":65},[51,120773,120774,120776,120779,120781,120784,120787,120789,120792,120795,120798,120801,120803,120806,120808],{"class":53,"line":202},[51,120775,52643],{"class":57},[51,120777,120778],{"class":61},"   LD_LIBRARY_PATH",[51,120780,120766],{"class":61},[51,120782,120783],{"class":61}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[51,120785,120786],{"class":61}," or,",[51,120788,5594],{"class":61},[51,120790,120791],{"class":61}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[51,120793,120794],{"class":61}," to",[51,120796,120797],{"class":61}," \u002Fetc\u002Fld.so.conf",[51,120799,120800],{"class":61}," and",[51,120802,27612],{"class":61},[51,120804,120805],{"class":61}," ldconfig",[51,120807,64976],{"class":61},[51,120809,120810],{"class":61}," root\n",[10,120812,120813],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[41,120815,120817],{"className":118894,"code":120816,"language":118896,"meta":46,"style":46},"which nvcc\n",[48,120818,120819],{"__ignoreMap":46},[51,120820,120821,120824],{"class":53,"line":54},[51,120822,120823],{"class":278},"which",[51,120825,120826],{"class":61}," nvcc\n",[10,120828,120829],{},[460,120830],{"alt":46,"src":120831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[10,120833,120834],{},"所以我进行以下操作：",[41,120836,120838],{"className":118894,"code":120837,"language":118896,"meta":46,"style":46},"sudo vim ~\u002F.bashrc\n",[48,120839,120840],{"__ignoreMap":46},[51,120841,120842,120844,120846],{"class":53,"line":54},[51,120843,24958],{"class":57},[51,120845,118954],{"class":61},[51,120847,120848],{"class":61}," ~\u002F.bashrc\n",[10,120850,120851],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[41,120853,120855],{"className":118894,"code":120854,"language":118896,"meta":46,"style":46},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[48,120856,120857,120869],{"__ignoreMap":46},[51,120858,120859,120861,120864,120866],{"class":53,"line":54},[51,120860,25424],{"class":69},[51,120862,120863],{"class":65}," PATH",[51,120865,70],{"class":69},[51,120867,120868],{"class":65},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[51,120870,120871,120873,120876,120878],{"class":53,"line":185},[51,120872,25424],{"class":69},[51,120874,120875],{"class":65}," LD_LIBRARY_PATH",[51,120877,70],{"class":69},[51,120879,120880],{"class":65},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[10,120882,120883],{},[460,120884],{"alt":46,"src":120885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[41,120887,120889],{"className":118894,"code":120888,"language":118896,"meta":46,"style":46},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[48,120890,120891,120896,120902,120907],{"__ignoreMap":46},[51,120892,120893],{"class":53,"line":54},[51,120894,120895],{"class":601},"# 刷新当前终端的环境变量\n",[51,120897,120898,120900],{"class":53,"line":185},[51,120899,101265],{"class":278},[51,120901,120848],{"class":61},[51,120903,120904],{"class":53,"line":202},[51,120905,120906],{"class":601},"# 验证CUDA是否安装成功\n",[51,120908,120909,120912],{"class":53,"line":209},[51,120910,120911],{"class":57},"nvcc",[51,120913,120914],{"class":278}," -V\n",[10,120916,120917],{},"出现下图这种则安装成功。",[10,120919,120920],{},[460,120921],{"alt":46,"src":120922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[513,120924,120926],{"id":120925},"_354-安装cudnn","3.5.4 安装cuDNN",[19,120928,120929],{},[22,120930,120931],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[10,120933,120934,120935,120940],{},"前往 NVIDIA cuDNN 下载页面：",[780,120936,120939],{"href":120937,"rel":120938},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24246],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[10,120942,120943],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[10,120945,120946],{},[460,120947],{"alt":46,"src":120948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[10,120950,120951],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[10,120953,120954],{},[460,120955],{"alt":46,"src":120956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[10,120958,120959],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[10,120961,120962],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[10,120964,120965],{},[691,120966,120967],{},"我这里选择所有Linux X86_64最通用的办法：",[10,120969,120970],{},"下载好的：",[10,120972,120973],{},[460,120974],{"alt":46,"src":120975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[19,120977,120978],{"start":185},[22,120979,120980],{},"安装cuDNN",[10,120982,120983],{},"找到该文件所在目录，并打开终端，cd到该目录。",[10,120985,120986],{},[460,120987],{"alt":46,"src":120988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[10,120990,120991],{},"解压文件，并复制到对应位置完成安装",[41,120993,120995],{"className":118894,"code":120994,"language":118896,"meta":46,"style":46},"# 解压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",[48,120996,120997,121002,121013,121018,121025,121030,121046,121060,121065,121076,121085,121089,121105],{"__ignoreMap":46},[51,120998,120999],{"class":53,"line":54},[51,121000,121001],{"class":601},"# 解压cuDNN文件\n",[51,121003,121004,121007,121010],{"class":53,"line":185},[51,121005,121006],{"class":57},"tar",[51,121008,121009],{"class":278}," -xvf",[51,121011,121012],{"class":61}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[51,121014,121015],{"class":53,"line":202},[51,121016,121017],{"class":601},"# cd进文件夹\n",[51,121019,121020,121022],{"class":53,"line":209},[51,121021,101648],{"class":278},[51,121023,121024],{"class":61}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[51,121026,121027],{"class":53,"line":223},[51,121028,121029],{"class":601},"# 复制cuDNN文件到CUDA目录\n",[51,121031,121032,121034,121036,121039,121041,121044],{"class":53,"line":237},[51,121033,24958],{"class":57},[51,121035,28243],{"class":61},[51,121037,121038],{"class":61}," include\u002Fcudnn",[51,121040,997],{"class":278},[51,121042,121043],{"class":61},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[51,121045,3062],{"class":65},[51,121047,121048,121050,121052,121055,121057],{"class":53,"line":242},[51,121049,24958],{"class":57},[51,121051,28243],{"class":61},[51,121053,121054],{"class":61}," lib\u002Flibcudnn",[51,121056,997],{"class":278},[51,121058,121059],{"class":61},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[51,121061,121062],{"class":53,"line":257},[51,121063,121064],{"class":601},"# 对比一下有没有缺文件\n",[51,121066,121067,121069,121072,121074],{"class":53,"line":262},[51,121068,27143],{"class":57},[51,121070,121071],{"class":61}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[51,121073,997],{"class":278},[51,121075,3062],{"class":65},[51,121077,121078,121080,121083],{"class":53,"line":285},[51,121079,27143],{"class":57},[51,121081,121082],{"class":61}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[51,121084,119619],{"class":278},[51,121086,121087],{"class":53,"line":296},[51,121088,120668],{"class":601},[51,121090,121091,121093,121095,121098,121100,121102],{"class":53,"line":307},[51,121092,24958],{"class":57},[51,121094,24961],{"class":61},[51,121096,121097],{"class":61}," a+r",[51,121099,121071],{"class":61},[51,121101,997],{"class":278},[51,121103,121104],{"class":65},"   \n",[51,121106,121107,121109,121111,121113,121115],{"class":53,"line":324},[51,121108,24958],{"class":57},[51,121110,24961],{"class":61},[51,121112,121097],{"class":61},[51,121114,121082],{"class":61},[51,121116,119619],{"class":278},[19,121118,121119],{"start":202},[22,121120,121121],{},"检查是否安装成功",[41,121123,121125],{"className":118894,"code":121124,"language":118896,"meta":46,"style":46},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[48,121126,121127,121132],{"__ignoreMap":46},[51,121128,121129],{"class":53,"line":54},[51,121130,121131],{"class":601},"# 检查cuDNN版本命令\n",[51,121133,121134,121137,121140,121142,121144,121147,121150],{"class":53,"line":185},[51,121135,121136],{"class":57},"cat",[51,121138,121139],{"class":61}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[51,121141,25491],{"class":69},[51,121143,30618],{"class":57},[51,121145,121146],{"class":61}," CUDNN_MAJOR",[51,121148,121149],{"class":278}," -A",[51,121151,48095],{"class":278},[10,121153,121154],{},"出现下图这样的就是安装成功了",[10,121156,121157],{},[460,121158],{"alt":46,"src":121159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[19,121161,121162],{"start":209},[22,121163,121164],{},"软链接(一般不需要)",[41,121166,121168],{"className":118894,"code":121167,"language":118896,"meta":46,"style":46},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[48,121169,121170,121175],{"__ignoreMap":46},[51,121171,121172],{"class":53,"line":54},[51,121173,121174],{"class":601},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[51,121176,121177,121179],{"class":53,"line":185},[51,121178,24958],{"class":57},[51,121180,121181],{"class":61}," ldconfig\n",[10,121183,121184],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[41,121186,121191],{"className":121187,"code":121188,"language":121189,"meta":121190,"style":46},"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",[48,121192,121193,121198,121203,121208,121213,121218,121223],{"__ignoreMap":46},[51,121194,121195],{"class":53,"line":54},[51,121196,121197],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[51,121199,121200],{"class":53,"line":185},[51,121201,121202],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[51,121204,121205],{"class":53,"line":202},[51,121206,121207],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[51,121209,121210],{"class":53,"line":209},[51,121211,121212],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[51,121214,121215],{"class":53,"line":223},[51,121216,121217],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[51,121219,121220],{"class":53,"line":237},[51,121221,121222],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[51,121224,121225],{"class":53,"line":242},[51,121226,121227],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[10,121229,121230],{},"运行下方的命令",[41,121232,121234],{"className":118894,"code":121233,"language":118896,"meta":46,"style":46},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[48,121235,121236,121241,121248,121253],{"__ignoreMap":46},[51,121237,121238],{"class":53,"line":54},[51,121239,121240],{"class":601},"# cd进入CUDA路径\n",[51,121242,121243,121245],{"class":53,"line":185},[51,121244,101648],{"class":278},[51,121246,121247],{"class":61}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[51,121249,121250],{"class":53,"line":202},[51,121251,121252],{"class":601}," # 查看本路径下的需要软链接的文件名\n",[51,121254,121255],{"class":53,"line":209},[51,121256,121257],{"class":57}," ls\n",[10,121259,121260],{},[460,121261],{"alt":46,"src":121262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[10,121264,121265,121266,18793,121269,18793,121272,121275],{},"如上图，我需要将",[48,121267,121268],{},"libcudnn_xxx_xxxxx.so.8.9.7",[48,121270,121271],{},"libcudnn_xxx_xxxxx.so.8",[48,121273,121274],{},"libcudnn_xxx_xxxxx.so","软链接",[41,121277,121279],{"className":118894,"code":121278,"language":118896,"meta":46,"style":46},"# 创建符号链接。对于每个 .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",[48,121280,121281,121286,121302,121316,121330,121344,121358,121372,121386,121391,121397,121402],{"__ignoreMap":46},[51,121282,121283],{"class":53,"line":54},[51,121284,121285],{"class":601},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[51,121287,121288,121290,121293,121296,121299],{"class":53,"line":185},[51,121289,24958],{"class":57},[51,121291,121292],{"class":61}," ln",[51,121294,121295],{"class":278}," -sf",[51,121297,121298],{"class":61}," libcudnn_cnn_train.so.8.9.7",[51,121300,121301],{"class":61}," libcudnn_cnn_train.so.8\n",[51,121303,121304,121306,121308,121310,121313],{"class":53,"line":202},[51,121305,24958],{"class":57},[51,121307,121292],{"class":61},[51,121309,121295],{"class":278},[51,121311,121312],{"class":61}," libcudnn_adv_infer.so.8.9.7",[51,121314,121315],{"class":61}," libcudnn_adv_infer.so.8\n",[51,121317,121318,121320,121322,121324,121327],{"class":53,"line":209},[51,121319,24958],{"class":57},[51,121321,121292],{"class":61},[51,121323,121295],{"class":278},[51,121325,121326],{"class":61}," libcudnn_adv_train.so.8.9.7",[51,121328,121329],{"class":61}," libcudnn_adv_train.so.8\n",[51,121331,121332,121334,121336,121338,121341],{"class":53,"line":223},[51,121333,24958],{"class":57},[51,121335,121292],{"class":61},[51,121337,121295],{"class":278},[51,121339,121340],{"class":61}," libcudnn_cnn_infer.so.8.9.7",[51,121342,121343],{"class":61}," libcudnn_cnn_infer.so.8\n",[51,121345,121346,121348,121350,121352,121355],{"class":53,"line":237},[51,121347,24958],{"class":57},[51,121349,121292],{"class":61},[51,121351,121295],{"class":278},[51,121353,121354],{"class":61}," libcudnn.so.8.9.7",[51,121356,121357],{"class":61}," libcudnn.so.8\n",[51,121359,121360,121362,121364,121366,121369],{"class":53,"line":242},[51,121361,24958],{"class":57},[51,121363,121292],{"class":61},[51,121365,121295],{"class":278},[51,121367,121368],{"class":61}," libcudnn_ops_infer.so.8.9.7",[51,121370,121371],{"class":61}," libcudnn_ops_infer.so.8\n",[51,121373,121374,121376,121378,121380,121383],{"class":53,"line":257},[51,121375,24958],{"class":57},[51,121377,121292],{"class":61},[51,121379,121295],{"class":278},[51,121381,121382],{"class":61}," libcudnn_ops_train.so.8.9.7",[51,121384,121385],{"class":61}," libcudnn_ops_train.so.8\n",[51,121387,121388],{"class":53,"line":262},[51,121389,121390],{"class":601},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[51,121392,121393,121395],{"class":53,"line":285},[51,121394,24958],{"class":57},[51,121396,121181],{"class":61},[51,121398,121399],{"class":53,"line":296},[51,121400,121401],{"class":601},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[51,121403,121404,121406,121409,121412,121414,121417],{"class":53,"line":307},[51,121405,27143],{"class":57},[51,121407,121408],{"class":278}," -l",[51,121410,121411],{"class":61}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[51,121413,997],{"class":278},[51,121415,121416],{"class":61},".so",[51,121418,119619],{"class":278},[513,121420,121422],{"id":121421},"_355-常见问题","3.5.5 常见问题",[19,121424,121425],{},[22,121426,121427],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[41,121429,121431],{"className":118894,"code":121430,"language":118896,"meta":46,"style":46},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[48,121432,121433],{"__ignoreMap":46},[51,121434,121435,121437,121439],{"class":53,"line":54},[51,121436,24958],{"class":57},[51,121438,118954],{"class":61},[51,121440,121441],{"class":61}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[10,121443,121444],{},"blacklist-nouveau.conf文件内容如下：",[41,121446,121448],{"className":118894,"code":121447,"language":118896,"meta":46,"style":46},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[48,121449,121450,121458,121465,121477,121487],{"__ignoreMap":46},[51,121451,121452,121455],{"class":53,"line":54},[51,121453,121454],{"class":57},"blacklist",[51,121456,121457],{"class":61}," nouveau\n",[51,121459,121460,121462],{"class":53,"line":185},[51,121461,121454],{"class":57},[51,121463,121464],{"class":61}," lbm-nouveau\n",[51,121466,121467,121469,121472,121475],{"class":53,"line":202},[51,121468,116301],{"class":57},[51,121470,121471],{"class":61}," nouveau",[51,121473,121474],{"class":61}," modeset=",[51,121476,3472],{"class":278},[51,121478,121479,121482,121484],{"class":53,"line":209},[51,121480,121481],{"class":278},"alias",[51,121483,121471],{"class":61},[51,121485,121486],{"class":61}," off\n",[51,121488,121489,121491,121494],{"class":53,"line":223},[51,121490,121481],{"class":278},[51,121492,121493],{"class":61}," lbm-nouveau",[51,121495,121486],{"class":61},[10,121497,121498],{},"接着运行下方命令",[41,121500,121502],{"className":118894,"code":121501,"language":118896,"meta":46,"style":46},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[48,121503,121504,121514,121519],{"__ignoreMap":46},[51,121505,121506,121508,121511],{"class":53,"line":54},[51,121507,24958],{"class":57},[51,121509,121510],{"class":61}," update-initramfs",[51,121512,121513],{"class":278}," -u\n",[51,121515,121516],{"class":53,"line":185},[51,121517,121518],{"class":57},"或者\n",[51,121520,121521,121523,121526],{"class":53,"line":202},[51,121522,24958],{"class":57},[51,121524,121525],{"class":61}," dracut",[51,121527,121528],{"class":278}," --force\n",[10,121530,121531],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[41,121533,121535],{"className":118894,"code":121534,"language":118896,"meta":46,"style":46},"lsmod | grep nouveau\n",[48,121536,121537],{"__ignoreMap":46},[51,121538,121539,121542,121544,121546],{"class":53,"line":54},[51,121540,121541],{"class":57},"lsmod",[51,121543,25491],{"class":69},[51,121545,30618],{"class":57},[51,121547,121457],{"class":61},[19,121549,121550],{"start":185},[22,121551,121552],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[41,121554,121556],{"className":118894,"code":121555,"language":118896,"meta":46,"style":46},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[48,121557,121558],{"__ignoreMap":46},[51,121559,121560,121562,121564],{"class":53,"line":54},[51,121561,24958],{"class":57},[51,121563,118954],{"class":61},[51,121565,121566],{"class":61}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[10,121568,121569],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[41,121571,121573],{"className":118894,"code":121572,"language":118896,"meta":46,"style":46},"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",[48,121574,121575,121583,121591,121599,121606,121614,121624,121632],{"__ignoreMap":46},[51,121576,121577,121580],{"class":53,"line":54},[51,121578,121579],{"class":57},"Section",[51,121581,121582],{"class":61}," \"OutputClass\"\n",[51,121584,121585,121588],{"class":53,"line":185},[51,121586,121587],{"class":57},"   Identifier",[51,121589,121590],{"class":61}," \"nvidia\"\n",[51,121592,121593,121596],{"class":53,"line":202},[51,121594,121595],{"class":57},"   MatchDriver",[51,121597,121598],{"class":61}," \"nvidia-drm\"\n",[51,121600,121601,121604],{"class":53,"line":209},[51,121602,121603],{"class":57},"   Driver",[51,121605,121590],{"class":61},[51,121607,121608,121611],{"class":53,"line":223},[51,121609,121610],{"class":57},"   Option",[51,121612,121613],{"class":61}," \"AllowEmptyInitialConfiguration\"\n",[51,121615,121616,121618,121621],{"class":53,"line":237},[51,121617,121610],{"class":57},[51,121619,121620],{"class":61}," \"PrimaryGPU\"",[51,121622,121623],{"class":61}," \"yes\"\n",[51,121625,121626,121629],{"class":53,"line":242},[51,121627,121628],{"class":57},"   ModulePath",[51,121630,121631],{"class":61}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[51,121633,121634],{"class":53,"line":257},[51,121635,121636],{"class":57},"EndSection\n",[19,121638,121639],{"start":202},[22,121640,121641],{},"安装N卡驱动提示错误",[41,121643,121645],{"className":121187,"code":121644,"language":121189,"meta":121190,"style":46},"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",[48,121646,121647],{"__ignoreMap":46},[51,121648,121649],{"class":53,"line":54},[51,121650,121644],{},[19,121652,121653],{},[22,121654,121655],{},"检查当前运行的内核版本：",[10,121657,121658],{},"运行以下命令以查看你当前正在使用的内核版本：",[41,121660,121662],{"className":117667,"code":121661,"language":117669,"meta":46,"style":46},"uname -r\n",[48,121663,121664],{"__ignoreMap":46},[51,121665,121666,121668],{"class":53,"line":54},[51,121667,70576],{"class":57},[51,121669,121670],{"class":278}," -r\n",[19,121672,121673],{"start":185},[22,121674,121675],{},"安装内核开发文件：",[10,121677,121678,121679,121682],{},"确保你已经安装了与当前内核版本相匹配的 ",[48,121680,121681],{},"kernel-devel"," 包。运行以下命令来安装：",[41,121684,121686],{"className":117667,"code":121685,"language":117669,"meta":46,"style":46},"sudo dnf install kernel-devel-$(uname -r)\n",[48,121687,121688],{"__ignoreMap":46},[51,121689,121690,121692,121694,121696,121699,121701,121703,121705],{"class":53,"line":54},[51,121691,24958],{"class":57},[51,121693,26697],{"class":61},[51,121695,24215],{"class":61},[51,121697,121698],{"class":61}," kernel-devel-",[51,121700,25481],{"class":65},[51,121702,70576],{"class":57},[51,121704,120010],{"class":278},[51,121706,282],{"class":65},[10,121708,121709],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[19,121711,121712],{"start":202},[22,121713,121714],{},"安装内核源代码（如果需要）：",[10,121716,121717],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[41,121719,121721],{"className":117667,"code":121720,"language":117669,"meta":46,"style":46},"sudo dnf install kernel-headers kernel-source\n",[48,121722,121723],{"__ignoreMap":46},[51,121724,121725,121727,121729,121731,121734],{"class":53,"line":54},[51,121726,24958],{"class":57},[51,121728,26697],{"class":61},[51,121730,24215],{"class":61},[51,121732,121733],{"class":61}," kernel-headers",[51,121735,121736],{"class":61}," kernel-source\n",[19,121738,121739],{"start":209},[22,121740,121741],{},"检查安装：",[10,121743,121744,121745,121748],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[48,121746,121747],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[41,121750,121752],{"className":117667,"code":121751,"language":117669,"meta":46,"style":46},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[48,121753,121754],{"__ignoreMap":46},[51,121755,121756,121758],{"class":53,"line":54},[51,121757,27143],{"class":57},[51,121759,121760],{"class":61}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[10,121762,121763,121764,121767],{},"如果仍然遇到问题，可以通过 ",[48,121765,121766],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[464,121769,121770],{},"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":46,"searchDepth":185,"depth":185,"links":121772},[121773,121777,121787,121791,121792],{"id":118870,"depth":185,"text":118871,"children":121774},[121775,121776],{"id":118880,"depth":202,"text":118881},{"id":118890,"depth":202,"text":118891},{"id":119090,"depth":185,"text":119091,"children":121778},[121779,121780,121781,121782,121783,121784,121785,121786],{"id":119094,"depth":202,"text":119095},{"id":119164,"depth":202,"text":119165},{"id":119253,"depth":202,"text":119254},{"id":119498,"depth":202,"text":119499},{"id":119568,"depth":202,"text":119569},{"id":119635,"depth":202,"text":119636},{"id":119670,"depth":202,"text":119671},{"id":119725,"depth":202,"text":119726},{"id":119776,"depth":185,"text":119777,"children":121788},[121789,121790],{"id":119780,"depth":202,"text":119781},{"id":119860,"depth":202,"text":119861},{"id":120046,"depth":185,"text":120047},{"id":120219,"depth":185,"text":120220,"children":121793},[121794,121795,121796,121797,121798],{"id":120223,"depth":202,"text":120224},{"id":120264,"depth":202,"text":120265},{"id":120551,"depth":202,"text":120552},{"id":120925,"depth":202,"text":120926},{"id":121421,"depth":202,"text":121422},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118862,"description":23760},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121805,"title":121806,"body":121807,"description":23760,"extension":469,"meta":122147,"navigation":205,"path":122148,"seo":122149,"stem":122150,"__hash__":122151},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121808,"toc":122145},[121809,121812,121817,121820,122066,122071,122074,122110,122113,122142],[14,121810,121806],{"id":121811},"_4-命令教程长期积累",[19,121813,121814],{},[22,121815,121816],{},"大多数命令",[10,121818,121819],{},"常用 Linux 命令速查：",[41,121821,121823],{"className":117667,"code":121822,"language":117669,"meta":46,"style":46},"# 文件与目录\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",[48,121824,121825,121830,121837,121844,121852,121859,121866,121874,121882,121889,121896,121904,121908,121913,121920,121928,121935,121939,121944,121951,121959,121967,121975,121983,121987,121992,122000,122007,122014,122022,122030,122034,122039,122048,122057],{"__ignoreMap":46},[51,121826,121827],{"class":53,"line":54},[51,121828,121829],{"class":601},"# 文件与目录\n",[51,121831,121832,121834],{"class":53,"line":185},[51,121833,27143],{"class":57},[51,121835,121836],{"class":601},"        # 列出目录内容\n",[51,121838,121839,121841],{"class":53,"line":202},[51,121840,101648],{"class":278},[51,121842,121843],{"class":601},"        # 切换目录\n",[51,121845,121846,121849],{"class":53,"line":209},[51,121847,121848],{"class":278},"pwd",[51,121850,121851],{"class":601},"       # 显示当前路径\n",[51,121853,121854,121856],{"class":53,"line":223},[51,121855,101638],{"class":57},[51,121857,121858],{"class":601},"     # 创建目录\n",[51,121860,121861,121863],{"class":53,"line":237},[51,121862,25704],{"class":57},[51,121864,121865],{"class":601},"        # 删除文件或目录\n",[51,121867,121868,121871],{"class":53,"line":242},[51,121869,121870],{"class":57},"cp",[51,121872,121873],{"class":601},"        # 复制文件或目录\n",[51,121875,121876,121879],{"class":53,"line":257},[51,121877,121878],{"class":57},"mv",[51,121880,121881],{"class":601},"        # 移动\u002F重命名文件或目录\n",[51,121883,121884,121886],{"class":53,"line":262},[51,121885,101655],{"class":57},[51,121887,121888],{"class":601},"     # 创建空文件\n",[51,121890,121891,121893],{"class":53,"line":285},[51,121892,121136],{"class":57},[51,121894,121895],{"class":601},"       # 查看文件内容\n",[51,121897,121898,121901],{"class":53,"line":296},[51,121899,121900],{"class":57},"head\u002Ftail",[51,121902,121903],{"class":601}," # 查看文件头部\u002F尾部\n",[51,121905,121906],{"class":53,"line":307},[51,121907,206],{"emptyLinePlaceholder":205},[51,121909,121910],{"class":53,"line":324},[51,121911,121912],{"class":601},"# 权限管理\n",[51,121914,121915,121917],{"class":53,"line":329},[51,121916,24993],{"class":57},[51,121918,121919],{"class":601},"     # 修改文件权限\n",[51,121921,121922,121925],{"class":53,"line":334},[51,121923,121924],{"class":57},"chown",[51,121926,121927],{"class":601},"     # 修改文件所有者\n",[51,121929,121930,121932],{"class":53,"line":340},[51,121931,24958],{"class":57},[51,121933,121934],{"class":601},"      # 以管理员身份执行\n",[51,121936,121937],{"class":53,"line":345},[51,121938,206],{"emptyLinePlaceholder":205},[51,121940,121941],{"class":53,"line":357},[51,121942,121943],{"class":601},"# 系统信息\n",[51,121945,121946,121948],{"class":53,"line":366},[51,121947,70576],{"class":57},[51,121949,121950],{"class":601},"     # 系统信息\n",[51,121952,121953,121956],{"class":53,"line":383},[51,121954,121955],{"class":57},"df",[51,121957,121958],{"class":601},"        # 磁盘使用情况\n",[51,121960,121961,121964],{"class":53,"line":392},[51,121962,121963],{"class":57},"free",[51,121965,121966],{"class":601},"      # 内存使用情况\n",[51,121968,121969,121972],{"class":53,"line":403},[51,121970,121971],{"class":57},"top\u002Fhtop",[51,121973,121974],{"class":601},"  # 进程监控\n",[51,121976,121977,121980],{"class":53,"line":409},[51,121978,121979],{"class":57},"ps",[51,121981,121982],{"class":601},"        # 查看进程\n",[51,121984,121985],{"class":53,"line":414},[51,121986,206],{"emptyLinePlaceholder":205},[51,121988,121989],{"class":53,"line":433},[51,121990,121991],{"class":601},"# 网络\n",[51,121993,121994,121997],{"class":53,"line":439},[51,121995,121996],{"class":57},"ping",[51,121998,121999],{"class":601},"      # 测试网络连通性\n",[51,122001,122002,122004],{"class":53,"line":444},[51,122003,27231],{"class":57},[51,122005,122006],{"class":601},"      # 发送 HTTP 请求\n",[51,122008,122009,122011],{"class":53,"line":453},[51,122010,120660],{"class":57},[51,122012,122013],{"class":601},"      # 下载文件\n",[51,122015,122016,122019],{"class":53,"line":2174},[51,122017,122018],{"class":57},"ssh",[51,122020,122021],{"class":601},"       # 远程登录\n",[51,122023,122024,122027],{"class":53,"line":2965},[51,122025,122026],{"class":57},"scp",[51,122028,122029],{"class":601},"       # 远程文件传输\n",[51,122031,122032],{"class":53,"line":2979},[51,122033,206],{"emptyLinePlaceholder":205},[51,122035,122036],{"class":53,"line":2987},[51,122037,122038],{"class":601},"# 包管理（Debian\u002FUbuntu）\n",[51,122040,122041,122043,122045],{"class":53,"line":2992},[51,122042,117739],{"class":57},[51,122044,117718],{"class":61},[51,122046,122047],{"class":601},"   # 更新软件源\n",[51,122049,122050,122052,122054],{"class":53,"line":2998},[51,122051,117739],{"class":57},[51,122053,24215],{"class":61},[51,122055,122056],{"class":601},"  # 安装软件包\n",[51,122058,122059,122061,122063],{"class":53,"line":3004},[51,122060,117739],{"class":57},[51,122062,26461],{"class":61},[51,122064,122065],{"class":601},"   # 卸载软件包\n",[19,122067,122068],{"start":185},[22,122069,122070],{},"KDE Dolphin 以root打开",[10,122072,122073],{},"kde5",[41,122075,122077],{"className":117667,"code":122076,"language":117669,"meta":46,"style":46},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[48,122078,122079],{"__ignoreMap":46},[51,122080,122081,122084,122087,122090,122092,122094,122097,122100,122102,122105,122107],{"class":53,"line":54},[51,122082,122083],{"class":57},"pkexec",[51,122085,122086],{"class":61}," env",[51,122088,122089],{"class":61}," DISPLAY=",[51,122091,28525],{"class":65},[51,122093,28583],{"class":61},[51,122095,122096],{"class":65},"$XAUTHORITY ",[51,122098,122099],{"class":61},"KDE_SESSION_VERSION=",[51,122101,861],{"class":278},[51,122103,122104],{"class":61}," KDE_FULL_SESSION=",[51,122106,1772],{"class":278},[51,122108,122109],{"class":61}," dolphin\n",[10,122111,122112],{},"kde6",[41,122114,122116],{"className":117667,"code":122115,"language":117669,"meta":46,"style":46},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[48,122117,122118],{"__ignoreMap":46},[51,122119,122120,122122,122124,122126,122128,122130,122132,122134,122136,122138,122140],{"class":53,"line":54},[51,122121,122083],{"class":57},[51,122123,122086],{"class":61},[51,122125,122089],{"class":61},[51,122127,28525],{"class":65},[51,122129,28583],{"class":61},[51,122131,122096],{"class":65},[51,122133,122099],{"class":61},[51,122135,886],{"class":278},[51,122137,122104],{"class":61},[51,122139,1772],{"class":278},[51,122141,122109],{"class":61},[464,122143,122144],{},"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":46,"searchDepth":185,"depth":185,"links":122146},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121806,"description":23760},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122153,"title":122154,"body":122155,"description":23760,"extension":469,"meta":122169,"navigation":205,"path":122170,"seo":122171,"stem":122172,"__hash__":122173},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122156,"toc":122167},[122157,122160],[14,122158,122154],{"id":122159},"_5-各种环境配置",[10,122161,122162],{},[780,122163,122166],{"href":122164,"rel":122165},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24246],"电控组环境搭建大全",{"title":46,"searchDepth":185,"depth":185,"links":122168},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122154,"description":23760},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122175,"title":122176,"body":122177,"description":23760,"extension":469,"meta":122525,"navigation":205,"path":122526,"seo":122527,"stem":122528,"__hash__":122529},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122178,"toc":122517},[122179,122182,122186,122190,122194,122199,122206,122210,122503,122507,122514],[14,122180,122176],{"id":122181},"_6-拓展功能",[486,122183,122185],{"id":122184},"_61-wine","6.1 Wine",[486,122187,122189],{"id":122188},"_62-android","6.2 Android",[513,122191,122193],{"id":122192},"_621-i卡a卡","6.2.1 I卡、A卡",[19,122195,122196],{},[22,122197,122198],{},"Wayland-Waydroid(体验超级好)",[10,122200,122201,122202],{},"Waydroid 官网与安装指南：",[780,122203,122204],{"href":122204,"rel":122205},"https:\u002F\u002Fwaydro.id\u002F",[24246],[513,122207,122209],{"id":122208},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[19,122211,122212],{},[22,122213,122214,122215,122217,122218,122222,122224,122227,122232,122429],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54088,122216],{},"BlissOS 官网下载：",[780,122219,122220],{"href":122220,"rel":122221},"https:\u002F\u002Fblissos.org\u002F",[24246],[54088,122223],{},[460,122225],{"alt":46,"src":122226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[19,122228,122229],{"start":202},[22,122230,122231],{},"比较推荐的配置",[41,122233,122235],{"className":117667,"code":122234,"language":117669,"meta":46,"style":46},"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",[48,122236,122237,122244,122254,122264,122274,122286,122296,122303,122313,122322,122331,122341,122351,122360,122370,122380,122392,122402,122411,122421],{"__ignoreMap":46},[51,122238,122239,122242],{"class":53,"line":54},[51,122240,122241],{"class":57},"qemu-system-x86_64",[51,122243,25060],{"class":278},[51,122245,122246,122249,122252],{"class":53,"line":185},[51,122247,122248],{"class":278},"        -M",[51,122250,122251],{"class":61}," q35,vmport=off",[51,122253,25060],{"class":278},[51,122255,122256,122259,122262],{"class":53,"line":202},[51,122257,122258],{"class":278},"        -accel",[51,122260,122261],{"class":61}," kvm",[51,122263,25060],{"class":278},[51,122265,122266,122269,122272],{"class":53,"line":209},[51,122267,122268],{"class":278},"        -cpu",[51,122270,122271],{"class":61}," qemu64,+sse3,+sse4.2",[51,122273,25060],{"class":278},[51,122275,122276,122279,122282,122284],{"class":53,"line":223},[51,122277,122278],{"class":278},"        -smp",[51,122280,122281],{"class":61}," 8,cores=",[51,122283,835],{"class":278},[51,122285,25060],{"class":278},[51,122287,122288,122291,122294],{"class":53,"line":237},[51,122289,122290],{"class":278},"        -m",[51,122292,122293],{"class":61}," 6G",[51,122295,25060],{"class":278},[51,122297,122298,122301],{"class":53,"line":242},[51,122299,122300],{"class":278},"        -usb",[51,122302,25060],{"class":278},[51,122304,122305,122308,122311],{"class":53,"line":257},[51,122306,122307],{"class":278},"        -device",[51,122309,122310],{"class":61}," virtio-tablet",[51,122312,25060],{"class":278},[51,122314,122315,122317,122320],{"class":53,"line":262},[51,122316,122307],{"class":278},[51,122318,122319],{"class":61}," virtio-keyboard",[51,122321,25060],{"class":278},[51,122323,122324,122326,122329],{"class":53,"line":285},[51,122325,122307],{"class":278},[51,122327,122328],{"class":61}," usb-tablet",[51,122330,25060],{"class":278},[51,122332,122333,122336,122339],{"class":53,"line":296},[51,122334,122335],{"class":278},"        -bios",[51,122337,122338],{"class":61}," OVMF-pure-efi64.fd",[51,122340,25060],{"class":278},[51,122342,122343,122346,122349],{"class":53,"line":307},[51,122344,122345],{"class":278},"        -net",[51,122347,122348],{"class":61}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[51,122350,25060],{"class":278},[51,122352,122353,122355,122358],{"class":53,"line":324},[51,122354,122345],{"class":278},[51,122356,122357],{"class":61}," nic,model=virtio",[51,122359,25060],{"class":278},[51,122361,122362,122365,122368],{"class":53,"line":329},[51,122363,122364],{"class":278},"        -audio",[51,122366,122367],{"class":61}," sdl,model=hda",[51,122369,25060],{"class":278},[51,122371,122372,122375,122378],{"class":53,"line":334},[51,122373,122374],{"class":278},"        -display",[51,122376,122377],{"class":61}," sdl,gl=on,show-cursor=on",[51,122379,25060],{"class":278},[51,122381,122382,122384,122387,122390],{"class":53,"line":340},[51,122383,122307],{"class":278},[51,122385,122386],{"class":61}," virtio-vga-gl,xres=1920,yres=",[51,122388,122389],{"class":278},"1080",[51,122391,25060],{"class":278},[51,122393,122394,122397,122400],{"class":53,"line":345},[51,122395,122396],{"class":278},"        -drive",[51,122398,122399],{"class":61}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[51,122401,25060],{"class":278},[51,122403,122404,122406,122409],{"class":53,"line":357},[51,122405,122396],{"class":278},[51,122407,122408],{"class":61}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[51,122410,25060],{"class":278},[51,122412,122413,122416,122419],{"class":53,"line":366},[51,122414,122415],{"class":278},"        -monitor",[51,122417,122418],{"class":61}," stdio",[51,122420,25060],{"class":278},[51,122422,122423,122426],{"class":53,"line":383},[51,122424,122425],{"class":278},"        -serial",[51,122427,122428],{"class":61}," none\n",[19,122430,122431],{"start":223},[22,122432,122433,122434],{},"常用操作：",[19,122435,122436,122439,122495],{},[22,122437,122438],{},"全屏：Ctrl+Alt+F",[22,122440,122441,122442,122447],{},"adb调试",[19,122443,122444],{},[22,122445,122446],{},"使Linux与Android用ADB连接。",[41,122448,122450],{"className":117667,"code":122449,"language":117669,"meta":46,"style":46},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[48,122451,122452,122457,122468,122473,122485,122490],{"__ignoreMap":46},[51,122453,122454],{"class":53,"line":54},[51,122455,122456],{"class":601},"# 连接安卓\n",[51,122458,122459,122462,122465],{"class":53,"line":185},[51,122460,122461],{"class":57},"adb",[51,122463,122464],{"class":61}," connect",[51,122466,122467],{"class":278}," 127.0.0.1\n",[51,122469,122470],{"class":53,"line":202},[51,122471,122472],{"class":601},"# 打开shell\n",[51,122474,122475,122477,122479,122482],{"class":53,"line":209},[51,122476,122461],{"class":57},[51,122478,27265],{"class":278},[51,122480,122481],{"class":61}," 127.0.0.1:5555",[51,122483,122484],{"class":61}," shell\n",[51,122486,122487],{"class":53,"line":223},[51,122488,122489],{"class":601},"# 使用root权限\n",[51,122491,122492],{"class":53,"line":237},[51,122493,122494],{"class":57},"su\n",[22,122496,122497,122498],{},"中文输入法",[19,122499,122500],{},[22,122501,122502],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[486,122504,122506],{"id":122505},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[10,122508,122509,122510],{},"rEFInd 官网与文档：",[780,122511,122512],{"href":122512,"rel":122513},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24246],[464,122515,122516],{},"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":46,"searchDepth":185,"depth":185,"links":122518},[122519,122520,122524],{"id":122184,"depth":185,"text":122185},{"id":122188,"depth":185,"text":122189,"children":122521},[122522,122523],{"id":122192,"depth":202,"text":122193},{"id":122208,"depth":202,"text":122209},{"id":122505,"depth":185,"text":122506},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122176,"description":23760},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122531,"title":122532,"body":122533,"description":23760,"extension":469,"meta":125832,"navigation":205,"path":125833,"seo":125834,"stem":125835,"__hash__":125836},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122534,"toc":125806},[122535,122538,122542,122545,122552,122802,122805,122877,122880,122884,122888,122893,122896,122899,122902,122907,122910,122913,122916,122921,122924,122929,122932,122935,122940,122943,122948,122951,122955,122959,122962,122967,122970,122984,122987,122990,122999,123002,123011,123014,123017,123026,123029,123038,123041,123044,123053,123056,123059,123074,123077,123080,123089,123094,123097,123100,123109,123112,123121,123124,123133,123136,123145,123150,123153,123161,123166,123169,123178,123181,123189,123194,123197,123206,123209,123212,123216,123219,123224,123227,123232,123246,123251,123256,123267,123272,123278,123283,123298,123303,123306,123311,123316,123321,123329,123334,123341,123346,123357,123362,123365,123369,123372,123375,123380,123383,123402,123407,123410,123419,123424,123427,123449,123452,123482,123485,123490,123493,123507,123512,123531,123534,123537,123542,123554,123559,123564,123567,123572,123575,123590,123593,123598,123603,123607,123612,123652,123655,123659,123665,123671,123676,123679,123686,123691,123698,123701,123704,123711,123725,123728,123788,123791,123805,123817,123820,123823,123826,123890,123893,123896,123899,123919,123922,123927,123934,123938,123941,123945,123950,123955,123959,123962,123965,124007,124012,124015,124037,124052,124054,124059,124071,124131,124133,124135,124189,124191,124193,124199,124204,124207,124212,124216,124219,124281,124286,124289,124291,124295,124307,124389,124391,124393,124447,124453,124455,124459,124464,124466,124471,124475,124495,124530,124534,124537,124540,124543,124550,124553,124565,124568,124583,124586,124605,124653,124656,124673,124676,124690,124695,124698,124707,124722,124734,124772,124777,124786,124791,124796,124822,124831,124835,124839,124844,124847,124851,124855,124860,124863,124868,124871,124876,124879,124884,124887,124891,124896,124899,124904,124907,124911,124916,124919,124924,124927,124932,124935,124939,124944,124947,124952,124955,124960,124963,124967,124972,124975,124980,124983,124988,124991,124996,124999,125004,125007,125012,125015,125019,125024,125027,125032,125039,125043,125048,125051,125056,125059,125063,125068,125071,125074,125077,125080,125083,125087,125090,125100,125105,125110,125132,125137,125142,125149,125153,125158,125161,125164,125169,125172,125175,125178,125181,125184,125187,125190,125193,125196,125199,125202,125205,125210,125215,125220,125225,125230,125235,125240,125243,125247,125250,125254,125259,125264,125269,125274,125278,125284,125292,125297,125300,125305,125320,125323,125328,125362,125377,125380,125435,125461,125473,125476,125485,125488,125503,125508,125511,125517,125522,125525,125530,125533,125538,125543,125550,125553,125568,125571,125606,125611,125619,125657,125660,125663,125668,125671,125676,125687,125721,125726,125729,125738,125743,125749,125752,125757,125766,125771,125774,125777,125782,125790,125793,125798,125803],[14,122536,122532],{"id":122537},"_7-其他操作",[486,122539,122541],{"id":122540},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[10,122543,122544],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[10,122546,122547,122548,122551],{},"进入工控机的硬盘目录，进入",[48,122549,122550],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[41,122553,122557],{"className":122554,"code":122555,"language":122556,"meta":46,"style":46},"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",[48,122558,122559,122567,122578,122585,122592,122604,122611,122623,122634,122645,122652,122659,122666,122678,122690,122697,122709,122721,122728,122740,122752,122764,122775,122782,122793],{"__ignoreMap":46},[51,122560,122561,122564],{"class":53,"line":54},[51,122562,122563],{"class":51672},"network",[51,122565,122566],{"class":65},": \n",[51,122568,122569,122572,122574,122576],{"class":53,"line":185},[51,122570,122571],{"class":51672},"  version",[51,122573,51809],{"class":65},[51,122575,620],{"class":278},[51,122577,3062],{"class":65},[51,122579,122580,122583],{"class":53,"line":202},[51,122581,122582],{"class":51672},"  wifis",[51,122584,122566],{"class":65},[51,122586,122587,122590],{"class":53,"line":209},[51,122588,122589],{"class":51672},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[51,122591,122566],{"class":65},[51,122593,122594,122597,122599,122602],{"class":53,"line":223},[51,122595,122596],{"class":51672},"      renderer",[51,122598,51809],{"class":65},[51,122600,122601],{"class":61},"NetworkManager",[51,122603,3062],{"class":65},[51,122605,122606,122609],{"class":53,"line":237},[51,122607,122608],{"class":51672},"      match",[51,122610,122566],{"class":65},[51,122612,122613,122616,122618,122621],{"class":53,"line":242},[51,122614,122615],{"class":51672},"        name",[51,122617,51809],{"class":65},[51,122619,122620],{"class":61},"\"wlan0\"",[51,122622,3062],{"class":65},[51,122624,122625,122628,122630,122632],{"class":53,"line":257},[51,122626,122627],{"class":51672},"      dhcp4",[51,122629,51809],{"class":65},[51,122631,1772],{"class":278},[51,122633,3062],{"class":65},[51,122635,122636,122639,122641,122643],{"class":53,"line":262},[51,122637,122638],{"class":51672},"      dhcp6",[51,122640,51809],{"class":65},[51,122642,1772],{"class":278},[51,122644,3062],{"class":65},[51,122646,122647,122650],{"class":53,"line":285},[51,122648,122649],{"class":51672},"      access-points",[51,122651,122566],{"class":65},[51,122653,122654,122657],{"class":53,"line":296},[51,122655,122656],{"class":61},"        \"EMIS_Vinci_Robocon_5G\"",[51,122658,122566],{"class":65},[51,122660,122661,122664],{"class":53,"line":307},[51,122662,122663],{"class":51672},"          auth",[51,122665,122566],{"class":65},[51,122667,122668,122671,122673,122676],{"class":53,"line":324},[51,122669,122670],{"class":51672},"            key-management",[51,122672,51809],{"class":65},[51,122674,122675],{"class":61},"\"psk\"",[51,122677,3062],{"class":65},[51,122679,122680,122683,122685,122688],{"class":53,"line":329},[51,122681,122682],{"class":51672},"            password",[51,122684,51809],{"class":65},[51,122686,122687],{"class":61},"\"vinci666\"",[51,122689,3062],{"class":65},[51,122691,122692,122695],{"class":53,"line":334},[51,122693,122694],{"class":51672},"          networkmanager",[51,122696,122566],{"class":65},[51,122698,122699,122702,122704,122707],{"class":53,"line":340},[51,122700,122701],{"class":51672},"            uuid",[51,122703,51809],{"class":65},[51,122705,122706],{"class":61},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[51,122708,3062],{"class":65},[51,122710,122711,122714,122716,122719],{"class":53,"line":345},[51,122712,122713],{"class":51672},"            name",[51,122715,51809],{"class":65},[51,122717,122718],{"class":61},"\"EMIS_Vinci_Robocon_5G\"",[51,122720,3062],{"class":65},[51,122722,122723,122726],{"class":53,"line":357},[51,122724,122725],{"class":51672},"            passthrough",[51,122727,122566],{"class":65},[51,122729,122730,122733,122735,122738],{"class":53,"line":366},[51,122731,122732],{"class":51672},"              wifi-security.auth-alg",[51,122734,51809],{"class":65},[51,122736,122737],{"class":61},"\"open\"",[51,122739,3062],{"class":65},[51,122741,122742,122745,122747,122750],{"class":53,"line":383},[51,122743,122744],{"class":51672},"              ipv6.addr-gen-mode",[51,122746,51809],{"class":65},[51,122748,122749],{"class":61},"\"default\"",[51,122751,3062],{"class":65},[51,122753,122754,122757,122759,122762],{"class":53,"line":392},[51,122755,122756],{"class":51672},"              ipv6.ip6-privacy",[51,122758,51809],{"class":65},[51,122760,122761],{"class":61},"\"-1\"",[51,122763,3062],{"class":65},[51,122765,122766,122769,122771,122773],{"class":53,"line":403},[51,122767,122768],{"class":51672},"              proxy._",[51,122770,51809],{"class":65},[51,122772,8036],{"class":61},[51,122774,3062],{"class":65},[51,122776,122777,122780],{"class":53,"line":409},[51,122778,122779],{"class":51672},"      networkmanager",[51,122781,122566],{"class":65},[51,122783,122784,122787,122789,122791],{"class":53,"line":414},[51,122785,122786],{"class":51672},"        uuid",[51,122788,51809],{"class":65},[51,122790,122706],{"class":61},[51,122792,3062],{"class":65},[51,122794,122795,122797,122799],{"class":53,"line":433},[51,122796,122615],{"class":51672},[51,122798,51809],{"class":65},[51,122800,122801],{"class":61},"\"EMIS_Vinci_Robocon_5G\"\n",[10,122803,122804],{},"将其改为新wifi的名和密码：",[41,122806,122808],{"className":122554,"code":122807,"language":122556,"meta":46,"style":46},"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",[48,122809,122810,122816,122825,122831,122838,122847,122855,122861,122867],{"__ignoreMap":46},[51,122811,122812,122814],{"class":53,"line":54},[51,122813,122563],{"class":51672},[51,122815,363],{"class":65},[51,122817,122818,122820,122822],{"class":53,"line":185},[51,122819,122571],{"class":51672},[51,122821,51809],{"class":65},[51,122823,122824],{"class":278},"2\n",[51,122826,122827,122829],{"class":53,"line":202},[51,122828,122582],{"class":51672},[51,122830,363],{"class":65},[51,122832,122833,122836],{"class":53,"line":209},[51,122834,122835],{"class":51672},"    wlan0",[51,122837,363],{"class":65},[51,122839,122840,122842,122844],{"class":53,"line":223},[51,122841,122627],{"class":51672},[51,122843,51809],{"class":65},[51,122845,122846],{"class":278},"true\n",[51,122848,122849,122851,122853],{"class":53,"line":237},[51,122850,122638],{"class":51672},[51,122852,51809],{"class":65},[51,122854,122846],{"class":278},[51,122856,122857,122859],{"class":53,"line":242},[51,122858,122649],{"class":51672},[51,122860,363],{"class":65},[51,122862,122863,122865],{"class":53,"line":257},[51,122864,122656],{"class":61},[51,122866,363],{"class":65},[51,122868,122869,122872,122874],{"class":53,"line":262},[51,122870,122871],{"class":51672},"          password",[51,122873,51809],{"class":65},[51,122875,122876],{"class":61},"\"vinci666\"\n",[10,122878,122879],{},"工控机开机即可连上网。",[486,122881,122883],{"id":122882},"_72-ssh远程开发","7.2 SSH远程开发",[513,122885,122887],{"id":122886},"_721-环境准备","7.2.1 环境准备",[10,122889,122890],{},[691,122891,122892],{},"1.硬件准备",[10,122894,122895],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[10,122897,122898],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[10,122900,122901],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[10,122903,122904],{},[691,122905,122906],{},"2.设置固定IP",[10,122908,122909],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[10,122911,122912],{},"1.进入设置界面",[10,122914,122915],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[10,122917,122918],{},[460,122919],{"alt":46,"src":122920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[10,122922,122923],{},"2.配置所连接的网络",[10,122925,122926],{},[460,122927],{"alt":46,"src":122928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[10,122930,122931],{},"3.设置固定IP",[10,122933,122934],{},"查看当前IP地址。",[10,122936,122937],{},[460,122938],{"alt":46,"src":122939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[10,122941,122942],{},"设置固定IP。",[10,122944,122945],{},[460,122946],{"alt":46,"src":122947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[10,122949,122950],{},"至此，IP配置完毕。",[513,122952,122954],{"id":122953},"_722-环境搭建","7.2.2 环境搭建",[10,122956,122957],{},[691,122958,26135],{},[10,122960,122961],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[10,122963,122964],{},[691,122965,122966],{},"实现",[10,122968,122969],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[19,122971,122972,122975,122978,122981],{},[22,122973,122974],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[22,122976,122977],{},"远程主机启动SSH服务；",[22,122979,122980],{},"本地主机登陆远程主机；",[22,122982,122983],{},"实现数据传输。",[10,122985,122986],{},"1.安装SSH客户端与服务端",[10,122988,122989],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[41,122991,122993],{"className":121187,"code":122992,"language":121189,"meta":121190,"style":46}," sudo apt install openssh-server\n",[48,122994,122995],{"__ignoreMap":46},[51,122996,122997],{"class":53,"line":54},[51,122998,122992],{},[10,123000,123001],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[41,123003,123005],{"className":121187,"code":123004,"language":121189,"meta":121190,"style":46},"sudo apt install openssh-client\n",[48,123006,123007],{"__ignoreMap":46},[51,123008,123009],{"class":53,"line":54},[51,123010,123004],{},[10,123012,123013],{},"2.远程主机启动SSH服务",[10,123015,123016],{},"远程主机启动 ssh 服务命令如下：",[41,123018,123020],{"className":121187,"code":123019,"language":121189,"meta":121190,"style":46},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[48,123021,123022],{"__ignoreMap":46},[51,123023,123024],{"class":53,"line":54},[51,123025,123019],{},[10,123027,123028],{},"启动后可使用如下命令查看服务是否正常运行：",[41,123030,123032],{"className":121187,"code":123031,"language":121189,"meta":121190,"style":46},"ps -e | grep ssh\n",[48,123033,123034],{"__ignoreMap":46},[51,123035,123036],{"class":53,"line":54},[51,123037,123031],{},[10,123039,123040],{},"如果启动成功，会包含 sshd 程序。",[10,123042,123043],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[41,123045,123047],{"className":121187,"code":123046,"language":121189,"meta":121190,"style":46},"sudo systemctl enable ssh\n",[48,123048,123049],{"__ignoreMap":46},[51,123050,123051],{"class":53,"line":54},[51,123052,123046],{},[10,123054,123055],{},"3.本地远程登录",[10,123057,123058],{},"登录远程主机可以调用如下命令:",[41,123060,123062],{"className":117667,"code":123061,"language":117669,"meta":46,"style":46},"ssh -X 用户名@ip地址\n",[48,123063,123064],{"__ignoreMap":46},[51,123065,123066,123068,123071],{"class":53,"line":54},[51,123067,122018],{"class":57},[51,123069,123070],{"class":278}," -X",[51,123072,123073],{"class":61}," 用户名@ip地址\n",[10,123075,123076],{},"然后根据提示，录入登陆密码，即可成功登录。",[10,123078,123079],{},"如果退出，可以调用exit命令：",[41,123081,123083],{"className":121187,"code":123082,"language":121189,"meta":121190,"style":46},"exit\n",[48,123084,123085],{"__ignoreMap":46},[51,123086,123087],{"class":53,"line":54},[51,123088,123082],{},[10,123090,123091],{},[691,123092,123093],{},"4.实现数据传输",[10,123095,123096],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[10,123098,123099],{},"上传文件指令格式如下：",[41,123101,123103],{"className":121187,"code":123102,"language":121189,"meta":121190,"style":46},"scp 本地文件路径 账号@ip:路径\n",[48,123104,123105],{"__ignoreMap":46},[51,123106,123107],{"class":53,"line":54},[51,123108,123102],{},[10,123110,123111],{},"上传文件夹指令格式如下：",[41,123113,123115],{"className":121187,"code":123114,"language":121189,"meta":121190,"style":46},"scp -r 本地文件夹路径 账号@ip:路径\n",[48,123116,123117],{"__ignoreMap":46},[51,123118,123119],{"class":53,"line":54},[51,123120,123114],{},[10,123122,123123],{},"下载文件指令格式如下：",[41,123125,123127],{"className":121187,"code":123126,"language":121189,"meta":121190,"style":46},"scp 账号@ip:路径 本地文件夹路径\n",[48,123128,123129],{"__ignoreMap":46},[51,123130,123131],{"class":53,"line":54},[51,123132,123126],{},[10,123134,123135],{},"下载文件夹指令格式如下：",[41,123137,123139],{"className":121187,"code":123138,"language":121189,"meta":121190,"style":46},"scp -r 账号@ip:路径 本地文件夹路径\n",[48,123140,123141],{"__ignoreMap":46},[51,123142,123143],{"class":53,"line":54},[51,123144,123138],{},[10,123146,123147],{},[691,123148,123149],{},"优化",[10,123151,123152],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[19,123154,123155,123158],{},[22,123156,123157],{},"本地生成密钥对；",[22,123159,123160],{},"将公钥上传至远程主机。",[10,123162,123163],{},[691,123164,123165],{},"1.生成密钥对",[10,123167,123168],{},"本地客户端生成公私钥：（一路回车默认即可）",[41,123170,123172],{"className":121187,"code":123171,"language":121189,"meta":121190,"style":46},"ssh-keygen\n",[48,123173,123174],{"__ignoreMap":46},[51,123175,123176],{"class":53,"line":54},[51,123177,123171],{},[10,123179,123180],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[19,123182,123183,123186],{},[22,123184,123185],{},"id_rsa （私钥）；",[22,123187,123188],{},"id_rsa.pub (公钥)。",[10,123190,123191],{},[691,123192,123193],{},"2.公钥上传",[10,123195,123196],{},"上传指令如下：",[41,123198,123200],{"className":121187,"code":123199,"language":121189,"meta":121190,"style":46},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[48,123201,123202],{"__ignoreMap":46},[51,123203,123204],{"class":53,"line":54},[51,123205,123199],{},[10,123207,123208],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[10,123210,123211],{},"以后再远程登录就无需录入密码了。",[513,123213,123215],{"id":123214},"_723-使用vscode优化","7.2.3 使用VScode优化",[10,123217,123218],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[10,123220,123221],{},[691,123222,123223],{},"1.准备工作",[10,123225,123226],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[10,123228,123229],{},[691,123230,123231],{},"2.为VScode安装远程开发插件",[10,123233,123234,123235,123238,123239,123242,123243,28767],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[48,123236,123237],{},"扩展：商店","的搜索栏输入",[48,123240,123241],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[48,123244,123245],{},"安装",[10,123247,123248],{},[460,123249],{"alt":46,"src":123250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[10,123252,123253],{},[691,123254,123255],{},"3.配置远程连接",[10,123257,123258,123259,123262,123263,123266],{},"步骤1：使用快捷键",[48,123260,123261],{},"ctrl + shift + p","打开命令输入窗口，并输入",[48,123264,123265],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[10,123268,123269],{},[460,123270],{"alt":46,"src":123271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[10,123273,123274,123275,28767],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[48,123276,123277],{},"Add New SSH Host",[10,123279,123280],{},[460,123281],{"alt":46,"src":123282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[10,123284,123285,123286,123289,123290,123293,123294,123297],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[48,123287,123288],{},"ssh +X ubuntu@192.168.43.164","，其中，",[48,123291,123292],{},"ubuntu","需要替换为你的登录用户名，",[48,123295,123296],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[10,123299,123300],{},[460,123301],{"alt":46,"src":123302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[10,123304,123305],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[10,123307,123308],{},[460,123309],{"alt":46,"src":123310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[10,123312,123313],{},[460,123314],{"alt":46,"src":123315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[10,123317,123318],{},[691,123319,123320],{},"4.使用",[10,123322,123323,123324,123262,123326,123328],{},"步骤1：继续使用快捷键",[48,123325,123261],{},[48,123327,123265],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[10,123330,123331],{},[460,123332],{"alt":46,"src":123333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[10,123335,123336,123337,123340],{},"或者，也可以点击侧边栏的",[48,123338,123339],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[10,123342,123343],{},[460,123344],{"alt":46,"src":123345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[10,123347,123348,123349,123352,123353,123356],{},"步骤2：选择菜单栏的",[48,123350,123351],{},"文件","下的",[48,123354,123355],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[10,123358,123359],{},[460,123360],{"alt":46,"src":123361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[10,123363,123364],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[486,123366,123368],{"id":123367},"_73-远程桌面","7.3 远程桌面",[10,123370,123371],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[10,123373,123374],{},"我们选择使用VNC来看。",[19,123376,123377],{},[22,123378,123379],{},"安装VNC服务器：",[10,123381,123382],{},"这里以TigerVNC为例进行安装：",[41,123384,123386],{"className":117667,"code":123385,"language":117669,"meta":46,"style":46},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[48,123387,123388],{"__ignoreMap":46},[51,123389,123390,123392,123394,123396,123399],{"class":53,"line":54},[51,123391,24958],{"class":57},[51,123393,117688],{"class":61},[51,123395,24215],{"class":61},[51,123397,123398],{"class":61}," tigervnc-standalone-server",[51,123400,123401],{"class":61}," tigervnc-common\n",[19,123403,123404],{"start":185},[22,123405,123406],{},"设置VNC密码：",[10,123408,123409],{},"为VNC用户设置密码，运行以下命令：",[41,123411,123413],{"className":117667,"code":123412,"language":117669,"meta":46,"style":46},"vncpasswd\n",[48,123414,123415],{"__ignoreMap":46},[51,123416,123417],{"class":53,"line":54},[51,123418,123412],{"class":57},[19,123420,123421],{"start":202},[22,123422,123423],{},"配置VNC启动脚本:",[10,123425,123426],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[41,123428,123430],{"className":117667,"code":123429,"language":117669,"meta":46,"style":46},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[48,123431,123432,123441],{"__ignoreMap":46},[51,123433,123434,123436,123438],{"class":53,"line":54},[51,123435,101638],{"class":57},[51,123437,29598],{"class":278},[51,123439,123440],{"class":61}," ~\u002F.vnc\n",[51,123442,123443,123446],{"class":53,"line":185},[51,123444,123445],{"class":57},"nano",[51,123447,123448],{"class":61}," ~\u002F.vnc\u002Fxstartup\n",[10,123450,123451],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[41,123453,123455],{"className":117667,"code":123454,"language":117669,"meta":46,"style":46},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[48,123456,123457,123462,123470,123477],{"__ignoreMap":46},[51,123458,123459],{"class":53,"line":54},[51,123460,123461],{"class":601},"#!\u002Fbin\u002Fsh\n",[51,123463,123464,123467],{"class":53,"line":185},[51,123465,123466],{"class":278},"unset",[51,123468,123469],{"class":61}," SESSION_MANAGER\n",[51,123471,123472,123474],{"class":53,"line":202},[51,123473,123466],{"class":278},[51,123475,123476],{"class":61}," DBUS_SESSION_BUS_ADDRESS\n",[51,123478,123479],{"class":53,"line":209},[51,123480,123481],{"class":57},"gnome-session\n",[10,123483,123484],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[19,123486,123487],{"start":209},[22,123488,123489],{},"给予执行权限：",[10,123491,123492],{},"为xstartup文件设置执行权限：",[41,123494,123496],{"className":117667,"code":123495,"language":117669,"meta":46,"style":46},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[48,123497,123498],{"__ignoreMap":46},[51,123499,123500,123502,123505],{"class":53,"line":54},[51,123501,24993],{"class":57},[51,123503,123504],{"class":61}," +x",[51,123506,123448],{"class":61},[19,123508,123509],{"start":223},[22,123510,123511],{},"启动VNC服务器：",[41,123513,123515],{"className":117667,"code":123514,"language":117669,"meta":46,"style":46},"vncserver -geometry 1920x1080 -localhost=0\n",[48,123516,123517],{"__ignoreMap":46},[51,123518,123519,123522,123525,123528],{"class":53,"line":54},[51,123520,123521],{"class":57},"vncserver",[51,123523,123524],{"class":278}," -geometry",[51,123526,123527],{"class":61}," 1920x1080",[51,123529,123530],{"class":278}," -localhost=0\n",[10,123532,123533],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[10,123535,123536],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[19,123538,123539],{"start":237},[22,123540,123541],{},"查看已开启的VNC服务器：",[41,123543,123545],{"className":117667,"code":123544,"language":117669,"meta":46,"style":46},"vncserver -list\n",[48,123546,123547],{"__ignoreMap":46},[51,123548,123549,123551],{"class":53,"line":54},[51,123550,123521],{"class":57},[51,123552,123553],{"class":278}," -list\n",[10,123555,123556],{},[460,123557],{"alt":46,"src":123558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[19,123560,123561],{"start":242},[22,123562,123563],{},"连接到VNC服务器：",[10,123565,123566],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[19,123568,123569],{"start":257},[22,123570,123571],{},"停止VNC服务器：",[10,123573,123574],{},"如果需要停止VNC服务器，可以使用以下命令：",[41,123576,123578],{"className":117667,"code":123577,"language":117669,"meta":46,"style":46},"vncserver -kill :1\n",[48,123579,123580],{"__ignoreMap":46},[51,123581,123582,123584,123587],{"class":53,"line":54},[51,123583,123521],{"class":57},[51,123585,123586],{"class":278}," -kill",[51,123588,123589],{"class":61}," :1\n",[10,123591,123592],{},"将:1替换为你实际使用的显示编号。",[10,123594,123595],{},[460,123596],{"alt":46,"src":123597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[10,123599,123600],{},[460,123601],{"alt":46,"src":123602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[486,123604,123606],{"id":123605},"_74-usb端口设置","7.4 USB端口设置",[10,123608,123609],{},[691,123610,123611],{},"首先先配置好权限",[41,123613,123615],{"className":117667,"code":123614,"language":117669,"meta":46,"style":46},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[48,123616,123617,123622,123635,123642,123647],{"__ignoreMap":46},[51,123618,123619],{"class":53,"line":54},[51,123620,123621],{"class":601},"# 将用户权限提高\n",[51,123623,123624,123626,123628,123630,123633],{"class":53,"line":185},[51,123625,24958],{"class":57},[51,123627,26956],{"class":61},[51,123629,26959],{"class":278},[51,123631,123632],{"class":61}," dialout",[51,123634,26964],{"class":65},[51,123636,123637,123639],{"class":53,"line":202},[51,123638,26983],{"class":57},[51,123640,123641],{"class":61}," dialout\n",[51,123643,123644],{"class":53,"line":209},[51,123645,123646],{"class":601},"# 查看下面命令是否输出dialout（若输出才正常）\n",[51,123648,123649],{"class":53,"line":223},[51,123650,123651],{"class":57},"groups\n",[10,123653,123654],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[513,123656,123658],{"id":123657},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[10,123660,123661,123664],{},[691,123662,123663],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[10,123666,123667,123670],{},[691,123668,123669],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[10,123672,123673],{},[691,123674,123675],{},"流程如下：",[10,123677,123678],{},"（1）.查找设备idVendor和idProduct",[10,123680,123681,123682,123685],{},"接入两个USB设备，在终端调用指令",[48,123683,123684],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[10,123687,123688],{},[460,123689],{"alt":46,"src":123690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[10,123692,123693,123694,123697],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[48,123695,123696],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[10,123699,123700],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[10,123702,123703],{},"（2）.编写映射规则",[10,123705,123706,123707,123710],{},"在",[48,123708,123709],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[41,123712,123714],{"className":117667,"code":123713,"language":117669,"meta":46,"style":46},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[48,123715,123716],{"__ignoreMap":46},[51,123717,123718,123720,123722],{"class":53,"line":54},[51,123719,24958],{"class":57},[51,123721,118954],{"class":61},[51,123723,123724],{"class":61}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[10,123726,123727],{},"输入如下内容：",[41,123729,123731],{"className":117667,"code":123730,"language":117669,"meta":46,"style":46},"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",[48,123732,123733,123763],{"__ignoreMap":46},[51,123734,123735,123738,123740,123743,123746,123749,123752,123754,123757,123760],{"class":53,"line":54},[51,123736,123737],{"class":65},"KERNEL",[51,123739,70],{"class":69},[51,123741,123742],{"class":61},"=\"ttyUSB*\",",[51,123744,123745],{"class":57}," ATTRS",[51,123747,123748],{"class":61},"{idVendor}==",[51,123750,123751],{"class":57},"\"10c4\"",[51,123753,920],{"class":57},[51,123755,123756],{"class":61}," ATTRS{idProduct}==\"ea60\",",[51,123758,123759],{"class":61}," MODE:=\"0777\",",[51,123761,123762],{"class":61}," SYMLINK+=\"mylidar\"\n",[51,123764,123765,123767,123769,123771,123773,123775,123778,123780,123783,123785],{"class":53,"line":185},[51,123766,123737],{"class":65},[51,123768,70],{"class":69},[51,123770,123742],{"class":61},[51,123772,123745],{"class":57},[51,123774,123748],{"class":61},[51,123776,123777],{"class":57},"\"1a86\"",[51,123779,920],{"class":57},[51,123781,123782],{"class":61}," ATTRS{idProduct}==\"7523\",",[51,123784,123759],{"class":61},[51,123786,123787],{"class":61}," SYMLINK+=\"mycar\"\n",[10,123789,123790],{},"代码解释：",[1549,123792,123793,123796,123799,123802],{},[22,123794,123795],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[22,123797,123798],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[22,123800,123801],{},"SYMLINK是符号连接，即绑定的别名；",[22,123803,123804],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[10,123806,123807,123808,123811,123814],{},"***小提示：***",[23936,123809,123810],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[48,123812,123813],{},"\u002Fetc\u002Fudev\u002Frule.d",[23936,123815,123816],{},"目录即可。",[10,123818,123819],{},"表格 还在加载中，请等待加载完成后再尝试复制",[10,123821,123822],{},"（3）.使规则生效",[10,123824,123825],{},"在终端下输入如下指令：",[41,123827,123829],{"className":117667,"code":123828,"language":117669,"meta":46,"style":46},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[48,123830,123831,123836,123848,123859,123863,123868,123881],{"__ignoreMap":46},[51,123832,123833],{"class":53,"line":54},[51,123834,123835],{"class":601},"# Ubuntu用下方命令\n",[51,123837,123838,123840,123842,123845],{"class":53,"line":185},[51,123839,24958],{"class":57},[51,123841,120419],{"class":61},[51,123843,123844],{"class":61}," udev",[51,123846,123847],{"class":61}," reload\n",[51,123849,123850,123852,123854,123856],{"class":53,"line":202},[51,123851,24958],{"class":57},[51,123853,120419],{"class":61},[51,123855,123844],{"class":61},[51,123857,123858],{"class":61}," restart\n",[51,123860,123861],{"class":53,"line":209},[51,123862,206],{"emptyLinePlaceholder":205},[51,123864,123865],{"class":53,"line":223},[51,123866,123867],{"class":601},"#Fedora用下方命令\n",[51,123869,123870,123872,123875,123878],{"class":53,"line":237},[51,123871,24958],{"class":57},[51,123873,123874],{"class":61}," udevadm",[51,123876,123877],{"class":61}," control",[51,123879,123880],{"class":278}," --reload\n",[51,123882,123883,123885,123887],{"class":53,"line":242},[51,123884,24958],{"class":57},[51,123886,123874],{"class":61},[51,123888,123889],{"class":61}," trigger\n",[10,123891,123892],{},"再重新插拔设备即可。",[10,123894,123895],{},"（4）.测试",[10,123897,123898],{},"终端下输入如下指令",[41,123900,123902],{"className":117667,"code":123901,"language":117669,"meta":46,"style":46},"ll \u002Fdev | grep ttyUSB\n",[48,123903,123904],{"__ignoreMap":46},[51,123905,123906,123909,123912,123914,123916],{"class":53,"line":54},[51,123907,123908],{"class":57},"ll",[51,123910,123911],{"class":61}," \u002Fdev",[51,123913,25491],{"class":69},[51,123915,30618],{"class":57},[51,123917,123918],{"class":61}," ttyUSB\n",[10,123920,123921],{},"运行结果如下：",[10,123923,123924],{},[460,123925],{"alt":46,"src":123926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[10,123928,123929,123930,123933],{},"也可以多次插拔USB设备，会发现设备端口",[48,123931,123932],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[10,123935,123936],{},[691,123937,118335],{},[10,123939,123940],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[513,123942,123944],{"id":123943},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[10,123946,123947,123949],{},[691,123948,123663],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[10,123951,123952,123954],{},[691,123953,123669],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[10,123956,123957],{},[691,123958,123675],{},[10,123960,123961],{},"（1）.查看所连接的主机USB接口的KERNELS",[10,123963,123964],{},"调用如下指令查看第一台雷达的USB信息：",[41,123966,123968],{"className":117667,"code":123967,"language":117669,"meta":46,"style":46},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[48,123969,123970,123990],{"__ignoreMap":46},[51,123971,123972,123975,123977,123980,123983,123985,123987],{"class":53,"line":54},[51,123973,123974],{"class":57},"udevadm",[51,123976,70193],{"class":61},[51,123978,123979],{"class":278}," --attribute-walk",[51,123981,123982],{"class":278}," --name=\u002Fdev\u002FttyUSB0",[51,123984,25491],{"class":69},[51,123986,30618],{"class":57},[51,123988,123989],{"class":61}," KERNELS\n",[51,123991,123992,123994,123996,123998,124001,124003,124005],{"class":53,"line":185},[51,123993,123974],{"class":57},[51,123995,70193],{"class":61},[51,123997,123979],{"class":278},[51,123999,124000],{"class":278}," --name=\u002Fdev\u002FttyACM0",[51,124002,25491],{"class":69},[51,124004,30618],{"class":57},[51,124006,123989],{"class":61},[10,124008,124009],{},[460,124010],{"alt":46,"src":124011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[10,124013,124014],{},"调用如下指令查看第二台雷达的USB信息：",[41,124016,124018],{"className":117667,"code":124017,"language":117669,"meta":46,"style":46},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[48,124019,124020],{"__ignoreMap":46},[51,124021,124022,124024,124026,124028,124031,124033,124035],{"class":53,"line":54},[51,124023,123974],{"class":57},[51,124025,70193],{"class":61},[51,124027,123979],{"class":278},[51,124029,124030],{"class":278}," --name=\u002Fdev\u002FttyUSB1",[51,124032,25491],{"class":69},[51,124034,30618],{"class":57},[51,124036,123989],{"class":61},[10,124038,124039,124040,124043,124044,124047,124048,124051],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[48,124041,124042],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[48,124045,124046],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[691,124049,124050],{},"唯一性标识","”。",[10,124053,123703],{},[10,124055,123706,124056,124058],{},[48,124057,123709],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[41,124060,124061],{"className":117667,"code":123713,"language":117669,"meta":46,"style":46},[48,124062,124063],{"__ignoreMap":46},[51,124064,124065,124067,124069],{"class":53,"line":54},[51,124066,24958],{"class":57},[51,124068,118954],{"class":61},[51,124070,123724],{"class":61},[41,124072,124074],{"className":117667,"code":124073,"language":117669,"meta":46,"style":46},"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",[48,124075,124076,124105],{"__ignoreMap":46},[51,124077,124078,124080,124082,124084,124087,124089,124092,124095,124097,124100,124102],{"class":53,"line":54},[51,124079,123737],{"class":65},[51,124081,70],{"class":69},[51,124083,123742],{"class":61},[51,124085,124086],{"class":65}," KERNELS",[51,124088,70],{"class":69},[51,124090,124091],{"class":61},"=\"1-1.3:1.0\",",[51,124093,124094],{"class":57}," MODE:",[51,124096,70],{"class":61},[51,124098,124099],{"class":57},"\"0777\"",[51,124101,920],{"class":57},[51,124103,124104],{"class":61}," SYMLINK+=\"rplidar_front\"\n",[51,124106,124107,124109,124111,124113,124115,124117,124120,124122,124124,124126,124128],{"class":53,"line":185},[51,124108,123737],{"class":65},[51,124110,70],{"class":69},[51,124112,123742],{"class":61},[51,124114,124086],{"class":65},[51,124116,70],{"class":69},[51,124118,124119],{"class":61},"=\"1-1.4:1.0\",",[51,124121,124094],{"class":57},[51,124123,70],{"class":61},[51,124125,124099],{"class":57},[51,124127,920],{"class":57},[51,124129,124130],{"class":61}," SYMLINK+=\"rplidar_back\"\n",[10,124132,123822],{},[10,124134,123825],{},[41,124136,124137],{"className":117667,"code":123828,"language":117669,"meta":46,"style":46},[48,124138,124139,124143,124153,124163,124167,124171,124181],{"__ignoreMap":46},[51,124140,124141],{"class":53,"line":54},[51,124142,123835],{"class":601},[51,124144,124145,124147,124149,124151],{"class":53,"line":185},[51,124146,24958],{"class":57},[51,124148,120419],{"class":61},[51,124150,123844],{"class":61},[51,124152,123847],{"class":61},[51,124154,124155,124157,124159,124161],{"class":53,"line":202},[51,124156,24958],{"class":57},[51,124158,120419],{"class":61},[51,124160,123844],{"class":61},[51,124162,123858],{"class":61},[51,124164,124165],{"class":53,"line":209},[51,124166,206],{"emptyLinePlaceholder":205},[51,124168,124169],{"class":53,"line":223},[51,124170,123867],{"class":601},[51,124172,124173,124175,124177,124179],{"class":53,"line":237},[51,124174,24958],{"class":57},[51,124176,123874],{"class":61},[51,124178,123877],{"class":61},[51,124180,123880],{"class":278},[51,124182,124183,124185,124187],{"class":53,"line":242},[51,124184,24958],{"class":57},[51,124186,123874],{"class":61},[51,124188,123889],{"class":61},[10,124190,123892],{},[10,124192,123895],{},[10,124194,123898,124195,124198],{},[48,124196,124197],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[10,124200,124201],{},[460,124202],{"alt":46,"src":124203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[10,124205,124206],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[10,124208,124209,124211],{},[691,124210,118335],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[513,124213,124215],{"id":124214},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[10,124217,124218],{},"（1）.查看所连接的主机USB接口的信息",[41,124220,124222],{"className":117667,"code":124221,"language":117669,"meta":46,"style":46},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[48,124223,124224,124254],{"__ignoreMap":46},[51,124225,124226,124228,124230,124233,124235,124237,124239,124241,124244,124247,124249,124252],{"class":53,"line":54},[51,124227,123974],{"class":57},[51,124229,70193],{"class":61},[51,124231,124232],{"class":278}," -a",[51,124234,29598],{"class":278},[51,124236,28804],{"class":65},[51,124238,123974],{"class":57},[51,124240,70193],{"class":61},[51,124242,124243],{"class":278}," -q",[51,124245,124246],{"class":61}," path",[51,124248,25497],{"class":278},[51,124250,124251],{"class":61}," \u002Fdev\u002FttyACM0",[51,124253,282],{"class":65},[51,124255,124256,124258,124260,124262,124264,124266,124268,124270,124272,124274,124276,124279],{"class":53,"line":185},[51,124257,123974],{"class":57},[51,124259,70193],{"class":61},[51,124261,124232],{"class":278},[51,124263,29598],{"class":278},[51,124265,28804],{"class":65},[51,124267,123974],{"class":57},[51,124269,70193],{"class":61},[51,124271,124243],{"class":278},[51,124273,124246],{"class":61},[51,124275,25497],{"class":278},[51,124277,124278],{"class":61}," \u002Fdev\u002FttyUSB0",[51,124280,282],{"class":65},[10,124282,124283],{},[460,124284],{"alt":46,"src":124285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[10,124287,124288],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[10,124290,123703],{},[10,124292,123706,124293,124058],{},[48,124294,123709],{},[41,124296,124297],{"className":117667,"code":123713,"language":117669,"meta":46,"style":46},[48,124298,124299],{"__ignoreMap":46},[51,124300,124301,124303,124305],{"class":53,"line":54},[51,124302,24958],{"class":57},[51,124304,118954],{"class":61},[51,124306,123724],{"class":61},[41,124308,124310],{"className":117667,"code":124309,"language":117669,"meta":46,"style":46},"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",[48,124311,124312,124340,124366],{"__ignoreMap":46},[51,124313,124314,124316,124318,124321,124323,124325,124327,124329,124332,124335,124337],{"class":53,"line":54},[51,124315,123737],{"class":65},[51,124317,70],{"class":69},[51,124319,124320],{"class":61},"=\"ttyACM*\",",[51,124322,123745],{"class":57},[51,124324,123748],{"class":61},[51,124326,123777],{"class":57},[51,124328,920],{"class":57},[51,124330,124331],{"class":61}," ATTRS{idProduct}==\"55d4\",",[51,124333,124334],{"class":61}," ATTRS{serial}==\"0001\",",[51,124336,123759],{"class":61},[51,124338,124339],{"class":61}," SYMLINK+=\"ttyACM_MCU\"\n",[51,124341,124342,124344,124346,124348,124350,124352,124354,124356,124358,124361,124363],{"class":53,"line":185},[51,124343,123737],{"class":65},[51,124345,70],{"class":69},[51,124347,124320],{"class":61},[51,124349,123745],{"class":57},[51,124351,123748],{"class":61},[51,124353,123777],{"class":57},[51,124355,920],{"class":57},[51,124357,124331],{"class":61},[51,124359,124360],{"class":61}," ATTRS{serial}==\"0002\",",[51,124362,123759],{"class":61},[51,124364,124365],{"class":61}," SYMLINK+=\"ttyACM_Lidar\"\n",[51,124367,124368,124370,124372,124374,124376,124378,124380,124382,124384,124386],{"class":53,"line":202},[51,124369,123737],{"class":65},[51,124371,70],{"class":69},[51,124373,123742],{"class":61},[51,124375,123745],{"class":57},[51,124377,123748],{"class":61},[51,124379,123777],{"class":57},[51,124381,920],{"class":57},[51,124383,123782],{"class":61},[51,124385,123759],{"class":61},[51,124387,124388],{"class":61}," SYMLINK+=\"ttyUSB_IMU\"\n",[10,124390,123822],{},[10,124392,123825],{},[41,124394,124395],{"className":117667,"code":123828,"language":117669,"meta":46,"style":46},[48,124396,124397,124401,124411,124421,124425,124429,124439],{"__ignoreMap":46},[51,124398,124399],{"class":53,"line":54},[51,124400,123835],{"class":601},[51,124402,124403,124405,124407,124409],{"class":53,"line":185},[51,124404,24958],{"class":57},[51,124406,120419],{"class":61},[51,124408,123844],{"class":61},[51,124410,123847],{"class":61},[51,124412,124413,124415,124417,124419],{"class":53,"line":202},[51,124414,24958],{"class":57},[51,124416,120419],{"class":61},[51,124418,123844],{"class":61},[51,124420,123858],{"class":61},[51,124422,124423],{"class":53,"line":209},[51,124424,206],{"emptyLinePlaceholder":205},[51,124426,124427],{"class":53,"line":223},[51,124428,123867],{"class":601},[51,124430,124431,124433,124435,124437],{"class":53,"line":237},[51,124432,24958],{"class":57},[51,124434,123874],{"class":61},[51,124436,123877],{"class":61},[51,124438,123880],{"class":278},[51,124440,124441,124443,124445],{"class":53,"line":242},[51,124442,24958],{"class":57},[51,124444,123874],{"class":61},[51,124446,123889],{"class":61},[10,124448,124449,124450],{},"再重新插拔设备即可，或者 ",[691,124451,124452],{},"直接重启系统。",[10,124454,123895],{},[10,124456,123898,124457,124198],{},[48,124458,124197],{},[10,124460,124461],{},[460,124462],{"alt":46,"src":124463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[10,124465,124206],{},[10,124467,124468,124470],{},[691,124469,118335],{}," 一些设备可能没有串口号等。",[513,124472,124474],{"id":124473},"_744-其他注意事项","7.4.4 其他注意事项",[10,124476,124477,124478,124480,124481,124484,124485,18793,124488,124491,124492,124494],{},"并非所有的USB设备端口号都是",[48,124479,123932],{},"的格式，比如Arduino的端口号可能是",[48,124482,124483],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[48,124486,124487],{},"videon",[48,124489,124490],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[48,124493,124487],{},"端口，绑定时需要关联的也是该接口。",[10,124496,124497,124498,124501,124502,124505,124506,124508,124509,124512,124513,124516,124517,124520,124521,124520,124524,124520,124527,28767],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[48,124499,124500],{},"KERNEL==\"ttyUSB*\"","修改为",[48,124503,124504],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[48,124507,124500],{},"修改为类似于",[48,124510,124511],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[48,124514,124515],{},"video[0,2,4,6]","表示可以绑定的端口为",[48,124518,124519],{},"video0","或",[48,124522,124523],{},"video2",[48,124525,124526],{},"video4",[48,124528,124529],{},"video6",[486,124531,124533],{"id":124532},"_75-挂载内网网页","7.5 挂载内网网页",[10,124535,124536],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[10,124538,124539],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[10,124541,124542],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[10,124544,124545,124546],{},"Termux 下载地址（F-Droid）：",[780,124547,124548],{"href":124548,"rel":124549},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24246],[10,124551,124552],{},"首先打开app后，先更新软件缓存：",[41,124554,124556],{"className":117667,"code":124555,"language":117669,"meta":46,"style":46},"pkg update\n",[48,124557,124558],{"__ignoreMap":46},[51,124559,124560,124563],{"class":53,"line":54},[51,124561,124562],{"class":57},"pkg",[51,124564,26624],{"class":61},[10,124566,124567],{},"然后换源",[41,124569,124571],{"className":117667,"code":124570,"language":117669,"meta":46,"style":46},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[48,124572,124573],{"__ignoreMap":46},[51,124574,124575,124577,124580],{"class":53,"line":54},[51,124576,123445],{"class":57},[51,124578,124579],{"class":65}," $PREFIX",[51,124581,124582],{"class":61},"\u002Fetc\u002Fapt\u002Fsources.list\n",[10,124584,124585],{},"将该文件内容替换为下面：",[41,124587,124589],{"className":117667,"code":124588,"language":117669,"meta":46,"style":46},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[48,124590,124591],{"__ignoreMap":46},[51,124592,124593,124596,124599,124602],{"class":53,"line":54},[51,124594,124595],{"class":57},"deb",[51,124597,124598],{"class":61}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[51,124600,124601],{"class":61}," stable",[51,124603,124604],{"class":61}," main\n",[1549,124606,124607,124634],{},[22,124608,124609,124610,124612,124613],{},"如果你使用的是",[48,124611,123445],{},"编辑器：",[1549,124614,124615,124622,124628],{},[22,124616,124617,124618,124621],{},"按 ",[48,124619,124620],{},"Ctrl+O"," 保存文件。",[22,124623,124617,124624,124627],{},[48,124625,124626],{},"Enter"," 确认文件名。",[22,124629,124617,124630,124633],{},[48,124631,124632],{},"Ctrl+X"," 退出编辑器。",[22,124635,124609,124636,124612,124639],{},[48,124637,124638],{},"vim",[1549,124640,124641,124647],{},[22,124642,124617,124643,124646],{},[48,124644,124645],{},"Esc"," 退出编辑模式。",[22,124648,124649,124650,124652],{},"输入 ",[48,124651,119592],{}," 保存并退出。",[10,124654,124655],{},"接下来重新更新软件源：",[41,124657,124659],{"className":117667,"code":124658,"language":117669,"meta":46,"style":46},"pkg update && pkg upgrade\n",[48,124660,124661],{"__ignoreMap":46},[51,124662,124663,124665,124667,124669,124671],{"class":53,"line":54},[51,124664,124562],{"class":57},[51,124666,117718],{"class":61},[51,124668,26572],{"class":65},[51,124670,124562],{"class":57},[51,124672,117704],{"class":61},[10,124674,124675],{},"安装python：",[41,124677,124679],{"className":117667,"code":124678,"language":117669,"meta":46,"style":46},"pkg install python\n",[48,124680,124681],{"__ignoreMap":46},[51,124682,124683,124685,124687],{"class":53,"line":54},[51,124684,124562],{"class":57},[51,124686,24215],{"class":61},[51,124688,124689],{"class":61}," python\n",[10,124691,124692,26855],{},[691,124693,124694],{},"通过Termux访问设备存储",[10,124696,124697],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[41,124699,124701],{"className":117667,"code":124700,"language":117669,"meta":46,"style":46},"termux-setup-storage\n",[48,124702,124703],{"__ignoreMap":46},[51,124704,124705],{"class":53,"line":54},[51,124706,124700],{"class":57},[19,124708,124709],{},[22,124710,124711,26855,124714],{},[691,124712,124713],{},"进入HTML文件所在的目录",[19,124715,124716],{},[22,124717,124718,124719,124721],{},"使用",[48,124720,101648],{},"命令进入HTML文件所在的目录：",[41,124723,124725],{"className":117667,"code":124724,"language":117669,"meta":46,"style":46},"cd ~\u002Fyour_html_folder\n",[48,124726,124727],{"__ignoreMap":46},[51,124728,124729,124731],{"class":53,"line":54},[51,124730,101648],{"class":278},[51,124732,124733],{"class":61}," ~\u002Fyour_html_folder\n",[19,124735,124736],{"start":185},[22,124737,124738,26855,124741,124746,124763],{},[691,124739,124740],{},"启动Python HTTP服务器",[19,124742,124743],{},[22,124744,124745],{},"运行以下命令启动一个简单的HTTP服务器：",[41,124747,124749],{"className":117667,"code":124748,"language":117669,"meta":46,"style":46},"python -m http.server 8000\n",[48,124750,124751],{"__ignoreMap":46},[51,124752,124753,124755,124757,124760],{"class":53,"line":54},[51,124754,172],{"class":57},[51,124756,101254],{"class":278},[51,124758,124759],{"class":61}," http.server",[51,124761,124762],{"class":278}," 8000\n",[19,124764,124765],{"start":202},[22,124766,124767,124768,124771],{},"这会在端口",[48,124769,124770],{},"8000","上启动一个Web服务器。",[1549,124773,124774],{},[22,124775,124776],{},"启动服务器后，Termux会显示日志信息，例如：",[41,124778,124780],{"className":121187,"code":124779,"language":121189,"meta":121190,"style":46},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[48,124781,124782],{"__ignoreMap":46},[51,124783,124784],{"class":53,"line":54},[51,124785,124779],{},[1549,124787,124788],{},[22,124789,124790],{},"这表示服务器已成功启动。",[10,124792,124793],{},[691,124794,124795],{},"在浏览器中访问HTML文件",[19,124797,124798],{},[22,124799,124800,26855,124803,124808],{},[691,124801,124802],{},"在同一设备上访问",[19,124804,124805],{},[22,124806,124807],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[41,124809,124812],{"className":124810,"code":124811,"language":72036,"meta":46,"style":46},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[48,124813,124814],{"__ignoreMap":46},[51,124815,124816,124819],{"class":53,"line":54},[51,124817,124818],{"class":65},"http:",[51,124820,124821],{"class":601},"\u002F\u002Flocalhost:8000\n",[1549,124823,124824],{},[22,124825,124826,124827,124830],{},"如果HTML文件中有",[48,124828,124829],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[486,124832,124834],{"id":124833},"_76-linux重点知识","7.6 Linux重点知识",[513,124836,124838],{"id":124837},"_761-关于点的说明","7.6.1 关于点的说明",[10,124840,124841],{},[460,124842],{"alt":46,"src":124843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[10,124845,124846],{},"一点本目录，两点上目录",[513,124848,124850],{"id":124849},"_762-目录","7.6.2 目录",[22381,124852,124854],{"id":124853},"_7621-系统启动必须","7.6.2.1 系统启动必须",[10,124856,124857],{},[691,124858,124859],{},"\u002Fboot:",[10,124861,124862],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[10,124864,124865],{},[691,124866,124867],{},"\u002Fetc:",[10,124869,124870],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[10,124872,124873],{},[691,124874,124875],{},"\u002Flib：",[10,124877,124878],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[10,124880,124881],{},[691,124882,124883],{},"\u002Fsys:",[10,124885,124886],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22381,124888,124890],{"id":124889},"_7622-指令集合","7.6.2.2 指令集合",[10,124892,124893],{},[691,124894,124895],{},"\u002Fbin:",[10,124897,124898],{},"为二进制文件的缩写，存放最经常使用的命令",[10,124900,124901],{},[691,124902,124903],{},"\u002Fsbin:",[10,124905,124906],{},"只有系统管理员才能使用的程序和指令",[22381,124908,124910],{"id":124909},"_7623-外部文件管理","7.6.2.3 外部文件管理",[10,124912,124913],{},[691,124914,124915],{},"\u002Fdev:",[10,124917,124918],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[10,124920,124921],{},[691,124922,124923],{},"\u002Fmedia:",[10,124925,124926],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[10,124928,124929],{},[691,124930,124931],{},"\u002Fmnt:",[10,124933,124934],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22381,124936,124938],{"id":124937},"_7624-临时文件","7.6.2.4 临时文件",[10,124940,124941],{},[691,124942,124943],{},"\u002Frun:",[10,124945,124946],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[10,124948,124949],{},[691,124950,124951],{},"\u002Flost+found:",[10,124953,124954],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[10,124956,124957],{},[691,124958,124959],{},"\u002Ftmp:",[10,124961,124962],{},"这个目录是用来存放一些临时文件的",[22381,124964,124966],{"id":124965},"_7625-账户","7.6.2.5 账户",[10,124968,124969],{},[691,124970,124971],{},"\u002Froot：",[10,124973,124974],{},"系统管理员的用户主目录",[10,124976,124977,26855],{},[691,124978,124979],{},"\u002Fhome",[10,124981,124982],{},"用户的主目录，以用户的账号命名的",[10,124984,124985,26855],{},[691,124986,124987],{},"\u002Fusr",[10,124989,124990],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[10,124992,124993],{},[691,124994,124995],{},"\u002Fusr\u002Fbin：",[10,124997,124998],{},"系统用户使用的应用程序与指令",[10,125000,125001],{},[691,125002,125003],{},"\u002Fusr\u002Fsbin：",[10,125005,125006],{},"超级用户使用的比较高级的管理程序和系统守护程序",[10,125008,125009],{},[691,125010,125011],{},"\u002Fusr\u002Fsrc：",[10,125013,125014],{},"内核源代码默认的放置目录",[22381,125016,125018],{"id":125017},"_7626-运行过程要用","7.6.2.6 运行过程要用",[10,125020,125021],{},[691,125022,125023],{},"\u002Fvar：",[10,125025,125026],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[10,125028,125029],{},[691,125030,125031],{},"\u002Fproc:",[10,125033,125034,125035,125038],{},"管理 ",[691,125036,125037],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22381,125040,125042],{"id":125041},"_7627-扩展用的","7.6.2.7 扩展用的",[10,125044,125045],{},[691,125046,125047],{},"\u002Fopt:",[10,125049,125050],{},"默认是空的，我们安装额外软件可以放在这个里面",[10,125052,125053],{},[691,125054,125055],{},"\u002Fsrv:",[10,125057,125058],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[513,125060,125062],{"id":125061},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[10,125064,125065],{},[460,125066],{"alt":46,"src":125067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[10,125069,125070],{},"windows-->linux:",[10,125072,125073],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[10,125075,125076],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[10,125078,125079],{},"linux传输文件到windows",[10,125081,125082],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[513,125084,125086],{"id":125085},"_764-易忘知识","7.6.4 易忘知识",[10,125088,125089],{},"操作系统内核查看",[41,125091,125092],{"className":117667,"code":121661,"language":117669,"meta":46,"style":46},[48,125093,125094],{"__ignoreMap":46},[51,125095,125096,125098],{"class":53,"line":54},[51,125097,70576],{"class":57},[51,125099,121670],{"class":278},[10,125101,125102],{},[460,125103],{"alt":46,"src":125104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[10,125106,125107],{},[460,125108],{"alt":46,"src":125109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[41,125111,125113],{"className":117667,"code":125112,"language":117669,"meta":46,"style":46},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[48,125114,125115,125127],{"__ignoreMap":46},[51,125116,125117,125119,125122,125125],{"class":53,"line":54},[51,125118,121878],{"class":57},[51,125120,125121],{"class":61}," mvtest",[51,125123,125124],{"class":61}," mvtest2",[51,125126,3062],{"class":65},[51,125128,125129],{"class":53,"line":185},[51,125130,125131],{"class":57},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[10,125133,125134],{},[460,125135],{"alt":46,"src":125136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[10,125138,125139],{},[460,125140],{"alt":46,"src":125141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[10,125143,125144,125145,125148],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[48,125146,125147],{},"du -a"," 可以快速查看磁盘使用细节。",[513,125150,125152],{"id":125151},"_765-vim","7.6.5 Vim",[10,125154,125155],{},[460,125156],{"alt":46,"src":125157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[10,125159,125160],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[10,125162,125163],{},"一开始进去为命令模式，此时点击输入的字母为命令",[10,125165,125166],{},[691,125167,125168],{},"1.命令模式：",[10,125170,125171],{},"i 切换到输入模式，在光标当前位置开始输入文本",[10,125173,125174],{},"x 删除当前光标所在处的字符",[10,125176,125177],{},"：切换到底线命令模式，以在最底一行输入命令",[10,125179,125180],{},"a 进行插入模式，在光标下一个位置输入文本",[10,125182,125183],{},"o 在当前的下方插入一个新行，并进入插入模式",[10,125185,125186],{},"0 在当前行的上方插入一个新行，并进入插入模式",[10,125188,125189],{},"dd 剪切当前行",[10,125191,125192],{},"yy 复制当前行",[10,125194,125195],{},"p 粘贴剪贴板内容到光标下方",[10,125197,125198],{},"P 粘贴剪贴板内容到光标上方",[10,125200,125201],{},"u 撤销上一次操作",[10,125203,125204],{},"ctrl+r 重做上一次操作",[10,125206,125207,125209],{},[1337,125208],{}," 保存文件",[10,125211,125212,125214],{},[1187,125213],{}," 退出Vim编辑器",[10,125216,125217,125219],{},[1187,125218],{},"! 强制退出Vim编辑器，不保存修改",[10,125221,125222],{},[691,125223,125224],{},"2.输入模式：",[10,125226,125227],{},[460,125228],{"alt":46,"src":125229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[10,125231,125232],{},[691,125233,125234],{},"3.底线命令模式：",[10,125236,125237],{},[460,125238],{"alt":46,"src":125239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[10,125241,125242],{},"按下esc可以退出底线命令模式",[513,125244,125246],{"id":125245},"_766-apt","7.6.6 apt",[10,125248,125249],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[513,125251,125253],{"id":125252},"_767-home与root的区别","7.6.7 home与root的区别",[10,125255,125256],{},[460,125257],{"alt":46,"src":125258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[10,125260,125261],{},[460,125262],{"alt":46,"src":125263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[10,125265,125266],{},[460,125267],{"alt":46,"src":125268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[10,125270,125271],{},[460,125272],{"alt":46,"src":125273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[513,125275,125277],{"id":125276},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[10,125279,125280],{},[780,125281,125282],{"href":125282,"rel":125283},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24246],[19,125285,125286,125289],{},[22,125287,125288],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[22,125290,125291],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[10,125293,125294],{},[460,125295],{"alt":46,"src":125296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[10,125298,125299],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[10,125301,125302],{},[460,125303],{"alt":46,"src":125304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[41,125306,125308],{"className":121187,"code":125307,"language":121189,"meta":121190,"style":46},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[48,125309,125310,125315],{"__ignoreMap":46},[51,125311,125312],{"class":53,"line":54},[51,125313,125314],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[51,125316,125317],{"class":53,"line":185},[51,125318,125319],{},".\u002Fpycharm.sh\n",[10,125321,125322],{},"3️⃣创建.desktop文件",[10,125324,125325],{},[691,125326,125327],{},"原理：",[1549,125329,125330,125340],{},[22,125331,125332,125333,125339],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[691,125334,125335,125338],{},[48,125336,125337],{},".desktop"," 文件"," 来识别应用。",[22,125341,125342,125344,125345],{},[48,125343,125337],{}," 文件相当于一个“应用注册表”，告诉系统：",[1549,125346,125347,125350,125353,125356,125359],{},[22,125348,125349],{},"应用名字（Name）",[22,125351,125352],{},"图标（Icon）",[22,125354,125355],{},"执行命令（Exec）",[22,125357,125358],{},"分类（Categories）",[22,125360,125361],{},"是否需要终端（Terminal）",[41,125363,125365],{"className":121187,"code":125364,"language":121189,"meta":121190,"style":46},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[48,125366,125367,125372],{"__ignoreMap":46},[51,125368,125369],{"class":53,"line":54},[51,125370,125371],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[51,125373,125374],{"class":53,"line":185},[51,125375,125376],{},"nano pycharm.desktop\n",[10,125378,125379],{},"nano是一个命令行下的编辑器，也可以使用vim",[41,125381,125383],{"className":121187,"code":125382,"language":121189,"meta":121190,"style":46},"[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",[48,125384,125385,125390,125395,125400,125405,125410,125415,125420,125425,125430],{"__ignoreMap":46},[51,125386,125387],{"class":53,"line":54},[51,125388,125389],{},"[Desktop Entry]\n",[51,125391,125392],{"class":53,"line":185},[51,125393,125394],{},"Version=1.0\n",[51,125396,125397],{"class":53,"line":202},[51,125398,125399],{},"Type=Application\n",[51,125401,125402],{"class":53,"line":209},[51,125403,125404],{},"Name=PyCharm\n",[51,125406,125407],{"class":53,"line":223},[51,125408,125409],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[51,125411,125412],{"class":53,"line":237},[51,125413,125414],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[51,125416,125417],{"class":53,"line":242},[51,125418,125419],{},"Comment=JetBrains PyCharm IDE\n",[51,125421,125422],{"class":53,"line":257},[51,125423,125424],{},"Categories=Development;IDE;\n",[51,125426,125427],{"class":53,"line":262},[51,125428,125429],{},"Terminal=false\n",[51,125431,125432],{"class":53,"line":285},[51,125433,125434],{},"StartupWMClass=jetbrains-pycharm\n",[1549,125436,125437,125443,125449,125455],{},[22,125438,125439,125442],{},[48,125440,125441],{},"Exec"," → 点击图标时执行的命令",[22,125444,125445,125448],{},[48,125446,125447],{},"Icon"," → 显示在菜单和桌面上的图标",[22,125450,125451,125454],{},[48,125452,125453],{},"Terminal=false"," → 不打开终端",[22,125456,125457,125460],{},[48,125458,125459],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125462,125463,125464],"blockquote",{},[10,125465,125466,125467,125469,125470],{},"可以理解成 ",[48,125468,125337],{}," 文件是 Linux 的 ",[691,125471,125472],{},"快捷方式配置文件",[10,125474,125475],{},"4️⃣设置可执行权限",[41,125477,125479],{"className":121187,"code":125478,"language":121189,"meta":121190,"style":46},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[48,125480,125481],{"__ignoreMap":46},[51,125482,125483],{"class":53,"line":54},[51,125484,125478],{},[10,125486,125487],{},"5️⃣桌面图标启动的话如下：",[41,125489,125491],{"className":121187,"code":125490,"language":121189,"meta":121190,"style":46},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[48,125492,125493,125498],{"__ignoreMap":46},[51,125494,125495],{"class":53,"line":54},[51,125496,125497],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[51,125499,125500],{"class":53,"line":185},[51,125501,125502],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[19,125504,125505],{"start":202},[22,125506,125507],{},"下载Appimage文件实现软件的安装",[10,125509,125510],{},"1️⃣先下载appimage",[10,125512,125513],{},[780,125514,125515],{"href":125515,"rel":125516},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24246],[10,125518,125519],{},[460,125520],{"alt":46,"src":125521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[10,125523,125524],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[10,125526,125527],{},[460,125528],{"alt":46,"src":125529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[10,125531,125532],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[10,125534,125535],{},[460,125536],{"alt":46,"src":125537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[10,125539,125540],{},[460,125541],{"alt":46,"src":125542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[10,125544,125545,125546,125549],{},"3️⃣给他们放在",[48,125547,125548],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[10,125551,125552],{},"4️⃣给软件执行权限",[41,125554,125556],{"className":121187,"code":125555,"language":121189,"meta":121190,"style":46},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[48,125557,125558,125563],{"__ignoreMap":46},[51,125559,125560],{"class":53,"line":54},[51,125561,125562],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[51,125564,125565],{"class":53,"line":185},[51,125566,125567],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[10,125569,125570],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[41,125572,125574],{"className":117667,"code":125573,"language":117669,"meta":46,"style":46},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[48,125575,125576,125583,125590,125596],{"__ignoreMap":46},[51,125577,125578,125580],{"class":53,"line":54},[51,125579,101648],{"class":278},[51,125581,125582],{"class":61}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[51,125584,125585,125587],{"class":53,"line":185},[51,125586,101655],{"class":57},[51,125588,125589],{"class":61}," .\u002Fqqmusic.desktop\n",[51,125591,125592,125594],{"class":53,"line":202},[51,125593,124638],{"class":57},[51,125595,125589],{"class":61},[51,125597,125598,125600,125602,125604],{"class":53,"line":209},[51,125599,24958],{"class":57},[51,125601,24961],{"class":61},[51,125603,123504],{"class":61},[51,125605,125589],{"class":61},[10,125607,125608,125610],{},[48,125609,101655],{},"：一个 Linux 命令，主要功能是：",[1549,125612,125613,125616],{},[22,125614,125615],{},"如果文件不存在，就创建一个新的空文件",[22,125617,125618],{},"如果文件已存在，就更新该文件的最后修改时间",[41,125620,125622],{"className":121187,"code":125621,"language":121189,"meta":121190,"style":46},"[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",[48,125623,125624,125628,125633,125638,125643,125647,125652],{"__ignoreMap":46},[51,125625,125626],{"class":53,"line":54},[51,125627,125389],{},[51,125629,125630],{"class":53,"line":185},[51,125631,125632],{},"Name=QQ音乐\n",[51,125634,125635],{"class":53,"line":202},[51,125636,125637],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[51,125639,125640],{"class":53,"line":209},[51,125641,125642],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[51,125644,125645],{"class":53,"line":223},[51,125646,125399],{},[51,125648,125649],{"class":53,"line":237},[51,125650,125651],{},"Categories=Audio;Music;Player;\n",[51,125653,125654],{"class":53,"line":242},[51,125655,125656],{},"Comment=QQ Music Client for Linux\n",[10,125658,125659],{},"将文件复制进去",[10,125661,125662],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[10,125664,125665],{},[460,125666],{"alt":46,"src":125667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[10,125669,125670],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[10,125672,125673],{},[460,125674],{"alt":46,"src":125675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[10,125677,125678,125679,125682,125683,125686],{},"如果你用的不是KDE，那么也可以直接修改",[48,125680,125681],{},"qqmuic.desktop","：在exec的末尾加上",[48,125684,125685],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[41,125688,125690],{"className":121187,"code":125689,"language":121189,"meta":121190,"style":46},"[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",[48,125691,125692,125696,125700,125705,125709,125713,125717],{"__ignoreMap":46},[51,125693,125694],{"class":53,"line":54},[51,125695,125389],{},[51,125697,125698],{"class":53,"line":185},[51,125699,125632],{},[51,125701,125702],{"class":53,"line":202},[51,125703,125704],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[51,125706,125707],{"class":53,"line":209},[51,125708,125642],{},[51,125710,125711],{"class":53,"line":223},[51,125712,125399],{},[51,125714,125715],{"class":53,"line":237},[51,125716,125651],{},[51,125718,125719],{"class":53,"line":242},[51,125720,125656],{},[10,125722,125723],{},[460,125724],{"alt":46,"src":125725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[10,125727,125728],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[41,125730,125732],{"className":121187,"code":125731,"language":121189,"meta":121190,"style":46},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[48,125733,125734],{"__ignoreMap":46},[51,125735,125736],{"class":53,"line":54},[51,125737,125731],{},[19,125739,125740],{"start":209},[22,125741,125742],{},"去Flathub上安装软件",[10,125744,125745],{},[780,125746,125747],{"href":125747,"rel":125748},"https:\u002F\u002Fflathub.org\u002F",[24246],[10,125750,125751],{},"1️⃣去上面的官网搜索软件+下载软件",[10,125753,125754],{},[460,125755],{"alt":46,"src":125756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[41,125758,125760],{"className":121187,"code":125759,"language":121189,"meta":121190,"style":46},"flatpak install flathub com.obsproject.Studio\n",[48,125761,125762],{"__ignoreMap":46},[51,125763,125764],{"class":53,"line":54},[51,125765,125759],{},[10,125767,125768],{},[460,125769],{"alt":46,"src":125770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[10,125772,125773],{},"2️⃣运行软件",[10,125775,125776],{},"a.官方方式：",[10,125778,125779],{},[460,125780],{"alt":46,"src":125781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[41,125783,125784],{"className":121187,"code":125759,"language":121189,"meta":121190,"style":46},[48,125785,125786],{"__ignoreMap":46},[51,125787,125788],{"class":53,"line":54},[51,125789,125759],{},[10,125791,125792],{},"b.当普通软件运行：",[10,125794,125795],{},[460,125796],{"alt":46,"src":125797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[10,125799,125800],{},[460,125801],{"alt":46,"src":125802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[464,125804,125805],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":46,"searchDepth":185,"depth":185,"links":125807},[125808,125809,125814,125815,125821,125822],{"id":122540,"depth":185,"text":122541},{"id":122882,"depth":185,"text":122883,"children":125810},[125811,125812,125813],{"id":122886,"depth":202,"text":122887},{"id":122953,"depth":202,"text":122954},{"id":123214,"depth":202,"text":123215},{"id":123367,"depth":185,"text":123368},{"id":123605,"depth":185,"text":123606,"children":125816},[125817,125818,125819,125820],{"id":123657,"depth":202,"text":123658},{"id":123943,"depth":202,"text":123944},{"id":124214,"depth":202,"text":124215},{"id":124473,"depth":202,"text":124474},{"id":124532,"depth":185,"text":124533},{"id":124833,"depth":185,"text":124834,"children":125823},[125824,125825,125826,125827,125828,125829,125830,125831],{"id":124837,"depth":202,"text":124838},{"id":124849,"depth":202,"text":124850},{"id":125061,"depth":202,"text":125062},{"id":125085,"depth":202,"text":125086},{"id":125151,"depth":202,"text":125152},{"id":125245,"depth":202,"text":125246},{"id":125252,"depth":202,"text":125253},{"id":125276,"depth":202,"text":125277},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122532,"description":23760},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125838,"title":125839,"body":125840,"description":23760,"extension":469,"meta":125844,"navigation":205,"path":125845,"seo":125846,"stem":125847,"__hash__":125848},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125841,"toc":125842},[],{"title":46,"searchDepth":185,"depth":185,"links":125843},[],{"category":30645},"\u002Fwiki\u002F2025-01-27-linux",{"title":125839,"description":23760},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":4,"title":5,"body":125850,"description":12,"extension":469,"meta":126178,"navigation":205,"path":472,"seo":126179,"stem":474,"__hash__":475},{"type":7,"value":125851,"toc":126176},[125852,125854,125856,125868,125870,125910,125912,125914,125954,125962,125964,125966,126170,126174],[10,125853,12],{},[14,125855,17],{"id":16},[19,125857,125858,125860,125862,125864,125866],{},[22,125859,24],{},[22,125861,27],{},[22,125863,30],{},[22,125865,33],{},[22,125867,36],{},[10,125869,39],{},[41,125871,125872],{"className":43,"code":44,"language":45,"meta":46,"style":46},[48,125873,125874],{"__ignoreMap":46},[51,125875,125876,125878,125880,125882,125884,125886,125888,125890,125892,125894,125896,125898,125900,125902,125904,125906,125908],{"class":53,"line":54},[51,125877,58],{"class":57},[51,125879,62],{"class":61},[51,125881,66],{"class":65},[51,125883,70],{"class":69},[51,125885,73],{"class":61},[51,125887,76],{"class":65},[51,125889,70],{"class":69},[51,125891,81],{"class":61},[51,125893,84],{"class":65},[51,125895,70],{"class":69},[51,125897,89],{"class":61},[51,125899,92],{"class":65},[51,125901,70],{"class":69},[51,125903,97],{"class":61},[51,125905,100],{"class":65},[51,125907,70],{"class":69},[51,125909,105],{"class":61},[14,125911,109],{"id":108},[10,125913,39],{},[41,125915,125916],{"className":43,"code":44,"language":45,"meta":46,"style":46},[48,125917,125918],{"__ignoreMap":46},[51,125919,125920,125922,125924,125926,125928,125930,125932,125934,125936,125938,125940,125942,125944,125946,125948,125950,125952],{"class":53,"line":54},[51,125921,58],{"class":57},[51,125923,62],{"class":61},[51,125925,66],{"class":65},[51,125927,70],{"class":69},[51,125929,73],{"class":61},[51,125931,76],{"class":65},[51,125933,70],{"class":69},[51,125935,81],{"class":61},[51,125937,84],{"class":65},[51,125939,70],{"class":69},[51,125941,89],{"class":61},[51,125943,92],{"class":65},[51,125945,70],{"class":69},[51,125947,97],{"class":61},[51,125949,100],{"class":65},[51,125951,70],{"class":69},[51,125953,105],{"class":61},[41,125955,125956],{"className":43,"code":154,"language":45,"meta":46,"style":46},[48,125957,125958],{"__ignoreMap":46},[51,125959,125960],{"class":53,"line":54},[51,125961,154],{"class":57},[14,125963,164],{"id":163},[10,125965,167],{},[41,125967,125968],{"className":170,"code":171,"language":172,"meta":46,"style":46},[48,125969,125970,125976,125988,125992,126002,126012,126016,126026,126030,126046,126054,126062,126074,126078,126082,126086,126090,126098,126104,126116,126122,126130,126134,126138,126152,126156,126160,126166],{"__ignoreMap":46},[51,125971,125972,125974],{"class":53,"line":54},[51,125973,179],{"class":69},[51,125975,182],{"class":65},[51,125977,125978,125980,125982,125984,125986],{"class":53,"line":185},[51,125979,188],{"class":65},[51,125981,191],{"class":61},[51,125983,194],{"class":65},[51,125985,70],{"class":69},[51,125987,199],{"class":61},[51,125989,125990],{"class":53,"line":202},[51,125991,206],{"emptyLinePlaceholder":205},[51,125993,125994,125996,125998,126000],{"class":53,"line":209},[51,125995,179],{"class":69},[51,125997,214],{"class":65},[51,125999,217],{"class":69},[51,126001,220],{"class":65},[51,126003,126004,126006,126008,126010],{"class":53,"line":223},[51,126005,226],{"class":69},[51,126007,229],{"class":65},[51,126009,179],{"class":69},[51,126011,234],{"class":65},[51,126013,126014],{"class":53,"line":237},[51,126015,206],{"emptyLinePlaceholder":205},[51,126017,126018,126020,126022,126024],{"class":53,"line":242},[51,126019,245],{"class":65},[51,126021,249],{"class":248},[51,126023,70],{"class":69},[51,126025,254],{"class":65},[51,126027,126028],{"class":53,"line":257},[51,126029,206],{"emptyLinePlaceholder":205},[51,126031,126032,126034,126036,126038,126040,126042,126044],{"class":53,"line":262},[51,126033,265],{"class":65},[51,126035,70],{"class":69},[51,126037,270],{"class":65},[51,126039,273],{"class":248},[51,126041,70],{"class":69},[51,126043,279],{"class":278},[51,126045,282],{"class":65},[51,126047,126048,126050,126052],{"class":53,"line":285},[51,126049,288],{"class":65},[51,126051,70],{"class":69},[51,126053,293],{"class":65},[51,126055,126056,126058,126060],{"class":53,"line":296},[51,126057,299],{"class":65},[51,126059,70],{"class":69},[51,126061,304],{"class":65},[51,126063,126064,126066,126068,126070,126072],{"class":53,"line":307},[51,126065,310],{"class":65},[51,126067,313],{"class":248},[51,126069,70],{"class":69},[51,126071,318],{"class":61},[51,126073,321],{"class":65},[51,126075,126076],{"class":53,"line":324},[51,126077,282],{"class":65},[51,126079,126080],{"class":53,"line":329},[51,126081,206],{"emptyLinePlaceholder":205},[51,126083,126084],{"class":53,"line":334},[51,126085,337],{"class":65},[51,126087,126088],{"class":53,"line":340},[51,126089,206],{"emptyLinePlaceholder":205},[51,126091,126092,126094,126096],{"class":53,"line":345},[51,126093,348],{"class":69},[51,126095,351],{"class":57},[51,126097,354],{"class":65},[51,126099,126100,126102],{"class":53,"line":357},[51,126101,360],{"class":69},[51,126103,363],{"class":65},[51,126105,126106,126108,126110,126112,126114],{"class":53,"line":366},[51,126107,369],{"class":69},[51,126109,372],{"class":65},[51,126111,375],{"class":69},[51,126113,378],{"class":61},[51,126115,363],{"class":65},[51,126117,126118,126120],{"class":53,"line":383},[51,126119,386],{"class":69},[51,126121,389],{"class":278},[51,126123,126124,126126,126128],{"class":53,"line":392},[51,126125,395],{"class":69},[51,126127,398],{"class":278},[51,126129,363],{"class":65},[51,126131,126132],{"class":53,"line":403},[51,126133,406],{"class":69},[51,126135,126136],{"class":53,"line":409},[51,126137,206],{"emptyLinePlaceholder":205},[51,126139,126140,126142,126144,126146,126148,126150],{"class":53,"line":414},[51,126141,417],{"class":65},[51,126143,70],{"class":69},[51,126145,422],{"class":65},[51,126147,425],{"class":248},[51,126149,70],{"class":69},[51,126151,430],{"class":65},[51,126153,126154],{"class":53,"line":433},[51,126155,436],{"class":65},[51,126157,126158],{"class":53,"line":439},[51,126159,206],{"emptyLinePlaceholder":205},[51,126161,126162,126164],{"class":53,"line":444},[51,126163,447],{"class":69},[51,126165,450],{"class":65},[51,126167,126168],{"class":53,"line":453},[51,126169,456],{"class":65},[10,126171,126172],{},[460,126173],{"alt":46,"src":462},[464,126175,466],{},{"title":46,"searchDepth":185,"depth":185,"links":126177},[],{"category":471},{"title":5,"description":12},{"id":126181,"title":126182,"body":126183,"description":23760,"extension":469,"meta":126198,"navigation":205,"path":126199,"seo":126200,"stem":126201,"__hash__":126202},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126184,"toc":126195},[126185,126188,126192],[14,126186,126182],{"id":126187},"_1-基础知识",[486,126189,126191],{"id":126190},"_11-js的组成","1.1 js的组成",[10,126193,126194],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":46,"searchDepth":185,"depth":185,"links":126196},[126197],{"id":126190,"depth":185,"text":126191},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126182,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126204,"title":126205,"body":126206,"description":23760,"extension":469,"meta":126345,"navigation":205,"path":126346,"seo":126347,"stem":126348,"__hash__":126349},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126207,"toc":126333},[126208,126211,126215,126218,126222,126232,126236,126239,126242,126245,126249,126256,126262,126266,126272,126283,126287,126290,126294,126297,126301,126304,126308,126311,126315,126318,126321,126324,126327,126330],[14,126209,126205],{"id":126210},"_2-vscode必备内容",[486,126212,126214],{"id":126213},"_21-标签分类","2.1 标签分类",[10,126216,126217],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[486,126219,126221],{"id":126220},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[10,126223,126224,126225,126227,126228,126231],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[48,126226,768],{}," 然后按 ",[48,126229,126230],{},"Tab","，快速自动生成基本结构。",[486,126233,126235],{"id":126234},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[10,126237,126238],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[10,126240,126241],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[10,126243,126244],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[486,126246,126248],{"id":126247},"_24-视图缩放","2.4 视图缩放",[10,126250,126251,126252,126255],{},"缩放视图 ",[48,126253,126254],{},"ctrl+"," 可实现代码增大。",[10,126257,126258,126261],{},[48,126259,126260],{},"ctrl-"," 可实现代码减小。",[486,126263,126265],{"id":126264},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[10,126267,126268,126269,28767],{},"VSCode 新建文件快捷键为 ",[48,126270,126271],{},"ctrl+N",[10,126273,126274,126275,126278,126279,126282],{},"保存快捷键为 ",[48,126276,126277],{},"ctrl+S","，将文本保存为 ",[48,126280,126281],{},".html"," 文件。",[486,126284,126286],{"id":126285},"_26-auto-rename-tag","2.6 Auto Rename Tag",[10,126288,126289],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[486,126291,126293],{"id":126292},"_27-vscode-icons","2.7 vscode-icons",[10,126295,126296],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[486,126298,126300],{"id":126299},"_28-easy-less","2.8 Easy LESS",[10,126302,126303],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[486,126305,126307],{"id":126306},"_29-会了吧插件","2.9 会了吧插件",[10,126309,126310],{},"会了吧插件可以展示代码中英语单词的意思。",[486,126312,126314],{"id":126313},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[10,126316,126317],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[10,126319,126320],{},"②选定多个相同的单词:ctrl+D",[10,126322,126323],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[10,126325,126326],{},"④全局替换某些单词:ctrl+h",[10,126328,126329],{},"⑤快速定位到某一行:ctrl+g",[10,126331,126332],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":46,"searchDepth":185,"depth":185,"links":126334},[126335,126336,126337,126338,126339,126340,126341,126342,126343,126344],{"id":126213,"depth":185,"text":126214},{"id":126220,"depth":185,"text":126221},{"id":126234,"depth":185,"text":126235},{"id":126247,"depth":185,"text":126248},{"id":126264,"depth":185,"text":126265},{"id":126285,"depth":185,"text":126286},{"id":126292,"depth":185,"text":126293},{"id":126299,"depth":185,"text":126300},{"id":126306,"depth":185,"text":126307},{"id":126313,"depth":185,"text":126314},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126205,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126351,"title":126352,"body":126353,"description":23760,"extension":469,"meta":126512,"navigation":205,"path":126513,"seo":126514,"stem":126515,"__hash__":126516},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126354,"toc":126504},[126355,126358,126362,126372,126378,126384,126388,126397,126401,126406,126409,126412,126416,126419,126429,126438,126447,126456,126466,126473,126478,126483,126496],[14,126356,126352],{"id":126357},"_3-html文本与容器标签",[486,126359,126361],{"id":126360},"_31-标题标签","3.1 标题标签",[10,126363,126364,126367,126368,126371],{},[48,126365,126366],{},"\u003Ch1>","我是一级标签",[48,126369,126370],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[10,126373,126374,126367,126376],{},[48,126375,126366],{},[48,126377,126370],{},[10,126379,123706,126380,126383],{},[48,126381,126382],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[486,126385,126387],{"id":126386},"_32-段落标签","3.2 段落标签",[10,126389,126390,126393,126394],{},[48,126391,126392],{},"\u003Cp>","....",[48,126395,126396],{},"\u003C\u002Fp>",[486,126398,126400],{"id":126399},"_33-换行标签","3.3 换行标签",[10,126402,126403],{},[48,126404,126405],{},"\u003Cbr \u002F>",[10,126407,126408],{},"具有强制换行的作用",[10,126410,126411],{},"单标签",[486,126413,126415],{"id":126414},"_34-文本格式化标签","3.4 文本格式化标签",[10,126417,126418],{},"提供粗体、斜体和下划线等效果",[10,126420,126421,126422,82911,126425,126428],{},"加粗：",[48,126423,126424],{},"\u003Cstrong>...\u003C\u002Fstrong>",[48,126426,126427],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[10,126430,126431,126432,82911,126435,126428],{},"斜体：",[48,126433,126434],{},"\u003Cem>...\u003C\u002Fem>",[48,126436,126437],{},"\u003Ci>...\u003C\u002Fi>",[10,126439,126440,126441,82911,126444,126428],{},"删除线：",[48,126442,126443],{},"\u003Cdel>...\u003C\u002Fdel>",[48,126445,126446],{},"\u003Cs>...\u003C\u002Fs>",[10,126448,126449,126450,82911,126453,126428],{},"下划线：",[48,126451,126452],{},"\u003Cins>...\u003C\u002Fins>",[48,126454,126455],{},"\u003Cu>...\u003C\u002Fu>",[486,126457,126459,126460,18793,126463,103065],{"id":126458},"_35-div和span标签","3.5 ",[48,126461,126462],{},"\u003Cdiv>",[48,126464,126465],{},"\u003Cspan>",[10,126467,126468,101390,126470,126472],{},[48,126469,126462],{},[48,126471,126465],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[10,126474,126475],{},[48,126476,126477],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[10,126479,126480],{},[48,126481,126482],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[10,126484,126485,126486,126488,126489,126491,126492,126495],{},"两者特点：①",[48,126487,126462],{}," 标签用来布局，但一行通常只放一个 ",[48,126490,126462],{},"。可以理解为一个大盒子，独占一行，在 ",[48,126493,126494],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[10,126497,77621,126498,126500,126501,126503],{},[48,126499,126465],{}," 标签也可用于布局，一行可以放多个 ",[48,126502,126465],{},"，可理解为小盒子。",{"title":46,"searchDepth":185,"depth":185,"links":126505},[126506,126507,126508,126509,126510],{"id":126360,"depth":185,"text":126361},{"id":126386,"depth":185,"text":126387},{"id":126399,"depth":185,"text":126400},{"id":126414,"depth":185,"text":126415},{"id":126458,"depth":185,"text":126511},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126352,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126518,"title":126519,"body":126520,"description":23760,"extension":469,"meta":126717,"navigation":205,"path":126718,"seo":126719,"stem":126720,"__hash__":126721},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126521,"toc":126709},[126522,126525,126529,126532,126538,126545,126551,126557,126560,126563,126566,126569,126572,126575,126578,126582,126585,126588,126591,126597,126603,126609,126616,126620,126626,126632,126635,126638,126644,126650,126656,126659,126662,126666,126669,126679,126685,126689,126698,126702,126705],[14,126523,126519],{"id":126524},"_4-html图像与链接",[486,126526,126528],{"id":126527},"_41-图像标签","4.1 图像标签",[10,126530,126531],{},"（1）标签",[10,126533,126534,126537],{},[48,126535,126536],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[10,126539,126540,126541,126544],{},"src是",[48,126542,126543],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[10,126546,126547,126548],{},"alt:文本，替换文本。图像不能显示的文字 ",[48,126549,126550],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[10,126552,126553,126554],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[48,126555,126556],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[10,126558,126559],{},"width:像素，设置图像的宽度",[10,126561,126562],{},"height:像素，设置图像的高度",[10,126564,126565],{},"border：像素，设置图像的边框粗细",[10,126567,126568],{},"（2）图像标签属性的注意点：",[10,126570,126571],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[10,126573,126574],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[10,126576,126577],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[486,126579,126581],{"id":126580},"_42-路径注意要点","4.2 路径注意要点：",[10,126583,126584],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[10,126586,126587],{},"（2）根目录：就是打开文件夹的第一层根目录",[10,126589,126590],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[10,126592,126593,126594],{},"①同一级路径：图像文件位于HTML文件同一级，如",[48,126595,126596],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[10,126598,126599,126600],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[48,126601,126602],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[10,126604,126605,126606],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[48,126607,126608],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[10,126610,126611,126612,793],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[780,126613,126614],{"href":126614,"rel":126615},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24246],[486,126617,126619],{"id":126618},"_43-超链接标签","4.3 超链接标签",[10,126621,126622,126625],{},[48,126623,126624],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[10,126627,126628,126629],{},"①语法格式：",[48,126630,126631],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[10,126633,126634],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[10,126636,126637],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[10,126639,126640,126641],{},"③链接分类：外部链接：",[48,126642,126643],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[10,126645,126646,126647],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[48,126648,126649],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[10,126651,126652,126653],{},"空链接：如果当时没有确定链接目标时，",[48,126654,126655],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[10,126657,126658],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[10,126660,126661],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[486,126663,126665],{"id":126664},"_44-锚点链接","4.4 锚点链接",[10,126667,126668],{},"点我们点击链接，可以快速定位到页面中的某个位置",[10,126670,126671,126672,126675,126676],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[48,126673,126674],{},"\u003Ca href=\"#two\">","第二级",[48,126677,126678],{},"\u003C\u002Fa>",[10,126680,126681,126682],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[48,126683,126684],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[486,126686,126688],{"id":126687},"_45-注释标签","4.5 注释标签",[10,126690,126691,126694,126695],{},[48,126692,126693],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[48,126696,126697],{},"ctrl+\u002F",[486,126699,126701],{"id":126700},"_46-特殊字符","4.6 特殊字符",[10,126703,126704],{},"可以实现添加多个空格",[460,126706],{"style":126707,"src":126708},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":46,"searchDepth":185,"depth":185,"links":126710},[126711,126712,126713,126714,126715,126716],{"id":126527,"depth":185,"text":126528},{"id":126580,"depth":185,"text":126581},{"id":126618,"depth":185,"text":126619},{"id":126664,"depth":185,"text":126665},{"id":126687,"depth":185,"text":126688},{"id":126700,"depth":185,"text":126701},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126519,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126723,"title":126724,"body":126725,"description":23760,"extension":469,"meta":127018,"navigation":205,"path":127019,"seo":127020,"stem":127021,"__hash__":127022},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126726,"toc":127009},[126727,126730,126734,126737,126740,126743,126746,126749,126752,126755,126758,126761,126781,126787,126791,126794,126797,126800,126803,126806,126809,126813,126816,126819,126822,126825,126838,126843,126846,126849,126864,126867,126870,126873,126876,126879,126883,126886,126893,126896,126899,126902,126905,126908,126914,126917,126920,126926,126929,126932,126935,126941,126944,126947,126961,126968,126971,126974,126981,126990,126993,126996,126999,127003,127006],[14,126728,126724],{"id":126729},"_5-html表格列表与表单",[486,126731,126733],{"id":126732},"_51-表格标签","5.1 表格标签",[10,126735,126736],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[10,126738,126739],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[10,126741,126742],{},"②表格基本语法：",[460,126744],{"style":126707,"src":126745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[10,126747,126748],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[460,126750],{"style":126707,"src":126751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[10,126753,126754],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[460,126756],{"style":126707,"src":126757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[10,126759,126760],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[10,126762,126763,126766,126767,126769,126770,126773,126774,126776,126777,126780],{},[48,126764,126765],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[48,126768,126765],{},"内部必须拥有",[48,126771,126772],{},"\u003Ctr>","标签，一般位于第一行，",[48,126775,126765],{},"比",[48,126778,126779],{},"\u003Cth>","范围广",[10,126782,126783,126786],{},[48,126784,126785],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[486,126788,126790],{"id":126789},"_52-合并单元格","5.2 合并单元格",[10,126792,126793],{},"（1）合并单元格方式：",[10,126795,126796],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[10,126798,126799],{},"②跨列合并：colspan=\"合并单元格的个数\"",[10,126801,126802],{},"（2）目标单元格：",[10,126804,126805],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[10,126807,126808],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[486,126810,126812],{"id":126811},"_53-列表标签","5.3 列表标签",[10,126814,126815],{},"（1）分类：无序列表、有序列表、自定义列表",[10,126817,126818],{},"①无序列表：",[460,126820],{"style":126707,"src":126821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[10,126823,126824],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[10,126826,126827,126830,126831,126834,126835,126837],{},[48,126828,126829],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[48,126832,126833],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[48,126836,126829],{},"中输入其他标签或文字是不对的",[10,126839,126840,126842],{},[48,126841,126833],{},"之间相当于一个容器，可以容纳所有元素",[10,126844,126845],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[10,126847,126848],{},"在css中去除前边的小圆点采用如下代码:",[41,126850,126854],{"className":126851,"code":126852,"language":126853,"meta":46,"style":46},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[48,126855,126856],{"__ignoreMap":46},[51,126857,126858,126861],{"class":53,"line":54},[51,126859,126860],{"class":51672},"list-style",[51,126862,126863],{"class":65},": none;\n",[10,126865,126866],{},"②有序列表：",[460,126868],{"style":126707,"src":126869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[10,126871,126872],{},"③自定义列表：",[460,126874],{"style":126707,"src":126875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[460,126877],{"style":126707,"src":126878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[486,126880,126882],{"id":126881},"_54-表单标签","5.4 表单标签",[10,126884,126885],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[10,126887,126888,126889,126892],{},"（1）表单域：包含单元素的区域，",[48,126890,126891],{},"\u003Cform>","标签可以实现信息的收集和传递。",[460,126894],{"style":126707,"src":126895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[10,126897,126898],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[10,126900,126901],{},"表单元素提交必须有name属性",[10,126903,126904],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[10,126906,126907],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[10,126909,77598,126910,126913],{},[48,126911,126912],{},"\u003Cinput>","输入表单元素",[460,126915],{"style":126707,"src":126916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[460,126918],{"style":126707,"src":126919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[10,126921,126922,126923],{},"单选按钮：",[48,126924,126925],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[460,126927],{"style":126707,"src":126928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[10,126930,126931],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[460,126933],{"style":126707,"src":126934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[10,126936,126937,126940],{},[691,126938,126939],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[10,126942,126943],{},"②select下拉表单元素：可以节约页面控件",[460,126945],{"style":126707,"src":126946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[10,126948,126949,14179,126951,126954,126955,126957,126958,126960],{},[691,126950,574],{},[48,126952,126953],{},"\u003Cselect>","中至少包含一对",[48,126956,103086],{},"；在",[48,126959,103086],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[10,126962,126963,126964,126967],{},"③",[48,126965,126966],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[460,126969],{"style":126707,"src":126970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[10,126972,126973],{},"3行20列",[486,126975,126977,126978,103065],{"id":126976},"_55-lable标签","5.5 ",[48,126979,126980],{},"\u003Clable>",[10,126982,126983,126984,126986,126987,126989],{},"它不是表单标签，但常常与表单标签搭配使用，",[48,126985,126980],{},"标签用于绑定一个表单标签，当点击",[48,126988,126980],{},"标签内的文本",[10,126991,126992],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[460,126994],{"style":126707,"src":126995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[460,126997],{"style":126707,"src":126998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[486,127000,127002],{"id":127001},"_56-实例","5.6 实例",[460,127004],{"style":126707,"src":127005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[464,127007,127008],{},"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":46,"searchDepth":185,"depth":185,"links":127010},[127011,127012,127013,127014,127015,127017],{"id":126732,"depth":185,"text":126733},{"id":126789,"depth":185,"text":126790},{"id":126811,"depth":185,"text":126812},{"id":126881,"depth":185,"text":126882},{"id":126976,"depth":185,"text":127016},"5.5 \u003Clable>标签",{"id":127001,"depth":185,"text":127002},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126724,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127024,"title":127025,"body":127026,"description":23760,"extension":469,"meta":127575,"navigation":205,"path":127576,"seo":127577,"stem":127578,"__hash__":127579},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127027,"toc":127550},[127028,127031,127035,127038,127041,127045,127048,127051,127054,127057,127060,127063,127066,127070,127073,127077,127080,127083,127086,127090,127093,127096,127099,127105,127108,127111,127114,127117,127120,127123,127126,127159,127163,127166,127169,127172,127176,127179,127182,127185,127188,127191,127195,127198,127201,127204,127208,127211,127215,127218,127222,127225,127230,127234,127237,127241,127244,127247,127250,127253,127280,127283,127287,127290,127293,127298,127301,127304,127308,127311,127316,127319,127322,127325,127329,127332,127335,127338,127342,127345,127348,127351,127355,127359,127362,127402,127405,127409,127416,127419,127423,127426,127472,127476,127479,127482,127485,127513,127517,127520,127547],[14,127029,127025],{"id":127030},"_6-css语法与文本样式",[486,127032,127034],{"id":127033},"_61-css语法规范","6.1 css语法规范",[10,127036,127037],{},"由两部分组成，选择器及一条或多条声明",[460,127039],{"style":126707,"src":127040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[10,127042,127043],{},[691,127044,574],{},[10,127046,127047],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[10,127049,127050],{},"②属性与属性值以“键值对”的形式出现",[10,127052,127053],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[10,127055,127056],{},"④属性和属性值之间用英文“;”分开",[460,127058],{"style":126707,"src":127059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[460,127061],{"style":126707,"src":127062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[460,127064],{"style":126707,"src":127065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[486,127067,127069],{"id":127068},"_62-css选择器","6.2 css选择器",[10,127071,127072],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[513,127074,127076],{"id":127075},"_621-标签选择器","6.2.1 标签选择器",[10,127078,127079],{},"①优点：能快速为页面中同类型的标签统一设置样式",[10,127081,127082],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[460,127084],{"style":126707,"src":127085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[513,127087,127089],{"id":127088},"_622-类选择器","6.2.2 类选择器",[10,127091,127092],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[10,127094,127095],{},"②样例",[460,127097],{"style":126707,"src":127098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[10,127100,127101,127102,127104],{},"③ ",[691,127103,126939],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[10,127106,127107],{},"可以理解为给这个标签起了个名字，来表示；",[10,127109,127110],{},"长名称或词组可以使用横线来为选择器命名；",[10,127112,127113],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[10,127115,127116],{},"命名要有意义；",[460,127118],{"style":126707,"src":127119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[10,127121,127122],{},"类选择器也可以指定特殊的元素p.center{}",[10,127124,127125],{},"p.center和.center都对",[41,127127,127129],{"className":126851,"code":127128,"language":126853,"meta":46,"style":46},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[48,127130,127131,127136,127145,127155],{"__ignoreMap":46},[51,127132,127133],{"class":53,"line":54},[51,127134,127135],{"class":601},"\u002F* 类选择器指定特殊元素 *\u002F\n",[51,127137,127138,127140,127143],{"class":53,"line":185},[51,127139,10],{"class":51672},[51,127141,127142],{"class":57},".center",[51,127144,15956],{"class":65},[51,127146,127147,127149,127151,127153],{"class":53,"line":202},[51,127148,70898],{"class":278},[51,127150,51809],{"class":65},[51,127152,51964],{"class":278},[51,127154,1703],{"class":65},[51,127156,127157],{"class":53,"line":209},[51,127158,1974],{"class":65},[513,127160,127162],{"id":127161},"_623-多类名使用","6.2.3 多类名使用",[10,127164,127165],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[460,127167],{"style":126707,"src":127168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[10,127170,127171],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[513,127173,127175],{"id":127174},"_624-id选择器","6.2.4 id选择器",[10,127177,127178],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[10,127180,127181],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[460,127183],{"style":126707,"src":127184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[10,127186,127187],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[10,127189,127190],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[513,127192,127194],{"id":127193},"_625-通配符选择器","6.2.5 通配符选择器",[10,127196,127197],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[10,127199,127200],{},"* {",[10,127202,127203],{},"color=\"red\"}",[513,127205,127207],{"id":127206},"_626-总结","6.2.6 总结",[460,127209],{"style":126707,"src":127210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[486,127212,127214],{"id":127213},"_63-css字体属性","6.3 css字体属性",[10,127216,127217],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[513,127219,127221],{"id":127220},"_631-字体系列","6.3.1 字体系列",[10,127223,127224],{},"font-family: '宋体';",[10,127226,127227,127229],{},[691,127228,574],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[513,127231,127233],{"id":127232},"_632-字体大小","6.3.2 字体大小",[10,127235,127236],{},"font-size: 20px",[10,127238,127239,26855],{},[691,127240,126939],{},[10,127242,127243],{},"①px（像素）大小是网页的最常用单位",[10,127245,127246],{},"②谷歌浏览器默认为16px",[10,127248,127249],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[10,127251,127252],{},"④可以给body指定整个页面的大小：会自动引用",[41,127254,127256],{"className":126851,"code":127255,"language":126853,"meta":46,"style":46},"body {\n  font-size: 16px;\n}\n",[48,127257,127258,127264,127276],{"__ignoreMap":46},[51,127259,127260,127262],{"class":53,"line":54},[51,127261,52172],{"class":51672},[51,127263,15956],{"class":65},[51,127265,127266,127268,127270,127272,127274],{"class":53,"line":185},[51,127267,70998],{"class":278},[51,127269,51809],{"class":65},[51,127271,1143],{"class":278},[51,127273,51864],{"class":69},[51,127275,1703],{"class":65},[51,127277,127278],{"class":53,"line":202},[51,127279,1974],{"class":65},[10,127281,127282],{},"⑤标题标签比较特殊，需要单独指定大小",[513,127284,127286],{"id":127285},"_633-字体粗细","6.3.3 字体粗细",[10,127288,127289],{},"font-weight: bold;",[10,127291,127292],{},"font-weight: 100；",[10,127294,127295,127297],{},[691,127296,574],{}," ①粗体文字变细：尽量别用normal，多用数字",[10,127299,127300],{},"font-weight= 400;",[10,127302,127303],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[513,127305,127307],{"id":127306},"_634-文字样式","6.3.4 文字样式",[10,127309,127310],{},"font-style: normal；",[10,127312,127313,26855],{},[691,127314,127315],{},"属性值",[10,127317,127318],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[10,127320,127321],{},"②italic：浏览器会显示斜体的字体样式",[460,127323],{"style":126707,"src":127324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[513,127326,127328],{"id":127327},"_635-字体符合属性","6.3.5 字体符合属性",[460,127330],{"style":126707,"src":127331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[460,127333],{"style":126707,"src":127334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[10,127336,127337],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[10,127339,127340,26855],{},[691,127341,126939],{},[10,127343,127344],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[10,127346,127347],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[10,127349,127350],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[486,127352,127354],{"id":127353},"_64-css-test文本属性","6.4 css test文本属性",[513,127356,127358],{"id":127357},"_641-文本颜色","6.4.1 文本颜色",[10,127360,127361],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[41,127363,127365],{"className":126851,"code":127364,"language":126853,"meta":46,"style":46},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[48,127366,127367,127372,127378,127388,127393,127398],{"__ignoreMap":46},[51,127368,127369],{"class":53,"line":54},[51,127370,127371],{"class":601},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[51,127373,127374,127376],{"class":53,"line":185},[51,127375,10],{"class":51672},[51,127377,15956],{"class":65},[51,127379,127380,127382,127384,127386],{"class":53,"line":202},[51,127381,71277],{"class":278},[51,127383,51809],{"class":65},[51,127385,57793],{"class":278},[51,127387,1703],{"class":65},[51,127389,127390],{"class":53,"line":209},[51,127391,127392],{"class":601},"  \u002F* color: #ff0000; *\u002F\n",[51,127394,127395],{"class":53,"line":223},[51,127396,127397],{"class":601},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[51,127399,127400],{"class":53,"line":237},[51,127401,1974],{"class":65},[460,127403],{"style":126707,"src":127404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[513,127406,127408],{"id":127407},"_642-对齐文本","6.4.2 对齐文本",[10,127410,127411,127412,127415],{},"text-align属于用于设置元素内文本内容的 ",[691,127413,127414],{},"水平对齐"," 方式",[10,127417,127418],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[513,127420,127422],{"id":127421},"_643-装饰文本","6.4.3 装饰文本",[10,127424,127425],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[41,127427,127429],{"className":126851,"code":127428,"language":126853,"meta":46,"style":46},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[48,127430,127431,127437,127447,127451,127457,127468],{"__ignoreMap":46},[51,127432,127433,127435],{"class":53,"line":54},[51,127434,780],{"class":51672},[51,127436,15956],{"class":65},[51,127438,127439,127441,127443,127445],{"class":53,"line":185},[51,127440,70874],{"class":278},[51,127442,51809],{"class":65},[51,127444,55109],{"class":278},[51,127446,1703],{"class":65},[51,127448,127449],{"class":53,"line":202},[51,127450,1974],{"class":65},[51,127452,127453,127455],{"class":53,"line":209},[51,127454,10],{"class":51672},[51,127456,15956],{"class":65},[51,127458,127459,127461,127463,127466],{"class":53,"line":223},[51,127460,70874],{"class":278},[51,127462,51809],{"class":65},[51,127464,127465],{"class":278},"underline",[51,127467,1703],{"class":65},[51,127469,127470],{"class":53,"line":237},[51,127471,1974],{"class":65},[513,127473,127475],{"id":127474},"_644-文本缩进","6.4.4 文本缩进",[10,127477,127478],{},"实现文本的第一行首行缩进自己指定的距离",[10,127480,127481],{},"20px往右边走；-20px往左边走",[10,127483,127484],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[41,127486,127488],{"className":126851,"code":127487,"language":126853,"meta":46,"style":46},"p {\n  text-indent: 2em;\n}\n",[48,127489,127490,127496,127509],{"__ignoreMap":46},[51,127491,127492,127494],{"class":53,"line":54},[51,127493,10],{"class":51672},[51,127495,15956],{"class":65},[51,127497,127498,127501,127503,127505,127507],{"class":53,"line":185},[51,127499,127500],{"class":278},"  text-indent",[51,127502,51809],{"class":65},[51,127504,620],{"class":278},[51,127506,23936],{"class":69},[51,127508,1703],{"class":65},[51,127510,127511],{"class":53,"line":202},[51,127512,1974],{"class":65},[513,127514,127516],{"id":127515},"_645-行间距","6.4.5 行间距",[10,127518,127519],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[41,127521,127523],{"className":126851,"code":127522,"language":126853,"meta":46,"style":46},"p {\n  line-height: 1.6;\n}\n",[48,127524,127525,127531,127543],{"__ignoreMap":46},[51,127526,127527,127529],{"class":53,"line":54},[51,127528,10],{"class":51672},[51,127530,15956],{"class":65},[51,127532,127533,127536,127538,127541],{"class":53,"line":185},[51,127534,127535],{"class":278},"  line-height",[51,127537,51809],{"class":65},[51,127539,127540],{"class":278},"1.6",[51,127542,1703],{"class":65},[51,127544,127545],{"class":53,"line":202},[51,127546,1974],{"class":65},[464,127548,127549],{},"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":46,"searchDepth":185,"depth":185,"links":127551},[127552,127553,127561,127568],{"id":127033,"depth":185,"text":127034},{"id":127068,"depth":185,"text":127069,"children":127554},[127555,127556,127557,127558,127559,127560],{"id":127075,"depth":202,"text":127076},{"id":127088,"depth":202,"text":127089},{"id":127161,"depth":202,"text":127162},{"id":127174,"depth":202,"text":127175},{"id":127193,"depth":202,"text":127194},{"id":127206,"depth":202,"text":127207},{"id":127213,"depth":185,"text":127214,"children":127562},[127563,127564,127565,127566,127567],{"id":127220,"depth":202,"text":127221},{"id":127232,"depth":202,"text":127233},{"id":127285,"depth":202,"text":127286},{"id":127306,"depth":202,"text":127307},{"id":127327,"depth":202,"text":127328},{"id":127353,"depth":185,"text":127354,"children":127569},[127570,127571,127572,127573,127574],{"id":127357,"depth":202,"text":127358},{"id":127407,"depth":202,"text":127408},{"id":127421,"depth":202,"text":127422},{"id":127474,"depth":202,"text":127475},{"id":127515,"depth":202,"text":127516},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127025,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127581,"title":127582,"body":127583,"description":23760,"extension":469,"meta":128232,"navigation":205,"path":128233,"seo":128234,"stem":128235,"__hash__":128236},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127584,"toc":128213},[127585,127588,127592,127596,127656,127660,127670,127673,127676,127680,127705,127709,127712,127715,127718,127721,127724,127728,127731,127734,127776,127779,127805,127811,127814,127818,127822,127828,127831,127834,127837,127840,127843,127846,127891,127895,127898,127901,127905,127909,127938,127941,127946,127949,127952,127955,127958,127962,127966,127969,127971,127974,127978,127981,127985,127988,127991,127994,127998,128002,128008,128018,128021,128024,128027,128030,128033,128156,128164,128172,128210],[14,127586,127582],{"id":127587},"_7-css引入方式与选择器进阶",[486,127589,127591],{"id":127590},"_71-css引入方式","7.1 css引入方式",[513,127593,127595],{"id":127594},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[41,127597,127601],{"className":127598,"code":127599,"language":127600,"meta":46,"style":46},"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",[48,127602,127603,127611,127618,127630,127643,127648],{"__ignoreMap":46},[51,127604,127605,127607,127609],{"class":53,"line":54},[51,127606,1452],{"class":65},[51,127608,464],{"class":51672},[51,127610,51679],{"class":65},[51,127612,127613,127616],{"class":53,"line":185},[51,127614,127615],{"class":51672},"  h1",[51,127617,15956],{"class":65},[51,127619,127620,127623,127625,127628],{"class":53,"line":202},[51,127621,127622],{"class":278},"    color",[51,127624,51809],{"class":65},[51,127626,127627],{"class":278},"blue",[51,127629,1703],{"class":65},[51,127631,127632,127635,127637,127639,127641],{"class":53,"line":209},[51,127633,127634],{"class":278},"    font-size",[51,127636,51809],{"class":65},[51,127638,1342],{"class":278},[51,127640,51864],{"class":69},[51,127642,1703],{"class":65},[51,127644,127645],{"class":53,"line":223},[51,127646,127647],{"class":65},"  }\n",[51,127649,127650,127652,127654],{"class":53,"line":237},[51,127651,52157],{"class":65},[51,127653,464],{"class":51672},[51,127655,51679],{"class":65},[10,127657,127658,26855],{},[691,127659,126939],{},[10,127661,77598,127662,127665,127666,127669],{},[48,127663,127664],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[48,127667,127668],{},"\u003Chead>","标签中",[10,127671,127672],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[10,127674,127675],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[513,127677,127679],{"id":127678},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[41,127681,127683],{"className":127598,"code":127682,"language":127600,"meta":46,"style":46},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[48,127684,127685],{"__ignoreMap":46},[51,127686,127687,127689,127691,127693,127695,127698,127701,127703],{"class":53,"line":54},[51,127688,1452],{"class":65},[51,127690,10],{"class":51672},[51,127692,62998],{"class":57},[51,127694,70],{"class":65},[51,127696,127697],{"class":61},"\"color: red; font-size: 16px;\"",[51,127699,127700],{"class":65},">这是一个段落\u003C\u002F",[51,127702,10],{"class":51672},[51,127704,51679],{"class":65},[10,127706,127707,26855],{},[691,127708,126939],{},[10,127710,127711],{},"①style其实就是标签的属性",[10,127713,127714],{},"②在双引号中间，写法要符合css规范",[10,127716,127717],{},"③可以控制当前的标签设置样式",[10,127719,127720],{},"④书写繁琐，简单时才用",[10,127722,127723],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[513,127725,127727],{"id":127726},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[10,127729,127730],{},"使用最多，单独建一个css文件，然后html引用",[10,127732,127733],{},"①css文件部分： style.css",[41,127735,127737],{"className":126851,"code":127736,"language":126853,"meta":46,"style":46},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[48,127738,127739,127744,127750,127760,127772],{"__ignoreMap":46},[51,127740,127741],{"class":53,"line":54},[51,127742,127743],{"class":601},"\u002F* style.css *\u002F\n",[51,127745,127746,127748],{"class":53,"line":185},[51,127747,14],{"class":51672},[51,127749,15956],{"class":65},[51,127751,127752,127754,127756,127758],{"class":53,"line":202},[51,127753,71277],{"class":278},[51,127755,51809],{"class":65},[51,127757,127627],{"class":278},[51,127759,1703],{"class":65},[51,127761,127762,127764,127766,127768,127770],{"class":53,"line":209},[51,127763,70998],{"class":278},[51,127765,51809],{"class":65},[51,127767,1342],{"class":278},[51,127769,51864],{"class":69},[51,127771,1703],{"class":65},[51,127773,127774],{"class":53,"line":223},[51,127775,1974],{"class":65},[10,127777,127778],{},"②html部分",[41,127780,127782],{"className":127598,"code":127781,"language":127600,"meta":46,"style":46},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[48,127783,127784],{"__ignoreMap":46},[51,127785,127786,127788,127790,127792,127794,127796,127798,127800,127803],{"class":53,"line":54},[51,127787,1452],{"class":65},[51,127789,69377],{"class":51672},[51,127791,69380],{"class":57},[51,127793,70],{"class":65},[51,127795,69385],{"class":61},[51,127797,61429],{"class":57},[51,127799,70],{"class":65},[51,127801,127802],{"class":61},"\"style.css\"",[51,127804,51679],{"class":65},[10,127806,127807,127810],{},[48,127808,127809],{},"\u003Chr>","水平线标签（但是不常用！）",[10,127812,127813],{},"ctrl+0回到页面原来大小",[486,127815,127817],{"id":127816},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[513,127819,127821],{"id":127820},"_721-快速生成html","7.2.1 快速生成html",[10,127823,127824,127825],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[48,127826,127827],{},"\u003Cdiv>``\u003C\u002Fdiv>",[10,127829,127830],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[10,127832,127833],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[10,127835,127836],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[10,127838,127839],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[10,127841,127842],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[10,127844,127845],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[41,127847,127849],{"className":127598,"code":127848,"language":127600,"meta":46,"style":46},"\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",[48,127850,127851,127856,127861,127866,127871,127876,127881,127886],{"__ignoreMap":46},[51,127852,127853],{"class":53,"line":54},[51,127854,127855],{"class":601},"\u003C!-- Emmet 语法示例 -->\n",[51,127857,127858],{"class":53,"line":185},[51,127859,127860],{"class":601},"\u003C!-- div*3        → 生成3个div -->\n",[51,127862,127863],{"class":53,"line":202},[51,127864,127865],{"class":601},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[51,127867,127868],{"class":53,"line":209},[51,127869,127870],{"class":601},"\u003C!-- div+p        → 兄弟div和p -->\n",[51,127872,127873],{"class":53,"line":223},[51,127874,127875],{"class":601},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[51,127877,127878],{"class":53,"line":237},[51,127879,127880],{"class":601},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[51,127882,127883],{"class":53,"line":242},[51,127884,127885],{"class":601},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[51,127887,127888],{"class":53,"line":257},[51,127889,127890],{"class":601},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[513,127892,127894],{"id":127893},"_722-快速生成css","7.2.2 快速生成css",[10,127896,127897],{},"简写开头",[10,127899,127900],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[486,127902,127904],{"id":127903},"_73-css复合选择器","7.3 css复合选择器",[513,127906,127908],{"id":127907},"_731-后代选择器","7.3.1 后代选择器",[41,127910,127912],{"className":126851,"code":127911,"language":126853,"meta":46,"style":46},".parent .child {\n  color: blue;\n}\n",[48,127913,127914,127924,127934],{"__ignoreMap":46},[51,127915,127916,127919,127922],{"class":53,"line":54},[51,127917,127918],{"class":57},".parent",[51,127920,127921],{"class":57}," .child",[51,127923,15956],{"class":65},[51,127925,127926,127928,127930,127932],{"class":53,"line":185},[51,127927,71277],{"class":278},[51,127929,51809],{"class":65},[51,127931,127627],{"class":278},[51,127933,1703],{"class":65},[51,127935,127936],{"class":53,"line":202},[51,127937,1974],{"class":65},[10,127939,127940],{},"元素1 元素2 {样式声明}",[10,127942,127943],{},[691,127944,127945],{},"注意点:",[10,127947,127948],{},"①元素1和元素2中间用空格隔开",[10,127950,127951],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[10,127953,127954],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[10,127956,127957],{},"④元素1和元素2可以是任意基础选择器",[513,127959,127961],{"id":127960},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[10,127963,127964],{},[691,127965,127945],{},[10,127967,127968],{},"①元素1和元素2中间用大于号隔开",[10,127970,127951],{},[10,127972,127973],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[513,127975,127977],{"id":127976},"_733-并集选择器","7.3.3 并集选择器",[10,127979,127980],{},"元素1，元素2 {样式声明}",[10,127982,127983],{},[691,127984,127945],{},[10,127986,127987],{},"①元素1和元素2中间用逗号隔开",[10,127989,127990],{},"②逗号可以理解为和的意思",[10,127992,127993],{},"③并集选择器通常用于集体声明",[513,127995,127997],{"id":127996},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[10,127999,128000],{},[691,128001,127945],{},[10,128003,128004,128005,128007],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69377,128006],{},"－:visited－:hover－:active。",[10,128009,128010,128011,128014,128015,26122],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128012,128013],"hover",{}," 、 ",[128016,128017],"first-child",{},[10,128019,128020],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[10,128022,128023],{},"link对没访问的进行设置",[10,128025,128026],{},"vistied对已访问的进行改变",[10,128028,128029],{},"hover鼠标经过就会变",[10,128031,128032],{},"active常按(点)就会变",[41,128034,128036],{"className":126851,"code":128035,"language":126853,"meta":46,"style":46},"\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",[48,128037,128038,128043,128052,128062,128072,128076,128085,128096,128100,128108,128118,128128,128132,128141,128152],{"__ignoreMap":46},[51,128039,128040],{"class":53,"line":54},[51,128041,128042],{"class":601},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[51,128044,128045,128047,128050],{"class":53,"line":185},[51,128046,780],{"class":51672},[51,128048,128049],{"class":57},":link",[51,128051,15956],{"class":65},[51,128053,128054,128056,128058,128060],{"class":53,"line":202},[51,128055,71277],{"class":278},[51,128057,51809],{"class":65},[51,128059,62741],{"class":278},[51,128061,1703],{"class":65},[51,128063,128064,128066,128068,128070],{"class":53,"line":209},[51,128065,70874],{"class":278},[51,128067,51809],{"class":65},[51,128069,55109],{"class":278},[51,128071,1703],{"class":65},[51,128073,128074],{"class":53,"line":223},[51,128075,1974],{"class":65},[51,128077,128078,128080,128083],{"class":53,"line":237},[51,128079,780],{"class":51672},[51,128081,128082],{"class":57},":visited",[51,128084,15956],{"class":65},[51,128086,128087,128089,128091,128094],{"class":53,"line":242},[51,128088,71277],{"class":278},[51,128090,51809],{"class":65},[51,128092,128093],{"class":278},"purple",[51,128095,1703],{"class":65},[51,128097,128098],{"class":53,"line":257},[51,128099,1974],{"class":65},[51,128101,128102,128104,128106],{"class":53,"line":262},[51,128103,780],{"class":51672},[51,128105,61312],{"class":57},[51,128107,15956],{"class":65},[51,128109,128110,128112,128114,128116],{"class":53,"line":285},[51,128111,71277],{"class":278},[51,128113,51809],{"class":65},[51,128115,55261],{"class":278},[51,128117,1703],{"class":65},[51,128119,128120,128122,128124,128126],{"class":53,"line":296},[51,128121,70874],{"class":278},[51,128123,51809],{"class":65},[51,128125,127465],{"class":278},[51,128127,1703],{"class":65},[51,128129,128130],{"class":53,"line":307},[51,128131,1974],{"class":65},[51,128133,128134,128136,128139],{"class":53,"line":324},[51,128135,780],{"class":51672},[51,128137,128138],{"class":57},":active",[51,128140,15956],{"class":65},[51,128142,128143,128145,128147,128150],{"class":53,"line":329},[51,128144,71277],{"class":278},[51,128146,51809],{"class":65},[51,128148,128149],{"class":278},"green",[51,128151,1703],{"class":65},[51,128153,128154],{"class":53,"line":334},[51,128155,1974],{"class":65},[513,128157,128159,128160,128163],{"id":128158},"_735-伪类选择器","7.3.5 ",[128161,128162],"focus",{},"伪类选择器",[10,128165,128166,128168,128169,128171],{},[128161,128167],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[48,128170,126912],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[41,128173,128175],{"className":126851,"code":128174,"language":126853,"meta":46,"style":46},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[48,128176,128177,128185,128196,128206],{"__ignoreMap":46},[51,128178,128179,128181,128183],{"class":53,"line":54},[51,128180,54193],{"class":51672},[51,128182,62272],{"class":57},[51,128184,15956],{"class":65},[51,128186,128187,128190,128192,128194],{"class":53,"line":185},[51,128188,128189],{"class":278},"  border-color",[51,128191,51809],{"class":65},[51,128193,55261],{"class":278},[51,128195,1703],{"class":65},[51,128197,128198,128200,128202,128204],{"class":53,"line":202},[51,128199,71170],{"class":278},[51,128201,51809],{"class":65},[51,128203,55109],{"class":278},[51,128205,1703],{"class":65},[51,128207,128208],{"class":53,"line":209},[51,128209,1974],{"class":65},[464,128211,128212],{},"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":46,"searchDepth":185,"depth":185,"links":128214},[128215,128220,128224],{"id":127590,"depth":185,"text":127591,"children":128216},[128217,128218,128219],{"id":127594,"depth":202,"text":127595},{"id":127678,"depth":202,"text":127679},{"id":127726,"depth":202,"text":127727},{"id":127816,"depth":185,"text":127817,"children":128221},[128222,128223],{"id":127820,"depth":202,"text":127821},{"id":127893,"depth":202,"text":127894},{"id":127903,"depth":185,"text":127904,"children":128225},[128226,128227,128228,128229,128230],{"id":127907,"depth":202,"text":127908},{"id":127960,"depth":202,"text":127961},{"id":127976,"depth":202,"text":127977},{"id":127996,"depth":202,"text":127997},{"id":128158,"depth":202,"text":128231},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127582,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128238,"title":128239,"body":128240,"description":23760,"extension":469,"meta":130163,"navigation":205,"path":130164,"seo":130165,"stem":130166,"__hash__":130167},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128241,"toc":130137},[128242,128245,128249,128258,128262,128288,128293,128296,128299,128302,128305,128309,128312,128322,128330,128334,128369,128374,128377,128380,128383,128386,128390,128393,128402,128406,128419,128424,128427,128430,128433,128437,128440,128444,128447,128502,128505,128536,128539,128593,128597,128600,128766,128889,128892,128895,128898,128901,128905,128908,128912,128915,128918,128922,128925,128956,128983,129011,129014,129018,129044,129087,129091,129185,129188,129215,129218,129221,129224,129227,129230,129233,129236,129239,129242,129246,129303,129330,129334,129382,129386,129427,129429,129432,129435,129438,129441,129445,129537,129540,129543,129546,129550,129673,129874,129878,129882,129885,129888,129891,129895,129898,129901,129926,129929,129932,129935,129938,129941,129945,129953,130015,130018,130076,130079,130082,130085,130088,130091,130094,130097,130134],[14,128243,128239],{"id":128244},"_8-css显示模式与背景特性",[486,128246,128248],{"id":128247},"_81-css元素显示模式","8.1 css元素显示模式",[10,128250,128251,128252,128254,128255,128257],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[48,128253,126462],{},"自己占一行，比如一行可以放多个",[48,128256,126465],{},"，HTML 元素一般分为块元素和行内元素两种类型",[513,128259,128261],{"id":128260},"_811-块元素","8.1.1 块元素",[10,128263,128264,128265,128267,128268,754,128271,754,128273,754,128275,754,128278,754,128281,128284,128285,128287],{},"常见的块元素有",[48,128266,126366],{},"~",[48,128269,128270],{},"\u003Ch6>",[48,128272,126392],{},[48,128274,126462],{},[48,128276,128277],{},"\u003Cul>",[48,128279,128280],{},"\u003Col>",[48,128282,128283],{},"\u003Cli>","等，其中 ",[48,128286,126462],{}," 标签是最典型的块元素",[10,128289,128290],{},[691,128291,128292],{},"块级元素的特点：",[10,128294,128295],{},"① 比较霸道，自己独占一行。",[10,128297,128298],{},"② 高度，宽度、外边距以及内边距都可以控制。",[10,128300,128301],{},"③ 宽度默认是容器（父级宽度）的100%。",[10,128303,128304],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[10,128306,128307],{},[691,128308,574],{},[10,128310,128311],{},"①文字类的元素内不能使用块级元素",[10,128313,77621,128314,128316,128317,128319,128320],{},[48,128315,126392],{}," 标签主要用于存放文字，因此 ",[48,128318,126392],{}," 里面不能放块级元素，特别是不能放",[48,128321,126462],{},[10,128323,128324,128325,128267,128327,128329],{},"⑥同理， ",[48,128326,126366],{},[48,128328,128270],{},"等都是文字类块级标签，里面也不能放其他块级元素",[513,128331,128333],{"id":128332},"_812-行内元素","8.1.2 行内元素",[10,128335,128336,128337,754,128339,754,128342,754,128345,754,128348,754,128351,754,128354,754,128357,754,128360,754,128363,128365,128366,128368],{},"常见的行内元素有 ",[48,128338,126624],{},[48,128340,128341],{},"\u003Cstrong>",[48,128343,128344],{},"\u003Cb>",[48,128346,128347],{},"\u003Cem>",[48,128349,128350],{},"\u003Ci>",[48,128352,128353],{},"\u003Cdel>",[48,128355,128356],{},"\u003Cs>",[48,128358,128359],{},"\u003Cins>",[48,128361,128362],{},"\u003Cu>",[48,128364,126465],{}," 等，其中 ",[48,128367,126465],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[10,128370,128371],{},[691,128372,128373],{},"特点：",[10,128375,128376],{},"① 相邻行内元素在一行上，一行可以显示多个。",[10,128378,128379],{},"② 高、宽直接设置是无效的。",[10,128381,128382],{},"③ 默认宽度就是它本身内容的宽度。",[10,128384,128385],{},"④ 行内元素只能容纳文本或其他行内元素。",[10,128387,128388],{},[691,128389,574],{},[10,128391,128392],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[10,128394,128395,128396,128398,128399,128401],{},"②特殊情况链接 ",[48,128397,126624],{}," 里面可以放块级元素，但是给 ",[48,128400,126624],{}," 转换一下块级模式最安全",[513,128403,128405],{"id":128404},"_813-行内块元素","8.1.3 行内块元素",[10,128407,128408,128409,754,128412,754,128415,128418],{},"在行内元素中有几个特殊的标签 —— ",[48,128410,128411],{},"\u003Cimg \u002F>",[48,128413,128414],{},"\u003Cinput \u002F>",[48,128416,128417],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[10,128420,128421],{},[691,128422,128423],{},"行内块元素的特点：",[10,128425,128426],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[10,128428,128429],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[10,128431,128432],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[513,128434,128436],{"id":128435},"_814-总结","8.1.4 总结",[460,128438],{"style":126707,"src":128439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[513,128441,128443],{"id":128442},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[10,128445,128446],{},"①转换为块元素：display:block;",[41,128448,128450],{"className":126851,"code":128449,"language":126853,"meta":46,"style":46},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[48,128451,128452,128457,128463,128474,128486,128498],{"__ignoreMap":46},[51,128453,128454],{"class":53,"line":54},[51,128455,128456],{"class":601},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[51,128458,128459,128461],{"class":53,"line":185},[51,128460,780],{"class":51672},[51,128462,15956],{"class":65},[51,128464,128465,128468,128470,128472],{"class":53,"line":202},[51,128466,128467],{"class":278},"  display",[51,128469,51809],{"class":65},[51,128471,61241],{"class":278},[51,128473,1703],{"class":65},[51,128475,128476,128478,128480,128482,128484],{"class":53,"line":209},[51,128477,70940],{"class":278},[51,128479,51809],{"class":65},[51,128481,853],{"class":278},[51,128483,51864],{"class":69},[51,128485,1703],{"class":65},[51,128487,128488,128490,128492,128494,128496],{"class":53,"line":223},[51,128489,71160],{"class":278},[51,128491,51809],{"class":65},[51,128493,943],{"class":278},[51,128495,51864],{"class":69},[51,128497,1703],{"class":65},[51,128499,128500],{"class":53,"line":237},[51,128501,1974],{"class":65},[10,128503,128504],{},"②转换为行内元素：display:inline;",[41,128506,128508],{"className":126851,"code":128507,"language":126853,"meta":46,"style":46},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[48,128509,128510,128515,128521,128532],{"__ignoreMap":46},[51,128511,128512],{"class":53,"line":54},[51,128513,128514],{"class":601},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[51,128516,128517,128519],{"class":53,"line":185},[51,128518,51983],{"class":51672},[51,128520,15956],{"class":65},[51,128522,128523,128525,128527,128530],{"class":53,"line":202},[51,128524,128467],{"class":278},[51,128526,51809],{"class":65},[51,128528,128529],{"class":278},"inline",[51,128531,1703],{"class":65},[51,128533,128534],{"class":53,"line":209},[51,128535,1974],{"class":65},[10,128537,128538],{},"③转换为行内块：display:inline-block;",[41,128540,128542],{"className":126851,"code":128541,"language":126853,"meta":46,"style":46},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[48,128543,128544,128549,128555,128565,128577,128589],{"__ignoreMap":46},[51,128545,128546],{"class":53,"line":54},[51,128547,128548],{"class":601},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[51,128550,128551,128553],{"class":53,"line":185},[51,128552,51],{"class":51672},[51,128554,15956],{"class":65},[51,128556,128557,128559,128561,128563],{"class":53,"line":202},[51,128558,128467],{"class":278},[51,128560,51809],{"class":65},[51,128562,72755],{"class":278},[51,128564,1703],{"class":65},[51,128566,128567,128569,128571,128573,128575],{"class":53,"line":209},[51,128568,70940],{"class":278},[51,128570,51809],{"class":65},[51,128572,1154],{"class":278},[51,128574,51864],{"class":69},[51,128576,1703],{"class":65},[51,128578,128579,128581,128583,128585,128587],{"class":53,"line":223},[51,128580,71160],{"class":278},[51,128582,51809],{"class":65},[51,128584,1493],{"class":278},[51,128586,51864],{"class":69},[51,128588,1703],{"class":65},[51,128590,128591],{"class":53,"line":237},[51,128592,1974],{"class":65},[513,128594,128596],{"id":128595},"_816-小米侧边栏","8.1.6 小米侧边栏",[460,128598],{"style":126707,"src":128599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[41,128601,128603],{"className":127598,"code":128602,"language":127600,"meta":46,"style":46},"\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",[48,128604,128605,128610,128625,128644,128663,128682,128701,128720,128739,128758],{"__ignoreMap":46},[51,128606,128607],{"class":53,"line":54},[51,128608,128609],{"class":601},"\u003C!-- 小米侧边栏案例 -->\n",[51,128611,128612,128614,128616,128618,128620,128623],{"class":53,"line":185},[51,128613,1452],{"class":65},[51,128615,51983],{"class":51672},[51,128617,53858],{"class":57},[51,128619,70],{"class":65},[51,128621,128622],{"class":61},"\"sidebar\"",[51,128624,51679],{"class":65},[51,128626,128627,128629,128631,128633,128635,128637,128640,128642],{"class":53,"line":202},[51,128628,52516],{"class":65},[51,128630,780],{"class":51672},[51,128632,61429],{"class":57},[51,128634,70],{"class":65},[51,128636,61434],{"class":61},[51,128638,128639],{"class":65},">手机 电话卡\u003C\u002F",[51,128641,780],{"class":51672},[51,128643,51679],{"class":65},[51,128645,128646,128648,128650,128652,128654,128656,128659,128661],{"class":53,"line":209},[51,128647,52516],{"class":65},[51,128649,780],{"class":51672},[51,128651,61429],{"class":57},[51,128653,70],{"class":65},[51,128655,61434],{"class":61},[51,128657,128658],{"class":65},">电视 盒子\u003C\u002F",[51,128660,780],{"class":51672},[51,128662,51679],{"class":65},[51,128664,128665,128667,128669,128671,128673,128675,128678,128680],{"class":53,"line":223},[51,128666,52516],{"class":65},[51,128668,780],{"class":51672},[51,128670,61429],{"class":57},[51,128672,70],{"class":65},[51,128674,61434],{"class":61},[51,128676,128677],{"class":65},">笔记本 平板\u003C\u002F",[51,128679,780],{"class":51672},[51,128681,51679],{"class":65},[51,128683,128684,128686,128688,128690,128692,128694,128697,128699],{"class":53,"line":237},[51,128685,52516],{"class":65},[51,128687,780],{"class":51672},[51,128689,61429],{"class":57},[51,128691,70],{"class":65},[51,128693,61434],{"class":61},[51,128695,128696],{"class":65},">出行 穿戴\u003C\u002F",[51,128698,780],{"class":51672},[51,128700,51679],{"class":65},[51,128702,128703,128705,128707,128709,128711,128713,128716,128718],{"class":53,"line":242},[51,128704,52516],{"class":65},[51,128706,780],{"class":51672},[51,128708,61429],{"class":57},[51,128710,70],{"class":65},[51,128712,61434],{"class":61},[51,128714,128715],{"class":65},">智能 路由器\u003C\u002F",[51,128717,780],{"class":51672},[51,128719,51679],{"class":65},[51,128721,128722,128724,128726,128728,128730,128732,128735,128737],{"class":53,"line":257},[51,128723,52516],{"class":65},[51,128725,780],{"class":51672},[51,128727,61429],{"class":57},[51,128729,70],{"class":65},[51,128731,61434],{"class":61},[51,128733,128734],{"class":65},">健康 儿童\u003C\u002F",[51,128736,780],{"class":51672},[51,128738,51679],{"class":65},[51,128740,128741,128743,128745,128747,128749,128751,128754,128756],{"class":53,"line":262},[51,128742,52516],{"class":65},[51,128744,780],{"class":51672},[51,128746,61429],{"class":57},[51,128748,70],{"class":65},[51,128750,61434],{"class":61},[51,128752,128753],{"class":65},">耳机 音响\u003C\u002F",[51,128755,780],{"class":51672},[51,128757,51679],{"class":65},[51,128759,128760,128762,128764],{"class":53,"line":285},[51,128761,52157],{"class":65},[51,128763,51983],{"class":51672},[51,128765,51679],{"class":65},[41,128767,128769],{"className":126851,"code":128768,"language":126853,"meta":46,"style":46},".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",[48,128770,128771,128780,128790,128803,128815,128827,128839,128849,128860,128864,128874,128885],{"__ignoreMap":46},[51,128772,128773,128776,128778],{"class":53,"line":54},[51,128774,128775],{"class":57},".sidebar",[51,128777,1808],{"class":51672},[51,128779,15956],{"class":65},[51,128781,128782,128784,128786,128788],{"class":53,"line":185},[51,128783,128467],{"class":278},[51,128785,51809],{"class":65},[51,128787,61241],{"class":278},[51,128789,1703],{"class":65},[51,128791,128792,128794,128796,128799,128801],{"class":53,"line":202},[51,128793,70940],{"class":278},[51,128795,51809],{"class":65},[51,128797,128798],{"class":278},"234",[51,128800,51864],{"class":69},[51,128802,1703],{"class":65},[51,128804,128805,128807,128809,128811,128813],{"class":53,"line":209},[51,128806,71160],{"class":278},[51,128808,51809],{"class":65},[51,128810,994],{"class":278},[51,128812,51864],{"class":69},[51,128814,1703],{"class":65},[51,128816,128817,128819,128821,128823,128825],{"class":53,"line":223},[51,128818,127535],{"class":278},[51,128820,51809],{"class":65},[51,128822,994],{"class":278},[51,128824,51864],{"class":69},[51,128826,1703],{"class":65},[51,128828,128829,128831,128833,128835,128837],{"class":53,"line":237},[51,128830,71195],{"class":278},[51,128832,51809],{"class":65},[51,128834,1493],{"class":278},[51,128836,51864],{"class":69},[51,128838,1703],{"class":65},[51,128840,128841,128843,128845,128847],{"class":53,"line":242},[51,128842,71277],{"class":278},[51,128844,51809],{"class":65},[51,128846,61214],{"class":278},[51,128848,1703],{"class":65},[51,128850,128851,128853,128855,128858],{"class":53,"line":257},[51,128852,71250],{"class":278},[51,128854,51809],{"class":65},[51,128856,128857],{"class":278},"#55585a",[51,128859,1703],{"class":65},[51,128861,128862],{"class":53,"line":262},[51,128863,1974],{"class":65},[51,128865,128866,128868,128870,128872],{"class":53,"line":285},[51,128867,128775],{"class":57},[51,128869,1808],{"class":51672},[51,128871,61312],{"class":57},[51,128873,15956],{"class":65},[51,128875,128876,128878,128880,128883],{"class":53,"line":296},[51,128877,71250],{"class":278},[51,128879,51809],{"class":65},[51,128881,128882],{"class":278},"#ff6700",[51,128884,1703],{"class":65},[51,128886,128887],{"class":53,"line":307},[51,128888,1974],{"class":65},[460,128890],{"style":126707,"src":128891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[10,128893,128894],{},"行高=盒子高度：实现文字的垂直居中",[10,128896,128897],{},"原理讲解：",[460,128899],{"style":126707,"src":128900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[486,128902,128904],{"id":128903},"_82-css背景","8.2 css背景",[10,128906,128907],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[513,128909,128911],{"id":128910},"_821-背景颜色","8.2.1 背景颜色",[10,128913,128914],{},"background-color:颜色值;",[10,128916,128917],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[513,128919,128921],{"id":128920},"_822-背景图片","8.2.2 背景图片",[10,128923,128924],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[41,128926,128928],{"className":126851,"code":128927,"language":126853,"meta":46,"style":46},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[48,128929,128930,128936,128952],{"__ignoreMap":46},[51,128931,128932,128934],{"class":53,"line":54},[51,128933,51983],{"class":51672},[51,128935,15956],{"class":65},[51,128937,128938,128941,128943,128945,128947,128950],{"class":53,"line":185},[51,128939,128940],{"class":278},"  background-image",[51,128942,51809],{"class":65},[51,128944,62098],{"class":278},[51,128946,546],{"class":65},[51,128948,128949],{"class":248},"images\u002Fbg.png",[51,128951,3107],{"class":65},[51,128953,128954],{"class":53,"line":202},[51,128955,1974],{"class":65},[679,128957,128958,128967],{},[682,128959,128960],{},[685,128961,128962,128965],{},[688,128963,128964],{"align":24119},"参数值",[688,128966,103068],{"align":24119},[726,128968,128969,128976],{},[685,128970,128971,128973],{},[731,128972,55109],{"align":24119},[731,128974,128975],{"align":24119},"无背景图（默认的）",[685,128977,128978,128980],{},[731,128979,62098],{"align":24119},[731,128981,128982],{"align":24119},"使用绝对或相对地址指定背景图像",[41,128984,128985],{"className":126851,"code":128927,"language":126853,"meta":46,"style":46},[48,128986,128987,128993,129007],{"__ignoreMap":46},[51,128988,128989,128991],{"class":53,"line":54},[51,128990,51983],{"class":51672},[51,128992,15956],{"class":65},[51,128994,128995,128997,128999,129001,129003,129005],{"class":53,"line":185},[51,128996,128940],{"class":278},[51,128998,51809],{"class":65},[51,129000,62098],{"class":278},[51,129002,546],{"class":65},[51,129004,128949],{"class":248},[51,129006,3107],{"class":65},[51,129008,129009],{"class":53,"line":202},[51,129010,1974],{"class":65},[10,129012,129013],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[513,129015,129017],{"id":129016},"_823-背景平铺","8.2.3 背景平铺",[41,129019,129021],{"className":126851,"code":129020,"language":126853,"meta":46,"style":46},"div {\n  background-repeat: no-repeat;\n}\n",[48,129022,129023,129029,129040],{"__ignoreMap":46},[51,129024,129025,129027],{"class":53,"line":54},[51,129026,51983],{"class":51672},[51,129028,15956],{"class":65},[51,129030,129031,129034,129036,129038],{"class":53,"line":185},[51,129032,129033],{"class":278},"  background-repeat",[51,129035,51809],{"class":65},[51,129037,62108],{"class":278},[51,129039,1703],{"class":65},[51,129041,129042],{"class":53,"line":202},[51,129043,1974],{"class":65},[679,129045,129046,129054],{},[682,129047,129048],{},[685,129049,129050,129052],{},[688,129051,128964],{"align":24119},[688,129053,103068],{"align":24119},[726,129055,129056,129064,129071,129079],{},[685,129057,129058,129061],{},[731,129059,129060],{"align":24119},"repeat",[731,129062,129063],{"align":24119},"背景图像在纵向和横向上平铺（默认的）",[685,129065,129066,129068],{},[731,129067,62108],{"align":24119},[731,129069,129070],{"align":24119},"背景图像不平铺",[685,129072,129073,129076],{},[731,129074,129075],{"align":24119},"repeat-x",[731,129077,129078],{"align":24119},"背景图像在横向上平铺",[685,129080,129081,129084],{},[731,129082,129083],{"align":24119},"repeat-y",[731,129085,129086],{"align":24119},"背景图像在纵向平铺",[513,129088,129090],{"id":129089},"_824-背景图片位置","8.2.4 背景图片位置",[41,129092,129094],{"className":126851,"code":129093,"language":126853,"meta":46,"style":46},"\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",[48,129095,129096,129101,129107,129121,129125,129130,129136,129152,129156,129161,129167,129181],{"__ignoreMap":46},[51,129097,129098],{"class":53,"line":54},[51,129099,129100],{"class":601},"\u002F* 方位名词 *\u002F\n",[51,129102,129103,129105],{"class":53,"line":185},[51,129104,51983],{"class":51672},[51,129106,15956],{"class":65},[51,129108,129109,129112,129114,129116,129119],{"class":53,"line":202},[51,129110,129111],{"class":278},"  background-position",[51,129113,51809],{"class":65},[51,129115,51964],{"class":278},[51,129117,129118],{"class":278}," top",[51,129120,1703],{"class":65},[51,129122,129123],{"class":53,"line":209},[51,129124,1974],{"class":65},[51,129126,129127],{"class":53,"line":223},[51,129128,129129],{"class":601},"\u002F* 精确单位 *\u002F\n",[51,129131,129132,129134],{"class":53,"line":237},[51,129133,51983],{"class":51672},[51,129135,15956],{"class":65},[51,129137,129138,129140,129142,129144,129146,129148,129150],{"class":53,"line":242},[51,129139,129111],{"class":278},[51,129141,51809],{"class":65},[51,129143,1242],{"class":278},[51,129145,51864],{"class":69},[51,129147,57876],{"class":278},[51,129149,51864],{"class":69},[51,129151,1703],{"class":65},[51,129153,129154],{"class":53,"line":257},[51,129155,1974],{"class":65},[51,129157,129158],{"class":53,"line":262},[51,129159,129160],{"class":601},"\u002F* 混合单位 *\u002F\n",[51,129162,129163,129165],{"class":53,"line":285},[51,129164,51983],{"class":51672},[51,129166,15956],{"class":65},[51,129168,129169,129171,129173,129175,129177,129179],{"class":53,"line":296},[51,129170,129111],{"class":278},[51,129172,51809],{"class":65},[51,129174,1242],{"class":278},[51,129176,51864],{"class":69},[51,129178,17527],{"class":278},[51,129180,1703],{"class":65},[51,129182,129183],{"class":53,"line":307},[51,129184,1974],{"class":65},[10,129186,129187],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[679,129189,129190,129198],{},[682,129191,129192],{},[685,129193,129194,129196],{},[688,129195,128964],{"align":24119},[688,129197,26251],{"align":24119},[726,129199,129200,129207],{},[685,129201,129202,129204],{},[731,129203,52340],{"align":24119},[731,129205,129206],{"align":24119},"百分数|由浮点数和单位标识符组成的长度值",[685,129208,129209,129212],{},[731,129210,129211],{"align":24119},"position",[731,129213,129214],{"align":24119},"top|center|bottom|left|center|right 方位名词",[10,129216,129217],{},"其他说明：",[10,129219,129220],{},"①参数是方位名词",[10,129222,129223],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[10,129225,129226],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[10,129228,129229],{},"②参数是精确单位",[10,129231,129232],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[10,129234,129235],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[10,129237,129238],{},"③参数是混合单位",[10,129240,129241],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[513,129243,129245],{"id":129244},"_825-背景图片固定","8.2.5 背景图片固定",[41,129247,129249],{"className":126851,"code":129248,"language":126853,"meta":46,"style":46},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[48,129250,129251,129256,129262,129274,129278,129283,129289,129299],{"__ignoreMap":46},[51,129252,129253],{"class":53,"line":54},[51,129254,129255],{"class":601},"\u002F* 背景滚动（默认） *\u002F\n",[51,129257,129258,129260],{"class":53,"line":185},[51,129259,51983],{"class":51672},[51,129261,15956],{"class":65},[51,129263,129264,129267,129269,129272],{"class":53,"line":202},[51,129265,129266],{"class":278},"  background-attachment",[51,129268,51809],{"class":65},[51,129270,129271],{"class":278},"scroll",[51,129273,1703],{"class":65},[51,129275,129276],{"class":53,"line":209},[51,129277,1974],{"class":65},[51,129279,129280],{"class":53,"line":223},[51,129281,129282],{"class":601},"\u002F* 背景固定 *\u002F\n",[51,129284,129285,129287],{"class":53,"line":237},[51,129286,51983],{"class":51672},[51,129288,15956],{"class":65},[51,129290,129291,129293,129295,129297],{"class":53,"line":242},[51,129292,129266],{"class":278},[51,129294,51809],{"class":65},[51,129296,86605],{"class":278},[51,129298,1703],{"class":65},[51,129300,129301],{"class":53,"line":257},[51,129302,1974],{"class":65},[679,129304,129305,129314],{},[682,129306,129307],{},[685,129308,129309,129312],{},[688,129310,129311],{"align":24119},"参数",[688,129313,103068],{"align":24119},[726,129315,129316,129323],{},[685,129317,129318,129320],{},[731,129319,129271],{"align":24119},[731,129321,129322],{"align":24119},"背景图像是随对象内容滚动",[685,129324,129325,129327],{},[731,129326,86605],{"align":24119},[731,129328,129329],{"align":24119},"背景图像固定",[513,129331,129333],{"id":129332},"_826-背景样式合写","8.2.6 背景样式合写",[41,129335,129337],{"className":126851,"code":129336,"language":126853,"meta":46,"style":46},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[48,129338,129339,129344,129350,129378],{"__ignoreMap":46},[51,129340,129341],{"class":53,"line":54},[51,129342,129343],{"class":601},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[51,129345,129346,129348],{"class":53,"line":185},[51,129347,51983],{"class":51672},[51,129349,15956],{"class":65},[51,129351,129352,129354,129356,129358,129361,129363,129365,129367,129369,129372,129374,129376],{"class":53,"line":202},[51,129353,70983],{"class":278},[51,129355,51809],{"class":65},[51,129357,61214],{"class":278},[51,129359,129360],{"class":278}," url",[51,129362,546],{"class":65},[51,129364,128949],{"class":248},[51,129366,14098],{"class":65},[51,129368,62108],{"class":278},[51,129370,129371],{"class":278}," fixed",[51,129373,17527],{"class":278},[51,129375,129118],{"class":278},[51,129377,1703],{"class":65},[51,129379,129380],{"class":53,"line":209},[51,129381,1974],{"class":65},[513,129383,129385],{"id":129384},"_827-背景色半透明","8.2.7 背景色半透明",[41,129387,129389],{"className":126851,"code":129388,"language":126853,"meta":46,"style":46},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[48,129390,129391,129397,129423],{"__ignoreMap":46},[51,129392,129393,129395],{"class":53,"line":54},[51,129394,51983],{"class":51672},[51,129396,15956],{"class":65},[51,129398,129399,129401,129403,129405,129407,129409,129411,129413,129415,129417,129419,129421],{"class":53,"line":185},[51,129400,70983],{"class":278},[51,129402,51809],{"class":65},[51,129404,55482],{"class":278},[51,129406,546],{"class":65},[51,129408,733],{"class":278},[51,129410,12819],{"class":65},[51,129412,733],{"class":278},[51,129414,12819],{"class":65},[51,129416,733],{"class":278},[51,129418,12819],{"class":65},[51,129420,100893],{"class":278},[51,129422,3107],{"class":65},[51,129424,129425],{"class":53,"line":202},[51,129426,1974],{"class":65},[10,129428,99768],{},[10,129430,129431],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[10,129433,129434],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[10,129436,129437],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[10,129439,129440],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[513,129442,129444],{"id":129443},"_828-总结","8.2.8 总结",[679,129446,129447,129458],{},[682,129448,129449],{},[685,129450,129451,129454,129456],{},[688,129452,129453],{"align":24119},"属性",[688,129455,103068],{"align":24119},[688,129457,694],{"align":24119},[726,129459,129460,129471,129482,129493,129504,129515,129526],{},[685,129461,129462,129465,129468],{},[731,129463,129464],{"align":24119},"background-color",[731,129466,129467],{"align":24119},"背景颜色",[731,129469,129470],{"align":24119},"预定义的颜色值\u002F十六进制\u002FRGB代码",[685,129472,129473,129476,129479],{},[731,129474,129475],{"align":24119},"background-image",[731,129477,129478],{"align":24119},"背景图片",[731,129480,129481],{"align":24119},"url(图片路径)",[685,129483,129484,129487,129490],{},[731,129485,129486],{"align":24119},"background-repeat",[731,129488,129489],{"align":24119},"是否平铺",[731,129491,129492],{"align":24119},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[685,129494,129495,129498,129501],{},[731,129496,129497],{"align":24119},"background-position",[731,129499,129500],{"align":24119},"背景位置",[731,129502,129503],{"align":24119},"length\u002Fposition 分别是x和y坐标",[685,129505,129506,129509,129512],{},[731,129507,129508],{"align":24119},"background-attachment",[731,129510,129511],{"align":24119},"背景附着",[731,129513,129514],{"align":24119},"scroll(背景滚动) \u002Ffixed (背景固定)",[685,129516,129517,129520,129523],{},[731,129518,129519],{"align":24119},"背景简写",[731,129521,129522],{"align":24119},"书写更简单",[731,129524,129525],{"align":24119},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[685,129527,129528,129531,129534],{},[731,129529,129530],{"align":24119},"背景半透明",[731,129532,129533],{"align":24119},"背景颜色半透明",[731,129535,129536],{"align":24119},"background: rgba(0,0,0.3); 后面必须是4个值",[10,129538,129539],{},"颜色渐变：",[460,129541],{"style":126707,"src":129542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[460,129544],{"style":126707,"src":129545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[513,129547,129549],{"id":129548},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[41,129551,129553],{"className":127598,"code":129552,"language":127600,"meta":46,"style":46},"\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",[48,129554,129555,129570,129589,129608,129627,129646,129665],{"__ignoreMap":46},[51,129556,129557,129559,129561,129563,129565,129568],{"class":53,"line":54},[51,129558,1452],{"class":65},[51,129560,51983],{"class":51672},[51,129562,53858],{"class":57},[51,129564,70],{"class":65},[51,129566,129567],{"class":61},"\"nav\"",[51,129569,51679],{"class":65},[51,129571,129572,129574,129576,129578,129580,129582,129585,129587],{"class":53,"line":185},[51,129573,52516],{"class":65},[51,129575,780],{"class":51672},[51,129577,61429],{"class":57},[51,129579,70],{"class":65},[51,129581,61434],{"class":61},[51,129583,129584],{"class":65},">五彩导航1\u003C\u002F",[51,129586,780],{"class":51672},[51,129588,51679],{"class":65},[51,129590,129591,129593,129595,129597,129599,129601,129604,129606],{"class":53,"line":202},[51,129592,52516],{"class":65},[51,129594,780],{"class":51672},[51,129596,61429],{"class":57},[51,129598,70],{"class":65},[51,129600,61434],{"class":61},[51,129602,129603],{"class":65},">五彩导航2\u003C\u002F",[51,129605,780],{"class":51672},[51,129607,51679],{"class":65},[51,129609,129610,129612,129614,129616,129618,129620,129623,129625],{"class":53,"line":209},[51,129611,52516],{"class":65},[51,129613,780],{"class":51672},[51,129615,61429],{"class":57},[51,129617,70],{"class":65},[51,129619,61434],{"class":61},[51,129621,129622],{"class":65},">五彩导航3\u003C\u002F",[51,129624,780],{"class":51672},[51,129626,51679],{"class":65},[51,129628,129629,129631,129633,129635,129637,129639,129642,129644],{"class":53,"line":223},[51,129630,52516],{"class":65},[51,129632,780],{"class":51672},[51,129634,61429],{"class":57},[51,129636,70],{"class":65},[51,129638,61434],{"class":61},[51,129640,129641],{"class":65},">五彩导航4\u003C\u002F",[51,129643,780],{"class":51672},[51,129645,51679],{"class":65},[51,129647,129648,129650,129652,129654,129656,129658,129661,129663],{"class":53,"line":237},[51,129649,52516],{"class":65},[51,129651,780],{"class":51672},[51,129653,61429],{"class":57},[51,129655,70],{"class":65},[51,129657,61434],{"class":61},[51,129659,129660],{"class":65},">五彩导航5\u003C\u002F",[51,129662,780],{"class":51672},[51,129664,51679],{"class":65},[51,129666,129667,129669,129671],{"class":53,"line":242},[51,129668,52157],{"class":65},[51,129670,51983],{"class":51672},[51,129672,51679],{"class":65},[41,129674,129676],{"className":126851,"code":129675,"language":126853,"meta":46,"style":46},".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",[48,129677,129678,129687,129697,129709,129721,129731,129743,129753,129757,129782,129805,129828,129851],{"__ignoreMap":46},[51,129679,129680,129683,129685],{"class":53,"line":54},[51,129681,129682],{"class":57},".nav",[51,129684,1808],{"class":51672},[51,129686,15956],{"class":65},[51,129688,129689,129691,129693,129695],{"class":53,"line":185},[51,129690,128467],{"class":278},[51,129692,51809],{"class":65},[51,129694,72755],{"class":278},[51,129696,1703],{"class":65},[51,129698,129699,129701,129703,129705,129707],{"class":53,"line":202},[51,129700,70940],{"class":278},[51,129702,51809],{"class":65},[51,129704,1359],{"class":278},[51,129706,51864],{"class":69},[51,129708,1703],{"class":65},[51,129710,129711,129713,129715,129717,129719],{"class":53,"line":209},[51,129712,71160],{"class":278},[51,129714,51809],{"class":65},[51,129716,1398],{"class":278},[51,129718,51864],{"class":69},[51,129720,1703],{"class":65},[51,129722,129723,129725,129727,129729],{"class":53,"line":223},[51,129724,70898],{"class":278},[51,129726,51809],{"class":65},[51,129728,51964],{"class":278},[51,129730,1703],{"class":65},[51,129732,129733,129735,129737,129739,129741],{"class":53,"line":237},[51,129734,127535],{"class":278},[51,129736,51809],{"class":65},[51,129738,1398],{"class":278},[51,129740,51864],{"class":69},[51,129742,1703],{"class":65},[51,129744,129745,129747,129749,129751],{"class":53,"line":242},[51,129746,71277],{"class":278},[51,129748,51809],{"class":65},[51,129750,61214],{"class":278},[51,129752,1703],{"class":65},[51,129754,129755],{"class":53,"line":257},[51,129756,1974],{"class":65},[51,129758,129759,129761,129763,129766,129768,129770,129773,129775,129777,129779],{"class":53,"line":262},[51,129760,129682],{"class":57},[51,129762,1808],{"class":51672},[51,129764,129765],{"class":57},":nth-child",[51,129767,546],{"class":65},[51,129769,759],{"class":278},[51,129771,129772],{"class":65},") { ",[51,129774,129464],{"class":278},[51,129776,51809],{"class":65},[51,129778,128882],{"class":278},[51,129780,129781],{"class":65},"; }\n",[51,129783,129784,129786,129788,129790,129792,129794,129796,129798,129800,129803],{"class":53,"line":285},[51,129785,129682],{"class":57},[51,129787,1808],{"class":51672},[51,129789,129765],{"class":57},[51,129791,546],{"class":65},[51,129793,620],{"class":278},[51,129795,129772],{"class":65},[51,129797,129464],{"class":278},[51,129799,51809],{"class":65},[51,129801,129802],{"class":278},"#ff0000",[51,129804,129781],{"class":65},[51,129806,129807,129809,129811,129813,129815,129817,129819,129821,129823,129826],{"class":53,"line":296},[51,129808,129682],{"class":57},[51,129810,1808],{"class":51672},[51,129812,129765],{"class":57},[51,129814,546],{"class":65},[51,129816,614],{"class":278},[51,129818,129772],{"class":65},[51,129820,129464],{"class":278},[51,129822,51809],{"class":65},[51,129824,129825],{"class":278},"#00a4ff",[51,129827,129781],{"class":65},[51,129829,129830,129832,129834,129836,129838,129840,129842,129844,129846,129849],{"class":53,"line":307},[51,129831,129682],{"class":57},[51,129833,1808],{"class":51672},[51,129835,129765],{"class":57},[51,129837,546],{"class":65},[51,129839,835],{"class":278},[51,129841,129772],{"class":65},[51,129843,129464],{"class":278},[51,129845,51809],{"class":65},[51,129847,129848],{"class":278},"#ff00ff",[51,129850,129781],{"class":65},[51,129852,129853,129855,129857,129859,129861,129863,129865,129867,129869,129872],{"class":53,"line":324},[51,129854,129682],{"class":57},[51,129856,1808],{"class":51672},[51,129858,129765],{"class":57},[51,129860,546],{"class":65},[51,129862,861],{"class":278},[51,129864,129772],{"class":65},[51,129866,129464],{"class":278},[51,129868,51809],{"class":65},[51,129870,129871],{"class":278},"#00ff00",[51,129873,129781],{"class":65},[486,129875,129877],{"id":129876},"_83-css三大特性","8.3 css三大特性",[513,129879,129881],{"id":129880},"_831-层叠性","8.3.1 层叠性",[10,129883,129884],{},"为了解决样式冲突问题",[10,129886,129887],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[10,129889,129890],{},"   ②样式不冲突，不会层叠",[513,129892,129894],{"id":129893},"_832-继承性","8.3.2 继承性",[10,129896,129897],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[10,129899,129900],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[41,129902,129904],{"className":126851,"code":129903,"language":126853,"meta":46,"style":46},"p {\n  color: #333;\n}\n",[48,129905,129906,129912,129922],{"__ignoreMap":46},[51,129907,129908,129910],{"class":53,"line":54},[51,129909,10],{"class":51672},[51,129911,15956],{"class":65},[51,129913,129914,129916,129918,129920],{"class":53,"line":185},[51,129915,71277],{"class":278},[51,129917,51809],{"class":65},[51,129919,62741],{"class":278},[51,129921,1703],{"class":65},[51,129923,129924],{"class":53,"line":202},[51,129925,1974],{"class":65},[460,129927],{"style":126707,"src":129928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[10,129930,129931],{},"解释：①行高可以跟单位也可以不跟单位",[10,129933,129934],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[10,129936,129937],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[10,129939,129940],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[513,129942,129944],{"id":129943},"_833-优先级","8.3.3 优先级",[19,129946,129947,129950],{},[22,129948,129949],{},"选择器相同，则执行层叠性",[22,129951,129952],{},"选择器不同，则根据选择器权重执行",[679,129954,129955,129965],{},[682,129956,129957],{},[685,129958,129959,129962],{},[688,129960,129961],{"align":24119},"选择器",[688,129963,129964],{"align":24119},"选择器权重",[726,129966,129967,129975,129983,129991,129999,130007],{},[685,129968,129969,129972],{},[731,129970,129971],{"align":24119},"继承 或者*",[731,129973,129974],{"align":24119},"0，0，0，0",[685,129976,129977,129980],{},[731,129978,129979],{"align":24119},"标签选择器",[731,129981,129982],{"align":24119},"0，0，0，1",[685,129984,129985,129988],{},[731,129986,129987],{"align":24119},"类选择器，伪类选择器",[731,129989,129990],{"align":24119},"0，0，1，0",[685,129992,129993,129996],{},[731,129994,129995],{"align":24119},"ID选择器",[731,129997,129998],{"align":24119},"0，1，0，0",[685,130000,130001,130004],{},[731,130002,130003],{"align":24119},"行内样式",[731,130005,130006],{"align":24119},"1，0，0，0",[685,130008,130009,130012],{},[731,130010,130011],{"align":24119},"！important",[731,130013,130014],{"align":24119},"无穷大",[10,130016,130017],{},"! important用法：",[41,130019,130021],{"className":126851,"code":130020,"language":126853,"meta":46,"style":46},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[48,130022,130023,130028,130034,130047,130051,130056,130062,130072],{"__ignoreMap":46},[51,130024,130025],{"class":53,"line":54},[51,130026,130027],{"class":601},"\u002F* !important 拥有最高优先级 *\u002F\n",[51,130029,130030,130032],{"class":53,"line":185},[51,130031,51983],{"class":51672},[51,130033,15956],{"class":65},[51,130035,130036,130038,130040,130042,130045],{"class":53,"line":202},[51,130037,71277],{"class":278},[51,130039,51809],{"class":65},[51,130041,52017],{"class":278},[51,130043,130044],{"class":69}," !important",[51,130046,1703],{"class":65},[51,130048,130049],{"class":53,"line":209},[51,130050,1974],{"class":65},[51,130052,130053],{"class":53,"line":223},[51,130054,130055],{"class":601},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[51,130057,130058,130060],{"class":53,"line":237},[51,130059,51983],{"class":51672},[51,130061,15956],{"class":65},[51,130063,130064,130066,130068,130070],{"class":53,"line":242},[51,130065,71277],{"class":278},[51,130067,51809],{"class":65},[51,130069,57793],{"class":278},[51,130071,1703],{"class":65},[51,130073,130074],{"class":53,"line":257},[51,130075,1974],{"class":65},[10,130077,130078],{},"优先级注意点：",[10,130080,130081],{},"①权重是有4组数字组成,但是不会有进位",[10,130083,130084],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[10,130086,130087],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[10,130089,130090],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[10,130092,130093],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[10,130095,130096],{},"⑥复合选择器",[679,130098,130099,130109],{},[682,130100,130101],{},[685,130102,130103,130106],{},[688,130104,130105],{"align":24119},"div ul li",[688,130107,130108],{"align":24119},"0,0,0,3",[726,130110,130111,130119,130127],{},[685,130112,130113,130116],{},[731,130114,130115],{"align":24119},".nav ul li",[731,130117,130118],{"align":24119},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[685,130120,130121,130124],{},[731,130122,130123],{"align":24119},"a:hover",[731,130125,130126],{"align":24119},"0,0,1,1",[685,130128,130129,130132],{},[731,130130,130131],{"align":24119},".nav a",[731,130133,130126],{"align":24119},[464,130135,130136],{},"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":46,"searchDepth":185,"depth":185,"links":130138},[130139,130147,130158],{"id":128247,"depth":185,"text":128248,"children":130140},[130141,130142,130143,130144,130145,130146],{"id":128260,"depth":202,"text":128261},{"id":128332,"depth":202,"text":128333},{"id":128404,"depth":202,"text":128405},{"id":128435,"depth":202,"text":128436},{"id":128442,"depth":202,"text":128443},{"id":128595,"depth":202,"text":128596},{"id":128903,"depth":185,"text":128904,"children":130148},[130149,130150,130151,130152,130153,130154,130155,130156,130157],{"id":128910,"depth":202,"text":128911},{"id":128920,"depth":202,"text":128921},{"id":129016,"depth":202,"text":129017},{"id":129089,"depth":202,"text":129090},{"id":129244,"depth":202,"text":129245},{"id":129332,"depth":202,"text":129333},{"id":129384,"depth":202,"text":129385},{"id":129443,"depth":202,"text":129444},{"id":129548,"depth":202,"text":129549},{"id":129876,"depth":185,"text":129877,"children":130159},[130160,130161,130162],{"id":129880,"depth":202,"text":129881},{"id":129893,"depth":202,"text":129894},{"id":129943,"depth":202,"text":129944},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128239,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130169,"title":130170,"body":130171,"description":23760,"extension":469,"meta":131761,"navigation":205,"path":131762,"seo":131763,"stem":131764,"__hash__":131765},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130172,"toc":131740},[130173,130176,130180,130183,130186,130189,130192,130195,130198,130201,130205,130213,130250,130286,130289,130303,130308,130342,130345,130438,130443,130446,130476,130479,130484,130492,130496,130503,130549,130593,130598,130601,130604,130607,130610,130613,130616,130618,130621,130625,130630,130674,130679,130682,130685,130722,130727,130730,130733,130736,130739,130771,130774,130777,130780,130812,130815,130818,130821,130825,130828,130860,130863,130867,130887,130890,130898,130901,130905,130910,130913,130945,130950,130953,130991,130995,131000,131003,131006,131037,131040,131057,131062,131114,131174,131179,131233,131271,131275,131279,131282,131286,131294,131297,131299,131310,131315,131363,131397,131400,131403,131406,131409,131453,131456,131459,131462,131465,131468,131471,131515,131518,131521,131524,131527,131530,131533,131539,131542,131586,131589,131592,131595,131598,131601,131645,131648,131650,131653,131657,131661,131699,131703,131706,131709,131713,131721,131725,131728,131731,131734,131737],[14,130174,130170],{"id":130175},"_9-css盒模型浮动与切图",[486,130177,130179],{"id":130178},"_91-盒子模型","9.1 盒子模型",[10,130181,130182],{},"利用盒子来设计网页",[10,130184,130185],{},"盒子包含：边框、外边距、内边距、实际内容",[10,130187,130188],{},"网页布局设置：",[10,130190,130191],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[10,130193,130194],{},"②利用css设置好盒子样式，然后摆放到相应位置",[10,130196,130197],{},"③往盒子里装内容",[460,130199],{"style":126707,"src":130200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[513,130202,130204],{"id":130203},"_911-边框border","9.1.1 边框（border）",[19,130206,130207,130210],{},[22,130208,130209],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[22,130211,130212],{},"语法",[41,130214,130216],{"className":126851,"code":130215,"language":126853,"meta":46,"style":46},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[48,130217,130218,130223,130229,130246],{"__ignoreMap":46},[51,130219,130220],{"class":53,"line":54},[51,130221,130222],{"class":601},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[51,130224,130225,130227],{"class":53,"line":185},[51,130226,51983],{"class":51672},[51,130228,15956],{"class":65},[51,130230,130231,130233,130235,130237,130239,130241,130244],{"class":53,"line":202},[51,130232,71268],{"class":278},[51,130234,51809],{"class":65},[51,130236,759],{"class":278},[51,130238,51864],{"class":69},[51,130240,51893],{"class":278},[51,130242,130243],{"class":278}," #ccc",[51,130245,1703],{"class":65},[51,130247,130248],{"class":53,"line":209},[51,130249,1974],{"class":65},[679,130251,130252,130260],{},[682,130253,130254],{},[685,130255,130256,130258],{},[688,130257,129453],{"align":24119},[688,130259,103068],{"align":24119},[726,130261,130262,130270,130278],{},[685,130263,130264,130267],{},[731,130265,130266],{"align":24119},"border-width",[731,130268,130269],{"align":24119},"定义边框粗细，单位是px",[685,130271,130272,130275],{},[731,130273,130274],{"align":24119},"border-style",[731,130276,130277],{"align":24119},"边框的样式",[685,130279,130280,130283],{},[731,130281,130282],{"align":24119},"border-color",[731,130284,130285],{"align":24119},"边框的颜色",[10,130287,130288],{},"边框样式 border-style 可以设置如下值：",[1549,130290,130291,130294,130297,130300],{},[22,130292,130293],{},"none：没有边框即忽略所有边框的宽度（默认值）",[22,130295,130296],{},"solid：边框为单实线(最为常用的)",[22,130298,130299],{},"dashed：边框为虚线",[22,130301,130302],{},"dotted：边框为点线",[19,130304,130305],{"start":202},[22,130306,130307],{},"边框的合写分写",[41,130309,130310],{"className":126851,"code":130215,"language":126853,"meta":46,"style":46},[48,130311,130312,130316,130322,130338],{"__ignoreMap":46},[51,130313,130314],{"class":53,"line":54},[51,130315,130222],{"class":601},[51,130317,130318,130320],{"class":53,"line":185},[51,130319,51983],{"class":51672},[51,130321,15956],{"class":65},[51,130323,130324,130326,130328,130330,130332,130334,130336],{"class":53,"line":202},[51,130325,71268],{"class":278},[51,130327,51809],{"class":65},[51,130329,759],{"class":278},[51,130331,51864],{"class":69},[51,130333,51893],{"class":278},[51,130335,130243],{"class":278},[51,130337,1703],{"class":65},[51,130339,130340],{"class":53,"line":209},[51,130341,1974],{"class":65},[10,130343,130344],{},"边框分开写法：",[41,130346,130348],{"className":126851,"code":130347,"language":126853,"meta":46,"style":46},"\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",[48,130349,130350,130355,130361,130379,130397,130416,130434],{"__ignoreMap":46},[51,130351,130352],{"class":53,"line":54},[51,130353,130354],{"class":601},"\u002F* 边框分开写法 *\u002F\n",[51,130356,130357,130359],{"class":53,"line":185},[51,130358,51983],{"class":51672},[51,130360,15956],{"class":65},[51,130362,130363,130366,130368,130370,130372,130374,130377],{"class":53,"line":202},[51,130364,130365],{"class":278},"  border-top",[51,130367,51809],{"class":65},[51,130369,759],{"class":278},[51,130371,51864],{"class":69},[51,130373,51893],{"class":278},[51,130375,130376],{"class":278}," #000",[51,130378,1703],{"class":65},[51,130380,130381,130384,130386,130388,130390,130392,130395],{"class":53,"line":209},[51,130382,130383],{"class":278},"  border-right",[51,130385,51809],{"class":65},[51,130387,620],{"class":278},[51,130389,51864],{"class":69},[51,130391,62613],{"class":278},[51,130393,130394],{"class":278}," #333",[51,130396,1703],{"class":65},[51,130398,130399,130402,130404,130406,130408,130411,130414],{"class":53,"line":223},[51,130400,130401],{"class":278},"  border-bottom",[51,130403,51809],{"class":65},[51,130405,614],{"class":278},[51,130407,51864],{"class":69},[51,130409,130410],{"class":278}," dotted",[51,130412,130413],{"class":278}," #666",[51,130415,1703],{"class":65},[51,130417,130418,130421,130423,130425,130427,130429,130432],{"class":53,"line":237},[51,130419,130420],{"class":278},"  border-left",[51,130422,51809],{"class":65},[51,130424,759],{"class":278},[51,130426,51864],{"class":69},[51,130428,51893],{"class":278},[51,130430,130431],{"class":278}," #999",[51,130433,1703],{"class":65},[51,130435,130436],{"class":53,"line":242},[51,130437,1974],{"class":65},[19,130439,130440],{"start":209},[22,130441,130442],{},"表格的细线边框",[10,130444,130445],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[41,130447,130449],{"className":126851,"code":130448,"language":126853,"meta":46,"style":46},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[48,130450,130451,130456,130462,130472],{"__ignoreMap":46},[51,130452,130453],{"class":53,"line":54},[51,130454,130455],{"class":601},"\u002F* 表格细线边框合并 *\u002F\n",[51,130457,130458,130460],{"class":53,"line":185},[51,130459,679],{"class":51672},[51,130461,15956],{"class":65},[51,130463,130464,130466,130468,130470],{"class":53,"line":202},[51,130465,70950],{"class":278},[51,130467,51809],{"class":65},[51,130469,65407],{"class":278},[51,130471,1703],{"class":65},[51,130473,130474],{"class":53,"line":209},[51,130475,1974],{"class":65},[10,130477,130478],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[19,130480,130481],{"start":223},[22,130482,130483],{},"解决边框额外增加盒子的实际大小的方法：",[1549,130485,130486,130489],{},[22,130487,130488],{},"测量盒子大小的时候,不量边框",[22,130490,130491],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[513,130493,130495],{"id":130494},"_912-内边距","9.1.2 内边距",[19,130497,130498,130501],{},[22,130499,130500],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[22,130502,130212],{},[679,130504,130505,130515],{},[682,130506,130507],{},[685,130508,130509,130512],{},[688,130510,130511],{"align":24119},"值的个数",[688,130513,130514],{"align":24119},"表达意思",[726,130516,130517,130525,130533,130541],{},[685,130518,130519,130522],{},[731,130520,130521],{"align":24119},"padding: 5px;",[731,130523,130524],{"align":24119},"1个值，代表上下左右都有5个元素",[685,130526,130527,130530],{},[731,130528,130529],{"align":24119},"padding: 5px 10px;",[731,130531,130532],{"align":24119},"2个值，代表上下内边距为5像素，左右内边距为10像素",[685,130534,130535,130538],{},[731,130536,130537],{"align":24119},"padding: 5px 10px 20px;",[731,130539,130540],{"align":24119},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[685,130542,130543,130546],{},[731,130544,130545],{"align":24119},"padding: 5px 10px 20px 30px;",[731,130547,130548],{"align":24119},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[679,130550,130551,130559],{},[682,130552,130553],{},[685,130554,130555,130557],{},[688,130556,129453],{"align":24119},[688,130558,103068],{"align":24119},[726,130560,130561,130569,130577,130585],{},[685,130562,130563,130566],{},[731,130564,130565],{"align":24119},"padding-left",[731,130567,130568],{"align":24119},"左内边距",[685,130570,130571,130574],{},[731,130572,130573],{"align":24119},"padding-right",[731,130575,130576],{"align":24119},"右内边距",[685,130578,130579,130582],{},[731,130580,130581],{"align":24119},"padding-top",[731,130583,130584],{"align":24119},"上内边距",[685,130586,130587,130590],{},[731,130588,130589],{"align":24119},"padding-bottom",[731,130591,130592],{"align":24119},"下内边距",[19,130594,130595],{"start":202},[22,130596,130597],{},"内边距会影响盒子的实际大小",[10,130599,130600],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[10,130602,130603],{},"①内容和边框有了距离，添加了内边距",[10,130605,130606],{},"②padding影响了盒子实际大小",[10,130608,130609],{},"内边距对盒子大小的影响：",[10,130611,130612],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[10,130614,130615],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[10,130617,95592],{},[10,130619,130620],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[513,130622,130624],{"id":130623},"_913-外边距","9.1.3 外边距",[19,130626,130627],{},[22,130628,130629],{},"控制盒子与盒子之间的距离",[679,130631,130632,130640],{},[682,130633,130634],{},[685,130635,130636,130638],{},[688,130637,129453],{"align":24119},[688,130639,103068],{"align":24119},[726,130641,130642,130650,130658,130666],{},[685,130643,130644,130647],{},[731,130645,130646],{"align":24119},"margin-left",[731,130648,130649],{"align":24119},"左外边距",[685,130651,130652,130655],{},[731,130653,130654],{"align":24119},"margin-right",[731,130656,130657],{"align":24119},"右外边距",[685,130659,130660,130663],{},[731,130661,130662],{"align":24119},"margin-top",[731,130664,130665],{"align":24119},"上外边距",[685,130667,130668,130671],{},[731,130669,130670],{"align":24119},"margin-bottom",[731,130672,130673],{"align":24119},"下外边距",[19,130675,130676],{"start":185},[22,130677,130678],{},"外边距可以让块级盒子水平居中的两个条件：",[10,130680,130681],{},"①盒子必须指定了宽度（width）",[10,130683,130684],{},"②盒子左右的外边距都设置为 auto",[41,130686,130688],{"className":126851,"code":130687,"language":126853,"meta":46,"style":46},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[48,130689,130690,130695,130702,130718],{"__ignoreMap":46},[51,130691,130692],{"class":53,"line":54},[51,130693,130694],{"class":601},"\u002F* margin 复合写法（同上） *\u002F\n",[51,130696,130697,130700],{"class":53,"line":185},[51,130698,130699],{"class":57},".box",[51,130701,15956],{"class":65},[51,130703,130704,130706,130708,130710,130712,130715],{"class":53,"line":202},[51,130705,70842],{"class":278},[51,130707,51809],{"class":65},[51,130709,733],{"class":278},[51,130711,51928],{"class":278},[51,130713,130714],{"class":65},";  ",[51,130716,130717],{"class":601},"\u002F* 块级盒子水平居中 *\u002F\n",[51,130719,130720],{"class":53,"line":209},[51,130721,1974],{"class":65},[19,130723,130724],{"start":202},[22,130725,130726],{},"外边距塌陷问题",[10,130728,130729],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[460,130731],{"style":126707,"src":130732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[10,130734,130735],{},"解决方案：",[10,130737,130738],{},"①可以为父亲元素定义上边距",[41,130740,130741],{"className":126851,"code":130687,"language":126853,"meta":46,"style":46},[48,130742,130743,130747,130753,130767],{"__ignoreMap":46},[51,130744,130745],{"class":53,"line":54},[51,130746,130694],{"class":601},[51,130748,130749,130751],{"class":53,"line":185},[51,130750,130699],{"class":57},[51,130752,15956],{"class":65},[51,130754,130755,130757,130759,130761,130763,130765],{"class":53,"line":202},[51,130756,70842],{"class":278},[51,130758,51809],{"class":65},[51,130760,733],{"class":278},[51,130762,51928],{"class":278},[51,130764,130714],{"class":65},[51,130766,130717],{"class":601},[51,130768,130769],{"class":53,"line":209},[51,130770,1974],{"class":65},[10,130772,130773],{},"②可以为父亲元素定义上内边距",[10,130775,130776],{},"③可以为父亲元素添加overflow:hidden",[460,130778],{"style":126707,"src":130779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[41,130781,130782],{"className":126851,"code":130687,"language":126853,"meta":46,"style":46},[48,130783,130784,130788,130794,130808],{"__ignoreMap":46},[51,130785,130786],{"class":53,"line":54},[51,130787,130694],{"class":601},[51,130789,130790,130792],{"class":53,"line":185},[51,130791,130699],{"class":57},[51,130793,15956],{"class":65},[51,130795,130796,130798,130800,130802,130804,130806],{"class":53,"line":202},[51,130797,70842],{"class":278},[51,130799,51809],{"class":65},[51,130801,733],{"class":278},[51,130803,51928],{"class":278},[51,130805,130714],{"class":65},[51,130807,130717],{"class":601},[51,130809,130810],{"class":53,"line":209},[51,130811,1974],{"class":65},[460,130813],{"style":126707,"src":130814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[10,130816,130817],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[10,130819,130820],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[513,130822,130824],{"id":130823},"_914-清除内外边距","9.1.4 清除内外边距",[10,130826,130827],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[41,130829,130830],{"className":126851,"code":130687,"language":126853,"meta":46,"style":46},[48,130831,130832,130836,130842,130856],{"__ignoreMap":46},[51,130833,130834],{"class":53,"line":54},[51,130835,130694],{"class":601},[51,130837,130838,130840],{"class":53,"line":185},[51,130839,130699],{"class":57},[51,130841,15956],{"class":65},[51,130843,130844,130846,130848,130850,130852,130854],{"class":53,"line":202},[51,130845,70842],{"class":278},[51,130847,51809],{"class":65},[51,130849,733],{"class":278},[51,130851,51928],{"class":278},[51,130853,130714],{"class":65},[51,130855,130717],{"class":601},[51,130857,130858],{"class":53,"line":209},[51,130859,1974],{"class":65},[10,130861,130862],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[513,130864,130866],{"id":130865},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1549,130868,130869,130872,130875,130878,130881,130884],{},[22,130870,130871],{},"文件→打开 ：可以打开我们要测量的图片",[22,130873,130874],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[22,130876,130877],{},"右击标尺，把里面的单位改为像素",[22,130879,130880],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[22,130882,130883],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[22,130885,130886],{},"用选区拖动 可以测量大小",[460,130888],{"style":126707,"src":130889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1549,130891,130892,130895],{},[22,130893,130894],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[22,130896,130897],{},"吸管取色工具",[460,130899],{"style":126707,"src":130900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[513,130902,130904],{"id":130903},"_916-案例","9.1.6 案例",[19,130906,130907],{},[22,130908,130909],{},"小米商品",[460,130911],{"style":126707,"src":130912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[41,130914,130915],{"className":126851,"code":130687,"language":126853,"meta":46,"style":46},[48,130916,130917,130921,130927,130941],{"__ignoreMap":46},[51,130918,130919],{"class":53,"line":54},[51,130920,130694],{"class":601},[51,130922,130923,130925],{"class":53,"line":185},[51,130924,130699],{"class":57},[51,130926,15956],{"class":65},[51,130928,130929,130931,130933,130935,130937,130939],{"class":53,"line":202},[51,130930,70842],{"class":278},[51,130932,51809],{"class":65},[51,130934,733],{"class":278},[51,130936,51928],{"class":278},[51,130938,130714],{"class":65},[51,130940,130717],{"class":601},[51,130942,130943],{"class":53,"line":209},[51,130944,1974],{"class":65},[19,130946,130947],{"start":185},[22,130948,130949],{},"快报模块",[460,130951],{"style":126707,"src":130952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[41,130954,130956],{"className":127598,"code":130955,"language":127600,"meta":46,"style":46},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[48,130957,130958,130963,130978,130983],{"__ignoreMap":46},[51,130959,130960],{"class":53,"line":54},[51,130961,130962],{"class":601},"\u003C!-- HTML 代码示例 -->\n",[51,130964,130965,130967,130969,130971,130973,130976],{"class":53,"line":185},[51,130966,1452],{"class":65},[51,130968,51983],{"class":51672},[51,130970,53858],{"class":57},[51,130972,70],{"class":65},[51,130974,130975],{"class":61},"\"example\"",[51,130977,51679],{"class":65},[51,130979,130980],{"class":53,"line":202},[51,130981,130982],{"class":65},"  示例内容\n",[51,130984,130985,130987,130989],{"class":53,"line":209},[51,130986,52157],{"class":65},[51,130988,51983],{"class":51672},[51,130990,51679],{"class":65},[513,130992,130994],{"id":130993},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[19,130996,130997],{},[22,130998,130999],{},"圆角边框",[10,131001,131002],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[460,131004],{"style":126707,"src":131005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[41,131007,131009],{"className":126851,"code":131008,"language":126853,"meta":46,"style":46},"div {\n  border: 1px solid #ccc;\n}\n",[48,131010,131011,131017,131033],{"__ignoreMap":46},[51,131012,131013,131015],{"class":53,"line":54},[51,131014,51983],{"class":51672},[51,131016,15956],{"class":65},[51,131018,131019,131021,131023,131025,131027,131029,131031],{"class":53,"line":185},[51,131020,71268],{"class":278},[51,131022,51809],{"class":65},[51,131024,759],{"class":278},[51,131026,51864],{"class":69},[51,131028,51893],{"class":278},[51,131030,130243],{"class":278},[51,131032,1703],{"class":65},[51,131034,131035],{"class":53,"line":202},[51,131036,1974],{"class":65},[10,131038,131039],{},"解释:",[1549,131041,131042,131045,131048,131051,131054],{},[22,131043,131044],{},"参数值可以为数值或百分比的形式",[22,131046,131047],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[22,131049,131050],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[22,131052,131053],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[22,131055,131056],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[19,131058,131059],{"start":185},[22,131060,131061],{},"盒子阴影",[41,131063,131065],{"className":126851,"code":131064,"language":126853,"meta":46,"style":46},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[48,131066,131067,131073,131110],{"__ignoreMap":46},[51,131068,131069,131071],{"class":53,"line":54},[51,131070,51983],{"class":51672},[51,131072,15956],{"class":65},[51,131074,131075,131078,131080,131082,131084,131086,131088,131090,131092,131094,131096,131098,131100,131102,131104,131106,131108],{"class":53,"line":185},[51,131076,131077],{"class":278},"  box-shadow",[51,131079,51809],{"class":65},[51,131081,733],{"class":278},[51,131083,15139],{"class":278},[51,131085,51864],{"class":69},[51,131087,2428],{"class":278},[51,131089,51864],{"class":69},[51,131091,79139],{"class":278},[51,131093,546],{"class":65},[51,131095,733],{"class":278},[51,131097,12819],{"class":65},[51,131099,733],{"class":278},[51,131101,12819],{"class":65},[51,131103,733],{"class":278},[51,131105,12819],{"class":65},[51,131107,86582],{"class":278},[51,131109,3107],{"class":65},[51,131111,131112],{"class":53,"line":202},[51,131113,1974],{"class":65},[679,131115,131116,131124],{},[682,131117,131118],{},[685,131119,131120,131122],{},[688,131121,694],{"align":24119},[688,131123,27871],{"align":24119},[726,131125,131126,131134,131142,131150,131158,131166],{},[685,131127,131128,131131],{},[731,131129,131130],{"align":24119},"h-shadow",[731,131132,131133],{"align":24119},"必需,水平阴影的位置,允许负值",[685,131135,131136,131139],{},[731,131137,131138],{"align":24119},"v-shadow",[731,131140,131141],{"align":24119},"必需,垂直阴影的位置,允许负值",[685,131143,131144,131147],{},[731,131145,131146],{"align":24119},"blur",[731,131148,131149],{"align":24119},"可选,模糊距离,就是影子的虚实",[685,131151,131152,131155],{},[731,131153,131154],{"align":24119},"spread",[731,131156,131157],{"align":24119},"可选,阴影尺寸",[685,131159,131160,131163],{},[731,131161,131162],{"align":24119},"color",[731,131164,131165],{"align":24119},"可选,阴影的颜色",[685,131167,131168,131171],{},[731,131169,131170],{"align":24119},"inset",[731,131172,131173],{"align":24119},"可选,将外部阴影(outset)改为内部阴影",[19,131175,131176],{"start":202},[22,131177,131178],{},"文字阴影",[41,131180,131182],{"className":126851,"code":131181,"language":126853,"meta":46,"style":46},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[48,131183,131184,131190,131229],{"__ignoreMap":46},[51,131185,131186,131188],{"class":53,"line":54},[51,131187,10],{"class":51672},[51,131189,15956],{"class":65},[51,131191,131192,131195,131197,131199,131201,131203,131205,131207,131209,131211,131213,131215,131217,131219,131221,131223,131225,131227],{"class":53,"line":185},[51,131193,131194],{"class":278},"  text-shadow",[51,131196,51809],{"class":65},[51,131198,759],{"class":278},[51,131200,51864],{"class":69},[51,131202,25500],{"class":278},[51,131204,51864],{"class":69},[51,131206,15139],{"class":278},[51,131208,51864],{"class":69},[51,131210,79139],{"class":278},[51,131212,546],{"class":65},[51,131214,733],{"class":278},[51,131216,12819],{"class":65},[51,131218,733],{"class":278},[51,131220,12819],{"class":65},[51,131222,733],{"class":278},[51,131224,12819],{"class":65},[51,131226,100893],{"class":278},[51,131228,3107],{"class":65},[51,131230,131231],{"class":53,"line":202},[51,131232,1974],{"class":65},[679,131234,131235,131243],{},[682,131236,131237],{},[685,131238,131239,131241],{},[688,131240,694],{"align":24119},[688,131242,27871],{"align":24119},[726,131244,131245,131251,131258,131265],{},[685,131246,131247,131249],{},[731,131248,131130],{"align":24119},[731,131250,131133],{"align":24119},[685,131252,131253,131255],{},[731,131254,131138],{"align":24119},[731,131256,131257],{"align":24119},"必需,垂直阴影位置,允许负值",[685,131259,131260,131262],{},[731,131261,131146],{"align":24119},[731,131263,131264],{"align":24119},"可选,模糊的距离",[685,131266,131267,131269],{},[731,131268,131162],{"align":24119},[731,131270,131165],{"align":24119},[486,131272,131274],{"id":131273},"_92-浮动","9.2 浮动",[513,131276,131278],{"id":131277},"_921-浮动介绍","9.2.1 浮动介绍",[10,131280,131281],{},"在16.2中详细介绍",[513,131283,131285],{"id":131284},"_922-清除浮动","9.2.2 清除浮动",[19,131287,131288,131291],{},[22,131289,131290],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[22,131292,131293],{},"清除浮动的本质",[10,131295,131296],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[10,131298,9409],{},[1549,131300,131301,131304,131307],{},[22,131302,131303],{},"如果父盒子本身有高度，则不需要清除浮动",[22,131305,131306],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[22,131308,131309],{},"父级有了高度，就不会影响下面的标准流了",[19,131311,131312],{"start":202},[22,131313,131314],{},"清除浮动样式",[41,131316,131318],{"className":126851,"code":131317,"language":126853,"meta":46,"style":46},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[48,131319,131320,131327,131338,131342,131349,131359],{"__ignoreMap":46},[51,131321,131322,131325],{"class":53,"line":54},[51,131323,131324],{"class":57},".left",[51,131326,15956],{"class":65},[51,131328,131329,131332,131334,131336],{"class":53,"line":185},[51,131330,131331],{"class":278},"  float",[51,131333,51809],{"class":65},[51,131335,24119],{"class":278},[51,131337,1703],{"class":65},[51,131339,131340],{"class":53,"line":202},[51,131341,1974],{"class":65},[51,131343,131344,131347],{"class":53,"line":209},[51,131345,131346],{"class":57},".right",[51,131348,15956],{"class":65},[51,131350,131351,131353,131355,131357],{"class":53,"line":223},[51,131352,131331],{"class":278},[51,131354,51809],{"class":65},[51,131356,72894],{"class":278},[51,131358,1703],{"class":65},[51,131360,131361],{"class":53,"line":237},[51,131362,1974],{"class":65},[679,131364,131365,131373],{},[682,131366,131367],{},[685,131368,131369,131371],{},[688,131370,127315],{"align":24119},[688,131372,27871],{"align":24119},[726,131374,131375,131382,131389],{},[685,131376,131377,131379],{},[731,131378,24119],{"align":24119},[731,131380,131381],{"align":24119},"不允许左侧有浮动元素（清除左侧浮动的影响）",[685,131383,131384,131386],{},[731,131385,72894],{"align":24119},[731,131387,131388],{"align":24119},"不允许右侧有浮动元素（清除右侧浮动的影响）",[685,131390,131391,131394],{},[731,131392,131393],{"align":24119},"both",[731,131395,131396],{"align":24119},"同时清除左右侧浮动的影响",[10,131398,131399],{},"法一",[10,131401,131402],{},"额外标签法也称为隔墙法",[10,131404,131405],{},"使用方式：",[10,131407,131408],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[41,131410,131411],{"className":126851,"code":131317,"language":126853,"meta":46,"style":46},[48,131412,131413,131419,131429,131433,131439,131449],{"__ignoreMap":46},[51,131414,131415,131417],{"class":53,"line":54},[51,131416,131324],{"class":57},[51,131418,15956],{"class":65},[51,131420,131421,131423,131425,131427],{"class":53,"line":185},[51,131422,131331],{"class":278},[51,131424,51809],{"class":65},[51,131426,24119],{"class":278},[51,131428,1703],{"class":65},[51,131430,131431],{"class":53,"line":202},[51,131432,1974],{"class":65},[51,131434,131435,131437],{"class":53,"line":209},[51,131436,131346],{"class":57},[51,131438,15956],{"class":65},[51,131440,131441,131443,131445,131447],{"class":53,"line":223},[51,131442,131331],{"class":278},[51,131444,51809],{"class":65},[51,131446,72894],{"class":278},[51,131448,1703],{"class":65},[51,131450,131451],{"class":53,"line":237},[51,131452,1974],{"class":65},[10,131454,131455],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[10,131457,131458],{},"优点： 通俗易懂，书写方便",[10,131460,131461],{},"缺点： 添加许多无意义的标签，结构化较差",[10,131463,131464],{},"注意： 要求这个新的空标签必须是块级元素。",[10,131466,131467],{},"法二",[10,131469,131470],{},"父级添加overflow属性",[41,131472,131473],{"className":126851,"code":131317,"language":126853,"meta":46,"style":46},[48,131474,131475,131481,131491,131495,131501,131511],{"__ignoreMap":46},[51,131476,131477,131479],{"class":53,"line":54},[51,131478,131324],{"class":57},[51,131480,15956],{"class":65},[51,131482,131483,131485,131487,131489],{"class":53,"line":185},[51,131484,131331],{"class":278},[51,131486,51809],{"class":65},[51,131488,24119],{"class":278},[51,131490,1703],{"class":65},[51,131492,131493],{"class":53,"line":202},[51,131494,1974],{"class":65},[51,131496,131497,131499],{"class":53,"line":209},[51,131498,131346],{"class":57},[51,131500,15956],{"class":65},[51,131502,131503,131505,131507,131509],{"class":53,"line":223},[51,131504,131331],{"class":278},[51,131506,51809],{"class":65},[51,131508,72894],{"class":278},[51,131510,1703],{"class":65},[51,131512,131513],{"class":53,"line":237},[51,131514,1974],{"class":65},[10,131516,131517],{},"overflow: hidden;",[10,131519,131520],{},"优点：代码简洁",[10,131522,131523],{},"缺点：无法显示溢出的部分",[10,131525,131526],{},"注意：是给父元素添加代码",[10,131528,131529],{},"法三",[10,131531,131532],{},"父级添加after伪元素",[10,131534,131535,131538],{},[131536,131537],"after",{}," 方式是额外标签法的升级版",[10,131540,131541],{},"使用的时候复制就可以",[41,131543,131544],{"className":126851,"code":131317,"language":126853,"meta":46,"style":46},[48,131545,131546,131552,131562,131566,131572,131582],{"__ignoreMap":46},[51,131547,131548,131550],{"class":53,"line":54},[51,131549,131324],{"class":57},[51,131551,15956],{"class":65},[51,131553,131554,131556,131558,131560],{"class":53,"line":185},[51,131555,131331],{"class":278},[51,131557,51809],{"class":65},[51,131559,24119],{"class":278},[51,131561,1703],{"class":65},[51,131563,131564],{"class":53,"line":202},[51,131565,1974],{"class":65},[51,131567,131568,131570],{"class":53,"line":209},[51,131569,131346],{"class":57},[51,131571,15956],{"class":65},[51,131573,131574,131576,131578,131580],{"class":53,"line":223},[51,131575,131331],{"class":278},[51,131577,51809],{"class":65},[51,131579,72894],{"class":278},[51,131581,1703],{"class":65},[51,131583,131584],{"class":53,"line":237},[51,131585,1974],{"class":65},[10,131587,131588],{},"优点：没有增加标签，结构更简单",[10,131590,131591],{},"缺点：照顾低版本浏览器",[10,131593,131594],{},"代表网站： 百度、淘宝网、网易等",[10,131596,131597],{},"法四",[10,131599,131600],{},"父级添加双伪元素",[41,131602,131603],{"className":126851,"code":131317,"language":126853,"meta":46,"style":46},[48,131604,131605,131611,131621,131625,131631,131641],{"__ignoreMap":46},[51,131606,131607,131609],{"class":53,"line":54},[51,131608,131324],{"class":57},[51,131610,15956],{"class":65},[51,131612,131613,131615,131617,131619],{"class":53,"line":185},[51,131614,131331],{"class":278},[51,131616,51809],{"class":65},[51,131618,24119],{"class":278},[51,131620,1703],{"class":65},[51,131622,131623],{"class":53,"line":202},[51,131624,1974],{"class":65},[51,131626,131627,131629],{"class":53,"line":209},[51,131628,131346],{"class":57},[51,131630,15956],{"class":65},[51,131632,131633,131635,131637,131639],{"class":53,"line":223},[51,131634,131331],{"class":278},[51,131636,51809],{"class":65},[51,131638,72894],{"class":278},[51,131640,1703],{"class":65},[51,131642,131643],{"class":53,"line":237},[51,131644,1974],{"class":65},[10,131646,131647],{},"优点：代码更简洁",[10,131649,131591],{},[10,131651,131652],{},"代表网站：小米、腾讯等",[486,131654,131656],{"id":131655},"_93-ps切图","9.3 PS切图",[513,131658,131660],{"id":131659},"_931-常见图片格式","9.3.1 常见图片格式",[679,131662,131663,131673],{},[682,131664,131665],{},[685,131666,131667,131670],{},[688,131668,131669],{"align":24119},"jpg图像格式",[688,131671,131672],{"align":24119},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[726,131674,131675,131683,131691],{},[685,131676,131677,131680],{},[731,131678,131679],{"align":24119},"gif图像格式",[731,131681,131682],{"align":24119},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[685,131684,131685,131688],{},[731,131686,131687],{"align":24119},"png图像格式",[731,131689,131690],{"align":24119},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[685,131692,131693,131696],{},[731,131694,131695],{"align":24119},"PSD图像格式",[731,131697,131698],{"align":24119},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[513,131700,131702],{"id":131701},"_932-图层切图","9.3.2 图层切图",[10,131704,131705],{},"最简单的切图方式：右击图层 → 导出 → 切片",[10,131707,131708],{},"按住shift选中两个图层->图层菜单->合并图层",[513,131710,131712],{"id":131711},"_933-切片切图","9.3.3 切片切图",[1549,131714,131715,131718],{},[22,131716,131717],{},"利用切片工具手动划出",[22,131719,131720],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[513,131722,131724],{"id":131723},"_934-切图步骤","9.3.4 切图步骤",[10,131726,131727],{},"用切片工具选中：",[460,131729],{"style":126707,"src":131730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[10,131732,131733],{},"文件 -> 导出",[460,131735],{"style":126707,"src":131736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[464,131738,131739],{},"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":46,"searchDepth":185,"depth":185,"links":131741},[131742,131751,131755],{"id":130178,"depth":185,"text":130179,"children":131743},[131744,131745,131746,131747,131748,131749,131750],{"id":130203,"depth":202,"text":130204},{"id":130494,"depth":202,"text":130495},{"id":130623,"depth":202,"text":130624},{"id":130823,"depth":202,"text":130824},{"id":130865,"depth":202,"text":130866},{"id":130903,"depth":202,"text":130904},{"id":130993,"depth":202,"text":130994},{"id":131273,"depth":185,"text":131274,"children":131752},[131753,131754],{"id":131277,"depth":202,"text":131278},{"id":131284,"depth":202,"text":131285},{"id":131655,"depth":185,"text":131656,"children":131756},[131757,131758,131759,131760],{"id":131659,"depth":202,"text":131660},{"id":131701,"depth":202,"text":131702},{"id":131711,"depth":202,"text":131712},{"id":131723,"depth":202,"text":131724},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130170,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131767,"title":131768,"body":131769,"description":23760,"extension":469,"meta":132410,"navigation":205,"path":132411,"seo":132412,"stem":132413,"__hash__":132414},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131770,"toc":132398},[131771,131774,131778,131804,131838,131842,131846,131849,131891,131898,131908,131916,131918,131921,131924,131927,131934,131948,131952,131955,131984,131988,131991,132005,132009,132012,132040,132044,132047,132073,132077,132082,132115,132120,132148,132152,132169,132215,132220,132264,132281,132388,132396],[14,131772,131768],{"id":131773},"_10-css规范与学成在线案例",[486,131775,131777],{"id":131776},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[19,131779,131780,131786,131792,131798],{},[22,131781,131782,131785],{},[691,131783,131784],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[22,131787,131788,131791],{},[691,131789,131790],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[22,131793,131794,131797],{},[691,131795,131796],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[22,131799,131800,131803],{},[691,131801,131802],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[41,131805,131806],{"className":126851,"code":130215,"language":126853,"meta":46,"style":46},[48,131807,131808,131812,131818,131834],{"__ignoreMap":46},[51,131809,131810],{"class":53,"line":54},[51,131811,130222],{"class":601},[51,131813,131814,131816],{"class":53,"line":185},[51,131815,51983],{"class":51672},[51,131817,15956],{"class":65},[51,131819,131820,131822,131824,131826,131828,131830,131832],{"class":53,"line":202},[51,131821,71268],{"class":278},[51,131823,51809],{"class":65},[51,131825,759],{"class":278},[51,131827,51864],{"class":69},[51,131829,51893],{"class":278},[51,131831,130243],{"class":278},[51,131833,1703],{"class":65},[51,131835,131836],{"class":53,"line":209},[51,131837,1974],{"class":65},[486,131839,131841],{"id":131840},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[513,131843,131845],{"id":131844},"_1021-header头部制作","10.2.1 header头部制作",[460,131847],{"style":126707,"src":131848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1549,131850,131851,131858,131865,131871,131878,131885],{},[22,131852,131853,131854,131857],{},"1号是版心盒子 ",[691,131855,131856],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[22,131859,131860,131861,131864],{},"版心盒子 里面包含 2号盒子 ",[691,131862,131863],{},"logo"," 图标",[22,131866,131867,131868,131870],{},"版心盒子 里面包含 3号盒子 ",[691,131869,54085],{}," 导航栏",[22,131872,131873,131874,131877],{},"版心盒子 里面包含 4号盒子 ",[691,131875,131876],{},"search"," 搜索框",[22,131879,131880,131881,131884],{},"版心盒子 里面包含 5号盒子 ",[691,131882,131883],{},"user"," 个人信息",[22,131886,131887,131888],{},"注意，要求里面的 ",[691,131889,131890],{},"4个子盒子 必须都浮动",[19,131892,131893],{},[22,131894,131895],{},[691,131896,131897],{},"导航栏注意点:",[10,131899,131900,131901,131904,131905],{},"实际开发中， ",[691,131902,131903],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[691,131906,131907],{},"用 li 包含链接(li+a)的做法",[1549,131909,131910,131913],{},[22,131911,131912],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[22,131914,131915],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[10,131917,9409],{},[10,131919,131920],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[10,131922,131923],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[10,131925,131926],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[19,131928,131929],{"start":185},[22,131930,131931],{},[691,131932,131933],{},"4号盒子search的细节：",[1549,131935,131936,131939,131942],{},[22,131937,131938],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[22,131940,131941],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[22,131943,131944,131947],{},[48,131945,131946],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[513,131949,131951],{"id":131950},"_1022-banner制作","10.2.2 banner制作",[460,131953],{"style":126707,"src":131954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1549,131956,131957,131964,131970,131977],{},[22,131958,131959,131960,131963],{},"1号盒子是通栏的大盒子 ",[691,131961,131962],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[22,131965,131966,131967,131969],{},"2号盒子是版心 ",[691,131968,1337],{}," ， 要水平居中对齐",[22,131971,131972,131973,131976],{},"3号盒子版心内，左对齐 ",[691,131974,131975],{},"subnav"," 侧导航栏",[22,131978,131979,131980,131983],{},"4号盒子版心内，右对齐 ",[691,131981,131982],{},"course"," 课程",[513,131985,131987],{"id":131986},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[460,131989],{"style":126707,"src":131990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1549,131992,131993,131996,131999,132002],{},[22,131994,131995],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[22,131997,131998],{},"1号盒子是标题 H3 左侧浮动",[22,132000,132001],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[22,132003,132004],{},"3号盒子 右浮动 mod 修改",[513,132006,132008],{"id":132007},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[460,132010],{"style":126707,"src":132011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1549,132013,132014,132020,132027,132034,132037],{},[22,132015,132016,132017,132019],{},"1号盒子为最大的盒子 ",[691,132018,54086],{}," 版心水平居中对齐",[22,132021,132022,132023,132026],{},"2号盒子为上面部分 ",[691,132024,132025],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[22,132028,132029,132030,132033],{},"3号盒子为底下部分 ",[691,132031,132032],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[22,132035,132036],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[22,132038,132039],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[513,132041,132043],{"id":132042},"_1025-底部模块制作","10.2.5 底部模块制作",[460,132045],{"style":126707,"src":132046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1549,132048,132049,132056,132059,132066],{},[22,132050,132051,132052,132055],{},"1号盒子通栏大盒子 底部 ",[691,132053,132054],{},"footer"," 给高度 底色是白色",[22,132057,132058],{},"2号盒子版心水平居中",[22,132060,132061,132062,132065],{},"3号盒子版权 ",[691,132063,132064],{},"copyright"," 左对齐",[22,132067,132068,132069,132072],{},"4号盒子 链接组 ",[691,132070,132071],{},"links"," 右对齐",[513,132074,132076],{"id":132075},"_1026-代码模块","10.2.6 代码模块",[19,132078,132079],{},[22,132080,132081],{},"html部分",[41,132083,132085],{"className":127598,"code":132084,"language":127600,"meta":46,"style":46},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[48,132086,132087],{"__ignoreMap":46},[51,132088,132089,132091,132093,132095,132097,132100,132103,132105,132108,132111,132113],{"class":53,"line":54},[51,132090,1452],{"class":65},[51,132092,780],{"class":51672},[51,132094,61429],{"class":57},[51,132096,70],{"class":65},[51,132098,132099],{"class":61},"\"https:\u002F\u002Fexample.com\"",[51,132101,132102],{"class":57}," target",[51,132104,70],{"class":65},[51,132106,132107],{"class":61},"\"_blank\"",[51,132109,132110],{"class":65},">链接文字\u003C\u002F",[51,132112,780],{"class":51672},[51,132114,51679],{"class":65},[19,132116,132117],{"start":185},[22,132118,132119],{},"css部分",[41,132121,132122],{"className":127598,"code":132084,"language":127600,"meta":46,"style":46},[48,132123,132124],{"__ignoreMap":46},[51,132125,132126,132128,132130,132132,132134,132136,132138,132140,132142,132144,132146],{"class":53,"line":54},[51,132127,1452],{"class":65},[51,132129,780],{"class":51672},[51,132131,61429],{"class":57},[51,132133,70],{"class":65},[51,132135,132099],{"class":61},[51,132137,132102],{"class":57},[51,132139,70],{"class":65},[51,132141,132107],{"class":61},[51,132143,132110],{"class":65},[51,132145,780],{"class":51672},[51,132147,51679],{"class":65},[513,132149,132151],{"id":132150},"_1027-收获","10.2.7 收获",[19,132153,132154,132157,132160,132163,132166],{},[22,132155,132156],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[22,132158,132159],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[22,132161,132162],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[22,132164,132165],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[22,132167,132168],{},"遗忘代码",[41,132170,132172],{"className":126851,"code":132171,"language":126853,"meta":46,"style":46},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[48,132173,132174,132196,132201,132211],{"__ignoreMap":46},[51,132175,132176,132178,132180,132182,132184,132186,132188,132190,132192,132194],{"class":53,"line":54},[51,132177,51983],{"class":51672},[51,132179,12819],{"class":65},[51,132181,10],{"class":51672},[51,132183,12819],{"class":65},[51,132185,14],{"class":51672},[51,132187,12819],{"class":65},[51,132189,1549],{"class":51672},[51,132191,12819],{"class":65},[51,132193,22],{"class":51672},[51,132195,15956],{"class":65},[51,132197,132198],{"class":53,"line":185},[51,132199,132200],{"class":601},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[51,132202,132203,132205,132207,132209],{"class":53,"line":202},[51,132204,128467],{"class":278},[51,132206,51809],{"class":65},[51,132208,61241],{"class":278},[51,132210,1703],{"class":65},[51,132212,132213],{"class":53,"line":209},[51,132214,1974],{"class":65},[19,132216,132217],{"start":237},[22,132218,132219],{},"html引css的程序",[41,132221,132222],{"className":126851,"code":132171,"language":126853,"meta":46,"style":46},[48,132223,132224,132246,132250,132260],{"__ignoreMap":46},[51,132225,132226,132228,132230,132232,132234,132236,132238,132240,132242,132244],{"class":53,"line":54},[51,132227,51983],{"class":51672},[51,132229,12819],{"class":65},[51,132231,10],{"class":51672},[51,132233,12819],{"class":65},[51,132235,14],{"class":51672},[51,132237,12819],{"class":65},[51,132239,1549],{"class":51672},[51,132241,12819],{"class":65},[51,132243,22],{"class":51672},[51,132245,15956],{"class":65},[51,132247,132248],{"class":53,"line":185},[51,132249,132200],{"class":601},[51,132251,132252,132254,132256,132258],{"class":53,"line":202},[51,132253,128467],{"class":278},[51,132255,51809],{"class":65},[51,132257,61241],{"class":278},[51,132259,1703],{"class":65},[51,132261,132262],{"class":53,"line":209},[51,132263,1974],{"class":65},[19,132265,132266,132269,132272,132275,132278],{"start":242},[22,132267,132268],{},"浮动的盒子不会有外边距合并问题",[22,132270,132271],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[22,132273,132274],{},"ctrl+g快速定位行；shift+alt多个光标",[22,132276,132277],{},"学习上方各个模块的选择器起名方法，以后就这样用",[22,132279,132280],{},"在写选择器时尽量写全一些，例如",[41,132282,132284],{"className":126851,"code":132283,"language":126853,"meta":46,"style":46},"\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",[48,132285,132286,132291,132307,132312,132327,132332,132347,132352,132367,132372],{"__ignoreMap":46},[51,132287,132288],{"class":53,"line":54},[51,132289,132290],{"class":601},"\u002F* 静态定位（默认） *\u002F\n",[51,132292,132293,132296,132298,132300,132302,132305],{"class":53,"line":185},[51,132294,132295],{"class":57},".static",[51,132297,80179],{"class":65},[51,132299,129211],{"class":278},[51,132301,51809],{"class":65},[51,132303,132304],{"class":278},"static",[51,132306,129781],{"class":65},[51,132308,132309],{"class":53,"line":202},[51,132310,132311],{"class":601},"\u002F* 相对定位 *\u002F\n",[51,132313,132314,132317,132319,132321,132323,132325],{"class":53,"line":209},[51,132315,132316],{"class":57},".relative",[51,132318,80179],{"class":65},[51,132320,129211],{"class":278},[51,132322,51809],{"class":65},[51,132324,55136],{"class":278},[51,132326,129781],{"class":65},[51,132328,132329],{"class":53,"line":223},[51,132330,132331],{"class":601},"\u002F* 绝对定位 *\u002F\n",[51,132333,132334,132337,132339,132341,132343,132345],{"class":53,"line":237},[51,132335,132336],{"class":57},".absolute",[51,132338,80179],{"class":65},[51,132340,129211],{"class":278},[51,132342,51809],{"class":65},[51,132344,55203],{"class":278},[51,132346,129781],{"class":65},[51,132348,132349],{"class":53,"line":242},[51,132350,132351],{"class":601},"\u002F* 固定定位 *\u002F\n",[51,132353,132354,132357,132359,132361,132363,132365],{"class":53,"line":257},[51,132355,132356],{"class":57},".fixed",[51,132358,80179],{"class":65},[51,132360,129211],{"class":278},[51,132362,51809],{"class":65},[51,132364,86605],{"class":278},[51,132366,129781],{"class":65},[51,132368,132369],{"class":53,"line":262},[51,132370,132371],{"class":601},"\u002F* 粘性定位 *\u002F\n",[51,132373,132374,132377,132379,132381,132383,132386],{"class":53,"line":285},[51,132375,132376],{"class":57},".sticky",[51,132378,80179],{"class":65},[51,132380,129211],{"class":278},[51,132382,51809],{"class":65},[51,132384,132385],{"class":278},"sticky",[51,132387,129781],{"class":65},[19,132389,132390,132393],{"start":307},[22,132391,132392],{},"一定要用好注释",[22,132394,132395],{},"浮动的盒子不会有外边距合并的问题",[464,132397,131739],{},{"title":46,"searchDepth":185,"depth":185,"links":132399},[132400,132401],{"id":131776,"depth":185,"text":131777},{"id":131840,"depth":185,"text":131841,"children":132402},[132403,132404,132405,132406,132407,132408,132409],{"id":131844,"depth":202,"text":131845},{"id":131950,"depth":202,"text":131951},{"id":131986,"depth":202,"text":131987},{"id":132007,"depth":202,"text":132008},{"id":132042,"depth":202,"text":132043},{"id":132075,"depth":202,"text":132076},{"id":132150,"depth":202,"text":132151},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131768,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132416,"title":132417,"body":132418,"description":23760,"extension":469,"meta":133904,"navigation":205,"path":133905,"seo":133906,"stem":133907,"__hash__":133908},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132419,"toc":133896},[132420,132423,132427,132431,132442,132446,132463,132507,132540,132543,132560,132563,132566,132610,132614,132618,132621,132624,132628,132631,132642,132705,132746,132749,132764,132818,132826,132829,132840,132894,132920,132923,132936,132990,133022,133076,133099,133153,133156,133159,133166,133220,133241,133295,133298,133301,133386,133394,133451,133474,133478,133481,133499,133503,133522,133576,133614,133618,133621,133624,133646,133650,133658,133661,133666,133677,133680,133684,133698,133742,133745,133749,133752,133757,133783,133788,133865,133868,133872,133875,133878,133881,133884,133887,133890,133893],[14,132421,132417],{"id":132422},"_11-传统布局与定位体系",[486,132424,132426],{"id":132425},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[513,132428,132430],{"id":132429},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1549,132432,132433,132436,132439],{},[22,132434,132435],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[22,132437,132438],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[22,132440,132441],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[513,132443,132445],{"id":132444},"_1112-浮动","11.1.2 浮动",[1549,132447,132448,132451,132454,132457,132460],{},[22,132449,132450],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[22,132452,132453],{},"浮动可以改变元素标签默认的排列方式",[22,132455,132456],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[22,132458,132459],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[22,132461,132462],{},"在使用行内块转换时盒子之间是有空隙的",[41,132464,132465],{"className":126851,"code":131317,"language":126853,"meta":46,"style":46},[48,132466,132467,132473,132483,132487,132493,132503],{"__ignoreMap":46},[51,132468,132469,132471],{"class":53,"line":54},[51,132470,131324],{"class":57},[51,132472,15956],{"class":65},[51,132474,132475,132477,132479,132481],{"class":53,"line":185},[51,132476,131331],{"class":278},[51,132478,51809],{"class":65},[51,132480,24119],{"class":278},[51,132482,1703],{"class":65},[51,132484,132485],{"class":53,"line":202},[51,132486,1974],{"class":65},[51,132488,132489,132491],{"class":53,"line":209},[51,132490,131346],{"class":57},[51,132492,15956],{"class":65},[51,132494,132495,132497,132499,132501],{"class":53,"line":223},[51,132496,131331],{"class":278},[51,132498,51809],{"class":65},[51,132500,72894],{"class":278},[51,132502,1703],{"class":65},[51,132504,132505],{"class":53,"line":237},[51,132506,1974],{"class":65},[679,132508,132509,132517],{},[682,132510,132511],{},[685,132512,132513,132515],{},[688,132514,127315],{"align":24119},[688,132516,27871],{"align":24119},[726,132518,132519,132526,132533],{},[685,132520,132521,132523],{},[731,132522,55109],{"align":24119},[731,132524,132525],{"align":24119},"元素不浮动（默认值）",[685,132527,132528,132530],{},[731,132529,24119],{"align":24119},[731,132531,132532],{"align":24119},"元素向左浮动",[685,132534,132535,132537],{},[731,132536,72894],{"align":24119},[731,132538,132539],{"align":24119},"元素向右浮动",[10,132541,132542],{},"浮动重点：",[1549,132544,132545,132548,132551,132554,132557],{},[22,132546,132547],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[22,132549,132550],{},"浮动的元素会一行内显示并且元素顶部对齐",[22,132552,132553],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[22,132555,132556],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[22,132558,132559],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[10,132561,132562],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[10,132564,132565],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[41,132567,132568],{"className":126851,"code":131317,"language":126853,"meta":46,"style":46},[48,132569,132570,132576,132586,132590,132596,132606],{"__ignoreMap":46},[51,132571,132572,132574],{"class":53,"line":54},[51,132573,131324],{"class":57},[51,132575,15956],{"class":65},[51,132577,132578,132580,132582,132584],{"class":53,"line":185},[51,132579,131331],{"class":278},[51,132581,51809],{"class":65},[51,132583,24119],{"class":278},[51,132585,1703],{"class":65},[51,132587,132588],{"class":53,"line":202},[51,132589,1974],{"class":65},[51,132591,132592,132594],{"class":53,"line":209},[51,132593,131346],{"class":57},[51,132595,15956],{"class":65},[51,132597,132598,132600,132602,132604],{"class":53,"line":223},[51,132599,131331],{"class":278},[51,132601,51809],{"class":65},[51,132603,72894],{"class":278},[51,132605,1703],{"class":65},[51,132607,132608],{"class":53,"line":237},[51,132609,1974],{"class":65},[513,132611,132613],{"id":132612},"_1113-定位","11.1.3 定位",[22381,132615,132617],{"id":132616},"_11131-使用场景","11.1.3.1 使用场景",[10,132619,132620],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[10,132622,132623],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22381,132625,132627],{"id":132626},"_11132-定位组成","11.1.3.2 定位组成",[10,132629,132630],{},"定位 = 定位模式 + 边偏移",[19,132632,132633],{},[22,132634,132635,132638,132639],{},[691,132636,132637],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[691,132640,132641],{},"定位模式",[41,132643,132645],{"className":126851,"code":132644,"language":126853,"meta":46,"style":46},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[48,132646,132647,132653,132667,132684,132701],{"__ignoreMap":46},[51,132648,132649,132651],{"class":53,"line":54},[51,132650,130699],{"class":57},[51,132652,15956],{"class":65},[51,132654,132655,132658,132660,132662,132664],{"class":53,"line":185},[51,132656,132657],{"class":278},"  position",[51,132659,51809],{"class":65},[51,132661,55136],{"class":278},[51,132663,130714],{"class":65},[51,132665,132666],{"class":601},"\u002F* 定位模式 *\u002F\n",[51,132668,132669,132672,132674,132676,132678,132681],{"class":53,"line":202},[51,132670,132671],{"class":278},"  top",[51,132673,51809],{"class":65},[51,132675,988],{"class":278},[51,132677,51864],{"class":69},[51,132679,132680],{"class":65},";           ",[51,132682,132683],{"class":601},"\u002F* 边偏移：上 *\u002F\n",[51,132685,132686,132689,132691,132693,132695,132698],{"class":53,"line":209},[51,132687,132688],{"class":278},"  left",[51,132690,51809],{"class":65},[51,132692,1242],{"class":278},[51,132694,51864],{"class":69},[51,132696,132697],{"class":65},";          ",[51,132699,132700],{"class":601},"\u002F* 边偏移：左 *\u002F\n",[51,132702,132703],{"class":53,"line":223},[51,132704,1974],{"class":65},[679,132706,132707,132716],{},[682,132708,132709],{},[685,132710,132711,132713],{},[688,132712,694],{"align":24119},[688,132714,132715],{"align":24119},"语义",[726,132717,132718,132725,132732,132739],{},[685,132719,132720,132722],{},[731,132721,132304],{"align":24119},[731,132723,132724],{"align":24119},"静态定位",[685,132726,132727,132729],{},[731,132728,55136],{"align":24119},[731,132730,132731],{"align":24119},"相对定位",[685,132733,132734,132736],{},[731,132735,55203],{"align":24119},[731,132737,132738],{"align":24119},"绝对定位",[685,132740,132741,132743],{},[731,132742,86605],{"align":24119},[731,132744,132745],{"align":24119},"固定定位",[10,132747,132748],{},"（1）静态定位：",[1549,132750,132751,132762],{},[22,132752,132753,132754,132757,132758,132761],{},"静态定位是元素的 ",[691,132755,132756],{},"默认定位方式"," ， ",[691,132759,132760],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[22,132763,5566],{},[41,132765,132766],{"className":126851,"code":132644,"language":126853,"meta":46,"style":46},[48,132767,132768,132774,132786,132800,132814],{"__ignoreMap":46},[51,132769,132770,132772],{"class":53,"line":54},[51,132771,130699],{"class":57},[51,132773,15956],{"class":65},[51,132775,132776,132778,132780,132782,132784],{"class":53,"line":185},[51,132777,132657],{"class":278},[51,132779,51809],{"class":65},[51,132781,55136],{"class":278},[51,132783,130714],{"class":65},[51,132785,132666],{"class":601},[51,132787,132788,132790,132792,132794,132796,132798],{"class":53,"line":202},[51,132789,132671],{"class":278},[51,132791,51809],{"class":65},[51,132793,988],{"class":278},[51,132795,51864],{"class":69},[51,132797,132680],{"class":65},[51,132799,132683],{"class":601},[51,132801,132802,132804,132806,132808,132810,132812],{"class":53,"line":209},[51,132803,132688],{"class":278},[51,132805,51809],{"class":65},[51,132807,1242],{"class":278},[51,132809,51864],{"class":69},[51,132811,132697],{"class":65},[51,132813,132700],{"class":601},[51,132815,132816],{"class":53,"line":223},[51,132817,1974],{"class":65},[1549,132819,132820,132823],{},[22,132821,132822],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[22,132824,132825],{},"静态定位在布局时我们几乎不用的",[10,132827,132828],{},"（2）相对定位",[1549,132830,132831,132838],{},[22,132832,132833,132834,132837],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[691,132835,132836],{},"原来的位置"," 来说的（自恋型）",[22,132839,5566],{},[41,132841,132842],{"className":126851,"code":132644,"language":126853,"meta":46,"style":46},[48,132843,132844,132850,132862,132876,132890],{"__ignoreMap":46},[51,132845,132846,132848],{"class":53,"line":54},[51,132847,130699],{"class":57},[51,132849,15956],{"class":65},[51,132851,132852,132854,132856,132858,132860],{"class":53,"line":185},[51,132853,132657],{"class":278},[51,132855,51809],{"class":65},[51,132857,55136],{"class":278},[51,132859,130714],{"class":65},[51,132861,132666],{"class":601},[51,132863,132864,132866,132868,132870,132872,132874],{"class":53,"line":202},[51,132865,132671],{"class":278},[51,132867,51809],{"class":65},[51,132869,988],{"class":278},[51,132871,51864],{"class":69},[51,132873,132680],{"class":65},[51,132875,132683],{"class":601},[51,132877,132878,132880,132882,132884,132886,132888],{"class":53,"line":209},[51,132879,132688],{"class":278},[51,132881,51809],{"class":65},[51,132883,1242],{"class":278},[51,132885,51864],{"class":69},[51,132887,132697],{"class":65},[51,132889,132700],{"class":601},[51,132891,132892],{"class":53,"line":223},[51,132893,1974],{"class":65},[1549,132895,132896],{},[22,132897,132898,132899,132901,132902,132904,132905,132908,132909,132912,132913,132915,132916,132919],{},"相对定位的特点：",[54088,132900],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54088,132903],{},"  ② ",[691,132906,132907],{},"原来"," 在标准流的 ",[691,132910,132911],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54088,132914],{},"  ③因此， ",[691,132917,132918],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[10,132921,132922],{},"（3）绝对定位",[1549,132924,132925,132934],{},[22,132926,132927,132929,132930,132933],{},[691,132928,132738],{}," 是元素在移动位置的时候，是相对于它 ",[691,132931,132932],{},"祖先元素"," 来说的（拼爹型）",[22,132935,5566],{},[41,132937,132938],{"className":126851,"code":132644,"language":126853,"meta":46,"style":46},[48,132939,132940,132946,132958,132972,132986],{"__ignoreMap":46},[51,132941,132942,132944],{"class":53,"line":54},[51,132943,130699],{"class":57},[51,132945,15956],{"class":65},[51,132947,132948,132950,132952,132954,132956],{"class":53,"line":185},[51,132949,132657],{"class":278},[51,132951,51809],{"class":65},[51,132953,55136],{"class":278},[51,132955,130714],{"class":65},[51,132957,132666],{"class":601},[51,132959,132960,132962,132964,132966,132968,132970],{"class":53,"line":202},[51,132961,132671],{"class":278},[51,132963,51809],{"class":65},[51,132965,988],{"class":278},[51,132967,51864],{"class":69},[51,132969,132680],{"class":65},[51,132971,132683],{"class":601},[51,132973,132974,132976,132978,132980,132982,132984],{"class":53,"line":209},[51,132975,132688],{"class":278},[51,132977,51809],{"class":65},[51,132979,1242],{"class":278},[51,132981,51864],{"class":69},[51,132983,132697],{"class":65},[51,132985,132700],{"class":601},[51,132987,132988],{"class":53,"line":223},[51,132989,1974],{"class":65},[1549,132991,132992,133007,133016,133019],{},[22,132993,132994,132995,132997,132998,133000,133001,133003,133004,133006],{},"绝对定位的特点：",[54088,132996],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54088,132999],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54088,133002],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54088,133005],{},"  (4)固定定位",[22,133008,133009,133011,133012,133015],{},[691,133010,132745],{}," 是元素 ",[691,133013,133014],{},"固定于浏览器可视区的位置"," 。（认死理型）",[22,133017,133018],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[22,133020,133021],{},"语法:",[41,133023,133024],{"className":126851,"code":132644,"language":126853,"meta":46,"style":46},[48,133025,133026,133032,133044,133058,133072],{"__ignoreMap":46},[51,133027,133028,133030],{"class":53,"line":54},[51,133029,130699],{"class":57},[51,133031,15956],{"class":65},[51,133033,133034,133036,133038,133040,133042],{"class":53,"line":185},[51,133035,132657],{"class":278},[51,133037,51809],{"class":65},[51,133039,55136],{"class":278},[51,133041,130714],{"class":65},[51,133043,132666],{"class":601},[51,133045,133046,133048,133050,133052,133054,133056],{"class":53,"line":202},[51,133047,132671],{"class":278},[51,133049,51809],{"class":65},[51,133051,988],{"class":278},[51,133053,51864],{"class":69},[51,133055,132680],{"class":65},[51,133057,132683],{"class":601},[51,133059,133060,133062,133064,133066,133068,133070],{"class":53,"line":209},[51,133061,132688],{"class":278},[51,133063,51809],{"class":65},[51,133065,1242],{"class":278},[51,133067,51864],{"class":69},[51,133069,132697],{"class":65},[51,133071,132700],{"class":601},[51,133073,133074],{"class":53,"line":223},[51,133075,1974],{"class":65},[1549,133077,133078,133087],{},[22,133079,133080,133081,133083,133084,133086],{},"特点:",[54088,133082],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54088,133085],{},"  ②固定定位不再占有原先的位置,完全脱标",[22,133088,133089,133090,133092,133093,133095,133096,133098],{},"固定在版心位置的方法:",[54088,133091],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54088,133094],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54088,133097],{},"  实例：",[41,133100,133101],{"className":126851,"code":132644,"language":126853,"meta":46,"style":46},[48,133102,133103,133109,133121,133135,133149],{"__ignoreMap":46},[51,133104,133105,133107],{"class":53,"line":54},[51,133106,130699],{"class":57},[51,133108,15956],{"class":65},[51,133110,133111,133113,133115,133117,133119],{"class":53,"line":185},[51,133112,132657],{"class":278},[51,133114,51809],{"class":65},[51,133116,55136],{"class":278},[51,133118,130714],{"class":65},[51,133120,132666],{"class":601},[51,133122,133123,133125,133127,133129,133131,133133],{"class":53,"line":202},[51,133124,132671],{"class":278},[51,133126,51809],{"class":65},[51,133128,988],{"class":278},[51,133130,51864],{"class":69},[51,133132,132680],{"class":65},[51,133134,132683],{"class":601},[51,133136,133137,133139,133141,133143,133145,133147],{"class":53,"line":209},[51,133138,132688],{"class":278},[51,133140,51809],{"class":65},[51,133142,1242],{"class":278},[51,133144,51864],{"class":69},[51,133146,132697],{"class":65},[51,133148,132700],{"class":601},[51,133150,133151],{"class":53,"line":223},[51,133152,1974],{"class":65},[460,133154],{"style":126707,"src":133155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[10,133157,133158],{},"(5)粘性定位",[1549,133160,133161,133164],{},[22,133162,133163],{},"粘性定位可以被认为是相对定位和固定定位的混合",[22,133165,5566],{},[41,133167,133168],{"className":126851,"code":132644,"language":126853,"meta":46,"style":46},[48,133169,133170,133176,133188,133202,133216],{"__ignoreMap":46},[51,133171,133172,133174],{"class":53,"line":54},[51,133173,130699],{"class":57},[51,133175,15956],{"class":65},[51,133177,133178,133180,133182,133184,133186],{"class":53,"line":185},[51,133179,132657],{"class":278},[51,133181,51809],{"class":65},[51,133183,55136],{"class":278},[51,133185,130714],{"class":65},[51,133187,132666],{"class":601},[51,133189,133190,133192,133194,133196,133198,133200],{"class":53,"line":202},[51,133191,132671],{"class":278},[51,133193,51809],{"class":65},[51,133195,988],{"class":278},[51,133197,51864],{"class":69},[51,133199,132680],{"class":65},[51,133201,132683],{"class":601},[51,133203,133204,133206,133208,133210,133212,133214],{"class":53,"line":209},[51,133205,132688],{"class":278},[51,133207,51809],{"class":65},[51,133209,1242],{"class":278},[51,133211,51864],{"class":69},[51,133213,132697],{"class":65},[51,133215,132700],{"class":601},[51,133217,133218],{"class":53,"line":223},[51,133219,1974],{"class":65},[1549,133221,133222],{},[22,133223,133224,133225,133227,133228,133230,133231,133233,133234,133237,133238,133240],{},"粘性定位的特点：",[54088,133226],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54088,133229],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54088,133232],{},"  ③必须添加 top 、left、right、bottom ",[691,133235,133236],{},"其中一个"," 才有效",[54088,133239],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[41,133242,133243],{"className":126851,"code":132644,"language":126853,"meta":46,"style":46},[48,133244,133245,133251,133263,133277,133291],{"__ignoreMap":46},[51,133246,133247,133249],{"class":53,"line":54},[51,133248,130699],{"class":57},[51,133250,15956],{"class":65},[51,133252,133253,133255,133257,133259,133261],{"class":53,"line":185},[51,133254,132657],{"class":278},[51,133256,51809],{"class":65},[51,133258,55136],{"class":278},[51,133260,130714],{"class":65},[51,133262,132666],{"class":601},[51,133264,133265,133267,133269,133271,133273,133275],{"class":53,"line":202},[51,133266,132671],{"class":278},[51,133268,51809],{"class":65},[51,133270,988],{"class":278},[51,133272,51864],{"class":69},[51,133274,132680],{"class":65},[51,133276,132683],{"class":601},[51,133278,133279,133281,133283,133285,133287,133289],{"class":53,"line":209},[51,133280,132688],{"class":278},[51,133282,51809],{"class":65},[51,133284,1242],{"class":278},[51,133286,51864],{"class":69},[51,133288,132697],{"class":65},[51,133290,132700],{"class":601},[51,133292,133293],{"class":53,"line":223},[51,133294,1974],{"class":65},[460,133296],{"style":126707,"src":133297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[10,133299,133300],{},"(6)总结",[679,133302,133303,133318],{},[682,133304,133305],{},[685,133306,133307,133309,133312,133315],{},[688,133308,132641],{"align":24119},[688,133310,133311],{"align":24119},"是否脱标",[688,133313,133314],{"align":24119},"移动位置",[688,133316,133317],{"align":24119},"是否常用",[726,133319,133320,133333,133347,133361,133374],{},[685,133321,133322,133325,133327,133330],{},[731,133323,133324],{"align":24119},"Static 静态定位",[731,133326,105050],{"align":24119},[731,133328,133329],{"align":24119},"不能使用边偏移",[731,133331,133332],{"align":24119},"很少",[685,133334,133335,133338,133341,133344],{},[731,133336,133337],{"align":24119},"Relative 相对定位",[731,133339,133340],{"align":24119},"否(占有位置)",[731,133342,133343],{"align":24119},"相对于自身位置移动",[731,133345,133346],{"align":24119},"基本单独使用",[685,133348,133349,133352,133355,133358],{},[731,133350,133351],{"align":24119},"Absolute 绝对定位",[731,133353,133354],{"align":24119},"是(不占有位置)",[731,133356,133357],{"align":24119},"带有定位的父级",[731,133359,133360],{"align":24119},"要和定位父级元素搭配使用",[685,133362,133363,133366,133368,133371],{},[731,133364,133365],{"align":24119},"Fixed 固定定位",[731,133367,133354],{"align":24119},[731,133369,133370],{"align":24119},"浏览器可视区",[731,133372,133373],{"align":24119},"单独使用,不需要父级",[685,133375,133376,133379,133381,133383],{},[731,133377,133378],{"align":24119},"Sticky 粘性定位",[731,133380,133340],{"align":24119},[731,133382,133370],{"align":24119},[731,133384,133385],{"align":24119},"当前阶段少",[19,133387,133388],{"start":185},[22,133389,133390,133393],{},[691,133391,133392],{},"边偏移"," 则决定了该元素的最终位置",[679,133395,133396,133407],{},[682,133397,133398],{},[685,133399,133400,133403,133405],{},[688,133401,133402],{"align":24119},"边偏移属性",[688,133404,27874],{"align":24119},[688,133406,27871],{"align":24119},[726,133408,133409,133420,133431,133441],{},[685,133410,133411,133414,133417],{},[731,133412,133413],{"align":24119},"top",[731,133415,133416],{"align":24119},"top: 80px;",[731,133418,133419],{"align":24119},"顶端偏移量，定义元素相对于父元素上边线的距离",[685,133421,133422,133425,133428],{},[731,133423,133424],{"align":24119},"bottom",[731,133426,133427],{"align":24119},"bottom: 80px ;",[731,133429,133430],{"align":24119},"底部偏移量，定义元素相对于其父元素下边线的距离",[685,133432,133433,133435,133438],{},[731,133434,24119],{"align":24119},[731,133436,133437],{"align":24119},"left: 80px ;",[731,133439,133440],{"align":24119},"左侧偏移量，定义元素相对于其父元素左边线的距离",[685,133442,133443,133445,133448],{},[731,133444,72894],{"align":24119},[731,133446,133447],{"align":24119},"right: 80px ;",[731,133449,133450],{"align":24119},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1549,133452,133453],{},[22,133454,9409,133455,133457,133458,133460,133461,133463,133464,133467,133468,133470,133471,133473],{},[54088,133456],{},"  ① ",[691,133459,133392],{}," 需要和 ",[691,133462,132641],{}," 联合使用， ",[691,133465,133466],{},"单独使用无效"," ；",[54088,133469],{},"  ②top和bottom不要同时使用",[54088,133472],{},"  ③left和right不要同时使用",[22381,133475,133477],{"id":133476},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[10,133479,133480],{},"子级是绝对定位的话，父级要用相对定位",[1549,133482,133483,133486,133489,133492],{},[22,133484,133485],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[22,133487,133488],{},"父盒子需要加定位限制子盒子在父盒子内显示",[22,133490,133491],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[22,133493,133494,133495,133498],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[691,133496,133497],{},"子绝父绝"," 也会遇到",[22381,133500,133502],{"id":133501},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1549,133504,133505,133520],{},[22,133506,133507,133508,133511,133512,133515,133516,133519],{},"在使用 ",[691,133509,133510],{},"定位"," 布局时，可能会 ",[691,133513,133514],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[691,133517,133518],{},"z-index"," 来控制盒子的前后次序 (z轴)",[22,133521,5566],{},[41,133523,133524],{"className":126851,"code":132644,"language":126853,"meta":46,"style":46},[48,133525,133526,133532,133544,133558,133572],{"__ignoreMap":46},[51,133527,133528,133530],{"class":53,"line":54},[51,133529,130699],{"class":57},[51,133531,15956],{"class":65},[51,133533,133534,133536,133538,133540,133542],{"class":53,"line":185},[51,133535,132657],{"class":278},[51,133537,51809],{"class":65},[51,133539,55136],{"class":278},[51,133541,130714],{"class":65},[51,133543,132666],{"class":601},[51,133545,133546,133548,133550,133552,133554,133556],{"class":53,"line":202},[51,133547,132671],{"class":278},[51,133549,51809],{"class":65},[51,133551,988],{"class":278},[51,133553,51864],{"class":69},[51,133555,132680],{"class":65},[51,133557,132683],{"class":601},[51,133559,133560,133562,133564,133566,133568,133570],{"class":53,"line":209},[51,133561,132688],{"class":278},[51,133563,51809],{"class":65},[51,133565,1242],{"class":278},[51,133567,51864],{"class":69},[51,133569,132697],{"class":65},[51,133571,132700],{"class":601},[51,133573,133574],{"class":53,"line":223},[51,133575,1974],{"class":65},[1549,133577,133578],{},[22,133579,133580,133581,133457,133583,133585,133586,128014,133589,82911,133592,133594,133595,133597,133598,133601,133602,133467,133605,133607,133608,133611,133613],{},"z-index的特性",[54088,133582],{},[691,133584,127315],{}," ： ",[691,133587,133588],{},"正整数",[691,133590,133591],{},"负整数",[691,133593,733],{}," ，默认值是 0，数值越大，盒子越靠上；",[54088,133596],{},"  ②如果 ",[691,133599,133600],{},"属性值相同"," ，则按照书写顺序， ",[691,133603,133604],{},"后来居上",[54088,133606],{},"  ③数字后面 ",[691,133609,133610],{},"不能加单位",[54088,133612],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22381,133615,133617],{"id":133616},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[10,133619,133620],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[10,133622,133623],{},"方法:",[1549,133625,133626,133636],{},[22,133627,133628,133629,133632,133633],{},"left: 50%; 让 ",[691,133630,133631],{},"盒子的左侧"," 移动到 ",[691,133634,133635],{},"父级元素的水平中心位置",[22,133637,133638,133639,133642,133643],{},"margin-left: -100px; 让盒子 ",[691,133640,133641],{},"向左"," 移动 ",[691,133644,133645],{},"自身宽度的一半",[22381,133647,133649],{"id":133648},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[19,133651,133652,133655],{},[22,133653,133654],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[22,133656,133657],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[10,133659,133660],{},"也就是说绝对定位和固定定位和浮动类似",[19,133662,133663],{"start":202},[22,133664,133665],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1549,133667,133668,133671,133674],{},[22,133669,133670],{},"可以用inline-block 转换为行内块",[22,133672,133673],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[22,133675,133676],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[10,133678,133679],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22381,133681,133683],{"id":133682},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[19,133685,133686,133689,133692,133695],{},[22,133687,133688],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[22,133690,133691],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[22,133693,133694],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[22,133696,133697],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[41,133699,133700],{"className":126851,"code":131317,"language":126853,"meta":46,"style":46},[48,133701,133702,133708,133718,133722,133728,133738],{"__ignoreMap":46},[51,133703,133704,133706],{"class":53,"line":54},[51,133705,131324],{"class":57},[51,133707,15956],{"class":65},[51,133709,133710,133712,133714,133716],{"class":53,"line":185},[51,133711,131331],{"class":278},[51,133713,51809],{"class":65},[51,133715,24119],{"class":278},[51,133717,1703],{"class":65},[51,133719,133720],{"class":53,"line":202},[51,133721,1974],{"class":65},[51,133723,133724,133726],{"class":53,"line":209},[51,133725,131346],{"class":57},[51,133727,15956],{"class":65},[51,133729,133730,133732,133734,133736],{"class":53,"line":223},[51,133731,131331],{"class":278},[51,133733,51809],{"class":65},[51,133735,72894],{"class":278},[51,133737,1703],{"class":65},[51,133739,133740],{"class":53,"line":237},[51,133741,1974],{"class":65},[460,133743],{"style":126707,"src":133744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22381,133746,133748],{"id":133747},"_11138-轮播图","11.1.3.8 轮播图",[460,133750],{"style":126707,"src":133751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[19,133753,133754],{},[22,133755,133756],{},"制作顺序:",[1549,133758,133759,133762,133765,133774],{},[22,133760,133761],{},"大盒子我们类名为： tb-promo 淘宝广告",[22,133763,133764],{},"里面先放一张图片",[22,133766,133767,133768,133770,133771,133773],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54088,133769],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54088,133772],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[22,133775,133776,133777,133779,133780,133782],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54088,133778],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54088,133781],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[19,133784,133785],{"start":185},[22,133786,133787],{},"代码模块",[41,133789,133791],{"className":126851,"code":133790,"language":126853,"meta":46,"style":46},"\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",[48,133792,133793,133798,133805,133815,133825,133835,133839,133844,133851,133861],{"__ignoreMap":46},[51,133794,133795],{"class":53,"line":54},[51,133796,133797],{"class":601},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[51,133799,133800,133803],{"class":53,"line":185},[51,133801,133802],{"class":57},".son",[51,133804,15956],{"class":65},[51,133806,133807,133809,133811,133813],{"class":53,"line":202},[51,133808,132657],{"class":278},[51,133810,51809],{"class":65},[51,133812,55203],{"class":278},[51,133814,1703],{"class":65},[51,133816,133817,133819,133821,133823],{"class":53,"line":209},[51,133818,132671],{"class":278},[51,133820,51809],{"class":65},[51,133822,733],{"class":278},[51,133824,1703],{"class":65},[51,133826,133827,133829,133831,133833],{"class":53,"line":223},[51,133828,132688],{"class":278},[51,133830,51809],{"class":65},[51,133832,733],{"class":278},[51,133834,1703],{"class":65},[51,133836,133837],{"class":53,"line":237},[51,133838,1974],{"class":65},[51,133840,133841],{"class":53,"line":242},[51,133842,133843],{"class":601},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[51,133845,133846,133849],{"class":53,"line":257},[51,133847,133848],{"class":57},".father",[51,133850,15956],{"class":65},[51,133852,133853,133855,133857,133859],{"class":53,"line":262},[51,133854,132657],{"class":278},[51,133856,51809],{"class":65},[51,133858,55136],{"class":278},[51,133860,1703],{"class":65},[51,133862,133863],{"class":53,"line":285},[51,133864,1974],{"class":65},[10,133866,133867],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[513,133869,133871],{"id":133870},"_1114-定位数值的移动","11.1.4 定位数值的移动",[460,133873],{"style":126707,"src":133874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[10,133876,133877],{},"✨ 黄金口诀：",[10,133879,133880],{},"\"TOP正下负上，LEFT正右负左\"",[10,133882,133883],{},"\"RIGHT正左负右，BOTTOM正上负下",[10,133885,133886],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[10,133888,133889],{},"✨ 简单记：",[10,133891,133892],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[464,133894,133895],{},"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":46,"searchDepth":185,"depth":185,"links":133897},[133898],{"id":132425,"depth":185,"text":132426,"children":133899},[133900,133901,133902,133903],{"id":132429,"depth":202,"text":132430},{"id":132444,"depth":202,"text":132445},{"id":132612,"depth":202,"text":132613},{"id":133870,"depth":202,"text":133871},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132417,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133910,"title":133911,"body":133912,"description":23760,"extension":469,"meta":135335,"navigation":205,"path":135336,"seo":135337,"stem":135338,"__hash__":135339},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133913,"toc":135314},[133914,133917,133921,133929,133933,133938,133946,133958,133962,133967,133975,133986,133990,133995,134036,134044,134048,134051,134054,134057,134151,134154,134248,134251,134345,134348,134351,134386,134389,134392,134422,134425,134428,134431,134434,134437,134440,134443,134513,134516,134520,134524,134565,134569,134575,134578,134581,134585,134588,134591,134594,134675,134678,134681,134685,134689,134692,134695,134698,134701,134704,134710,134719,134723,134742,134746,134756,134759,134762,134765,134768,134771,134774,134777,134780,134789,134793,134802,134805,134810,134863,134868,135034,135037,135040,135045,135048,135051,135054,135057,135062,135210,135213,135216,135221,135224,135229,135263,135266,135269,135273,135276,135283,135286,135289,135292,135295,135298,135301,135304,135308,135311],[14,133915,133911],{"id":133916},"_12-显示隐藏与图形资源",[486,133918,133920],{"id":133919},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1549,133922,133923,133926],{},[22,133924,133925],{},"目的:让一个元素在页面中消失或者显示出来",[22,133927,133928],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[513,133930,133932],{"id":133931},"_1211-display-显示","12.1.1 display 显示",[19,133934,133935],{},[22,133936,133937],{},"display 设置或检索对象是否及如何显示",[1549,133939,133940,133943],{},[22,133941,133942],{},"display: none;隐藏对象",[22,133944,133945],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[19,133947,133948,133955],{"start":185},[22,133949,133950,133951,133954],{},"特点： display 隐藏元素后， ",[691,133952,133953],{},"不再占"," 有原来的位置",[22,133956,133957],{},"在js中使用非常的广泛",[513,133959,133961],{"id":133960},"_1212-visibility可见性","12.1.2 visibility可见性",[19,133963,133964],{},[22,133965,133966],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1549,133968,133969,133972],{},[22,133970,133971],{},"visibility： visible；元素可见",[22,133973,133974],{},"visibility：hidden；元素隐藏",[19,133976,133977,133980,133983],{"start":185},[22,133978,133979],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[22,133981,133982],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[22,133984,133985],{},"隐藏后继续占有原有位置",[513,133987,133989],{"id":133988},"_1213-overflow溢出","12.1.3 overflow溢出",[1549,133991,133992],{},[22,133993,133994],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[679,133996,133997,134005],{},[682,133998,133999],{},[685,134000,134001,134003],{},[688,134002,127315],{"align":24119},[688,134004,27871],{"align":24119},[726,134006,134007,134015,134022,134029],{},[685,134008,134009,134012],{},[731,134010,134011],{"align":24119},"visible",[731,134013,134014],{"align":24119},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[685,134016,134017,134019],{},[731,134018,62086],{"align":24119},[731,134020,134021],{"align":24119},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[685,134023,134024,134026],{},[731,134025,129271],{"align":24119},[731,134027,134028],{"align":24119},"不管超出内容否，总是显示滚动条",[685,134030,134031,134033],{},[731,134032,73035],{"align":24119},[731,134034,134035],{"align":24119},"超出自动显示滚动条，不超出不显示滚动条",[1549,134037,134038,134041],{},[22,134039,134040],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[22,134042,134043],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[513,134045,134047],{"id":134046},"_1214-案例收获","12.1.4 案例收获",[460,134049],{"style":126707,"src":134050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[10,134052,134053],{},"问题：没做出来动态效果，使用hover没实现",[10,134055,134056],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[41,134058,134059],{"className":126851,"code":132283,"language":126853,"meta":46,"style":46},[48,134060,134061,134065,134079,134083,134097,134101,134115,134119,134133,134137],{"__ignoreMap":46},[51,134062,134063],{"class":53,"line":54},[51,134064,132290],{"class":601},[51,134066,134067,134069,134071,134073,134075,134077],{"class":53,"line":185},[51,134068,132295],{"class":57},[51,134070,80179],{"class":65},[51,134072,129211],{"class":278},[51,134074,51809],{"class":65},[51,134076,132304],{"class":278},[51,134078,129781],{"class":65},[51,134080,134081],{"class":53,"line":202},[51,134082,132311],{"class":601},[51,134084,134085,134087,134089,134091,134093,134095],{"class":53,"line":209},[51,134086,132316],{"class":57},[51,134088,80179],{"class":65},[51,134090,129211],{"class":278},[51,134092,51809],{"class":65},[51,134094,55136],{"class":278},[51,134096,129781],{"class":65},[51,134098,134099],{"class":53,"line":223},[51,134100,132331],{"class":601},[51,134102,134103,134105,134107,134109,134111,134113],{"class":53,"line":237},[51,134104,132336],{"class":57},[51,134106,80179],{"class":65},[51,134108,129211],{"class":278},[51,134110,51809],{"class":65},[51,134112,55203],{"class":278},[51,134114,129781],{"class":65},[51,134116,134117],{"class":53,"line":242},[51,134118,132351],{"class":601},[51,134120,134121,134123,134125,134127,134129,134131],{"class":53,"line":257},[51,134122,132356],{"class":57},[51,134124,80179],{"class":65},[51,134126,129211],{"class":278},[51,134128,51809],{"class":65},[51,134130,86605],{"class":278},[51,134132,129781],{"class":65},[51,134134,134135],{"class":53,"line":262},[51,134136,132371],{"class":601},[51,134138,134139,134141,134143,134145,134147,134149],{"class":53,"line":285},[51,134140,132376],{"class":57},[51,134142,80179],{"class":65},[51,134144,129211],{"class":278},[51,134146,51809],{"class":65},[51,134148,132385],{"class":278},[51,134150,129781],{"class":65},[10,134152,134153],{},"完整代码：",[41,134155,134156],{"className":126851,"code":132283,"language":126853,"meta":46,"style":46},[48,134157,134158,134162,134176,134180,134194,134198,134212,134216,134230,134234],{"__ignoreMap":46},[51,134159,134160],{"class":53,"line":54},[51,134161,132290],{"class":601},[51,134163,134164,134166,134168,134170,134172,134174],{"class":53,"line":185},[51,134165,132295],{"class":57},[51,134167,80179],{"class":65},[51,134169,129211],{"class":278},[51,134171,51809],{"class":65},[51,134173,132304],{"class":278},[51,134175,129781],{"class":65},[51,134177,134178],{"class":53,"line":202},[51,134179,132311],{"class":601},[51,134181,134182,134184,134186,134188,134190,134192],{"class":53,"line":209},[51,134183,132316],{"class":57},[51,134185,80179],{"class":65},[51,134187,129211],{"class":278},[51,134189,51809],{"class":65},[51,134191,55136],{"class":278},[51,134193,129781],{"class":65},[51,134195,134196],{"class":53,"line":223},[51,134197,132331],{"class":601},[51,134199,134200,134202,134204,134206,134208,134210],{"class":53,"line":237},[51,134201,132336],{"class":57},[51,134203,80179],{"class":65},[51,134205,129211],{"class":278},[51,134207,51809],{"class":65},[51,134209,55203],{"class":278},[51,134211,129781],{"class":65},[51,134213,134214],{"class":53,"line":242},[51,134215,132351],{"class":601},[51,134217,134218,134220,134222,134224,134226,134228],{"class":53,"line":257},[51,134219,132356],{"class":57},[51,134221,80179],{"class":65},[51,134223,129211],{"class":278},[51,134225,51809],{"class":65},[51,134227,86605],{"class":278},[51,134229,129781],{"class":65},[51,134231,134232],{"class":53,"line":262},[51,134233,132371],{"class":601},[51,134235,134236,134238,134240,134242,134244,134246],{"class":53,"line":285},[51,134237,132376],{"class":57},[51,134239,80179],{"class":65},[51,134241,129211],{"class":278},[51,134243,51809],{"class":65},[51,134245,132385],{"class":278},[51,134247,129781],{"class":65},[10,134249,134250],{},"分布思路重点详解：",[41,134252,134253],{"className":126851,"code":132283,"language":126853,"meta":46,"style":46},[48,134254,134255,134259,134273,134277,134291,134295,134309,134313,134327,134331],{"__ignoreMap":46},[51,134256,134257],{"class":53,"line":54},[51,134258,132290],{"class":601},[51,134260,134261,134263,134265,134267,134269,134271],{"class":53,"line":185},[51,134262,132295],{"class":57},[51,134264,80179],{"class":65},[51,134266,129211],{"class":278},[51,134268,51809],{"class":65},[51,134270,132304],{"class":278},[51,134272,129781],{"class":65},[51,134274,134275],{"class":53,"line":202},[51,134276,132311],{"class":601},[51,134278,134279,134281,134283,134285,134287,134289],{"class":53,"line":209},[51,134280,132316],{"class":57},[51,134282,80179],{"class":65},[51,134284,129211],{"class":278},[51,134286,51809],{"class":65},[51,134288,55136],{"class":278},[51,134290,129781],{"class":65},[51,134292,134293],{"class":53,"line":223},[51,134294,132331],{"class":601},[51,134296,134297,134299,134301,134303,134305,134307],{"class":53,"line":237},[51,134298,132336],{"class":57},[51,134300,80179],{"class":65},[51,134302,129211],{"class":278},[51,134304,51809],{"class":65},[51,134306,55203],{"class":278},[51,134308,129781],{"class":65},[51,134310,134311],{"class":53,"line":242},[51,134312,132351],{"class":601},[51,134314,134315,134317,134319,134321,134323,134325],{"class":53,"line":257},[51,134316,132356],{"class":57},[51,134318,80179],{"class":65},[51,134320,129211],{"class":278},[51,134322,51809],{"class":65},[51,134324,86605],{"class":278},[51,134326,129781],{"class":65},[51,134328,134329],{"class":53,"line":262},[51,134330,132371],{"class":601},[51,134332,134333,134335,134337,134339,134341,134343],{"class":53,"line":285},[51,134334,132376],{"class":57},[51,134336,80179],{"class":65},[51,134338,129211],{"class":278},[51,134340,51809],{"class":65},[51,134342,132385],{"class":278},[51,134344,129781],{"class":65},[460,134346],{"style":126707,"src":134347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[10,134349,134350],{},"图片太大，盒子太小，此时需要修改图片的大小",[41,134352,134354],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[48,134355,134356],{"__ignoreMap":46},[51,134357,134358,134360,134362,134364,134366,134369,134371,134373,134376,134379,134381,134384],{"class":53,"line":54},[51,134359,1452],{"class":65},[51,134361,460],{"class":51672},[51,134363,55611],{"class":57},[51,134365,70],{"class":65},[51,134367,134368],{"class":61},"\"images\u002Fpic.jpg\"",[51,134370,55619],{"class":57},[51,134372,70],{"class":65},[51,134374,134375],{"class":61},"\"描述文字\"",[51,134377,134378],{"class":57}," title",[51,134380,70],{"class":65},[51,134382,134383],{"class":61},"\"悬停提示\"",[51,134385,51679],{"class":65},[460,134387],{"style":126707,"src":134388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[10,134390,134391],{},"制造遮罩层",[41,134393,134394],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,134395,134396],{"__ignoreMap":46},[51,134397,134398,134400,134402,134404,134406,134408,134410,134412,134414,134416,134418,134420],{"class":53,"line":54},[51,134399,1452],{"class":65},[51,134401,460],{"class":51672},[51,134403,55611],{"class":57},[51,134405,70],{"class":65},[51,134407,134368],{"class":61},[51,134409,55619],{"class":57},[51,134411,70],{"class":65},[51,134413,134375],{"class":61},[51,134415,134378],{"class":57},[51,134417,70],{"class":65},[51,134419,134383],{"class":61},[51,134421,51679],{"class":65},[10,134423,134424],{},"此时是这样的为标准流",[460,134426],{"style":126707,"src":134427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[10,134429,134430],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[10,134432,134433],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[10,134435,134436],{},"让他在中间，用center(background-position)",[10,134438,134439],{},"将需要变的尽可能放到一个盒子中",[10,134441,134442],{},"放大盒子上内部盒子发生变化",[41,134444,134446],{"className":126851,"code":134445,"language":126853,"meta":46,"style":46},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[48,134447,134448,134454,134464,134468,134475,134485,134497,134509],{"__ignoreMap":46},[51,134449,134450,134452],{"class":53,"line":54},[51,134451,127918],{"class":57},[51,134453,15956],{"class":65},[51,134455,134456,134458,134460,134462],{"class":53,"line":185},[51,134457,132657],{"class":278},[51,134459,51809],{"class":65},[51,134461,55136],{"class":278},[51,134463,1703],{"class":65},[51,134465,134466],{"class":53,"line":202},[51,134467,1974],{"class":65},[51,134469,134470,134473],{"class":53,"line":209},[51,134471,134472],{"class":57},".child",[51,134474,15956],{"class":65},[51,134476,134477,134479,134481,134483],{"class":53,"line":223},[51,134478,132657],{"class":278},[51,134480,51809],{"class":65},[51,134482,55203],{"class":278},[51,134484,1703],{"class":65},[51,134486,134487,134489,134491,134493,134495],{"class":53,"line":237},[51,134488,132671],{"class":278},[51,134490,51809],{"class":65},[51,134492,1198],{"class":278},[51,134494,870],{"class":69},[51,134496,1703],{"class":65},[51,134498,134499,134501,134503,134505,134507],{"class":53,"line":242},[51,134500,132688],{"class":278},[51,134502,51809],{"class":65},[51,134504,1198],{"class":278},[51,134506,870],{"class":69},[51,134508,1703],{"class":65},[51,134510,134511],{"class":53,"line":257},[51,134512,1974],{"class":65},[10,134514,134515],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[486,134517,134519],{"id":134518},"_122-精灵图","12.2 精灵图",[513,134521,134523],{"id":134522},"_1221-理解","12.2.1 理解",[19,134525,134526,134544],{},[22,134527,134528,134529,132757,134532,134535,134536,134539,134540,134543],{},"目的： ",[691,134530,134531],{},"为了有效地减少服务器接收和发送请求的次数",[691,134533,134534],{},"提高"," 页面的 ",[691,134537,134538],{},"加载速度"," ，出现了 ",[691,134541,134542],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[22,134545,134546,134547,134549,134550,134552,134553,134555,134556,134558,134559,134561,134562,134564],{},"使用精灵图核心：",[54088,134548],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54088,134551],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54088,134554],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54088,134557],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54088,134560],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54088,134563],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[513,134566,134568],{"id":134567},"_1222-扒图","12.2.2 扒图",[41,134570,134573],{"className":134571,"code":134572,"language":5572},[5570],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[48,134574,134572],{"__ignoreMap":46},[460,134576],{"style":126707,"src":134577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[460,134579],{"style":126707,"src":134580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[513,134582,134584],{"id":134583},"_1223-精灵图的实现","12.2.3 精灵图的实现",[460,134586],{"style":126707,"src":134587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[10,134589,134590],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[460,134592],{"style":126707,"src":134593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[41,134595,134597],{"className":126851,"code":134596,"language":126853,"meta":46,"style":46},"\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",[48,134598,134599,134604,134611,134623,134635,134654,134671],{"__ignoreMap":46},[51,134600,134601],{"class":53,"line":54},[51,134602,134603],{"class":601},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[51,134605,134606,134609],{"class":53,"line":185},[51,134607,134608],{"class":57},".icon",[51,134610,15956],{"class":65},[51,134612,134613,134615,134617,134619,134621],{"class":53,"line":202},[51,134614,70940],{"class":278},[51,134616,51809],{"class":65},[51,134618,1242],{"class":278},[51,134620,51864],{"class":69},[51,134622,1703],{"class":65},[51,134624,134625,134627,134629,134631,134633],{"class":53,"line":209},[51,134626,71160],{"class":278},[51,134628,51809],{"class":65},[51,134630,1242],{"class":278},[51,134632,51864],{"class":69},[51,134634,1703],{"class":65},[51,134636,134637,134639,134641,134643,134645,134648,134650,134652],{"class":53,"line":223},[51,134638,70983],{"class":278},[51,134640,51809],{"class":65},[51,134642,62098],{"class":278},[51,134644,546],{"class":65},[51,134646,134647],{"class":248},"sprites.png",[51,134649,14098],{"class":65},[51,134651,62108],{"class":278},[51,134653,1703],{"class":65},[51,134655,134656,134658,134660,134662,134664,134667,134669],{"class":53,"line":237},[51,134657,129111],{"class":278},[51,134659,51809],{"class":65},[51,134661,52135],{"class":278},[51,134663,51864],{"class":69},[51,134665,134666],{"class":278}," -20",[51,134668,51864],{"class":69},[51,134670,1703],{"class":65},[51,134672,134673],{"class":53,"line":242},[51,134674,1974],{"class":65},[460,134676],{"style":126707,"src":134677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[10,134679,134680],{},"在前端中坐标轴的正方向是右和下",[486,134682,134684],{"id":134683},"_123-字体图标","12.3 字体图标",[513,134686,134688],{"id":134687},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[10,134690,134691],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[10,134693,134694],{},"精灵图是有诸多优点的，但是缺点很明显。",[10,134696,134697],{},"1.图片文件还是比较大的。",[10,134699,134700],{},"2.图片本身放大和缩小会失真。",[10,134702,134703],{},"3.一旦图片制作完毕想要更换非常复杂。",[10,134705,134706,134707,26122],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[691,134708,134709],{},"字体图标 iconfont",[10,134711,134712,134715,134716,28767],{},[691,134713,134714],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[691,134717,134718],{},"展示的是图标，本质属于字体",[513,134720,134722],{"id":134721},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1549,134724,134725,134730,134733,134736,134739],{},[22,134726,134727,134729],{},[691,134728,26258],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[22,134731,134732],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[22,134734,134735],{},"兼容性：几乎支持所有的浏览器，请放心使用",[22,134737,134738],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[22,134740,134741],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[513,134743,134745],{"id":134744},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1549,134747,134748],{},[22,134749,134750,134751],{},"icomoon字体库：",[780,134752,134755],{"href":134753,"rel":134754},"http:\u002F\u002Ficomoon.io\u002F",[24246],"http:\u002F\u002Ficomoon.io",[10,134757,134758],{},"进去之后点icomoon app",[460,134760],{"style":126707,"src":134761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[10,134763,134764],{},"可以对其编辑：",[460,134766],{"style":126707,"src":134767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[10,134769,134770],{},"生成字体：",[460,134772],{"style":126707,"src":134773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[10,134775,134776],{},"下载：",[460,134778],{"style":126707,"src":134779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1549,134781,134782],{},[22,134783,134784,134785],{},"阿里iconfont字体库： ",[780,134786,134787],{"href":134787,"rel":134788},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24246],[513,134790,134792],{"id":134791},"_1234-字体图标的引入","12.3.4 字体图标的引入",[19,134794,134795],{},[22,134796,134797,134798,134801],{},"把下载包里面的 ",[691,134799,134800],{},"fonts"," 文件夹放入页面根目录下",[460,134803],{"style":126707,"src":134804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[19,134806,134807],{"start":185},[22,134808,134809],{},"字体文件格式",[679,134811,134812,134821],{},[682,134813,134814],{},[685,134815,134816,134819],{},[688,134817,134818],{"align":24119},"格式",[688,134820,24123],{"align":24119},[726,134822,134823,134833,134843,134853],{},[685,134824,134825,134830],{},[731,134826,134827],{"align":24119},[691,134828,134829],{},".ttf",[731,134831,134832],{"align":24119},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[685,134834,134835,134840],{},[731,134836,134837],{"align":24119},[691,134838,134839],{},".woff",[731,134841,134842],{"align":24119},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[685,134844,134845,134850],{},[731,134846,134847],{"align":24119},[691,134848,134849],{},".eot",[731,134851,134852],{"align":24119},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[685,134854,134855,134860],{},[731,134856,134857],{"align":24119},[691,134858,134859],{},"svg",[731,134861,134862],{"align":24119},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[19,134864,134865],{"start":202},[22,134866,134867],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[41,134869,134871],{"className":126851,"code":134870,"language":126853,"meta":46,"style":46},"\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",[48,134872,134873,134878,134885,134897,134913,134938,134959,134979,134999,135003,135009,135019,135030],{"__ignoreMap":46},[51,134874,134875],{"class":53,"line":54},[51,134876,134877],{"class":601},"\u002F* 引入字体图标 *\u002F\n",[51,134879,134880,134883],{"class":53,"line":185},[51,134881,134882],{"class":69},"@font-face",[51,134884,15956],{"class":65},[51,134886,134887,134890,134892,134895],{"class":53,"line":202},[51,134888,134889],{"class":278},"  font-family",[51,134891,51809],{"class":65},[51,134893,134894],{"class":61},"'icomoon'",[51,134896,1703],{"class":65},[51,134898,134899,134902,134904,134906,134908,134911],{"class":53,"line":209},[51,134900,134901],{"class":278},"  src",[51,134903,51809],{"class":65},[51,134905,62098],{"class":278},[51,134907,546],{"class":65},[51,134909,134910],{"class":61},"'fonts\u002Ficomoon.eot'",[51,134912,3107],{"class":65},[51,134914,134915,134917,134919,134921,134923,134926,134928,134931,134933,134936],{"class":53,"line":223},[51,134916,134901],{"class":278},[51,134918,51809],{"class":65},[51,134920,62098],{"class":278},[51,134922,546],{"class":65},[51,134924,134925],{"class":61},"'fonts\u002Ficomoon.eot?#iefix'",[51,134927,14098],{"class":65},[51,134929,134930],{"class":278},"format",[51,134932,546],{"class":65},[51,134934,134935],{"class":61},"'embedded-opentype'",[51,134937,321],{"class":65},[51,134939,134940,134943,134945,134948,134950,134952,134954,134957],{"class":53,"line":237},[51,134941,134942],{"class":278},"       url",[51,134944,546],{"class":65},[51,134946,134947],{"class":61},"'fonts\u002Ficomoon.woff'",[51,134949,14098],{"class":65},[51,134951,134930],{"class":278},[51,134953,546],{"class":65},[51,134955,134956],{"class":61},"'woff'",[51,134958,321],{"class":65},[51,134960,134961,134963,134965,134968,134970,134972,134974,134977],{"class":53,"line":242},[51,134962,134942],{"class":278},[51,134964,546],{"class":65},[51,134966,134967],{"class":61},"'fonts\u002Ficomoon.ttf'",[51,134969,14098],{"class":65},[51,134971,134930],{"class":278},[51,134973,546],{"class":65},[51,134975,134976],{"class":61},"'truetype'",[51,134978,321],{"class":65},[51,134980,134981,134983,134985,134988,134990,134992,134994,134997],{"class":53,"line":257},[51,134982,134942],{"class":278},[51,134984,546],{"class":65},[51,134986,134987],{"class":61},"'fonts\u002Ficomoon.svg#icomoon'",[51,134989,14098],{"class":65},[51,134991,134930],{"class":278},[51,134993,546],{"class":65},[51,134995,134996],{"class":61},"'svg'",[51,134998,3107],{"class":65},[51,135000,135001],{"class":53,"line":262},[51,135002,1974],{"class":65},[51,135004,135005,135007],{"class":53,"line":285},[51,135006,134608],{"class":57},[51,135008,15956],{"class":65},[51,135010,135011,135013,135015,135017],{"class":53,"line":296},[51,135012,134889],{"class":278},[51,135014,51809],{"class":65},[51,135016,134894],{"class":61},[51,135018,1703],{"class":65},[51,135020,135021,135024,135026,135028],{"class":53,"line":307},[51,135022,135023],{"class":278},"  font-style",[51,135025,51809],{"class":65},[51,135027,64213],{"class":278},[51,135029,1703],{"class":65},[51,135031,135032],{"class":53,"line":324},[51,135033,1974],{"class":65},[10,135035,135036],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[460,135038],{"style":126707,"src":135039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[19,135041,135042],{"start":209},[22,135043,135044],{},"添加字体",[460,135046],{"style":126707,"src":135047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[10,135049,135050],{},"复制：",[460,135052],{"style":126707,"src":135053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[10,135055,135056],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[19,135058,135059],{"start":223},[22,135060,135061],{},"代码展示：",[41,135063,135064],{"className":126851,"code":134870,"language":126853,"meta":46,"style":46},[48,135065,135066,135070,135076,135086,135100,135122,135140,135158,135176,135180,135186,135196,135206],{"__ignoreMap":46},[51,135067,135068],{"class":53,"line":54},[51,135069,134877],{"class":601},[51,135071,135072,135074],{"class":53,"line":185},[51,135073,134882],{"class":69},[51,135075,15956],{"class":65},[51,135077,135078,135080,135082,135084],{"class":53,"line":202},[51,135079,134889],{"class":278},[51,135081,51809],{"class":65},[51,135083,134894],{"class":61},[51,135085,1703],{"class":65},[51,135087,135088,135090,135092,135094,135096,135098],{"class":53,"line":209},[51,135089,134901],{"class":278},[51,135091,51809],{"class":65},[51,135093,62098],{"class":278},[51,135095,546],{"class":65},[51,135097,134910],{"class":61},[51,135099,3107],{"class":65},[51,135101,135102,135104,135106,135108,135110,135112,135114,135116,135118,135120],{"class":53,"line":223},[51,135103,134901],{"class":278},[51,135105,51809],{"class":65},[51,135107,62098],{"class":278},[51,135109,546],{"class":65},[51,135111,134925],{"class":61},[51,135113,14098],{"class":65},[51,135115,134930],{"class":278},[51,135117,546],{"class":65},[51,135119,134935],{"class":61},[51,135121,321],{"class":65},[51,135123,135124,135126,135128,135130,135132,135134,135136,135138],{"class":53,"line":237},[51,135125,134942],{"class":278},[51,135127,546],{"class":65},[51,135129,134947],{"class":61},[51,135131,14098],{"class":65},[51,135133,134930],{"class":278},[51,135135,546],{"class":65},[51,135137,134956],{"class":61},[51,135139,321],{"class":65},[51,135141,135142,135144,135146,135148,135150,135152,135154,135156],{"class":53,"line":242},[51,135143,134942],{"class":278},[51,135145,546],{"class":65},[51,135147,134967],{"class":61},[51,135149,14098],{"class":65},[51,135151,134930],{"class":278},[51,135153,546],{"class":65},[51,135155,134976],{"class":61},[51,135157,321],{"class":65},[51,135159,135160,135162,135164,135166,135168,135170,135172,135174],{"class":53,"line":257},[51,135161,134942],{"class":278},[51,135163,546],{"class":65},[51,135165,134987],{"class":61},[51,135167,14098],{"class":65},[51,135169,134930],{"class":278},[51,135171,546],{"class":65},[51,135173,134996],{"class":61},[51,135175,3107],{"class":65},[51,135177,135178],{"class":53,"line":262},[51,135179,1974],{"class":65},[51,135181,135182,135184],{"class":53,"line":285},[51,135183,134608],{"class":57},[51,135185,15956],{"class":65},[51,135187,135188,135190,135192,135194],{"class":53,"line":296},[51,135189,134889],{"class":278},[51,135191,51809],{"class":65},[51,135193,134894],{"class":61},[51,135195,1703],{"class":65},[51,135197,135198,135200,135202,135204],{"class":53,"line":307},[51,135199,135023],{"class":278},[51,135201,51809],{"class":65},[51,135203,64213],{"class":278},[51,135205,1703],{"class":65},[51,135207,135208],{"class":53,"line":324},[51,135209,1974],{"class":65},[460,135211],{"style":126707,"src":135212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[10,135214,135215],{},"更加细节展示：",[19,135217,135218],{},[22,135219,135220],{},"html 标签内添加小图标",[460,135222],{"style":126707,"src":135223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[19,135225,135226],{"start":185},[22,135227,135228],{},"给标签定义字体",[41,135230,135231],{"className":127598,"code":130955,"language":127600,"meta":46,"style":46},[48,135232,135233,135237,135251,135255],{"__ignoreMap":46},[51,135234,135235],{"class":53,"line":54},[51,135236,130962],{"class":601},[51,135238,135239,135241,135243,135245,135247,135249],{"class":53,"line":185},[51,135240,1452],{"class":65},[51,135242,51983],{"class":51672},[51,135244,53858],{"class":57},[51,135246,70],{"class":65},[51,135248,130975],{"class":61},[51,135250,51679],{"class":65},[51,135252,135253],{"class":53,"line":202},[51,135254,130982],{"class":65},[51,135256,135257,135259,135261],{"class":53,"line":209},[51,135258,52157],{"class":65},[51,135260,51983],{"class":51672},[51,135262,51679],{"class":65},[10,135264,135265],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[460,135267],{"style":126707,"src":135268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[513,135270,135272],{"id":135271},"_1235-字体图标的追加","12.3.5 字体图标的追加",[10,135274,135275],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[10,135277,135278,135279,135282],{},"把压缩包里面的 ",[691,135280,135281],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[10,135284,135285],{},"打开网站，点下方：",[460,135287],{"style":126707,"src":135288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[460,135290],{"style":126707,"src":135291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[460,135293],{"style":126707,"src":135294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[10,135296,135297],{},"点yes重新加载",[10,135299,135300],{},"然后重复之前的操作就可以实现了",[10,135302,135303],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[513,135305,135307],{"id":135306},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[460,135309],{"style":126707,"src":135310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[464,135312,135313],{},"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":46,"searchDepth":185,"depth":185,"links":135315},[135316,135322,135327],{"id":133919,"depth":185,"text":133920,"children":135317},[135318,135319,135320,135321],{"id":133931,"depth":202,"text":133932},{"id":133960,"depth":202,"text":133961},{"id":133988,"depth":202,"text":133989},{"id":134046,"depth":202,"text":134047},{"id":134518,"depth":185,"text":134519,"children":135323},[135324,135325,135326],{"id":134522,"depth":202,"text":134523},{"id":134567,"depth":202,"text":134568},{"id":134583,"depth":202,"text":134584},{"id":134683,"depth":185,"text":134684,"children":135328},[135329,135330,135331,135332,135333,135334],{"id":134687,"depth":202,"text":134688},{"id":134721,"depth":202,"text":134722},{"id":134744,"depth":202,"text":134745},{"id":134791,"depth":202,"text":134792},{"id":135271,"depth":202,"text":135272},{"id":135306,"depth":202,"text":135307},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133911,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135341,"title":135342,"body":135343,"description":23760,"extension":469,"meta":136570,"navigation":205,"path":136571,"seo":136572,"stem":136573,"__hash__":136574},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135344,"toc":136551},[135345,135348,135352,135355,135369,135437,135467,135470,135474,135478,135580,135627,135631,135634,135637,135671,135674,135677,135680,135683,135686,135689,135692,135694,135697,135700,135703,135706,135709,135712,135715,135743,135746,135750,135753,135760,135763,135766,135792,135795,135799,135802,135805,135812,135816,135819,135821,135853,135856,135859,135871,135877,135880,135883,135886,135888,135892,135895,135898,135901,135946,135950,135952,135955,135962,136004,136007,136011,136016,136030,136034,136037,136040,136043,136046,136049,136083,136086,136089,136143,136146,136149,136152,136155,136207,136210,136213,136262,136266,136268,136271,136274,136277,136280,136283,136341,136344,136350,136353,136356,136388,136391,136395,136399,136402,136434,136438,136441,136485,136489,136492,136495,136498,136501,136504,136507,136510,136512,136515,136517,136520,136523,136526,136529,136534,136537,136539,136542,136545,136548],[14,135346,135342],{"id":135347},"_13-界面样式与布局技巧",[486,135349,135351],{"id":135350},"_131-css三角","13.1 css三角",[10,135353,135354],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1549,135356,135357,135360,135363,135366],{},[22,135358,135359],{},"用css 边框可以模拟三角效果",[22,135361,135362],{},"宽度高度为0",[22,135364,135365],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[22,135367,135368],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[41,135370,135372],{"className":126851,"code":135371,"language":126853,"meta":46,"style":46},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[48,135373,135374,135379,135386,135396,135406,135422,135433],{"__ignoreMap":46},[51,135375,135376],{"class":53,"line":54},[51,135377,135378],{"class":601},"\u002F* CSS 实现三角形 *\u002F\n",[51,135380,135381,135384],{"class":53,"line":185},[51,135382,135383],{"class":57},".triangle",[51,135385,15956],{"class":65},[51,135387,135388,135390,135392,135394],{"class":53,"line":202},[51,135389,70940],{"class":278},[51,135391,51809],{"class":65},[51,135393,733],{"class":278},[51,135395,1703],{"class":65},[51,135397,135398,135400,135402,135404],{"class":53,"line":209},[51,135399,71160],{"class":278},[51,135401,51809],{"class":65},[51,135403,733],{"class":278},[51,135405,1703],{"class":65},[51,135407,135408,135410,135412,135414,135416,135418,135420],{"class":53,"line":223},[51,135409,71268],{"class":278},[51,135411,51809],{"class":65},[51,135413,988],{"class":278},[51,135415,51864],{"class":69},[51,135417,51893],{"class":278},[51,135419,64363],{"class":278},[51,135421,1703],{"class":65},[51,135423,135424,135427,135429,135431],{"class":53,"line":237},[51,135425,135426],{"class":278},"  border-bottom-color",[51,135428,51809],{"class":65},[51,135430,62741],{"class":278},[51,135432,1703],{"class":65},[51,135434,135435],{"class":53,"line":242},[51,135436,1974],{"class":65},[41,135438,135439],{"className":126851,"code":131008,"language":126853,"meta":46,"style":46},[48,135440,135441,135447,135463],{"__ignoreMap":46},[51,135442,135443,135445],{"class":53,"line":54},[51,135444,51983],{"class":51672},[51,135446,15956],{"class":65},[51,135448,135449,135451,135453,135455,135457,135459,135461],{"class":53,"line":185},[51,135450,71268],{"class":278},[51,135452,51809],{"class":65},[51,135454,759],{"class":278},[51,135456,51864],{"class":69},[51,135458,51893],{"class":278},[51,135460,130243],{"class":278},[51,135462,1703],{"class":65},[51,135464,135465],{"class":53,"line":202},[51,135466,1974],{"class":65},[460,135468],{"style":126707,"src":135469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[486,135471,135473],{"id":135472},"_132-css用户界面样式","13.2 css用户界面样式",[513,135475,135477],{"id":135476},"_1321-鼠标样式","13.2.1 鼠标样式",[41,135479,135481],{"className":126851,"code":135480,"language":126853,"meta":46,"style":46},"\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",[48,135482,135483,135488,135507,135525,135544,135561],{"__ignoreMap":46},[51,135484,135485],{"class":53,"line":54},[51,135486,135487],{"class":601},"\u002F* 鼠标样式 *\u002F\n",[51,135489,135490,135492,135494,135497,135499,135501,135504],{"class":53,"line":185},[51,135491,51983],{"class":51672},[51,135493,80179],{"class":65},[51,135495,135496],{"class":278},"cursor",[51,135498,51809],{"class":65},[51,135500,62402],{"class":278},[51,135502,135503],{"class":65},"; }   ",[51,135505,135506],{"class":601},"\u002F* 手型 *\u002F\n",[51,135508,135509,135511,135513,135515,135517,135520,135522],{"class":53,"line":202},[51,135510,51983],{"class":51672},[51,135512,80179],{"class":65},[51,135514,135496],{"class":278},[51,135516,51809],{"class":65},[51,135518,135519],{"class":278},"default",[51,135521,135503],{"class":65},[51,135523,135524],{"class":601},"\u002F* 默认 *\u002F\n",[51,135526,135527,135529,135531,135533,135535,135538,135541],{"class":53,"line":209},[51,135528,51983],{"class":51672},[51,135530,80179],{"class":65},[51,135532,135496],{"class":278},[51,135534,51809],{"class":65},[51,135536,135537],{"class":278},"move",[51,135539,135540],{"class":65},"; }      ",[51,135542,135543],{"class":601},"\u002F* 移动 *\u002F\n",[51,135545,135546,135548,135550,135552,135554,135556,135558],{"class":53,"line":223},[51,135547,51983],{"class":51672},[51,135549,80179],{"class":65},[51,135551,135496],{"class":278},[51,135553,51809],{"class":65},[51,135555,5572],{"class":278},[51,135557,135540],{"class":65},[51,135559,135560],{"class":601},"\u002F* 文本 *\u002F\n",[51,135562,135563,135565,135567,135569,135571,135574,135577],{"class":53,"line":237},[51,135564,51983],{"class":51672},[51,135566,80179],{"class":65},[51,135568,135496],{"class":278},[51,135570,51809],{"class":65},[51,135572,135573],{"class":278},"not-allowed",[51,135575,135576],{"class":65},"; } ",[51,135578,135579],{"class":601},"\u002F* 禁止 *\u002F\n",[679,135581,135582,135590],{},[682,135583,135584],{},[685,135585,135586,135588],{},[688,135587,127315],{"align":24119},[688,135589,27871],{"align":24119},[726,135591,135592,135599,135606,135613,135620],{},[685,135593,135594,135596],{},[731,135595,135519],{"align":24119},[731,135597,135598],{"align":24119},"小白 默认",[685,135600,135601,135603],{},[731,135602,62402],{"align":24119},[731,135604,135605],{"align":24119},"小手",[685,135607,135608,135610],{},[731,135609,135537],{"align":24119},[731,135611,135612],{"align":24119},"移动",[685,135614,135615,135617],{},[731,135616,5572],{"align":24119},[731,135618,135619],{"align":24119},"文本",[685,135621,135622,135624],{},[731,135623,135573],{"align":24119},[731,135625,135626],{"align":24119},"禁止",[513,135628,135630],{"id":135629},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[10,135632,135633],{},"去除表单轮廓线",[10,135635,135636],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[41,135638,135639],{"className":126851,"code":130215,"language":126853,"meta":46,"style":46},[48,135640,135641,135645,135651,135667],{"__ignoreMap":46},[51,135642,135643],{"class":53,"line":54},[51,135644,130222],{"class":601},[51,135646,135647,135649],{"class":53,"line":185},[51,135648,51983],{"class":51672},[51,135650,15956],{"class":65},[51,135652,135653,135655,135657,135659,135661,135663,135665],{"class":53,"line":202},[51,135654,71268],{"class":278},[51,135656,51809],{"class":65},[51,135658,759],{"class":278},[51,135660,51864],{"class":69},[51,135662,51893],{"class":278},[51,135664,130243],{"class":278},[51,135666,1703],{"class":65},[51,135668,135669],{"class":53,"line":209},[51,135670,1974],{"class":65},[10,135672,135673],{},"文本域：",[460,135675],{"style":126707,"src":135676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[10,135678,135679],{},"此时会有一个空白区域",[460,135681],{"style":126707,"src":135682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[10,135684,135685],{},"写在同一行就不会出现这个问题",[460,135687],{"style":126707,"src":135688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[10,135690,135691],{},"文本域是行内块元素，一定记住！！！",[10,135693,98605],{},[460,135695],{"style":126707,"src":135696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[10,135698,135699],{},"文本域尽量放在一行",[10,135701,135702],{},"知识回顾：cols是列，rols是行",[460,135704],{"style":126707,"src":135705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[10,135707,135708],{},"它可以进行拖动，显然这是我们不愿意看到的",[460,135710],{"style":126707,"src":135711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[10,135713,135714],{},"使用resize进行解决",[41,135716,135718],{"className":126851,"code":135717,"language":126853,"meta":46,"style":46},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[48,135719,135720,135726,135739],{"__ignoreMap":46},[51,135721,135722,135724],{"class":53,"line":54},[51,135723,54193],{"class":51672},[51,135725,15956],{"class":65},[51,135727,135728,135730,135732,135734,135736],{"class":53,"line":185},[51,135729,71170],{"class":278},[51,135731,51809],{"class":65},[51,135733,55109],{"class":278},[51,135735,130714],{"class":65},[51,135737,135738],{"class":601},"\u002F* 取消表单轮廓线 *\u002F\n",[51,135740,135741],{"class":53,"line":202},[51,135742,1974],{"class":65},[10,135744,135745],{},"此时就无法通过右下方实现拖动了",[513,135747,135749],{"id":135748},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[10,135751,135752],{},"实现一个盒子中的文字和图片对齐",[10,135754,135755,135756,135759],{},"用于设置一个元素的 ",[691,135757,135758],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[10,135761,135762],{},"图片和文字默认是基线对齐",[460,135764],{"style":126707,"src":135765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[41,135767,135768],{"className":126851,"code":135717,"language":126853,"meta":46,"style":46},[48,135769,135770,135776,135788],{"__ignoreMap":46},[51,135771,135772,135774],{"class":53,"line":54},[51,135773,54193],{"class":51672},[51,135775,15956],{"class":65},[51,135777,135778,135780,135782,135784,135786],{"class":53,"line":185},[51,135779,71170],{"class":278},[51,135781,51809],{"class":65},[51,135783,55109],{"class":278},[51,135785,130714],{"class":65},[51,135787,135738],{"class":601},[51,135789,135790],{"class":53,"line":202},[51,135791,1974],{"class":65},[460,135793],{"style":126707,"src":135794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22381,135796,135798],{"id":135797},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[10,135800,135801],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[460,135803],{"style":126707,"src":135804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[10,135806,135807,135808,135811],{},"此时可以给图片、表单这些行内块元素的 ",[691,135809,135810],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22381,135813,135815],{"id":135814},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[10,135817,135818],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[10,135820,15017],{},[41,135822,135824],{"className":126851,"code":135823,"language":126853,"meta":46,"style":46},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[48,135825,135826,135831,135837,135849],{"__ignoreMap":46},[51,135827,135828],{"class":53,"line":54},[51,135829,135830],{"class":601},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[51,135832,135833,135835],{"class":53,"line":185},[51,135834,460],{"class":51672},[51,135836,15956],{"class":65},[51,135838,135839,135842,135844,135847],{"class":53,"line":202},[51,135840,135841],{"class":278},"  vertical-align",[51,135843,51809],{"class":65},[51,135845,135846],{"class":278},"middle",[51,135848,1703],{"class":65},[51,135850,135851],{"class":53,"line":209},[51,135852,1974],{"class":65},[460,135854],{"style":126707,"src":135855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[10,135857,135858],{},"主要解决方法有两种：",[19,135860,135861],{},[22,135862,135863,135866,135867,135870],{},[691,135864,135865],{},"给图片"," 添加 ",[691,135868,135869],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[10,135872,135873,135874],{},"2.把图片转换为块级元素 ",[691,135875,135876],{},"display: block",[10,135878,135879],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[10,135881,135882],{},"img {",[10,135884,135885],{},"vertical-align:middle;",[10,135887,1488],{},[513,135889,135891],{"id":135890},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[10,135893,135894],{},"效果：",[460,135896],{"style":126707,"src":135897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[10,135899,135900],{},"单行文本溢出显示省略号--必须满足三个条件：",[41,135902,135904],{"className":126851,"code":135903,"language":126853,"meta":46,"style":46},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[48,135905,135906,135911,135917,135927,135932,135942],{"__ignoreMap":46},[51,135907,135908],{"class":53,"line":54},[51,135909,135910],{"class":601},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[51,135912,135913,135915],{"class":53,"line":185},[51,135914,460],{"class":51672},[51,135916,15956],{"class":65},[51,135918,135919,135921,135923,135925],{"class":53,"line":202},[51,135920,135841],{"class":278},[51,135922,51809],{"class":65},[51,135924,135846],{"class":278},[51,135926,1703],{"class":65},[51,135928,135929],{"class":53,"line":209},[51,135930,135931],{"class":601},"  \u002F* 或 *\u002F\n",[51,135933,135934,135936,135938,135940],{"class":53,"line":223},[51,135935,128467],{"class":278},[51,135937,51809],{"class":65},[51,135939,61241],{"class":278},[51,135941,1703],{"class":65},[51,135943,135944],{"class":53,"line":237},[51,135945,1974],{"class":65},[513,135947,135949],{"id":135948},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[10,135951,135894],{},[460,135953],{"style":126707,"src":135954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[10,135956,135957,135958,135961],{},"多行文本溢出显示省略号， ",[691,135959,135960],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[41,135963,135964],{"className":126851,"code":135903,"language":126853,"meta":46,"style":46},[48,135965,135966,135970,135976,135986,135990,136000],{"__ignoreMap":46},[51,135967,135968],{"class":53,"line":54},[51,135969,135910],{"class":601},[51,135971,135972,135974],{"class":53,"line":185},[51,135973,460],{"class":51672},[51,135975,15956],{"class":65},[51,135977,135978,135980,135982,135984],{"class":53,"line":202},[51,135979,135841],{"class":278},[51,135981,51809],{"class":65},[51,135983,135846],{"class":278},[51,135985,1703],{"class":65},[51,135987,135988],{"class":53,"line":209},[51,135989,135931],{"class":601},[51,135991,135992,135994,135996,135998],{"class":53,"line":223},[51,135993,128467],{"class":278},[51,135995,51809],{"class":65},[51,135997,61241],{"class":278},[51,135999,1703],{"class":65},[51,136001,136002],{"class":53,"line":237},[51,136003,1974],{"class":65},[10,136005,136006],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[486,136008,136010],{"id":136009},"_133-常见布局技巧","13.3 常见布局技巧",[10,136012,136013],{},[691,136014,136015],{},"巧妙利用一个技术更快更好的布局：",[19,136017,136018,136021,136024,136027],{},[22,136019,136020],{},"margin负值的运用",[22,136022,136023],{},"文字围绕浮动元素",[22,136025,136026],{},"行内块的巧妙运用",[22,136028,136029],{},"CSS三角强化",[513,136031,136033],{"id":136032},"_1331-margin负值的运用","13.3.1 margin负值的运用",[10,136035,136036],{},"应用场景：",[460,136038],{"style":126707,"src":136039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[460,136041],{"style":126707,"src":136042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[10,136044,136045],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[10,136047,136048],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[41,136050,136051],{"className":126851,"code":130215,"language":126853,"meta":46,"style":46},[48,136052,136053,136057,136063,136079],{"__ignoreMap":46},[51,136054,136055],{"class":53,"line":54},[51,136056,130222],{"class":601},[51,136058,136059,136061],{"class":53,"line":185},[51,136060,51983],{"class":51672},[51,136062,15956],{"class":65},[51,136064,136065,136067,136069,136071,136073,136075,136077],{"class":53,"line":202},[51,136066,71268],{"class":278},[51,136068,51809],{"class":65},[51,136070,759],{"class":278},[51,136072,51864],{"class":69},[51,136074,51893],{"class":278},[51,136076,130243],{"class":278},[51,136078,1703],{"class":65},[51,136080,136081],{"class":53,"line":209},[51,136082,1974],{"class":65},[460,136084],{"style":126707,"src":136085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[10,136087,136088],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[41,136090,136092],{"className":126851,"code":136091,"language":126853,"meta":46,"style":46},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[48,136093,136094,136099,136105,136115,136127,136139],{"__ignoreMap":46},[51,136095,136096],{"class":53,"line":54},[51,136097,136098],{"class":601},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[51,136100,136101,136103],{"class":53,"line":185},[51,136102,130699],{"class":57},[51,136104,15956],{"class":65},[51,136106,136107,136109,136111,136113],{"class":53,"line":202},[51,136108,132657],{"class":278},[51,136110,51809],{"class":65},[51,136112,55136],{"class":278},[51,136114,1703],{"class":65},[51,136116,136117,136119,136121,136123,136125],{"class":53,"line":209},[51,136118,132671],{"class":278},[51,136120,51809],{"class":65},[51,136122,988],{"class":278},[51,136124,51864],{"class":69},[51,136126,1703],{"class":65},[51,136128,136129,136131,136133,136135,136137],{"class":53,"line":223},[51,136130,132688],{"class":278},[51,136132,51809],{"class":65},[51,136134,1242],{"class":278},[51,136136,51864],{"class":69},[51,136138,1703],{"class":65},[51,136140,136141],{"class":53,"line":237},[51,136142,1974],{"class":65},[10,136144,136145],{},"加上上述代码会发现：",[460,136147],{"style":126707,"src":136148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[10,136150,136151],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[10,136153,136154],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[41,136156,136157],{"className":126851,"code":136091,"language":126853,"meta":46,"style":46},[48,136158,136159,136163,136169,136179,136191,136203],{"__ignoreMap":46},[51,136160,136161],{"class":53,"line":54},[51,136162,136098],{"class":601},[51,136164,136165,136167],{"class":53,"line":185},[51,136166,130699],{"class":57},[51,136168,15956],{"class":65},[51,136170,136171,136173,136175,136177],{"class":53,"line":202},[51,136172,132657],{"class":278},[51,136174,51809],{"class":65},[51,136176,55136],{"class":278},[51,136178,1703],{"class":65},[51,136180,136181,136183,136185,136187,136189],{"class":53,"line":209},[51,136182,132671],{"class":278},[51,136184,51809],{"class":65},[51,136186,988],{"class":278},[51,136188,51864],{"class":69},[51,136190,1703],{"class":65},[51,136192,136193,136195,136197,136199,136201],{"class":53,"line":223},[51,136194,132688],{"class":278},[51,136196,51809],{"class":65},[51,136198,1242],{"class":278},[51,136200,51864],{"class":69},[51,136202,1703],{"class":65},[51,136204,136205],{"class":53,"line":237},[51,136206,1974],{"class":65},[10,136208,136209],{},"解决方式2：",[10,136211,136212],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[41,136214,136216],{"className":126851,"code":136215,"language":126853,"meta":46,"style":46},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[48,136217,136218,136224,136234,136246,136258],{"__ignoreMap":46},[51,136219,136220,136222],{"class":53,"line":54},[51,136221,51983],{"class":51672},[51,136223,15956],{"class":65},[51,136225,136226,136228,136230,136232],{"class":53,"line":185},[51,136227,132657],{"class":278},[51,136229,51809],{"class":65},[51,136231,55136],{"class":278},[51,136233,1703],{"class":65},[51,136235,136236,136238,136240,136242,136244],{"class":53,"line":202},[51,136237,132671],{"class":278},[51,136239,51809],{"class":65},[51,136241,988],{"class":278},[51,136243,51864],{"class":69},[51,136245,1703],{"class":65},[51,136247,136248,136250,136252,136254,136256],{"class":53,"line":209},[51,136249,132688],{"class":278},[51,136251,51809],{"class":65},[51,136253,1242],{"class":278},[51,136255,51864],{"class":69},[51,136257,1703],{"class":65},[51,136259,136260],{"class":53,"line":223},[51,136261,1974],{"class":65},[513,136263,136265],{"id":136264},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[10,136267,136036],{},[460,136269],{"style":126707,"src":136270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[10,136272,136273],{},"实现结构图：",[460,136275],{"style":126707,"src":136276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[10,136278,136279],{},"巧妙运用浮动元素不会压住文字的特性",[10,136281,136282],{},"代码显示：",[41,136284,136286],{"className":126851,"code":136285,"language":126853,"meta":46,"style":46},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[48,136287,136288,136294,136304,136308,136313,136317,136323,136337],{"__ignoreMap":46},[51,136289,136290,136292],{"class":53,"line":54},[51,136291,130699],{"class":57},[51,136293,15956],{"class":65},[51,136295,136296,136298,136300,136302],{"class":53,"line":185},[51,136297,131331],{"class":278},[51,136299,51809],{"class":65},[51,136301,24119],{"class":278},[51,136303,1703],{"class":65},[51,136305,136306],{"class":53,"line":202},[51,136307,1974],{"class":65},[51,136309,136310],{"class":53,"line":209},[51,136311,136312],{"class":65},"```Css\n",[51,136314,136315],{"class":53,"line":223},[51,136316,130694],{"class":601},[51,136318,136319,136321],{"class":53,"line":237},[51,136320,130699],{"class":57},[51,136322,15956],{"class":65},[51,136324,136325,136327,136329,136331,136333,136335],{"class":53,"line":242},[51,136326,70842],{"class":278},[51,136328,51809],{"class":65},[51,136330,733],{"class":278},[51,136332,51928],{"class":278},[51,136334,130714],{"class":65},[51,136336,130717],{"class":601},[51,136338,136339],{"class":53,"line":257},[51,136340,1974],{"class":65},[10,136342,136343],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[41,136345,136348],{"className":136346,"code":136347,"language":5572},[5570],"\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",[48,136349,136347],{"__ignoreMap":46},[460,136351],{"style":126707,"src":136352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[10,136354,136355],{},"最终展示结果：",[41,136357,136358],{"className":126851,"code":130687,"language":126853,"meta":46,"style":46},[48,136359,136360,136364,136370,136384],{"__ignoreMap":46},[51,136361,136362],{"class":53,"line":54},[51,136363,130694],{"class":601},[51,136365,136366,136368],{"class":53,"line":185},[51,136367,130699],{"class":57},[51,136369,15956],{"class":65},[51,136371,136372,136374,136376,136378,136380,136382],{"class":53,"line":202},[51,136373,70842],{"class":278},[51,136375,51809],{"class":65},[51,136377,733],{"class":278},[51,136379,51928],{"class":278},[51,136381,130714],{"class":65},[51,136383,130717],{"class":601},[51,136385,136386],{"class":53,"line":209},[51,136387,1974],{"class":65},[460,136389],{"style":126707,"src":136390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[486,136392,136394],{"id":136393},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[513,136396,136398],{"id":136397},"_1341-原理","13.4.1 原理",[460,136400],{"style":126707,"src":136401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[41,136403,136404],{"className":126851,"code":130687,"language":126853,"meta":46,"style":46},[48,136405,136406,136410,136416,136430],{"__ignoreMap":46},[51,136407,136408],{"class":53,"line":54},[51,136409,130694],{"class":601},[51,136411,136412,136414],{"class":53,"line":185},[51,136413,130699],{"class":57},[51,136415,15956],{"class":65},[51,136417,136418,136420,136422,136424,136426,136428],{"class":53,"line":202},[51,136419,70842],{"class":278},[51,136421,51809],{"class":65},[51,136423,733],{"class":278},[51,136425,51928],{"class":278},[51,136427,130714],{"class":65},[51,136429,130717],{"class":601},[51,136431,136432],{"class":53,"line":209},[51,136433,1974],{"class":65},[513,136435,136437],{"id":136436},"_1342-实例","13.4.2 实例",[460,136439],{"style":126707,"src":136440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[41,136442,136443],{"className":126851,"code":131317,"language":126853,"meta":46,"style":46},[48,136444,136445,136451,136461,136465,136471,136481],{"__ignoreMap":46},[51,136446,136447,136449],{"class":53,"line":54},[51,136448,131324],{"class":57},[51,136450,15956],{"class":65},[51,136452,136453,136455,136457,136459],{"class":53,"line":185},[51,136454,131331],{"class":278},[51,136456,51809],{"class":65},[51,136458,24119],{"class":278},[51,136460,1703],{"class":65},[51,136462,136463],{"class":53,"line":202},[51,136464,1974],{"class":65},[51,136466,136467,136469],{"class":53,"line":209},[51,136468,131346],{"class":57},[51,136470,15956],{"class":65},[51,136472,136473,136475,136477,136479],{"class":53,"line":223},[51,136474,131331],{"class":278},[51,136476,51809],{"class":65},[51,136478,72894],{"class":278},[51,136480,1703],{"class":65},[51,136482,136483],{"class":53,"line":237},[51,136484,1974],{"class":65},[486,136486,136488],{"id":136487},"_135-css的初始化","13.5 css的初始化",[10,136490,136491],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[10,136493,136494],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[10,136496,136497],{},"每个网页都必须首先进行 CSS初始化。",[10,136499,136500],{},"这里我们以 京东CSS初始化代码为例。",[10,136502,136503],{},"在网页右键查看网页源代码",[10,136505,136506],{},"找到css的link引入语句",[10,136508,136509],{},"然后ctrl+f 输入body",[10,136511,77598],{},[460,136513],{"style":126707,"src":136514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[10,136516,77621],{},[460,136518],{"style":126707,"src":136519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[10,136521,136522],{},"③打开了网页上传压缩的代码",[460,136524],{"style":126707,"src":136525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[10,136527,136528],{},"④从body前可以查看这个网页的初始化代码",[10,136530,136531],{},[691,136532,136533],{},"Unicode编码字体：",[10,136535,136536],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[10,136538,83579],{},[10,136540,136541],{},"黑体 \\9ED1\\4F53",[10,136543,136544],{},"宋体 \\5B8B\\4F53",[10,136546,136547],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[464,136549,136550],{},"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":46,"searchDepth":185,"depth":185,"links":136552},[136553,136554,136561,136565,136569],{"id":135350,"depth":185,"text":135351},{"id":135472,"depth":185,"text":135473,"children":136555},[136556,136557,136558,136559,136560],{"id":135476,"depth":202,"text":135477},{"id":135629,"depth":202,"text":135630},{"id":135748,"depth":202,"text":135749},{"id":135890,"depth":202,"text":135891},{"id":135948,"depth":202,"text":135949},{"id":136009,"depth":185,"text":136010,"children":136562},[136563,136564],{"id":136032,"depth":202,"text":136033},{"id":136264,"depth":202,"text":136265},{"id":136393,"depth":185,"text":136394,"children":136566},[136567,136568],{"id":136397,"depth":202,"text":136398},{"id":136436,"depth":202,"text":136437},{"id":136487,"depth":185,"text":136488},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135342,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136576,"title":136577,"body":136578,"description":23760,"extension":469,"meta":138264,"navigation":205,"path":138265,"seo":138266,"stem":138267,"__hash__":138268},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136579,"toc":138253},[136580,136583,136587,136591,136594,136601,136604,136607,136645,136648,136650,136664,136668,136677,136681,136686,136689,136692,136695,136730,136735,136738,136768,136771,136776,136779,136782,136812,136815,136869,136872,136876,136881,136893,136896,136900,136930,136933,136938,136941,136971,136974,136978,136995,136999,137003,137006,137039,137042,137046,137049,137052,137055,137058,137061,137172,137175,137178,137181,137283,137286,137290,137294,137298,137301,137341,137344,137346,137362,137366,137369,137374,137455,137458,137461,137587,137592,137595,137603,137606,137611,137696,137699,137703,137706,137709,137713,137733,137738,137822,137825,137830,137833,137836,137914,137917,137920,137923,137926,137929,137934,137937,137940,138012,138015,138020,138023,138120,138123,138129,138132,138135,138138,138141,138144,138147,138150,138153,138157,138162,138165,138198,138203,138206,138247,138250],[14,136581,136577],{"id":136582},"_14-html5与css3新特性",[486,136584,136586],{"id":136585},"_141-html5的新特性","14.1 HTML5的新特性",[513,136588,136590],{"id":136589},"_1411-基本标签","14.1.1 基本标签",[10,136592,136593],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[10,136595,136596,136597,136600],{},"这些新特性都有兼容性问题，基本是 ",[691,136598,136599],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[10,136602,136603],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[10,136605,136606],{},"现在使用的是新特性：",[1549,136608,136609,136615,136621,136627,136633,136639],{},[22,136610,136611,136614],{},[48,136612,136613],{},"\u003Cheader>"," 头部标签",[22,136616,136617,136620],{},[48,136618,136619],{},"\u003Cnav>"," 导航标签",[22,136622,136623,136626],{},[48,136624,136625],{},"\u003Carticle>"," 内容标签",[22,136628,136629,136632],{},[48,136630,136631],{},"\u003Csection>"," 定义文档某个区域",[22,136634,136635,136638],{},[48,136636,136637],{},"\u003Caside>"," 侧边栏标签",[22,136640,136641,136644],{},[48,136642,136643],{},"\u003Cfooter>"," 尾部标签",[460,136646],{"style":126707,"src":136647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[10,136649,574],{},[1549,136651,136652,136655,136658,136661],{},[22,136653,136654],{},"这种语义化标准主要是针对搜索引擎的",[22,136656,136657],{},"这些标签页面中可以经常使用",[22,136659,136660],{},"在IE9中，需要把这些元素转换为块级元素",[22,136662,136663],{},"移动端更喜欢使用这些标签",[513,136665,136667],{"id":136666},"_1412-多媒体标签","14.1.2 多媒体标签",[10,136669,136670,136671,136673,136674,136676],{},"音频 ",[691,136672,28556],{}," 和视频 ",[691,136675,28565],{}," 两个标签",[22381,136678,136680],{"id":136679},"_14121-视频标签-video","14.1.2.1 视频标签- video",[19,136682,136683],{},[22,136684,136685],{},"支持格式：",[460,136687],{"style":126707,"src":136688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[10,136690,136691],{},"尽量使用MP4，兼容性好",[10,136693,136694],{},"用MP4就可以",[41,136696,136698],{"className":127598,"code":136697,"language":127600,"meta":46,"style":46},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[48,136699,136700],{"__ignoreMap":46},[51,136701,136702,136704,136706,136708,136710,136713,136715,136718,136721,136724,136726,136728],{"class":53,"line":54},[51,136703,1452],{"class":65},[51,136705,28565],{"class":51672},[51,136707,55611],{"class":57},[51,136709,70],{"class":65},[51,136711,136712],{"class":61},"\"movie.mp4\"",[51,136714,92795],{"class":57},[51,136716,136717],{"class":57}," autoplay",[51,136719,136720],{"class":57}," muted",[51,136722,136723],{"class":57}," loop",[51,136725,55686],{"class":65},[51,136727,28565],{"class":51672},[51,136729,51679],{"class":65},[19,136731,136732],{"start":185},[22,136733,136734],{},"兼容写法",[10,136736,136737],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[41,136739,136740],{"className":127598,"code":136697,"language":127600,"meta":46,"style":46},[48,136741,136742],{"__ignoreMap":46},[51,136743,136744,136746,136748,136750,136752,136754,136756,136758,136760,136762,136764,136766],{"class":53,"line":54},[51,136745,1452],{"class":65},[51,136747,28565],{"class":51672},[51,136749,55611],{"class":57},[51,136751,70],{"class":65},[51,136753,136712],{"class":61},[51,136755,92795],{"class":57},[51,136757,136717],{"class":57},[51,136759,136720],{"class":57},[51,136761,136723],{"class":57},[51,136763,55686],{"class":65},[51,136765,28565],{"class":51672},[51,136767,51679],{"class":65},[10,136769,136770],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[19,136772,136773],{"start":202},[22,136774,136775],{},"video常用属性",[460,136777],{"style":126707,"src":136778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[10,136780,136781],{},"poster属性后面是跟的等待加载图片的地址",[41,136783,136784],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,136785,136786],{"__ignoreMap":46},[51,136787,136788,136790,136792,136794,136796,136798,136800,136802,136804,136806,136808,136810],{"class":53,"line":54},[51,136789,1452],{"class":65},[51,136791,460],{"class":51672},[51,136793,55611],{"class":57},[51,136795,70],{"class":65},[51,136797,134368],{"class":61},[51,136799,55619],{"class":57},[51,136801,70],{"class":65},[51,136803,134375],{"class":61},[51,136805,134378],{"class":57},[51,136807,70],{"class":65},[51,136809,134383],{"class":61},[51,136811,51679],{"class":65},[10,136813,136814],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[41,136816,136818],{"className":126851,"code":136817,"language":126853,"meta":46,"style":46},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[48,136819,136820,136825,136831,136855,136860,136865],{"__ignoreMap":46},[51,136821,136822],{"class":53,"line":54},[51,136823,136824],{"class":601},"\u002F* 2D 位移 *\u002F\n",[51,136826,136827,136829],{"class":53,"line":185},[51,136828,51983],{"class":51672},[51,136830,15956],{"class":65},[51,136832,136833,136836,136838,136841,136843,136845,136847,136849,136851,136853],{"class":53,"line":202},[51,136834,136835],{"class":278},"  transform",[51,136837,51809],{"class":65},[51,136839,136840],{"class":278},"translate",[51,136842,546],{"class":65},[51,136844,853],{"class":278},[51,136846,51864],{"class":69},[51,136848,12819],{"class":65},[51,136850,1198],{"class":278},[51,136852,51864],{"class":69},[51,136854,3107],{"class":65},[51,136856,136857],{"class":53,"line":209},[51,136858,136859],{"class":601},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[51,136861,136862],{"class":53,"line":223},[51,136863,136864],{"class":601},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[51,136866,136867],{"class":53,"line":237},[51,136868,1974],{"class":65},[10,136870,136871],{},"muted:自动静音属性",[22381,136873,136875],{"id":136874},"_14122-音频标签audio","14.1.2.2 音频标签audio",[19,136877,136878],{},[22,136879,136880],{},"基本使用",[10,136882,136883,136884,136889,136890],{},"当前 ",[691,136885,136886],{},[48,136887,136888],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[691,136891,136892],{},"mp3格式",[460,136894],{"style":126707,"src":136895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[19,136897,136898],{"start":185},[22,136899,136734],{},[41,136901,136902],{"className":127598,"code":136697,"language":127600,"meta":46,"style":46},[48,136903,136904],{"__ignoreMap":46},[51,136905,136906,136908,136910,136912,136914,136916,136918,136920,136922,136924,136926,136928],{"class":53,"line":54},[51,136907,1452],{"class":65},[51,136909,28565],{"class":51672},[51,136911,55611],{"class":57},[51,136913,70],{"class":65},[51,136915,136712],{"class":61},[51,136917,92795],{"class":57},[51,136919,136717],{"class":57},[51,136921,136720],{"class":57},[51,136923,136723],{"class":57},[51,136925,55686],{"class":65},[51,136927,28565],{"class":51672},[51,136929,51679],{"class":65},[10,136931,136932],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[19,136934,136935],{"start":202},[22,136936,136937],{},"常用属性",[460,136939],{"style":126707,"src":136940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[41,136942,136943],{"className":127598,"code":136697,"language":127600,"meta":46,"style":46},[48,136944,136945],{"__ignoreMap":46},[51,136946,136947,136949,136951,136953,136955,136957,136959,136961,136963,136965,136967,136969],{"class":53,"line":54},[51,136948,1452],{"class":65},[51,136950,28565],{"class":51672},[51,136952,55611],{"class":57},[51,136954,70],{"class":65},[51,136956,136712],{"class":61},[51,136958,92795],{"class":57},[51,136960,136717],{"class":57},[51,136962,136720],{"class":57},[51,136964,136723],{"class":57},[51,136966,55686],{"class":65},[51,136968,28565],{"class":51672},[51,136970,51679],{"class":65},[10,136972,136973],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22381,136975,136977],{"id":136976},"_14123-总结","14.1.2.3 总结",[1549,136979,136980,136983,136986,136989,136992],{},[22,136981,136982],{},"音频标签和视频标签使用方式基本一致",[22,136984,136985],{},"浏览器支持情况不同",[22,136987,136988],{},"谷歌浏览器把音频和视频自动播放禁止了",[22,136990,136991],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[22,136993,136994],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[513,136996,136998],{"id":136997},"_1413-表单元素","14.1.3 表单元素",[22381,137000,137002],{"id":137001},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[460,137004],{"style":126707,"src":137005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[41,137007,137009],{"className":127598,"code":137008,"language":127600,"meta":46,"style":46},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[48,137010,137011],{"__ignoreMap":46},[51,137012,137013,137015,137017,137019,137021,137023,137025,137027,137030,137032,137034,137037],{"class":53,"line":54},[51,137014,1452],{"class":65},[51,137016,54193],{"class":51672},[51,137018,54196],{"class":57},[51,137020,70],{"class":65},[51,137022,63071],{"class":61},[51,137024,15304],{"class":57},[51,137026,70],{"class":65},[51,137028,137029],{"class":61},"\"username\"",[51,137031,61392],{"class":57},[51,137033,70],{"class":65},[51,137035,137036],{"class":61},"\"请输入用户名\"",[51,137038,51679],{"class":65},[460,137040],{"style":126707,"src":137041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22381,137043,137045],{"id":137044},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[460,137047],{"style":126707,"src":137048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[10,137050,137051],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[10,137053,137054],{},"快捷操作：",[460,137056],{"style":126707,"src":137057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[10,137059,137060],{},"例子1：",[41,137062,137064],{"className":127598,"code":137063,"language":127600,"meta":46,"style":46},"\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",[48,137065,137066,137089,137116,137145,137164],{"__ignoreMap":46},[51,137067,137068,137070,137072,137074,137076,137079,137082,137084,137087],{"class":53,"line":54},[51,137069,1452],{"class":65},[51,137071,66997],{"class":51672},[51,137073,67000],{"class":57},[51,137075,70],{"class":65},[51,137077,137078],{"class":61},"\"\u002Fsubmit\"",[51,137080,137081],{"class":57}," method",[51,137083,70],{"class":65},[51,137085,137086],{"class":61},"\"post\"",[51,137088,51679],{"class":65},[51,137090,137091,137093,137095,137097,137099,137101,137103,137105,137107,137109,137111,137114],{"class":53,"line":185},[51,137092,52516],{"class":65},[51,137094,54193],{"class":51672},[51,137096,54196],{"class":57},[51,137098,70],{"class":65},[51,137100,63071],{"class":61},[51,137102,15304],{"class":57},[51,137104,70],{"class":65},[51,137106,137029],{"class":61},[51,137108,61392],{"class":57},[51,137110,70],{"class":65},[51,137112,137113],{"class":61},"\"用户名\"",[51,137115,51679],{"class":65},[51,137117,137118,137120,137122,137124,137126,137129,137131,137133,137136,137138,137140,137143],{"class":53,"line":202},[51,137119,52516],{"class":65},[51,137121,54193],{"class":51672},[51,137123,54196],{"class":57},[51,137125,70],{"class":65},[51,137127,137128],{"class":61},"\"password\"",[51,137130,15304],{"class":57},[51,137132,70],{"class":65},[51,137134,137135],{"class":61},"\"pwd\"",[51,137137,61392],{"class":57},[51,137139,70],{"class":65},[51,137141,137142],{"class":61},"\"密码\"",[51,137144,51679],{"class":65},[51,137146,137147,137149,137151,137153,137155,137157,137160,137162],{"class":53,"line":209},[51,137148,52516],{"class":65},[51,137150,54259],{"class":51672},[51,137152,54196],{"class":57},[51,137154,70],{"class":65},[51,137156,67020],{"class":61},[51,137158,137159],{"class":65},">提交\u003C\u002F",[51,137161,54259],{"class":51672},[51,137163,51679],{"class":65},[51,137165,137166,137168,137170],{"class":53,"line":223},[51,137167,52157],{"class":65},[51,137169,66997],{"class":51672},[51,137171,51679],{"class":65},[460,137173],{"style":126707,"src":137174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[10,137176,137177],{},"value是表单域的内容",[10,137179,137180],{},"例子2：",[41,137182,137183],{"className":127598,"code":137063,"language":127600,"meta":46,"style":46},[48,137184,137185,137205,137231,137257,137275],{"__ignoreMap":46},[51,137186,137187,137189,137191,137193,137195,137197,137199,137201,137203],{"class":53,"line":54},[51,137188,1452],{"class":65},[51,137190,66997],{"class":51672},[51,137192,67000],{"class":57},[51,137194,70],{"class":65},[51,137196,137078],{"class":61},[51,137198,137081],{"class":57},[51,137200,70],{"class":65},[51,137202,137086],{"class":61},[51,137204,51679],{"class":65},[51,137206,137207,137209,137211,137213,137215,137217,137219,137221,137223,137225,137227,137229],{"class":53,"line":185},[51,137208,52516],{"class":65},[51,137210,54193],{"class":51672},[51,137212,54196],{"class":57},[51,137214,70],{"class":65},[51,137216,63071],{"class":61},[51,137218,15304],{"class":57},[51,137220,70],{"class":65},[51,137222,137029],{"class":61},[51,137224,61392],{"class":57},[51,137226,70],{"class":65},[51,137228,137113],{"class":61},[51,137230,51679],{"class":65},[51,137232,137233,137235,137237,137239,137241,137243,137245,137247,137249,137251,137253,137255],{"class":53,"line":202},[51,137234,52516],{"class":65},[51,137236,54193],{"class":51672},[51,137238,54196],{"class":57},[51,137240,70],{"class":65},[51,137242,137128],{"class":61},[51,137244,15304],{"class":57},[51,137246,70],{"class":65},[51,137248,137135],{"class":61},[51,137250,61392],{"class":57},[51,137252,70],{"class":65},[51,137254,137142],{"class":61},[51,137256,51679],{"class":65},[51,137258,137259,137261,137263,137265,137267,137269,137271,137273],{"class":53,"line":209},[51,137260,52516],{"class":65},[51,137262,54259],{"class":51672},[51,137264,54196],{"class":57},[51,137266,70],{"class":65},[51,137268,67020],{"class":61},[51,137270,137159],{"class":65},[51,137272,54259],{"class":51672},[51,137274,51679],{"class":65},[51,137276,137277,137279,137281],{"class":53,"line":223},[51,137278,52157],{"class":65},[51,137280,66997],{"class":51672},[51,137282,51679],{"class":65},[460,137284],{"style":126707,"src":137285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[486,137287,137289],{"id":137288},"_142-css新特性","14.2 CSS新特性",[513,137291,137293],{"id":137292},"_1421-新增选择器","14.2.1 新增选择器",[22381,137295,137297],{"id":137296},"_14211-属性选择器","14.2.1.1 属性选择器",[460,137299],{"style":126707,"src":137300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[41,137302,137304],{"className":126851,"code":137303,"language":126853,"meta":46,"style":46},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[48,137305,137306,137321,137337],{"__ignoreMap":46},[51,137307,137308,137310,137312,137314,137316,137318],{"class":53,"line":54},[51,137309,54193],{"class":51672},[51,137311,1432],{"class":65},[51,137313,103479],{"class":57},[51,137315,70],{"class":69},[51,137317,63071],{"class":61},[51,137319,137320],{"class":65},"] {\n",[51,137322,137323,137325,137327,137329,137331,137333,137335],{"class":53,"line":185},[51,137324,71268],{"class":278},[51,137326,51809],{"class":65},[51,137328,759],{"class":278},[51,137330,51864],{"class":69},[51,137332,51893],{"class":278},[51,137334,130431],{"class":278},[51,137336,1703],{"class":65},[51,137338,137339],{"class":53,"line":202},[51,137340,1974],{"class":65},[460,137342],{"style":126707,"src":137343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[10,137345,574],{},[1549,137347,137348,137351,137354,137357],{},[22,137349,137350],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[22,137352,137353],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[22,137355,137356],{},"属性选择器也可以选择出来自定义的属性",[22,137358,137359,137361],{},[691,137360,9409],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22381,137363,137365],{"id":137364},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[460,137367],{"style":126707,"src":137368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[19,137370,137371],{},[22,137372,137373],{},"fist-child",[41,137375,137377],{"className":126851,"code":137376,"language":126853,"meta":46,"style":46},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[48,137378,137379,137384,137399,137419,137437],{"__ignoreMap":46},[51,137380,137381],{"class":53,"line":54},[51,137382,137383],{"class":601},"\u002F* 属性选择器 *\u002F\n",[51,137385,137386,137388,137390,137392,137394,137396],{"class":53,"line":185},[51,137387,54193],{"class":51672},[51,137389,1432],{"class":65},[51,137391,103479],{"class":57},[51,137393,70],{"class":69},[51,137395,63071],{"class":61},[51,137397,137398],{"class":65},"] { }\n",[51,137400,137401,137403,137405,137407,137410,137413,137416],{"class":53,"line":202},[51,137402,54193],{"class":51672},[51,137404,1432],{"class":65},[51,137406,15078],{"class":57},[51,137408,137409],{"class":69},"^=",[51,137411,137412],{"class":61},"\"icon\"",[51,137414,137415],{"class":65},"] { }  ",[51,137417,137418],{"class":601},"\u002F* 以 icon 开头 *\u002F\n",[51,137420,137421,137423,137425,137427,137430,137432,137434],{"class":53,"line":209},[51,137422,54193],{"class":51672},[51,137424,1432],{"class":65},[51,137426,15078],{"class":57},[51,137428,137429],{"class":69},"$=",[51,137431,137412],{"class":61},[51,137433,137415],{"class":65},[51,137435,137436],{"class":601},"\u002F* 以 icon 结尾 *\u002F\n",[51,137438,137439,137441,137443,137445,137448,137450,137452],{"class":53,"line":223},[51,137440,54193],{"class":51672},[51,137442,1432],{"class":65},[51,137444,15078],{"class":57},[51,137446,137447],{"class":69},"*=",[51,137449,137412],{"class":61},[51,137451,137415],{"class":65},[51,137453,137454],{"class":601},"\u002F* 包含 icon *\u002F\n",[10,137456,137457],{},"ul的第一个儿子文本为红色",[10,137459,137460],{},"一定要在冒号前加空格，不然就是选中所有的了",[41,137462,137464],{"className":126851,"code":137463,"language":126853,"meta":46,"style":46},".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",[48,137465,137466,137472,137482,137486,137490,137495,137508,137521,137537,137554,137571],{"__ignoreMap":46},[51,137467,137468,137470],{"class":53,"line":54},[51,137469,127142],{"class":57},[51,137471,15956],{"class":65},[51,137473,137474,137476,137478,137480],{"class":53,"line":185},[51,137475,71277],{"class":278},[51,137477,51809],{"class":65},[51,137479,57793],{"class":278},[51,137481,1703],{"class":65},[51,137483,137484],{"class":53,"line":202},[51,137485,1974],{"class":65},[51,137487,137488],{"class":53,"line":209},[51,137489,136312],{"class":65},[51,137491,137492],{"class":53,"line":223},[51,137493,137494],{"class":601},"\u002F* 结构伪类选择器 *\u002F\n",[51,137496,137497,137499,137502,137505],{"class":53,"line":237},[51,137498,22],{"class":51672},[51,137500,137501],{"class":57},":first-child",[51,137503,137504],{"class":65}," { }           ",[51,137506,137507],{"class":601},"\u002F* 第一个 *\u002F\n",[51,137509,137510,137512,137515,137518],{"class":53,"line":242},[51,137511,22],{"class":51672},[51,137513,137514],{"class":57},":last-child",[51,137516,137517],{"class":65}," { }            ",[51,137519,137520],{"class":601},"\u002F* 最后一个 *\u002F\n",[51,137522,137523,137525,137527,137529,137531,137534],{"class":53,"line":257},[51,137524,22],{"class":51672},[51,137526,129765],{"class":57},[51,137528,546],{"class":65},[51,137530,620],{"class":278},[51,137532,137533],{"class":65},") { }          ",[51,137535,137536],{"class":601},"\u002F* 第2个 *\u002F\n",[51,137538,137539,137541,137543,137545,137548,137551],{"class":53,"line":262},[51,137540,22],{"class":51672},[51,137542,129765],{"class":57},[51,137544,546],{"class":65},[51,137546,137547],{"class":278},"2n",[51,137549,137550],{"class":65},") { }         ",[51,137552,137553],{"class":601},"\u002F* 偶数 *\u002F\n",[51,137555,137556,137558,137560,137562,137565,137568],{"class":53,"line":285},[51,137557,22],{"class":51672},[51,137559,129765],{"class":57},[51,137561,546],{"class":65},[51,137563,137564],{"class":278},"2n+1",[51,137566,137567],{"class":65},") { }       ",[51,137569,137570],{"class":601},"\u002F* 奇数 *\u002F\n",[51,137572,137573,137575,137577,137579,137582,137584],{"class":53,"line":296},[51,137574,22],{"class":51672},[51,137576,129765],{"class":57},[51,137578,546],{"class":65},[51,137580,137581],{"class":278},"-n+3",[51,137583,137567],{"class":65},[51,137585,137586],{"class":601},"\u002F* 前3个 *\u002F\n",[51983,137588,137591],{"className":137589},[137590],"example","\n  示例内容\n",[10,137593,137594],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1549,137596,137597],{},[22,137598,137599,137602],{},[48,137600,137601],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[10,137604,137605],{},"也就是说它选择的是熊大",[19,137607,137608],{"start":237},[22,137609,137610],{},"权重",[41,137612,137614],{"className":126851,"code":137613,"language":126853,"meta":46,"style":46},"\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",[48,137615,137616,137620,137630,137640,137654,137668,137682],{"__ignoreMap":46},[51,137617,137618],{"class":53,"line":54},[51,137619,137494],{"class":601},[51,137621,137622,137624,137626,137628],{"class":53,"line":185},[51,137623,22],{"class":51672},[51,137625,137501],{"class":57},[51,137627,137504],{"class":65},[51,137629,137507],{"class":601},[51,137631,137632,137634,137636,137638],{"class":53,"line":202},[51,137633,22],{"class":51672},[51,137635,137514],{"class":57},[51,137637,137517],{"class":65},[51,137639,137520],{"class":601},[51,137641,137642,137644,137646,137648,137650,137652],{"class":53,"line":209},[51,137643,22],{"class":51672},[51,137645,129765],{"class":57},[51,137647,546],{"class":65},[51,137649,620],{"class":278},[51,137651,137533],{"class":65},[51,137653,137536],{"class":601},[51,137655,137656,137658,137660,137662,137664,137666],{"class":53,"line":223},[51,137657,22],{"class":51672},[51,137659,129765],{"class":57},[51,137661,546],{"class":65},[51,137663,137547],{"class":278},[51,137665,137550],{"class":65},[51,137667,137553],{"class":601},[51,137669,137670,137672,137674,137676,137678,137680],{"class":53,"line":237},[51,137671,22],{"class":51672},[51,137673,129765],{"class":57},[51,137675,546],{"class":65},[51,137677,137564],{"class":278},[51,137679,137567],{"class":65},[51,137681,137570],{"class":601},[51,137683,137684,137686,137688,137690,137692,137694],{"class":53,"line":242},[51,137685,22],{"class":51672},[51,137687,129765],{"class":57},[51,137689,546],{"class":65},[51,137691,137581],{"class":278},[51,137693,137567],{"class":65},[51,137695,137586],{"class":601},[10,137697,137698],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22381,137700,137702],{"id":137701},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[10,137704,137705],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[460,137707],{"style":126707,"src":137708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[19,137710,137711],{},[22,137712,574],{},[1549,137714,137715,137718,137721,137724,137727,137730],{},[22,137716,137717],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[22,137719,137720],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[22,137722,137723],{},"语法： element::before {}",[22,137725,137726],{},"before 和 after 必须有 content 属性",[22,137728,137729],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[22,137731,137732],{},"伪元素选择器和标签选择器一样，权重为 1",[19,137734,137735],{"start":185},[22,137736,137737],{},"实例",[41,137739,137740],{"className":126851,"code":137613,"language":126853,"meta":46,"style":46},[48,137741,137742,137746,137756,137766,137780,137794,137808],{"__ignoreMap":46},[51,137743,137744],{"class":53,"line":54},[51,137745,137494],{"class":601},[51,137747,137748,137750,137752,137754],{"class":53,"line":185},[51,137749,22],{"class":51672},[51,137751,137501],{"class":57},[51,137753,137504],{"class":65},[51,137755,137507],{"class":601},[51,137757,137758,137760,137762,137764],{"class":53,"line":202},[51,137759,22],{"class":51672},[51,137761,137514],{"class":57},[51,137763,137517],{"class":65},[51,137765,137520],{"class":601},[51,137767,137768,137770,137772,137774,137776,137778],{"class":53,"line":209},[51,137769,22],{"class":51672},[51,137771,129765],{"class":57},[51,137773,546],{"class":65},[51,137775,620],{"class":278},[51,137777,137533],{"class":65},[51,137779,137536],{"class":601},[51,137781,137782,137784,137786,137788,137790,137792],{"class":53,"line":223},[51,137783,22],{"class":51672},[51,137785,129765],{"class":57},[51,137787,546],{"class":65},[51,137789,137547],{"class":278},[51,137791,137550],{"class":65},[51,137793,137553],{"class":601},[51,137795,137796,137798,137800,137802,137804,137806],{"class":53,"line":237},[51,137797,22],{"class":51672},[51,137799,129765],{"class":57},[51,137801,546],{"class":65},[51,137803,137564],{"class":278},[51,137805,137567],{"class":65},[51,137807,137570],{"class":601},[51,137809,137810,137812,137814,137816,137818,137820],{"class":53,"line":242},[51,137811,22],{"class":51672},[51,137813,129765],{"class":57},[51,137815,546],{"class":65},[51,137817,137581],{"class":278},[51,137819,137567],{"class":65},[51,137821,137586],{"class":601},[460,137823],{"style":126707,"src":137824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[19,137826,137827],{"start":202},[22,137828,137829],{},"使用场景1",[460,137831],{"style":126707,"src":137832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[10,137834,137835],{},"不需要再加盒子来整红色那部分了",[41,137837,137839],{"className":126851,"code":137838,"language":126853,"meta":46,"style":46},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[48,137840,137841,137846,137855,137866,137876,137880,137889,137900,137910],{"__ignoreMap":46},[51,137842,137843],{"class":53,"line":54},[51,137844,137845],{"class":601},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[51,137847,137848,137850,137853],{"class":53,"line":185},[51,137849,51983],{"class":51672},[51,137851,137852],{"class":57},"::before",[51,137854,15956],{"class":65},[51,137856,137857,137860,137862,137864],{"class":53,"line":202},[51,137858,137859],{"class":278},"  content",[51,137861,51809],{"class":65},[51,137863,8036],{"class":61},[51,137865,1703],{"class":65},[51,137867,137868,137870,137872,137874],{"class":53,"line":209},[51,137869,128467],{"class":278},[51,137871,51809],{"class":65},[51,137873,61241],{"class":278},[51,137875,1703],{"class":65},[51,137877,137878],{"class":53,"line":223},[51,137879,1974],{"class":65},[51,137881,137882,137884,137887],{"class":53,"line":237},[51,137883,51983],{"class":51672},[51,137885,137886],{"class":57},"::after",[51,137888,15956],{"class":65},[51,137890,137891,137893,137895,137898],{"class":53,"line":242},[51,137892,137859],{"class":278},[51,137894,51809],{"class":65},[51,137896,137897],{"class":61},"\"→\"",[51,137899,1703],{"class":65},[51,137901,137902,137904,137906,137908],{"class":53,"line":257},[51,137903,71277],{"class":278},[51,137905,51809],{"class":65},[51,137907,62442],{"class":278},[51,137909,1703],{"class":65},[51,137911,137912],{"class":53,"line":262},[51,137913,1974],{"class":65},[460,137915],{"style":126707,"src":137916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[10,137918,137919],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[460,137921],{"style":126707,"src":137922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[10,137924,137925],{},"但是在引用时需要先转义一下",[10,137927,137928],{},"content='\\e930'",[19,137930,137931],{"start":209},[22,137932,137933],{},"使用场景2",[10,137935,137936],{},"仿土豆效果",[10,137938,137939],{},"通过使用伪元素选择器可以减少body中盒子的数量",[41,137941,137942],{"className":126851,"code":137838,"language":126853,"meta":46,"style":46},[48,137943,137944,137948,137956,137966,137976,137980,137988,137998,138008],{"__ignoreMap":46},[51,137945,137946],{"class":53,"line":54},[51,137947,137845],{"class":601},[51,137949,137950,137952,137954],{"class":53,"line":185},[51,137951,51983],{"class":51672},[51,137953,137852],{"class":57},[51,137955,15956],{"class":65},[51,137957,137958,137960,137962,137964],{"class":53,"line":202},[51,137959,137859],{"class":278},[51,137961,51809],{"class":65},[51,137963,8036],{"class":61},[51,137965,1703],{"class":65},[51,137967,137968,137970,137972,137974],{"class":53,"line":209},[51,137969,128467],{"class":278},[51,137971,51809],{"class":65},[51,137973,61241],{"class":278},[51,137975,1703],{"class":65},[51,137977,137978],{"class":53,"line":223},[51,137979,1974],{"class":65},[51,137981,137982,137984,137986],{"class":53,"line":237},[51,137983,51983],{"class":51672},[51,137985,137886],{"class":57},[51,137987,15956],{"class":65},[51,137989,137990,137992,137994,137996],{"class":53,"line":242},[51,137991,137859],{"class":278},[51,137993,51809],{"class":65},[51,137995,137897],{"class":61},[51,137997,1703],{"class":65},[51,137999,138000,138002,138004,138006],{"class":53,"line":257},[51,138001,71277],{"class":278},[51,138003,51809],{"class":65},[51,138005,62442],{"class":278},[51,138007,1703],{"class":65},[51,138009,138010],{"class":53,"line":262},[51,138011,1974],{"class":65},[460,138013],{"style":126707,"src":138014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[19,138016,138017],{"start":223},[22,138018,138019],{},"使用场景3",[10,138021,138022],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[41,138024,138026],{"className":126851,"code":138025,"language":126853,"meta":46,"style":46},".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",[48,138027,138028,138034,138044,138048,138052,138056,138064,138074,138084,138088,138096,138106,138116],{"__ignoreMap":46},[51,138029,138030,138032],{"class":53,"line":54},[51,138031,130699],{"class":57},[51,138033,15956],{"class":65},[51,138035,138036,138038,138040,138042],{"class":53,"line":185},[51,138037,131331],{"class":278},[51,138039,51809],{"class":65},[51,138041,24119],{"class":278},[51,138043,1703],{"class":65},[51,138045,138046],{"class":53,"line":202},[51,138047,1974],{"class":65},[51,138049,138050],{"class":53,"line":209},[51,138051,136312],{"class":65},[51,138053,138054],{"class":53,"line":223},[51,138055,137845],{"class":601},[51,138057,138058,138060,138062],{"class":53,"line":237},[51,138059,51983],{"class":51672},[51,138061,137852],{"class":57},[51,138063,15956],{"class":65},[51,138065,138066,138068,138070,138072],{"class":53,"line":242},[51,138067,137859],{"class":278},[51,138069,51809],{"class":65},[51,138071,8036],{"class":61},[51,138073,1703],{"class":65},[51,138075,138076,138078,138080,138082],{"class":53,"line":257},[51,138077,128467],{"class":278},[51,138079,51809],{"class":65},[51,138081,61241],{"class":278},[51,138083,1703],{"class":65},[51,138085,138086],{"class":53,"line":262},[51,138087,1974],{"class":65},[51,138089,138090,138092,138094],{"class":53,"line":285},[51,138091,51983],{"class":51672},[51,138093,137886],{"class":57},[51,138095,15956],{"class":65},[51,138097,138098,138100,138102,138104],{"class":53,"line":296},[51,138099,137859],{"class":278},[51,138101,51809],{"class":65},[51,138103,137897],{"class":61},[51,138105,1703],{"class":65},[51,138107,138108,138110,138112,138114],{"class":53,"line":307},[51,138109,71277],{"class":278},[51,138111,51809],{"class":65},[51,138113,62442],{"class":278},[51,138115,1703],{"class":65},[51,138117,138118],{"class":53,"line":324},[51,138119,1974],{"class":65},[10,138121,138122],{},"div {\nmargin: 0 auto;\n}",[41,138124,138127],{"className":138125,"code":138126,"language":5572},[5570],"\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",[48,138128,138126],{"__ignoreMap":46},[10,138130,138131],{},"如果想让多个元素都发生变化",[10,138133,138134],{},"不能如下操作：",[10,138136,138137],{},"transition: width 2s ease 0.5s;",[10,138139,138140],{},"transition: height 2s ease 0.5s;不对！！！",[10,138142,138143],{},"上方会样式冲突，导致不显示任何过渡效果",[10,138145,138146],{},"使用如下：加逗号隔开",[10,138148,138149],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[10,138151,138152],{},"transition all 2s ease;",[513,138154,138156],{"id":138155},"_1426-过渡练习","14.2.6 过渡练习",[19,138158,138159],{},[22,138160,138161],{},"进度条",[460,138163],{"style":126707,"src":138164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[41,138166,138168],{"className":126851,"code":138167,"language":126853,"meta":46,"style":46},"div {\n  transition: all 0.3s ease;\n}\n",[48,138169,138170,138176,138194],{"__ignoreMap":46},[51,138171,138172,138174],{"class":53,"line":54},[51,138173,51983],{"class":51672},[51,138175,15956],{"class":65},[51,138177,138178,138181,138183,138185,138188,138190,138192],{"class":53,"line":185},[51,138179,138180],{"class":278},"  transition",[51,138182,51809],{"class":65},[51,138184,28503],{"class":278},[51,138186,138187],{"class":278}," 0.3",[51,138189,1237],{"class":69},[51,138191,79052],{"class":278},[51,138193,1703],{"class":65},[51,138195,138196],{"class":53,"line":202},[51,138197,1974],{"class":65},[19,138199,138200],{"start":185},[22,138201,138202],{},"小米logo",[10,138204,138205],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[41,138207,138209],{"className":126851,"code":138208,"language":126853,"meta":46,"style":46},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[48,138210,138211,138216,138222,138238,138243],{"__ignoreMap":46},[51,138212,138213],{"class":53,"line":54},[51,138214,138215],{"class":601},"\u002F* CSS3 过渡 *\u002F\n",[51,138217,138218,138220],{"class":53,"line":185},[51,138219,51983],{"class":51672},[51,138221,15956],{"class":65},[51,138223,138224,138226,138228,138230,138232,138234,138236],{"class":53,"line":202},[51,138225,138180],{"class":278},[51,138227,51809],{"class":65},[51,138229,28503],{"class":278},[51,138231,138187],{"class":278},[51,138233,1237],{"class":69},[51,138235,79052],{"class":278},[51,138237,1703],{"class":65},[51,138239,138240],{"class":53,"line":209},[51,138241,138242],{"class":601},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[51,138244,138245],{"class":53,"line":223},[51,138246,1974],{"class":65},[10,138248,138249],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[464,138251,138252],{},"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":46,"searchDepth":185,"depth":185,"links":138254},[138255,138260],{"id":136585,"depth":185,"text":136586,"children":138256},[138257,138258,138259],{"id":136589,"depth":202,"text":136590},{"id":136666,"depth":202,"text":136667},{"id":136997,"depth":202,"text":136998},{"id":137288,"depth":185,"text":137289,"children":138261},[138262,138263],{"id":137292,"depth":202,"text":137293},{"id":138155,"depth":202,"text":138156},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136577,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138270,"title":138271,"body":138272,"description":23760,"extension":469,"meta":140016,"navigation":205,"path":140017,"seo":140018,"stem":140019,"__hash__":140020},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138273,"toc":139997},[138274,138277,138281,138284,138290,138296,138300,138302,138305,138308,138311,138314,138317,138320,138323,138327,138331,138334,138337,138340,138344,138347,138350,138355,138358,138361,138364,138368,138371,138380,138383,138386,138390,138393,138396,138401,138408,138422,138430,138437,138442,138445,138448,138451,138458,138462,138468,138474,138477,138480,138485,138491,138493,138501,138506,138509,138515,138517,138522,138527,138530,138532,138537,138540,138545,138550,138584,138588,138592,138595,138599,138602,138688,138691,138728,138731,138767,138771,138776,138789,138843,138845,138873,138875,138903,138909,138923,138925,138969,138971,139015,139018,139025,139036,139038,139065,139067,139093,139100,139116,139118,139212,139214,139308,139315,139318,139323,139329,139403,139406,139408,139444,139446,139482,139485,139492,139511,139514,139517,139519,139544,139546,139570,139573,139576,139606,139610,139613,139676,139678,139744,139746,139810,139813,139845,139847,139873,139875,139901,139904,139935,139937,139963,139965,139991,139994],[14,138275,138271],{"id":138276},"_15-品优购项目上篇-搭建与公共模块",[486,138278,138280],{"id":138279},"_151-项目规划","15.1 项目规划",[460,138282],{"style":126707,"src":138283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[10,138285,138286,138289],{},[691,138287,138288],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[10,138291,138292,138295],{},[691,138293,138294],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[486,138297,138299],{"id":138298},"_152-项目介绍","15.2 项目介绍",[10,138301,138288],{},[460,138303],{"style":126707,"src":138304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[10,138306,138307],{},"主页：",[460,138309],{"style":126707,"src":138310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[10,138312,138313],{},"列表页：",[460,138315],{"style":126707,"src":138316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[10,138318,138319],{},"注册页：",[460,138321],{"style":126707,"src":138322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[486,138324,138326],{"id":138325},"_153-项目搭建工作","15.3 项目搭建工作",[513,138328,138330],{"id":138329},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[460,138332],{"style":126707,"src":138333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[10,138335,138336],{},"经常更换的图片要放到upload文件夹中",[10,138338,138339],{},"不经常换的放到images文件夹中",[513,138341,138343],{"id":138342},"_1532-创建文件如下","15.3.2 创建文件如下",[460,138345],{"style":126707,"src":138346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[460,138348],{"style":126707,"src":138349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[10,138351,138352],{},[691,138353,138354],{},"初始化样式：",[10,138356,138357],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[10,138359,138360],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[10,138362,138363],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[513,138365,138367],{"id":138366},"_1533-项目模块化开发","15.3.3 项目模块化开发",[10,138369,138370],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[10,138372,138373,138374,138379],{},"这里最典型的应用就是 ",[691,138375,138376],{},[48,138377,138378],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[460,138381],{"style":126707,"src":138382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[10,138384,138385],{},"通过link方法来引入",[513,138387,138389],{"id":138388},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[460,138391],{"style":126707,"src":138392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[10,138394,138395],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[19,138397,138398],{},[22,138399,138400],{},"制作favicon图标",[10,138402,138403,138404,138407],{},"①把品优购图标切成 ",[48,138405,138406],{},"png"," 图片",[10,138409,138410,138411,138413,138414,138417,138418],{},"②把 ",[48,138412,138406],{}," 图片转换为 ",[48,138415,138416],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[780,138419,138420],{"href":138420,"rel":138421},"http:\u002F\u002Fwww.bitbug.net\u002F",[24246],[19,138423,138424,138427],{"start":185},[22,138425,138426],{},"favicon图标放到网站根目录下",[22,138428,138429],{},"HTML页面引入favicon",[10,138431,138432,138433,138436],{},"在html 页面里面的 ",[48,138434,138435],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[10,138438,138439],{},[48,138440,138441],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[10,138443,138444],{},"复制这行代码或者在生成这个的网站进行复制",[460,138446],{"style":126707,"src":138447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[10,138449,138450],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[10,138452,138453,138454],{},"例如:",[780,138455,138456],{"href":138456,"rel":138457},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24246],[513,138459,138461],{"id":138460},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[10,138463,138464,138467],{},[691,138465,138466],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[10,138469,138470,138473],{},[691,138471,138472],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[10,138475,138476],{},"页面必须有三个标签用来符合 SEO 优化",[460,138478],{"style":126707,"src":138479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[19,138481,138482],{},[22,138483,138484],{},"title网站标题",[10,138486,138487,138490],{},[691,138488,138489],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[10,138492,69162],{},[1549,138494,138495,138498],{},[22,138496,138497],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[22,138499,138500],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[19,138502,138503],{"start":185},[22,138504,138505],{},"description网站描述",[10,138507,138508],{},"简要说明我们网站主要是做什么的",[10,138510,138511,138514],{},[691,138512,138513],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[10,138516,69162],{},[10,138518,138519],{},[48,138520,138521],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[19,138523,138524],{"start":202},[22,138525,138526],{},"keywords关键词",[10,138528,138529],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[10,138531,69162],{},[10,138533,138534],{},[48,138535,138536],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[10,138538,138539],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[10,138541,138542],{},[691,138543,138544],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[19,138546,138547],{"start":209},[22,138548,138549],{},"代码总结",[41,138551,138552],{"className":127598,"code":130955,"language":127600,"meta":46,"style":46},[48,138553,138554,138558,138572,138576],{"__ignoreMap":46},[51,138555,138556],{"class":53,"line":54},[51,138557,130962],{"class":601},[51,138559,138560,138562,138564,138566,138568,138570],{"class":53,"line":185},[51,138561,1452],{"class":65},[51,138563,51983],{"class":51672},[51,138565,53858],{"class":57},[51,138567,70],{"class":65},[51,138569,130975],{"class":61},[51,138571,51679],{"class":65},[51,138573,138574],{"class":53,"line":202},[51,138575,130982],{"class":65},[51,138577,138578,138580,138582],{"class":53,"line":209},[51,138579,52157],{"class":65},[51,138581,51983],{"class":51672},[51,138583,51679],{"class":65},[486,138585,138587],{"id":138586},"_154-项目公共部分制作","15.4 项目公共部分制作",[513,138589,138591],{"id":138590},"_1541-常用模块类命名","15.4.1 常用模块类命名",[460,138593],{"style":126707,"src":138594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[513,138596,138598],{"id":138597},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[10,138600,138601],{},"布局思路：",[1549,138603,138604,138607,138610,138632,138665],{},[22,138605,138606],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[22,138608,138609],{},"里面包含版心的盒子",[22,138611,138612,138613],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1549,138614,138615,138623,138629],{},[22,138616,138617,138618,21883,138620,138622],{},"1 号盒子 里面包含一个",[48,138619,1549],{},[48,138621,1549],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[22,138624,138625,138626,138628],{},"里面的内容是水平排列，所以需要给",[48,138627,22],{},"设置浮动",[22,138630,138631],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[22,138633,138634,138635],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1549,138636,138637,138651,138656],{},[22,138638,138639,138640,21883,138642,138644,138645,138647,138648,138650],{},"2 号盒子 里面包含一个",[48,138641,1549],{},[48,138643,1549],{},"包裹",[48,138646,22],{},"，中间的",[48,138649,1463],{},"可以用样式去设置，也可以用字符 |",[22,138652,138653,138654,138628],{},"里面内容水平排列，给",[48,138655,22],{},[22,138657,138658,138659,138661,138662,138664],{},"找到里面所有偶数的 ",[48,138660,22],{}," 设置样式（偶数的 ",[48,138663,22],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[22,138666,138667,138668],{},"需要用到字体图标",[1549,138669,138670,138676,138679,138682,138685],{},[22,138671,138672,138673],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[48,138674,138675],{},"arrow-icon",[22,138677,138678],{},"先要引入字体图片的资源",[22,138680,138681],{},"在样式里面利用 font-face 来进行声明",[22,138683,138684],{},"在伪元素的 content属性设置 图标的编码",[22,138686,138687],{},"给伪元素设置font-family属性",[10,138689,138690],{},"结构实例代码：",[41,138692,138694],{"className":126851,"code":138693,"language":126853,"meta":46,"style":46},"div::before {\n  content: \"\";\n  display: block;\n}\n",[48,138695,138696,138704,138714,138724],{"__ignoreMap":46},[51,138697,138698,138700,138702],{"class":53,"line":54},[51,138699,51983],{"class":51672},[51,138701,137852],{"class":57},[51,138703,15956],{"class":65},[51,138705,138706,138708,138710,138712],{"class":53,"line":185},[51,138707,137859],{"class":278},[51,138709,51809],{"class":65},[51,138711,8036],{"class":61},[51,138713,1703],{"class":65},[51,138715,138716,138718,138720,138722],{"class":53,"line":202},[51,138717,128467],{"class":278},[51,138719,51809],{"class":65},[51,138721,61241],{"class":278},[51,138723,1703],{"class":65},[51,138725,138726],{"class":53,"line":209},[51,138727,1974],{"class":65},[10,138729,138730],{},"样式实例代码：",[41,138732,138733],{"className":126851,"code":138693,"language":126853,"meta":46,"style":46},[48,138734,138735,138743,138753,138763],{"__ignoreMap":46},[51,138736,138737,138739,138741],{"class":53,"line":54},[51,138738,51983],{"class":51672},[51,138740,137852],{"class":57},[51,138742,15956],{"class":65},[51,138744,138745,138747,138749,138751],{"class":53,"line":185},[51,138746,137859],{"class":278},[51,138748,51809],{"class":65},[51,138750,8036],{"class":61},[51,138752,1703],{"class":65},[51,138754,138755,138757,138759,138761],{"class":53,"line":202},[51,138756,128467],{"class":278},[51,138758,51809],{"class":65},[51,138760,61241],{"class":278},[51,138762,1703],{"class":65},[51,138764,138765],{"class":53,"line":209},[51,138766,1974],{"class":65},[513,138768,138770],{"id":138769},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1549,138772,138773],{},[22,138774,138775],{},"header 盒子必须要有高度",[10,138777,138778,138779,138781,138782],{},"1 号盒子是 ",[48,138780,131863],{}," 标志定位，在正常开发过程中， ",[691,138783,138784,138785,138788],{},"logo的布局其实是有讲究的，需要进行 ",[48,138786,138787],{},"logoSEO","的优化 （★★★）",[1549,138790,138791,138799,138807,138834],{},[22,138792,138793,138795,138796,138798],{},[48,138794,131863],{}," 里面首先放一个 ",[48,138797,14],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[22,138800,138801,138803,138804,138806],{},[48,138802,14],{}," 里面再放一个链接，可以返回首页的，把 ",[48,138805,131863],{}," 的背景图片给链接即可",[22,138808,138809,138810],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1549,138811,138812,138827],{},[22,138813,138814,138815,138818,138819,138822,138823,138826],{},"方法1：",[48,138816,138817],{},"text-indent"," 移到盒子外面（",[48,138820,138821],{},"text-indent: -9999px",") ，然后 ",[48,138824,138825],{},"overflow:hidden"," ，淘宝的做法",[22,138828,138829,138830,138833],{},"方法2：直接给 ",[48,138831,138832],{},"font-size: 0;"," 就看不到文字了，京东的做法",[22,138835,138836,138837,138839,138840,138842],{},"最后给链接一个 ",[48,138838,51779],{}," 属性，这样鼠标放到 ",[48,138841,131863],{}," 上就可以看到提示文字了",[10,138844,138690],{},[41,138846,138847],{"className":127598,"code":132084,"language":127600,"meta":46,"style":46},[48,138848,138849],{"__ignoreMap":46},[51,138850,138851,138853,138855,138857,138859,138861,138863,138865,138867,138869,138871],{"class":53,"line":54},[51,138852,1452],{"class":65},[51,138854,780],{"class":51672},[51,138856,61429],{"class":57},[51,138858,70],{"class":65},[51,138860,132099],{"class":61},[51,138862,132102],{"class":57},[51,138864,70],{"class":65},[51,138866,132107],{"class":61},[51,138868,132110],{"class":65},[51,138870,780],{"class":51672},[51,138872,51679],{"class":65},[10,138874,138730],{},[41,138876,138877],{"className":127598,"code":132084,"language":127600,"meta":46,"style":46},[48,138878,138879],{"__ignoreMap":46},[51,138880,138881,138883,138885,138887,138889,138891,138893,138895,138897,138899,138901],{"class":53,"line":54},[51,138882,1452],{"class":65},[51,138884,780],{"class":51672},[51,138886,61429],{"class":57},[51,138888,70],{"class":65},[51,138890,132099],{"class":61},[51,138892,132102],{"class":57},[51,138894,70],{"class":65},[51,138896,132107],{"class":61},[51,138898,132110],{"class":65},[51,138900,780],{"class":51672},[51,138902,51679],{"class":65},[10,138904,138905,138906,138908],{},"2 号盒子是 ",[48,138907,131876],{}," 搜索模块定位",[1549,138910,138911,138914,138917,138920],{},[22,138912,138913],{},"search盒子利用定位的方式放在对应的位置",[22,138915,138916],{},"search盒子设置绝对定位，header盒子设置相对定位",[22,138918,138919],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[22,138921,138922],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[10,138924,138690],{},[41,138926,138927],{"className":126851,"code":132171,"language":126853,"meta":46,"style":46},[48,138928,138929,138951,138955,138965],{"__ignoreMap":46},[51,138930,138931,138933,138935,138937,138939,138941,138943,138945,138947,138949],{"class":53,"line":54},[51,138932,51983],{"class":51672},[51,138934,12819],{"class":65},[51,138936,10],{"class":51672},[51,138938,12819],{"class":65},[51,138940,14],{"class":51672},[51,138942,12819],{"class":65},[51,138944,1549],{"class":51672},[51,138946,12819],{"class":65},[51,138948,22],{"class":51672},[51,138950,15956],{"class":65},[51,138952,138953],{"class":53,"line":185},[51,138954,132200],{"class":601},[51,138956,138957,138959,138961,138963],{"class":53,"line":202},[51,138958,128467],{"class":278},[51,138960,51809],{"class":65},[51,138962,61241],{"class":278},[51,138964,1703],{"class":65},[51,138966,138967],{"class":53,"line":209},[51,138968,1974],{"class":65},[10,138970,138730],{},[41,138972,138973],{"className":126851,"code":132171,"language":126853,"meta":46,"style":46},[48,138974,138975,138997,139001,139011],{"__ignoreMap":46},[51,138976,138977,138979,138981,138983,138985,138987,138989,138991,138993,138995],{"class":53,"line":54},[51,138978,51983],{"class":51672},[51,138980,12819],{"class":65},[51,138982,10],{"class":51672},[51,138984,12819],{"class":65},[51,138986,14],{"class":51672},[51,138988,12819],{"class":65},[51,138990,1549],{"class":51672},[51,138992,12819],{"class":65},[51,138994,22],{"class":51672},[51,138996,15956],{"class":65},[51,138998,138999],{"class":53,"line":185},[51,139000,132200],{"class":601},[51,139002,139003,139005,139007,139009],{"class":53,"line":202},[51,139004,128467],{"class":278},[51,139006,51809],{"class":65},[51,139008,61241],{"class":278},[51,139010,1703],{"class":65},[51,139012,139013],{"class":53,"line":209},[51,139014,1974],{"class":65},[10,139016,139017],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[10,139019,139020,139021,139024],{},"3 号盒子是 ",[48,139022,139023],{},"hotwords"," 热词模块定位",[1549,139026,139027,139030,139033],{},[22,139028,139029],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[22,139031,139032],{},"给里面所有的a标签设置 左右10px的外边距",[22,139034,139035],{},"给第一个a标签设置文字变红色（#c81623）",[10,139037,138690],{},[41,139039,139041],{"className":126851,"code":139040,"language":126853,"meta":46,"style":46},"div {\n  margin: 0 auto;\n}\n",[48,139042,139043,139049,139061],{"__ignoreMap":46},[51,139044,139045,139047],{"class":53,"line":54},[51,139046,51983],{"class":51672},[51,139048,15956],{"class":65},[51,139050,139051,139053,139055,139057,139059],{"class":53,"line":185},[51,139052,70842],{"class":278},[51,139054,51809],{"class":65},[51,139056,733],{"class":278},[51,139058,51928],{"class":278},[51,139060,1703],{"class":65},[51,139062,139063],{"class":53,"line":202},[51,139064,1974],{"class":65},[10,139066,138730],{},[41,139068,139069],{"className":126851,"code":139040,"language":126853,"meta":46,"style":46},[48,139070,139071,139077,139089],{"__ignoreMap":46},[51,139072,139073,139075],{"class":53,"line":54},[51,139074,51983],{"class":51672},[51,139076,15956],{"class":65},[51,139078,139079,139081,139083,139085,139087],{"class":53,"line":185},[51,139080,70842],{"class":278},[51,139082,51809],{"class":65},[51,139084,733],{"class":278},[51,139086,51928],{"class":278},[51,139088,1703],{"class":65},[51,139090,139091],{"class":53,"line":202},[51,139092,1974],{"class":65},[10,139094,139095,139096,139099],{},"4 号盒子是 ",[48,139097,139098],{},"shopcar"," 购物车模块",[1549,139101,139102,139107,139110,139113],{},[22,139103,123706,139104,139106],{},[48,139105,139098],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[22,139108,139109],{},"count 统计部分用绝对定位做",[22,139111,139112],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[22,139114,139115],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[10,139117,138690],{},[41,139119,139120],{"className":126851,"code":132283,"language":126853,"meta":46,"style":46},[48,139121,139122,139126,139140,139144,139158,139162,139176,139180,139194,139198],{"__ignoreMap":46},[51,139123,139124],{"class":53,"line":54},[51,139125,132290],{"class":601},[51,139127,139128,139130,139132,139134,139136,139138],{"class":53,"line":185},[51,139129,132295],{"class":57},[51,139131,80179],{"class":65},[51,139133,129211],{"class":278},[51,139135,51809],{"class":65},[51,139137,132304],{"class":278},[51,139139,129781],{"class":65},[51,139141,139142],{"class":53,"line":202},[51,139143,132311],{"class":601},[51,139145,139146,139148,139150,139152,139154,139156],{"class":53,"line":209},[51,139147,132316],{"class":57},[51,139149,80179],{"class":65},[51,139151,129211],{"class":278},[51,139153,51809],{"class":65},[51,139155,55136],{"class":278},[51,139157,129781],{"class":65},[51,139159,139160],{"class":53,"line":223},[51,139161,132331],{"class":601},[51,139163,139164,139166,139168,139170,139172,139174],{"class":53,"line":237},[51,139165,132336],{"class":57},[51,139167,80179],{"class":65},[51,139169,129211],{"class":278},[51,139171,51809],{"class":65},[51,139173,55203],{"class":278},[51,139175,129781],{"class":65},[51,139177,139178],{"class":53,"line":242},[51,139179,132351],{"class":601},[51,139181,139182,139184,139186,139188,139190,139192],{"class":53,"line":257},[51,139183,132356],{"class":57},[51,139185,80179],{"class":65},[51,139187,129211],{"class":278},[51,139189,51809],{"class":65},[51,139191,86605],{"class":278},[51,139193,129781],{"class":65},[51,139195,139196],{"class":53,"line":262},[51,139197,132371],{"class":601},[51,139199,139200,139202,139204,139206,139208,139210],{"class":53,"line":285},[51,139201,132376],{"class":57},[51,139203,80179],{"class":65},[51,139205,129211],{"class":278},[51,139207,51809],{"class":65},[51,139209,132385],{"class":278},[51,139211,129781],{"class":65},[10,139213,138730],{},[41,139215,139216],{"className":126851,"code":132283,"language":126853,"meta":46,"style":46},[48,139217,139218,139222,139236,139240,139254,139258,139272,139276,139290,139294],{"__ignoreMap":46},[51,139219,139220],{"class":53,"line":54},[51,139221,132290],{"class":601},[51,139223,139224,139226,139228,139230,139232,139234],{"class":53,"line":185},[51,139225,132295],{"class":57},[51,139227,80179],{"class":65},[51,139229,129211],{"class":278},[51,139231,51809],{"class":65},[51,139233,132304],{"class":278},[51,139235,129781],{"class":65},[51,139237,139238],{"class":53,"line":202},[51,139239,132311],{"class":601},[51,139241,139242,139244,139246,139248,139250,139252],{"class":53,"line":209},[51,139243,132316],{"class":57},[51,139245,80179],{"class":65},[51,139247,129211],{"class":278},[51,139249,51809],{"class":65},[51,139251,55136],{"class":278},[51,139253,129781],{"class":65},[51,139255,139256],{"class":53,"line":223},[51,139257,132331],{"class":601},[51,139259,139260,139262,139264,139266,139268,139270],{"class":53,"line":237},[51,139261,132336],{"class":57},[51,139263,80179],{"class":65},[51,139265,129211],{"class":278},[51,139267,51809],{"class":65},[51,139269,55203],{"class":278},[51,139271,129781],{"class":65},[51,139273,139274],{"class":53,"line":242},[51,139275,132351],{"class":601},[51,139277,139278,139280,139282,139284,139286,139288],{"class":53,"line":257},[51,139279,132356],{"class":57},[51,139281,80179],{"class":65},[51,139283,129211],{"class":278},[51,139285,51809],{"class":65},[51,139287,86605],{"class":278},[51,139289,129781],{"class":65},[51,139291,139292],{"class":53,"line":262},[51,139293,132371],{"class":601},[51,139295,139296,139298,139300,139302,139304,139306],{"class":53,"line":285},[51,139297,132376],{"class":57},[51,139299,80179],{"class":65},[51,139301,129211],{"class":278},[51,139303,51809],{"class":65},[51,139305,132385],{"class":278},[51,139307,129781],{"class":65},[513,139309,139311,139312,139314],{"id":139310},"_1544-nav导航模块制作","15.4.4 ",[48,139313,54085],{},"导航模块制作",[460,139316],{"style":126707,"src":139317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[10,139319,139320,139322],{},[48,139321,54085],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[10,139324,139325,139326],{},"1 号盒子左侧浮动，",[48,139327,139328],{},"dropdown",[1549,139330,139331,139341,139349,139355,139363,139373,139381,139392],{},[22,139332,139333,139334,101390,139337,139340],{},"1号盒子有讲究，根据相关性 里面包含 ",[48,139335,139336],{},".dt",[48,139338,139339],{},".dd"," 两个盒子",[22,139342,139343,139345,139346,139348],{},[48,139344,139336],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[48,139347,139339],{}," 挤到下面去了",[22,139350,139351,139352,139354],{},"给 ",[48,139353,139339],{}," 盒子设置宽度 和 高度，以及背景颜色",[22,139356,139351,139357,139359,139360,120608],{},[48,139358,139339],{}," 盒子里面定义 无序列表 （",[48,139361,139362],{},"ul > li > a",[22,139364,139365,139366,139368,139369,139372],{},"每个 ",[48,139367,22],{}," 都有一个高度（",[48,139370,139371],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[22,139374,139351,139375,139377,139378,120608],{},[48,139376,22],{}," 里面的a设置文字大小（",[48,139379,139380],{},"14px",[22,139382,139351,139383,139385,139386,139388,139389,139391],{},[48,139384,22],{}," 设置 ",[48,139387,128012],{},"，当鼠标移入的时候，让",[48,139390,22],{},"的背景变成白色，让里面的文字变成红色",[22,139393,139394,139396,139397,139399,139400,139402],{},[48,139395,22],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[48,139398,22],{},"的右侧，那么给",[48,139401,22],{},"设置相对定位",[10,139404,139405],{},"一定要注意相关性",[10,139407,138690],{},[41,139409,139410],{"className":126851,"code":138693,"language":126853,"meta":46,"style":46},[48,139411,139412,139420,139430,139440],{"__ignoreMap":46},[51,139413,139414,139416,139418],{"class":53,"line":54},[51,139415,51983],{"class":51672},[51,139417,137852],{"class":57},[51,139419,15956],{"class":65},[51,139421,139422,139424,139426,139428],{"class":53,"line":185},[51,139423,137859],{"class":278},[51,139425,51809],{"class":65},[51,139427,8036],{"class":61},[51,139429,1703],{"class":65},[51,139431,139432,139434,139436,139438],{"class":53,"line":202},[51,139433,128467],{"class":278},[51,139435,51809],{"class":65},[51,139437,61241],{"class":278},[51,139439,1703],{"class":65},[51,139441,139442],{"class":53,"line":209},[51,139443,1974],{"class":65},[10,139445,138730],{},[41,139447,139448],{"className":126851,"code":138693,"language":126853,"meta":46,"style":46},[48,139449,139450,139458,139468,139478],{"__ignoreMap":46},[51,139451,139452,139454,139456],{"class":53,"line":54},[51,139453,51983],{"class":51672},[51,139455,137852],{"class":57},[51,139457,15956],{"class":65},[51,139459,139460,139462,139464,139466],{"class":53,"line":185},[51,139461,137859],{"class":278},[51,139463,51809],{"class":65},[51,139465,8036],{"class":61},[51,139467,1703],{"class":65},[51,139469,139470,139472,139474,139476],{"class":53,"line":202},[51,139471,128467],{"class":278},[51,139473,51809],{"class":65},[51,139475,61241],{"class":278},[51,139477,1703],{"class":65},[51,139479,139480],{"class":53,"line":209},[51,139481,1974],{"class":65},[10,139483,139484],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[10,139486,139487,139488,139491],{},"2 号盒子左侧浮动，",[48,139489,139490],{},"navitems"," 导航栏组",[1549,139493,139494,139499,139508],{},[22,139495,139496,139497],{},"里面结构是 ",[48,139498,139362],{},[22,139500,139501,139502,139504,139505,139507],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[48,139503,780],{},"左右的",[48,139506,31261],{},"把两侧撑开",[22,139509,139510],{},"让文字垂直居中（行高等于高度）",[460,139512],{"style":126707,"src":139513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[10,139515,139516],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[10,139518,138690],{},[41,139520,139522],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},".box {\n  float: left;\n}\n",[48,139523,139524,139530,139540],{"__ignoreMap":46},[51,139525,139526,139528],{"class":53,"line":54},[51,139527,130699],{"class":57},[51,139529,15956],{"class":65},[51,139531,139532,139534,139536,139538],{"class":53,"line":185},[51,139533,131331],{"class":278},[51,139535,51809],{"class":65},[51,139537,24119],{"class":278},[51,139539,1703],{"class":65},[51,139541,139542],{"class":53,"line":202},[51,139543,1974],{"class":65},[10,139545,138730],{},[41,139547,139548],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},[48,139549,139550,139556,139566],{"__ignoreMap":46},[51,139551,139552,139554],{"class":53,"line":54},[51,139553,130699],{"class":57},[51,139555,15956],{"class":65},[51,139557,139558,139560,139562,139564],{"class":53,"line":185},[51,139559,131331],{"class":278},[51,139561,51809],{"class":65},[51,139563,24119],{"class":278},[51,139565,1703],{"class":65},[51,139567,139568],{"class":53,"line":202},[51,139569,1974],{"class":65},[10,139571,139572],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[460,139574],{"style":126707,"src":139575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[41,139577,139578],{"className":126851,"code":131008,"language":126853,"meta":46,"style":46},[48,139579,139580,139586,139602],{"__ignoreMap":46},[51,139581,139582,139584],{"class":53,"line":54},[51,139583,51983],{"class":51672},[51,139585,15956],{"class":65},[51,139587,139588,139590,139592,139594,139596,139598,139600],{"class":53,"line":185},[51,139589,71268],{"class":278},[51,139591,51809],{"class":65},[51,139593,759],{"class":278},[51,139595,51864],{"class":69},[51,139597,51893],{"class":278},[51,139599,130243],{"class":278},[51,139601,1703],{"class":65},[51,139603,139604],{"class":53,"line":202},[51,139605,1974],{"class":65},[513,139607,139609],{"id":139608},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[460,139611],{"style":126707,"src":139612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1549,139614,139615,139620,139625],{},[22,139616,139617,139619],{},[48,139618,132054],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[22,139621,139622,139624],{},[48,139623,132054],{}," 里面有一个大的版心",[22,139626,139627,139628,139631,139632],{},"版心里面包含 1 号盒子，",[48,139629,139630],{},"mod_service"," 是服务模块，mod 是模块的意思",[1549,139633,139634,139639,139652,139668,139673],{},[22,139635,139351,139636,139638],{},[48,139637,139630],{}," 设置高度（80px）和下边框",[22,139640,139641,139642,139645,139646,139648,139649,139651],{},"在里面定义 ",[48,139643,139644],{},"ul > li"," ,每个",[48,139647,22],{}," 宽度是300px 高度是 50px，给每个",[48,139650,22],{},"设置35px的左内边距",[22,139653,139654,139655,139657,139658,139660,139661,139663,139664,18793,139666,120608],{},"在每个",[48,139656,22],{},"里面，放一个 ",[48,139659,23293],{},"（里面放图标），一个",[48,139662,51983],{},"（里面放",[48,139665,51983],{},[48,139667,10],{},[22,139669,139351,139670,139672],{},[48,139671,23293],{},"设置浮动，让h5与这个div左右排列",[22,139674,139675],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[10,139677,138690],{},[41,139679,139681],{"className":126851,"code":139680,"language":126853,"meta":46,"style":46},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[48,139682,139683,139689,139701,139713,139740],{"__ignoreMap":46},[51,139684,139685,139687],{"class":53,"line":54},[51,139686,134608],{"class":57},[51,139688,15956],{"class":65},[51,139690,139691,139693,139695,139697,139699],{"class":53,"line":185},[51,139692,70940],{"class":278},[51,139694,51809],{"class":65},[51,139696,1242],{"class":278},[51,139698,51864],{"class":69},[51,139700,1703],{"class":65},[51,139702,139703,139705,139707,139709,139711],{"class":53,"line":202},[51,139704,71160],{"class":278},[51,139706,51809],{"class":65},[51,139708,1242],{"class":278},[51,139710,51864],{"class":69},[51,139712,1703],{"class":65},[51,139714,139715,139717,139719,139721,139723,139725,139727,139729,139732,139734,139736,139738],{"class":53,"line":209},[51,139716,70983],{"class":278},[51,139718,51809],{"class":65},[51,139720,62098],{"class":278},[51,139722,546],{"class":65},[51,139724,134647],{"class":248},[51,139726,14098],{"class":65},[51,139728,62108],{"class":278},[51,139730,139731],{"class":278}," -10",[51,139733,51864],{"class":69},[51,139735,134666],{"class":278},[51,139737,51864],{"class":69},[51,139739,1703],{"class":65},[51,139741,139742],{"class":53,"line":223},[51,139743,1974],{"class":65},[10,139745,138730],{},[41,139747,139748],{"className":126851,"code":139680,"language":126853,"meta":46,"style":46},[48,139749,139750,139756,139768,139780,139806],{"__ignoreMap":46},[51,139751,139752,139754],{"class":53,"line":54},[51,139753,134608],{"class":57},[51,139755,15956],{"class":65},[51,139757,139758,139760,139762,139764,139766],{"class":53,"line":185},[51,139759,70940],{"class":278},[51,139761,51809],{"class":65},[51,139763,1242],{"class":278},[51,139765,51864],{"class":69},[51,139767,1703],{"class":65},[51,139769,139770,139772,139774,139776,139778],{"class":53,"line":202},[51,139771,71160],{"class":278},[51,139773,51809],{"class":65},[51,139775,1242],{"class":278},[51,139777,51864],{"class":69},[51,139779,1703],{"class":65},[51,139781,139782,139784,139786,139788,139790,139792,139794,139796,139798,139800,139802,139804],{"class":53,"line":209},[51,139783,70983],{"class":278},[51,139785,51809],{"class":65},[51,139787,62098],{"class":278},[51,139789,546],{"class":65},[51,139791,134647],{"class":248},[51,139793,14098],{"class":65},[51,139795,62108],{"class":278},[51,139797,139731],{"class":278},[51,139799,51864],{"class":69},[51,139801,134666],{"class":278},[51,139803,51864],{"class":69},[51,139805,1703],{"class":65},[51,139807,139808],{"class":53,"line":223},[51,139809,1974],{"class":65},[10,139811,139812],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1549,139814,139815,139818,139824,139830,139842],{},[22,139816,139817],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[22,139819,139820,139821,120608],{},"里面的布局利用 自定义列表来实现（",[48,139822,139823],{},"dl > dt + dd",[22,139825,139351,139826,139829],{},[48,139827,139828],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[22,139831,139351,139832,139835,139836,18793,139838,139841],{},[48,139833,139834],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[48,139837,139834],{},[48,139839,139840],{},"dd","之间有些距离",[22,139843,139844],{},"最后一个 dl 结构和样式不一样，需要单独设置",[10,139846,138690],{},[41,139848,139849],{"className":126851,"code":139040,"language":126853,"meta":46,"style":46},[48,139850,139851,139857,139869],{"__ignoreMap":46},[51,139852,139853,139855],{"class":53,"line":54},[51,139854,51983],{"class":51672},[51,139856,15956],{"class":65},[51,139858,139859,139861,139863,139865,139867],{"class":53,"line":185},[51,139860,70842],{"class":278},[51,139862,51809],{"class":65},[51,139864,733],{"class":278},[51,139866,51928],{"class":278},[51,139868,1703],{"class":65},[51,139870,139871],{"class":53,"line":202},[51,139872,1974],{"class":65},[10,139874,138730],{},[41,139876,139877],{"className":126851,"code":139040,"language":126853,"meta":46,"style":46},[48,139878,139879,139885,139897],{"__ignoreMap":46},[51,139880,139881,139883],{"class":53,"line":54},[51,139882,51983],{"class":51672},[51,139884,15956],{"class":65},[51,139886,139887,139889,139891,139893,139895],{"class":53,"line":185},[51,139888,70842],{"class":278},[51,139890,51809],{"class":65},[51,139892,733],{"class":278},[51,139894,51928],{"class":278},[51,139896,1703],{"class":65},[51,139898,139899],{"class":53,"line":202},[51,139900,1974],{"class":65},[10,139902,139903],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1549,139905,139906,139915,139918,139929],{},[22,139907,139908,139909,139911,139912,139914],{},"分为上下两块，上面是 ",[48,139910,132071],{}," 友情链接，下面是 ",[48,139913,132064],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[22,139916,139917],{},"把内容分别复制到相应模块中",[22,139919,139351,139920,139922,139923,139925,139926,139928],{},[48,139921,132071],{}," 设置 15px 的下外边距，给",[48,139924,132071],{}," 里面 的 ",[48,139927,780],{}," 标签设置 左右 3px 的外边距",[22,139930,139931,139932,139934],{},"给",[48,139933,132064],{}," 设置 20px 的行高",[10,139936,138690],{},[41,139938,139939],{"className":126851,"code":139040,"language":126853,"meta":46,"style":46},[48,139940,139941,139947,139959],{"__ignoreMap":46},[51,139942,139943,139945],{"class":53,"line":54},[51,139944,51983],{"class":51672},[51,139946,15956],{"class":65},[51,139948,139949,139951,139953,139955,139957],{"class":53,"line":185},[51,139950,70842],{"class":278},[51,139952,51809],{"class":65},[51,139954,733],{"class":278},[51,139956,51928],{"class":278},[51,139958,1703],{"class":65},[51,139960,139961],{"class":53,"line":202},[51,139962,1974],{"class":65},[10,139964,138730],{},[41,139966,139967],{"className":126851,"code":139040,"language":126853,"meta":46,"style":46},[48,139968,139969,139975,139987],{"__ignoreMap":46},[51,139970,139971,139973],{"class":53,"line":54},[51,139972,51983],{"class":51672},[51,139974,15956],{"class":65},[51,139976,139977,139979,139981,139983,139985],{"class":53,"line":185},[51,139978,70842],{"class":278},[51,139980,51809],{"class":65},[51,139982,733],{"class":278},[51,139984,51928],{"class":278},[51,139986,1703],{"class":65},[51,139988,139989],{"class":53,"line":202},[51,139990,1974],{"class":65},[10,139992,139993],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[464,139995,139996],{},"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":46,"searchDepth":185,"depth":185,"links":139998},[139999,140000,140001,140008],{"id":138279,"depth":185,"text":138280},{"id":138298,"depth":185,"text":138299},{"id":138325,"depth":185,"text":138326,"children":140002},[140003,140004,140005,140006,140007],{"id":138329,"depth":202,"text":138330},{"id":138342,"depth":202,"text":138343},{"id":138366,"depth":202,"text":138367},{"id":138388,"depth":202,"text":138389},{"id":138460,"depth":202,"text":138461},{"id":138586,"depth":185,"text":138587,"children":140009},[140010,140011,140012,140013,140015],{"id":138590,"depth":202,"text":138591},{"id":138597,"depth":202,"text":138598},{"id":138769,"depth":202,"text":138770},{"id":139310,"depth":202,"text":140014},"15.4.4 nav导航模块制作",{"id":139608,"depth":202,"text":139609},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138271,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140022,"title":140023,"body":140024,"description":23760,"extension":469,"meta":142426,"navigation":205,"path":142427,"seo":142428,"stem":142429,"__hash__":142430},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140025,"toc":142403},[140026,140029,140033,140037,140049,140052,140055,140058,140069,140071,140095,140097,140121,140126,140129,140131,140167,140169,140205,140208,140213,140216,140219,140222,140252,140259,140262,140272,140274,140308,140311,140345,140351,140368,140370,140406,140408,140444,140449,140474,140476,140502,140504,140528,140535,140538,140602,140604,140646,140648,140688,140695,140700,140702,140732,140734,140764,140768,140771,140778,140790,140792,140818,140820,140844,140847,140849,140873,140879,140889,140891,140921,140923,140953,140960,141001,141003,141039,141041,141077,141081,141084,141087,141090,141096,141101,141104,141127,141130,141154,141157,141181,141186,141189,141192,141195,141198,141201,141275,141277,141307,141309,141339,141342,141345,141377,141381,141385,141399,141408,141411,141416,141418,141512,141514,141608,141631,141633,141657,141659,141683,141690,141693,141703,141705,141729,141734,141742,141744,141774,141779,141819,141821,141847,141849,141875,141879,141882,141887,141890,141894,141902,141909,141917,141919,141949,141951,141981,141989,141992,141995,141997,142027,142029,142059,142062,142067,142069,142093,142095,142119,142122,142207,142209,142233,142235,142259,142263,142265,142289,142291,142325,142329,142343,142346,142351,142354,142359,142362,142392,142400],[14,140027,140023],{"id":140028},"_16-品优购项目下篇-主体与页面开发",[486,140030,140032],{"id":140031},"_161-项目主体模块制作","16.1 项目主体模块制作",[513,140034,140036],{"id":140035},"_1611-首页制作","16.1.1 首页制作",[10,140038,140039,140041,140042,140044,140045,140048],{},[691,140040,102430],{}," 主体模块是 ",[691,140043,74430],{}," 里面专有的，注意需要新的样式文件 ",[691,140046,140047],{},"index.css，"," 就不要写在common.css中了",[460,140050],{"style":126707,"src":140051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[460,140053],{"style":126707,"src":140054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[10,140056,140057],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1549,140059,140060,140063,140066],{},[22,140061,140062],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[22,140064,140065],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[22,140067,140068],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[10,140070,138690],{},[41,140072,140073],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},[48,140074,140075,140081,140091],{"__ignoreMap":46},[51,140076,140077,140079],{"class":53,"line":54},[51,140078,130699],{"class":57},[51,140080,15956],{"class":65},[51,140082,140083,140085,140087,140089],{"class":53,"line":185},[51,140084,131331],{"class":278},[51,140086,51809],{"class":65},[51,140088,24119],{"class":278},[51,140090,1703],{"class":65},[51,140092,140093],{"class":53,"line":202},[51,140094,1974],{"class":65},[10,140096,138730],{},[41,140098,140099],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},[48,140100,140101,140107,140117],{"__ignoreMap":46},[51,140102,140103,140105],{"class":53,"line":54},[51,140104,130699],{"class":57},[51,140106,15956],{"class":65},[51,140108,140109,140111,140113,140115],{"class":53,"line":185},[51,140110,131331],{"class":278},[51,140112,51809],{"class":65},[51,140114,24119],{"class":278},[51,140116,1703],{"class":65},[51,140118,140119],{"class":53,"line":202},[51,140120,1974],{"class":65},[19,140122,140123],{},[22,140124,140125],{},"左侧focus模块制作",[460,140127],{"style":126707,"src":140128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[10,140130,138690],{},[41,140132,140133],{"className":126851,"code":128174,"language":126853,"meta":46,"style":46},[48,140134,140135,140143,140153,140163],{"__ignoreMap":46},[51,140136,140137,140139,140141],{"class":53,"line":54},[51,140138,54193],{"class":51672},[51,140140,62272],{"class":57},[51,140142,15956],{"class":65},[51,140144,140145,140147,140149,140151],{"class":53,"line":185},[51,140146,128189],{"class":278},[51,140148,51809],{"class":65},[51,140150,55261],{"class":278},[51,140152,1703],{"class":65},[51,140154,140155,140157,140159,140161],{"class":53,"line":202},[51,140156,71170],{"class":278},[51,140158,51809],{"class":65},[51,140160,55109],{"class":278},[51,140162,1703],{"class":65},[51,140164,140165],{"class":53,"line":209},[51,140166,1974],{"class":65},[10,140168,138730],{},[41,140170,140171],{"className":126851,"code":128174,"language":126853,"meta":46,"style":46},[48,140172,140173,140181,140191,140201],{"__ignoreMap":46},[51,140174,140175,140177,140179],{"class":53,"line":54},[51,140176,54193],{"class":51672},[51,140178,62272],{"class":57},[51,140180,15956],{"class":65},[51,140182,140183,140185,140187,140189],{"class":53,"line":185},[51,140184,128189],{"class":278},[51,140186,51809],{"class":65},[51,140188,55261],{"class":278},[51,140190,1703],{"class":65},[51,140192,140193,140195,140197,140199],{"class":53,"line":202},[51,140194,71170],{"class":278},[51,140196,51809],{"class":65},[51,140198,55109],{"class":278},[51,140200,1703],{"class":65},[51,140202,140203],{"class":53,"line":209},[51,140204,1974],{"class":65},[10,140206,140207],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[19,140209,140210],{"start":185},[22,140211,140212],{},"右侧newsflash模块制作",[460,140214],{"style":126707,"src":140215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[10,140217,140218],{},"右侧的模块 分为上中下三个盒子",[10,140220,140221],{},"结构代码：",[41,140223,140224],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,140225,140226],{"__ignoreMap":46},[51,140227,140228,140230,140232,140234,140236,140238,140240,140242,140244,140246,140248,140250],{"class":53,"line":54},[51,140229,1452],{"class":65},[51,140231,460],{"class":51672},[51,140233,55611],{"class":57},[51,140235,70],{"class":65},[51,140237,134368],{"class":61},[51,140239,55619],{"class":57},[51,140241,70],{"class":65},[51,140243,134375],{"class":61},[51,140245,134378],{"class":57},[51,140247,70],{"class":65},[51,140249,134383],{"class":61},[51,140251,51679],{"class":65},[10,140253,140254,140255,140258],{},"1 号盒子为 ",[48,140256,140257],{},"news"," 新闻模块 高度为 165px",[460,140260],{"style":126707,"src":140261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[10,140263,140264,140265,140268,140269],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[48,140266,140267],{},"news-hd","，下面是 ",[48,140270,140271],{},"news-bd",[10,140273,140221],{},[41,140275,140276],{"className":127598,"code":130955,"language":127600,"meta":46,"style":46},[48,140277,140278,140282,140296,140300],{"__ignoreMap":46},[51,140279,140280],{"class":53,"line":54},[51,140281,130962],{"class":601},[51,140283,140284,140286,140288,140290,140292,140294],{"class":53,"line":185},[51,140285,1452],{"class":65},[51,140287,51983],{"class":51672},[51,140289,53858],{"class":57},[51,140291,70],{"class":65},[51,140293,130975],{"class":61},[51,140295,51679],{"class":65},[51,140297,140298],{"class":53,"line":202},[51,140299,130982],{"class":65},[51,140301,140302,140304,140306],{"class":53,"line":209},[51,140303,52157],{"class":65},[51,140305,51983],{"class":51672},[51,140307,51679],{"class":65},[10,140309,140310],{},"样式代码：",[41,140312,140313],{"className":127598,"code":130955,"language":127600,"meta":46,"style":46},[48,140314,140315,140319,140333,140337],{"__ignoreMap":46},[51,140316,140317],{"class":53,"line":54},[51,140318,130962],{"class":601},[51,140320,140321,140323,140325,140327,140329,140331],{"class":53,"line":185},[51,140322,1452],{"class":65},[51,140324,51983],{"class":51672},[51,140326,53858],{"class":57},[51,140328,70],{"class":65},[51,140330,130975],{"class":61},[51,140332,51679],{"class":65},[51,140334,140335],{"class":53,"line":202},[51,140336,130982],{"class":65},[51,140338,140339,140341,140343],{"class":53,"line":209},[51,140340,52157],{"class":65},[51,140342,51983],{"class":51672},[51,140344,51679],{"class":65},[10,140346,140347,140348,140350],{},"上面是",[48,140349,140267],{},"，设置高度是 33px，设置下边框",[1549,140352,140353,140359],{},[22,140354,140355,140356,140358],{},"里面放一个",[48,140357,23293],{}," 标题",[22,140360,140361,140362,140364,140365,140367],{},"放一个a",[48,140363,103065],{},"，内容是 更多，然后让 ",[48,140366,780],{}," 进行右浮动，三角用伪元素设置字体图标就好",[10,140369,140221],{},[41,140371,140372],{"className":126851,"code":138693,"language":126853,"meta":46,"style":46},[48,140373,140374,140382,140392,140402],{"__ignoreMap":46},[51,140375,140376,140378,140380],{"class":53,"line":54},[51,140377,51983],{"class":51672},[51,140379,137852],{"class":57},[51,140381,15956],{"class":65},[51,140383,140384,140386,140388,140390],{"class":53,"line":185},[51,140385,137859],{"class":278},[51,140387,51809],{"class":65},[51,140389,8036],{"class":61},[51,140391,1703],{"class":65},[51,140393,140394,140396,140398,140400],{"class":53,"line":202},[51,140395,128467],{"class":278},[51,140397,51809],{"class":65},[51,140399,61241],{"class":278},[51,140401,1703],{"class":65},[51,140403,140404],{"class":53,"line":209},[51,140405,1974],{"class":65},[10,140407,140310],{},[41,140409,140410],{"className":126851,"code":138693,"language":126853,"meta":46,"style":46},[48,140411,140412,140420,140430,140440],{"__ignoreMap":46},[51,140413,140414,140416,140418],{"class":53,"line":54},[51,140415,51983],{"class":51672},[51,140417,137852],{"class":57},[51,140419,15956],{"class":65},[51,140421,140422,140424,140426,140428],{"class":53,"line":185},[51,140423,137859],{"class":278},[51,140425,51809],{"class":65},[51,140427,8036],{"class":61},[51,140429,1703],{"class":65},[51,140431,140432,140434,140436,140438],{"class":53,"line":202},[51,140433,128467],{"class":278},[51,140435,51809],{"class":65},[51,140437,61241],{"class":278},[51,140439,1703],{"class":65},[51,140441,140442],{"class":53,"line":209},[51,140443,1974],{"class":65},[10,140445,140446,140447],{},"下面是",[48,140448,140271],{},[1549,140450,140451,140459],{},[22,140452,140453,140454,101390,140456,140458],{},"里面包含 ",[48,140455,1549],{},[48,140457,22],{}," 还有链接",[22,140460,139931,140461,140463,140464,140466,140467,140470,140471],{},[48,140462,22],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[48,140465,131517],{}," 2.设置 ",[48,140468,140469],{},"white-space: nowrap;"," 3. 设置 ",[48,140472,140473],{},"text-overflow: ellipsis;",[10,140475,140221],{},[41,140477,140479],{"className":126851,"code":140478,"language":126853,"meta":46,"style":46},"div {\n  overflow: hidden;\n}\n",[48,140480,140481,140487,140498],{"__ignoreMap":46},[51,140482,140483,140485],{"class":53,"line":54},[51,140484,51983],{"class":51672},[51,140486,15956],{"class":65},[51,140488,140489,140492,140494,140496],{"class":53,"line":185},[51,140490,140491],{"class":278},"  overflow",[51,140493,51809],{"class":65},[51,140495,62086],{"class":278},[51,140497,1703],{"class":65},[51,140499,140500],{"class":53,"line":202},[51,140501,1974],{"class":65},[10,140503,140310],{},[41,140505,140506],{"className":126851,"code":140478,"language":126853,"meta":46,"style":46},[48,140507,140508,140514,140524],{"__ignoreMap":46},[51,140509,140510,140512],{"class":53,"line":54},[51,140511,51983],{"class":51672},[51,140513,15956],{"class":65},[51,140515,140516,140518,140520,140522],{"class":53,"line":185},[51,140517,140491],{"class":278},[51,140519,51809],{"class":65},[51,140521,62086],{"class":278},[51,140523,1703],{"class":65},[51,140525,140526],{"class":53,"line":202},[51,140527,1974],{"class":65},[10,140529,140530,140531,140534],{},"2 号盒子为 ",[48,140532,140533],{},"lifeservice"," 生活服务模块 高度为 209px",[460,140536],{"style":126707,"src":140537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1549,140539,140540,140543,140553,140577,140588],{},[22,140541,140542],{},"设置边框（左右下边框）",[22,140544,140545,140546,140549,140550,140552],{},"里面的内容 是 ",[48,140547,140548],{},"ul > 12*li","，给",[48,140551,22],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[22,140554,140555,140556],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1549,140557,140558,140563,140572],{},[22,140559,140560,140562],{},[48,140561,140533],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[22,140564,140565,140566,140568,140569,140571],{},"可以让 ",[48,140567,140533],{}," 里面的 ",[48,140570,1549],{}," 宽度为 252，就可以装的下 4 个 小 li",[22,140573,140574,140576],{},[48,140575,140533],{}," 盒子 overflow 隐藏多余的部分就可以了",[22,140578,116838,140579,140581,140582,140584,140585,140587],{},[48,140580,22],{}," 里面放一个 ",[48,140583,983],{},"（里面放图标），下面的文本用 ",[48,140586,10],{}," 标签包裹",[22,140589,139351,140590,140592,140593,140595,140596,139385,140598,140601],{},[48,140591,983],{}," 设置 24px宽和28px的高（注意 ",[48,140594,983],{}," 是行内元素， 转成行内块），给 ",[48,140597,22],{},[48,140599,140600],{},"text-align:center"," 让里面内容居中显示",[10,140603,140221],{},[41,140605,140607],{"className":126851,"code":140606,"language":126853,"meta":46,"style":46},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[48,140608,140609,140627,140632,140642],{"__ignoreMap":46},[51,140610,140611,140613,140615,140617,140619,140621,140623,140625],{"class":53,"line":54},[51,140612,51],{"class":51672},[51,140614,12819],{"class":65},[51,140616,780],{"class":51672},[51,140618,12819],{"class":65},[51,140620,23936],{"class":51672},[51,140622,12819],{"class":65},[51,140624,691],{"class":51672},[51,140626,15956],{"class":65},[51,140628,140629],{"class":53,"line":185},[51,140630,140631],{"class":601},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[51,140633,140634,140636,140638,140640],{"class":53,"line":202},[51,140635,128467],{"class":278},[51,140637,51809],{"class":65},[51,140639,128529],{"class":278},[51,140641,1703],{"class":65},[51,140643,140644],{"class":53,"line":209},[51,140645,1974],{"class":65},[10,140647,140310],{},[41,140649,140650],{"className":126851,"code":140606,"language":126853,"meta":46,"style":46},[48,140651,140652,140670,140674,140684],{"__ignoreMap":46},[51,140653,140654,140656,140658,140660,140662,140664,140666,140668],{"class":53,"line":54},[51,140655,51],{"class":51672},[51,140657,12819],{"class":65},[51,140659,780],{"class":51672},[51,140661,12819],{"class":65},[51,140663,23936],{"class":51672},[51,140665,12819],{"class":65},[51,140667,691],{"class":51672},[51,140669,15956],{"class":65},[51,140671,140672],{"class":53,"line":185},[51,140673,140631],{"class":601},[51,140675,140676,140678,140680,140682],{"class":53,"line":202},[51,140677,128467],{"class":278},[51,140679,51809],{"class":65},[51,140681,128529],{"class":278},[51,140683,1703],{"class":65},[51,140685,140686],{"class":53,"line":209},[51,140687,1974],{"class":65},[10,140689,140690,140691,140694],{},"3 号盒子为 ",[48,140692,140693],{},"bargain"," 特价商品",[1549,140696,140697],{},[22,140698,140699],{},"这个比较简单，直接插入一张图片即可",[10,140701,140221],{},[41,140703,140704],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,140705,140706],{"__ignoreMap":46},[51,140707,140708,140710,140712,140714,140716,140718,140720,140722,140724,140726,140728,140730],{"class":53,"line":54},[51,140709,1452],{"class":65},[51,140711,460],{"class":51672},[51,140713,55611],{"class":57},[51,140715,70],{"class":65},[51,140717,134368],{"class":61},[51,140719,55619],{"class":57},[51,140721,70],{"class":65},[51,140723,134375],{"class":61},[51,140725,134378],{"class":57},[51,140727,70],{"class":65},[51,140729,134383],{"class":61},[51,140731,51679],{"class":65},[10,140733,140310],{},[41,140735,140736],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,140737,140738],{"__ignoreMap":46},[51,140739,140740,140742,140744,140746,140748,140750,140752,140754,140756,140758,140760,140762],{"class":53,"line":54},[51,140741,1452],{"class":65},[51,140743,460],{"class":51672},[51,140745,55611],{"class":57},[51,140747,70],{"class":65},[51,140749,134368],{"class":61},[51,140751,55619],{"class":57},[51,140753,70],{"class":65},[51,140755,134375],{"class":61},[51,140757,134378],{"class":57},[51,140759,70],{"class":65},[51,140761,134383],{"class":61},[51,140763,51679],{"class":65},[513,140765,140767],{"id":140766},"_1612-推荐模块制作","16.1.2 推荐模块制作",[460,140769],{"style":126707,"src":140770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[10,140772,140773,140774,140777],{},"大盒子 ",[48,140775,140776],{},"recom"," 推荐模块 recommend",[1549,140779,140780],{},[22,140781,140782,140783,140785,140786,140789],{},"给这个 ",[48,140784,140776],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[48,140787,140788],{},"#ebebeb","），设置距离上边 12px",[10,140791,140221],{},[41,140793,140795],{"className":126851,"code":140794,"language":126853,"meta":46,"style":46},"div {\n  background-color: #f0f0f0;\n}\n",[48,140796,140797,140803,140814],{"__ignoreMap":46},[51,140798,140799,140801],{"class":53,"line":54},[51,140800,51983],{"class":51672},[51,140802,15956],{"class":65},[51,140804,140805,140807,140809,140812],{"class":53,"line":185},[51,140806,71250],{"class":278},[51,140808,51809],{"class":65},[51,140810,140811],{"class":278},"#f0f0f0",[51,140813,1703],{"class":65},[51,140815,140816],{"class":53,"line":202},[51,140817,1974],{"class":65},[10,140819,140310],{},[41,140821,140822],{"className":126851,"code":140794,"language":126853,"meta":46,"style":46},[48,140823,140824,140830,140840],{"__ignoreMap":46},[51,140825,140826,140828],{"class":53,"line":54},[51,140827,51983],{"class":51672},[51,140829,15956],{"class":65},[51,140831,140832,140834,140836,140838],{"class":53,"line":185},[51,140833,71250],{"class":278},[51,140835,51809],{"class":65},[51,140837,140811],{"class":278},[51,140839,1703],{"class":65},[51,140841,140842],{"class":53,"line":202},[51,140843,1974],{"class":65},[10,140845,140846],{},"里面包含 2 个盒子， 浮动即可",[10,140848,140221],{},[41,140850,140851],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},[48,140852,140853,140859,140869],{"__ignoreMap":46},[51,140854,140855,140857],{"class":53,"line":54},[51,140856,130699],{"class":57},[51,140858,15956],{"class":65},[51,140860,140861,140863,140865,140867],{"class":53,"line":185},[51,140862,131331],{"class":278},[51,140864,51809],{"class":65},[51,140866,24119],{"class":278},[51,140868,1703],{"class":65},[51,140870,140871],{"class":53,"line":202},[51,140872,1974],{"class":65},[10,140874,140875,140876],{},"1 号盒子 ",[48,140877,140878],{},"recom_hd",[1549,140880,140881,140884],{},[22,140882,140883],{},"设置宽度205px，高度163px",[22,140885,140355,140886,140888],{},[48,140887,460],{},"标签，插入图片即可",[10,140890,140221],{},[41,140892,140893],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,140894,140895],{"__ignoreMap":46},[51,140896,140897,140899,140901,140903,140905,140907,140909,140911,140913,140915,140917,140919],{"class":53,"line":54},[51,140898,1452],{"class":65},[51,140900,460],{"class":51672},[51,140902,55611],{"class":57},[51,140904,70],{"class":65},[51,140906,134368],{"class":61},[51,140908,55619],{"class":57},[51,140910,70],{"class":65},[51,140912,134375],{"class":61},[51,140914,134378],{"class":57},[51,140916,70],{"class":65},[51,140918,134383],{"class":61},[51,140920,51679],{"class":65},[10,140922,140310],{},[41,140924,140925],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,140926,140927],{"__ignoreMap":46},[51,140928,140929,140931,140933,140935,140937,140939,140941,140943,140945,140947,140949,140951],{"class":53,"line":54},[51,140930,1452],{"class":65},[51,140932,460],{"class":51672},[51,140934,55611],{"class":57},[51,140936,70],{"class":65},[51,140938,134368],{"class":61},[51,140940,55619],{"class":57},[51,140942,70],{"class":65},[51,140944,134375],{"class":61},[51,140946,134378],{"class":57},[51,140948,70],{"class":65},[51,140950,134383],{"class":61},[51,140952,51679],{"class":65},[10,140954,140955,140956,140959],{},"2 号盒子 ",[48,140957,140958],{},"recom_bd"," ，注意里面的小竖线",[1549,140961,140962,140973,140976,140981,140986],{},[22,140963,140964,140965,140967,140968,140970,140971],{},"右侧结构里面放 ",[48,140966,1549],{}," 包含 4个 ",[48,140969,22],{},"，每个li里面包含一个",[48,140972,460],{},[22,140974,140975],{},"直接利用切片工具把里面的内容当成一张图片",[22,140977,139351,140978,140980],{},[48,140979,22],{}," 设置浮动",[22,140982,139351,140983,140985],{},[48,140984,460],{}," 设置宽高，宽度 248px，高度 163px",[22,140987,140988,140989,140549,140992,140994,140995,140997,140998],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[48,140990,140991],{},"top 10px",[48,140993,22],{},"设置相对定位（注意，最后一个",[48,140996,22],{},"不用设置伪元素），可以利用 ",[48,140999,141000],{},"nth-child(-n+3){...}",[10,141002,140221],{},[41,141004,141005],{"className":126851,"code":138693,"language":126853,"meta":46,"style":46},[48,141006,141007,141015,141025,141035],{"__ignoreMap":46},[51,141008,141009,141011,141013],{"class":53,"line":54},[51,141010,51983],{"class":51672},[51,141012,137852],{"class":57},[51,141014,15956],{"class":65},[51,141016,141017,141019,141021,141023],{"class":53,"line":185},[51,141018,137859],{"class":278},[51,141020,51809],{"class":65},[51,141022,8036],{"class":61},[51,141024,1703],{"class":65},[51,141026,141027,141029,141031,141033],{"class":53,"line":202},[51,141028,128467],{"class":278},[51,141030,51809],{"class":65},[51,141032,61241],{"class":278},[51,141034,1703],{"class":65},[51,141036,141037],{"class":53,"line":209},[51,141038,1974],{"class":65},[10,141040,140310],{},[41,141042,141043],{"className":126851,"code":138693,"language":126853,"meta":46,"style":46},[48,141044,141045,141053,141063,141073],{"__ignoreMap":46},[51,141046,141047,141049,141051],{"class":53,"line":54},[51,141048,51983],{"class":51672},[51,141050,137852],{"class":57},[51,141052,15956],{"class":65},[51,141054,141055,141057,141059,141061],{"class":53,"line":185},[51,141056,137859],{"class":278},[51,141058,51809],{"class":65},[51,141060,8036],{"class":61},[51,141062,1703],{"class":65},[51,141064,141065,141067,141069,141071],{"class":53,"line":202},[51,141066,128467],{"class":278},[51,141068,51809],{"class":65},[51,141070,61241],{"class":278},[51,141072,1703],{"class":65},[51,141074,141075],{"class":53,"line":209},[51,141076,1974],{"class":65},[513,141078,141080],{"id":141079},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[460,141082],{"style":126707,"src":141083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[10,141085,141086],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[10,141088,141089],{},"第一楼是家用电器模块： 里面包含两个盒子",[10,141091,141092,141095],{},[48,141093,141094],{},"box_hd"," 制作",[10,141097,140875,141098,141100],{},[48,141099,141094],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[460,141102],{"style":126707,"src":141103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1549,141105,141106,141111,141116,141119],{},[22,141107,141108,141110],{},[48,141109,141094],{}," 给 30px 的高度，2个像素的下边框",[22,141112,141113,141114],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[48,141115,139362],{},[22,141117,141118],{},"左侧盒左浮动，右侧盒子右浮动",[22,141120,141121,141123,141124,141126],{},[48,141122,780],{},"标签之间的距离用左右的",[48,141125,31261],{},"撑开即可",[10,141128,141129],{},"结构代码",[41,141131,141132],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},[48,141133,141134,141140,141150],{"__ignoreMap":46},[51,141135,141136,141138],{"class":53,"line":54},[51,141137,130699],{"class":57},[51,141139,15956],{"class":65},[51,141141,141142,141144,141146,141148],{"class":53,"line":185},[51,141143,131331],{"class":278},[51,141145,51809],{"class":65},[51,141147,24119],{"class":278},[51,141149,1703],{"class":65},[51,141151,141152],{"class":53,"line":202},[51,141153,1974],{"class":65},[10,141155,141156],{},"样式代码",[41,141158,141159],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},[48,141160,141161,141167,141177],{"__ignoreMap":46},[51,141162,141163,141165],{"class":53,"line":54},[51,141164,130699],{"class":57},[51,141166,15956],{"class":65},[51,141168,141169,141171,141173,141175],{"class":53,"line":185},[51,141170,131331],{"class":278},[51,141172,51809],{"class":65},[51,141174,24119],{"class":278},[51,141176,1703],{"class":65},[51,141178,141179],{"class":53,"line":202},[51,141180,1974],{"class":65},[10,141182,141183,141095],{},[48,141184,141185],{},"box_bd",[10,141187,141188],{},"2 号盒子 box_bd，不要给高度",[460,141190],{"style":126707,"src":141191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[10,141193,141194],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[10,141196,141197],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[10,141199,141200],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1549,141202,141203,141215,141231],{},[22,141204,141205,141207,141208,141211,141212,141214],{},[48,141206,141185],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[48,141209,141210],{},"tab_content","，在",[48,141213,141210],{}," 里面包裹tab选项卡对应的内容",[22,141216,141217,141218,141221,141222,141224,141225,141227,141228,141230],{},"内容被一个大盒子包裹（",[48,141219,141220],{},"tab_list_item","），里面是 ",[48,141223,1549],{}," 包裹 5个 ",[48,141226,22],{},"，每个",[48,141229,22],{},"设置对应的宽度，然后设置浮动",[22,141232,141233,141234,141236,141237,141239,141240],{},"而这5个",[48,141235,22],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[48,141238,22],{},"设置",[1549,141241,141242,141260,141263],{},[22,141243,141244,141245,141247,141248,141250,141251,141253,141254,141256,141257,141259],{},"第一个小 ",[48,141246,22],{}," 分为上下结构，上面是 ",[48,141249,1549],{}," 包裹 ",[48,141252,22],{}," ，",[48,141255,22],{},"里面包裹 ",[48,141258,780],{},"，下面插入一张图片",[22,141261,141262],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[22,141264,141265,141266,141268,141269,141271,141272,141274],{},"后面的小 ",[48,141267,22],{}," 里面先放一个",[48,141270,780],{},"标签，然后在",[48,141273,780],{},"标签里面插入图片即可",[10,141276,141129],{},[41,141278,141279],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,141280,141281],{"__ignoreMap":46},[51,141282,141283,141285,141287,141289,141291,141293,141295,141297,141299,141301,141303,141305],{"class":53,"line":54},[51,141284,1452],{"class":65},[51,141286,460],{"class":51672},[51,141288,55611],{"class":57},[51,141290,70],{"class":65},[51,141292,134368],{"class":61},[51,141294,55619],{"class":57},[51,141296,70],{"class":65},[51,141298,134375],{"class":61},[51,141300,134378],{"class":57},[51,141302,70],{"class":65},[51,141304,134383],{"class":61},[51,141306,51679],{"class":65},[10,141308,141156],{},[41,141310,141311],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,141312,141313],{"__ignoreMap":46},[51,141314,141315,141317,141319,141321,141323,141325,141327,141329,141331,141333,141335,141337],{"class":53,"line":54},[51,141316,1452],{"class":65},[51,141318,460],{"class":51672},[51,141320,55611],{"class":57},[51,141322,70],{"class":65},[51,141324,134368],{"class":61},[51,141326,55619],{"class":57},[51,141328,70],{"class":65},[51,141330,134375],{"class":61},[51,141332,134378],{"class":57},[51,141334,70],{"class":65},[51,141336,134383],{"class":61},[51,141338,51679],{"class":65},[10,141340,141341],{},"tab栏切换需求！！！！！！介绍：",[460,141343],{"style":126707,"src":141344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1549,141346,141347,141355,141361,141364],{},[22,141348,141349,141352,141353],{},[48,141350,141351],{},"tab","栏的布局是 ",[48,141354,139362],{},[22,141356,141357,141358,141360],{},"有多少个",[48,141359,141351],{},"选项卡，那么对应就有多少个内容",[22,141362,141363],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[22,141365,141366,141367,141370,141371,141373,141374,141376],{},"等后面我们学习了",[48,141368,141369],{},"js","之后，我们就会配合",[48,141372,141369],{},"来实现，",[48,141375,141351],{},"栏的切换",[486,141378,141380],{"id":141379},"_162-列表制作","16.2 列表制作",[513,141382,141384],{"id":141383},"_1621-准备工作","16.2.1 准备工作",[1549,141386,141387,141390,141393,141396],{},[22,141388,141389],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[22,141391,141392],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[22,141394,141395],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[22,141397,141398],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[513,141400,141402,141403,101390,141405,141407],{"id":141401},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[48,141404,131856],{},[48,141406,54085],{}," 修改",[460,141409],{"style":126707,"src":141410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1549,141412,141413],{},[22,141414,141415],{},"秒杀盒子 sk（ second kill ） 定位即可",[10,141417,140221],{},[41,141419,141420],{"className":126851,"code":132283,"language":126853,"meta":46,"style":46},[48,141421,141422,141426,141440,141444,141458,141462,141476,141480,141494,141498],{"__ignoreMap":46},[51,141423,141424],{"class":53,"line":54},[51,141425,132290],{"class":601},[51,141427,141428,141430,141432,141434,141436,141438],{"class":53,"line":185},[51,141429,132295],{"class":57},[51,141431,80179],{"class":65},[51,141433,129211],{"class":278},[51,141435,51809],{"class":65},[51,141437,132304],{"class":278},[51,141439,129781],{"class":65},[51,141441,141442],{"class":53,"line":202},[51,141443,132311],{"class":601},[51,141445,141446,141448,141450,141452,141454,141456],{"class":53,"line":209},[51,141447,132316],{"class":57},[51,141449,80179],{"class":65},[51,141451,129211],{"class":278},[51,141453,51809],{"class":65},[51,141455,55136],{"class":278},[51,141457,129781],{"class":65},[51,141459,141460],{"class":53,"line":223},[51,141461,132331],{"class":601},[51,141463,141464,141466,141468,141470,141472,141474],{"class":53,"line":237},[51,141465,132336],{"class":57},[51,141467,80179],{"class":65},[51,141469,129211],{"class":278},[51,141471,51809],{"class":65},[51,141473,55203],{"class":278},[51,141475,129781],{"class":65},[51,141477,141478],{"class":53,"line":242},[51,141479,132351],{"class":601},[51,141481,141482,141484,141486,141488,141490,141492],{"class":53,"line":257},[51,141483,132356],{"class":57},[51,141485,80179],{"class":65},[51,141487,129211],{"class":278},[51,141489,51809],{"class":65},[51,141491,86605],{"class":278},[51,141493,129781],{"class":65},[51,141495,141496],{"class":53,"line":262},[51,141497,132371],{"class":601},[51,141499,141500,141502,141504,141506,141508,141510],{"class":53,"line":285},[51,141501,132376],{"class":57},[51,141503,80179],{"class":65},[51,141505,129211],{"class":278},[51,141507,51809],{"class":65},[51,141509,132385],{"class":278},[51,141511,129781],{"class":65},[10,141513,140310],{},[41,141515,141516],{"className":126851,"code":132283,"language":126853,"meta":46,"style":46},[48,141517,141518,141522,141536,141540,141554,141558,141572,141576,141590,141594],{"__ignoreMap":46},[51,141519,141520],{"class":53,"line":54},[51,141521,132290],{"class":601},[51,141523,141524,141526,141528,141530,141532,141534],{"class":53,"line":185},[51,141525,132295],{"class":57},[51,141527,80179],{"class":65},[51,141529,129211],{"class":278},[51,141531,51809],{"class":65},[51,141533,132304],{"class":278},[51,141535,129781],{"class":65},[51,141537,141538],{"class":53,"line":202},[51,141539,132311],{"class":601},[51,141541,141542,141544,141546,141548,141550,141552],{"class":53,"line":209},[51,141543,132316],{"class":57},[51,141545,80179],{"class":65},[51,141547,129211],{"class":278},[51,141549,51809],{"class":65},[51,141551,55136],{"class":278},[51,141553,129781],{"class":65},[51,141555,141556],{"class":53,"line":223},[51,141557,132331],{"class":601},[51,141559,141560,141562,141564,141566,141568,141570],{"class":53,"line":237},[51,141561,132336],{"class":57},[51,141563,80179],{"class":65},[51,141565,129211],{"class":278},[51,141567,51809],{"class":65},[51,141569,55203],{"class":278},[51,141571,129781],{"class":65},[51,141573,141574],{"class":53,"line":242},[51,141575,132351],{"class":601},[51,141577,141578,141580,141582,141584,141586,141588],{"class":53,"line":257},[51,141579,132356],{"class":57},[51,141581,80179],{"class":65},[51,141583,129211],{"class":278},[51,141585,51809],{"class":65},[51,141587,86605],{"class":278},[51,141589,129781],{"class":65},[51,141591,141592],{"class":53,"line":262},[51,141593,132371],{"class":601},[51,141595,141596,141598,141600,141602,141604,141606],{"class":53,"line":285},[51,141597,132376],{"class":57},[51,141599,80179],{"class":65},[51,141601,129211],{"class":278},[51,141603,51809],{"class":65},[51,141605,132385],{"class":278},[51,141607,129781],{"class":65},[1549,141609,141610,141621],{},[22,141611,141612,141613,141616,141617,101390,141619],{},"1 号盒子左侧浮动 ",[48,141614,141615],{},"sk_list"," 里面包含 ",[48,141618,1549],{},[48,141620,22],{},[22,141622,141623,141624,141616,141627,101390,141629],{},"2 号盒子左侧浮动 ",[48,141625,141626],{},"sk_con",[48,141628,1549],{},[48,141630,22],{},[10,141632,140221],{},[41,141634,141635],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},[48,141636,141637,141643,141653],{"__ignoreMap":46},[51,141638,141639,141641],{"class":53,"line":54},[51,141640,130699],{"class":57},[51,141642,15956],{"class":65},[51,141644,141645,141647,141649,141651],{"class":53,"line":185},[51,141646,131331],{"class":278},[51,141648,51809],{"class":65},[51,141650,24119],{"class":278},[51,141652,1703],{"class":65},[51,141654,141655],{"class":53,"line":202},[51,141656,1974],{"class":65},[10,141658,140310],{},[41,141660,141661],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},[48,141662,141663,141669,141679],{"__ignoreMap":46},[51,141664,141665,141667],{"class":53,"line":54},[51,141666,130699],{"class":57},[51,141668,15956],{"class":65},[51,141670,141671,141673,141675,141677],{"class":53,"line":185},[51,141672,131331],{"class":278},[51,141674,51809],{"class":65},[51,141676,24119],{"class":278},[51,141678,1703],{"class":65},[51,141680,141681],{"class":53,"line":202},[51,141682,1974],{"class":65},[513,141684,141686,141687],{"id":141685},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[48,141688,141689],{},"sk_container",[460,141691],{"style":126707,"src":141692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1549,141694,141695,141700],{},[22,141696,140875,141697,141699],{},[48,141698,141689],{}," 给宽度 1200，不要给高度",[22,141701,141702],{},"一定不要忘记清除浮动",[10,141704,140221],{},[41,141706,141707],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},[48,141708,141709,141715,141725],{"__ignoreMap":46},[51,141710,141711,141713],{"class":53,"line":54},[51,141712,130699],{"class":57},[51,141714,15956],{"class":65},[51,141716,141717,141719,141721,141723],{"class":53,"line":185},[51,141718,131331],{"class":278},[51,141720,51809],{"class":65},[51,141722,24119],{"class":278},[51,141724,1703],{"class":65},[51,141726,141727],{"class":53,"line":202},[51,141728,1974],{"class":65},[19,141730,141731],{},[22,141732,141733],{},"sk_hd制作",[1549,141735,141736],{},[22,141737,140955,141738,141741],{},[48,141739,141740],{},"sk_hd"," ，插入图片即可",[10,141743,140221],{},[41,141745,141746],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,141747,141748],{"__ignoreMap":46},[51,141749,141750,141752,141754,141756,141758,141760,141762,141764,141766,141768,141770,141772],{"class":53,"line":54},[51,141751,1452],{"class":65},[51,141753,460],{"class":51672},[51,141755,55611],{"class":57},[51,141757,70],{"class":65},[51,141759,134368],{"class":61},[51,141761,55619],{"class":57},[51,141763,70],{"class":65},[51,141765,134375],{"class":61},[51,141767,134378],{"class":57},[51,141769,70],{"class":65},[51,141771,134383],{"class":61},[51,141773,51679],{"class":65},[19,141775,141776],{"start":185},[22,141777,141778],{},"sk_bd制作",[1549,141780,141781],{},[22,141782,141783,141784,141787,141788,101390,141790,141792],{},"3 号盒子 ",[48,141785,141786],{},"sk_bd"," ，里面包含很多的 ",[48,141789,1549],{},[48,141791,22],{},[1549,141793,141794,141803],{},[22,141795,141796,141797,141799,141800,141802],{},"当鼠标移入到 ",[48,141798,22],{}," 上面的时候显示红色的边框，在这里先给 ",[48,141801,22],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[22,141804,141805,141806,141808,141809,141811,141812,141815,141816,141818],{},"由于给每个 ",[48,141807,22],{}," 都设置了外边距，导致一行的最后一个 ",[48,141810,22],{}," 掉了下来，在这里我们利用 ",[48,141813,141814],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[48,141817,22],{},"，去掉外边距就好了",[10,141820,140221],{},[41,141822,141823],{"className":126851,"code":139040,"language":126853,"meta":46,"style":46},[48,141824,141825,141831,141843],{"__ignoreMap":46},[51,141826,141827,141829],{"class":53,"line":54},[51,141828,51983],{"class":51672},[51,141830,15956],{"class":65},[51,141832,141833,141835,141837,141839,141841],{"class":53,"line":185},[51,141834,70842],{"class":278},[51,141836,51809],{"class":65},[51,141838,733],{"class":278},[51,141840,51928],{"class":278},[51,141842,1703],{"class":65},[51,141844,141845],{"class":53,"line":202},[51,141846,1974],{"class":65},[10,141848,140310],{},[41,141850,141851],{"className":126851,"code":139040,"language":126853,"meta":46,"style":46},[48,141852,141853,141859,141871],{"__ignoreMap":46},[51,141854,141855,141857],{"class":53,"line":54},[51,141856,51983],{"class":51672},[51,141858,15956],{"class":65},[51,141860,141861,141863,141865,141867,141869],{"class":53,"line":185},[51,141862,70842],{"class":278},[51,141864,51809],{"class":65},[51,141866,733],{"class":278},[51,141868,51928],{"class":278},[51,141870,1703],{"class":65},[51,141872,141873],{"class":53,"line":202},[51,141874,1974],{"class":65},[486,141876,141878],{"id":141877},"_163-注册页面制作","16.3 注册页面制作",[460,141880],{"style":126707,"src":141881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[10,141883,141884,141886],{},[691,141885,9409],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[460,141888],{"style":126707,"src":141889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[513,141891,141893],{"id":141892},"_1631-准备工作","16.3.1 准备工作",[1549,141895,141896,141899],{},[22,141897,141898],{},"创建register.html，引入 base.css，引入favicon图标",[22,141900,141901],{},"创建register.css ，在html页面进行引入",[513,141903,141905,141906,141908],{"id":141904},"_1632-header-头部实现","16.3.2 ",[48,141907,131856],{}," 头部实现",[1549,141910,141911,141914],{},[22,141912,141913],{},"整个内容用 版心 进行包裹",[22,141915,141916],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[10,141918,140221],{},[41,141920,141921],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,141922,141923],{"__ignoreMap":46},[51,141924,141925,141927,141929,141931,141933,141935,141937,141939,141941,141943,141945,141947],{"class":53,"line":54},[51,141926,1452],{"class":65},[51,141928,460],{"class":51672},[51,141930,55611],{"class":57},[51,141932,70],{"class":65},[51,141934,134368],{"class":61},[51,141936,55619],{"class":57},[51,141938,70],{"class":65},[51,141940,134375],{"class":61},[51,141942,134378],{"class":57},[51,141944,70],{"class":65},[51,141946,134383],{"class":61},[51,141948,51679],{"class":65},[10,141950,140310],{},[41,141952,141953],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,141954,141955],{"__ignoreMap":46},[51,141956,141957,141959,141961,141963,141965,141967,141969,141971,141973,141975,141977,141979],{"class":53,"line":54},[51,141958,1452],{"class":65},[51,141960,460],{"class":51672},[51,141962,55611],{"class":57},[51,141964,70],{"class":65},[51,141966,134368],{"class":61},[51,141968,55619],{"class":57},[51,141970,70],{"class":65},[51,141972,134375],{"class":61},[51,141974,134378],{"class":57},[51,141976,70],{"class":65},[51,141978,134383],{"class":61},[51,141980,51679],{"class":65},[513,141982,141984,141985,141988],{"id":141983},"_1633-registerarea-主体模块实现","16.3.3 ",[48,141986,141987],{},"registerarea"," 主体模块实现",[460,141990],{"style":126707,"src":141991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[10,141993,141994],{},"整个大盒子 高度为 522px，设置4个边框",[10,141996,140221],{},[41,141998,141999],{"className":126851,"code":131008,"language":126853,"meta":46,"style":46},[48,142000,142001,142007,142023],{"__ignoreMap":46},[51,142002,142003,142005],{"class":53,"line":54},[51,142004,51983],{"class":51672},[51,142006,15956],{"class":65},[51,142008,142009,142011,142013,142015,142017,142019,142021],{"class":53,"line":185},[51,142010,71268],{"class":278},[51,142012,51809],{"class":65},[51,142014,759],{"class":278},[51,142016,51864],{"class":69},[51,142018,51893],{"class":278},[51,142020,130243],{"class":278},[51,142022,1703],{"class":65},[51,142024,142025],{"class":53,"line":202},[51,142026,1974],{"class":65},[10,142028,140310],{},[41,142030,142031],{"className":126851,"code":131008,"language":126853,"meta":46,"style":46},[48,142032,142033,142039,142055],{"__ignoreMap":46},[51,142034,142035,142037],{"class":53,"line":54},[51,142036,51983],{"class":51672},[51,142038,15956],{"class":65},[51,142040,142041,142043,142045,142047,142049,142051,142053],{"class":53,"line":185},[51,142042,71268],{"class":278},[51,142044,51809],{"class":65},[51,142046,759],{"class":278},[51,142048,51864],{"class":69},[51,142050,51893],{"class":278},[51,142052,130243],{"class":278},[51,142054,1703],{"class":65},[51,142056,142057],{"class":53,"line":202},[51,142058,1974],{"class":65},[10,142060,142061],{},"1号盒子 是一个 h3 标签，放标题",[1549,142063,142064],{},[22,142065,142066],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[10,142068,140221],{},[41,142070,142071],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},[48,142072,142073,142079,142089],{"__ignoreMap":46},[51,142074,142075,142077],{"class":53,"line":54},[51,142076,130699],{"class":57},[51,142078,15956],{"class":65},[51,142080,142081,142083,142085,142087],{"class":53,"line":185},[51,142082,131331],{"class":278},[51,142084,51809],{"class":65},[51,142086,24119],{"class":278},[51,142088,1703],{"class":65},[51,142090,142091],{"class":53,"line":202},[51,142092,1974],{"class":65},[10,142094,140310],{},[41,142096,142097],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},[48,142098,142099,142105,142115],{"__ignoreMap":46},[51,142100,142101,142103],{"class":53,"line":54},[51,142102,130699],{"class":57},[51,142104,15956],{"class":65},[51,142106,142107,142109,142111,142113],{"class":53,"line":185},[51,142108,131331],{"class":278},[51,142110,51809],{"class":65},[51,142112,24119],{"class":278},[51,142114,1703],{"class":65},[51,142116,142117],{"class":53,"line":202},[51,142118,1974],{"class":65},[10,142120,142121],{},"2号盒子 里面放注册的内容",[1549,142123,142124,142127,142136,142150,142163,142166,142169,142187,142201],{},[22,142125,142126],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[22,142128,142129,142130,142132,142133,142135],{},"里面的内容利用 ",[48,142131,1549],{}," 包含 ",[48,142134,22],{}," 来实现的（不需要用表格）",[22,142137,139365,142138,142140,142141,142143,142144,142146,142147,142149],{},[48,142139,22],{}," 里面，左侧放 ",[48,142142,33983],{}," 标签， 中间放",[48,142145,54193],{}," 标签， 右侧放 ",[48,142148,51],{}," 提示信息",[22,142151,142152,142153,142155,142156,142158,142159,142162],{},"左侧 ",[48,142154,33983],{},"里面的文字都是右对齐，我们可以给",[48,142157,33983],{},"设置一个宽度（88px），然后利用",[48,142160,142161],{},"text-align"," 来设置右对齐",[22,142164,142165],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[22,142167,142168],{},"右侧 span修饰一下文字颜色",[22,142170,142171,142172],{},"提示信息的样式优化",[1549,142173,142174,142177,142180],{},[22,142175,142176],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[22,142178,142179],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[22,142181,142182,142183,142186],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[48,142184,142185],{},"vertical-algin"," 来设置 图片与文字对齐方式",[22,142188,142189,142190],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1549,142191,142192,142198],{},[22,142193,142194,142195,142197],{},"设置 ",[48,142196,23936],{}," 的 左右 12px 的内边距，设置一下文字颜色",[22,142199,142200],{},"分别设置 背景颜色",[22,142202,142203,142204,142206],{},"同意协议 和 完成注册 都是用 ",[48,142205,22],{}," 进行包裹",[10,142208,140221],{},[41,142210,142211],{"className":126851,"code":140794,"language":126853,"meta":46,"style":46},[48,142212,142213,142219,142229],{"__ignoreMap":46},[51,142214,142215,142217],{"class":53,"line":54},[51,142216,51983],{"class":51672},[51,142218,15956],{"class":65},[51,142220,142221,142223,142225,142227],{"class":53,"line":185},[51,142222,71250],{"class":278},[51,142224,51809],{"class":65},[51,142226,140811],{"class":278},[51,142228,1703],{"class":65},[51,142230,142231],{"class":53,"line":202},[51,142232,1974],{"class":65},[10,142234,140310],{},[41,142236,142237],{"className":126851,"code":140794,"language":126853,"meta":46,"style":46},[48,142238,142239,142245,142255],{"__ignoreMap":46},[51,142240,142241,142243],{"class":53,"line":54},[51,142242,51983],{"class":51672},[51,142244,15956],{"class":65},[51,142246,142247,142249,142251,142253],{"class":53,"line":185},[51,142248,71250],{"class":278},[51,142250,51809],{"class":65},[51,142252,140811],{"class":278},[51,142254,1703],{"class":65},[51,142256,142257],{"class":53,"line":202},[51,142258,1974],{"class":65},[513,142260,142262],{"id":142261},"_1634-底部实现","16.3.4 底部实现",[10,142264,140221],{},[41,142266,142267],{"className":126851,"code":140794,"language":126853,"meta":46,"style":46},[48,142268,142269,142275,142285],{"__ignoreMap":46},[51,142270,142271,142273],{"class":53,"line":54},[51,142272,51983],{"class":51672},[51,142274,15956],{"class":65},[51,142276,142277,142279,142281,142283],{"class":53,"line":185},[51,142278,71250],{"class":278},[51,142280,51809],{"class":65},[51,142282,140811],{"class":278},[51,142284,1703],{"class":65},[51,142286,142287],{"class":53,"line":202},[51,142288,1974],{"class":65},[10,142290,140310],{},[41,142292,142293],{"className":127598,"code":130955,"language":127600,"meta":46,"style":46},[48,142294,142295,142299,142313,142317],{"__ignoreMap":46},[51,142296,142297],{"class":53,"line":54},[51,142298,130962],{"class":601},[51,142300,142301,142303,142305,142307,142309,142311],{"class":53,"line":185},[51,142302,1452],{"class":65},[51,142304,51983],{"class":51672},[51,142306,53858],{"class":57},[51,142308,70],{"class":65},[51,142310,130975],{"class":61},[51,142312,51679],{"class":65},[51,142314,142315],{"class":53,"line":202},[51,142316,130982],{"class":65},[51,142318,142319,142321,142323],{"class":53,"line":209},[51,142320,52157],{"class":65},[51,142322,51983],{"class":51672},[51,142324,51679],{"class":65},[486,142326,142328],{"id":142327},"_164-项目总结","16.4 项目总结",[19,142330,142331,142334,142337,142340],{},[22,142332,142333],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[22,142335,142336],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[22,142338,142339],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[22,142341,142342],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[460,142344],{"style":126707,"src":142345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[19,142347,142348],{"start":223},[22,142349,142350],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[460,142352],{"style":126707,"src":142353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[19,142355,142356],{"start":237},[22,142357,142358],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[460,142360],{"style":126707,"src":142361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[41,142363,142364],{"className":127598,"code":137008,"language":127600,"meta":46,"style":46},[48,142365,142366],{"__ignoreMap":46},[51,142367,142368,142370,142372,142374,142376,142378,142380,142382,142384,142386,142388,142390],{"class":53,"line":54},[51,142369,1452],{"class":65},[51,142371,54193],{"class":51672},[51,142373,54196],{"class":57},[51,142375,70],{"class":65},[51,142377,63071],{"class":61},[51,142379,15304],{"class":57},[51,142381,70],{"class":65},[51,142383,137029],{"class":61},[51,142385,61392],{"class":57},[51,142387,70],{"class":65},[51,142389,137036],{"class":61},[51,142391,51679],{"class":65},[19,142393,142394,142397],{"start":242},[22,142395,142396],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[22,142398,142399],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[464,142401,142402],{},"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":46,"searchDepth":185,"depth":185,"links":142404},[142405,142410,142417,142425],{"id":140031,"depth":185,"text":140032,"children":142406},[142407,142408,142409],{"id":140035,"depth":202,"text":140036},{"id":140766,"depth":202,"text":140767},{"id":141079,"depth":202,"text":141080},{"id":141379,"depth":185,"text":141380,"children":142411},[142412,142413,142415],{"id":141383,"depth":202,"text":141384},{"id":141401,"depth":202,"text":142414},"16.2.2 列表页 header 和 nav 修改",{"id":141685,"depth":202,"text":142416},"16.2.3 列表页主体 sk_container",{"id":141877,"depth":185,"text":141878,"children":142418},[142419,142420,142422,142424],{"id":141892,"depth":202,"text":141893},{"id":141904,"depth":202,"text":142421},"16.3.2 header 头部实现",{"id":141983,"depth":202,"text":142423},"16.3.3 registerarea 主体模块实现",{"id":142261,"depth":202,"text":142262},{"id":142327,"depth":185,"text":142328},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140023,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142432,"title":142433,"body":142434,"description":23760,"extension":469,"meta":142542,"navigation":205,"path":142543,"seo":142544,"stem":142545,"__hash__":142546},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142435,"toc":142537},[142436,142439,142443,142446,142449,142458,142467,142471,142476,142483,142501,142504,142507,142510,142513,142516,142519,142522,142525,142528,142531,142534],[14,142437,142433],{"id":142438},"_17-web服务器与网站发布",[486,142440,142442],{"id":142441},"_171-web服务器","17.1 Web服务器",[10,142444,142445],{},"把自己网站上传到服务器上，可以让其他人访问",[460,142447],{"style":126707,"src":142448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[10,142450,142451,142454,142455],{},[691,142452,142453],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[691,142456,142457],{},"Web 服务器等",[10,142459,142460,142461,101390,142464,26122],{},"根据服务器在网络中所在的位置不同，又可分为 ",[691,142462,142463],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[691,142465,142466],{},"远程服务器",[513,142468,142470],{"id":142469},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[10,142472,142473],{},[691,142474,142475],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[10,142477,142478,142479],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[780,142480,142481],{"href":142481,"rel":142482},"http:\u002F\u002Ffree.3v.do\u002F",[24246],[1549,142484,142485,142488,142491,142498],{},[22,142486,142487],{},"去免费空间网站注册账号。",[22,142489,142490],{},"记录下主机名、用户名、密码、域名。",[22,142492,142493,142494,142497],{},"利用 ",[48,142495,142496],{},"utftp"," 软件 上传网站到远程服务器",[22,142499,142500],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[10,142502,142503],{},"使用软件上传，对上传软件文件进行解压",[460,142505],{"style":126707,"src":142506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[460,142508],{"style":126707,"src":142509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[10,142511,142512],{},"输入刚刚申请的服务器账号信息：",[460,142514],{"style":126707,"src":142515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[460,142517],{"style":126707,"src":142518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[460,142520],{"style":126707,"src":142521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[460,142523],{"style":126707,"src":142524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[10,142526,142527],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[460,142529],{"style":126707,"src":142530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[10,142532,142533],{},"浏览器输入域名即可访问",[10,142535,142536],{},"首页一定必须是index",{"title":46,"searchDepth":185,"depth":185,"links":142538},[142539],{"id":142441,"depth":185,"text":142442,"children":142540},[142541],{"id":142469,"depth":202,"text":142470},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142433,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142548,"title":142549,"body":142550,"description":23760,"extension":469,"meta":143477,"navigation":205,"path":143478,"seo":143479,"stem":143480,"__hash__":143481},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142551,"toc":143460},[142552,142555,142559,142562,142565,142576,142579,142583,142587,142592,142595,142598,142601,142604,142608,142634,142638,142642,142645,142648,142652,142685,142689,142692,142695,142759,142763,142767,142770,142773,142776,142780,142825,142829,142832,142862,142866,142870,142873,142876,142880,142883,142952,142955,143063,143065,143071,143075,143078,143081,143177,143180,143184,143208,143212,143215,143219,143222,143226,143229,143232,143235,143238,143242,143245,143248,143252,143256,143259,143262,143265,143268,143272,143275,143279,143282,143285,143330,143334,143338,143341,143344,143347,143379,143383,143386,143420,143424,143427,143457],[14,142553,142549],{"id":142554},"_18-2d动画与3d转换",[486,142556,142558],{"id":142557},"_181-css3-2d转换","18.1 CSS3 2D转换",[10,142560,142561],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[10,142563,142564],{},"转换（transform）你可以简单理解为变形",[1549,142566,142567,142570,142573],{},[22,142568,142569],{},"移动：translate",[22,142571,142572],{},"旋转：rotate",[22,142574,142575],{},"缩放：scale",[460,142577],{"style":126707,"src":142578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[513,142580,142582],{"id":142581},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22381,142584,142586],{"id":142585},"_18111-translate介绍","18.1.1.1 translate介绍",[10,142588,142589,142590],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[691,142591,133510],{},[460,142593],{"style":126707,"src":142594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[10,142596,142597],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[10,142599,142600],{},"对于行内元素无效",[10,142602,142603],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22381,142605,142607],{"id":142606},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[41,142609,142610],{"className":126851,"code":139040,"language":126853,"meta":46,"style":46},[48,142611,142612,142618,142630],{"__ignoreMap":46},[51,142613,142614,142616],{"class":53,"line":54},[51,142615,51983],{"class":51672},[51,142617,15956],{"class":65},[51,142619,142620,142622,142624,142626,142628],{"class":53,"line":185},[51,142621,70842],{"class":278},[51,142623,51809],{"class":65},[51,142625,733],{"class":278},[51,142627,51928],{"class":278},[51,142629,1703],{"class":65},[51,142631,142632],{"class":53,"line":202},[51,142633,1974],{"class":65},[513,142635,142637],{"id":142636},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22381,142639,142641],{"id":142640},"_18121-rotate介绍","18.1.2.1 rotate介绍",[10,142643,142644],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[460,142646],{"style":126707,"src":142647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22381,142649,142651],{"id":142650},"_18122-旋转效果","18.1.2.2 旋转效果",[41,142653,142655],{"className":126851,"code":142654,"language":126853,"meta":46,"style":46},"div {\n  transform: rotate(45deg);\n}\n",[48,142656,142657,142663,142681],{"__ignoreMap":46},[51,142658,142659,142661],{"class":53,"line":54},[51,142660,51983],{"class":51672},[51,142662,15956],{"class":65},[51,142664,142665,142667,142669,142672,142674,142676,142679],{"class":53,"line":185},[51,142666,136835],{"class":278},[51,142668,51809],{"class":65},[51,142670,142671],{"class":278},"rotate",[51,142673,546],{"class":65},[51,142675,1071],{"class":278},[51,142677,142678],{"class":69},"deg",[51,142680,3107],{"class":65},[51,142682,142683],{"class":53,"line":202},[51,142684,1974],{"class":65},[22381,142686,142688],{"id":142687},"_18123-三角做法","18.1.2.3 三角做法",[10,142690,142691],{},"该下标当经过最外层大盒子时会实现向上反转",[460,142693],{"style":126707,"src":142694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[41,142696,142697],{"className":126851,"code":135371,"language":126853,"meta":46,"style":46},[48,142698,142699,142703,142709,142719,142729,142745,142755],{"__ignoreMap":46},[51,142700,142701],{"class":53,"line":54},[51,142702,135378],{"class":601},[51,142704,142705,142707],{"class":53,"line":185},[51,142706,135383],{"class":57},[51,142708,15956],{"class":65},[51,142710,142711,142713,142715,142717],{"class":53,"line":202},[51,142712,70940],{"class":278},[51,142714,51809],{"class":65},[51,142716,733],{"class":278},[51,142718,1703],{"class":65},[51,142720,142721,142723,142725,142727],{"class":53,"line":209},[51,142722,71160],{"class":278},[51,142724,51809],{"class":65},[51,142726,733],{"class":278},[51,142728,1703],{"class":65},[51,142730,142731,142733,142735,142737,142739,142741,142743],{"class":53,"line":223},[51,142732,71268],{"class":278},[51,142734,51809],{"class":65},[51,142736,988],{"class":278},[51,142738,51864],{"class":69},[51,142740,51893],{"class":278},[51,142742,64363],{"class":278},[51,142744,1703],{"class":65},[51,142746,142747,142749,142751,142753],{"class":53,"line":237},[51,142748,135426],{"class":278},[51,142750,51809],{"class":65},[51,142752,62741],{"class":278},[51,142754,1703],{"class":65},[51,142756,142757],{"class":53,"line":242},[51,142758,1974],{"class":65},[513,142760,142762],{"id":142761},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22381,142764,142766],{"id":142765},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[10,142768,142769],{},"设置中心点",[460,142771],{"style":126707,"src":142772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[10,142774,142775],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22381,142777,142779],{"id":142778},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[41,142781,142783],{"className":126851,"code":142782,"language":126853,"meta":46,"style":46},"\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",[48,142784,142785,142790,142796,142811,142816,142821],{"__ignoreMap":46},[51,142786,142787],{"class":53,"line":54},[51,142788,142789],{"class":601},"\u002F* 转换中心点 *\u002F\n",[51,142791,142792,142794],{"class":53,"line":185},[51,142793,51983],{"class":51672},[51,142795,15956],{"class":65},[51,142797,142798,142801,142803,142805,142807,142809],{"class":53,"line":202},[51,142799,142800],{"class":278},"  transform-origin",[51,142802,51809],{"class":65},[51,142804,51964],{"class":278},[51,142806,17527],{"class":278},[51,142808,130714],{"class":65},[51,142810,135524],{"class":601},[51,142812,142813],{"class":53,"line":209},[51,142814,142815],{"class":601},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[51,142817,142818],{"class":53,"line":223},[51,142819,142820],{"class":601},"  \u002F* transform-origin: left top; *\u002F\n",[51,142822,142823],{"class":53,"line":237},[51,142824,1974],{"class":65},[22381,142826,142828],{"id":142827},"_18133-旋转案例","18.1.3.3 旋转案例",[460,142830],{"style":126707,"src":142831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[41,142833,142834],{"className":126851,"code":142654,"language":126853,"meta":46,"style":46},[48,142835,142836,142842,142858],{"__ignoreMap":46},[51,142837,142838,142840],{"class":53,"line":54},[51,142839,51983],{"class":51672},[51,142841,15956],{"class":65},[51,142843,142844,142846,142848,142850,142852,142854,142856],{"class":53,"line":185},[51,142845,136835],{"class":278},[51,142847,51809],{"class":65},[51,142849,142671],{"class":278},[51,142851,546],{"class":65},[51,142853,1071],{"class":278},[51,142855,142678],{"class":69},[51,142857,3107],{"class":65},[51,142859,142860],{"class":53,"line":202},[51,142861,1974],{"class":65},[513,142863,142865],{"id":142864},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22381,142867,142869],{"id":142868},"_18141-scale介绍","18.1.4.1 scale介绍",[10,142871,142872],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[460,142874],{"style":126707,"src":142875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22381,142877,142879],{"id":142878},"_18142-分页按钮","18.1.4.2 分页按钮",[460,142881],{"style":126707,"src":142882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[41,142884,142886],{"className":126851,"code":142885,"language":126853,"meta":46,"style":46},"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",[48,142887,142888,142894,142910,142914,142918,142923,142929,142943,142948],{"__ignoreMap":46},[51,142889,142890,142892],{"class":53,"line":54},[51,142891,51983],{"class":51672},[51,142893,15956],{"class":65},[51,142895,142896,142898,142900,142903,142905,142908],{"class":53,"line":185},[51,142897,136835],{"class":278},[51,142899,51809],{"class":65},[51,142901,142902],{"class":278},"scale",[51,142904,546],{"class":65},[51,142906,142907],{"class":278},"1.2",[51,142909,3107],{"class":65},[51,142911,142912],{"class":53,"line":202},[51,142913,1974],{"class":65},[51,142915,142916],{"class":53,"line":209},[51,142917,136312],{"class":65},[51,142919,142920],{"class":53,"line":223},[51,142921,142922],{"class":601},"\u002F* 2D 缩放 *\u002F\n",[51,142924,142925,142927],{"class":53,"line":237},[51,142926,51983],{"class":51672},[51,142928,15956],{"class":65},[51,142930,142931,142933,142935,142937,142939,142941],{"class":53,"line":242},[51,142932,136835],{"class":278},[51,142934,51809],{"class":65},[51,142936,142902],{"class":278},[51,142938,546],{"class":65},[51,142940,142907],{"class":278},[51,142942,3107],{"class":65},[51,142944,142945],{"class":53,"line":257},[51,142946,142947],{"class":601},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[51,142949,142950],{"class":53,"line":262},[51,142951,1974],{"class":65},[10,142953,142954],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[41,142956,142958],{"className":126851,"code":142957,"language":126853,"meta":46,"style":46},"\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",[48,142959,142960,142965,142975,142996,143017,143021,143026,143032,143059],{"__ignoreMap":46},[51,142961,142962],{"class":53,"line":54},[51,142963,142964],{"class":601},"\u002F* 定义动画 *\u002F\n",[51,142966,142967,142970,142973],{"class":53,"line":185},[51,142968,142969],{"class":69},"@keyframes",[51,142971,142972],{"class":248}," move",[51,142974,15956],{"class":65},[51,142976,142977,142980,142982,142984,142986,142989,142991,142993],{"class":53,"line":202},[51,142978,142979],{"class":57},"  0%",[51,142981,80179],{"class":65},[51,142983,48506],{"class":278},[51,142985,51809],{"class":65},[51,142987,142988],{"class":278},"translateX",[51,142990,546],{"class":65},[51,142992,733],{"class":278},[51,142994,142995],{"class":65},"); }\n",[51,142997,142998,143001,143003,143005,143007,143009,143011,143013,143015],{"class":53,"line":209},[51,142999,143000],{"class":57},"  100%",[51,143002,80179],{"class":65},[51,143004,48506],{"class":278},[51,143006,51809],{"class":65},[51,143008,142988],{"class":278},[51,143010,546],{"class":65},[51,143012,853],{"class":278},[51,143014,51864],{"class":69},[51,143016,142995],{"class":65},[51,143018,143019],{"class":53,"line":223},[51,143020,1974],{"class":65},[51,143022,143023],{"class":53,"line":237},[51,143024,143025],{"class":601},"\u002F* 调用动画 *\u002F\n",[51,143027,143028,143030],{"class":53,"line":242},[51,143029,51983],{"class":51672},[51,143031,15956],{"class":65},[51,143033,143034,143037,143039,143041,143043,143045,143047,143049,143051,143054,143057],{"class":53,"line":257},[51,143035,143036],{"class":278},"  animation",[51,143038,51809],{"class":65},[51,143040,135537],{"class":278},[51,143042,25500],{"class":278},[51,143044,1237],{"class":69},[51,143046,79052],{"class":278},[51,143048,4479],{"class":278},[51,143050,1237],{"class":69},[51,143052,143053],{"class":278}," infinite",[51,143055,143056],{"class":278}," alternate",[51,143058,1703],{"class":65},[51,143060,143061],{"class":53,"line":262},[51,143062,1974],{"class":65},[10,143064,142954],{},[41,143066,143069],{"className":143067,"code":143068,"language":5572},[5570],"\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",[48,143070,143068],{"__ignoreMap":46},[22381,143072,143074],{"id":143073},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[10,143076,143077],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[460,143079],{"style":126707,"src":143080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[41,143082,143083],{"className":126851,"code":142957,"language":126853,"meta":46,"style":46},[48,143084,143085,143089,143097,143115,143135,143139,143143,143149,143173],{"__ignoreMap":46},[51,143086,143087],{"class":53,"line":54},[51,143088,142964],{"class":601},[51,143090,143091,143093,143095],{"class":53,"line":185},[51,143092,142969],{"class":69},[51,143094,142972],{"class":248},[51,143096,15956],{"class":65},[51,143098,143099,143101,143103,143105,143107,143109,143111,143113],{"class":53,"line":202},[51,143100,142979],{"class":57},[51,143102,80179],{"class":65},[51,143104,48506],{"class":278},[51,143106,51809],{"class":65},[51,143108,142988],{"class":278},[51,143110,546],{"class":65},[51,143112,733],{"class":278},[51,143114,142995],{"class":65},[51,143116,143117,143119,143121,143123,143125,143127,143129,143131,143133],{"class":53,"line":209},[51,143118,143000],{"class":57},[51,143120,80179],{"class":65},[51,143122,48506],{"class":278},[51,143124,51809],{"class":65},[51,143126,142988],{"class":278},[51,143128,546],{"class":65},[51,143130,853],{"class":278},[51,143132,51864],{"class":69},[51,143134,142995],{"class":65},[51,143136,143137],{"class":53,"line":223},[51,143138,1974],{"class":65},[51,143140,143141],{"class":53,"line":237},[51,143142,143025],{"class":601},[51,143144,143145,143147],{"class":53,"line":242},[51,143146,51983],{"class":51672},[51,143148,15956],{"class":65},[51,143150,143151,143153,143155,143157,143159,143161,143163,143165,143167,143169,143171],{"class":53,"line":257},[51,143152,143036],{"class":278},[51,143154,51809],{"class":65},[51,143156,135537],{"class":278},[51,143158,25500],{"class":278},[51,143160,1237],{"class":69},[51,143162,79052],{"class":278},[51,143164,4479],{"class":278},[51,143166,1237],{"class":69},[51,143168,143053],{"class":278},[51,143170,143056],{"class":278},[51,143172,1703],{"class":65},[51,143174,143175],{"class":53,"line":262},[51,143176,1974],{"class":65},[10,143178,143179],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[513,143181,143183],{"id":143182},"_1823-知识点回顾","18.2.3 知识点回顾",[41,143185,143186],{"className":126851,"code":129020,"language":126853,"meta":46,"style":46},[48,143187,143188,143194,143204],{"__ignoreMap":46},[51,143189,143190,143192],{"class":53,"line":54},[51,143191,51983],{"class":51672},[51,143193,15956],{"class":65},[51,143195,143196,143198,143200,143202],{"class":53,"line":185},[51,143197,129033],{"class":278},[51,143199,51809],{"class":65},[51,143201,62108],{"class":278},[51,143203,1703],{"class":65},[51,143205,143206],{"class":53,"line":202},[51,143207,1974],{"class":65},[486,143209,143211],{"id":143210},"_183-3d-转换","18.3 3D 转换",[10,143213,143214],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[513,143216,143218],{"id":143217},"_1831-坐标轴认识","18.3.1 坐标轴认识",[460,143220],{"style":126707,"src":143221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[513,143223,143225],{"id":143224},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[460,143227],{"style":126707,"src":143228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[10,143230,143231],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[10,143233,143234],{},"translate3d的效果需要搭配透视perspective来使用",[460,143236],{"style":126707,"src":143237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[513,143239,143241],{"id":143240},"_1833-透视-perspective","18.3.3 透视 perspective",[460,143243],{"style":126707,"src":143244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[10,143246,143247],{},"透视写在父盒子上，单位为像素",[513,143249,143251],{"id":143250},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22381,143253,143255],{"id":143254},"_18341-分开解释","18.3.4.1 分开解释",[460,143257],{"style":126707,"src":143258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[460,143260],{"style":126707,"src":143261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[460,143263],{"style":126707,"src":143264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[10,143266,143267],{},"总结来说就是左手原则",[22381,143269,143271],{"id":143270},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[460,143273],{"style":126707,"src":143274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[513,143276,143278],{"id":143277},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[460,143280],{"style":126707,"src":143281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[460,143283],{"style":126707,"src":143284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[41,143286,143288],{"className":126851,"code":143287,"language":126853,"meta":46,"style":46},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[48,143289,143290,143296,143309,143326],{"__ignoreMap":46},[51,143291,143292,143294],{"class":53,"line":54},[51,143293,51983],{"class":51672},[51,143295,15956],{"class":65},[51,143297,143298,143301,143303,143305,143307],{"class":53,"line":185},[51,143299,143300],{"class":278},"  perspective",[51,143302,51809],{"class":65},[51,143304,65446],{"class":278},[51,143306,51864],{"class":69},[51,143308,1703],{"class":65},[51,143310,143311,143313,143315,143318,143320,143322,143324],{"class":53,"line":202},[51,143312,136835],{"class":278},[51,143314,51809],{"class":65},[51,143316,143317],{"class":278},"rotateX",[51,143319,546],{"class":65},[51,143321,1071],{"class":278},[51,143323,142678],{"class":69},[51,143325,3107],{"class":65},[51,143327,143328],{"class":53,"line":209},[51,143329,1974],{"class":65},[513,143331,143333],{"id":143332},"_1836-案例","18.3.6 案例",[22381,143335,143337],{"id":143336},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[460,143339],{"style":126707,"src":143340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[460,143342],{"style":126707,"src":143343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[460,143345],{"style":126707,"src":143346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[41,143348,143350],{"className":126851,"code":143349,"language":126853,"meta":46,"style":46},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[48,143351,143352,143357,143363,143375],{"__ignoreMap":46},[51,143353,143354],{"class":53,"line":54},[51,143355,143356],{"class":601},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[51,143358,143359,143361],{"class":53,"line":185},[51,143360,133848],{"class":57},[51,143362,15956],{"class":65},[51,143364,143365,143367,143369,143371,143373],{"class":53,"line":202},[51,143366,143300],{"class":278},[51,143368,51809],{"class":65},[51,143370,65446],{"class":278},[51,143372,51864],{"class":69},[51,143374,1703],{"class":65},[51,143376,143377],{"class":53,"line":209},[51,143378,1974],{"class":65},[22381,143380,143382],{"id":143381},"_18362-3d导航栏","18.3.6.2 3D导航栏",[460,143384],{"style":126707,"src":143385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[41,143387,143388],{"className":127598,"code":130955,"language":127600,"meta":46,"style":46},[48,143389,143390,143394,143408,143412],{"__ignoreMap":46},[51,143391,143392],{"class":53,"line":54},[51,143393,130962],{"class":601},[51,143395,143396,143398,143400,143402,143404,143406],{"class":53,"line":185},[51,143397,1452],{"class":65},[51,143399,51983],{"class":51672},[51,143401,53858],{"class":57},[51,143403,70],{"class":65},[51,143405,130975],{"class":61},[51,143407,51679],{"class":65},[51,143409,143410],{"class":53,"line":202},[51,143411,130982],{"class":65},[51,143413,143414,143416,143418],{"class":53,"line":209},[51,143415,52157],{"class":65},[51,143417,51983],{"class":51672},[51,143419,51679],{"class":65},[22381,143421,143423],{"id":143422},"_18363-旋转木马","18.3.6.3 旋转木马",[460,143425],{"style":126707,"src":143426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[41,143428,143429],{"className":126851,"code":142654,"language":126853,"meta":46,"style":46},[48,143430,143431,143437,143453],{"__ignoreMap":46},[51,143432,143433,143435],{"class":53,"line":54},[51,143434,51983],{"class":51672},[51,143436,15956],{"class":65},[51,143438,143439,143441,143443,143445,143447,143449,143451],{"class":53,"line":185},[51,143440,136835],{"class":278},[51,143442,51809],{"class":65},[51,143444,142671],{"class":278},[51,143446,546],{"class":65},[51,143448,1071],{"class":278},[51,143450,142678],{"class":69},[51,143452,3107],{"class":65},[51,143454,143455],{"class":53,"line":202},[51,143456,1974],{"class":65},[464,143458,143459],{},"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":46,"searchDepth":185,"depth":185,"links":143461},[143462,143469],{"id":142557,"depth":185,"text":142558,"children":143463},[143464,143465,143466,143467,143468],{"id":142581,"depth":202,"text":142582},{"id":142636,"depth":202,"text":142637},{"id":142761,"depth":202,"text":142762},{"id":142864,"depth":202,"text":142865},{"id":143182,"depth":202,"text":143183},{"id":143210,"depth":185,"text":143211,"children":143470},[143471,143472,143473,143474,143475,143476],{"id":143217,"depth":202,"text":143218},{"id":143224,"depth":202,"text":143225},{"id":143240,"depth":202,"text":143241},{"id":143250,"depth":202,"text":143251},{"id":143277,"depth":202,"text":143278},{"id":143332,"depth":202,"text":143333},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142549,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143483,"title":143484,"body":143485,"description":23760,"extension":469,"meta":143688,"navigation":205,"path":143689,"seo":143690,"stem":143691,"__hash__":143692},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143486,"toc":143677},[143487,143490,143494,143497,143500,143504,143507,143510,143513,143517,143520,143524,143527,143531,143534,143538,143552,143556,143581,143584,143587,143604,143608,143612,143615,143618,143622,143625,143628,143646,143650,143653,143667,143671,143674],[14,143488,143484],{"id":143489},"_19-移动端基础-前缀现状与视口",[486,143491,143493],{"id":143492},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[460,143495],{"style":126707,"src":143496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[10,143498,143499],{},"意思就是加个前缀，增加兼容性",[486,143501,143503],{"id":143502},"_192-移动端现状认识","19.2 移动端现状认识",[460,143505],{"style":126707,"src":143506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[10,143508,143509],{},"调试方法：",[460,143511],{"style":126707,"src":143512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[486,143514,143516],{"id":143515},"_193-视口","19.3 视口",[10,143518,143519],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[513,143521,143523],{"id":143522},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[460,143525],{"style":126707,"src":143526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[513,143528,143530],{"id":143529},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[460,143532],{"style":126707,"src":143533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[513,143535,143537],{"id":143536},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1549,143539,143540,143543,143546,143549],{},[22,143541,143542],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[22,143544,143545],{},"理想视口，对设备来讲，是最理想的视口尺寸",[22,143547,143548],{},"需要手动添写meta视口标签通知浏览器操作",[22,143550,143551],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[513,143553,143555],{"id":143554},"_1934-meta视口标签","19.3.4 meta视口标签",[41,143557,143559],{"className":127598,"code":143558,"language":127600,"meta":46,"style":46},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[48,143560,143561],{"__ignoreMap":46},[51,143562,143563,143565,143567,143569,143571,143573,143575,143577,143579],{"class":53,"line":54},[51,143564,1452],{"class":65},[51,143566,51716],{"class":51672},[51,143568,15304],{"class":57},[51,143570,70],{"class":65},[51,143572,51763],{"class":61},[51,143574,51743],{"class":57},[51,143576,70],{"class":65},[51,143578,51770],{"class":61},[51,143580,51679],{"class":65},[460,143582],{"style":126707,"src":143583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[10,143585,143586],{},"标准视口设置：",[19,143588,143589,143592,143595,143598,143601],{},[22,143590,143591],{},"视口宽度和设备保持一致",[22,143593,143594],{},"视口的默认缩放比例1.0",[22,143596,143597],{},"不允许用户自行缩放",[22,143599,143600],{},"最大允许的缩放比例1.0",[22,143602,143603],{},"最小允许的缩放比例1.0",[513,143605,143607],{"id":143606},"_1935-二倍图","19.3.5 二倍图",[22381,143609,143611],{"id":143610},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[460,143613],{"style":126707,"src":143614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[460,143616],{"style":126707,"src":143617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22381,143619,143621],{"id":143620},"_19352-多倍图","19.3.5.2 多倍图",[460,143623],{"style":126707,"src":143624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[10,143626,143627],{},"二倍图法，代码如下：",[41,143629,143631],{"className":126851,"code":143630,"language":126853,"meta":46,"style":46},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[48,143632,143633,143638],{"__ignoreMap":46},[51,143634,143635],{"class":53,"line":54},[51,143636,143637],{"class":601},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[51,143639,143640,143643],{"class":53,"line":185},[51,143641,143642],{"class":51672},"background-size",[51,143644,143645],{"class":65},": 50% 50%;\n",[22381,143647,143649],{"id":143648},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[460,143651],{"style":126707,"src":143652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[19,143654,143655,143658,143661,143664],{},[22,143656,143657],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[22,143659,143660],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[22,143662,143663],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[22,143665,143666],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22381,143668,143670],{"id":143669},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[460,143672],{"style":126707,"src":143673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[464,143675,143676],{},"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":46,"searchDepth":185,"depth":185,"links":143678},[143679,143680,143681],{"id":143492,"depth":185,"text":143493},{"id":143502,"depth":185,"text":143503},{"id":143515,"depth":185,"text":143516,"children":143682},[143683,143684,143685,143686,143687],{"id":143522,"depth":202,"text":143523},{"id":143529,"depth":202,"text":143530},{"id":143536,"depth":202,"text":143537},{"id":143554,"depth":202,"text":143555},{"id":143606,"depth":202,"text":143607},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143484,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143694,"title":143695,"body":143696,"description":23760,"extension":469,"meta":144573,"navigation":205,"path":144574,"seo":144575,"stem":144576,"__hash__":144577},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143697,"toc":144557},[143698,143701,143705,143712,143715,143722,143725,143730,143733,143737,143741,143748,143751,143754,143758,143761,143764,143767,143770,143773,143777,143780,143784,143786,143789,143792,143795,143798,143800,143803,143805,143835,143837,143867,143871,143874,143878,143881,143898,143901,143904,143980,143982,143985,143988,143991,143994,143996,143999,144002,144006,144028,144031,144034,144038,144041,144047,144050,144054,144057,144060,144064,144067,144070,144073,144077,144080,144083,144086,144089,144093,144096,144100,144107,144110,144113,144116,144119,144129,144132,144135,144142,144145,144149,144152,144155,144159,144162,144165,144168,144213,144216,144219,144222,144224,144353,144355,144393,144396,144399,144401,144519,144521,144555],[14,143699,143695],{"id":143700},"_20-移动端布局实战上篇",[486,143702,143704],{"id":143703},"_201-移动端主流方案","20.1 移动端主流方案",[19,143706,143707],{},[22,143708,143709],{},[691,143710,143711],{},"单独移动端页面（主流）",[460,143713],{"style":126707,"src":143714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[19,143716,143717],{"start":185},[22,143718,143719],{},[691,143720,143721],{},"响应式兼容PC移动端",[460,143723],{"style":126707,"src":143724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[19,143726,143727],{"start":202},[22,143728,143729],{},"两种页面选型布局方式",[460,143731],{"style":126707,"src":143732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[486,143734,143736],{"id":143735},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[513,143738,143740],{"id":143739},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[10,143742,143743,143744],{},"官网地址： ",[780,143745,143746],{"href":143746,"rel":143747},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24246],[460,143749],{"style":126707,"src":143750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[460,143752],{"style":126707,"src":143753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[513,143755,143757],{"id":143756},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[460,143759],{"style":126707,"src":143760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[460,143762],{"style":126707,"src":143763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[10,143765,143766],{},"去除高亮：",[10,143768,143769],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[10,143771,143772],{},"-webkit- tap-highlight-color: transparent;",[486,143774,143776],{"id":143775},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[460,143778],{"style":126707,"src":143779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[486,143781,143783],{"id":143782},"_204-流式布局案例","20.4 流式布局案例",[10,143785,574],{},[10,143787,143788],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[10,143790,143791],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[10,143793,143794],{},"图片格式：",[460,143796],{"style":126707,"src":143797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[10,143799,135894],{},[460,143801],{"style":126707,"src":143802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[10,143804,140221],{},[41,143806,143807],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,143808,143809],{"__ignoreMap":46},[51,143810,143811,143813,143815,143817,143819,143821,143823,143825,143827,143829,143831,143833],{"class":53,"line":54},[51,143812,1452],{"class":65},[51,143814,460],{"class":51672},[51,143816,55611],{"class":57},[51,143818,70],{"class":65},[51,143820,134368],{"class":61},[51,143822,55619],{"class":57},[51,143824,70],{"class":65},[51,143826,134375],{"class":61},[51,143828,134378],{"class":57},[51,143830,70],{"class":65},[51,143832,134383],{"class":61},[51,143834,51679],{"class":65},[10,143836,140310],{},[41,143838,143839],{"className":127598,"code":134353,"language":127600,"meta":46,"style":46},[48,143840,143841],{"__ignoreMap":46},[51,143842,143843,143845,143847,143849,143851,143853,143855,143857,143859,143861,143863,143865],{"class":53,"line":54},[51,143844,1452],{"class":65},[51,143846,460],{"class":51672},[51,143848,55611],{"class":57},[51,143850,70],{"class":65},[51,143852,134368],{"class":61},[51,143854,55619],{"class":57},[51,143856,70],{"class":65},[51,143858,134375],{"class":61},[51,143860,134378],{"class":57},[51,143862,70],{"class":65},[51,143864,134383],{"class":61},[51,143866,51679],{"class":65},[486,143868,143870],{"id":143869},"_205-flex布局","20.5 flex布局",[460,143872],{"style":126707,"src":143873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[513,143875,143877],{"id":143876},"_2051-布局原理","20.5.1 布局原理",[10,143879,143880],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1549,143882,143883,143886,143889,143892,143895],{},[22,143884,143885],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[22,143887,143888],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[22,143890,143891],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[22,143893,143894],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[22,143896,143897],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[10,143899,143900],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[10,143902,143903],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[41,143905,143907],{"className":126851,"code":143906,"language":126853,"meta":46,"style":46},"\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",[48,143908,143909,143914,143921,143931,143943,143954,143965,143976],{"__ignoreMap":46},[51,143910,143911],{"class":53,"line":54},[51,143912,143913],{"class":601},"\u002F* Flex 弹性布局 *\u002F\n",[51,143915,143916,143919],{"class":53,"line":185},[51,143917,143918],{"class":57},".container",[51,143920,15956],{"class":65},[51,143922,143923,143925,143927,143929],{"class":53,"line":202},[51,143924,128467],{"class":278},[51,143926,51809],{"class":65},[51,143928,51849],{"class":278},[51,143930,1703],{"class":65},[51,143932,143933,143936,143938,143941],{"class":53,"line":209},[51,143934,143935],{"class":278},"  flex-direction",[51,143937,51809],{"class":65},[51,143939,143940],{"class":278},"row",[51,143942,1703],{"class":65},[51,143944,143945,143948,143950,143952],{"class":53,"line":223},[51,143946,143947],{"class":278},"  justify-content",[51,143949,51809],{"class":65},[51,143951,52040],{"class":278},[51,143953,1703],{"class":65},[51,143955,143956,143959,143961,143963],{"class":53,"line":237},[51,143957,143958],{"class":278},"  align-items",[51,143960,51809],{"class":65},[51,143962,51964],{"class":278},[51,143964,1703],{"class":65},[51,143966,143967,143970,143972,143974],{"class":53,"line":242},[51,143968,143969],{"class":278},"  flex-wrap",[51,143971,51809],{"class":65},[51,143973,78982],{"class":278},[51,143975,1703],{"class":65},[51,143977,143978],{"class":53,"line":257},[51,143979,1974],{"class":65},[10,143981,70825],{},[10,143983,143984],{},".form-item .male-label {",[10,143986,143987],{},"   margin-right: 20px;",[10,143989,143990],{},"   display: inline-flex;",[10,143992,143993],{},"   align-items: center;",[10,143995,1488],{},[460,143997],{"style":126707,"src":143998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[460,144000],{"style":126707,"src":144001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[513,144003,144005],{"id":144004},"_2052-常见父项属性","20.5.2 常见父项属性",[19,144007,144008,144011,144014,144017,144020,144023,144026],{},[22,144009,144010],{},"flex-direction：设置主轴的方向",[22,144012,144013],{},"justify-content：设置主轴上的子元素排列方式",[22,144015,144016],{},"flex-wrap：设置子元素是否换行",[22,144018,144019],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[22,144021,144022],{},"align-items：设置侧轴上的子元素排列方式（单行）",[22,144024,144025],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[22,144027,144010],{},[460,144029],{"style":126707,"src":144030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[460,144032],{"style":126707,"src":144033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[19,144035,144036],{"start":185},[22,144037,144013],{},[460,144039],{"style":126707,"src":144040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[10,144042,144043,144046],{},[48,144044,144045],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[10,144048,144049],{},"跟着主轴走",[19,144051,144052],{"start":202},[22,144053,144016],{},[460,144055],{"style":126707,"src":144056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[10,144058,144059],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[19,144061,144062],{"start":209},[22,144063,144019],{},[460,144065],{"style":126707,"src":144066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[10,144068,144069],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[10,144071,144072],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[19,144074,144075],{"start":223},[22,144076,144022],{},[460,144078],{"style":126707,"src":144079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[10,144081,144082],{},"align-items与align-content之间的区别：",[10,144084,144085],{},"单找items，多找content",[460,144087],{"style":126707,"src":144088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[19,144090,144091],{"start":237},[22,144092,144025],{},[460,144094],{"style":126707,"src":144095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[513,144097,144099],{"id":144098},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[19,144101,144102],{},[22,144103,144104],{},[691,144105,144106],{},"flex 属性",[10,144108,144109],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[460,144111],{"style":126707,"src":144112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[10,144114,144115],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[10,144117,144118],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[19,144120,144121],{"start":185},[22,144122,144123,14179,144126],{},[691,144124,144125],{},"align-self",[691,144127,144128],{},"控制子项自己在侧轴上的排列方式",[460,144130],{"style":126707,"src":144131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[10,144133,144134],{},"单个子盒子在父盒子侧轴上的排列方式",[19,144136,144137],{"start":202},[22,144138,144139,144141],{},[691,144140,95669],{}," 属性定义项目的排列顺序",[460,144143],{"style":126707,"src":144144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[513,144146,144148],{"id":144147},"_2054-背景线性渐变","20.5.4 背景线性渐变",[460,144150],{"style":126707,"src":144151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[10,144153,144154],{},"必须要添加浏览器的私有前缀",[513,144156,144158],{"id":144157},"_2055-携程网首页案例","20.5.5 携程网首页案例",[10,144160,144161],{},"学到最重要的知识：",[10,144163,144164],{},"flex处理这样的布局思路",[460,144166],{"style":126707,"src":144167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[41,144169,144171],{"className":126851,"code":144170,"language":126853,"meta":46,"style":46},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[48,144172,144173,144179,144189,144199,144209],{"__ignoreMap":46},[51,144174,144175,144177],{"class":53,"line":54},[51,144176,143918],{"class":57},[51,144178,15956],{"class":65},[51,144180,144181,144183,144185,144187],{"class":53,"line":185},[51,144182,128467],{"class":278},[51,144184,51809],{"class":65},[51,144186,51849],{"class":278},[51,144188,1703],{"class":65},[51,144190,144191,144193,144195,144197],{"class":53,"line":202},[51,144192,143947],{"class":278},[51,144194,51809],{"class":65},[51,144196,51964],{"class":278},[51,144198,1703],{"class":65},[51,144200,144201,144203,144205,144207],{"class":53,"line":209},[51,144202,143958],{"class":278},[51,144204,51809],{"class":65},[51,144206,51964],{"class":278},[51,144208,1703],{"class":65},[51,144210,144211],{"class":53,"line":223},[51,144212,1974],{"class":65},[10,144214,144215],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[10,144217,144218],{},"使用属性选择器",[460,144220],{"style":126707,"src":144221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[10,144223,69261],{},[41,144225,144227],{"className":127598,"code":144226,"language":127600,"meta":46,"style":46},"\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",[48,144228,144229,144234,144248,144253,144273,144278,144297,144302,144321,144326,144345],{"__ignoreMap":46},[51,144230,144231],{"class":53,"line":54},[51,144232,144233],{"class":601},"\u003C!-- 携程网移动端案例结构 -->\n",[51,144235,144236,144238,144240,144242,144244,144246],{"class":53,"line":185},[51,144237,1452],{"class":65},[51,144239,51983],{"class":51672},[51,144241,53858],{"class":57},[51,144243,70],{"class":65},[51,144245,92695],{"class":61},[51,144247,51679],{"class":65},[51,144249,144250],{"class":53,"line":202},[51,144251,144252],{"class":601},"  \u003C!-- 搜索栏 -->\n",[51,144254,144255,144257,144259,144261,144263,144266,144269,144271],{"class":53,"line":209},[51,144256,52516],{"class":65},[51,144258,51983],{"class":51672},[51,144260,53858],{"class":57},[51,144262,70],{"class":65},[51,144264,144265],{"class":61},"\"search-index\"",[51,144267,144268],{"class":65},">...\u003C\u002F",[51,144270,51983],{"class":51672},[51,144272,51679],{"class":65},[51,144274,144275],{"class":53,"line":223},[51,144276,144277],{"class":601},"  \u003C!-- 焦点图 -->\n",[51,144279,144280,144282,144284,144286,144288,144291,144293,144295],{"class":53,"line":237},[51,144281,52516],{"class":65},[51,144283,51983],{"class":51672},[51,144285,53858],{"class":57},[51,144287,70],{"class":65},[51,144289,144290],{"class":61},"\"focus\"",[51,144292,144268],{"class":65},[51,144294,51983],{"class":51672},[51,144296,51679],{"class":65},[51,144298,144299],{"class":53,"line":242},[51,144300,144301],{"class":601},"  \u003C!-- 主导航 -->\n",[51,144303,144304,144306,144308,144310,144312,144315,144317,144319],{"class":53,"line":257},[51,144305,52516],{"class":65},[51,144307,51983],{"class":51672},[51,144309,53858],{"class":57},[51,144311,70],{"class":65},[51,144313,144314],{"class":61},"\"local-nav\"",[51,144316,144268],{"class":65},[51,144318,51983],{"class":51672},[51,144320,51679],{"class":65},[51,144322,144323],{"class":53,"line":262},[51,144324,144325],{"class":601},"  \u003C!-- 子导航 -->\n",[51,144327,144328,144330,144332,144334,144336,144339,144341,144343],{"class":53,"line":285},[51,144329,52516],{"class":65},[51,144331,51983],{"class":51672},[51,144333,53858],{"class":57},[51,144335,70],{"class":65},[51,144337,144338],{"class":61},"\"nav-common\"",[51,144340,144268],{"class":65},[51,144342,51983],{"class":51672},[51,144344,51679],{"class":65},[51,144346,144347,144349,144351],{"class":53,"line":296},[51,144348,52157],{"class":65},[51,144350,51983],{"class":51672},[51,144352,51679],{"class":65},[10,144354,70825],{},[41,144356,144357],{"className":126851,"code":137303,"language":126853,"meta":46,"style":46},[48,144358,144359,144373,144389],{"__ignoreMap":46},[51,144360,144361,144363,144365,144367,144369,144371],{"class":53,"line":54},[51,144362,54193],{"class":51672},[51,144364,1432],{"class":65},[51,144366,103479],{"class":57},[51,144368,70],{"class":69},[51,144370,63071],{"class":61},[51,144372,137320],{"class":65},[51,144374,144375,144377,144379,144381,144383,144385,144387],{"class":53,"line":185},[51,144376,71268],{"class":278},[51,144378,51809],{"class":65},[51,144380,759],{"class":278},[51,144382,51864],{"class":69},[51,144384,51893],{"class":278},[51,144386,130431],{"class":278},[51,144388,1703],{"class":65},[51,144390,144391],{"class":53,"line":202},[51,144392,1974],{"class":65},[10,144394,144395],{},"总代码和效果展示：",[460,144397],{"style":126707,"src":144398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[10,144400,69261],{},[41,144402,144403],{"className":127598,"code":144226,"language":127600,"meta":46,"style":46},[48,144404,144405,144409,144423,144427,144445,144449,144467,144471,144489,144493,144511],{"__ignoreMap":46},[51,144406,144407],{"class":53,"line":54},[51,144408,144233],{"class":601},[51,144410,144411,144413,144415,144417,144419,144421],{"class":53,"line":185},[51,144412,1452],{"class":65},[51,144414,51983],{"class":51672},[51,144416,53858],{"class":57},[51,144418,70],{"class":65},[51,144420,92695],{"class":61},[51,144422,51679],{"class":65},[51,144424,144425],{"class":53,"line":202},[51,144426,144252],{"class":601},[51,144428,144429,144431,144433,144435,144437,144439,144441,144443],{"class":53,"line":209},[51,144430,52516],{"class":65},[51,144432,51983],{"class":51672},[51,144434,53858],{"class":57},[51,144436,70],{"class":65},[51,144438,144265],{"class":61},[51,144440,144268],{"class":65},[51,144442,51983],{"class":51672},[51,144444,51679],{"class":65},[51,144446,144447],{"class":53,"line":223},[51,144448,144277],{"class":601},[51,144450,144451,144453,144455,144457,144459,144461,144463,144465],{"class":53,"line":237},[51,144452,52516],{"class":65},[51,144454,51983],{"class":51672},[51,144456,53858],{"class":57},[51,144458,70],{"class":65},[51,144460,144290],{"class":61},[51,144462,144268],{"class":65},[51,144464,51983],{"class":51672},[51,144466,51679],{"class":65},[51,144468,144469],{"class":53,"line":242},[51,144470,144301],{"class":601},[51,144472,144473,144475,144477,144479,144481,144483,144485,144487],{"class":53,"line":257},[51,144474,52516],{"class":65},[51,144476,51983],{"class":51672},[51,144478,53858],{"class":57},[51,144480,70],{"class":65},[51,144482,144314],{"class":61},[51,144484,144268],{"class":65},[51,144486,51983],{"class":51672},[51,144488,51679],{"class":65},[51,144490,144491],{"class":53,"line":262},[51,144492,144325],{"class":601},[51,144494,144495,144497,144499,144501,144503,144505,144507,144509],{"class":53,"line":285},[51,144496,52516],{"class":65},[51,144498,51983],{"class":51672},[51,144500,53858],{"class":57},[51,144502,70],{"class":65},[51,144504,144338],{"class":61},[51,144506,144268],{"class":65},[51,144508,51983],{"class":51672},[51,144510,51679],{"class":65},[51,144512,144513,144515,144517],{"class":53,"line":296},[51,144514,52157],{"class":65},[51,144516,51983],{"class":51672},[51,144518,51679],{"class":65},[10,144520,70825],{},[41,144522,144523],{"className":127598,"code":130955,"language":127600,"meta":46,"style":46},[48,144524,144525,144529,144543,144547],{"__ignoreMap":46},[51,144526,144527],{"class":53,"line":54},[51,144528,130962],{"class":601},[51,144530,144531,144533,144535,144537,144539,144541],{"class":53,"line":185},[51,144532,1452],{"class":65},[51,144534,51983],{"class":51672},[51,144536,53858],{"class":57},[51,144538,70],{"class":65},[51,144540,130975],{"class":61},[51,144542,51679],{"class":65},[51,144544,144545],{"class":53,"line":202},[51,144546,130982],{"class":65},[51,144548,144549,144551,144553],{"class":53,"line":209},[51,144550,52157],{"class":65},[51,144552,51983],{"class":51672},[51,144554,51679],{"class":65},[464,144556,138252],{},{"title":46,"searchDepth":185,"depth":185,"links":144558},[144559,144560,144564,144565,144566],{"id":143703,"depth":185,"text":143704},{"id":143735,"depth":185,"text":143736,"children":144561},[144562,144563],{"id":143739,"depth":202,"text":143740},{"id":143756,"depth":202,"text":143757},{"id":143775,"depth":185,"text":143776},{"id":143782,"depth":185,"text":143783},{"id":143869,"depth":185,"text":143870,"children":144567},[144568,144569,144570,144571,144572],{"id":143876,"depth":202,"text":143877},{"id":144004,"depth":202,"text":144005},{"id":144098,"depth":202,"text":144099},{"id":144147,"depth":202,"text":144148},{"id":144157,"depth":202,"text":144158},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143695,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144579,"title":144580,"body":144581,"description":23760,"extension":469,"meta":145808,"navigation":205,"path":145809,"seo":145810,"stem":145811,"__hash__":145812},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144582,"toc":145786},[144583,144586,144590,144594,144597,144600,144604,144609,144612,144615,144618,144621,144624,144681,144684,144689,144692,144695,144699,144710,144714,144717,144720,144727,144732,144736,144739,144745,144748,144752,144755,144762,144765,144768,144775,144778,144785,144788,144791,144798,144801,144804,144806,144823,144827,144830,144833,144836,144840,144843,144846,144849,144852,144855,144858,144860,144863,144866,144928,144931,145041,145048,145054,145057,145060,145064,145067,145071,145076,145079,145086,145089,145095,145100,145103,145106,145109,145112,145115,145118,145121,145124,145180,145182,145208,145212,145215,145218,145221,145229,145232,145235,145239,145295,145298,145302,145308,145319,145322,145327,145330,145333,145339,145342,145345,145348,145351,145354,145357,145360,145363,145388,145394,145397,145400,145403,145406,145409,145412,145417,145420,145423,145426,145434,145437,145444,145447,145450,145452,145476,145478,145481,145484,145487,145490,145493,145496,145499,145533,145536,145539,145573,145580,145583,145586,145589,145592,145595,145598,145605,145608,145611,145614,145617,145624,145627,145630,145637,145640,145643,145647,145650,145653,145656,145659,145662,145665,145668,145671,145673,145697,145699,145723,145727,145738,145741,145744,145747,145750,145753,145756,145759,145762,145765,145768,145771,145774,145777,145780,145783],[14,144584,144580],{"id":144585},"_21-移动端布局实战下篇",[486,144587,144589],{"id":144588},"_211-rem适配布局","21.1 rem适配布局",[513,144591,144593],{"id":144592},"_2111-rem单位","21.1.1 rem单位",[460,144595],{"style":126707,"src":144596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[10,144598,144599],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[513,144601,144603],{"id":144602},"_2112-媒体查询","21.1.2 媒体查询",[19,144605,144606],{},[22,144607,144608],{},"参数介绍",[460,144610],{"style":126707,"src":144611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[460,144613],{"style":126707,"src":144614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[460,144616],{"style":126707,"src":144617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[460,144619],{"style":126707,"src":144620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[460,144622],{"style":126707,"src":144623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[41,144625,144627],{"className":126851,"code":144626,"language":126853,"meta":46,"style":46},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[48,144628,144629,144634,144653,144660,144673,144677],{"__ignoreMap":46},[51,144630,144631],{"class":53,"line":54},[51,144632,144633],{"class":601},"\u002F* 媒体查询 *\u002F\n",[51,144635,144636,144639,144641,144644,144646,144649,144651],{"class":53,"line":185},[51,144637,144638],{"class":69},"@media",[51,144640,2060],{"class":65},[51,144642,144643],{"class":278},"max-width",[51,144645,51809],{"class":65},[51,144647,144648],{"class":278},"768",[51,144650,51864],{"class":69},[51,144652,12826],{"class":65},[51,144654,144655,144658],{"class":53,"line":202},[51,144656,144657],{"class":57},"  .container",[51,144659,15956],{"class":65},[51,144661,144662,144665,144667,144669,144671],{"class":53,"line":209},[51,144663,144664],{"class":278},"    width",[51,144666,51809],{"class":65},[51,144668,853],{"class":278},[51,144670,870],{"class":69},[51,144672,1703],{"class":65},[51,144674,144675],{"class":53,"line":223},[51,144676,127647],{"class":65},[51,144678,144679],{"class":53,"line":237},[51,144680,1974],{"class":65},[10,144682,144683],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[19,144685,144686],{"start":185},[22,144687,144688],{},"引入资源",[460,144690],{"style":126707,"src":144691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[10,144693,144694],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[513,144696,144698],{"id":144697},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1549,144700,144701,144704,144707],{},[22,144702,144703],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[22,144705,144706],{},"媒体查询可以根据不同设备宽度来修改样式",[22,144708,144709],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[486,144711,144713],{"id":144712},"_212-less基础","21.2 Less基础",[10,144715,144716],{},"css冗余度较高，不利于复用，没有很好的计算能力",[10,144718,144719],{},"Less可以解决该问题，它是css的扩展语言",[10,144721,144722,144723],{},"Less中文网址： ",[780,144724,144725],{"href":144725,"rel":144726},"http:\u002F\u002Flesscss.cn\u002F",[24246],[10,144728,144729],{},[691,144730,144731],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[513,144733,144735],{"id":144734},"_2121-less安装","21.2.1 less安装",[10,144737,144738],{},"如果使用vscode，则无需进行下方安装步骤",[10,144740,144741],{},[780,144742,144743],{"href":144743,"rel":144744},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24246],[460,144746],{"style":126707,"src":144747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[513,144749,144751],{"id":144750},"_2122-less使用","21.2.2 less使用",[10,144753,144754],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[19,144756,144757],{},[22,144758,144759],{},[691,144760,144761],{},"Less 变量",[460,144763],{"style":126707,"src":144764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[460,144766],{"style":126707,"src":144767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[19,144769,144770],{"start":185},[22,144771,144772],{},[691,144773,144774],{},"Less 编译",[460,144776],{"style":126707,"src":144777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[19,144779,144780],{"start":202},[22,144781,144782],{},[691,144783,144784],{},"Less 嵌套",[460,144786],{"style":126707,"src":144787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[460,144789],{"style":126707,"src":144790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[19,144792,144793],{"start":209},[22,144794,144795],{},[691,144796,144797],{},"Less 运算",[460,144799],{"style":126707,"src":144800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[10,144802,144803],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[10,144805,574],{},[1549,144807,144808,144811,144814,144817,144820],{},[22,144809,144810],{},"乘号（*）和除号（\u002F）的写法",[22,144812,144813],{},"运算符中间左右有个空格隔开 1px + 5",[22,144815,144816],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[22,144818,144819],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[22,144821,144822],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[486,144824,144826],{"id":144825},"_213-rem-适配方案","21.3 rem 适配方案",[10,144828,144829],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[10,144831,144832],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[460,144834],{"style":126707,"src":144835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[513,144837,144839],{"id":144838},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[10,144841,144842],{},"rem + 媒体查询 + less 技术",[460,144844],{"style":126707,"src":144845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[10,144847,144848],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[10,144850,144851],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[460,144853],{"style":126707,"src":144854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[10,144856,144857],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[10,144859,15017],{},[460,144861],{"style":126707,"src":144862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[10,144864,144865],{},"index.html:",[41,144867,144869],{"className":126851,"code":144868,"language":126853,"meta":46,"style":46},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[48,144870,144871,144876,144882,144898,144902,144908,144924],{"__ignoreMap":46},[51,144872,144873],{"class":53,"line":54},[51,144874,144875],{"class":601},"\u002F* rem 适配方案 *\u002F\n",[51,144877,144878,144880],{"class":53,"line":185},[51,144879,51007],{"class":51672},[51,144881,15956],{"class":65},[51,144883,144884,144886,144888,144891,144893,144895],{"class":53,"line":202},[51,144885,70998],{"class":278},[51,144887,51809],{"class":65},[51,144889,144890],{"class":278},"62.5",[51,144892,870],{"class":69},[51,144894,130714],{"class":65},[51,144896,144897],{"class":601},"\u002F* 1rem = 10px *\u002F\n",[51,144899,144900],{"class":53,"line":209},[51,144901,1974],{"class":65},[51,144903,144904,144906],{"class":53,"line":223},[51,144905,130699],{"class":57},[51,144907,15956],{"class":65},[51,144909,144910,144912,144914,144916,144919,144921],{"class":53,"line":237},[51,144911,70940],{"class":278},[51,144913,51809],{"class":65},[51,144915,988],{"class":278},[51,144917,144918],{"class":69},"rem",[51,144920,130714],{"class":65},[51,144922,144923],{"class":601},"\u002F* 100px *\u002F\n",[51,144925,144926],{"class":53,"line":242},[51,144927,1974],{"class":65},[10,144929,144930],{},"common.less",[41,144932,144934],{"className":126851,"code":144933,"language":126853,"meta":46,"style":46},"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",[48,144935,144936,144942,144957,144961,144967,144981,144985,144989,144993,144999,145013,145017,145023,145037],{"__ignoreMap":46},[51,144937,144938,144940],{"class":53,"line":54},[51,144939,51007],{"class":51672},[51,144941,15956],{"class":65},[51,144943,144944,144946,144948,144950,144952,144954],{"class":53,"line":185},[51,144945,70998],{"class":278},[51,144947,51809],{"class":65},[51,144949,144890],{"class":278},[51,144951,870],{"class":69},[51,144953,26449],{"class":65},[51,144955,144956],{"class":601},"\u002F* 10px *\u002F\n",[51,144958,144959],{"class":53,"line":202},[51,144960,1974],{"class":65},[51,144962,144963,144965],{"class":53,"line":209},[51,144964,51983],{"class":51672},[51,144966,15956],{"class":65},[51,144968,144969,144971,144973,144975,144977,144979],{"class":53,"line":223},[51,144970,70940],{"class":278},[51,144972,51809],{"class":65},[51,144974,988],{"class":278},[51,144976,144918],{"class":69},[51,144978,26449],{"class":65},[51,144980,144923],{"class":601},[51,144982,144983],{"class":53,"line":237},[51,144984,1974],{"class":65},[51,144986,144987],{"class":53,"line":242},[51,144988,136312],{"class":65},[51,144990,144991],{"class":53,"line":257},[51,144992,144875],{"class":601},[51,144994,144995,144997],{"class":53,"line":262},[51,144996,51007],{"class":51672},[51,144998,15956],{"class":65},[51,145000,145001,145003,145005,145007,145009,145011],{"class":53,"line":285},[51,145002,70998],{"class":278},[51,145004,51809],{"class":65},[51,145006,144890],{"class":278},[51,145008,870],{"class":69},[51,145010,130714],{"class":65},[51,145012,144897],{"class":601},[51,145014,145015],{"class":53,"line":296},[51,145016,1974],{"class":65},[51,145018,145019,145021],{"class":53,"line":307},[51,145020,130699],{"class":57},[51,145022,15956],{"class":65},[51,145024,145025,145027,145029,145031,145033,145035],{"class":53,"line":324},[51,145026,70940],{"class":278},[51,145028,51809],{"class":65},[51,145030,988],{"class":278},[51,145032,144918],{"class":69},[51,145034,130714],{"class":65},[51,145036,144923],{"class":601},[51,145038,145039],{"class":53,"line":329},[51,145040,1974],{"class":65},[10,145042,145043,145044,145047],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23936,145045,145046],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[41,145049,145052],{"className":145050,"code":145051,"language":5572},[5570],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[48,145053,145051],{"__ignoreMap":46},[10,145055,145056],{},"less保存时会自动变成.css文件",[10,145058,145059],{},"好好搞懂上述代码写法",[513,145061,145063],{"id":145062},"_2132-样式导入样式","21.3.2 样式导入样式",[460,145065],{"style":126707,"src":145066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[513,145068,145070],{"id":145069},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[19,145072,145073],{},[22,145074,145075],{},"准备工作",[460,145077],{"style":126707,"src":145078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[10,145080,145081,145082],{},"github地址：",[780,145083,145084],{"href":145084,"rel":145085},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24246],[10,145087,145088],{},"下载之后，将index.js文件拖到项目中就可以了",[10,145090,145091,145092],{},"js文件引入到index.html中使用的是",[48,145093,145094],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[19,145096,145097],{"start":185},[22,145098,145099],{},"vscode插件",[460,145101],{"style":126707,"src":145102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[10,145104,145105],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[10,145107,145108],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[460,145110],{"style":126707,"src":145111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[10,145113,145114],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[460,145116],{"style":126707,"src":145117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[10,145119,145120],{},"修改成75就可以，alt+z为快捷键",[10,145122,145123],{},"index.css：",[41,145125,145126],{"className":126851,"code":144868,"language":126853,"meta":46,"style":46},[48,145127,145128,145132,145138,145152,145156,145162,145176],{"__ignoreMap":46},[51,145129,145130],{"class":53,"line":54},[51,145131,144875],{"class":601},[51,145133,145134,145136],{"class":53,"line":185},[51,145135,51007],{"class":51672},[51,145137,15956],{"class":65},[51,145139,145140,145142,145144,145146,145148,145150],{"class":53,"line":202},[51,145141,70998],{"class":278},[51,145143,51809],{"class":65},[51,145145,144890],{"class":278},[51,145147,870],{"class":69},[51,145149,130714],{"class":65},[51,145151,144897],{"class":601},[51,145153,145154],{"class":53,"line":209},[51,145155,1974],{"class":65},[51,145157,145158,145160],{"class":53,"line":223},[51,145159,130699],{"class":57},[51,145161,15956],{"class":65},[51,145163,145164,145166,145168,145170,145172,145174],{"class":53,"line":237},[51,145165,70940],{"class":278},[51,145167,51809],{"class":65},[51,145169,988],{"class":278},[51,145171,144918],{"class":69},[51,145173,130714],{"class":65},[51,145175,144923],{"class":601},[51,145177,145178],{"class":53,"line":242},[51,145179,1974],{"class":65},[10,145181,144865],{},[41,145183,145184],{"className":126851,"code":127255,"language":126853,"meta":46,"style":46},[48,145185,145186,145192,145204],{"__ignoreMap":46},[51,145187,145188,145190],{"class":53,"line":54},[51,145189,52172],{"class":51672},[51,145191,15956],{"class":65},[51,145193,145194,145196,145198,145200,145202],{"class":53,"line":185},[51,145195,70998],{"class":278},[51,145197,51809],{"class":65},[51,145199,1143],{"class":278},[51,145201,51864],{"class":69},[51,145203,1703],{"class":65},[51,145205,145206],{"class":53,"line":202},[51,145207,1974],{"class":65},[486,145209,145211],{"id":145210},"_214-响应式开发","21.4 响应式开发",[10,145213,145214],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[460,145216],{"style":126707,"src":145217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[10,145219,145220],{},"做法：",[1549,145222,145223,145226],{},[22,145224,145225],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[22,145227,145228],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[460,145230],{"style":126707,"src":145231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[10,145233,145234],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[513,145236,145238],{"id":145237},"_2141-简单代码示范","21.4.1 简单代码示范",[41,145240,145241],{"className":126851,"code":144868,"language":126853,"meta":46,"style":46},[48,145242,145243,145247,145253,145267,145271,145277,145291],{"__ignoreMap":46},[51,145244,145245],{"class":53,"line":54},[51,145246,144875],{"class":601},[51,145248,145249,145251],{"class":53,"line":185},[51,145250,51007],{"class":51672},[51,145252,15956],{"class":65},[51,145254,145255,145257,145259,145261,145263,145265],{"class":53,"line":202},[51,145256,70998],{"class":278},[51,145258,51809],{"class":65},[51,145260,144890],{"class":278},[51,145262,870],{"class":69},[51,145264,130714],{"class":65},[51,145266,144897],{"class":601},[51,145268,145269],{"class":53,"line":209},[51,145270,1974],{"class":65},[51,145272,145273,145275],{"class":53,"line":223},[51,145274,130699],{"class":57},[51,145276,15956],{"class":65},[51,145278,145279,145281,145283,145285,145287,145289],{"class":53,"line":237},[51,145280,70940],{"class":278},[51,145282,51809],{"class":65},[51,145284,988],{"class":278},[51,145286,144918],{"class":69},[51,145288,130714],{"class":65},[51,145290,144923],{"class":601},[51,145292,145293],{"class":53,"line":242},[51,145294,1974],{"class":65},[10,145296,145297],{},"父盒子一般命名为container",[513,145299,145301],{"id":145300},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[10,145303,145304,145305],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[691,145306,145307],{},"使得 Web 开发更加快捷",[1549,145309,145310],{},[22,145311,145312,145313],{},"官网：",[691,145314,145315],{},[780,145316,145317],{"href":145317,"rel":145318},"http:\u002F\u002Fgetbootstrap.com\u002F",[24246],[10,145320,145321],{},"可以直接去官网拿现成的东西",[19,145323,145324],{},[22,145325,145326],{},"Bootstrap的使用",[10,145328,145329],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[10,145331,145332],{},"Bootstrap 使用四步曲：",[10,145334,145335,145338],{},[691,145336,145337],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[460,145340],{"style":126707,"src":145341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[10,145343,145344],{},"打开Bootstrap官网，然后下载",[460,145346],{"style":126707,"src":145347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[460,145349],{"style":126707,"src":145350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[10,145352,145353],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[10,145355,145356],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[10,145358,145359],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[460,145361],{"style":126707,"src":145362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[41,145364,145366],{"className":126851,"code":145365,"language":126853,"meta":46,"style":46},".center {\n  color: red;\n}\n",[48,145367,145368,145374,145384],{"__ignoreMap":46},[51,145369,145370,145372],{"class":53,"line":54},[51,145371,127142],{"class":57},[51,145373,15956],{"class":65},[51,145375,145376,145378,145380,145382],{"class":53,"line":185},[51,145377,71277],{"class":278},[51,145379,51809],{"class":65},[51,145381,57793],{"class":278},[51,145383,1703],{"class":65},[51,145385,145386],{"class":53,"line":202},[51,145387,1974],{"class":65},[10,145389,145390,145393],{},[48,145391,145392],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[460,145395],{"style":126707,"src":145396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[460,145398],{"style":126707,"src":145399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[460,145401],{"style":126707,"src":145402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[10,145404,145405],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[460,145407],{"style":126707,"src":145408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[10,145410,145411],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[19,145413,145414],{"start":185},[22,145415,145416],{},"布局容器",[460,145418],{"style":126707,"src":145419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[10,145421,145422],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[10,145424,145425],{},"container-fluid用于移动式布局比较方便",[19,145427,145428],{"start":202},[22,145429,145430,145431],{},"bootstrap ",[691,145432,145433],{},"栅格系统原理",[460,145435],{"style":126707,"src":145436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[19,145438,145439],{"start":209},[22,145440,145441],{},[691,145442,145443],{},"栅格选项参数",[460,145445],{"style":126707,"src":145446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[10,145448,145449],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[10,145451,15017],{},[41,145453,145454],{"className":126851,"code":145365,"language":126853,"meta":46,"style":46},[48,145455,145456,145462,145472],{"__ignoreMap":46},[51,145457,145458,145460],{"class":53,"line":54},[51,145459,127142],{"class":57},[51,145461,15956],{"class":65},[51,145463,145464,145466,145468,145470],{"class":53,"line":185},[51,145465,71277],{"class":278},[51,145467,51809],{"class":65},[51,145469,57793],{"class":278},[51,145471,1703],{"class":65},[51,145473,145474],{"class":53,"line":202},[51,145475,1974],{"class":65},[10,145477,135894],{},[460,145479],{"style":126707,"src":145480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[10,145482,145483],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[10,145485,145486],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[10,145488,145489],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[10,145491,145492],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[10,145494,145495],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[10,145497,145498],{},"汇总展示说明：",[41,145500,145501],{"className":127598,"code":130955,"language":127600,"meta":46,"style":46},[48,145502,145503,145507,145521,145525],{"__ignoreMap":46},[51,145504,145505],{"class":53,"line":54},[51,145506,130962],{"class":601},[51,145508,145509,145511,145513,145515,145517,145519],{"class":53,"line":185},[51,145510,1452],{"class":65},[51,145512,51983],{"class":51672},[51,145514,53858],{"class":57},[51,145516,70],{"class":65},[51,145518,130975],{"class":61},[51,145520,51679],{"class":65},[51,145522,145523],{"class":53,"line":202},[51,145524,130982],{"class":65},[51,145526,145527,145529,145531],{"class":53,"line":209},[51,145528,52157],{"class":65},[51,145530,51983],{"class":51672},[51,145532,51679],{"class":65},[460,145534],{"style":126707,"src":145535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[10,145537,145538],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[41,145540,145541],{"className":127598,"code":130955,"language":127600,"meta":46,"style":46},[48,145542,145543,145547,145561,145565],{"__ignoreMap":46},[51,145544,145545],{"class":53,"line":54},[51,145546,130962],{"class":601},[51,145548,145549,145551,145553,145555,145557,145559],{"class":53,"line":185},[51,145550,1452],{"class":65},[51,145552,51983],{"class":51672},[51,145554,53858],{"class":57},[51,145556,70],{"class":65},[51,145558,130975],{"class":61},[51,145560,51679],{"class":65},[51,145562,145563],{"class":53,"line":202},[51,145564,130982],{"class":65},[51,145566,145567,145569,145571],{"class":53,"line":209},[51,145568,52157],{"class":65},[51,145570,51983],{"class":51672},[51,145572,51679],{"class":65},[19,145574,145575],{"start":223},[22,145576,145577],{},[691,145578,145579],{},"列嵌套",[460,145581],{"style":126707,"src":145582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[10,145584,145585],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[10,145587,145588],{},"没加row内部这样：",[460,145590],{"style":126707,"src":145591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[10,145593,145594],{},"加上row之后内部为：",[460,145596],{"style":126707,"src":145597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[19,145599,145600],{"start":237},[22,145601,145602],{},[691,145603,145604],{},"列偏移",[460,145606],{"style":126707,"src":145607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[10,145609,145610],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[10,145612,145613],{},"要加偏移量，即偏移份数",[10,145615,145616],{},"偏移的份数=12-两个盒子的份数",[19,145618,145619],{"start":242},[22,145620,145621],{},[691,145622,145623],{},"列排序",[460,145625],{"style":126707,"src":145626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[10,145628,145629],{},"pull拉左；push推右",[19,145631,145632],{"start":257},[22,145633,145634],{},[691,145635,145636],{},"响应式工具",[460,145638],{"style":126707,"src":145639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[10,145641,145642],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[513,145644,145646],{"id":145645},"_2143-响应式小项目","21.4.3 响应式小项目",[10,145648,145649],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[10,145651,145652],{},"ul {",[10,145654,145655],{},"list-style: none;",[10,145657,145658],{},"margin:0;",[10,145660,145661],{},"padding:0; }",[460,145663],{"style":126707,"src":145664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[460,145666],{"style":126707,"src":145667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[10,145669,145670],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[10,145672,69261],{},[41,145674,145675],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},[48,145676,145677,145683,145693],{"__ignoreMap":46},[51,145678,145679,145681],{"class":53,"line":54},[51,145680,130699],{"class":57},[51,145682,15956],{"class":65},[51,145684,145685,145687,145689,145691],{"class":53,"line":185},[51,145686,131331],{"class":278},[51,145688,51809],{"class":65},[51,145690,24119],{"class":278},[51,145692,1703],{"class":65},[51,145694,145695],{"class":53,"line":202},[51,145696,1974],{"class":65},[10,145698,70825],{},[41,145700,145701],{"className":126851,"code":139521,"language":126853,"meta":46,"style":46},[48,145702,145703,145709,145719],{"__ignoreMap":46},[51,145704,145705,145707],{"class":53,"line":54},[51,145706,130699],{"class":57},[51,145708,15956],{"class":65},[51,145710,145711,145713,145715,145717],{"class":53,"line":185},[51,145712,131331],{"class":278},[51,145714,51809],{"class":65},[51,145716,24119],{"class":278},[51,145718,1703],{"class":65},[51,145720,145721],{"class":53,"line":202},[51,145722,1974],{"class":65},[486,145724,145726],{"id":145725},"_215-swiper-插件使用","21.5 swiper 插件使用",[1549,145728,145729,145732,145735],{},[22,145730,145731],{},"下载需要的css和js文件html页面中 引入相关文件",[22,145733,145734],{},"官网找到类似案例，复制html结构，css样式 js 语法",[22,145736,145737],{},"根据需求定制修改模块",[460,145739],{"style":126707,"src":145740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[10,145742,145743],{},"解压后将这两部分放到项目中",[460,145745],{"style":126707,"src":145746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[10,145748,145749],{},"这个插件可以帮助我们实现轮播图效果",[10,145751,145752],{},"用法：",[460,145754],{"style":126707,"src":145755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[10,145757,145758],{},"找到自己喜欢的",[460,145760],{"style":126707,"src":145761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[10,145763,145764],{},"右键，查看网页源代码",[460,145766],{"style":126707,"src":145767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[10,145769,145770],{},"复制人家的结构内容",[10,145772,145773],{},"然后去看API文档：",[460,145775],{"style":126707,"src":145776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[10,145778,145779],{},"可以看看如何修改样式",[10,145781,145782],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[464,145784,145785],{},"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":46,"searchDepth":185,"depth":185,"links":145787},[145788,145793,145797,145802,145807],{"id":144588,"depth":185,"text":144589,"children":145789},[145790,145791,145792],{"id":144592,"depth":202,"text":144593},{"id":144602,"depth":202,"text":144603},{"id":144697,"depth":202,"text":144698},{"id":144712,"depth":185,"text":144713,"children":145794},[145795,145796],{"id":144734,"depth":202,"text":144735},{"id":144750,"depth":202,"text":144751},{"id":144825,"depth":185,"text":144826,"children":145798},[145799,145800,145801],{"id":144838,"depth":202,"text":144839},{"id":145062,"depth":202,"text":145063},{"id":145069,"depth":202,"text":145070},{"id":145210,"depth":185,"text":145211,"children":145803},[145804,145805,145806],{"id":145237,"depth":202,"text":145238},{"id":145300,"depth":202,"text":145301},{"id":145645,"depth":202,"text":145646},{"id":145725,"depth":185,"text":145726},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144580,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145814,"title":145815,"body":145816,"description":23760,"extension":469,"meta":146036,"navigation":205,"path":146037,"seo":146038,"stem":146039,"__hash__":146040},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145817,"toc":146032},[145818,145821,145825,145828,145843,145848,145851,145856,145891,145896,145908,145913,145926,145931,145948,145953,145973,145978,145996,145999,146002,146005,146008,146012,146015,146018,146021,146024,146027,146030],[14,145819,145815],{"id":145820},"_22-代码提交与新型相对单位",[486,145822,145824],{"id":145823},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[10,145826,145827],{},"法1：",[19,145829,145830,145837,145840],{},[22,145831,145832,145833],{},"登录网站注册：",[780,145834,145835],{"href":145835,"rel":145836},"https:\u002F\u002Fgitee.com\u002F",[24246],[22,145838,145839],{},"码云创建新的仓库",[22,145841,145842],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1549,145844,145845],{},[22,145846,145847],{},"在网站根目录右键-- Git Bash Here",[460,145849],{"style":126707,"src":145850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1549,145852,145853],{},[22,145854,145855],{},"如果是第一次利用git提交，请配置好全局选项",[41,145857,145859],{"className":117667,"code":145858,"language":117669,"meta":46,"style":46},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[48,145860,145861,145877],{"__ignoreMap":46},[51,145862,145863,145866,145868,145871,145874],{"class":53,"line":54},[51,145864,145865],{"class":57},"git",[51,145867,120090],{"class":61},[51,145869,145870],{"class":278}," --global",[51,145872,145873],{"class":61}," user.name",[51,145875,145876],{"class":61}," \"你的名字\"\n",[51,145878,145879,145881,145883,145885,145888],{"class":53,"line":185},[51,145880,145865],{"class":57},[51,145882,120090],{"class":61},[51,145884,145870],{"class":278},[51,145886,145887],{"class":61}," user.email",[51,145889,145890],{"class":61}," \"你的邮箱\"\n",[1549,145892,145893],{},[22,145894,145895],{},"初始化仓库",[41,145897,145899],{"className":117667,"code":145898,"language":117669,"meta":46,"style":46},"git init\n",[48,145900,145901],{"__ignoreMap":46},[51,145902,145903,145905],{"class":53,"line":54},[51,145904,145865],{"class":57},[51,145906,145907],{"class":61}," init\n",[1549,145909,145910],{},[22,145911,145912],{},"把本地文件放到暂存区",[41,145914,145916],{"className":117667,"code":145915,"language":117669,"meta":46,"style":46},"git add .\n",[48,145917,145918],{"__ignoreMap":46},[51,145919,145920,145922,145924],{"class":53,"line":54},[51,145921,145865],{"class":57},[51,145923,5594],{"class":61},[51,145925,29123],{"class":61},[1549,145927,145928],{},[22,145929,145930],{},"把本地文件放到本地仓库里面",[41,145932,145934],{"className":117667,"code":145933,"language":117669,"meta":46,"style":46},"git commit -m \"first commit\"\n",[48,145935,145936],{"__ignoreMap":46},[51,145937,145938,145940,145943,145945],{"class":53,"line":54},[51,145939,145865],{"class":57},[51,145941,145942],{"class":61}," commit",[51,145944,101254],{"class":278},[51,145946,145947],{"class":61}," \"first commit\"\n",[1549,145949,145950],{},[22,145951,145952],{},"链接远程仓库",[41,145954,145956],{"className":117667,"code":145955,"language":117669,"meta":46,"style":46},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[48,145957,145958],{"__ignoreMap":46},[51,145959,145960,145962,145965,145967,145970],{"class":53,"line":54},[51,145961,145865],{"class":57},[51,145963,145964],{"class":61}," remote",[51,145966,5594],{"class":61},[51,145968,145969],{"class":61}," origin",[51,145971,145972],{"class":61}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1549,145974,145975],{},[22,145976,145977],{},"把本地仓库的文件推送到远程仓库 push",[41,145979,145981],{"className":117667,"code":145980,"language":117669,"meta":46,"style":46},"git push -u origin master\n",[48,145982,145983],{"__ignoreMap":46},[51,145984,145985,145987,145989,145991,145993],{"class":53,"line":54},[51,145986,145865],{"class":57},[51,145988,29398],{"class":61},[51,145990,28672],{"class":278},[51,145992,145969],{"class":61},[51,145994,145995],{"class":61}," master\n",[460,145997],{"style":126707,"src":145998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[10,146000,146001],{},"上方方法暂未实现，后边学完git后在整",[10,146003,146004],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[460,146006],{"style":126707,"src":146007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[486,146009,146011],{"id":146010},"_222-新型相对单位","22.2 新型相对单位",[460,146013],{"style":126707,"src":146014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[460,146016],{"style":126707,"src":146017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[10,146019,146020],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[10,146022,146023],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[460,146025],{"style":126707,"src":146026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[10,146028,146029],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[464,146031,24339],{},{"title":46,"searchDepth":185,"depth":185,"links":146033},[146034,146035],{"id":145823,"depth":185,"text":145824},{"id":146010,"depth":185,"text":146011},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145815,"description":23760},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146042,"title":146043,"body":146044,"description":146048,"extension":469,"meta":146049,"navigation":205,"path":146050,"seo":146051,"stem":146052,"__hash__":146053},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146045,"toc":146046},[],{"title":46,"searchDepth":185,"depth":185,"links":146047},[],"自己正经开始学编程的第一门语言！",{"category":93211},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146043,"description":146048},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146055,"title":146056,"body":146057,"description":23760,"extension":469,"meta":147204,"navigation":205,"path":147205,"seo":147206,"stem":147207,"__hash__":147208},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146058,"toc":147180},[146059,146062,146066,146069,146072,146097,146100,146106,146110,146113,146140,146143,146183,146186,146198,146201,146207,146211,146215,146242,146259,146266,146270,146273,146299,146302,146306,146309,146349,146352,146369,146375,146379,146384,146428,146431,146449,146452,146520,146524,146531,146534,146549,146552,146561,146564,146575,146578,146587,146590,146607,146610,146625,146629,146633,146636,146638,146658,146662,146665,146668,146679,146682,146688,146692,146698,146725,146728,146740,146743,146754,146757,146763,146767,146773,146823,146826,146868,146871,146904,146907,146941,146945,146948,146968,146971,147007,147010,147023,147027,147031,147037,147040,147053,147057,147060,147066,147069,147073,147076,147079,147128,147132,147148,147154,147161,147167,147177],[14,146060,146056],{"id":146061},"_1-python环境与第一个程序",[486,146063,146065],{"id":146064},"_11-什么是python","1.1 什么是Python",[10,146067,146068],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[10,146070,146071],{},"理解 Python 时抓住三个关键词：",[19,146073,146074,146077,146080],{},[22,146075,146076],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[22,146078,146079],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[22,146081,146082,146083,754,146086,754,146089,754,146092,754,146094,28767],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[48,146084,146085],{},"os",[48,146087,146088],{},"sys",[48,146090,146091],{},"json",[48,146093,58232],{},[48,146095,146096],{},"datetime",[10,146098,146099],{},"Python 程序的运行链路：",[41,146101,146104],{"className":146102,"code":146103,"language":5572,"meta":46},[5570],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[48,146105,146103],{"__ignoreMap":46},[486,146107,146109],{"id":146108},"_12-python解释器","1.2 Python解释器",[10,146111,146112],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[41,146114,146116],{"className":43,"code":146115,"language":45,"meta":46,"style":46},"python --version\npython3 --version\npython\npython3\n",[48,146117,146118,146124,146130,146135],{"__ignoreMap":46},[51,146119,146120,146122],{"class":53,"line":54},[51,146121,172],{"class":57},[51,146123,26675],{"class":278},[51,146125,146126,146128],{"class":53,"line":185},[51,146127,101251],{"class":57},[51,146129,26675],{"class":278},[51,146131,146132],{"class":53,"line":202},[51,146133,146134],{"class":57},"python\n",[51,146136,146137],{"class":53,"line":209},[51,146138,146139],{"class":57},"python3\n",[10,146141,146142],{},"进入交互模式后，可以直接输入表达式：",[41,146144,146146],{"className":170,"code":146145,"language":172,"meta":46,"style":46},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[48,146147,146148,146159,146164,146178],{"__ignoreMap":46},[51,146149,146150,146153,146155,146157],{"class":53,"line":54},[51,146151,146152],{"class":69},">>>",[51,146154,25500],{"class":278},[51,146156,45938],{"class":69},[51,146158,48095],{"class":278},[51,146160,146161],{"class":53,"line":185},[51,146162,146163],{"class":278},"3\n",[51,146165,146166,146168,146171,146173,146176],{"class":53,"line":202},[51,146167,146152],{"class":69},[51,146169,146170],{"class":278}," print",[51,146172,546],{"class":65},[51,146174,146175],{"class":61},"\"hello python\"",[51,146177,282],{"class":65},[51,146179,146180],{"class":53,"line":209},[51,146181,146182],{"class":65},"hello python\n",[10,146184,146185],{},"退出交互模式：",[41,146187,146189],{"className":170,"code":146188,"language":172,"meta":46,"style":46},"exit()\n",[48,146190,146191],{"__ignoreMap":46},[51,146192,146193,146196],{"class":53,"line":54},[51,146194,146195],{"class":278},"exit",[51,146197,2366],{"class":65},[10,146199,146200],{},"或使用快捷键：",[41,146202,146205],{"className":146203,"code":146204,"language":5572,"meta":46},[5570],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[48,146206,146204],{"__ignoreMap":46},[486,146208,146210],{"id":146209},"_13-安装python","1.3 安装Python",[513,146212,146214],{"id":146213},"_131-windows安装","1.3.1 Windows安装",[19,146216,146217,146224,146227,146233,146239],{},[22,146218,146219,146220],{},"打开 Python 官网：",[780,146221,146222],{"href":146222,"rel":146223},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24246],[22,146225,146226],{},"下载 Windows Installer。",[22,146228,146229,146230,28767],{},"安装时勾选 ",[48,146231,146232],{},"Add Python to PATH",[22,146234,146235,146236,28767],{},"点击 ",[48,146237,146238],{},"Install Now",[22,146240,146241],{},"安装完成后打开命令提示符验证：",[41,146243,146245],{"className":43,"code":146244,"language":45,"meta":46,"style":46},"python --version\npip --version\n",[48,146246,146247,146253],{"__ignoreMap":46},[51,146248,146249,146251],{"class":53,"line":54},[51,146250,172],{"class":57},[51,146252,26675],{"class":278},[51,146254,146255,146257],{"class":53,"line":185},[51,146256,24212],{"class":57},[51,146258,26675],{"class":278},[10,146260,146261,146262,146265],{},"如果提示 ",[48,146263,146264],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[513,146267,146269],{"id":146268},"_132-macos安装","1.3.2 macOS安装",[10,146271,146272],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[41,146274,146276],{"className":43,"code":146275,"language":45,"meta":46,"style":46},"brew install python\npython3 --version\npip3 --version\n",[48,146277,146278,146287,146293],{"__ignoreMap":46},[51,146279,146280,146283,146285],{"class":53,"line":54},[51,146281,146282],{"class":57},"brew",[51,146284,24215],{"class":61},[51,146286,124689],{"class":61},[51,146288,146289,146291],{"class":53,"line":185},[51,146290,101251],{"class":57},[51,146292,26675],{"class":278},[51,146294,146295,146297],{"class":53,"line":202},[51,146296,120071],{"class":57},[51,146298,26675],{"class":278},[10,146300,146301],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[513,146303,146305],{"id":146304},"_133-linux安装","1.3.3 Linux安装",[10,146307,146308],{},"Ubuntu\u002FDebian：",[41,146310,146312],{"className":43,"code":146311,"language":45,"meta":46,"style":46},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[48,146313,146314,146322,146337,146343],{"__ignoreMap":46},[51,146315,146316,146318,146320],{"class":53,"line":54},[51,146317,24958],{"class":57},[51,146319,117688],{"class":61},[51,146321,26624],{"class":61},[51,146323,146324,146326,146328,146330,146332,146334],{"class":53,"line":185},[51,146325,24958],{"class":57},[51,146327,117688],{"class":61},[51,146329,24215],{"class":61},[51,146331,104775],{"class":61},[51,146333,101170],{"class":61},[51,146335,146336],{"class":61}," python3-venv\n",[51,146338,146339,146341],{"class":53,"line":202},[51,146340,101251],{"class":57},[51,146342,26675],{"class":278},[51,146344,146345,146347],{"class":53,"line":209},[51,146346,120071],{"class":57},[51,146348,26675],{"class":278},[10,146350,146351],{},"Fedora：",[41,146353,146355],{"className":43,"code":146354,"language":45,"meta":46,"style":46},"sudo dnf install python3 python3-pip\n",[48,146356,146357],{"__ignoreMap":46},[51,146358,146359,146361,146363,146365,146367],{"class":53,"line":54},[51,146360,24958],{"class":57},[51,146362,26697],{"class":61},[51,146364,24215],{"class":61},[51,146366,104775],{"class":61},[51,146368,120136],{"class":61},[10,146370,146371,146372,146374],{},"Linux 上通常使用 ",[48,146373,101251],{}," 命令，避免和系统旧版本 Python 冲突。",[486,146376,146378],{"id":146377},"_14-pip包管理器","1.4 pip包管理器",[10,146380,146381,146383],{},[48,146382,24212],{}," 用来安装第三方库。",[41,146385,146387],{"className":43,"code":146386,"language":45,"meta":46,"style":46},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[48,146388,146389,146398,146407,146415,146421],{"__ignoreMap":46},[51,146390,146391,146393,146395],{"class":53,"line":54},[51,146392,24212],{"class":57},[51,146394,24215],{"class":61},[51,146396,146397],{"class":61}," requests\n",[51,146399,146400,146402,146405],{"class":53,"line":185},[51,146401,24212],{"class":57},[51,146403,146404],{"class":61}," uninstall",[51,146406,146397],{"class":61},[51,146408,146409,146411,146413],{"class":53,"line":202},[51,146410,24212],{"class":57},[51,146412,117945],{"class":61},[51,146414,146397],{"class":61},[51,146416,146417,146419],{"class":53,"line":209},[51,146418,24212],{"class":57},[51,146420,119326],{"class":61},[51,146422,146423,146425],{"class":53,"line":223},[51,146424,24212],{"class":57},[51,146426,146427],{"class":61}," freeze\n",[10,146429,146430],{},"国内网络较慢时可以临时使用镜像：",[41,146432,146434],{"className":43,"code":146433,"language":45,"meta":46,"style":46},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[48,146435,146436],{"__ignoreMap":46},[51,146437,146438,146440,146442,146445,146447],{"class":53,"line":54},[51,146439,24212],{"class":57},[51,146441,24215],{"class":61},[51,146443,146444],{"class":61}," requests",[51,146446,26812],{"class":278},[51,146448,120099],{"class":61},[10,146450,146451],{},"常见第三方库：",[679,146453,146454,146463],{},[682,146455,146456],{},[685,146457,146458,146461],{},[688,146459,146460],{},"库",[688,146462,103068],{},[726,146464,146465,146473,146480,146488,146496,146504,146512],{},[685,146466,146467,146470],{},[731,146468,146469],{},"requests",[731,146471,146472],{},"网络请求",[685,146474,146475,146477],{},[731,146476,100998],{},[731,146478,146479],{},"数值计算",[685,146481,146482,146485],{},[731,146483,146484],{},"pandas",[731,146486,146487],{},"表格数据处理",[685,146489,146490,146493],{},[731,146491,146492],{},"matplotlib",[731,146494,146495],{},"绘图",[685,146497,146498,146501],{},[731,146499,146500],{},"pyecharts",[731,146502,146503],{},"ECharts 图表",[685,146505,146506,146509],{},[731,146507,146508],{},"flask",[731,146510,146511],{},"Web 后端",[685,146513,146514,146517],{},[731,146515,146516],{},"pytest",[731,146518,146519],{},"自动化测试",[486,146521,146523],{"id":146522},"_15-虚拟环境","1.5 虚拟环境",[10,146525,146526,146527,146530],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[48,146528,146529],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[10,146532,146533],{},"创建虚拟环境：",[41,146535,146537],{"className":43,"code":146536,"language":45,"meta":46,"style":46},"python -m venv .venv\n",[48,146538,146539],{"__ignoreMap":46},[51,146540,146541,146543,146545,146547],{"class":53,"line":54},[51,146542,172],{"class":57},[51,146544,101254],{"class":278},[51,146546,101257],{"class":61},[51,146548,101260],{"class":61},[10,146550,146551],{},"Windows 激活：",[41,146553,146555],{"className":43,"code":146554,"language":45,"meta":46,"style":46},".venv\\Scripts\\activate\n",[48,146556,146557],{"__ignoreMap":46},[51,146558,146559],{"class":53,"line":54},[51,146560,146554],{"class":57},[10,146562,146563],{},"macOS\u002FLinux 激活：",[41,146565,146567],{"className":43,"code":146566,"language":45,"meta":46,"style":46},"source .venv\u002Fbin\u002Factivate\n",[48,146568,146569],{"__ignoreMap":46},[51,146570,146571,146573],{"class":53,"line":54},[51,146572,101265],{"class":278},[51,146574,101268],{"class":61},[10,146576,146577],{},"退出虚拟环境：",[41,146579,146581],{"className":43,"code":146580,"language":45,"meta":46,"style":46},"deactivate\n",[48,146582,146583],{"__ignoreMap":46},[51,146584,146585],{"class":53,"line":54},[51,146586,146580],{"class":57},[10,146588,146589],{},"保存依赖：",[41,146591,146593],{"className":43,"code":146592,"language":45,"meta":46,"style":46},"pip freeze > requirements.txt\n",[48,146594,146595],{"__ignoreMap":46},[51,146596,146597,146599,146602,146604],{"class":53,"line":54},[51,146598,24212],{"class":57},[51,146600,146601],{"class":61}," freeze",[51,146603,26604],{"class":69},[51,146605,146606],{"class":61}," requirements.txt\n",[10,146608,146609],{},"安装依赖：",[41,146611,146613],{"className":43,"code":146612,"language":45,"meta":46,"style":46},"pip install -r requirements.txt\n",[48,146614,146615],{"__ignoreMap":46},[51,146616,146617,146619,146621,146623],{"class":53,"line":54},[51,146618,24212],{"class":57},[51,146620,24215],{"class":61},[51,146622,120010],{"class":278},[51,146624,146606],{"class":61},[486,146626,146628],{"id":146627},"_16-开发工具","1.6 开发工具",[513,146630,146632],{"id":146631},"_161-pycharm","1.6.1 PyCharm",[10,146634,146635],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[10,146637,122433],{},[19,146639,146640,146643,146646,146652,146655],{},[22,146641,146642],{},"New Project：创建项目。",[22,146644,146645],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[22,146647,146648,146649,126282],{},"New Python File：创建 ",[48,146650,146651],{},".py",[22,146653,146654],{},"Run：运行当前文件。",[22,146656,146657],{},"Debug：断点调试。",[513,146659,146661],{"id":146660},"_162-vs-code","1.6.2 VS Code",[10,146663,146664],{},"VS Code 轻量，适合后续多语言开发。",[10,146666,146667],{},"建议安装插件：",[19,146669,146670,146673,146676],{},[22,146671,146672],{},"Python。",[22,146674,146675],{},"Pylance。",[22,146677,146678],{},"Jupyter。",[10,146680,146681],{},"选择解释器：",[41,146683,146686],{"className":146684,"code":146685,"language":5572,"meta":46},[5570],"Ctrl + Shift + P -> Python: Select Interpreter\n",[48,146687,146685],{"__ignoreMap":46},[486,146689,146691],{"id":146690},"_17-第一个python程序","1.7 第一个Python程序",[10,146693,146694,146695,25000],{},"创建文件 ",[48,146696,146697],{},"hello.py",[41,146699,146701],{"className":170,"code":146700,"language":172,"meta":46,"style":46},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[48,146702,146703,146714],{"__ignoreMap":46},[51,146704,146705,146707,146709,146712],{"class":53,"line":54},[51,146706,30794],{"class":278},[51,146708,546],{"class":65},[51,146710,146711],{"class":61},"\"Hello World\"",[51,146713,282],{"class":65},[51,146715,146716,146718,146720,146723],{"class":53,"line":185},[51,146717,30794],{"class":278},[51,146719,546],{"class":65},[51,146721,146722],{"class":61},"\"你好，Python\"",[51,146724,282],{"class":65},[10,146726,146727],{},"在终端运行：",[41,146729,146731],{"className":43,"code":146730,"language":45,"meta":46,"style":46},"python hello.py\n",[48,146732,146733],{"__ignoreMap":46},[51,146734,146735,146737],{"class":53,"line":54},[51,146736,172],{"class":57},[51,146738,146739],{"class":61}," hello.py\n",[10,146741,146742],{},"或：",[41,146744,146746],{"className":43,"code":146745,"language":45,"meta":46,"style":46},"python3 hello.py\n",[48,146747,146748],{"__ignoreMap":46},[51,146749,146750,146752],{"class":53,"line":54},[51,146751,101251],{"class":57},[51,146753,146739],{"class":61},[10,146755,146756],{},"输出：",[41,146758,146761],{"className":146759,"code":146760,"language":5572,"meta":46},[5570],"Hello World\n你好，Python\n",[48,146762,146760],{"__ignoreMap":46},[486,146764,146766],{"id":146765},"_18-print函数","1.8 print函数",[10,146768,146769,146772],{},[48,146770,146771],{},"print()"," 用来输出内容。",[41,146774,146776],{"className":170,"code":146775,"language":172,"meta":46,"style":46},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[48,146777,146778,146788,146798,146808],{"__ignoreMap":46},[51,146779,146780,146782,146784,146786],{"class":53,"line":54},[51,146781,30794],{"class":278},[51,146783,546],{"class":65},[51,146785,6228],{"class":61},[51,146787,282],{"class":65},[51,146789,146790,146792,146794,146796],{"class":53,"line":185},[51,146791,30794],{"class":278},[51,146793,546],{"class":65},[51,146795,853],{"class":278},[51,146797,282],{"class":65},[51,146799,146800,146802,146804,146806],{"class":53,"line":202},[51,146801,30794],{"class":278},[51,146803,546],{"class":65},[51,146805,592],{"class":278},[51,146807,282],{"class":65},[51,146809,146810,146812,146814,146817,146819,146821],{"class":53,"line":209},[51,146811,30794],{"class":278},[51,146813,546],{"class":65},[51,146815,146816],{"class":61},"\"年龄:\"",[51,146818,12819],{"class":65},[51,146820,1192],{"class":278},[51,146822,282],{"class":65},[10,146824,146825],{},"多个内容用逗号隔开，默认中间加空格：",[41,146827,146829],{"className":170,"code":146828,"language":172,"meta":46,"style":46},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[48,146830,146831,146841,146851],{"__ignoreMap":46},[51,146832,146833,146836,146838],{"class":53,"line":54},[51,146834,146835],{"class":65},"name ",[51,146837,70],{"class":69},[51,146839,146840],{"class":61}," \"张三\"\n",[51,146842,146843,146846,146848],{"class":53,"line":185},[51,146844,146845],{"class":65},"age ",[51,146847,70],{"class":69},[51,146849,146850],{"class":278}," 18\n",[51,146852,146853,146855,146857,146860,146863,146865],{"class":53,"line":202},[51,146854,30794],{"class":278},[51,146856,546],{"class":65},[51,146858,146859],{"class":61},"\"姓名:\"",[51,146861,146862],{"class":65},", name, ",[51,146864,146816],{"class":61},[51,146866,146867],{"class":65},", age)\n",[10,146869,146870],{},"修改分隔符：",[41,146872,146874],{"className":170,"code":146873,"language":172,"meta":46,"style":46},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[48,146875,146876],{"__ignoreMap":46},[51,146877,146878,146880,146882,146885,146887,146889,146891,146893,146895,146898,146900,146902],{"class":53,"line":54},[51,146879,30794],{"class":278},[51,146881,546],{"class":65},[51,146883,146884],{"class":61},"\"2024\"",[51,146886,12819],{"class":65},[51,146888,54688],{"class":61},[51,146890,12819],{"class":65},[51,146892,54688],{"class":61},[51,146894,12819],{"class":65},[51,146896,146897],{"class":248},"sep",[51,146899,70],{"class":69},[51,146901,32858],{"class":61},[51,146903,282],{"class":65},[10,146905,146906],{},"修改结尾符：",[41,146908,146910],{"className":170,"code":146909,"language":172,"meta":46,"style":46},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[48,146911,146912,146930],{"__ignoreMap":46},[51,146913,146914,146916,146918,146920,146922,146924,146926,146928],{"class":53,"line":54},[51,146915,30794],{"class":278},[51,146917,546],{"class":65},[51,146919,6228],{"class":61},[51,146921,12819],{"class":65},[51,146923,46173],{"class":248},[51,146925,70],{"class":69},[51,146927,4745],{"class":61},[51,146929,282],{"class":65},[51,146931,146932,146934,146936,146939],{"class":53,"line":185},[51,146933,30794],{"class":278},[51,146935,546],{"class":65},[51,146937,146938],{"class":61},"\"python\"",[51,146940,282],{"class":65},[486,146942,146944],{"id":146943},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[10,146946,146947],{},"交互运行适合临时验证：",[41,146949,146951],{"className":170,"code":146950,"language":172,"meta":46,"style":46},">>> 10 * 3\n30\n",[48,146952,146953,146963],{"__ignoreMap":46},[51,146954,146955,146957,146959,146961],{"class":53,"line":54},[51,146956,146152],{"class":69},[51,146958,2428],{"class":278},[51,146960,6902],{"class":69},[51,146962,120407],{"class":278},[51,146964,146965],{"class":53,"line":185},[51,146966,146967],{"class":278},"30\n",[10,146969,146970],{},"脚本运行适合保存程序：",[41,146972,146974],{"className":170,"code":146973,"language":172,"meta":46,"style":46},"price = 8\ncount = 5\nprint(price * count)\n",[48,146975,146976,146986,146995],{"__ignoreMap":46},[51,146977,146978,146981,146983],{"class":53,"line":54},[51,146979,146980],{"class":65},"price ",[51,146982,70],{"class":69},[51,146984,146985],{"class":278}," 8\n",[51,146987,146988,146991,146993],{"class":53,"line":185},[51,146989,146990],{"class":65},"count ",[51,146992,70],{"class":69},[51,146994,54799],{"class":278},[51,146996,146997,146999,147002,147004],{"class":53,"line":202},[51,146998,30794],{"class":278},[51,147000,147001],{"class":65},"(price ",[51,147003,997],{"class":69},[51,147005,147006],{"class":65}," count)\n",[10,147008,147009],{},"实际学习中推荐：",[19,147011,147012,147015,147020],{},[22,147013,147014],{},"临时试一个语法，用交互模式。",[22,147016,147017,147018,126282],{},"写完整练习，用 ",[48,147019,146651],{},[22,147021,147022],{},"写项目，用独立目录和虚拟环境。",[486,147024,147026],{"id":147025},"_110-常见错误","1.10 常见错误",[513,147028,147030],{"id":147029},"_1101-命令找不到","1.10.1 命令找不到",[41,147032,147035],{"className":147033,"code":147034,"language":5572,"meta":46},[5570],"python: command not found\n",[48,147036,147034],{"__ignoreMap":46},[10,147038,147039],{},"原因：",[19,147041,147042,147045,147048],{},[22,147043,147044],{},"没安装 Python。",[22,147046,147047],{},"PATH 没配置。",[22,147049,147050,147051,28767],{},"Linux\u002FmacOS 应该使用 ",[48,147052,101251],{},[513,147054,147056],{"id":147055},"_1102-文件名冲突","1.10.2 文件名冲突",[10,147058,147059],{},"不要把文件命名为：",[41,147061,147064],{"className":147062,"code":147063,"language":5572,"meta":46},[5570],"random.py\njson.py\ntime.py\nrequests.py\n",[48,147065,147063],{"__ignoreMap":46},[10,147067,147068],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[513,147070,147072],{"id":147071},"_1103-中文乱码","1.10.3 中文乱码",[10,147074,147075],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[10,147077,147078],{},"如果读写文件出现乱码，要明确指定编码：",[41,147080,147082],{"className":170,"code":147081,"language":172,"meta":46,"style":46},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[48,147083,147084,147118],{"__ignoreMap":46},[51,147085,147086,147088,147091,147093,147096,147098,147101,147103,147106,147108,147111,147113,147115],{"class":53,"line":54},[51,147087,108205],{"class":69},[51,147089,147090],{"class":278}," open",[51,147092,546],{"class":65},[51,147094,147095],{"class":61},"\"data.txt\"",[51,147097,12819],{"class":65},[51,147099,147100],{"class":61},"\"r\"",[51,147102,12819],{"class":65},[51,147104,147105],{"class":248},"encoding",[51,147107,70],{"class":69},[51,147109,147110],{"class":61},"\"utf-8\"",[51,147112,14098],{"class":65},[51,147114,217],{"class":69},[51,147116,147117],{"class":65}," f:\n",[51,147119,147120,147123,147125],{"class":53,"line":185},[51,147121,147122],{"class":65},"    content ",[51,147124,70],{"class":69},[51,147126,147127],{"class":65}," f.read()\n",[486,147129,147131],{"id":147130},"_111-本章练习","1.11 本章练习",[19,147133,147134,147137,147143],{},[22,147135,147136],{},"安装 Python，并在终端输出版本号。",[22,147138,147139,147140,147142],{},"新建 ",[48,147141,146697],{},"，输出自己的姓名、年龄、学习目标。",[22,147144,104738,147145,147147],{},[48,147146,146771],{}," 输出下面格式：",[41,147149,147152],{"className":147150,"code":147151,"language":5572,"meta":46},[5570],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[48,147153,147151],{"__ignoreMap":46},[19,147155,147156],{"start":209},[22,147157,104738,147158,147160],{},[48,147159,146897],{}," 输出日期：",[41,147162,147165],{"className":147163,"code":147164,"language":5572,"meta":46},[5570],"2024-10-10\n",[48,147166,147164],{"__ignoreMap":46},[19,147168,147169],{"start":223},[22,147170,104738,147171,147173,147174,147176],{},[48,147172,46173],{}," 让两次 ",[48,147175,146771],{}," 输出在同一行。",[464,147178,147179],{},"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":46,"searchDepth":185,"depth":185,"links":147181},[147182,147183,147184,147189,147190,147191,147195,147196,147197,147198,147203],{"id":146064,"depth":185,"text":146065},{"id":146108,"depth":185,"text":146109},{"id":146209,"depth":185,"text":146210,"children":147185},[147186,147187,147188],{"id":146213,"depth":202,"text":146214},{"id":146268,"depth":202,"text":146269},{"id":146304,"depth":202,"text":146305},{"id":146377,"depth":185,"text":146378},{"id":146522,"depth":185,"text":146523},{"id":146627,"depth":185,"text":146628,"children":147192},[147193,147194],{"id":146631,"depth":202,"text":146632},{"id":146660,"depth":202,"text":146661},{"id":146690,"depth":185,"text":146691},{"id":146765,"depth":185,"text":146766},{"id":146943,"depth":185,"text":146944},{"id":147025,"depth":185,"text":147026,"children":147199},[147200,147201,147202],{"id":147029,"depth":202,"text":147030},{"id":147055,"depth":202,"text":147056},{"id":147071,"depth":202,"text":147072},{"id":147130,"depth":185,"text":147131},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146056,"description":23760},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147210,"title":147211,"body":147212,"description":23760,"extension":469,"meta":149616,"navigation":205,"path":149617,"seo":149618,"stem":149619,"__hash__":149620},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147213,"toc":149601},[147214,147217,147221,147224,147227,147244,147247,147289,147292,147296,147299,147302,147339,147342,147376,147379,147471,147475,147489,147492,147519,147522,147526,147629,147636,147639,147656,147660,147667,147856,147859,147932,147936,147939,148023,148026,148058,148062,148266,148269,148273,148279,148381,148384,148640,148644,148647,148650,148664,148666,148852,148856,149218,149224,149228,149231,149355,149358,149537,149540,149544,149577,149581,149598],[14,147215,147211],{"id":147216},"_10-json与pyecharts折线图",[486,147218,147220],{"id":147219},"_101-数据可视化","10.1 数据可视化",[10,147222,147223],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[10,147225,147226],{},"常见图表：",[19,147228,147229,147232,147235,147238,147241],{},[22,147230,147231],{},"折线图：看趋势。",[22,147233,147234],{},"柱状图：看分类对比。",[22,147236,147237],{},"饼图：看占比。",[22,147239,147240],{},"地图：看地域分布。",[22,147242,147243],{},"散点图：看两个变量之间的关系。",[10,147245,147246],{},"Python 可视化常用库：",[679,147248,147249,147257],{},[682,147250,147251],{},[685,147252,147253,147255],{},[688,147254,146460],{},[688,147256,24123],{},[726,147258,147259,147266,147274,147281],{},[685,147260,147261,147263],{},[731,147262,146492],{},[731,147264,147265],{},"基础、经典、可定制",[685,147267,147268,147271],{},[731,147269,147270],{},"seaborn",[731,147272,147273],{},"统计图表更美观",[685,147275,147276,147278],{},[731,147277,146500],{},[731,147279,147280],{},"生成交互式网页图表",[685,147282,147283,147286],{},[731,147284,147285],{},"plotly",[731,147287,147288],{},"交互图表能力强",[10,147290,147291],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[486,147293,147295],{"id":147294},"_102-json回顾","10.2 JSON回顾",[10,147297,147298],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[10,147300,147301],{},"Python 字典：",[41,147303,147305],{"className":170,"code":147304,"language":172,"meta":46,"style":46},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[48,147306,147307,147315,147326,147335],{"__ignoreMap":46},[51,147308,147309,147311,147313],{"class":53,"line":54},[51,147310,102030],{"class":65},[51,147312,70],{"class":69},[51,147314,15956],{"class":65},[51,147316,147317,147320,147322,147324],{"class":53,"line":185},[51,147318,147319],{"class":61},"    \"name\"",[51,147321,51809],{"class":65},[51,147323,69641],{"class":61},[51,147325,31843],{"class":65},[51,147327,147328,147331,147333],{"class":53,"line":202},[51,147329,147330],{"class":61},"    \"value\"",[51,147332,51809],{"class":65},[51,147334,97830],{"class":278},[51,147336,147337],{"class":53,"line":209},[51,147338,1974],{"class":65},[10,147340,147341],{},"JSON 字符串：",[41,147343,147346],{"className":147344,"code":147345,"language":146091,"meta":46,"style":46},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[48,147347,147348,147352,147363,147372],{"__ignoreMap":46},[51,147349,147350],{"class":53,"line":54},[51,147351,1955],{"class":65},[51,147353,147354,147357,147359,147361],{"class":53,"line":185},[51,147355,147356],{"class":278},"  \"name\"",[51,147358,51809],{"class":65},[51,147360,69641],{"class":61},[51,147362,31843],{"class":65},[51,147364,147365,147368,147370],{"class":53,"line":202},[51,147366,147367],{"class":278},"  \"value\"",[51,147369,51809],{"class":65},[51,147371,97830],{"class":278},[51,147373,147374],{"class":53,"line":209},[51,147375,1974],{"class":65},[10,147377,147378],{},"Python 与 JSON 的转换：",[41,147380,147382],{"className":170,"code":147381,"language":172,"meta":46,"style":46},"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",[48,147383,147384,147391,147395,147420,147424,147443,147450,147454,147464],{"__ignoreMap":46},[51,147385,147386,147388],{"class":53,"line":54},[51,147387,179],{"class":69},[51,147389,147390],{"class":65}," json\n",[51,147392,147393],{"class":53,"line":185},[51,147394,206],{"emptyLinePlaceholder":205},[51,147396,147397,147399,147401,147403,147405,147407,147409,147411,147414,147416,147418],{"class":53,"line":202},[51,147398,102030],{"class":65},[51,147400,70],{"class":69},[51,147402,4833],{"class":65},[51,147404,63051],{"class":61},[51,147406,51809],{"class":65},[51,147408,69641],{"class":61},[51,147410,12819],{"class":65},[51,147412,147413],{"class":61},"\"value\"",[51,147415,51809],{"class":65},[51,147417,853],{"class":278},[51,147419,1974],{"class":65},[51,147421,147422],{"class":53,"line":209},[51,147423,206],{"emptyLinePlaceholder":205},[51,147425,147426,147429,147431,147434,147437,147439,147441],{"class":53,"line":223},[51,147427,147428],{"class":65},"json_text ",[51,147430,70],{"class":69},[51,147432,147433],{"class":65}," json.dumps(data, ",[51,147435,147436],{"class":248},"ensure_ascii",[51,147438,70],{"class":69},[51,147440,34362],{"class":278},[51,147442,282],{"class":65},[51,147444,147445,147447],{"class":53,"line":237},[51,147446,30794],{"class":278},[51,147448,147449],{"class":65},"(json_text)\n",[51,147451,147452],{"class":53,"line":242},[51,147453,206],{"emptyLinePlaceholder":205},[51,147455,147456,147459,147461],{"class":53,"line":257},[51,147457,147458],{"class":65},"new_data ",[51,147460,70],{"class":69},[51,147462,147463],{"class":65}," json.loads(json_text)\n",[51,147465,147466,147468],{"class":53,"line":262},[51,147467,30794],{"class":278},[51,147469,147470],{"class":65},"(new_data)\n",[486,147472,147474],{"id":147473},"_103-安装pyecharts","10.3 安装pyecharts",[41,147476,147478],{"className":43,"code":147477,"language":45,"meta":46,"style":46},"pip install pyecharts\n",[48,147479,147480],{"__ignoreMap":46},[51,147481,147482,147484,147486],{"class":53,"line":54},[51,147483,24212],{"class":57},[51,147485,24215],{"class":61},[51,147487,147488],{"class":61}," pyecharts\n",[10,147490,147491],{},"验证：",[41,147493,147495],{"className":170,"code":147494,"language":172,"meta":46,"style":46},"import pyecharts\n\nprint(pyecharts.__version__)\n",[48,147496,147497,147503,147507],{"__ignoreMap":46},[51,147498,147499,147501],{"class":53,"line":54},[51,147500,179],{"class":69},[51,147502,147488],{"class":65},[51,147504,147505],{"class":53,"line":185},[51,147506,206],{"emptyLinePlaceholder":205},[51,147508,147509,147511,147514,147517],{"class":53,"line":202},[51,147510,30794],{"class":278},[51,147512,147513],{"class":65},"(pyecharts.",[51,147515,147516],{"class":278},"__version__",[51,147518,282],{"class":65},[10,147520,147521],{},"如果使用虚拟环境，要先激活环境再安装。",[486,147523,147525],{"id":147524},"_104-第一个折线图","10.4 第一个折线图",[41,147527,147529],{"className":170,"code":147528,"language":172,"meta":46,"style":46},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[48,147530,147531,147543,147547,147557,147587,147619],{"__ignoreMap":46},[51,147532,147533,147535,147538,147540],{"class":53,"line":54},[51,147534,226],{"class":69},[51,147536,147537],{"class":65}," pyecharts.charts ",[51,147539,179],{"class":69},[51,147541,147542],{"class":65}," Line\n",[51,147544,147545],{"class":53,"line":185},[51,147546,206],{"emptyLinePlaceholder":205},[51,147548,147549,147552,147554],{"class":53,"line":202},[51,147550,147551],{"class":65},"line ",[51,147553,70],{"class":69},[51,147555,147556],{"class":65}," Line()\n",[51,147558,147559,147562,147565,147567,147570,147572,147575,147577,147580,147582,147585],{"class":53,"line":209},[51,147560,147561],{"class":65},"line.add_xaxis([",[51,147563,147564],{"class":61},"\"周一\"",[51,147566,12819],{"class":65},[51,147568,147569],{"class":61},"\"周二\"",[51,147571,12819],{"class":65},[51,147573,147574],{"class":61},"\"周三\"",[51,147576,12819],{"class":65},[51,147578,147579],{"class":61},"\"周四\"",[51,147581,12819],{"class":65},[51,147583,147584],{"class":61},"\"周五\"",[51,147586,5042],{"class":65},[51,147588,147589,147592,147595,147597,147599,147601,147603,147605,147607,147609,147612,147614,147617],{"class":53,"line":223},[51,147590,147591],{"class":65},"line.add_yaxis(",[51,147593,147594],{"class":61},"\"销售额\"",[51,147596,77890],{"class":65},[51,147598,853],{"class":278},[51,147600,12819],{"class":65},[51,147602,1359],{"class":278},[51,147604,12819],{"class":65},[51,147606,1404],{"class":278},[51,147608,12819],{"class":65},[51,147610,147611],{"class":278},"150",[51,147613,12819],{"class":65},[51,147615,147616],{"class":278},"180",[51,147618,5042],{"class":65},[51,147620,147621,147624,147627],{"class":53,"line":237},[51,147622,147623],{"class":65},"line.render(",[51,147625,147626],{"class":61},"\"line.html\"",[51,147628,282],{"class":65},[10,147630,147631,147632,147635],{},"运行后会生成 ",[48,147633,147634],{},"line.html","，用浏览器打开即可看到图表。",[10,147637,147638],{},"核心步骤：",[19,147640,147641,147644,147647,147650,147653],{},[22,147642,147643],{},"导入图表类。",[22,147645,147646],{},"创建图表对象。",[22,147648,147649],{},"添加 x 轴数据。",[22,147651,147652],{},"添加 y 轴数据。",[22,147654,147655],{},"渲染为 HTML。",[486,147657,147659],{"id":147658},"_105-全局配置","10.5 全局配置",[10,147661,147662,147663,147666],{},"常用配置在 ",[48,147664,147665],{},"pyecharts.options"," 中。",[41,147668,147670],{"className":170,"code":147669,"language":172,"meta":46,"style":46},"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",[48,147671,147672,147689,147699,147703,147711,147735,147763,147768,147787,147806,147824,147844,147848],{"__ignoreMap":46},[51,147673,147674,147676,147679,147681,147684,147686],{"class":53,"line":54},[51,147675,226],{"class":69},[51,147677,147678],{"class":65}," pyecharts ",[51,147680,179],{"class":69},[51,147682,147683],{"class":65}," options ",[51,147685,217],{"class":69},[51,147687,147688],{"class":65}," opts\n",[51,147690,147691,147693,147695,147697],{"class":53,"line":185},[51,147692,226],{"class":69},[51,147694,147537],{"class":65},[51,147696,179],{"class":69},[51,147698,147542],{"class":65},[51,147700,147701],{"class":53,"line":202},[51,147702,206],{"emptyLinePlaceholder":205},[51,147704,147705,147707,147709],{"class":53,"line":209},[51,147706,147551],{"class":65},[51,147708,70],{"class":69},[51,147710,147556],{"class":65},[51,147712,147713,147715,147717,147719,147721,147723,147725,147727,147729,147731,147733],{"class":53,"line":223},[51,147714,147561],{"class":65},[51,147716,147564],{"class":61},[51,147718,12819],{"class":65},[51,147720,147569],{"class":61},[51,147722,12819],{"class":65},[51,147724,147574],{"class":61},[51,147726,12819],{"class":65},[51,147728,147579],{"class":61},[51,147730,12819],{"class":65},[51,147732,147584],{"class":61},[51,147734,5042],{"class":65},[51,147736,147737,147739,147741,147743,147745,147747,147749,147751,147753,147755,147757,147759,147761],{"class":53,"line":237},[51,147738,147591],{"class":65},[51,147740,147594],{"class":61},[51,147742,77890],{"class":65},[51,147744,853],{"class":278},[51,147746,12819],{"class":65},[51,147748,1359],{"class":278},[51,147750,12819],{"class":65},[51,147752,1404],{"class":278},[51,147754,12819],{"class":65},[51,147756,147611],{"class":278},[51,147758,12819],{"class":65},[51,147760,147616],{"class":278},[51,147762,5042],{"class":65},[51,147764,147765],{"class":53,"line":242},[51,147766,147767],{"class":65},"line.set_global_opts(\n",[51,147769,147770,147773,147775,147778,147780,147782,147785],{"class":53,"line":257},[51,147771,147772],{"class":248},"    title_opts",[51,147774,70],{"class":69},[51,147776,147777],{"class":65},"opts.TitleOpts(",[51,147779,51779],{"class":248},[51,147781,70],{"class":69},[51,147783,147784],{"class":61},"\"一周销售额\"",[51,147786,321],{"class":65},[51,147788,147789,147792,147794,147797,147799,147801,147804],{"class":53,"line":262},[51,147790,147791],{"class":248},"    xaxis_opts",[51,147793,70],{"class":69},[51,147795,147796],{"class":65},"opts.AxisOpts(",[51,147798,80182],{"class":248},[51,147800,70],{"class":69},[51,147802,147803],{"class":61},"\"日期\"",[51,147805,321],{"class":65},[51,147807,147808,147811,147813,147815,147817,147819,147822],{"class":53,"line":285},[51,147809,147810],{"class":248},"    yaxis_opts",[51,147812,70],{"class":69},[51,147814,147796],{"class":65},[51,147816,80182],{"class":248},[51,147818,70],{"class":69},[51,147820,147821],{"class":61},"\"金额\"",[51,147823,321],{"class":65},[51,147825,147826,147829,147831,147834,147837,147839,147842],{"class":53,"line":296},[51,147827,147828],{"class":248},"    tooltip_opts",[51,147830,70],{"class":69},[51,147832,147833],{"class":65},"opts.TooltipOpts(",[51,147835,147836],{"class":248},"trigger",[51,147838,70],{"class":69},[51,147840,147841],{"class":61},"\"axis\"",[51,147843,321],{"class":65},[51,147845,147846],{"class":53,"line":307},[51,147847,282],{"class":65},[51,147849,147850,147852,147854],{"class":53,"line":324},[51,147851,147623],{"class":65},[51,147853,147626],{"class":61},[51,147855,282],{"class":65},[10,147857,147858],{},"常见全局配置：",[679,147860,147861,147870],{},[682,147862,147863],{},[685,147864,147865,147868],{},[688,147866,147867],{},"配置",[688,147869,103068],{},[726,147871,147872,147882,147892,147902,147912,147922],{},[685,147873,147874,147879],{},[731,147875,147876],{},[48,147877,147878],{},"TitleOpts",[731,147880,147881],{},"标题",[685,147883,147884,147889],{},[731,147885,147886],{},[48,147887,147888],{},"LegendOpts",[731,147890,147891],{},"图例",[685,147893,147894,147899],{},[731,147895,147896],{},[48,147897,147898],{},"TooltipOpts",[731,147900,147901],{},"提示框",[685,147903,147904,147909],{},[731,147905,147906],{},[48,147907,147908],{},"AxisOpts",[731,147910,147911],{},"坐标轴",[685,147913,147914,147919],{},[731,147915,147916],{},[48,147917,147918],{},"VisualMapOpts",[731,147920,147921],{},"视觉映射",[685,147923,147924,147929],{},[731,147925,147926],{},[48,147927,147928],{},"DataZoomOpts",[731,147930,147931],{},"区域缩放",[486,147933,147935],{"id":147934},"_106-系列配置","10.6 系列配置",[10,147937,147938],{},"系列配置作用于某一组数据。",[41,147940,147942],{"className":170,"code":147941,"language":172,"meta":46,"style":46},"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",[48,147943,147944,147949,147960,147989,148000,148019],{"__ignoreMap":46},[51,147945,147946],{"class":53,"line":54},[51,147947,147948],{"class":65},"line.add_yaxis(\n",[51,147950,147951,147954,147956,147958],{"class":53,"line":185},[51,147952,147953],{"class":248},"    series_name",[51,147955,70],{"class":69},[51,147957,147594],{"class":61},[51,147959,31843],{"class":65},[51,147961,147962,147965,147967,147969,147971,147973,147975,147977,147979,147981,147983,147985,147987],{"class":53,"line":202},[51,147963,147964],{"class":248},"    y_axis",[51,147966,70],{"class":69},[51,147968,1432],{"class":65},[51,147970,853],{"class":278},[51,147972,12819],{"class":65},[51,147974,1359],{"class":278},[51,147976,12819],{"class":65},[51,147978,1404],{"class":278},[51,147980,12819],{"class":65},[51,147982,147611],{"class":278},[51,147984,12819],{"class":65},[51,147986,147616],{"class":278},[51,147988,88208],{"class":65},[51,147990,147991,147994,147996,147998],{"class":53,"line":209},[51,147992,147993],{"class":248},"    is_smooth",[51,147995,70],{"class":69},[51,147997,279],{"class":278},[51,147999,31843],{"class":65},[51,148001,148002,148005,148007,148010,148013,148015,148017],{"class":53,"line":223},[51,148003,148004],{"class":248},"    label_opts",[51,148006,70],{"class":69},[51,148008,148009],{"class":65},"opts.LabelOpts(",[51,148011,148012],{"class":248},"is_show",[51,148014,70],{"class":69},[51,148016,279],{"class":278},[51,148018,321],{"class":65},[51,148020,148021],{"class":53,"line":237},[51,148022,282],{"class":65},[10,148024,148025],{},"常用参数：",[19,148027,148028,148034,148040,148046,148052],{},[22,148029,148030,148033],{},[48,148031,148032],{},"series_name","：系列名称。",[22,148035,148036,148039],{},[48,148037,148038],{},"y_axis","：y 轴数据。",[22,148041,148042,148045],{},[48,148043,148044],{},"is_smooth","：是否平滑曲线。",[22,148047,148048,148051],{},[48,148049,148050],{},"label_opts","：标签配置。",[22,148053,148054,148057],{},[48,148055,148056],{},"symbol_size","：标记点大小。",[486,148059,148061],{"id":148060},"_107-多条折线","10.7 多条折线",[41,148063,148065],{"className":170,"code":148064,"language":172,"meta":46,"style":46},"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",[48,148066,148067,148081,148091,148095,148124,148128,148136,148141,148179,148216,148220,148237,148253,148257],{"__ignoreMap":46},[51,148068,148069,148071,148073,148075,148077,148079],{"class":53,"line":54},[51,148070,226],{"class":69},[51,148072,147678],{"class":65},[51,148074,179],{"class":69},[51,148076,147683],{"class":65},[51,148078,217],{"class":69},[51,148080,147688],{"class":65},[51,148082,148083,148085,148087,148089],{"class":53,"line":185},[51,148084,226],{"class":69},[51,148086,147537],{"class":65},[51,148088,179],{"class":69},[51,148090,147542],{"class":65},[51,148092,148093],{"class":53,"line":202},[51,148094,206],{"emptyLinePlaceholder":205},[51,148096,148097,148100,148102,148104,148106,148108,148110,148112,148114,148116,148118,148120,148122],{"class":53,"line":209},[51,148098,148099],{"class":65},"dates ",[51,148101,70],{"class":69},[51,148103,52598],{"class":65},[51,148105,147564],{"class":61},[51,148107,12819],{"class":65},[51,148109,147569],{"class":61},[51,148111,12819],{"class":65},[51,148113,147574],{"class":61},[51,148115,12819],{"class":65},[51,148117,147579],{"class":61},[51,148119,12819],{"class":65},[51,148121,147584],{"class":61},[51,148123,33621],{"class":65},[51,148125,148126],{"class":53,"line":223},[51,148127,206],{"emptyLinePlaceholder":205},[51,148129,148130,148132,148134],{"class":53,"line":237},[51,148131,147551],{"class":65},[51,148133,70],{"class":69},[51,148135,147556],{"class":65},[51,148137,148138],{"class":53,"line":242},[51,148139,148140],{"class":65},"line.add_xaxis(dates)\n",[51,148142,148143,148145,148148,148150,148152,148154,148157,148159,148161,148163,148165,148167,148169,148171,148173,148175,148177],{"class":53,"line":257},[51,148144,147591],{"class":65},[51,148146,148147],{"class":61},"\"线上销售\"",[51,148149,77890],{"class":65},[51,148151,853],{"class":278},[51,148153,12819],{"class":65},[51,148155,148156],{"class":278},"130",[51,148158,12819],{"class":65},[51,148160,1359],{"class":278},[51,148162,12819],{"class":65},[51,148164,21431],{"class":278},[51,148166,12819],{"class":65},[51,148168,2120],{"class":278},[51,148170,112573],{"class":65},[51,148172,148044],{"class":248},[51,148174,70],{"class":69},[51,148176,279],{"class":278},[51,148178,282],{"class":65},[51,148180,148181,148183,148186,148188,148190,148192,148194,148196,148198,148200,148202,148204,148206,148208,148210,148212,148214],{"class":53,"line":262},[51,148182,147591],{"class":65},[51,148184,148185],{"class":61},"\"线下销售\"",[51,148187,77890],{"class":65},[51,148189,1154],{"class":278},[51,148191,12819],{"class":65},[51,148193,1404],{"class":278},[51,148195,12819],{"class":65},[51,148197,853],{"class":278},[51,148199,12819],{"class":65},[51,148201,1359],{"class":278},[51,148203,12819],{"class":65},[51,148205,147611],{"class":278},[51,148207,112573],{"class":65},[51,148209,148044],{"class":248},[51,148211,70],{"class":69},[51,148213,279],{"class":278},[51,148215,282],{"class":65},[51,148217,148218],{"class":53,"line":285},[51,148219,147767],{"class":65},[51,148221,148222,148224,148226,148228,148230,148232,148235],{"class":53,"line":296},[51,148223,147772],{"class":248},[51,148225,70],{"class":69},[51,148227,147777],{"class":65},[51,148229,51779],{"class":248},[51,148231,70],{"class":69},[51,148233,148234],{"class":61},"\"线上线下销售趋势\"",[51,148236,321],{"class":65},[51,148238,148239,148241,148243,148245,148247,148249,148251],{"class":53,"line":307},[51,148240,147828],{"class":248},[51,148242,70],{"class":69},[51,148244,147833],{"class":65},[51,148246,147836],{"class":248},[51,148248,70],{"class":69},[51,148250,147841],{"class":61},[51,148252,321],{"class":65},[51,148254,148255],{"class":53,"line":324},[51,148256,282],{"class":65},[51,148258,148259,148261,148264],{"class":53,"line":329},[51,148260,147623],{"class":65},[51,148262,148263],{"class":61},"\"sales.html\"",[51,148265,282],{"class":65},[10,148267,148268],{},"多条折线适合比较不同指标或不同地区。",[486,148270,148272],{"id":148271},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[10,148274,148275,148276,25000],{},"假设 ",[48,148277,148278],{},"sales.json",[41,148280,148282],{"className":147344,"code":148281,"language":146091,"meta":46,"style":46},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[48,148283,148284,148289,148321,148349,148377],{"__ignoreMap":46},[51,148285,148286],{"class":53,"line":54},[51,148287,148288],{"class":65},"[\n",[51,148290,148291,148294,148297,148299,148301,148303,148306,148308,148310,148312,148315,148317,148319],{"class":53,"line":185},[51,148292,148293],{"class":65},"  {",[51,148295,148296],{"class":278},"\"date\"",[51,148298,51809],{"class":65},[51,148300,147564],{"class":61},[51,148302,12819],{"class":65},[51,148304,148305],{"class":278},"\"online\"",[51,148307,51809],{"class":65},[51,148309,853],{"class":278},[51,148311,12819],{"class":65},[51,148313,148314],{"class":278},"\"offline\"",[51,148316,51809],{"class":65},[51,148318,1154],{"class":278},[51,148320,5315],{"class":65},[51,148322,148323,148325,148327,148329,148331,148333,148335,148337,148339,148341,148343,148345,148347],{"class":53,"line":202},[51,148324,148293],{"class":65},[51,148326,148296],{"class":278},[51,148328,51809],{"class":65},[51,148330,147569],{"class":61},[51,148332,12819],{"class":65},[51,148334,148305],{"class":278},[51,148336,51809],{"class":65},[51,148338,148156],{"class":278},[51,148340,12819],{"class":65},[51,148342,148314],{"class":278},[51,148344,51809],{"class":65},[51,148346,1404],{"class":278},[51,148348,5315],{"class":65},[51,148350,148351,148353,148355,148357,148359,148361,148363,148365,148367,148369,148371,148373,148375],{"class":53,"line":209},[51,148352,148293],{"class":65},[51,148354,148296],{"class":278},[51,148356,51809],{"class":65},[51,148358,147574],{"class":61},[51,148360,12819],{"class":65},[51,148362,148305],{"class":278},[51,148364,51809],{"class":65},[51,148366,1359],{"class":278},[51,148368,12819],{"class":65},[51,148370,148314],{"class":278},[51,148372,51809],{"class":65},[51,148374,853],{"class":278},[51,148376,1974],{"class":65},[51,148378,148379],{"class":53,"line":223},[51,148380,33621],{"class":65},[10,148382,148383],{},"读取并绘图：",[41,148385,148387],{"className":170,"code":148386,"language":172,"meta":46,"style":46},"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",[48,148388,148389,148395,148409,148419,148423,148455,148468,148472,148480,148489,148498,148502,148514,148523,148532,148541,148545,148553,148557,148574,148591,148595,148612,148628,148632],{"__ignoreMap":46},[51,148390,148391,148393],{"class":53,"line":54},[51,148392,179],{"class":69},[51,148394,147390],{"class":65},[51,148396,148397,148399,148401,148403,148405,148407],{"class":53,"line":185},[51,148398,226],{"class":69},[51,148400,147678],{"class":65},[51,148402,179],{"class":69},[51,148404,147683],{"class":65},[51,148406,217],{"class":69},[51,148408,147688],{"class":65},[51,148410,148411,148413,148415,148417],{"class":53,"line":202},[51,148412,226],{"class":69},[51,148414,147537],{"class":65},[51,148416,179],{"class":69},[51,148418,147542],{"class":65},[51,148420,148421],{"class":53,"line":209},[51,148422,206],{"emptyLinePlaceholder":205},[51,148424,148425,148427,148429,148431,148434,148436,148438,148440,148442,148444,148446,148448,148450,148453],{"class":53,"line":223},[51,148426,108205],{"class":69},[51,148428,147090],{"class":278},[51,148430,546],{"class":65},[51,148432,148433],{"class":61},"\"sales.json\"",[51,148435,12819],{"class":65},[51,148437,147100],{"class":61},[51,148439,12819],{"class":65},[51,148441,147105],{"class":248},[51,148443,70],{"class":69},[51,148445,147110],{"class":61},[51,148447,14098],{"class":65},[51,148449,217],{"class":69},[51,148451,148452],{"class":248}," file",[51,148454,363],{"class":65},[51,148456,148457,148459,148461,148464,148466],{"class":53,"line":237},[51,148458,101793],{"class":65},[51,148460,70],{"class":69},[51,148462,148463],{"class":65}," json.load(",[51,148465,313],{"class":248},[51,148467,282],{"class":65},[51,148469,148470],{"class":53,"line":242},[51,148471,206],{"emptyLinePlaceholder":205},[51,148473,148474,148476,148478],{"class":53,"line":257},[51,148475,148099],{"class":65},[51,148477,70],{"class":69},[51,148479,52210],{"class":65},[51,148481,148482,148485,148487],{"class":53,"line":262},[51,148483,148484],{"class":65},"online_sales ",[51,148486,70],{"class":69},[51,148488,52210],{"class":65},[51,148490,148491,148494,148496],{"class":53,"line":285},[51,148492,148493],{"class":65},"offline_sales ",[51,148495,70],{"class":69},[51,148497,52210],{"class":65},[51,148499,148500],{"class":53,"line":296},[51,148501,206],{"emptyLinePlaceholder":205},[51,148503,148504,148506,148509,148511],{"class":53,"line":307},[51,148505,3412],{"class":69},[51,148507,148508],{"class":65}," item ",[51,148510,26425],{"class":69},[51,148512,148513],{"class":65}," data:\n",[51,148515,148516,148519,148521],{"class":53,"line":324},[51,148517,148518],{"class":65},"    dates.append(item[",[51,148520,148296],{"class":61},[51,148522,5042],{"class":65},[51,148524,148525,148528,148530],{"class":53,"line":329},[51,148526,148527],{"class":65},"    online_sales.append(item[",[51,148529,148305],{"class":61},[51,148531,5042],{"class":65},[51,148533,148534,148537,148539],{"class":53,"line":334},[51,148535,148536],{"class":65},"    offline_sales.append(item[",[51,148538,148314],{"class":61},[51,148540,5042],{"class":65},[51,148542,148543],{"class":53,"line":340},[51,148544,206],{"emptyLinePlaceholder":205},[51,148546,148547,148549,148551],{"class":53,"line":345},[51,148548,147551],{"class":65},[51,148550,70],{"class":69},[51,148552,147556],{"class":65},[51,148554,148555],{"class":53,"line":357},[51,148556,148140],{"class":65},[51,148558,148559,148561,148563,148566,148568,148570,148572],{"class":53,"line":366},[51,148560,147591],{"class":65},[51,148562,148147],{"class":61},[51,148564,148565],{"class":65},", online_sales, ",[51,148567,148044],{"class":248},[51,148569,70],{"class":69},[51,148571,279],{"class":278},[51,148573,282],{"class":65},[51,148575,148576,148578,148580,148583,148585,148587,148589],{"class":53,"line":383},[51,148577,147591],{"class":65},[51,148579,148185],{"class":61},[51,148581,148582],{"class":65},", offline_sales, ",[51,148584,148044],{"class":248},[51,148586,70],{"class":69},[51,148588,279],{"class":278},[51,148590,282],{"class":65},[51,148592,148593],{"class":53,"line":392},[51,148594,147767],{"class":65},[51,148596,148597,148599,148601,148603,148605,148607,148610],{"class":53,"line":403},[51,148598,147772],{"class":248},[51,148600,70],{"class":69},[51,148602,147777],{"class":65},[51,148604,51779],{"class":248},[51,148606,70],{"class":69},[51,148608,148609],{"class":61},"\"销售趋势\"",[51,148611,321],{"class":65},[51,148613,148614,148616,148618,148620,148622,148624,148626],{"class":53,"line":409},[51,148615,147828],{"class":248},[51,148617,70],{"class":69},[51,148619,147833],{"class":65},[51,148621,147836],{"class":248},[51,148623,70],{"class":69},[51,148625,147841],{"class":61},[51,148627,321],{"class":65},[51,148629,148630],{"class":53,"line":414},[51,148631,282],{"class":65},[51,148633,148634,148636,148638],{"class":53,"line":433},[51,148635,147623],{"class":65},[51,148637,148263],{"class":61},[51,148639,282],{"class":65},[486,148641,148643],{"id":148642},"_109-数据清洗","10.9 数据清洗",[10,148645,148646],{},"真实数据经常不整齐，需要清洗。",[10,148648,148649],{},"常见问题：",[19,148651,148652,148655,148658,148661],{},[22,148653,148654],{},"数字是字符串。",[22,148656,148657],{},"字段缺失。",[22,148659,148660],{},"空值。",[22,148662,148663],{},"日期格式不统一。",[10,148665,15519],{},[41,148667,148669],{"className":170,"code":148668,"language":172,"meta":46,"style":46},"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",[48,148670,148671,148680,148703,148723,148744,148748,148752,148760,148769,148773,148784,148798,148807,148812,148816,148824,148834,148838,148845],{"__ignoreMap":46},[51,148672,148673,148676,148678],{"class":53,"line":54},[51,148674,148675],{"class":65},"raw_data ",[51,148677,70],{"class":69},[51,148679,55819],{"class":65},[51,148681,148682,148685,148687,148689,148691,148693,148696,148698,148701],{"class":53,"line":185},[51,148683,148684],{"class":65},"    {",[51,148686,148296],{"class":61},[51,148688,51809],{"class":65},[51,148690,147564],{"class":61},[51,148692,12819],{"class":65},[51,148694,148695],{"class":61},"\"sales\"",[51,148697,51809],{"class":65},[51,148699,148700],{"class":61},"\"100\"",[51,148702,5315],{"class":65},[51,148704,148705,148707,148709,148711,148713,148715,148717,148719,148721],{"class":53,"line":202},[51,148706,148684],{"class":65},[51,148708,148296],{"class":61},[51,148710,51809],{"class":65},[51,148712,147569],{"class":61},[51,148714,12819],{"class":65},[51,148716,148695],{"class":61},[51,148718,51809],{"class":65},[51,148720,8036],{"class":61},[51,148722,5315],{"class":65},[51,148724,148725,148727,148729,148731,148733,148735,148737,148739,148742],{"class":53,"line":209},[51,148726,148684],{"class":65},[51,148728,148296],{"class":61},[51,148730,51809],{"class":65},[51,148732,147574],{"class":61},[51,148734,12819],{"class":65},[51,148736,148695],{"class":61},[51,148738,51809],{"class":65},[51,148740,148741],{"class":61},"\"120\"",[51,148743,5315],{"class":65},[51,148745,148746],{"class":53,"line":223},[51,148747,33621],{"class":65},[51,148749,148750],{"class":53,"line":237},[51,148751,206],{"emptyLinePlaceholder":205},[51,148753,148754,148756,148758],{"class":53,"line":242},[51,148755,148099],{"class":65},[51,148757,70],{"class":69},[51,148759,52210],{"class":65},[51,148761,148762,148765,148767],{"class":53,"line":257},[51,148763,148764],{"class":65},"sales ",[51,148766,70],{"class":69},[51,148768,52210],{"class":65},[51,148770,148771],{"class":53,"line":262},[51,148772,206],{"emptyLinePlaceholder":205},[51,148774,148775,148777,148779,148781],{"class":53,"line":285},[51,148776,3412],{"class":69},[51,148778,148508],{"class":65},[51,148780,26425],{"class":69},[51,148782,148783],{"class":65}," raw_data:\n",[51,148785,148786,148789,148791,148794,148796],{"class":53,"line":296},[51,148787,148788],{"class":65},"    value ",[51,148790,70],{"class":69},[51,148792,148793],{"class":65}," item.get(",[51,148795,148695],{"class":61},[51,148797,282],{"class":65},[51,148799,148800,148802,148804],{"class":53,"line":307},[51,148801,3488],{"class":69},[51,148803,39304],{"class":69},[51,148805,148806],{"class":65}," value:\n",[51,148808,148809],{"class":53,"line":324},[51,148810,148811],{"class":69},"        continue\n",[51,148813,148814],{"class":53,"line":329},[51,148815,206],{"emptyLinePlaceholder":205},[51,148817,148818,148820,148822],{"class":53,"line":334},[51,148819,148518],{"class":65},[51,148821,148296],{"class":61},[51,148823,5042],{"class":65},[51,148825,148826,148829,148831],{"class":53,"line":340},[51,148827,148828],{"class":65},"    sales.append(",[51,148830,549],{"class":278},[51,148832,148833],{"class":65},"(value))\n",[51,148835,148836],{"class":53,"line":345},[51,148837,206],{"emptyLinePlaceholder":205},[51,148839,148840,148842],{"class":53,"line":357},[51,148841,30794],{"class":278},[51,148843,148844],{"class":65},"(dates)\n",[51,148846,148847,148849],{"class":53,"line":366},[51,148848,30794],{"class":278},[51,148850,148851],{"class":65},"(sales)\n",[486,148853,148855],{"id":148854},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[41,148857,148859],{"className":170,"code":148858,"language":172,"meta":46,"style":46},"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",[48,148860,148861,148875,148885,148889,148897,148918,148940,148962,148984,149006,149010,149014,149036,149057,149061,149069,149073,149077,149087,149096,149106,149122,149126,149130,149147,149163,149179,149195,149205,149209],{"__ignoreMap":46},[51,148862,148863,148865,148867,148869,148871,148873],{"class":53,"line":54},[51,148864,226],{"class":69},[51,148866,147678],{"class":65},[51,148868,179],{"class":69},[51,148870,147683],{"class":65},[51,148872,217],{"class":69},[51,148874,147688],{"class":65},[51,148876,148877,148879,148881,148883],{"class":53,"line":185},[51,148878,226],{"class":69},[51,148880,147537],{"class":65},[51,148882,179],{"class":69},[51,148884,147542],{"class":65},[51,148886,148887],{"class":53,"line":202},[51,148888,206],{"emptyLinePlaceholder":205},[51,148890,148891,148893,148895],{"class":53,"line":209},[51,148892,148764],{"class":65},[51,148894,70],{"class":69},[51,148896,55819],{"class":65},[51,148898,148899,148901,148903,148905,148908,148910,148912,148914,148916],{"class":53,"line":223},[51,148900,148684],{"class":65},[51,148902,148296],{"class":61},[51,148904,51809],{"class":65},[51,148906,148907],{"class":61},"\"2024-10-01\"",[51,148909,12819],{"class":65},[51,148911,84456],{"class":61},[51,148913,51809],{"class":65},[51,148915,92395],{"class":278},[51,148917,5315],{"class":65},[51,148919,148920,148922,148924,148926,148929,148931,148933,148935,148938],{"class":53,"line":237},[51,148921,148684],{"class":65},[51,148923,148296],{"class":61},[51,148925,51809],{"class":65},[51,148927,148928],{"class":61},"\"2024-10-02\"",[51,148930,12819],{"class":65},[51,148932,84456],{"class":61},[51,148934,51809],{"class":65},[51,148936,148937],{"class":278},"1800",[51,148939,5315],{"class":65},[51,148941,148942,148944,148946,148948,148951,148953,148955,148957,148960],{"class":53,"line":242},[51,148943,148684],{"class":65},[51,148945,148296],{"class":61},[51,148947,51809],{"class":65},[51,148949,148950],{"class":61},"\"2024-10-03\"",[51,148952,12819],{"class":65},[51,148954,84456],{"class":61},[51,148956,51809],{"class":65},[51,148958,148959],{"class":278},"1500",[51,148961,5315],{"class":65},[51,148963,148964,148966,148968,148970,148973,148975,148977,148979,148982],{"class":53,"line":257},[51,148965,148684],{"class":65},[51,148967,148296],{"class":61},[51,148969,51809],{"class":65},[51,148971,148972],{"class":61},"\"2024-10-04\"",[51,148974,12819],{"class":65},[51,148976,84456],{"class":61},[51,148978,51809],{"class":65},[51,148980,148981],{"class":278},"2100",[51,148983,5315],{"class":65},[51,148985,148986,148988,148990,148992,148995,148997,148999,149001,149004],{"class":53,"line":262},[51,148987,148684],{"class":65},[51,148989,148296],{"class":61},[51,148991,51809],{"class":65},[51,148993,148994],{"class":61},"\"2024-10-05\"",[51,148996,12819],{"class":65},[51,148998,84456],{"class":61},[51,149000,51809],{"class":65},[51,149002,149003],{"class":278},"2600",[51,149005,5315],{"class":65},[51,149007,149008],{"class":53,"line":285},[51,149009,33621],{"class":65},[51,149011,149012],{"class":53,"line":296},[51,149013,206],{"emptyLinePlaceholder":205},[51,149015,149016,149018,149020,149023,149025,149027,149029,149031,149033],{"class":53,"line":307},[51,149017,148099],{"class":65},[51,149019,70],{"class":69},[51,149021,149022],{"class":65}," [item[",[51,149024,148296],{"class":61},[51,149026,194],{"class":65},[51,149028,3412],{"class":69},[51,149030,148508],{"class":65},[51,149032,26425],{"class":69},[51,149034,149035],{"class":65}," sales]\n",[51,149037,149038,149041,149043,149045,149047,149049,149051,149053,149055],{"class":53,"line":324},[51,149039,149040],{"class":65},"amounts ",[51,149042,70],{"class":69},[51,149044,149022],{"class":65},[51,149046,84456],{"class":61},[51,149048,194],{"class":65},[51,149050,3412],{"class":69},[51,149052,148508],{"class":65},[51,149054,26425],{"class":69},[51,149056,149035],{"class":65},[51,149058,149059],{"class":53,"line":329},[51,149060,206],{"emptyLinePlaceholder":205},[51,149062,149063,149065,149067],{"class":53,"line":334},[51,149064,147551],{"class":65},[51,149066,70],{"class":69},[51,149068,147556],{"class":65},[51,149070,149071],{"class":53,"line":340},[51,149072,148140],{"class":65},[51,149074,149075],{"class":53,"line":345},[51,149076,147948],{"class":65},[51,149078,149079,149081,149083,149085],{"class":53,"line":357},[51,149080,147953],{"class":248},[51,149082,70],{"class":69},[51,149084,147594],{"class":61},[51,149086,31843],{"class":65},[51,149088,149089,149091,149093],{"class":53,"line":366},[51,149090,147964],{"class":248},[51,149092,70],{"class":69},[51,149094,149095],{"class":65},"amounts,\n",[51,149097,149098,149100,149102,149104],{"class":53,"line":383},[51,149099,147993],{"class":248},[51,149101,70],{"class":69},[51,149103,279],{"class":278},[51,149105,31843],{"class":65},[51,149107,149108,149110,149112,149114,149116,149118,149120],{"class":53,"line":392},[51,149109,148004],{"class":248},[51,149111,70],{"class":69},[51,149113,148009],{"class":65},[51,149115,148012],{"class":248},[51,149117,70],{"class":69},[51,149119,279],{"class":278},[51,149121,321],{"class":65},[51,149123,149124],{"class":53,"line":403},[51,149125,282],{"class":65},[51,149127,149128],{"class":53,"line":409},[51,149129,147767],{"class":65},[51,149131,149132,149134,149136,149138,149140,149142,149145],{"class":53,"line":414},[51,149133,147772],{"class":248},[51,149135,70],{"class":69},[51,149137,147777],{"class":65},[51,149139,51779],{"class":248},[51,149141,70],{"class":69},[51,149143,149144],{"class":61},"\"每日销售额\"",[51,149146,321],{"class":65},[51,149148,149149,149151,149153,149155,149157,149159,149161],{"class":53,"line":433},[51,149150,147791],{"class":248},[51,149152,70],{"class":69},[51,149154,147796],{"class":65},[51,149156,80182],{"class":248},[51,149158,70],{"class":69},[51,149160,147803],{"class":61},[51,149162,321],{"class":65},[51,149164,149165,149167,149169,149171,149173,149175,149177],{"class":53,"line":439},[51,149166,147810],{"class":248},[51,149168,70],{"class":69},[51,149170,147796],{"class":65},[51,149172,80182],{"class":248},[51,149174,70],{"class":69},[51,149176,147821],{"class":61},[51,149178,321],{"class":65},[51,149180,149181,149183,149185,149187,149189,149191,149193],{"class":53,"line":444},[51,149182,147828],{"class":248},[51,149184,70],{"class":69},[51,149186,147833],{"class":65},[51,149188,147836],{"class":248},[51,149190,70],{"class":69},[51,149192,147841],{"class":61},[51,149194,321],{"class":65},[51,149196,149197,149200,149202],{"class":53,"line":453},[51,149198,149199],{"class":248},"    datazoom_opts",[51,149201,70],{"class":69},[51,149203,149204],{"class":65},"[opts.DataZoomOpts()],\n",[51,149206,149207],{"class":53,"line":2174},[51,149208,282],{"class":65},[51,149210,149211,149213,149216],{"class":53,"line":2965},[51,149212,147623],{"class":65},[51,149214,149215],{"class":61},"\"daily_sales.html\"",[51,149217,282],{"class":65},[10,149219,149220,149223],{},[48,149221,149222],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[486,149225,149227],{"id":149226},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[10,149229,149230],{},"如果数据结构如下：",[41,149232,149234],{"className":170,"code":149233,"language":172,"meta":46,"style":46},"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",[48,149235,149236,149244,149252,149274,149295,149300,149307,149327,149347,149351],{"__ignoreMap":46},[51,149237,149238,149240,149242],{"class":53,"line":54},[51,149239,102030],{"class":65},[51,149241,70],{"class":69},[51,149243,15956],{"class":65},[51,149245,149246,149249],{"class":53,"line":185},[51,149247,149248],{"class":61},"    \"北京\"",[51,149250,149251],{"class":65},": [\n",[51,149253,149254,149256,149258,149260,149263,149265,149268,149270,149272],{"class":53,"line":202},[51,149255,5302],{"class":65},[51,149257,148296],{"class":61},[51,149259,51809],{"class":65},[51,149261,149262],{"class":61},"\"2024-01-01\"",[51,149264,12819],{"class":65},[51,149266,149267],{"class":61},"\"confirm\"",[51,149269,51809],{"class":65},[51,149271,988],{"class":278},[51,149273,5315],{"class":65},[51,149275,149276,149278,149280,149282,149285,149287,149289,149291,149293],{"class":53,"line":209},[51,149277,5302],{"class":65},[51,149279,148296],{"class":61},[51,149281,51809],{"class":65},[51,149283,149284],{"class":61},"\"2024-01-02\"",[51,149286,12819],{"class":65},[51,149288,149267],{"class":61},[51,149290,51809],{"class":65},[51,149292,1040],{"class":278},[51,149294,5315],{"class":65},[51,149296,149297],{"class":53,"line":223},[51,149298,149299],{"class":65},"    ],\n",[51,149301,149302,149305],{"class":53,"line":237},[51,149303,149304],{"class":61},"    \"上海\"",[51,149306,149251],{"class":65},[51,149308,149309,149311,149313,149315,149317,149319,149321,149323,149325],{"class":53,"line":242},[51,149310,5302],{"class":65},[51,149312,148296],{"class":61},[51,149314,51809],{"class":65},[51,149316,149262],{"class":61},[51,149318,12819],{"class":65},[51,149320,149267],{"class":61},[51,149322,51809],{"class":65},[51,149324,937],{"class":278},[51,149326,5315],{"class":65},[51,149328,149329,149331,149333,149335,149337,149339,149341,149343,149345],{"class":53,"line":257},[51,149330,5302],{"class":65},[51,149332,148296],{"class":61},[51,149334,51809],{"class":65},[51,149336,149284],{"class":61},[51,149338,12819],{"class":65},[51,149340,149267],{"class":61},[51,149342,51809],{"class":65},[51,149344,1065],{"class":278},[51,149346,5315],{"class":65},[51,149348,149349],{"class":53,"line":262},[51,149350,149299],{"class":65},[51,149352,149353],{"class":53,"line":285},[51,149354,1974],{"class":65},[10,149356,149357],{},"绘制多地区趋势：",[41,149359,149361],{"className":170,"code":149360,"language":172,"meta":46,"style":46},"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",[48,149362,149363,149377,149387,149391,149416,149420,149428,149432,149436,149448,149470,149483,149487,149491,149508,149524,149528],{"__ignoreMap":46},[51,149364,149365,149367,149369,149371,149373,149375],{"class":53,"line":54},[51,149366,226],{"class":69},[51,149368,147678],{"class":65},[51,149370,179],{"class":69},[51,149372,147683],{"class":65},[51,149374,217],{"class":69},[51,149376,147688],{"class":65},[51,149378,149379,149381,149383,149385],{"class":53,"line":185},[51,149380,226],{"class":69},[51,149382,147537],{"class":65},[51,149384,179],{"class":69},[51,149386,147542],{"class":65},[51,149388,149389],{"class":53,"line":202},[51,149390,206],{"emptyLinePlaceholder":205},[51,149392,149393,149395,149397,149399,149401,149403,149405,149407,149409,149412,149414],{"class":53,"line":209},[51,149394,148099],{"class":65},[51,149396,70],{"class":69},[51,149398,149022],{"class":65},[51,149400,148296],{"class":61},[51,149402,194],{"class":65},[51,149404,3412],{"class":69},[51,149406,148508],{"class":65},[51,149408,26425],{"class":69},[51,149410,149411],{"class":65}," data[",[51,149413,69641],{"class":61},[51,149415,77899],{"class":65},[51,149417,149418],{"class":53,"line":223},[51,149419,206],{"emptyLinePlaceholder":205},[51,149421,149422,149424,149426],{"class":53,"line":237},[51,149423,147551],{"class":65},[51,149425,70],{"class":69},[51,149427,147556],{"class":65},[51,149429,149430],{"class":53,"line":242},[51,149431,148140],{"class":65},[51,149433,149434],{"class":53,"line":257},[51,149435,206],{"emptyLinePlaceholder":205},[51,149437,149438,149440,149443,149445],{"class":53,"line":262},[51,149439,3412],{"class":69},[51,149441,149442],{"class":65}," city, records ",[51,149444,26425],{"class":69},[51,149446,149447],{"class":65}," data.items():\n",[51,149449,149450,149453,149455,149457,149459,149461,149463,149465,149467],{"class":53,"line":285},[51,149451,149452],{"class":65},"    values ",[51,149454,70],{"class":69},[51,149456,149022],{"class":65},[51,149458,149267],{"class":61},[51,149460,194],{"class":65},[51,149462,3412],{"class":69},[51,149464,148508],{"class":65},[51,149466,26425],{"class":69},[51,149468,149469],{"class":65}," records]\n",[51,149471,149472,149475,149477,149479,149481],{"class":53,"line":296},[51,149473,149474],{"class":65},"    line.add_yaxis(city, values, ",[51,149476,148044],{"class":248},[51,149478,70],{"class":69},[51,149480,279],{"class":278},[51,149482,282],{"class":65},[51,149484,149485],{"class":53,"line":307},[51,149486,206],{"emptyLinePlaceholder":205},[51,149488,149489],{"class":53,"line":324},[51,149490,147767],{"class":65},[51,149492,149493,149495,149497,149499,149501,149503,149506],{"class":53,"line":329},[51,149494,147772],{"class":248},[51,149496,70],{"class":69},[51,149498,147777],{"class":65},[51,149500,51779],{"class":248},[51,149502,70],{"class":69},[51,149504,149505],{"class":61},"\"多地区趋势图\"",[51,149507,321],{"class":65},[51,149509,149510,149512,149514,149516,149518,149520,149522],{"class":53,"line":334},[51,149511,147828],{"class":248},[51,149513,70],{"class":69},[51,149515,147833],{"class":65},[51,149517,147836],{"class":248},[51,149519,70],{"class":69},[51,149521,147841],{"class":61},[51,149523,321],{"class":65},[51,149525,149526],{"class":53,"line":340},[51,149527,282],{"class":65},[51,149529,149530,149532,149535],{"class":53,"line":345},[51,149531,147623],{"class":65},[51,149533,149534],{"class":61},"\"trend.html\"",[51,149536,282],{"class":65},[10,149538,149539],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[486,149541,149543],{"id":149542},"_1012-易错点","10.12 易错点",[19,149545,149546,149552,149558,149568,149574],{},[22,149547,149548,149551],{},[48,149549,149550],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[22,149553,149554,149557],{},[48,149555,149556],{},"render()"," 生成的是 HTML，不是图片。",[22,149559,149560,149561,149564,149565,28767],{},"JSON 字符串用 ",[48,149562,149563],{},"json.loads()","，JSON 文件用 ",[48,149566,149567],{},"json.load()",[22,149569,149570,149571,28767],{},"中文 JSON 保存时加 ",[48,149572,149573],{},"ensure_ascii=False",[22,149575,149576],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[486,149578,149580],{"id":149579},"_1013-本章练习","10.13 本章练习",[19,149582,149583,149586,149589,149592,149595],{},[22,149584,149585],{},"安装 pyecharts 并生成第一个折线图。",[22,149587,149588],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[22,149590,149591],{},"绘制两条折线，对比线上和线下销售额。",[22,149593,149594],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[22,149596,149597],{},"对含有空值的销售数据进行清洗后再绘图。",[464,149599,149600],{},"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":46,"searchDepth":185,"depth":185,"links":149602},[149603,149604,149605,149606,149607,149608,149609,149610,149611,149612,149613,149614,149615],{"id":147219,"depth":185,"text":147220},{"id":147294,"depth":185,"text":147295},{"id":147473,"depth":185,"text":147474},{"id":147524,"depth":185,"text":147525},{"id":147658,"depth":185,"text":147659},{"id":147934,"depth":185,"text":147935},{"id":148060,"depth":185,"text":148061},{"id":148271,"depth":185,"text":148272},{"id":148642,"depth":185,"text":148643},{"id":148854,"depth":185,"text":148855},{"id":149226,"depth":185,"text":149227},{"id":149542,"depth":185,"text":149543},{"id":149579,"depth":185,"text":149580},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147211,"description":23760},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149622,"title":149623,"body":149624,"description":23760,"extension":469,"meta":151984,"navigation":205,"path":151985,"seo":151986,"stem":151987,"__hash__":151988},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149625,"toc":151961},[149626,149629,149633,149636,149639,149715,149718,149809,149812,149816,149819,149863,149876,149880,149883,149950,149953,149957,149960,150044,150052,150056,150061,150202,150205,150216,150222,150228,150342,150346,150349,150352,150605,150608,150612,150615,150719,150722,150726,150877,150881,150888,151001,151005,151008,151114,151117,151121,151124,151155,151158,151263,151266,151270,151274,151284,151352,151356,151363,151427,151430,151434,151440,151536,151545,151549,151873,151882,151886,151914,151918,151958],[14,149627,149623],{"id":149628},"_11-面向对象基础",[486,149630,149632],{"id":149631},"_111-什么是面向对象","11.1 什么是面向对象",[10,149634,149635],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[10,149637,149638],{},"面向过程：",[41,149640,149642],{"className":170,"code":149641,"language":172,"meta":46,"style":46},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[48,149643,149644,149653,149661,149665,149675,149706,149710],{"__ignoreMap":46},[51,149645,149646,149648,149650],{"class":53,"line":54},[51,149647,146835],{"class":65},[51,149649,70],{"class":69},[51,149651,149652],{"class":61}," \"小明\"\n",[51,149654,149655,149657,149659],{"class":53,"line":185},[51,149656,146845],{"class":65},[51,149658,70],{"class":69},[51,149660,146850],{"class":278},[51,149662,149663],{"class":53,"line":202},[51,149664,206],{"emptyLinePlaceholder":205},[51,149666,149667,149669,149672],{"class":53,"line":209},[51,149668,348],{"class":69},[51,149670,149671],{"class":57}," introduce",[51,149673,149674],{"class":65},"(name, age):\n",[51,149676,149677,149679,149681,149683,149686,149688,149690,149692,149695,149697,149699,149701,149704],{"class":53,"line":223},[51,149678,31677],{"class":278},[51,149680,546],{"class":65},[51,149682,595],{"class":69},[51,149684,149685],{"class":61},"\"我叫",[51,149687,1438],{"class":278},[51,149689,80182],{"class":65},[51,149691,1488],{"class":278},[51,149693,149694],{"class":61},"，今年",[51,149696,1438],{"class":278},[51,149698,70593],{"class":65},[51,149700,1488],{"class":278},[51,149702,149703],{"class":61},"岁\"",[51,149705,282],{"class":65},[51,149707,149708],{"class":53,"line":237},[51,149709,206],{"emptyLinePlaceholder":205},[51,149711,149712],{"class":53,"line":242},[51,149713,149714],{"class":65},"introduce(name, age)\n",[10,149716,149717],{},"面向对象：",[41,149719,149721],{"className":170,"code":149720,"language":172,"meta":46,"style":46},"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",[48,149722,149723,149731,149739,149768,149772,149776,149786,149795,149804],{"__ignoreMap":46},[51,149724,149725,149727,149729],{"class":53,"line":54},[51,149726,15078],{"class":69},[51,149728,8282],{"class":57},[51,149730,363],{"class":65},[51,149732,149733,149735,149737],{"class":53,"line":185},[51,149734,31179],{"class":69},[51,149736,149671],{"class":57},[51,149738,31185],{"class":65},[51,149740,149741,149743,149745,149747,149749,149752,149754,149756,149758,149760,149762,149764,149766],{"class":53,"line":202},[51,149742,32826],{"class":278},[51,149744,546],{"class":65},[51,149746,595],{"class":69},[51,149748,149685],{"class":61},[51,149750,149751],{"class":278},"{self",[51,149753,80673],{"class":65},[51,149755,1488],{"class":278},[51,149757,149694],{"class":61},[51,149759,149751],{"class":278},[51,149761,80685],{"class":65},[51,149763,1488],{"class":278},[51,149765,149703],{"class":61},[51,149767,282],{"class":65},[51,149769,149770],{"class":53,"line":209},[51,149771,206],{"emptyLinePlaceholder":205},[51,149773,149774],{"class":53,"line":223},[51,149775,206],{"emptyLinePlaceholder":205},[51,149777,149778,149781,149783],{"class":53,"line":237},[51,149779,149780],{"class":65},"student ",[51,149782,70],{"class":69},[51,149784,149785],{"class":65}," Student()\n",[51,149787,149788,149791,149793],{"class":53,"line":242},[51,149789,149790],{"class":65},"student.name ",[51,149792,70],{"class":69},[51,149794,149652],{"class":61},[51,149796,149797,149800,149802],{"class":53,"line":257},[51,149798,149799],{"class":65},"student.age ",[51,149801,70],{"class":69},[51,149803,146850],{"class":278},[51,149805,149806],{"class":53,"line":262},[51,149807,149808],{"class":65},"student.introduce()\n",[10,149810,149811],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[486,149813,149815],{"id":149814},"_112-类和对象","11.2 类和对象",[10,149817,149818],{},"类是模板，对象是根据模板创建出来的具体实例。",[41,149820,149822],{"className":170,"code":149821,"language":172,"meta":46,"style":46},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[48,149823,149824,149832,149837,149841,149845,149854],{"__ignoreMap":46},[51,149825,149826,149828,149830],{"class":53,"line":54},[51,149827,15078],{"class":69},[51,149829,8282],{"class":57},[51,149831,363],{"class":65},[51,149833,149834],{"class":53,"line":185},[51,149835,149836],{"class":69},"    pass\n",[51,149838,149839],{"class":53,"line":202},[51,149840,206],{"emptyLinePlaceholder":205},[51,149842,149843],{"class":53,"line":209},[51,149844,206],{"emptyLinePlaceholder":205},[51,149846,149847,149850,149852],{"class":53,"line":223},[51,149848,149849],{"class":65},"student1 ",[51,149851,70],{"class":69},[51,149853,149785],{"class":65},[51,149855,149856,149859,149861],{"class":53,"line":237},[51,149857,149858],{"class":65},"student2 ",[51,149860,70],{"class":69},[51,149862,149785],{"class":65},[10,149864,149865,149868,149869,101390,149872,149875],{},[48,149866,149867],{},"Student"," 是类，",[48,149870,149871],{},"student1",[48,149873,149874],{},"student2"," 是对象。",[486,149877,149879],{"id":149878},"_113-属性","11.3 属性",[10,149881,149882],{},"属性是对象保存的数据。",[41,149884,149886],{"className":170,"code":149885,"language":172,"meta":46,"style":46},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[48,149887,149888,149896,149900,149904,149908,149916,149924,149932,149936,149943],{"__ignoreMap":46},[51,149889,149890,149892,149894],{"class":53,"line":54},[51,149891,15078],{"class":69},[51,149893,8282],{"class":57},[51,149895,363],{"class":65},[51,149897,149898],{"class":53,"line":185},[51,149899,149836],{"class":69},[51,149901,149902],{"class":53,"line":202},[51,149903,206],{"emptyLinePlaceholder":205},[51,149905,149906],{"class":53,"line":209},[51,149907,206],{"emptyLinePlaceholder":205},[51,149909,149910,149912,149914],{"class":53,"line":223},[51,149911,149780],{"class":65},[51,149913,70],{"class":69},[51,149915,149785],{"class":65},[51,149917,149918,149920,149922],{"class":53,"line":237},[51,149919,149790],{"class":65},[51,149921,70],{"class":69},[51,149923,149652],{"class":61},[51,149925,149926,149928,149930],{"class":53,"line":242},[51,149927,149799],{"class":65},[51,149929,70],{"class":69},[51,149931,146850],{"class":278},[51,149933,149934],{"class":53,"line":257},[51,149935,206],{"emptyLinePlaceholder":205},[51,149937,149938,149940],{"class":53,"line":262},[51,149939,30794],{"class":278},[51,149941,149942],{"class":65},"(student.name)\n",[51,149944,149945,149947],{"class":53,"line":285},[51,149946,30794],{"class":278},[51,149948,149949],{"class":65},"(student.age)\n",[10,149951,149952],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[486,149954,149956],{"id":149955},"_114-方法","11.4 方法",[10,149958,149959],{},"类中的函数叫方法。",[41,149961,149962],{"className":170,"code":149720,"language":172,"meta":46,"style":46},[48,149963,149964,149972,149980,150008,150012,150016,150024,150032,150040],{"__ignoreMap":46},[51,149965,149966,149968,149970],{"class":53,"line":54},[51,149967,15078],{"class":69},[51,149969,8282],{"class":57},[51,149971,363],{"class":65},[51,149973,149974,149976,149978],{"class":53,"line":185},[51,149975,31179],{"class":69},[51,149977,149671],{"class":57},[51,149979,31185],{"class":65},[51,149981,149982,149984,149986,149988,149990,149992,149994,149996,149998,150000,150002,150004,150006],{"class":53,"line":202},[51,149983,32826],{"class":278},[51,149985,546],{"class":65},[51,149987,595],{"class":69},[51,149989,149685],{"class":61},[51,149991,149751],{"class":278},[51,149993,80673],{"class":65},[51,149995,1488],{"class":278},[51,149997,149694],{"class":61},[51,149999,149751],{"class":278},[51,150001,80685],{"class":65},[51,150003,1488],{"class":278},[51,150005,149703],{"class":61},[51,150007,282],{"class":65},[51,150009,150010],{"class":53,"line":209},[51,150011,206],{"emptyLinePlaceholder":205},[51,150013,150014],{"class":53,"line":223},[51,150015,206],{"emptyLinePlaceholder":205},[51,150017,150018,150020,150022],{"class":53,"line":237},[51,150019,149780],{"class":65},[51,150021,70],{"class":69},[51,150023,149785],{"class":65},[51,150025,150026,150028,150030],{"class":53,"line":242},[51,150027,149790],{"class":65},[51,150029,70],{"class":69},[51,150031,149652],{"class":61},[51,150033,150034,150036,150038],{"class":53,"line":257},[51,150035,149799],{"class":65},[51,150037,70],{"class":69},[51,150039,146850],{"class":278},[51,150041,150042],{"class":53,"line":262},[51,150043,149808],{"class":65},[10,150045,150046,150048,150049,150051],{},[48,150047,31201],{}," 表示当前对象。调用方法时不需要手动传入 ",[48,150050,31201],{},"，Python 会自动传。",[486,150053,150055],{"id":150054},"_115-构造方法__init__","11.5 构造方法__init__",[10,150057,150058,150060],{},[48,150059,31207],{}," 在对象创建时自动执行，用于初始化属性。",[41,150062,150064],{"className":170,"code":150063,"language":172,"meta":46,"style":46},"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",[48,150065,150066,150074,150083,150095,150107,150118,150122,150130,150168,150172,150176,150198],{"__ignoreMap":46},[51,150067,150068,150070,150072],{"class":53,"line":54},[51,150069,15078],{"class":69},[51,150071,8282],{"class":57},[51,150073,363],{"class":65},[51,150075,150076,150078,150080],{"class":53,"line":185},[51,150077,31179],{"class":69},[51,150079,31182],{"class":278},[51,150081,150082],{"class":65},"(self, name, age, score):\n",[51,150084,150085,150087,150090,150092],{"class":53,"line":202},[51,150086,31223],{"class":278},[51,150088,150089],{"class":65},".name ",[51,150091,70],{"class":69},[51,150093,150094],{"class":65}," name\n",[51,150096,150097,150099,150102,150104],{"class":53,"line":209},[51,150098,31223],{"class":278},[51,150100,150101],{"class":65},".age ",[51,150103,70],{"class":69},[51,150105,150106],{"class":65}," age\n",[51,150108,150109,150111,150114,150116],{"class":53,"line":223},[51,150110,31223],{"class":278},[51,150112,150113],{"class":65},".score ",[51,150115,70],{"class":69},[51,150117,1988],{"class":65},[51,150119,150120],{"class":53,"line":237},[51,150121,206],{"emptyLinePlaceholder":205},[51,150123,150124,150126,150128],{"class":53,"line":242},[51,150125,31179],{"class":69},[51,150127,149671],{"class":57},[51,150129,31185],{"class":65},[51,150131,150132,150134,150136,150138,150140,150142,150144,150146,150148,150150,150152,150154,150157,150159,150162,150164,150166],{"class":53,"line":257},[51,150133,32826],{"class":278},[51,150135,546],{"class":65},[51,150137,595],{"class":69},[51,150139,149685],{"class":61},[51,150141,149751],{"class":278},[51,150143,80673],{"class":65},[51,150145,1488],{"class":278},[51,150147,149694],{"class":61},[51,150149,149751],{"class":278},[51,150151,80685],{"class":65},[51,150153,1488],{"class":278},[51,150155,150156],{"class":61},"岁，成绩",[51,150158,149751],{"class":278},[51,150160,150161],{"class":65},".score",[51,150163,1488],{"class":278},[51,150165,793],{"class":61},[51,150167,282],{"class":65},[51,150169,150170],{"class":53,"line":262},[51,150171,206],{"emptyLinePlaceholder":205},[51,150173,150174],{"class":53,"line":285},[51,150175,206],{"emptyLinePlaceholder":205},[51,150177,150178,150180,150182,150185,150188,150190,150192,150194,150196],{"class":53,"line":296},[51,150179,149780],{"class":65},[51,150181,70],{"class":69},[51,150183,150184],{"class":65}," Student(",[51,150186,150187],{"class":61},"\"小明\"",[51,150189,12819],{"class":65},[51,150191,1192],{"class":278},[51,150193,12819],{"class":65},[51,150195,1531],{"class":278},[51,150197,282],{"class":65},[51,150199,150200],{"class":53,"line":307},[51,150201,149808],{"class":65},[10,150203,150204],{},"构造方法的好处：",[19,150206,150207,150210,150213],{},[22,150208,150209],{},"创建对象时必须提供必要数据。",[22,150211,150212],{},"属性初始化集中，不容易漏。",[22,150214,150215],{},"对象状态更完整。",[486,150217,150219,150220],{"id":150218},"_116-str","11.6 ",[691,150221,1712],{},[10,150223,150224,150225,28767],{},"直接打印对象时，默认输出不直观。可以定义 ",[48,150226,150227],{},"__str__",[41,150229,150231],{"className":170,"code":150230,"language":172,"meta":46,"style":46},"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",[48,150232,150233,150241,150250,150260,150270,150274,150283,150311,150315,150319,150335],{"__ignoreMap":46},[51,150234,150235,150237,150239],{"class":53,"line":54},[51,150236,15078],{"class":69},[51,150238,8282],{"class":57},[51,150240,363],{"class":65},[51,150242,150243,150245,150247],{"class":53,"line":185},[51,150244,31179],{"class":69},[51,150246,31182],{"class":278},[51,150248,150249],{"class":65},"(self, name, age):\n",[51,150251,150252,150254,150256,150258],{"class":53,"line":202},[51,150253,31223],{"class":278},[51,150255,150089],{"class":65},[51,150257,70],{"class":69},[51,150259,150094],{"class":65},[51,150261,150262,150264,150266,150268],{"class":53,"line":209},[51,150263,31223],{"class":278},[51,150265,150101],{"class":65},[51,150267,70],{"class":69},[51,150269,150106],{"class":65},[51,150271,150272],{"class":53,"line":223},[51,150273,206],{"emptyLinePlaceholder":205},[51,150275,150276,150278,150281],{"class":53,"line":237},[51,150277,31179],{"class":69},[51,150279,150280],{"class":278}," __str__",[51,150282,31185],{"class":65},[51,150284,150285,150287,150290,150293,150295,150297,150299,150302,150304,150306,150308],{"class":53,"line":242},[51,150286,15136],{"class":69},[51,150288,150289],{"class":69}," f",[51,150291,150292],{"class":61},"\"Student(name=",[51,150294,149751],{"class":278},[51,150296,80673],{"class":65},[51,150298,1488],{"class":278},[51,150300,150301],{"class":61},", age=",[51,150303,149751],{"class":278},[51,150305,80685],{"class":65},[51,150307,1488],{"class":278},[51,150309,150310],{"class":61},")\"\n",[51,150312,150313],{"class":53,"line":257},[51,150314,206],{"emptyLinePlaceholder":205},[51,150316,150317],{"class":53,"line":262},[51,150318,206],{"emptyLinePlaceholder":205},[51,150320,150321,150323,150325,150327,150329,150331,150333],{"class":53,"line":285},[51,150322,149780],{"class":65},[51,150324,70],{"class":69},[51,150326,150184],{"class":65},[51,150328,150187],{"class":61},[51,150330,12819],{"class":65},[51,150332,1192],{"class":278},[51,150334,282],{"class":65},[51,150336,150337,150339],{"class":53,"line":296},[51,150338,30794],{"class":278},[51,150340,150341],{"class":65},"(student)\n",[486,150343,150345],{"id":150344},"_117-封装","11.7 封装",[10,150347,150348],{},"封装就是把数据和方法放到类中，并控制访问方式。",[10,150350,150351],{},"Python 中以双下划线开头的属性通常视为私有属性。",[41,150353,150355],{"className":170,"code":150354,"language":172,"meta":46,"style":46},"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",[48,150356,150357,150366,150375,150387,150399,150403,150412,150421,150425,150435,150448,150459,150464,150475,150479,150488,150500,150511,150515,150528,150539,150543,150554,150558,150562,150580,150589,150598],{"__ignoreMap":46},[51,150358,150359,150361,150364],{"class":53,"line":54},[51,150360,15078],{"class":69},[51,150362,150363],{"class":57}," Account",[51,150365,363],{"class":65},[51,150367,150368,150370,150372],{"class":53,"line":185},[51,150369,31179],{"class":69},[51,150371,31182],{"class":278},[51,150373,150374],{"class":65},"(self, owner, balance):\n",[51,150376,150377,150379,150382,150384],{"class":53,"line":202},[51,150378,31223],{"class":278},[51,150380,150381],{"class":65},".owner ",[51,150383,70],{"class":69},[51,150385,150386],{"class":65}," owner\n",[51,150388,150389,150391,150394,150396],{"class":53,"line":209},[51,150390,31223],{"class":278},[51,150392,150393],{"class":65},".__balance ",[51,150395,70],{"class":69},[51,150397,150398],{"class":65}," balance\n",[51,150400,150401],{"class":53,"line":223},[51,150402,206],{"emptyLinePlaceholder":205},[51,150404,150405,150407,150410],{"class":53,"line":237},[51,150406,31179],{"class":69},[51,150408,150409],{"class":57}," get_balance",[51,150411,31185],{"class":65},[51,150413,150414,150416,150418],{"class":53,"line":242},[51,150415,15136],{"class":69},[51,150417,39247],{"class":278},[51,150419,150420],{"class":65},".__balance\n",[51,150422,150423],{"class":53,"line":257},[51,150424,206],{"emptyLinePlaceholder":205},[51,150426,150427,150429,150432],{"class":53,"line":262},[51,150428,31179],{"class":69},[51,150430,150431],{"class":57}," deposit",[51,150433,150434],{"class":65},"(self, money):\n",[51,150436,150437,150439,150442,150444,150446],{"class":53,"line":285},[51,150438,369],{"class":69},[51,150440,150441],{"class":65}," money ",[51,150443,1997],{"class":69},[51,150445,4479],{"class":278},[51,150447,363],{"class":65},[51,150449,150450,150452,150454,150457],{"class":53,"line":296},[51,150451,35025],{"class":278},[51,150453,546],{"class":65},[51,150455,150456],{"class":61},"\"存款金额必须大于0\"",[51,150458,282],{"class":65},[51,150460,150461],{"class":53,"line":307},[51,150462,150463],{"class":69},"            return\n",[51,150465,150466,150468,150470,150472],{"class":53,"line":324},[51,150467,31223],{"class":278},[51,150469,150393],{"class":65},[51,150471,9861],{"class":69},[51,150473,150474],{"class":65}," money\n",[51,150476,150477],{"class":53,"line":329},[51,150478,206],{"emptyLinePlaceholder":205},[51,150480,150481,150483,150486],{"class":53,"line":334},[51,150482,31179],{"class":69},[51,150484,150485],{"class":57}," withdraw",[51,150487,150434],{"class":65},[51,150489,150490,150492,150494,150496,150498],{"class":53,"line":340},[51,150491,369],{"class":69},[51,150493,150441],{"class":65},[51,150495,1997],{"class":69},[51,150497,4479],{"class":278},[51,150499,363],{"class":65},[51,150501,150502,150504,150506,150509],{"class":53,"line":345},[51,150503,35025],{"class":278},[51,150505,546],{"class":65},[51,150507,150508],{"class":61},"\"取款金额必须大于0\"",[51,150510,282],{"class":65},[51,150512,150513],{"class":53,"line":357},[51,150514,150463],{"class":69},[51,150516,150517,150519,150521,150523,150525],{"class":53,"line":366},[51,150518,369],{"class":69},[51,150520,150441],{"class":65},[51,150522,1502],{"class":69},[51,150524,39247],{"class":278},[51,150526,150527],{"class":65},".__balance:\n",[51,150529,150530,150532,150534,150537],{"class":53,"line":383},[51,150531,35025],{"class":278},[51,150533,546],{"class":65},[51,150535,150536],{"class":61},"\"余额不足\"",[51,150538,282],{"class":65},[51,150540,150541],{"class":53,"line":392},[51,150542,150463],{"class":69},[51,150544,150545,150547,150549,150552],{"class":53,"line":403},[51,150546,31223],{"class":278},[51,150548,150393],{"class":65},[51,150550,150551],{"class":69},"-=",[51,150553,150474],{"class":65},[51,150555,150556],{"class":53,"line":409},[51,150557,206],{"emptyLinePlaceholder":205},[51,150559,150560],{"class":53,"line":414},[51,150561,206],{"emptyLinePlaceholder":205},[51,150563,150564,150567,150569,150572,150574,150576,150578],{"class":53,"line":433},[51,150565,150566],{"class":65},"account ",[51,150568,70],{"class":69},[51,150570,150571],{"class":65}," Account(",[51,150573,150187],{"class":61},[51,150575,12819],{"class":65},[51,150577,6794],{"class":278},[51,150579,282],{"class":65},[51,150581,150582,150585,150587],{"class":53,"line":439},[51,150583,150584],{"class":65},"account.deposit(",[51,150586,2120],{"class":278},[51,150588,282],{"class":65},[51,150590,150591,150594,150596],{"class":53,"line":444},[51,150592,150593],{"class":65},"account.withdraw(",[51,150595,853],{"class":278},[51,150597,282],{"class":65},[51,150599,150600,150602],{"class":53,"line":453},[51,150601,30794],{"class":278},[51,150603,150604],{"class":65},"(account.get_balance())\n",[10,150606,150607],{},"封装的意义是避免外部随意修改内部状态。",[486,150609,150611],{"id":150610},"_118-继承","11.8 继承",[10,150613,150614],{},"继承可以让子类复用父类的属性和方法。",[41,150616,150618],{"className":170,"code":150617,"language":172,"meta":46,"style":46},"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",[48,150619,150620,150629,150638,150649,150653,150657,150671,150680,150691,150695,150699,150709,150714],{"__ignoreMap":46},[51,150621,150622,150624,150627],{"class":53,"line":54},[51,150623,15078],{"class":69},[51,150625,150626],{"class":57}," Animal",[51,150628,363],{"class":65},[51,150630,150631,150633,150636],{"class":53,"line":185},[51,150632,31179],{"class":69},[51,150634,150635],{"class":57}," eat",[51,150637,31185],{"class":65},[51,150639,150640,150642,150644,150647],{"class":53,"line":202},[51,150641,32826],{"class":278},[51,150643,546],{"class":65},[51,150645,150646],{"class":61},"\"吃东西\"",[51,150648,282],{"class":65},[51,150650,150651],{"class":53,"line":209},[51,150652,206],{"emptyLinePlaceholder":205},[51,150654,150655],{"class":53,"line":223},[51,150656,206],{"emptyLinePlaceholder":205},[51,150658,150659,150661,150664,150666,150669],{"class":53,"line":237},[51,150660,15078],{"class":69},[51,150662,150663],{"class":57}," Dog",[51,150665,546],{"class":65},[51,150667,150668],{"class":57},"Animal",[51,150670,31164],{"class":65},[51,150672,150673,150675,150678],{"class":53,"line":242},[51,150674,31179],{"class":69},[51,150676,150677],{"class":57}," bark",[51,150679,31185],{"class":65},[51,150681,150682,150684,150686,150689],{"class":53,"line":257},[51,150683,32826],{"class":278},[51,150685,546],{"class":65},[51,150687,150688],{"class":61},"\"汪汪\"",[51,150690,282],{"class":65},[51,150692,150693],{"class":53,"line":262},[51,150694,206],{"emptyLinePlaceholder":205},[51,150696,150697],{"class":53,"line":285},[51,150698,206],{"emptyLinePlaceholder":205},[51,150700,150701,150704,150706],{"class":53,"line":296},[51,150702,150703],{"class":65},"dog ",[51,150705,70],{"class":69},[51,150707,150708],{"class":65}," Dog()\n",[51,150710,150711],{"class":53,"line":307},[51,150712,150713],{"class":65},"dog.eat()\n",[51,150715,150716],{"class":53,"line":324},[51,150717,150718],{"class":65},"dog.bark()\n",[10,150720,150721],{},"子类可以扩展新方法，也可以重写父类方法。",[486,150723,150725],{"id":150724},"_119-方法重写","11.9 方法重写",[41,150727,150729],{"className":170,"code":150728,"language":172,"meta":46,"style":46},"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",[48,150730,150731,150739,150748,150759,150763,150767,150779,150787,150797,150801,150805,150818,150826,150837,150841,150845,150853,150863,150867,150872],{"__ignoreMap":46},[51,150732,150733,150735,150737],{"class":53,"line":54},[51,150734,15078],{"class":69},[51,150736,150626],{"class":57},[51,150738,363],{"class":65},[51,150740,150741,150743,150746],{"class":53,"line":185},[51,150742,31179],{"class":69},[51,150744,150745],{"class":57}," speak",[51,150747,31185],{"class":65},[51,150749,150750,150752,150754,150757],{"class":53,"line":202},[51,150751,32826],{"class":278},[51,150753,546],{"class":65},[51,150755,150756],{"class":61},"\"动物叫\"",[51,150758,282],{"class":65},[51,150760,150761],{"class":53,"line":209},[51,150762,206],{"emptyLinePlaceholder":205},[51,150764,150765],{"class":53,"line":223},[51,150766,206],{"emptyLinePlaceholder":205},[51,150768,150769,150771,150773,150775,150777],{"class":53,"line":237},[51,150770,15078],{"class":69},[51,150772,150663],{"class":57},[51,150774,546],{"class":65},[51,150776,150668],{"class":57},[51,150778,31164],{"class":65},[51,150780,150781,150783,150785],{"class":53,"line":242},[51,150782,31179],{"class":69},[51,150784,150745],{"class":57},[51,150786,31185],{"class":65},[51,150788,150789,150791,150793,150795],{"class":53,"line":257},[51,150790,32826],{"class":278},[51,150792,546],{"class":65},[51,150794,150688],{"class":61},[51,150796,282],{"class":65},[51,150798,150799],{"class":53,"line":262},[51,150800,206],{"emptyLinePlaceholder":205},[51,150802,150803],{"class":53,"line":285},[51,150804,206],{"emptyLinePlaceholder":205},[51,150806,150807,150809,150812,150814,150816],{"class":53,"line":296},[51,150808,15078],{"class":69},[51,150810,150811],{"class":57}," Cat",[51,150813,546],{"class":65},[51,150815,150668],{"class":57},[51,150817,31164],{"class":65},[51,150819,150820,150822,150824],{"class":53,"line":307},[51,150821,31179],{"class":69},[51,150823,150745],{"class":57},[51,150825,31185],{"class":65},[51,150827,150828,150830,150832,150835],{"class":53,"line":324},[51,150829,32826],{"class":278},[51,150831,546],{"class":65},[51,150833,150834],{"class":61},"\"喵喵\"",[51,150836,282],{"class":65},[51,150838,150839],{"class":53,"line":329},[51,150840,206],{"emptyLinePlaceholder":205},[51,150842,150843],{"class":53,"line":334},[51,150844,206],{"emptyLinePlaceholder":205},[51,150846,150847,150849,150851],{"class":53,"line":340},[51,150848,150703],{"class":65},[51,150850,70],{"class":69},[51,150852,150708],{"class":65},[51,150854,150855,150858,150860],{"class":53,"line":345},[51,150856,150857],{"class":65},"cat ",[51,150859,70],{"class":69},[51,150861,150862],{"class":65}," Cat()\n",[51,150864,150865],{"class":53,"line":357},[51,150866,206],{"emptyLinePlaceholder":205},[51,150868,150869],{"class":53,"line":366},[51,150870,150871],{"class":65},"dog.speak()\n",[51,150873,150874],{"class":53,"line":383},[51,150875,150876],{"class":65},"cat.speak()\n",[486,150878,150880],{"id":150879},"_1110-super","11.10 super",[10,150882,150883,150884,150887],{},"子类可以通过 ",[48,150885,150886],{},"super()"," 调用父类方法。",[41,150889,150891],{"className":170,"code":150890,"language":172,"meta":46,"style":46},"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",[48,150892,150893,150901,150910,150920,150924,150928,150940,150949,150960,150970,150974,150978,150994],{"__ignoreMap":46},[51,150894,150895,150897,150899],{"class":53,"line":54},[51,150896,15078],{"class":69},[51,150898,15953],{"class":57},[51,150900,363],{"class":65},[51,150902,150903,150905,150907],{"class":53,"line":185},[51,150904,31179],{"class":69},[51,150906,31182],{"class":278},[51,150908,150909],{"class":65},"(self, name):\n",[51,150911,150912,150914,150916,150918],{"class":53,"line":202},[51,150913,31223],{"class":278},[51,150915,150089],{"class":65},[51,150917,70],{"class":69},[51,150919,150094],{"class":65},[51,150921,150922],{"class":53,"line":209},[51,150923,206],{"emptyLinePlaceholder":205},[51,150925,150926],{"class":53,"line":223},[51,150927,206],{"emptyLinePlaceholder":205},[51,150929,150930,150932,150934,150936,150938],{"class":53,"line":237},[51,150931,15078],{"class":69},[51,150933,8282],{"class":57},[51,150935,546],{"class":65},[51,150937,19429],{"class":57},[51,150939,31164],{"class":65},[51,150941,150942,150944,150946],{"class":53,"line":242},[51,150943,31179],{"class":69},[51,150945,31182],{"class":278},[51,150947,150948],{"class":65},"(self, name, score):\n",[51,150950,150951,150953,150955,150957],{"class":53,"line":257},[51,150952,31195],{"class":278},[51,150954,17644],{"class":65},[51,150956,31207],{"class":278},[51,150958,150959],{"class":65},"(name)\n",[51,150961,150962,150964,150966,150968],{"class":53,"line":262},[51,150963,31223],{"class":278},[51,150965,150113],{"class":65},[51,150967,70],{"class":69},[51,150969,1988],{"class":65},[51,150971,150972],{"class":53,"line":285},[51,150973,206],{"emptyLinePlaceholder":205},[51,150975,150976],{"class":53,"line":296},[51,150977,206],{"emptyLinePlaceholder":205},[51,150979,150980,150982,150984,150986,150988,150990,150992],{"class":53,"line":307},[51,150981,149780],{"class":65},[51,150983,70],{"class":69},[51,150985,150184],{"class":65},[51,150987,150187],{"class":61},[51,150989,12819],{"class":65},[51,150991,1531],{"class":278},[51,150993,282],{"class":65},[51,150995,150996,150998],{"class":53,"line":324},[51,150997,30794],{"class":278},[51,150999,151000],{"class":65},"(student.name, student.score)\n",[486,151002,151004],{"id":151003},"_1111-多态","11.11 多态",[10,151006,151007],{},"多态指不同对象响应同一个方法，表现出不同结果。",[41,151009,151011],{"className":170,"code":151010,"language":172,"meta":46,"style":46},"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",[48,151012,151013,151021,151029,151039,151043,151047,151055,151063,151073,151077,151081,151091,151096,151100,151104,151109],{"__ignoreMap":46},[51,151014,151015,151017,151019],{"class":53,"line":54},[51,151016,15078],{"class":69},[51,151018,150663],{"class":57},[51,151020,363],{"class":65},[51,151022,151023,151025,151027],{"class":53,"line":185},[51,151024,31179],{"class":69},[51,151026,150745],{"class":57},[51,151028,31185],{"class":65},[51,151030,151031,151033,151035,151037],{"class":53,"line":202},[51,151032,32826],{"class":278},[51,151034,546],{"class":65},[51,151036,150688],{"class":61},[51,151038,282],{"class":65},[51,151040,151041],{"class":53,"line":209},[51,151042,206],{"emptyLinePlaceholder":205},[51,151044,151045],{"class":53,"line":223},[51,151046,206],{"emptyLinePlaceholder":205},[51,151048,151049,151051,151053],{"class":53,"line":237},[51,151050,15078],{"class":69},[51,151052,150811],{"class":57},[51,151054,363],{"class":65},[51,151056,151057,151059,151061],{"class":53,"line":242},[51,151058,31179],{"class":69},[51,151060,150745],{"class":57},[51,151062,31185],{"class":65},[51,151064,151065,151067,151069,151071],{"class":53,"line":257},[51,151066,32826],{"class":278},[51,151068,546],{"class":65},[51,151070,150834],{"class":61},[51,151072,282],{"class":65},[51,151074,151075],{"class":53,"line":262},[51,151076,206],{"emptyLinePlaceholder":205},[51,151078,151079],{"class":53,"line":285},[51,151080,206],{"emptyLinePlaceholder":205},[51,151082,151083,151085,151088],{"class":53,"line":296},[51,151084,348],{"class":69},[51,151086,151087],{"class":57}," make_sound",[51,151089,151090],{"class":65},"(animal):\n",[51,151092,151093],{"class":53,"line":307},[51,151094,151095],{"class":65},"    animal.speak()\n",[51,151097,151098],{"class":53,"line":324},[51,151099,206],{"emptyLinePlaceholder":205},[51,151101,151102],{"class":53,"line":329},[51,151103,206],{"emptyLinePlaceholder":205},[51,151105,151106],{"class":53,"line":334},[51,151107,151108],{"class":65},"make_sound(Dog())\n",[51,151110,151111],{"class":53,"line":340},[51,151112,151113],{"class":65},"make_sound(Cat())\n",[10,151115,151116],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[486,151118,151120],{"id":151119},"_1112-类属性和实例属性","11.12 类属性和实例属性",[10,151122,151123],{},"实例属性属于对象：",[41,151125,151127],{"className":170,"code":151126,"language":172,"meta":46,"style":46},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[48,151128,151129,151137,151145],{"__ignoreMap":46},[51,151130,151131,151133,151135],{"class":53,"line":54},[51,151132,15078],{"class":69},[51,151134,8282],{"class":57},[51,151136,363],{"class":65},[51,151138,151139,151141,151143],{"class":53,"line":185},[51,151140,31179],{"class":69},[51,151142,31182],{"class":278},[51,151144,150909],{"class":65},[51,151146,151147,151149,151151,151153],{"class":53,"line":202},[51,151148,31223],{"class":278},[51,151150,150089],{"class":65},[51,151152,70],{"class":69},[51,151154,150094],{"class":65},[10,151156,151157],{},"类属性属于类，所有对象共享：",[41,151159,151161],{"className":170,"code":151160,"language":172,"meta":46,"style":46},"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",[48,151162,151163,151171,151181,151185,151193,151203,151207,151211,151224,151238,151242,151249,151256],{"__ignoreMap":46},[51,151164,151165,151167,151169],{"class":53,"line":54},[51,151166,15078],{"class":69},[51,151168,8282],{"class":57},[51,151170,363],{"class":65},[51,151172,151173,151176,151178],{"class":53,"line":185},[51,151174,151175],{"class":65},"    school ",[51,151177,70],{"class":69},[51,151179,151180],{"class":61}," \"黑马学校\"\n",[51,151182,151183],{"class":53,"line":202},[51,151184,206],{"emptyLinePlaceholder":205},[51,151186,151187,151189,151191],{"class":53,"line":209},[51,151188,31179],{"class":69},[51,151190,31182],{"class":278},[51,151192,150909],{"class":65},[51,151194,151195,151197,151199,151201],{"class":53,"line":223},[51,151196,31223],{"class":278},[51,151198,150089],{"class":65},[51,151200,70],{"class":69},[51,151202,150094],{"class":65},[51,151204,151205],{"class":53,"line":237},[51,151206,206],{"emptyLinePlaceholder":205},[51,151208,151209],{"class":53,"line":242},[51,151210,206],{"emptyLinePlaceholder":205},[51,151212,151213,151216,151218,151220,151222],{"class":53,"line":257},[51,151214,151215],{"class":65},"s1 ",[51,151217,70],{"class":69},[51,151219,150184],{"class":65},[51,151221,150187],{"class":61},[51,151223,282],{"class":65},[51,151225,151226,151229,151231,151233,151236],{"class":53,"line":262},[51,151227,151228],{"class":65},"s2 ",[51,151230,70],{"class":69},[51,151232,150184],{"class":65},[51,151234,151235],{"class":61},"\"小红\"",[51,151237,282],{"class":65},[51,151239,151240],{"class":53,"line":285},[51,151241,206],{"emptyLinePlaceholder":205},[51,151243,151244,151246],{"class":53,"line":296},[51,151245,30794],{"class":278},[51,151247,151248],{"class":65},"(s1.school)\n",[51,151250,151251,151253],{"class":53,"line":307},[51,151252,30794],{"class":278},[51,151254,151255],{"class":65},"(s2.school)\n",[51,151257,151258,151260],{"class":53,"line":324},[51,151259,30794],{"class":278},[51,151261,151262],{"class":65},"(Student.school)\n",[10,151264,151265],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[486,151267,151269],{"id":151268},"_1113-类方法和静态方法","11.13 类方法和静态方法",[513,151271,151273],{"id":151272},"_11131-类方法","11.13.1 类方法",[10,151275,151276,151277,151280,151281,28767],{},"类方法使用 ",[48,151278,151279],{},"@classmethod","，第一个参数通常是 ",[48,151282,151283],{},"cls",[41,151285,151287],{"className":170,"code":151286,"language":172,"meta":46,"style":46},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[48,151288,151289,151297,151305,151309,151317,151327,151337,151341,151345],{"__ignoreMap":46},[51,151290,151291,151293,151295],{"class":53,"line":54},[51,151292,15078],{"class":69},[51,151294,8282],{"class":57},[51,151296,363],{"class":65},[51,151298,151299,151301,151303],{"class":53,"line":185},[51,151300,151175],{"class":65},[51,151302,70],{"class":69},[51,151304,151180],{"class":61},[51,151306,151307],{"class":53,"line":202},[51,151308,206],{"emptyLinePlaceholder":205},[51,151310,151311,151314],{"class":53,"line":209},[51,151312,151313],{"class":57},"    @",[51,151315,151316],{"class":278},"classmethod\n",[51,151318,151319,151321,151324],{"class":53,"line":223},[51,151320,31179],{"class":69},[51,151322,151323],{"class":57}," get_school",[51,151325,151326],{"class":65},"(cls):\n",[51,151328,151329,151331,151334],{"class":53,"line":237},[51,151330,15136],{"class":69},[51,151332,151333],{"class":278}," cls",[51,151335,151336],{"class":65},".school\n",[51,151338,151339],{"class":53,"line":242},[51,151340,206],{"emptyLinePlaceholder":205},[51,151342,151343],{"class":53,"line":257},[51,151344,206],{"emptyLinePlaceholder":205},[51,151346,151347,151349],{"class":53,"line":262},[51,151348,30794],{"class":278},[51,151350,151351],{"class":65},"(Student.get_school())\n",[513,151353,151355],{"id":151354},"_11132-静态方法","11.13.2 静态方法",[10,151357,151358,151359,151362],{},"静态方法使用 ",[48,151360,151361],{},"@staticmethod","，不需要访问实例和类。",[41,151364,151366],{"className":170,"code":151365,"language":172,"meta":46,"style":46},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[48,151367,151368,151377,151384,151393,151404,151408,151412],{"__ignoreMap":46},[51,151369,151370,151372,151375],{"class":53,"line":54},[51,151371,15078],{"class":69},[51,151373,151374],{"class":57}," MathUtils",[51,151376,363],{"class":65},[51,151378,151379,151381],{"class":53,"line":185},[51,151380,151313],{"class":57},[51,151382,151383],{"class":278},"staticmethod\n",[51,151385,151386,151388,151390],{"class":53,"line":202},[51,151387,31179],{"class":69},[51,151389,5594],{"class":57},[51,151391,151392],{"class":65},"(a, b):\n",[51,151394,151395,151397,151399,151401],{"class":53,"line":209},[51,151396,15136],{"class":69},[51,151398,11253],{"class":65},[51,151400,1023],{"class":69},[51,151402,151403],{"class":65}," b\n",[51,151405,151406],{"class":53,"line":223},[51,151407,206],{"emptyLinePlaceholder":205},[51,151409,151410],{"class":53,"line":237},[51,151411,206],{"emptyLinePlaceholder":205},[51,151413,151414,151416,151419,151421,151423,151425],{"class":53,"line":242},[51,151415,30794],{"class":278},[51,151417,151418],{"class":65},"(MathUtils.add(",[51,151420,759],{"class":278},[51,151422,12819],{"class":65},[51,151424,620],{"class":278},[51,151426,30876],{"class":65},[10,151428,151429],{},"静态方法本质上是放在类命名空间里的普通函数。",[486,151431,151433],{"id":151432},"_1114-dataclass","11.14 dataclass",[10,151435,151436,151439],{},[48,151437,151438],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[41,151441,151443],{"className":170,"code":151442,"language":172,"meta":46,"style":46},"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",[48,151444,151445,151457,151461,151465,151470,151478,151486,151494,151502,151506,151510,151530],{"__ignoreMap":46},[51,151446,151447,151449,151452,151454],{"class":53,"line":54},[51,151448,226],{"class":69},[51,151450,151451],{"class":65}," dataclasses ",[51,151453,179],{"class":69},[51,151455,151456],{"class":65}," dataclass\n",[51,151458,151459],{"class":53,"line":185},[51,151460,206],{"emptyLinePlaceholder":205},[51,151462,151463],{"class":53,"line":202},[51,151464,206],{"emptyLinePlaceholder":205},[51,151466,151467],{"class":53,"line":209},[51,151468,151469],{"class":57},"@dataclass\n",[51,151471,151472,151474,151476],{"class":53,"line":223},[51,151473,15078],{"class":69},[51,151475,8282],{"class":57},[51,151477,363],{"class":65},[51,151479,151480,151483],{"class":53,"line":237},[51,151481,151482],{"class":65},"    name: ",[51,151484,151485],{"class":278},"str\n",[51,151487,151488,151491],{"class":53,"line":242},[51,151489,151490],{"class":65},"    age: ",[51,151492,151493],{"class":278},"int\n",[51,151495,151496,151499],{"class":53,"line":257},[51,151497,151498],{"class":65},"    score: ",[51,151500,151501],{"class":278},"float\n",[51,151503,151504],{"class":53,"line":262},[51,151505,206],{"emptyLinePlaceholder":205},[51,151507,151508],{"class":53,"line":285},[51,151509,206],{"emptyLinePlaceholder":205},[51,151511,151512,151514,151516,151518,151520,151522,151524,151526,151528],{"class":53,"line":296},[51,151513,149780],{"class":65},[51,151515,70],{"class":69},[51,151517,150184],{"class":65},[51,151519,150187],{"class":61},[51,151521,12819],{"class":65},[51,151523,1192],{"class":278},[51,151525,12819],{"class":65},[51,151527,1531],{"class":278},[51,151529,282],{"class":65},[51,151531,151532,151534],{"class":53,"line":307},[51,151533,30794],{"class":278},[51,151535,150341],{"class":65},[10,151537,151538,151539,754,151541,151544],{},"它会自动生成 ",[48,151540,31207],{},[48,151542,151543],{},"__repr__"," 等方法。适合数据模型类。",[486,151546,151548],{"id":151547},"_1115-小案例学生类","11.15 小案例：学生类",[41,151550,151552],{"className":170,"code":151551,"language":172,"meta":46,"style":46},"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",[48,151553,151554,151562,151571,151583,151593,151603,151613,151617,151626,151639,151643,151652,151658,151670,151682,151694,151706,151710,151714,151720,151730,151739,151749,151757,151765,151774,151778,151782,151790,151826,151830,151834,151859,151866],{"__ignoreMap":46},[51,151555,151556,151558,151560],{"class":53,"line":54},[51,151557,15078],{"class":69},[51,151559,8282],{"class":57},[51,151561,363],{"class":65},[51,151563,151564,151566,151568],{"class":53,"line":185},[51,151565,31179],{"class":69},[51,151567,31182],{"class":278},[51,151569,151570],{"class":65},"(self, student_id, name, age, score):\n",[51,151572,151573,151575,151578,151580],{"class":53,"line":202},[51,151574,31223],{"class":278},[51,151576,151577],{"class":65},".student_id ",[51,151579,70],{"class":69},[51,151581,151582],{"class":65}," student_id\n",[51,151584,151585,151587,151589,151591],{"class":53,"line":209},[51,151586,31223],{"class":278},[51,151588,150089],{"class":65},[51,151590,70],{"class":69},[51,151592,150094],{"class":65},[51,151594,151595,151597,151599,151601],{"class":53,"line":223},[51,151596,31223],{"class":278},[51,151598,150101],{"class":65},[51,151600,70],{"class":69},[51,151602,150106],{"class":65},[51,151604,151605,151607,151609,151611],{"class":53,"line":237},[51,151606,31223],{"class":278},[51,151608,150113],{"class":65},[51,151610,70],{"class":69},[51,151612,1988],{"class":65},[51,151614,151615],{"class":53,"line":242},[51,151616,206],{"emptyLinePlaceholder":205},[51,151618,151619,151621,151624],{"class":53,"line":257},[51,151620,31179],{"class":69},[51,151622,151623],{"class":57}," is_passed",[51,151625,31185],{"class":65},[51,151627,151628,151630,151632,151634,151636],{"class":53,"line":262},[51,151629,15136],{"class":69},[51,151631,39247],{"class":278},[51,151633,150113],{"class":65},[51,151635,2108],{"class":69},[51,151637,151638],{"class":278}," 60\n",[51,151640,151641],{"class":53,"line":285},[51,151642,206],{"emptyLinePlaceholder":205},[51,151644,151645,151647,151650],{"class":53,"line":296},[51,151646,31179],{"class":69},[51,151648,151649],{"class":57}," to_dict",[51,151651,31185],{"class":65},[51,151653,151654,151656],{"class":53,"line":307},[51,151655,15136],{"class":69},[51,151657,15956],{"class":65},[51,151659,151660,151663,151665,151667],{"class":53,"line":324},[51,151661,151662],{"class":61},"            \"student_id\"",[51,151664,51809],{"class":65},[51,151666,31201],{"class":278},[51,151668,151669],{"class":65},".student_id,\n",[51,151671,151672,151675,151677,151679],{"class":53,"line":329},[51,151673,151674],{"class":61},"            \"name\"",[51,151676,51809],{"class":65},[51,151678,31201],{"class":278},[51,151680,151681],{"class":65},".name,\n",[51,151683,151684,151687,151689,151691],{"class":53,"line":334},[51,151685,151686],{"class":61},"            \"age\"",[51,151688,51809],{"class":65},[51,151690,31201],{"class":278},[51,151692,151693],{"class":65},".age,\n",[51,151695,151696,151699,151701,151703],{"class":53,"line":340},[51,151697,151698],{"class":61},"            \"score\"",[51,151700,51809],{"class":65},[51,151702,31201],{"class":278},[51,151704,151705],{"class":65},".score,\n",[51,151707,151708],{"class":53,"line":345},[51,151709,2917],{"class":65},[51,151711,151712],{"class":53,"line":357},[51,151713,206],{"emptyLinePlaceholder":205},[51,151715,151716,151718],{"class":53,"line":366},[51,151717,151313],{"class":57},[51,151719,151316],{"class":278},[51,151721,151722,151724,151727],{"class":53,"line":383},[51,151723,31179],{"class":69},[51,151725,151726],{"class":57}," from_dict",[51,151728,151729],{"class":65},"(cls, data):\n",[51,151731,151732,151734,151736],{"class":53,"line":392},[51,151733,15136],{"class":69},[51,151735,151333],{"class":278},[51,151737,151738],{"class":65},"(\n",[51,151740,151741,151744,151747],{"class":53,"line":403},[51,151742,151743],{"class":65},"            data[",[51,151745,151746],{"class":61},"\"student_id\"",[51,151748,88208],{"class":65},[51,151750,151751,151753,151755],{"class":53,"line":409},[51,151752,151743],{"class":65},[51,151754,63051],{"class":61},[51,151756,88208],{"class":65},[51,151758,151759,151761,151763],{"class":53,"line":414},[51,151760,151743],{"class":65},[51,151762,69496],{"class":61},[51,151764,88208],{"class":65},[51,151766,151767,151769,151772],{"class":53,"line":433},[51,151768,151743],{"class":65},[51,151770,151771],{"class":61},"\"score\"",[51,151773,88208],{"class":65},[51,151775,151776],{"class":53,"line":439},[51,151777,38500],{"class":65},[51,151779,151780],{"class":53,"line":444},[51,151781,206],{"emptyLinePlaceholder":205},[51,151783,151784,151786,151788],{"class":53,"line":453},[51,151785,31179],{"class":69},[51,151787,150280],{"class":278},[51,151789,31185],{"class":65},[51,151791,151792,151794,151796,151798,151800,151803,151805,151808,151810,151812,151814,151816,151818,151820,151822,151824],{"class":53,"line":2174},[51,151793,15136],{"class":69},[51,151795,150289],{"class":69},[51,151797,793],{"class":61},[51,151799,149751],{"class":278},[51,151801,151802],{"class":65},".student_id",[51,151804,1488],{"class":278},[51,151806,151807],{"class":278}," {self",[51,151809,80673],{"class":65},[51,151811,1488],{"class":278},[51,151813,151807],{"class":278},[51,151815,80685],{"class":65},[51,151817,1488],{"class":278},[51,151819,151807],{"class":278},[51,151821,150161],{"class":65},[51,151823,1488],{"class":278},[51,151825,25515],{"class":61},[51,151827,151828],{"class":53,"line":2965},[51,151829,206],{"emptyLinePlaceholder":205},[51,151831,151832],{"class":53,"line":2979},[51,151833,206],{"emptyLinePlaceholder":205},[51,151835,151836,151838,151840,151842,151845,151847,151849,151851,151853,151855,151857],{"class":53,"line":2987},[51,151837,149780],{"class":65},[51,151839,70],{"class":69},[51,151841,150184],{"class":65},[51,151843,151844],{"class":61},"\"001\"",[51,151846,12819],{"class":65},[51,151848,150187],{"class":61},[51,151850,12819],{"class":65},[51,151852,1192],{"class":278},[51,151854,12819],{"class":65},[51,151856,1531],{"class":278},[51,151858,282],{"class":65},[51,151860,151861,151863],{"class":53,"line":2992},[51,151862,30794],{"class":278},[51,151864,151865],{"class":65},"(student.is_passed())\n",[51,151867,151868,151870],{"class":53,"line":2998},[51,151869,30794],{"class":278},[51,151871,151872],{"class":65},"(student.to_dict())\n",[10,151874,151875,101390,151878,151881],{},[48,151876,151877],{},"to_dict()",[48,151879,151880],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[486,151883,151885],{"id":151884},"_1116-易错点","11.16 易错点",[19,151887,151888,151894,151900,151905,151908,151911],{},[22,151889,151890,151891,28767],{},"类名推荐使用大驼峰，如 ",[48,151892,151893],{},"StudentManager",[22,151895,151896,151897,151899],{},"方法第一个参数必须写 ",[48,151898,31201],{},"，调用时不用传。",[22,151901,151902,151904],{},[48,151903,31207],{}," 不是普通方法，它在创建对象时自动执行。",[22,151906,151907],{},"私有属性不是绝对安全，只是约定和名称改写。",[22,151909,151910],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[22,151912,151913],{},"类中方法太多时，说明职责可能过重。",[486,151915,151917],{"id":151916},"_1117-本章练习","11.17 本章练习",[19,151919,151920,151926,151932,151937,151950],{},[22,151921,151922,151923,151925],{},"定义 ",[48,151924,149867],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[22,151927,151922,151928,151931],{},[48,151929,151930],{},"Account"," 类，实现存款、取款、查询余额。",[22,151933,151922,151934,151936],{},[48,151935,17609],{}," 类，计算圆的周长和面积。",[22,151938,151922,151939,754,151942,151945,151946,151949],{},[48,151940,151941],{},"Dog",[48,151943,151944],{},"Cat"," 类，并用同一个函数调用它们的 ",[48,151947,151948],{},"speak()"," 方法。",[22,151951,104738,151952,151954,151955,28767],{},[48,151953,151438],{}," 定义一个商品类 ",[48,151956,151957],{},"Product",[464,151959,151960],{},"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":46,"searchDepth":185,"depth":185,"links":151962},[151963,151964,151965,151966,151967,151968,151970,151971,151972,151973,151974,151975,151976,151980,151981,151982,151983],{"id":149631,"depth":185,"text":149632},{"id":149814,"depth":185,"text":149815},{"id":149878,"depth":185,"text":149879},{"id":149955,"depth":185,"text":149956},{"id":150054,"depth":185,"text":150055},{"id":150218,"depth":185,"text":151969},"11.6 str",{"id":150344,"depth":185,"text":150345},{"id":150610,"depth":185,"text":150611},{"id":150724,"depth":185,"text":150725},{"id":150879,"depth":185,"text":150880},{"id":151003,"depth":185,"text":151004},{"id":151119,"depth":185,"text":151120},{"id":151268,"depth":185,"text":151269,"children":151977},[151978,151979],{"id":151272,"depth":202,"text":151273},{"id":151354,"depth":202,"text":151355},{"id":151432,"depth":185,"text":151433},{"id":151547,"depth":185,"text":151548},{"id":151884,"depth":185,"text":151885},{"id":151916,"depth":185,"text":151917},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149623,"description":23760},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151990,"title":151991,"body":151992,"description":23760,"extension":469,"meta":155305,"navigation":205,"path":155306,"seo":155307,"stem":155308,"__hash__":155309},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151993,"toc":155281},[151994,151997,152001,152004,152007,152036,152039,152047,152051,152055,152058,152081,152084,152090,152094,153540,153543,153564,153568,153571,153583,153586,153770,153773,153899,153902,153906,153910,154046,154050,154136,154140,154222,154226,154263,154267,154456,154460,154463,154693,154697,154700,154881,154884,154888,154891,154897,154900,154926,154930,154933,154947,154950,154975,154978,154992,154995,155012,155015,155032,155035,155052,155056,155082,155086,155109,155113,155116,155118,155124,155126,155147,155150,155156,155162,155166,155169,155245,155248,155252,155278],[14,151995,151991],{"id":151996},"_12-综合案例与复习路线",[486,151998,152000],{"id":151999},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[10,152002,152003],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[10,152005,152006],{},"一个合格的入门综合项目最好覆盖：",[19,152008,152009,152012,152015,152018,152021,152024,152027,152030,152033],{},[22,152010,152011],{},"输入输出。",[22,152013,152014],{},"判断和循环。",[22,152016,152017],{},"函数拆分。",[22,152019,152020],{},"列表、字典等容器。",[22,152022,152023],{},"文件持久化。",[22,152025,152026],{},"异常处理。",[22,152028,152029],{},"模块拆分。",[22,152031,152032],{},"可选：面向对象。",[22,152034,152035],{},"可选：数据可视化。",[10,152037,152038],{},"本章整理两个方向：",[19,152040,152041,152044],{},[22,152042,152043],{},"学生管理系统。",[22,152045,152046],{},"销售数据统计和可视化。",[486,152048,152050],{"id":152049},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[513,152052,152054],{"id":152053},"_1221-需求","12.2.1 需求",[10,152056,152057],{},"实现一个命令行学生管理系统：",[19,152059,152060,152063,152066,152069,152072,152075,152078],{},[22,152061,152062],{},"添加学生。",[22,152064,152065],{},"删除学生。",[22,152067,152068],{},"修改学生。",[22,152070,152071],{},"查询学生。",[22,152073,152074],{},"显示所有学生。",[22,152076,152077],{},"保存到 JSON 文件。",[22,152079,152080],{},"程序启动时自动读取 JSON 文件。",[10,152082,152083],{},"学生字段：",[41,152085,152088],{"className":152086,"code":152087,"language":5572,"meta":46},[5570],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[48,152089,152087],{"__ignoreMap":46},[486,152091,152093],{"id":152092},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[41,152095,152097],{"className":170,"code":152096,"language":172,"meta":46,"style":46},"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",[48,152098,152099,152105,152115,152119,152133,152137,152141,152150,152162,152168,152172,152178,152209,152219,152226,152237,152243,152247,152251,152261,152292,152318,152322,152326,152335,152346,152357,152368,152379,152390,152401,152412,152416,152420,152430,152442,152458,152465,152472,152476,152480,152490,152498,152505,152518,152528,152539,152543,152547,152556,152564,152570,152582,152590,152601,152605,152609,152618,152634,152638,152645,152656,152661,152665,152681,152696,152711,152715,152720,152728,152736,152744,152752,152756,152761,152772,152776,152780,152789,152804,152814,152818,152830,152841,152845,152849,152854,152858,152869,152873,152877,152886,152901,152909,152913,152925,152935,152939,152943,152958,152971,152984,152988,153001,153013,153025,153029,153033,153044,153048,153052,153061,153076,153084,153088,153100,153110,153114,153118,153123,153127,153131,153141,153147,153169,153188,153207,153226,153231,153235,153239,153248,153256,153267,153271,153275,153301,153311,153316,153320,153324,153332,153342,153346,153354,153359,153375,153379,153393,153398,153412,153417,153430,153435,153448,153453,153466,153471,153484,153495,153499,153505,153516,153520,153524,153536],{"__ignoreMap":46},[51,152100,152101,152103],{"class":53,"line":54},[51,152102,179],{"class":69},[51,152104,147390],{"class":65},[51,152106,152107,152109,152111,152113],{"class":53,"line":185},[51,152108,226],{"class":69},[51,152110,108683],{"class":65},[51,152112,179],{"class":69},[51,152114,108688],{"class":65},[51,152116,152117],{"class":53,"line":202},[51,152118,206],{"emptyLinePlaceholder":205},[51,152120,152121,152124,152126,152128,152131],{"class":53,"line":209},[51,152122,152123],{"class":278},"DATA_FILE",[51,152125,13948],{"class":69},[51,152127,108917],{"class":65},[51,152129,152130],{"class":61},"\"students.json\"",[51,152132,282],{"class":65},[51,152134,152135],{"class":53,"line":223},[51,152136,206],{"emptyLinePlaceholder":205},[51,152138,152139],{"class":53,"line":237},[51,152140,206],{"emptyLinePlaceholder":205},[51,152142,152143,152145,152148],{"class":53,"line":242},[51,152144,348],{"class":69},[51,152146,152147],{"class":57}," load_students",[51,152149,32328],{"class":65},[51,152151,152152,152154,152156,152159],{"class":53,"line":257},[51,152153,3488],{"class":69},[51,152155,39304],{"class":69},[51,152157,152158],{"class":278}," DATA_FILE",[51,152160,152161],{"class":65},".exists():\n",[51,152163,152164,152166],{"class":53,"line":262},[51,152165,15136],{"class":69},[51,152167,52210],{"class":65},[51,152169,152170],{"class":53,"line":285},[51,152171,206],{"emptyLinePlaceholder":205},[51,152173,152174,152176],{"class":53,"line":296},[51,152175,360],{"class":69},[51,152177,363],{"class":65},[51,152179,152180,152183,152185,152187,152189,152191,152193,152195,152197,152199,152201,152203,152205,152207],{"class":53,"line":307},[51,152181,152182],{"class":69},"        with",[51,152184,147090],{"class":278},[51,152186,546],{"class":65},[51,152188,152123],{"class":278},[51,152190,12819],{"class":65},[51,152192,147100],{"class":61},[51,152194,12819],{"class":65},[51,152196,147105],{"class":248},[51,152198,70],{"class":69},[51,152200,147110],{"class":61},[51,152202,14098],{"class":65},[51,152204,217],{"class":69},[51,152206,148452],{"class":248},[51,152208,363],{"class":65},[51,152210,152211,152213,152215,152217],{"class":53,"line":324},[51,152212,386],{"class":69},[51,152214,148463],{"class":65},[51,152216,313],{"class":248},[51,152218,282],{"class":65},[51,152220,152221,152223],{"class":53,"line":329},[51,152222,395],{"class":69},[51,152224,152225],{"class":65}," json.JSONDecodeError:\n",[51,152227,152228,152230,152232,152235],{"class":53,"line":334},[51,152229,32826],{"class":278},[51,152231,546],{"class":65},[51,152233,152234],{"class":61},"\"数据文件格式错误，已使用空数据启动\"",[51,152236,282],{"class":65},[51,152238,152239,152241],{"class":53,"line":340},[51,152240,15136],{"class":69},[51,152242,52210],{"class":65},[51,152244,152245],{"class":53,"line":345},[51,152246,206],{"emptyLinePlaceholder":205},[51,152248,152249],{"class":53,"line":357},[51,152250,206],{"emptyLinePlaceholder":205},[51,152252,152253,152255,152258],{"class":53,"line":366},[51,152254,348],{"class":69},[51,152256,152257],{"class":57}," save_students",[51,152259,152260],{"class":65},"(students):\n",[51,152262,152263,152265,152267,152269,152271,152273,152276,152278,152280,152282,152284,152286,152288,152290],{"class":53,"line":383},[51,152264,34553],{"class":69},[51,152266,147090],{"class":278},[51,152268,546],{"class":65},[51,152270,152123],{"class":278},[51,152272,12819],{"class":65},[51,152274,152275],{"class":61},"\"w\"",[51,152277,12819],{"class":65},[51,152279,147105],{"class":248},[51,152281,70],{"class":69},[51,152283,147110],{"class":61},[51,152285,14098],{"class":65},[51,152287,217],{"class":69},[51,152289,148452],{"class":248},[51,152291,363],{"class":65},[51,152293,152294,152297,152299,152301,152303,152305,152307,152309,152312,152314,152316],{"class":53,"line":392},[51,152295,152296],{"class":65},"        json.dump(students, ",[51,152298,313],{"class":248},[51,152300,12819],{"class":65},[51,152302,147436],{"class":248},[51,152304,70],{"class":69},[51,152306,34362],{"class":278},[51,152308,12819],{"class":65},[51,152310,152311],{"class":248},"indent",[51,152313,70],{"class":69},[51,152315,620],{"class":278},[51,152317,282],{"class":65},[51,152319,152320],{"class":53,"line":403},[51,152321,206],{"emptyLinePlaceholder":205},[51,152323,152324],{"class":53,"line":409},[51,152325,206],{"emptyLinePlaceholder":205},[51,152327,152328,152330,152333],{"class":53,"line":414},[51,152329,348],{"class":69},[51,152331,152332],{"class":57}," show_menu",[51,152334,32328],{"class":65},[51,152336,152337,152339,152341,152344],{"class":53,"line":433},[51,152338,31677],{"class":278},[51,152340,546],{"class":65},[51,152342,152343],{"class":61},"\"====== 学生管理系统 ======\"",[51,152345,282],{"class":65},[51,152347,152348,152350,152352,152355],{"class":53,"line":439},[51,152349,31677],{"class":278},[51,152351,546],{"class":65},[51,152353,152354],{"class":61},"\"1. 添加学生\"",[51,152356,282],{"class":65},[51,152358,152359,152361,152363,152366],{"class":53,"line":444},[51,152360,31677],{"class":278},[51,152362,546],{"class":65},[51,152364,152365],{"class":61},"\"2. 删除学生\"",[51,152367,282],{"class":65},[51,152369,152370,152372,152374,152377],{"class":53,"line":453},[51,152371,31677],{"class":278},[51,152373,546],{"class":65},[51,152375,152376],{"class":61},"\"3. 修改学生\"",[51,152378,282],{"class":65},[51,152380,152381,152383,152385,152388],{"class":53,"line":2174},[51,152382,31677],{"class":278},[51,152384,546],{"class":65},[51,152386,152387],{"class":61},"\"4. 查询学生\"",[51,152389,282],{"class":65},[51,152391,152392,152394,152396,152399],{"class":53,"line":2965},[51,152393,31677],{"class":278},[51,152395,546],{"class":65},[51,152397,152398],{"class":61},"\"5. 显示所有学生\"",[51,152400,282],{"class":65},[51,152402,152403,152405,152407,152410],{"class":53,"line":2979},[51,152404,31677],{"class":278},[51,152406,546],{"class":65},[51,152408,152409],{"class":61},"\"0. 退出系统\"",[51,152411,282],{"class":65},[51,152413,152414],{"class":53,"line":2987},[51,152415,206],{"emptyLinePlaceholder":205},[51,152417,152418],{"class":53,"line":2992},[51,152419,206],{"emptyLinePlaceholder":205},[51,152421,152422,152424,152427],{"class":53,"line":2998},[51,152423,348],{"class":69},[51,152425,152426],{"class":57}," find_student",[51,152428,152429],{"class":65},"(students, student_id):\n",[51,152431,152432,152434,152437,152439],{"class":53,"line":3004},[51,152433,3588],{"class":69},[51,152435,152436],{"class":65}," student ",[51,152438,26425],{"class":69},[51,152440,152441],{"class":65}," students:\n",[51,152443,152444,152446,152449,152451,152453,152455],{"class":53,"line":3009},[51,152445,369],{"class":69},[51,152447,152448],{"class":65}," student[",[51,152450,151746],{"class":61},[51,152452,194],{"class":65},[51,152454,375],{"class":69},[51,152456,152457],{"class":65}," student_id:\n",[51,152459,152460,152462],{"class":53,"line":8332},[51,152461,386],{"class":69},[51,152463,152464],{"class":65}," student\n",[51,152466,152467,152469],{"class":53,"line":8356},[51,152468,4476],{"class":69},[51,152470,152471],{"class":278}," None\n",[51,152473,152474],{"class":53,"line":8361},[51,152475,206],{"emptyLinePlaceholder":205},[51,152477,152478],{"class":53,"line":8367},[51,152479,206],{"emptyLinePlaceholder":205},[51,152481,152482,152484,152487],{"class":53,"line":8394},[51,152483,348],{"class":69},[51,152485,152486],{"class":57}," input_int",[51,152488,152489],{"class":65},"(prompt):\n",[51,152491,152492,152494,152496],{"class":53,"line":8399},[51,152493,2641],{"class":69},[51,152495,95664],{"class":278},[51,152497,363],{"class":65},[51,152499,152500,152503],{"class":53,"line":8405},[51,152501,152502],{"class":69},"        try",[51,152504,363],{"class":65},[51,152506,152507,152509,152511,152513,152515],{"class":53,"line":8417},[51,152508,386],{"class":69},[51,152510,2772],{"class":278},[51,152512,546],{"class":65},[51,152514,54193],{"class":278},[51,152516,152517],{"class":65},"(prompt))\n",[51,152519,152520,152523,152526],{"class":53,"line":8429},[51,152521,152522],{"class":69},"        except",[51,152524,152525],{"class":278}," ValueError",[51,152527,363],{"class":65},[51,152529,152530,152532,152534,152537],{"class":53,"line":8441},[51,152531,35025],{"class":278},[51,152533,546],{"class":65},[51,152535,152536],{"class":61},"\"请输入整数\"",[51,152538,282],{"class":65},[51,152540,152541],{"class":53,"line":10100},[51,152542,206],{"emptyLinePlaceholder":205},[51,152544,152545],{"class":53,"line":10125},[51,152546,206],{"emptyLinePlaceholder":205},[51,152548,152549,152551,152554],{"class":53,"line":10148},[51,152550,348],{"class":69},[51,152552,152553],{"class":57}," input_float",[51,152555,152489],{"class":65},[51,152557,152558,152560,152562],{"class":53,"line":10172},[51,152559,2641],{"class":69},[51,152561,95664],{"class":278},[51,152563,363],{"class":65},[51,152565,152566,152568],{"class":53,"line":10177},[51,152567,152502],{"class":69},[51,152569,363],{"class":65},[51,152571,152572,152574,152576,152578,152580],{"class":53,"line":10182},[51,152573,386],{"class":69},[51,152575,110168],{"class":278},[51,152577,546],{"class":65},[51,152579,54193],{"class":278},[51,152581,152517],{"class":65},[51,152583,152584,152586,152588],{"class":53,"line":10187},[51,152585,152522],{"class":69},[51,152587,152525],{"class":278},[51,152589,363],{"class":65},[51,152591,152592,152594,152596,152599],{"class":53,"line":10196},[51,152593,35025],{"class":278},[51,152595,546],{"class":65},[51,152597,152598],{"class":61},"\"请输入数字\"",[51,152600,282],{"class":65},[51,152602,152603],{"class":53,"line":10201},[51,152604,206],{"emptyLinePlaceholder":205},[51,152606,152607],{"class":53,"line":10207},[51,152608,206],{"emptyLinePlaceholder":205},[51,152610,152611,152613,152616],{"class":53,"line":10228},[51,152612,348],{"class":69},[51,152614,152615],{"class":57}," add_student",[51,152617,152260],{"class":65},[51,152619,152620,152623,152625,152627,152629,152632],{"class":53,"line":10234},[51,152621,152622],{"class":65},"    student_id ",[51,152624,70],{"class":69},[51,152626,60977],{"class":278},[51,152628,546],{"class":65},[51,152630,152631],{"class":61},"\"请输入学号:\"",[51,152633,282],{"class":65},[51,152635,152636],{"class":53,"line":10248},[51,152637,206],{"emptyLinePlaceholder":205},[51,152639,152640,152642],{"class":53,"line":10254},[51,152641,3488],{"class":69},[51,152643,152644],{"class":65}," find_student(students, student_id):\n",[51,152646,152647,152649,152651,152654],{"class":53,"line":10281},[51,152648,32826],{"class":278},[51,152650,546],{"class":65},[51,152652,152653],{"class":61},"\"学号已存在\"",[51,152655,282],{"class":65},[51,152657,152658],{"class":53,"line":10290},[51,152659,152660],{"class":69},"        return\n",[51,152662,152663],{"class":53,"line":10296},[51,152664,206],{"emptyLinePlaceholder":205},[51,152666,152667,152670,152672,152674,152676,152679],{"class":53,"line":10304},[51,152668,152669],{"class":65},"    name ",[51,152671,70],{"class":69},[51,152673,60977],{"class":278},[51,152675,546],{"class":65},[51,152677,152678],{"class":61},"\"请输入姓名:\"",[51,152680,282],{"class":65},[51,152682,152683,152686,152688,152691,152694],{"class":53,"line":10309},[51,152684,152685],{"class":65},"    age ",[51,152687,70],{"class":69},[51,152689,152690],{"class":65}," input_int(",[51,152692,152693],{"class":61},"\"请输入年龄:\"",[51,152695,282],{"class":65},[51,152697,152698,152701,152703,152706,152709],{"class":53,"line":16987},[51,152699,152700],{"class":65},"    score ",[51,152702,70],{"class":69},[51,152704,152705],{"class":65}," input_float(",[51,152707,152708],{"class":61},"\"请输入成绩:\"",[51,152710,282],{"class":65},[51,152712,152713],{"class":53,"line":16993},[51,152714,206],{"emptyLinePlaceholder":205},[51,152716,152717],{"class":53,"line":17016},[51,152718,152719],{"class":65},"    students.append({\n",[51,152721,152722,152725],{"class":53,"line":17022},[51,152723,152724],{"class":61},"        \"student_id\"",[51,152726,152727],{"class":65},": student_id,\n",[51,152729,152730,152733],{"class":53,"line":17045},[51,152731,152732],{"class":61},"        \"name\"",[51,152734,152735],{"class":65},": name,\n",[51,152737,152738,152741],{"class":53,"line":17059},[51,152739,152740],{"class":61},"        \"age\"",[51,152742,152743],{"class":65},": age,\n",[51,152745,152746,152749],{"class":53,"line":17079},[51,152747,152748],{"class":61},"        \"score\"",[51,152750,152751],{"class":65},": score,\n",[51,152753,152754],{"class":53,"line":17085},[51,152755,33836],{"class":65},[51,152757,152758],{"class":53,"line":17096},[51,152759,152760],{"class":65},"    save_students(students)\n",[51,152762,152763,152765,152767,152770],{"class":53,"line":17119},[51,152764,31677],{"class":278},[51,152766,546],{"class":65},[51,152768,152769],{"class":61},"\"添加成功\"",[51,152771,282],{"class":65},[51,152773,152774],{"class":53,"line":17141},[51,152775,206],{"emptyLinePlaceholder":205},[51,152777,152778],{"class":53,"line":17146},[51,152779,206],{"emptyLinePlaceholder":205},[51,152781,152782,152784,152787],{"class":53,"line":17152},[51,152783,348],{"class":69},[51,152785,152786],{"class":57}," delete_student",[51,152788,152260],{"class":65},[51,152790,152791,152793,152795,152797,152799,152802],{"class":53,"line":17166},[51,152792,152622],{"class":65},[51,152794,70],{"class":69},[51,152796,60977],{"class":278},[51,152798,546],{"class":65},[51,152800,152801],{"class":61},"\"请输入要删除的学号:\"",[51,152803,282],{"class":65},[51,152805,152806,152809,152811],{"class":53,"line":17179},[51,152807,152808],{"class":65},"    student ",[51,152810,70],{"class":69},[51,152812,152813],{"class":65}," find_student(students, student_id)\n",[51,152815,152816],{"class":53,"line":17184},[51,152817,206],{"emptyLinePlaceholder":205},[51,152819,152820,152822,152824,152826,152828],{"class":53,"line":17198},[51,152821,3488],{"class":69},[51,152823,152436],{"class":65},[51,152825,39301],{"class":69},[51,152827,39307],{"class":278},[51,152829,363],{"class":65},[51,152831,152832,152834,152836,152839],{"class":53,"line":17203},[51,152833,32826],{"class":278},[51,152835,546],{"class":65},[51,152837,152838],{"class":61},"\"学生不存在\"",[51,152840,282],{"class":65},[51,152842,152843],{"class":53,"line":17209},[51,152844,152660],{"class":69},[51,152846,152847],{"class":53,"line":17214},[51,152848,206],{"emptyLinePlaceholder":205},[51,152850,152851],{"class":53,"line":17228},[51,152852,152853],{"class":65},"    students.remove(student)\n",[51,152855,152856],{"class":53,"line":17233},[51,152857,152760],{"class":65},[51,152859,152860,152862,152864,152867],{"class":53,"line":17238},[51,152861,31677],{"class":278},[51,152863,546],{"class":65},[51,152865,152866],{"class":61},"\"删除成功\"",[51,152868,282],{"class":65},[51,152870,152871],{"class":53,"line":17252},[51,152872,206],{"emptyLinePlaceholder":205},[51,152874,152875],{"class":53,"line":17264},[51,152876,206],{"emptyLinePlaceholder":205},[51,152878,152879,152881,152884],{"class":53,"line":17269},[51,152880,348],{"class":69},[51,152882,152883],{"class":57}," update_student",[51,152885,152260],{"class":65},[51,152887,152888,152890,152892,152894,152896,152899],{"class":53,"line":17282},[51,152889,152622],{"class":65},[51,152891,70],{"class":69},[51,152893,60977],{"class":278},[51,152895,546],{"class":65},[51,152897,152898],{"class":61},"\"请输入要修改的学号:\"",[51,152900,282],{"class":65},[51,152902,152903,152905,152907],{"class":53,"line":17287},[51,152904,152808],{"class":65},[51,152906,70],{"class":69},[51,152908,152813],{"class":65},[51,152910,152911],{"class":53,"line":17292},[51,152912,206],{"emptyLinePlaceholder":205},[51,152914,152915,152917,152919,152921,152923],{"class":53,"line":17297},[51,152916,3488],{"class":69},[51,152918,152436],{"class":65},[51,152920,39301],{"class":69},[51,152922,39307],{"class":278},[51,152924,363],{"class":65},[51,152926,152927,152929,152931,152933],{"class":53,"line":17310},[51,152928,32826],{"class":278},[51,152930,546],{"class":65},[51,152932,152838],{"class":61},[51,152934,282],{"class":65},[51,152936,152937],{"class":53,"line":17315},[51,152938,152660],{"class":69},[51,152940,152941],{"class":53,"line":33008},[51,152942,206],{"emptyLinePlaceholder":205},[51,152944,152945,152947,152949,152951,152953,152956],{"class":53,"line":33014},[51,152946,152669],{"class":65},[51,152948,70],{"class":69},[51,152950,60977],{"class":278},[51,152952,546],{"class":65},[51,152954,152955],{"class":61},"\"请输入新姓名:\"",[51,152957,282],{"class":65},[51,152959,152960,152962,152964,152966,152969],{"class":53,"line":33020},[51,152961,152685],{"class":65},[51,152963,70],{"class":69},[51,152965,152690],{"class":65},[51,152967,152968],{"class":61},"\"请输入新年龄:\"",[51,152970,282],{"class":65},[51,152972,152973,152975,152977,152979,152982],{"class":53,"line":33026},[51,152974,152700],{"class":65},[51,152976,70],{"class":69},[51,152978,152705],{"class":65},[51,152980,152981],{"class":61},"\"请输入新成绩:\"",[51,152983,282],{"class":65},[51,152985,152986],{"class":53,"line":33032},[51,152987,206],{"emptyLinePlaceholder":205},[51,152989,152990,152993,152995,152997,152999],{"class":53,"line":33043},[51,152991,152992],{"class":65},"    student[",[51,152994,63051],{"class":61},[51,152996,194],{"class":65},[51,152998,70],{"class":69},[51,153000,150094],{"class":65},[51,153002,153003,153005,153007,153009,153011],{"class":53,"line":33049},[51,153004,152992],{"class":65},[51,153006,69496],{"class":61},[51,153008,194],{"class":65},[51,153010,70],{"class":69},[51,153012,150106],{"class":65},[51,153014,153015,153017,153019,153021,153023],{"class":53,"line":33069},[51,153016,152992],{"class":65},[51,153018,151771],{"class":61},[51,153020,194],{"class":65},[51,153022,70],{"class":69},[51,153024,1988],{"class":65},[51,153026,153027],{"class":53,"line":33075},[51,153028,206],{"emptyLinePlaceholder":205},[51,153030,153031],{"class":53,"line":33086},[51,153032,152760],{"class":65},[51,153034,153035,153037,153039,153042],{"class":53,"line":33092},[51,153036,31677],{"class":278},[51,153038,546],{"class":65},[51,153040,153041],{"class":61},"\"修改成功\"",[51,153043,282],{"class":65},[51,153045,153046],{"class":53,"line":33098},[51,153047,206],{"emptyLinePlaceholder":205},[51,153049,153050],{"class":53,"line":33104},[51,153051,206],{"emptyLinePlaceholder":205},[51,153053,153054,153056,153059],{"class":53,"line":33110},[51,153055,348],{"class":69},[51,153057,153058],{"class":57}," query_student",[51,153060,152260],{"class":65},[51,153062,153063,153065,153067,153069,153071,153074],{"class":53,"line":33116},[51,153064,152622],{"class":65},[51,153066,70],{"class":69},[51,153068,60977],{"class":278},[51,153070,546],{"class":65},[51,153072,153073],{"class":61},"\"请输入要查询的学号:\"",[51,153075,282],{"class":65},[51,153077,153078,153080,153082],{"class":53,"line":33122},[51,153079,152808],{"class":65},[51,153081,70],{"class":69},[51,153083,152813],{"class":65},[51,153085,153086],{"class":53,"line":33128},[51,153087,206],{"emptyLinePlaceholder":205},[51,153089,153090,153092,153094,153096,153098],{"class":53,"line":33148},[51,153091,3488],{"class":69},[51,153093,152436],{"class":65},[51,153095,39301],{"class":69},[51,153097,39307],{"class":278},[51,153099,363],{"class":65},[51,153101,153102,153104,153106,153108],{"class":53,"line":33154},[51,153103,32826],{"class":278},[51,153105,546],{"class":65},[51,153107,152838],{"class":61},[51,153109,282],{"class":65},[51,153111,153112],{"class":53,"line":33170},[51,153113,152660],{"class":69},[51,153115,153116],{"class":53,"line":33176},[51,153117,206],{"emptyLinePlaceholder":205},[51,153119,153120],{"class":53,"line":33190},[51,153121,153122],{"class":65},"    print_student(student)\n",[51,153124,153125],{"class":53,"line":33196},[51,153126,206],{"emptyLinePlaceholder":205},[51,153128,153129],{"class":53,"line":33211},[51,153130,206],{"emptyLinePlaceholder":205},[51,153132,153133,153135,153138],{"class":53,"line":33217},[51,153134,348],{"class":69},[51,153136,153137],{"class":57}," print_student",[51,153139,153140],{"class":65},"(student):\n",[51,153142,153143,153145],{"class":53,"line":33226},[51,153144,31677],{"class":278},[51,153146,151738],{"class":65},[51,153148,153149,153152,153154,153156,153159,153162,153164,153167],{"class":53,"line":33232},[51,153150,153151],{"class":69},"        f",[51,153153,793],{"class":61},[51,153155,1438],{"class":278},[51,153157,153158],{"class":65},"student[",[51,153160,153161],{"class":61},"'student_id'",[51,153163,1482],{"class":65},[51,153165,153166],{"class":278},"}\\t",[51,153168,25515],{"class":61},[51,153170,153171,153173,153175,153177,153179,153182,153184,153186],{"class":53,"line":33241},[51,153172,153151],{"class":69},[51,153174,793],{"class":61},[51,153176,1438],{"class":278},[51,153178,153158],{"class":65},[51,153180,153181],{"class":61},"'name'",[51,153183,1482],{"class":65},[51,153185,153166],{"class":278},[51,153187,25515],{"class":61},[51,153189,153190,153192,153194,153196,153198,153201,153203,153205],{"class":53,"line":33247},[51,153191,153151],{"class":69},[51,153193,793],{"class":61},[51,153195,1438],{"class":278},[51,153197,153158],{"class":65},[51,153199,153200],{"class":61},"'age'",[51,153202,1482],{"class":65},[51,153204,153166],{"class":278},[51,153206,25515],{"class":61},[51,153208,153209,153211,153213,153215,153217,153220,153222,153224],{"class":53,"line":33253},[51,153210,153151],{"class":69},[51,153212,793],{"class":61},[51,153214,1438],{"class":278},[51,153216,153158],{"class":65},[51,153218,153219],{"class":61},"'score'",[51,153221,1482],{"class":65},[51,153223,1488],{"class":278},[51,153225,25515],{"class":61},[51,153227,153228],{"class":53,"line":33262},[51,153229,153230],{"class":65},"    )\n",[51,153232,153233],{"class":53,"line":33268},[51,153234,206],{"emptyLinePlaceholder":205},[51,153236,153237],{"class":53,"line":33279},[51,153238,206],{"emptyLinePlaceholder":205},[51,153240,153241,153243,153246],{"class":53,"line":33285},[51,153242,348],{"class":69},[51,153244,153245],{"class":57}," show_all_students",[51,153247,152260],{"class":65},[51,153249,153250,153252,153254],{"class":53,"line":33304},[51,153251,3488],{"class":69},[51,153253,39304],{"class":69},[51,153255,152441],{"class":65},[51,153257,153258,153260,153262,153265],{"class":53,"line":33310},[51,153259,32826],{"class":278},[51,153261,546],{"class":65},[51,153263,153264],{"class":61},"\"暂无学生\"",[51,153266,282],{"class":65},[51,153268,153269],{"class":53,"line":33321},[51,153270,152660],{"class":69},[51,153272,153273],{"class":53,"line":33327},[51,153274,206],{"emptyLinePlaceholder":205},[51,153276,153277,153279,153281,153284,153286,153289,153291,153294,153296,153299],{"class":53,"line":33347},[51,153278,31677],{"class":278},[51,153280,546],{"class":65},[51,153282,153283],{"class":61},"\"学号",[51,153285,1643],{"class":278},[51,153287,153288],{"class":61},"姓名",[51,153290,1643],{"class":278},[51,153292,153293],{"class":61},"年龄",[51,153295,1643],{"class":278},[51,153297,153298],{"class":61},"成绩\"",[51,153300,282],{"class":65},[51,153302,153303,153305,153307,153309],{"class":53,"line":33363},[51,153304,3588],{"class":69},[51,153306,152436],{"class":65},[51,153308,26425],{"class":69},[51,153310,152441],{"class":65},[51,153312,153313],{"class":53,"line":33369},[51,153314,153315],{"class":65},"        print_student(student)\n",[51,153317,153318],{"class":53,"line":33383},[51,153319,206],{"emptyLinePlaceholder":205},[51,153321,153322],{"class":53,"line":33389},[51,153323,206],{"emptyLinePlaceholder":205},[51,153325,153326,153328,153330],{"class":53,"line":33395},[51,153327,348],{"class":69},[51,153329,2363],{"class":57},[51,153331,32328],{"class":65},[51,153333,153334,153337,153339],{"class":53,"line":33406},[51,153335,153336],{"class":65},"    students ",[51,153338,70],{"class":69},[51,153340,153341],{"class":65}," load_students()\n",[51,153343,153344],{"class":53,"line":33412},[51,153345,206],{"emptyLinePlaceholder":205},[51,153347,153348,153350,153352],{"class":53,"line":33418},[51,153349,2641],{"class":69},[51,153351,95664],{"class":278},[51,153353,363],{"class":65},[51,153355,153356],{"class":53,"line":33428},[51,153357,153358],{"class":65},"        show_menu()\n",[51,153360,153361,153364,153366,153368,153370,153373],{"class":53,"line":33434},[51,153362,153363],{"class":65},"        choice ",[51,153365,70],{"class":69},[51,153367,60977],{"class":278},[51,153369,546],{"class":65},[51,153371,153372],{"class":61},"\"请输入操作:\"",[51,153374,282],{"class":65},[51,153376,153377],{"class":53,"line":33445},[51,153378,206],{"emptyLinePlaceholder":205},[51,153380,153381,153383,153386,153388,153391],{"class":53,"line":33451},[51,153382,369],{"class":69},[51,153384,153385],{"class":65}," choice ",[51,153387,375],{"class":69},[51,153389,153390],{"class":61}," \"1\"",[51,153392,363],{"class":65},[51,153394,153395],{"class":53,"line":33461},[51,153396,153397],{"class":65},"            add_student(students)\n",[51,153399,153400,153403,153405,153407,153410],{"class":53,"line":33466},[51,153401,153402],{"class":69},"        elif",[51,153404,153385],{"class":65},[51,153406,375],{"class":69},[51,153408,153409],{"class":61}," \"2\"",[51,153411,363],{"class":65},[51,153413,153414],{"class":53,"line":33472},[51,153415,153416],{"class":65},"            delete_student(students)\n",[51,153418,153419,153421,153423,153425,153428],{"class":53,"line":33521},[51,153420,153402],{"class":69},[51,153422,153385],{"class":65},[51,153424,375],{"class":69},[51,153426,153427],{"class":61}," \"3\"",[51,153429,363],{"class":65},[51,153431,153432],{"class":53,"line":33568},[51,153433,153434],{"class":65},"            update_student(students)\n",[51,153436,153437,153439,153441,153443,153446],{"class":53,"line":33573},[51,153438,153402],{"class":69},[51,153440,153385],{"class":65},[51,153442,375],{"class":69},[51,153444,153445],{"class":61}," \"4\"",[51,153447,363],{"class":65},[51,153449,153450],{"class":53,"line":33579},[51,153451,153452],{"class":65},"            query_student(students)\n",[51,153454,153455,153457,153459,153461,153464],{"class":53,"line":33598},[51,153456,153402],{"class":69},[51,153458,153385],{"class":65},[51,153460,375],{"class":69},[51,153462,153463],{"class":61}," \"5\"",[51,153465,363],{"class":65},[51,153467,153468],{"class":53,"line":33604},[51,153469,153470],{"class":65},"            show_all_students(students)\n",[51,153472,153473,153475,153477,153479,153482],{"class":53,"line":33624},[51,153474,153402],{"class":69},[51,153476,153385],{"class":65},[51,153478,375],{"class":69},[51,153480,153481],{"class":61}," \"0\"",[51,153483,363],{"class":65},[51,153485,153486,153488,153490,153493],{"class":53,"line":33630},[51,153487,35025],{"class":278},[51,153489,546],{"class":65},[51,153491,153492],{"class":61},"\"退出系统\"",[51,153494,282],{"class":65},[51,153496,153497],{"class":53,"line":33636},[51,153498,115469],{"class":69},[51,153500,153501,153503],{"class":53,"line":33646},[51,153502,2922],{"class":69},[51,153504,363],{"class":65},[51,153506,153507,153509,153511,153514],{"class":53,"line":33651},[51,153508,35025],{"class":278},[51,153510,546],{"class":65},[51,153512,153513],{"class":61},"\"输入错误\"",[51,153515,282],{"class":65},[51,153517,153518],{"class":53,"line":33657},[51,153519,206],{"emptyLinePlaceholder":205},[51,153521,153522],{"class":53,"line":33673},[51,153523,206],{"emptyLinePlaceholder":205},[51,153525,153526,153528,153530,153532,153534],{"class":53,"line":33718},[51,153527,1940],{"class":69},[51,153529,31598],{"class":278},[51,153531,101931],{"class":69},[51,153533,101934],{"class":61},[51,153535,363],{"class":65},[51,153537,153538],{"class":53,"line":33724},[51,153539,101941],{"class":65},[10,153541,153542],{},"这个项目串联了：",[19,153544,153545,153548,153551,153554,153557,153559],{},[22,153546,153547],{},"菜单循环。",[22,153549,153550],{},"函数封装。",[22,153552,153553],{},"列表字典。",[22,153555,153556],{},"JSON 读写。",[22,153558,152026],{},[22,153560,153561,28767],{},[48,153562,153563],{},"if __name__ == \"__main__\"",[486,153565,153567],{"id":153566},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[10,153569,153570],{},"可以进一步拆成两个类：",[19,153572,153573,153578],{},[22,153574,153575,153577],{},[48,153576,149867],{},"：表示单个学生。",[22,153579,153580,153582],{},[48,153581,151893],{},"：负责学生增删改查和文件保存。",[10,153584,153585],{},"示意代码：",[41,153587,153589],{"className":170,"code":153588,"language":172,"meta":46,"style":46},"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",[48,153590,153591,153601,153605,153609,153613,153621,153628,153634,153640,153646,153650,153658,153664,153674,153684,153694,153704,153708,153712,153718,153726,153734,153742,153750,153758,153766],{"__ignoreMap":46},[51,153592,153593,153595,153597,153599],{"class":53,"line":54},[51,153594,226],{"class":69},[51,153596,151451],{"class":65},[51,153598,179],{"class":69},[51,153600,151456],{"class":65},[51,153602,153603],{"class":53,"line":185},[51,153604,206],{"emptyLinePlaceholder":205},[51,153606,153607],{"class":53,"line":202},[51,153608,206],{"emptyLinePlaceholder":205},[51,153610,153611],{"class":53,"line":209},[51,153612,151469],{"class":57},[51,153614,153615,153617,153619],{"class":53,"line":223},[51,153616,15078],{"class":69},[51,153618,8282],{"class":57},[51,153620,363],{"class":65},[51,153622,153623,153626],{"class":53,"line":237},[51,153624,153625],{"class":65},"    student_id: ",[51,153627,151485],{"class":278},[51,153629,153630,153632],{"class":53,"line":242},[51,153631,151482],{"class":65},[51,153633,151485],{"class":278},[51,153635,153636,153638],{"class":53,"line":257},[51,153637,151490],{"class":65},[51,153639,151493],{"class":278},[51,153641,153642,153644],{"class":53,"line":262},[51,153643,151498],{"class":65},[51,153645,151501],{"class":278},[51,153647,153648],{"class":53,"line":285},[51,153649,206],{"emptyLinePlaceholder":205},[51,153651,153652,153654,153656],{"class":53,"line":296},[51,153653,31179],{"class":69},[51,153655,151649],{"class":57},[51,153657,31185],{"class":65},[51,153659,153660,153662],{"class":53,"line":307},[51,153661,15136],{"class":69},[51,153663,15956],{"class":65},[51,153665,153666,153668,153670,153672],{"class":53,"line":324},[51,153667,151662],{"class":61},[51,153669,51809],{"class":65},[51,153671,31201],{"class":278},[51,153673,151669],{"class":65},[51,153675,153676,153678,153680,153682],{"class":53,"line":329},[51,153677,151674],{"class":61},[51,153679,51809],{"class":65},[51,153681,31201],{"class":278},[51,153683,151681],{"class":65},[51,153685,153686,153688,153690,153692],{"class":53,"line":334},[51,153687,151686],{"class":61},[51,153689,51809],{"class":65},[51,153691,31201],{"class":278},[51,153693,151693],{"class":65},[51,153695,153696,153698,153700,153702],{"class":53,"line":340},[51,153697,151698],{"class":61},[51,153699,51809],{"class":65},[51,153701,31201],{"class":278},[51,153703,151705],{"class":65},[51,153705,153706],{"class":53,"line":345},[51,153707,2917],{"class":65},[51,153709,153710],{"class":53,"line":357},[51,153711,206],{"emptyLinePlaceholder":205},[51,153713,153714,153716],{"class":53,"line":366},[51,153715,151313],{"class":57},[51,153717,151316],{"class":278},[51,153719,153720,153722,153724],{"class":53,"line":383},[51,153721,31179],{"class":69},[51,153723,151726],{"class":57},[51,153725,151729],{"class":65},[51,153727,153728,153730,153732],{"class":53,"line":392},[51,153729,15136],{"class":69},[51,153731,151333],{"class":278},[51,153733,151738],{"class":65},[51,153735,153736,153738,153740],{"class":53,"line":403},[51,153737,151743],{"class":65},[51,153739,151746],{"class":61},[51,153741,88208],{"class":65},[51,153743,153744,153746,153748],{"class":53,"line":409},[51,153745,151743],{"class":65},[51,153747,63051],{"class":61},[51,153749,88208],{"class":65},[51,153751,153752,153754,153756],{"class":53,"line":414},[51,153753,151743],{"class":65},[51,153755,69496],{"class":61},[51,153757,88208],{"class":65},[51,153759,153760,153762,153764],{"class":53,"line":433},[51,153761,151743],{"class":65},[51,153763,151771],{"class":61},[51,153765,88208],{"class":65},[51,153767,153768],{"class":53,"line":439},[51,153769,38500],{"class":65},[10,153771,153772],{},"管理器示意：",[41,153774,153776],{"className":170,"code":153775,"language":172,"meta":46,"style":46},"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",[48,153777,153778,153787,153795,153806,153810,153820,153833,153844,153851,153857,153861,153870,153879,153885,153892],{"__ignoreMap":46},[51,153779,153780,153782,153785],{"class":53,"line":54},[51,153781,15078],{"class":69},[51,153783,153784],{"class":57}," StudentManager",[51,153786,363],{"class":65},[51,153788,153789,153791,153793],{"class":53,"line":185},[51,153790,31179],{"class":69},[51,153792,31182],{"class":278},[51,153794,31185],{"class":65},[51,153796,153797,153799,153802,153804],{"class":53,"line":202},[51,153798,31223],{"class":278},[51,153800,153801],{"class":65},".students ",[51,153803,70],{"class":69},[51,153805,52210],{"class":65},[51,153807,153808],{"class":53,"line":209},[51,153809,206],{"emptyLinePlaceholder":205},[51,153811,153812,153814,153817],{"class":53,"line":223},[51,153813,31179],{"class":69},[51,153815,153816],{"class":57}," find_by_id",[51,153818,153819],{"class":65},"(self, student_id):\n",[51,153821,153822,153824,153826,153828,153830],{"class":53,"line":237},[51,153823,3790],{"class":69},[51,153825,152436],{"class":65},[51,153827,26425],{"class":69},[51,153829,39247],{"class":278},[51,153831,153832],{"class":65},".students:\n",[51,153834,153835,153837,153840,153842],{"class":53,"line":242},[51,153836,5027],{"class":69},[51,153838,153839],{"class":65}," student.student_id ",[51,153841,375],{"class":69},[51,153843,152457],{"class":65},[51,153845,153846,153849],{"class":53,"line":257},[51,153847,153848],{"class":69},"                return",[51,153850,152464],{"class":65},[51,153852,153853,153855],{"class":53,"line":262},[51,153854,15136],{"class":69},[51,153856,152471],{"class":278},[51,153858,153859],{"class":53,"line":285},[51,153860,206],{"emptyLinePlaceholder":205},[51,153862,153863,153865,153867],{"class":53,"line":296},[51,153864,31179],{"class":69},[51,153866,5594],{"class":57},[51,153868,153869],{"class":65},"(self, student):\n",[51,153871,153872,153874,153876],{"class":53,"line":307},[51,153873,369],{"class":69},[51,153875,39247],{"class":278},[51,153877,153878],{"class":65},".find_by_id(student.student_id):\n",[51,153880,153881,153883],{"class":53,"line":324},[51,153882,386],{"class":69},[51,153884,389],{"class":278},[51,153886,153887,153889],{"class":53,"line":329},[51,153888,31223],{"class":278},[51,153890,153891],{"class":65},".students.append(student)\n",[51,153893,153894,153896],{"class":53,"line":334},[51,153895,15136],{"class":69},[51,153897,153898],{"class":278}," True\n",[10,153900,153901],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[486,153903,153905],{"id":153904},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[513,153907,153909],{"id":153908},"_1251-数据结构","12.5.1 数据结构",[41,153911,153913],{"className":170,"code":153912,"language":172,"meta":46,"style":46},"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",[48,153914,153915,153923,153954,153984,154013,154042],{"__ignoreMap":46},[51,153916,153917,153919,153921],{"class":53,"line":54},[51,153918,148764],{"class":65},[51,153920,70],{"class":69},[51,153922,55819],{"class":65},[51,153924,153925,153927,153929,153931,153933,153935,153938,153940,153943,153945,153947,153949,153952],{"class":53,"line":185},[51,153926,148684],{"class":65},[51,153928,148296],{"class":61},[51,153930,51809],{"class":65},[51,153932,148907],{"class":61},[51,153934,12819],{"class":65},[51,153936,153937],{"class":61},"\"category\"",[51,153939,51809],{"class":65},[51,153941,153942],{"class":61},"\"手机\"",[51,153944,12819],{"class":65},[51,153946,84456],{"class":61},[51,153948,51809],{"class":65},[51,153950,153951],{"class":278},"12000",[51,153953,5315],{"class":65},[51,153955,153956,153958,153960,153962,153964,153966,153968,153970,153973,153975,153977,153979,153982],{"class":53,"line":202},[51,153957,148684],{"class":65},[51,153959,148296],{"class":61},[51,153961,51809],{"class":65},[51,153963,148907],{"class":61},[51,153965,12819],{"class":65},[51,153967,153937],{"class":61},[51,153969,51809],{"class":65},[51,153971,153972],{"class":61},"\"电脑\"",[51,153974,12819],{"class":65},[51,153976,84456],{"class":61},[51,153978,51809],{"class":65},[51,153980,153981],{"class":278},"18000",[51,153983,5315],{"class":65},[51,153985,153986,153988,153990,153992,153994,153996,153998,154000,154002,154004,154006,154008,154011],{"class":53,"line":209},[51,153987,148684],{"class":65},[51,153989,148296],{"class":61},[51,153991,51809],{"class":65},[51,153993,148928],{"class":61},[51,153995,12819],{"class":65},[51,153997,153937],{"class":61},[51,153999,51809],{"class":65},[51,154001,153942],{"class":61},[51,154003,12819],{"class":65},[51,154005,84456],{"class":61},[51,154007,51809],{"class":65},[51,154009,154010],{"class":278},"15000",[51,154012,5315],{"class":65},[51,154014,154015,154017,154019,154021,154023,154025,154027,154029,154031,154033,154035,154037,154040],{"class":53,"line":223},[51,154016,148684],{"class":65},[51,154018,148296],{"class":61},[51,154020,51809],{"class":65},[51,154022,148928],{"class":61},[51,154024,12819],{"class":65},[51,154026,153937],{"class":61},[51,154028,51809],{"class":65},[51,154030,153972],{"class":61},[51,154032,12819],{"class":65},[51,154034,84456],{"class":61},[51,154036,51809],{"class":65},[51,154038,154039],{"class":278},"16000",[51,154041,5315],{"class":65},[51,154043,154044],{"class":53,"line":237},[51,154045,33621],{"class":65},[513,154047,154049],{"id":154048},"_1252-按日期统计","12.5.2 按日期统计",[41,154051,154053],{"className":170,"code":154052,"language":172,"meta":46,"style":46},"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",[48,154054,154055,154064,154068,154079,154093,154106,154125,154129],{"__ignoreMap":46},[51,154056,154057,154060,154062],{"class":53,"line":54},[51,154058,154059],{"class":65},"daily_total ",[51,154061,70],{"class":69},[51,154063,88240],{"class":65},[51,154065,154066],{"class":53,"line":185},[51,154067,206],{"emptyLinePlaceholder":205},[51,154069,154070,154072,154074,154076],{"class":53,"line":202},[51,154071,3412],{"class":69},[51,154073,148508],{"class":65},[51,154075,26425],{"class":69},[51,154077,154078],{"class":65}," sales:\n",[51,154080,154081,154084,154086,154089,154091],{"class":53,"line":209},[51,154082,154083],{"class":65},"    date ",[51,154085,70],{"class":69},[51,154087,154088],{"class":65}," item[",[51,154090,148296],{"class":61},[51,154092,33621],{"class":65},[51,154094,154095,154098,154100,154102,154104],{"class":53,"line":223},[51,154096,154097],{"class":65},"    amount ",[51,154099,70],{"class":69},[51,154101,154088],{"class":65},[51,154103,84456],{"class":61},[51,154105,33621],{"class":65},[51,154107,154108,154111,154113,154116,154118,154120,154122],{"class":53,"line":237},[51,154109,154110],{"class":65},"    daily_total[date] ",[51,154112,70],{"class":69},[51,154114,154115],{"class":65}," daily_total.get(date, ",[51,154117,733],{"class":278},[51,154119,14098],{"class":65},[51,154121,1023],{"class":69},[51,154123,154124],{"class":65}," amount\n",[51,154126,154127],{"class":53,"line":242},[51,154128,206],{"emptyLinePlaceholder":205},[51,154130,154131,154133],{"class":53,"line":257},[51,154132,30794],{"class":278},[51,154134,154135],{"class":65},"(daily_total)\n",[513,154137,154139],{"id":154138},"_1253-按类别统计","12.5.3 按类别统计",[41,154141,154143],{"className":170,"code":154142,"language":172,"meta":46,"style":46},"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",[48,154144,154145,154154,154158,154168,154181,154193,154211,154215],{"__ignoreMap":46},[51,154146,154147,154150,154152],{"class":53,"line":54},[51,154148,154149],{"class":65},"category_total ",[51,154151,70],{"class":69},[51,154153,88240],{"class":65},[51,154155,154156],{"class":53,"line":185},[51,154157,206],{"emptyLinePlaceholder":205},[51,154159,154160,154162,154164,154166],{"class":53,"line":202},[51,154161,3412],{"class":69},[51,154163,148508],{"class":65},[51,154165,26425],{"class":69},[51,154167,154078],{"class":65},[51,154169,154170,154173,154175,154177,154179],{"class":53,"line":209},[51,154171,154172],{"class":65},"    category ",[51,154174,70],{"class":69},[51,154176,154088],{"class":65},[51,154178,153937],{"class":61},[51,154180,33621],{"class":65},[51,154182,154183,154185,154187,154189,154191],{"class":53,"line":223},[51,154184,154097],{"class":65},[51,154186,70],{"class":69},[51,154188,154088],{"class":65},[51,154190,84456],{"class":61},[51,154192,33621],{"class":65},[51,154194,154195,154198,154200,154203,154205,154207,154209],{"class":53,"line":237},[51,154196,154197],{"class":65},"    category_total[category] ",[51,154199,70],{"class":69},[51,154201,154202],{"class":65}," category_total.get(category, ",[51,154204,733],{"class":278},[51,154206,14098],{"class":65},[51,154208,1023],{"class":69},[51,154210,154124],{"class":65},[51,154212,154213],{"class":53,"line":242},[51,154214,206],{"emptyLinePlaceholder":205},[51,154216,154217,154219],{"class":53,"line":257},[51,154218,30794],{"class":278},[51,154220,154221],{"class":65},"(category_total)\n",[513,154223,154225],{"id":154224},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[41,154227,154229],{"className":170,"code":154228,"language":172,"meta":46,"style":46},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[48,154230,154231,154256],{"__ignoreMap":46},[51,154232,154233,154236,154238,154240,154243,154246,154249,154252,154254],{"class":53,"line":54},[51,154234,154235],{"class":65},"top_date, top_amount ",[51,154237,70],{"class":69},[51,154239,6335],{"class":278},[51,154241,154242],{"class":65},"(daily_total.items(), ",[51,154244,154245],{"class":248},"key",[51,154247,154248],{"class":69},"=lambda",[51,154250,154251],{"class":65}," item: item[",[51,154253,759],{"class":278},[51,154255,5042],{"class":65},[51,154257,154258,154260],{"class":53,"line":185},[51,154259,30794],{"class":278},[51,154261,154262],{"class":65},"(top_date, top_amount)\n",[486,154264,154266],{"id":154265},"_126-绘制柱状图","12.6 绘制柱状图",[41,154268,154270],{"className":170,"code":154269,"language":172,"meta":46,"style":46},"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",[48,154271,154272,154286,154297,154301,154309,154321,154333,154344,154348,154352,154362,154373,154387,154392,154409,154426,154442,154446],{"__ignoreMap":46},[51,154273,154274,154276,154278,154280,154282,154284],{"class":53,"line":54},[51,154275,226],{"class":69},[51,154277,147678],{"class":65},[51,154279,179],{"class":69},[51,154281,147683],{"class":65},[51,154283,217],{"class":69},[51,154285,147688],{"class":65},[51,154287,154288,154290,154292,154294],{"class":53,"line":185},[51,154289,226],{"class":69},[51,154291,147537],{"class":65},[51,154293,179],{"class":69},[51,154295,154296],{"class":65}," Bar\n",[51,154298,154299],{"class":53,"line":202},[51,154300,206],{"emptyLinePlaceholder":205},[51,154302,154303,154305,154307],{"class":53,"line":209},[51,154304,154149],{"class":65},[51,154306,70],{"class":69},[51,154308,15956],{"class":65},[51,154310,154311,154314,154316,154319],{"class":53,"line":223},[51,154312,154313],{"class":61},"    \"手机\"",[51,154315,51809],{"class":65},[51,154317,154318],{"class":278},"27000",[51,154320,31843],{"class":65},[51,154322,154323,154326,154328,154331],{"class":53,"line":237},[51,154324,154325],{"class":61},"    \"电脑\"",[51,154327,51809],{"class":65},[51,154329,154330],{"class":278},"34000",[51,154332,31843],{"class":65},[51,154334,154335,154338,154340,154342],{"class":53,"line":242},[51,154336,154337],{"class":61},"    \"耳机\"",[51,154339,51809],{"class":65},[51,154341,124770],{"class":278},[51,154343,31843],{"class":65},[51,154345,154346],{"class":53,"line":257},[51,154347,1974],{"class":65},[51,154349,154350],{"class":53,"line":262},[51,154351,206],{"emptyLinePlaceholder":205},[51,154353,154354,154357,154359],{"class":53,"line":285},[51,154355,154356],{"class":65},"bar ",[51,154358,70],{"class":69},[51,154360,154361],{"class":65}," Bar()\n",[51,154363,154364,154367,154370],{"class":53,"line":296},[51,154365,154366],{"class":65},"bar.add_xaxis(",[51,154368,154369],{"class":278},"list",[51,154371,154372],{"class":65},"(category_total.keys()))\n",[51,154374,154375,154378,154380,154382,154384],{"class":53,"line":307},[51,154376,154377],{"class":65},"bar.add_yaxis(",[51,154379,147594],{"class":61},[51,154381,12819],{"class":65},[51,154383,154369],{"class":278},[51,154385,154386],{"class":65},"(category_total.values()))\n",[51,154388,154389],{"class":53,"line":324},[51,154390,154391],{"class":65},"bar.set_global_opts(\n",[51,154393,154394,154396,154398,154400,154402,154404,154407],{"class":53,"line":329},[51,154395,147772],{"class":248},[51,154397,70],{"class":69},[51,154399,147777],{"class":65},[51,154401,51779],{"class":248},[51,154403,70],{"class":69},[51,154405,154406],{"class":61},"\"品类销售额\"",[51,154408,321],{"class":65},[51,154410,154411,154413,154415,154417,154419,154421,154424],{"class":53,"line":334},[51,154412,147791],{"class":248},[51,154414,70],{"class":69},[51,154416,147796],{"class":65},[51,154418,80182],{"class":248},[51,154420,70],{"class":69},[51,154422,154423],{"class":61},"\"品类\"",[51,154425,321],{"class":65},[51,154427,154428,154430,154432,154434,154436,154438,154440],{"class":53,"line":340},[51,154429,147810],{"class":248},[51,154431,70],{"class":69},[51,154433,147796],{"class":65},[51,154435,80182],{"class":248},[51,154437,70],{"class":69},[51,154439,147594],{"class":61},[51,154441,321],{"class":65},[51,154443,154444],{"class":53,"line":345},[51,154445,282],{"class":65},[51,154447,154448,154451,154454],{"class":53,"line":357},[51,154449,154450],{"class":65},"bar.render(",[51,154452,154453],{"class":61},"\"category_sales.html\"",[51,154455,282],{"class":65},[486,154457,154459],{"id":154458},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[10,154461,154462],{},"时间线适合展示不同日期、月份、年份的数据变化。",[41,154464,154466],{"className":170,"code":154465,"language":172,"meta":46,"style":46},"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",[48,154467,154468,154482,154493,154497,154505,154529,154552,154577,154581,154585,154595,154599,154610,154619,154629,154643,154674,154679,154683],{"__ignoreMap":46},[51,154469,154470,154472,154474,154476,154478,154480],{"class":53,"line":54},[51,154471,226],{"class":69},[51,154473,147678],{"class":65},[51,154475,179],{"class":69},[51,154477,147683],{"class":65},[51,154479,217],{"class":69},[51,154481,147688],{"class":65},[51,154483,154484,154486,154488,154490],{"class":53,"line":185},[51,154485,226],{"class":69},[51,154487,147537],{"class":65},[51,154489,179],{"class":69},[51,154491,154492],{"class":65}," Bar, Timeline\n",[51,154494,154495],{"class":53,"line":202},[51,154496,206],{"emptyLinePlaceholder":205},[51,154498,154499,154501,154503],{"class":53,"line":209},[51,154500,102030],{"class":65},[51,154502,70],{"class":69},[51,154504,15956],{"class":65},[51,154506,154507,154510,154513,154515,154517,154519,154521,154523,154525,154527],{"class":53,"line":223},[51,154508,154509],{"class":61},"    \"2024-10-01\"",[51,154511,154512],{"class":65},": {",[51,154514,153942],{"class":61},[51,154516,51809],{"class":65},[51,154518,153951],{"class":278},[51,154520,12819],{"class":65},[51,154522,153972],{"class":61},[51,154524,51809],{"class":65},[51,154526,153981],{"class":278},[51,154528,5315],{"class":65},[51,154530,154531,154534,154536,154538,154540,154542,154544,154546,154548,154550],{"class":53,"line":237},[51,154532,154533],{"class":61},"    \"2024-10-02\"",[51,154535,154512],{"class":65},[51,154537,153942],{"class":61},[51,154539,51809],{"class":65},[51,154541,154010],{"class":278},[51,154543,12819],{"class":65},[51,154545,153972],{"class":61},[51,154547,51809],{"class":65},[51,154549,154039],{"class":278},[51,154551,5315],{"class":65},[51,154553,154554,154557,154559,154561,154563,154566,154568,154570,154572,154575],{"class":53,"line":242},[51,154555,154556],{"class":61},"    \"2024-10-03\"",[51,154558,154512],{"class":65},[51,154560,153942],{"class":61},[51,154562,51809],{"class":65},[51,154564,154565],{"class":278},"17000",[51,154567,12819],{"class":65},[51,154569,153972],{"class":61},[51,154571,51809],{"class":65},[51,154573,154574],{"class":278},"19000",[51,154576,5315],{"class":65},[51,154578,154579],{"class":53,"line":257},[51,154580,1974],{"class":65},[51,154582,154583],{"class":53,"line":262},[51,154584,206],{"emptyLinePlaceholder":205},[51,154586,154587,154590,154592],{"class":53,"line":285},[51,154588,154589],{"class":65},"timeline ",[51,154591,70],{"class":69},[51,154593,154594],{"class":65}," Timeline()\n",[51,154596,154597],{"class":53,"line":296},[51,154598,206],{"emptyLinePlaceholder":205},[51,154600,154601,154603,154606,154608],{"class":53,"line":307},[51,154602,3412],{"class":69},[51,154604,154605],{"class":65}," date, category_data ",[51,154607,26425],{"class":69},[51,154609,149447],{"class":65},[51,154611,154612,154615,154617],{"class":53,"line":324},[51,154613,154614],{"class":65},"    bar ",[51,154616,70],{"class":69},[51,154618,154361],{"class":65},[51,154620,154621,154624,154626],{"class":53,"line":329},[51,154622,154623],{"class":65},"    bar.add_xaxis(",[51,154625,154369],{"class":278},[51,154627,154628],{"class":65},"(category_data.keys()))\n",[51,154630,154631,154634,154636,154638,154640],{"class":53,"line":334},[51,154632,154633],{"class":65},"    bar.add_yaxis(",[51,154635,147594],{"class":61},[51,154637,12819],{"class":65},[51,154639,154369],{"class":278},[51,154641,154642],{"class":65},"(category_data.values()))\n",[51,154644,154645,154648,154651,154653,154655,154657,154659,154661,154663,154665,154667,154669,154672],{"class":53,"line":340},[51,154646,154647],{"class":65},"    bar.set_global_opts(",[51,154649,154650],{"class":248},"title_opts",[51,154652,70],{"class":69},[51,154654,147777],{"class":65},[51,154656,51779],{"class":248},[51,154658,70],{"class":69},[51,154660,595],{"class":69},[51,154662,793],{"class":61},[51,154664,1438],{"class":278},[51,154666,74298],{"class":65},[51,154668,1488],{"class":278},[51,154670,154671],{"class":61},"销售额\"",[51,154673,30876],{"class":65},[51,154675,154676],{"class":53,"line":345},[51,154677,154678],{"class":65},"    timeline.add(bar, date)\n",[51,154680,154681],{"class":53,"line":357},[51,154682,206],{"emptyLinePlaceholder":205},[51,154684,154685,154688,154691],{"class":53,"line":366},[51,154686,154687],{"class":65},"timeline.render(",[51,154689,154690],{"class":61},"\"timeline_sales.html\"",[51,154692,282],{"class":65},[486,154694,154696],{"id":154695},"_128-绘制地图","12.8 绘制地图",[10,154698,154699],{},"地图适合展示地区数据。",[41,154701,154703],{"className":170,"code":154702,"language":172,"meta":46,"style":46},"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",[48,154704,154705,154719,154730,154734,154742,154755,154767,154780,154793,154797,154801,154811,154826,154831,154848,154867,154871],{"__ignoreMap":46},[51,154706,154707,154709,154711,154713,154715,154717],{"class":53,"line":54},[51,154708,226],{"class":69},[51,154710,147678],{"class":65},[51,154712,179],{"class":69},[51,154714,147683],{"class":65},[51,154716,217],{"class":69},[51,154718,147688],{"class":65},[51,154720,154721,154723,154725,154727],{"class":53,"line":185},[51,154722,226],{"class":69},[51,154724,147537],{"class":65},[51,154726,179],{"class":69},[51,154728,154729],{"class":65}," Map\n",[51,154731,154732],{"class":53,"line":202},[51,154733,206],{"emptyLinePlaceholder":205},[51,154735,154736,154738,154740],{"class":53,"line":209},[51,154737,102030],{"class":65},[51,154739,70],{"class":69},[51,154741,55819],{"class":65},[51,154743,154744,154747,154749,154751,154753],{"class":53,"line":223},[51,154745,154746],{"class":65},"    (",[51,154748,69641],{"class":61},[51,154750,12819],{"class":65},[51,154752,1359],{"class":278},[51,154754,321],{"class":65},[51,154756,154757,154759,154761,154763,154765],{"class":53,"line":237},[51,154758,154746],{"class":65},[51,154760,69661],{"class":61},[51,154762,12819],{"class":65},[51,154764,147611],{"class":278},[51,154766,321],{"class":65},[51,154768,154769,154771,154774,154776,154778],{"class":53,"line":242},[51,154770,154746],{"class":65},[51,154772,154773],{"class":61},"\"广东\"",[51,154775,12819],{"class":65},[51,154777,2120],{"class":278},[51,154779,321],{"class":65},[51,154781,154782,154784,154787,154789,154791],{"class":53,"line":257},[51,154783,154746],{"class":65},[51,154785,154786],{"class":61},"\"浙江\"",[51,154788,12819],{"class":65},[51,154790,147616],{"class":278},[51,154792,321],{"class":65},[51,154794,154795],{"class":53,"line":262},[51,154796,33621],{"class":65},[51,154798,154799],{"class":53,"line":285},[51,154800,206],{"emptyLinePlaceholder":205},[51,154802,154803,154806,154808],{"class":53,"line":296},[51,154804,154805],{"class":65},"map_chart ",[51,154807,70],{"class":69},[51,154809,154810],{"class":65}," Map()\n",[51,154812,154813,154816,154818,154821,154824],{"class":53,"line":307},[51,154814,154815],{"class":65},"map_chart.add(",[51,154817,147594],{"class":61},[51,154819,154820],{"class":65},", data, ",[51,154822,154823],{"class":61},"\"china\"",[51,154825,282],{"class":65},[51,154827,154828],{"class":53,"line":324},[51,154829,154830],{"class":65},"map_chart.set_global_opts(\n",[51,154832,154833,154835,154837,154839,154841,154843,154846],{"class":53,"line":329},[51,154834,147772],{"class":248},[51,154836,70],{"class":69},[51,154838,147777],{"class":65},[51,154840,51779],{"class":248},[51,154842,70],{"class":69},[51,154844,154845],{"class":61},"\"地区销售额\"",[51,154847,321],{"class":65},[51,154849,154850,154853,154855,154858,154861,154863,154865],{"class":53,"line":334},[51,154851,154852],{"class":248},"    visualmap_opts",[51,154854,70],{"class":69},[51,154856,154857],{"class":65},"opts.VisualMapOpts(",[51,154859,154860],{"class":248},"max_",[51,154862,70],{"class":69},[51,154864,2120],{"class":278},[51,154866,321],{"class":65},[51,154868,154869],{"class":53,"line":340},[51,154870,282],{"class":65},[51,154872,154873,154876,154879],{"class":53,"line":345},[51,154874,154875],{"class":65},"map_chart.render(",[51,154877,154878],{"class":61},"\"map_sales.html\"",[51,154880,282],{"class":65},[10,154882,154883],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[486,154885,154887],{"id":154886},"_129-项目拆分建议","12.9 项目拆分建议",[10,154889,154890],{},"当代码超过一个文件时，可以这样组织：",[41,154892,154895],{"className":154893,"code":154894,"language":5572,"meta":46},[5570],"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",[48,154896,154894],{"__ignoreMap":46},[10,154898,154899],{},"职责：",[19,154901,154902,154908,154914,154920],{},[22,154903,154904,154907],{},[48,154905,154906],{},"main.py","：程序入口。",[22,154909,154910,154913],{},[48,154911,154912],{},"file_utils.py","：读写 JSON。",[22,154915,154916,154919],{},[48,154917,154918],{},"sales_service.py","：统计销售数据。",[22,154921,154922,154925],{},[48,154923,154924],{},"chart_builder.py","：生成图表。",[486,154927,154929],{"id":154928},"_1210-python基础复习清单","12.10 Python基础复习清单",[10,154931,154932],{},"语法基础：",[19,154934,154935,154938,154941,154944],{},[22,154936,154937],{},"会写变量、注释、输入输出。",[22,154939,154940],{},"会使用 int、float、str、bool。",[22,154942,154943],{},"会做类型转换。",[22,154945,154946],{},"会使用 f-string 格式化输出。",[10,154948,154949],{},"流程控制：",[19,154951,154952,154958,154964,154972],{},[22,154953,154954,154955,28767],{},"会写 ",[48,154956,154957],{},"if elif else",[22,154959,154954,154960,101390,154962,28767],{},[48,154961,447],{},[48,154963,3412],{},[22,154965,154966,154967,101390,154969,28767],{},"理解 ",[48,154968,2443],{},[48,154970,154971],{},"continue",[22,154973,154974],{},"能写嵌套循环。",[10,154976,154977],{},"函数：",[19,154979,154980,154983,154986,154989],{},[22,154981,154982],{},"会定义和调用函数。",[22,154984,154985],{},"理解参数和返回值。",[22,154987,154988],{},"知道局部变量和全局变量。",[22,154990,154991],{},"会使用默认参数、关键字参数、不定长参数。",[10,154993,154994],{},"容器：",[19,154996,154997,155000,155003,155006,155009],{},[22,154998,154999],{},"会使用列表增删改查。",[22,155001,155002],{},"会遍历列表、字典。",[22,155004,155005],{},"会使用切片。",[22,155007,155008],{},"会用集合去重。",[22,155010,155011],{},"会处理列表嵌套字典。",[10,155013,155014],{},"文件和模块：",[19,155016,155017,155020,155023,155026,155029],{},[22,155018,155019],{},"会读写文本文件。",[22,155021,155022],{},"会读写 JSON。",[22,155024,155025],{},"会捕获常见异常。",[22,155027,155028],{},"会导入模块和第三方包。",[22,155030,155031],{},"会创建简单包结构。",[10,155033,155034],{},"项目能力：",[19,155036,155037,155040,155043,155046,155049],{},[22,155038,155039],{},"能把代码拆成函数。",[22,155041,155042],{},"能把数据保存到文件。",[22,155044,155045],{},"能处理用户输入错误。",[22,155047,155048],{},"能写一个完整菜单程序。",[22,155050,155051],{},"能用 pyecharts 生成图表。",[486,155053,155055],{"id":155054},"_1211-推荐练习顺序","12.11 推荐练习顺序",[19,155057,155058,155061,155064,155067,155070,155073,155076,155079],{},[22,155059,155060],{},"猜数字游戏。",[22,155062,155063],{},"ATM 菜单程序。",[22,155065,155066],{},"学生成绩统计。",[22,155068,155069],{},"学生管理系统函数版。",[22,155071,155072],{},"学生管理系统文件持久化版。",[22,155074,155075],{},"学生管理系统面向对象版。",[22,155077,155078],{},"销售数据统计。",[22,155080,155081],{},"销售数据可视化。",[486,155083,155085],{"id":155084},"_1212-常见学习误区","12.12 常见学习误区",[19,155087,155088,155091,155094,155097,155100,155103,155106],{},[22,155089,155090],{},"只看视频不敲代码。",[22,155092,155093],{},"一报错就复制错误去搜，不先读报错位置。",[22,155095,155096],{},"变量名随便写，后续自己看不懂。",[22,155098,155099],{},"所有代码都写在一个文件一个函数里。",[22,155101,155102],{},"不保存练习代码，复习时没有材料。",[22,155104,155105],{},"还没掌握列表字典就急着学框架。",[22,155107,155108],{},"不会读官方文档，只依赖教程。",[486,155110,155112],{"id":155111},"_1213-如何读报错","12.13 如何读报错",[10,155114,155115],{},"报错通常从下往上看最后几行。",[10,155117,15519],{},[41,155119,155122],{"className":155120,"code":155121,"language":5572,"meta":46},[5570],"ValueError: invalid literal for int() with base 10: 'abc'\n",[48,155123,155121],{"__ignoreMap":46},[10,155125,24981],{},[19,155127,155128,155134,155144],{},[22,155129,155130,155131,28767],{},"异常类型是 ",[48,155132,155133],{},"ValueError",[22,155135,107717,155136,155139,155140,155143],{},[48,155137,155138],{},"int()"," 无法把 ",[48,155141,155142],{},"'abc'"," 转成整数。",[22,155145,155146],{},"应该检查输入内容或增加异常处理。",[10,155148,155149],{},"再看文件名和行号：",[41,155151,155154],{"className":155152,"code":155153,"language":5572,"meta":46},[5570],"File \"main.py\", line 10, in \u003Cmodule>\n",[48,155155,155153],{"__ignoreMap":46},[10,155157,155158,155159,155161],{},"表示错误发生在 ",[48,155160,154906],{}," 第 10 行。",[486,155163,155165],{"id":155164},"_1214-后续学习方向","12.14 后续学习方向",[10,155167,155168],{},"Python 基础完成后，可以按兴趣选择方向：",[19,155170,155171,155183,155192,155204,155215,155224,155234],{},[22,155172,155173,155174,754,155177,754,155180,28767],{},"自动化办公：",[48,155175,155176],{},"openpyxl",[48,155178,155179],{},"python-docx",[48,155181,155182],{},"pdfplumber",[22,155184,155185,155186,754,155188,754,155190,28767],{},"数据分析：",[48,155187,100998],{},[48,155189,146484],{},[48,155191,146492],{},[22,155193,155194,155195,754,155198,754,155201,28767],{},"Web 后端：",[48,155196,155197],{},"Flask",[48,155199,155200],{},"FastAPI",[48,155202,155203],{},"Django",[22,155205,155206,155207,754,155209,754,155212,28767],{},"爬虫：",[48,155208,146469],{},[48,155210,155211],{},"BeautifulSoup",[48,155213,155214],{},"Scrapy",[22,155216,155217,155218,754,155220,155223],{},"测试开发：",[48,155219,146516],{},[48,155221,155222],{},"selenium","、接口测试。",[22,155225,155226,155227,754,155229,754,155231,28767],{},"人工智能：",[48,155228,100998],{},[48,155230,146484],{},[48,155232,155233],{},"pytorch",[22,155235,155236,155237,754,155239,754,155242,28767],{},"运维脚本：",[48,155238,146085],{},[48,155240,155241],{},"subprocess",[48,155243,155244],{},"paramiko",[10,155246,155247],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[486,155249,155251],{"id":155250},"_1215-结课练习","12.15 结课练习",[19,155253,155254,155257,155260,155263,155266,155269,155272,155275],{},[22,155255,155256],{},"完成函数版学生管理系统。",[22,155258,155259],{},"给学生管理系统增加 JSON 持久化。",[22,155261,155262],{},"给学生管理系统增加异常处理。",[22,155264,155265],{},"把学生管理系统改成面向对象版。",[22,155267,155268],{},"使用 pyecharts 绘制学生成绩柱状图。",[22,155270,155271],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[22,155273,155274],{},"按品类统计销售额并绘制柱状图。",[22,155276,155277],{},"写一份自己的 Python 学习路线图。",[464,155279,155280],{},"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":46,"searchDepth":185,"depth":185,"links":155282},[155283,155284,155287,155288,155289,155295,155296,155297,155298,155299,155300,155301,155302,155303,155304],{"id":151999,"depth":185,"text":152000},{"id":152049,"depth":185,"text":152050,"children":155285},[155286],{"id":152053,"depth":202,"text":152054},{"id":152092,"depth":185,"text":152093},{"id":153566,"depth":185,"text":153567},{"id":153904,"depth":185,"text":153905,"children":155290},[155291,155292,155293,155294],{"id":153908,"depth":202,"text":153909},{"id":154048,"depth":202,"text":154049},{"id":154138,"depth":202,"text":154139},{"id":154224,"depth":202,"text":154225},{"id":154265,"depth":185,"text":154266},{"id":154458,"depth":185,"text":154459},{"id":154695,"depth":185,"text":154696},{"id":154886,"depth":185,"text":154887},{"id":154928,"depth":185,"text":154929},{"id":155054,"depth":185,"text":155055},{"id":155084,"depth":185,"text":155085},{"id":155111,"depth":185,"text":155112},{"id":155164,"depth":185,"text":155165},{"id":155250,"depth":185,"text":155251},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151991,"description":23760},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155311,"title":155312,"body":155313,"description":23760,"extension":469,"meta":157782,"navigation":205,"path":157783,"seo":157784,"stem":157785,"__hash__":157786},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155314,"toc":157757},[155315,155318,155322,155325,155328,155348,155351,155374,155377,155380,155402,155405,155427,155431,155434,155474,155477,155598,155602,155605,155645,155648,155672,155675,155679,155682,155696,155729,155732,155767,155770,155793,155796,155829,155832,155834,155840,155915,155918,155924,155941,155981,155985,155988,156034,156036,156074,156077,156112,156115,156150,156153,156185,156188,156207,156211,156215,156328,156330,156405,156409,156455,156458,156484,156493,156497,156500,156563,156571,156599,156603,156643,156708,156712,156715,156754,156757,156802,156805,156866,156870,156897,156900,156928,156931,156935,156939,157004,157007,157045,157048,157080,157084,157183,157187,157190,157263,157266,157314,157318,157324,157364,157367,157414,157417,157466,157470,157472,157486,157488,157669,157673,157700,157720,157727,157731,157748,157754],[14,155316,155312],{"id":155317},"_2-基础语法变量与字符串",[486,155319,155321],{"id":155320},"_21-注释","2.1 注释",[10,155323,155324],{},"注释是给人看的说明文字，不会被 Python 执行。",[10,155326,155327],{},"单行注释：",[41,155329,155331],{"className":170,"code":155330,"language":172,"meta":46,"style":46},"# 这是单行注释\nprint(\"hello\")\n",[48,155332,155333,155338],{"__ignoreMap":46},[51,155334,155335],{"class":53,"line":54},[51,155336,155337],{"class":601},"# 这是单行注释\n",[51,155339,155340,155342,155344,155346],{"class":53,"line":185},[51,155341,30794],{"class":278},[51,155343,546],{"class":65},[51,155345,6228],{"class":61},[51,155347,282],{"class":65},[10,155349,155350],{},"多行说明常用三引号：",[41,155352,155354],{"className":170,"code":155353,"language":172,"meta":46,"style":46},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[48,155355,155356,155360,155365,155370],{"__ignoreMap":46},[51,155357,155358],{"class":53,"line":54},[51,155359,96070],{"class":61},[51,155361,155362],{"class":53,"line":185},[51,155363,155364],{"class":61},"这是多行说明。\n",[51,155366,155367],{"class":53,"line":202},[51,155368,155369],{"class":61},"常用于文件顶部说明、函数说明等。\n",[51,155371,155372],{"class":53,"line":209},[51,155373,96070],{"class":61},[10,155375,155376],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[10,155378,155379],{},"不好：",[41,155381,155383],{"className":170,"code":155382,"language":172,"meta":46,"style":46},"# age 加 1\nage = age + 1\n",[48,155384,155385,155390],{"__ignoreMap":46},[51,155386,155387],{"class":53,"line":54},[51,155388,155389],{"class":601},"# age 加 1\n",[51,155391,155392,155394,155396,155398,155400],{"class":53,"line":185},[51,155393,146845],{"class":65},[51,155395,70],{"class":69},[51,155397,16091],{"class":65},[51,155399,1023],{"class":69},[51,155401,56071],{"class":278},[10,155403,155404],{},"较好：",[41,155406,155408],{"className":170,"code":155407,"language":172,"meta":46,"style":46},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[48,155409,155410,155415],{"__ignoreMap":46},[51,155411,155412],{"class":53,"line":54},[51,155413,155414],{"class":601},"# 用户过完生日后，年龄增加一岁\n",[51,155416,155417,155419,155421,155423,155425],{"class":53,"line":185},[51,155418,146845],{"class":65},[51,155420,70],{"class":69},[51,155422,16091],{"class":65},[51,155424,1023],{"class":69},[51,155426,56071],{"class":278},[486,155428,155430],{"id":155429},"_22-字面量","2.2 字面量",[10,155432,155433],{},"字面量就是代码中直接写出来的数据。",[41,155435,155437],{"className":170,"code":155436,"language":172,"meta":46,"style":46},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[48,155438,155439,155446,155453,155460,155467],{"__ignoreMap":46},[51,155440,155441,155443],{"class":53,"line":54},[51,155442,853],{"class":278},[51,155444,155445],{"class":601},"          # 整数\n",[51,155447,155448,155450],{"class":53,"line":185},[51,155449,592],{"class":278},[51,155451,155452],{"class":601},"         # 小数\n",[51,155454,155455,155457],{"class":53,"line":202},[51,155456,6228],{"class":61},[51,155458,155459],{"class":601},"      # 字符串\n",[51,155461,155462,155464],{"class":53,"line":209},[51,155463,279],{"class":278},[51,155465,155466],{"class":601},"         # 布尔值\n",[51,155468,155469,155471],{"class":53,"line":223},[51,155470,96058],{"class":278},[51,155472,155473],{"class":601},"         # 空值\n",[10,155475,155476],{},"常见字面量类型：",[679,155478,155479,155489],{},[682,155480,155481],{},[685,155482,155483,155485,155487],{},[688,155484,24120],{},[688,155486,27874],{},[688,155488,26251],{},[726,155490,155491,155502,155513,155524,155536,155548,155560,155573,155585],{},[685,155492,155493,155495,155499],{},[731,155494,549],{},[731,155496,155497],{},[48,155498,853],{},[731,155500,155501],{},"整数",[685,155503,155504,155506,155510],{},[731,155505,584],{},[731,155507,155508],{},[48,155509,592],{},[731,155511,155512],{},"浮点数",[685,155514,155515,155517,155521],{},[731,155516,1712],{},[731,155518,155519],{},[48,155520,6228],{},[731,155522,155523],{},"字符串",[685,155525,155526,155528,155534],{},[731,155527,1764],{},[731,155529,155530,754,155532],{},[48,155531,279],{},[48,155533,34362],{},[731,155535,66387],{},[685,155537,155538,155541,155545],{},[731,155539,155540],{},"NoneType",[731,155542,155543],{},[48,155544,96058],{},[731,155546,155547],{},"空值",[685,155549,155550,155552,155557],{},[731,155551,154369],{},[731,155553,155554],{},[48,155555,155556],{},"[1, 2, 3]",[731,155558,155559],{},"列表",[685,155561,155562,155565,155570],{},[731,155563,155564],{},"tuple",[731,155566,155567],{},[48,155568,155569],{},"(1, 2, 3)",[731,155571,155572],{},"元组",[685,155574,155575,155577,155582],{},[731,155576,114917],{},[731,155578,155579],{},[48,155580,155581],{},"{\"name\": \"张三\"}",[731,155583,155584],{},"字典",[685,155586,155587,155590,155595],{},[731,155588,155589],{},"set",[731,155591,155592],{},[48,155593,155594],{},"{1, 2, 3}",[731,155596,155597],{},"集合",[486,155599,155601],{"id":155600},"_23-变量","2.3 变量",[10,155603,155604],{},"变量是保存数据的名字。",[41,155606,155608],{"className":170,"code":155607,"language":172,"meta":46,"style":46},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[48,155609,155610,155618,155626,155636],{"__ignoreMap":46},[51,155611,155612,155614,155616],{"class":53,"line":54},[51,155613,146835],{"class":65},[51,155615,70],{"class":69},[51,155617,149652],{"class":61},[51,155619,155620,155622,155624],{"class":53,"line":185},[51,155621,146845],{"class":65},[51,155623,70],{"class":69},[51,155625,146850],{"class":278},[51,155627,155628,155631,155633],{"class":53,"line":202},[51,155629,155630],{"class":65},"height ",[51,155632,70],{"class":69},[51,155634,155635],{"class":278}," 1.75\n",[51,155637,155638,155641,155643],{"class":53,"line":209},[51,155639,155640],{"class":65},"is_student ",[51,155642,70],{"class":69},[51,155644,153898],{"class":278},[10,155646,155647],{},"Python 的变量不需要提前声明类型：",[41,155649,155651],{"className":170,"code":155650,"language":172,"meta":46,"style":46},"score = 100\nscore = \"满分\"\n",[48,155652,155653,155663],{"__ignoreMap":46},[51,155654,155655,155658,155660],{"class":53,"line":54},[51,155656,155657],{"class":65},"score ",[51,155659,70],{"class":69},[51,155661,155662],{"class":278}," 100\n",[51,155664,155665,155667,155669],{"class":53,"line":185},[51,155666,155657],{"class":65},[51,155668,70],{"class":69},[51,155670,155671],{"class":61}," \"满分\"\n",[10,155673,155674],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[486,155676,155678],{"id":155677},"_24-变量命名规则","2.4 变量命名规则",[10,155680,155681],{},"硬性规则：",[19,155683,155684,155687,155690,155693],{},[22,155685,155686],{},"只能由字母、数字、下划线组成。",[22,155688,155689],{},"不能以数字开头。",[22,155691,155692],{},"不能使用 Python 关键字。",[22,155694,155695],{},"区分大小写。",[41,155697,155699],{"className":170,"code":155698,"language":172,"meta":46,"style":46},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[48,155700,155701,155710,155719],{"__ignoreMap":46},[51,155702,155703,155706,155708],{"class":53,"line":54},[51,155704,155705],{"class":65},"user_name ",[51,155707,70],{"class":69},[51,155709,146840],{"class":61},[51,155711,155712,155715,155717],{"class":53,"line":185},[51,155713,155714],{"class":65},"age2 ",[51,155716,70],{"class":69},[51,155718,146850],{"class":278},[51,155720,155721,155724,155726],{"class":53,"line":202},[51,155722,155723],{"class":65},"_token ",[51,155725,70],{"class":69},[51,155727,155728],{"class":61}," \"abc\"\n",[10,155730,155731],{},"错误写法：",[41,155733,155735],{"className":170,"code":155734,"language":172,"meta":46,"style":46},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[48,155736,155737,155746,155758],{"__ignoreMap":46},[51,155738,155739,155742,155744],{"class":53,"line":54},[51,155740,155741],{"class":77775},"2age",[51,155743,13948],{"class":69},[51,155745,146850],{"class":278},[51,155747,155748,155750,155752,155754,155756],{"class":53,"line":185},[51,155749,131883],{"class":65},[51,155751,1074],{"class":69},[51,155753,146835],{"class":65},[51,155755,70],{"class":69},[51,155757,146840],{"class":61},[51,155759,155760,155762,155764],{"class":53,"line":202},[51,155761,15078],{"class":69},[51,155763,13948],{"class":69},[51,155765,155766],{"class":61}," \"一班\"\n",[10,155768,155769],{},"查看关键字：",[41,155771,155773],{"className":170,"code":155772,"language":172,"meta":46,"style":46},"import keyword\n\nprint(keyword.kwlist)\n",[48,155774,155775,155782,155786],{"__ignoreMap":46},[51,155776,155777,155779],{"class":53,"line":54},[51,155778,179],{"class":69},[51,155780,155781],{"class":65}," keyword\n",[51,155783,155784],{"class":53,"line":185},[51,155785,206],{"emptyLinePlaceholder":205},[51,155787,155788,155790],{"class":53,"line":202},[51,155789,30794],{"class":278},[51,155791,155792],{"class":65},"(keyword.kwlist)\n",[10,155794,155795],{},"推荐命名风格：",[41,155797,155799],{"className":170,"code":155798,"language":172,"meta":46,"style":46},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[48,155800,155801,155810,155820],{"__ignoreMap":46},[51,155802,155803,155806,155808],{"class":53,"line":54},[51,155804,155805],{"class":65},"student_name ",[51,155807,70],{"class":69},[51,155809,149652],{"class":61},[51,155811,155812,155815,155817],{"class":53,"line":185},[51,155813,155814],{"class":65},"total_price ",[51,155816,70],{"class":69},[51,155818,155819],{"class":278}," 99.8\n",[51,155821,155822,155825,155827],{"class":53,"line":202},[51,155823,155824],{"class":65},"is_finished ",[51,155826,70],{"class":69},[51,155828,389],{"class":278},[10,155830,155831],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[486,155833,51104],{"id":51103},[10,155835,104738,155836,155839],{},[48,155837,155838],{},"type()"," 查看数据类型：",[41,155841,155843],{"className":170,"code":155842,"language":172,"meta":46,"style":46},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[48,155844,155845,155859,155873,155887,155901],{"__ignoreMap":46},[51,155846,155847,155849,155851,155853,155855,155857],{"class":53,"line":54},[51,155848,30794],{"class":278},[51,155850,546],{"class":65},[51,155852,103479],{"class":278},[51,155854,546],{"class":65},[51,155856,853],{"class":278},[51,155858,30876],{"class":65},[51,155860,155861,155863,155865,155867,155869,155871],{"class":53,"line":185},[51,155862,30794],{"class":278},[51,155864,546],{"class":65},[51,155866,103479],{"class":278},[51,155868,546],{"class":65},[51,155870,592],{"class":278},[51,155872,30876],{"class":65},[51,155874,155875,155877,155879,155881,155883,155885],{"class":53,"line":202},[51,155876,30794],{"class":278},[51,155878,546],{"class":65},[51,155880,103479],{"class":278},[51,155882,546],{"class":65},[51,155884,6228],{"class":61},[51,155886,30876],{"class":65},[51,155888,155889,155891,155893,155895,155897,155899],{"class":53,"line":209},[51,155890,30794],{"class":278},[51,155892,546],{"class":65},[51,155894,103479],{"class":278},[51,155896,546],{"class":65},[51,155898,279],{"class":278},[51,155900,30876],{"class":65},[51,155902,155903,155905,155907,155909,155911,155913],{"class":53,"line":223},[51,155904,30794],{"class":278},[51,155906,546],{"class":65},[51,155908,103479],{"class":278},[51,155910,546],{"class":65},[51,155912,96058],{"class":278},[51,155914,30876],{"class":65},[10,155916,155917],{},"输出类似：",[41,155919,155922],{"className":155920,"code":155921,"language":5572,"meta":46},[5570],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[48,155923,155921],{"__ignoreMap":46},[10,155925,9409,155926,107655,155928,155930,155931,155933,155934,21883,155936,155933,155938,155940],{},[48,155927,1764],{},[48,155929,549],{}," 的子类，",[48,155932,279],{}," 可以当作 ",[48,155935,759],{},[48,155937,34362],{},[48,155939,733],{},"，但业务代码中不要滥用。",[41,155942,155944],{"className":170,"code":155943,"language":172,"meta":46,"style":46},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[48,155945,155946,155964],{"__ignoreMap":46},[51,155947,155948,155950,155952,155954,155956,155958,155961],{"class":53,"line":54},[51,155949,30794],{"class":278},[51,155951,546],{"class":65},[51,155953,279],{"class":278},[51,155955,45938],{"class":69},[51,155957,25500],{"class":278},[51,155959,155960],{"class":65},")   ",[51,155962,155963],{"class":601},"# 2\n",[51,155965,155966,155968,155970,155972,155974,155976,155978],{"class":53,"line":185},[51,155967,30794],{"class":278},[51,155969,546],{"class":65},[51,155971,34362],{"class":278},[51,155973,45938],{"class":69},[51,155975,25500],{"class":278},[51,155977,46180],{"class":65},[51,155979,155980],{"class":601},"# 1\n",[486,155982,155984],{"id":155983},"_26-类型转换","2.6 类型转换",[10,155986,155987],{},"常用转换函数：",[41,155989,155991],{"className":170,"code":155990,"language":172,"meta":46,"style":46},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[48,155992,155993,156003,156014,156024],{"__ignoreMap":46},[51,155994,155995,155997,155999,156001],{"class":53,"line":54},[51,155996,549],{"class":278},[51,155998,546],{"class":65},[51,156000,54688],{"class":61},[51,156002,282],{"class":65},[51,156004,156005,156007,156009,156012],{"class":53,"line":185},[51,156006,584],{"class":278},[51,156008,546],{"class":65},[51,156010,156011],{"class":61},"\"3.14\"",[51,156013,282],{"class":65},[51,156015,156016,156018,156020,156022],{"class":53,"line":202},[51,156017,1712],{"class":278},[51,156019,546],{"class":65},[51,156021,853],{"class":278},[51,156023,282],{"class":65},[51,156025,156026,156028,156030,156032],{"class":53,"line":209},[51,156027,1764],{"class":278},[51,156029,546],{"class":65},[51,156031,759],{"class":278},[51,156033,282],{"class":65},[10,156035,15519],{},[41,156037,156039],{"className":170,"code":156038,"language":172,"meta":46,"style":46},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[48,156040,156041,156050,156061],{"__ignoreMap":46},[51,156042,156043,156045,156047],{"class":53,"line":54},[51,156044,146845],{"class":65},[51,156046,70],{"class":69},[51,156048,156049],{"class":61}," \"18\"\n",[51,156051,156052,156054,156056,156058],{"class":53,"line":185},[51,156053,146845],{"class":65},[51,156055,70],{"class":69},[51,156057,2772],{"class":278},[51,156059,156060],{"class":65},"(age)\n",[51,156062,156063,156065,156068,156070,156072],{"class":53,"line":202},[51,156064,30794],{"class":278},[51,156066,156067],{"class":65},"(age ",[51,156069,1023],{"class":69},[51,156071,25500],{"class":278},[51,156073,282],{"class":65},[10,156075,156076],{},"输入得到的内容永远是字符串：",[41,156078,156080],{"className":170,"code":156079,"language":172,"meta":46,"style":46},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[48,156081,156082,156098],{"__ignoreMap":46},[51,156083,156084,156087,156089,156091,156093,156096],{"class":53,"line":54},[51,156085,156086],{"class":65},"num ",[51,156088,70],{"class":69},[51,156090,60977],{"class":278},[51,156092,546],{"class":65},[51,156094,156095],{"class":61},"\"请输入数字:\"",[51,156097,282],{"class":65},[51,156099,156100,156102,156104,156106,156109],{"class":53,"line":185},[51,156101,30794],{"class":278},[51,156103,546],{"class":65},[51,156105,103479],{"class":278},[51,156107,156108],{"class":65},"(num))  ",[51,156110,156111],{"class":601},"# str\n",[10,156113,156114],{},"如果要做数学运算，必须转换：",[41,156116,156118],{"className":170,"code":156117,"language":172,"meta":46,"style":46},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[48,156119,156120,156138],{"__ignoreMap":46},[51,156121,156122,156124,156126,156128,156130,156132,156134,156136],{"class":53,"line":54},[51,156123,156086],{"class":65},[51,156125,70],{"class":69},[51,156127,2772],{"class":278},[51,156129,546],{"class":65},[51,156131,54193],{"class":278},[51,156133,546],{"class":65},[51,156135,156095],{"class":61},[51,156137,30876],{"class":65},[51,156139,156140,156142,156144,156146,156148],{"class":53,"line":185},[51,156141,30794],{"class":278},[51,156143,45991],{"class":65},[51,156145,1023],{"class":69},[51,156147,2428],{"class":278},[51,156149,282],{"class":65},[10,156151,156152],{},"常见错误：",[41,156154,156156],{"className":170,"code":156155,"language":172,"meta":46,"style":46},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[48,156157,156158,156171],{"__ignoreMap":46},[51,156159,156160,156162,156164,156166,156168],{"class":53,"line":54},[51,156161,549],{"class":278},[51,156163,546],{"class":65},[51,156165,156011],{"class":61},[51,156167,155960],{"class":65},[51,156169,156170],{"class":601},"# 错误\n",[51,156172,156173,156175,156177,156180,156183],{"class":53,"line":185},[51,156174,549],{"class":278},[51,156176,546],{"class":65},[51,156178,156179],{"class":61},"\"abc\"",[51,156181,156182],{"class":65},")    ",[51,156184,156170],{"class":601},[10,156186,156187],{},"正确写法：",[41,156189,156191],{"className":170,"code":156190,"language":172,"meta":46,"style":46},"num = float(\"3.14\")\n",[48,156192,156193],{"__ignoreMap":46},[51,156194,156195,156197,156199,156201,156203,156205],{"class":53,"line":54},[51,156196,156086],{"class":65},[51,156198,70],{"class":69},[51,156200,110168],{"class":278},[51,156202,546],{"class":65},[51,156204,156011],{"class":61},[51,156206,282],{"class":65},[486,156208,156210],{"id":156209},"_27-运算符","2.7 运算符",[513,156212,156214],{"id":156213},"_271-算术运算符","2.7.1 算术运算符",[679,156216,156217,156228],{},[682,156218,156219],{},[685,156220,156221,156224,156226],{},[688,156222,156223],{},"运算符",[688,156225,26251],{},[688,156227,27874],{},[726,156229,156230,156244,156258,156272,156286,156300,156314],{},[685,156231,156232,156236,156239],{},[731,156233,156234],{},[48,156235,1023],{},[731,156237,156238],{},"加法",[731,156240,156241],{},[48,156242,156243],{},"1 + 2",[685,156245,156246,156250,156253],{},[731,156247,156248],{},[48,156249,1074],{},[731,156251,156252],{},"减法",[731,156254,156255],{},[48,156256,156257],{},"5 - 3",[685,156259,156260,156264,156267],{},[731,156261,156262],{},[48,156263,997],{},[731,156265,156266],{},"乘法",[731,156268,156269],{},[48,156270,156271],{},"2 * 3",[685,156273,156274,156278,156281],{},[731,156275,156276],{},[48,156277,1126],{},[731,156279,156280],{},"除法，结果是浮点数",[731,156282,156283],{},[48,156284,156285],{},"5 \u002F 2",[685,156287,156288,156292,156295],{},[731,156289,156290],{},[48,156291,33704],{},[731,156293,156294],{},"整除",[731,156296,156297],{},[48,156298,156299],{},"5 \u002F\u002F 2",[685,156301,156302,156306,156309],{},[731,156303,156304],{},[48,156305,870],{},[731,156307,156308],{},"取余",[731,156310,156311],{},[48,156312,156313],{},"5 % 2",[685,156315,156316,156320,156323],{},[731,156317,156318],{},[48,156319,11045],{},[731,156321,156322],{},"幂运算",[731,156324,156325],{},[48,156326,156327],{},"2 ** 3",[10,156329,15519],{},[41,156331,156333],{"className":170,"code":156332,"language":172,"meta":46,"style":46},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[48,156334,156335,156353,156370,156387],{"__ignoreMap":46},[51,156336,156337,156339,156341,156343,156346,156348,156350],{"class":53,"line":54},[51,156338,30794],{"class":278},[51,156340,546],{"class":65},[51,156342,861],{"class":278},[51,156344,156345],{"class":69}," \u002F",[51,156347,15139],{"class":278},[51,156349,155960],{"class":65},[51,156351,156352],{"class":601},"# 2.5\n",[51,156354,156355,156357,156359,156361,156364,156366,156368],{"class":53,"line":185},[51,156356,30794],{"class":278},[51,156358,546],{"class":65},[51,156360,861],{"class":278},[51,156362,156363],{"class":69}," \u002F\u002F",[51,156365,15139],{"class":278},[51,156367,46180],{"class":65},[51,156369,155963],{"class":601},[51,156371,156372,156374,156376,156378,156381,156383,156385],{"class":53,"line":202},[51,156373,30794],{"class":278},[51,156375,546],{"class":65},[51,156377,861],{"class":278},[51,156379,156380],{"class":69}," %",[51,156382,15139],{"class":278},[51,156384,155960],{"class":65},[51,156386,155980],{"class":601},[51,156388,156389,156391,156393,156395,156398,156400,156402],{"class":53,"line":209},[51,156390,30794],{"class":278},[51,156392,546],{"class":65},[51,156394,620],{"class":278},[51,156396,156397],{"class":69}," **",[51,156399,78442],{"class":278},[51,156401,46180],{"class":65},[51,156403,156404],{"class":601},"# 8\n",[513,156406,156408],{"id":156407},"_272-赋值运算符","2.7.2 赋值运算符",[41,156410,156412],{"className":170,"code":156411,"language":172,"meta":46,"style":46},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[48,156413,156414,156422,156430,156438,156446],{"__ignoreMap":46},[51,156415,156416,156418,156420],{"class":53,"line":54},[51,156417,156086],{"class":65},[51,156419,70],{"class":69},[51,156421,58800],{"class":278},[51,156423,156424,156426,156428],{"class":53,"line":185},[51,156425,156086],{"class":65},[51,156427,9861],{"class":69},[51,156429,54799],{"class":278},[51,156431,156432,156434,156436],{"class":53,"line":202},[51,156433,156086],{"class":65},[51,156435,150551],{"class":69},[51,156437,48095],{"class":278},[51,156439,156440,156442,156444],{"class":53,"line":209},[51,156441,156086],{"class":65},[51,156443,137447],{"class":69},[51,156445,120407],{"class":278},[51,156447,156448,156450,156453],{"class":53,"line":223},[51,156449,156086],{"class":65},[51,156451,156452],{"class":69},"\u002F=",[51,156454,48095],{"class":278},[10,156456,156457],{},"等价关系：",[41,156459,156461],{"className":170,"code":156460,"language":172,"meta":46,"style":46},"num += 1\nnum = num + 1\n",[48,156462,156463,156471],{"__ignoreMap":46},[51,156464,156465,156467,156469],{"class":53,"line":54},[51,156466,156086],{"class":65},[51,156468,9861],{"class":69},[51,156470,56071],{"class":278},[51,156472,156473,156475,156477,156480,156482],{"class":53,"line":185},[51,156474,156086],{"class":65},[51,156476,70],{"class":69},[51,156478,156479],{"class":65}," num ",[51,156481,1023],{"class":69},[51,156483,56071],{"class":278},[10,156485,156486,156487,101390,156490,28767],{},"Python 没有 ",[48,156488,156489],{},"num++",[48,156491,156492],{},"num--",[513,156494,156496],{"id":156495},"_273-比较运算符","2.7.3 比较运算符",[10,156498,156499],{},"比较运算结果是布尔值。",[41,156501,156503],{"className":170,"code":156502,"language":172,"meta":46,"style":46},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[48,156504,156505,156519,156534,156548],{"__ignoreMap":46},[51,156506,156507,156509,156511,156513,156515,156517],{"class":53,"line":54},[51,156508,30794],{"class":278},[51,156510,546],{"class":65},[51,156512,988],{"class":278},[51,156514,26604],{"class":69},[51,156516,2538],{"class":278},[51,156518,282],{"class":65},[51,156520,156521,156523,156525,156527,156530,156532],{"class":53,"line":185},[51,156522,30794],{"class":278},[51,156524,546],{"class":65},[51,156526,988],{"class":278},[51,156528,156529],{"class":69}," >=",[51,156531,2428],{"class":278},[51,156533,282],{"class":65},[51,156535,156536,156538,156540,156542,156544,156546],{"class":53,"line":202},[51,156537,30794],{"class":278},[51,156539,546],{"class":65},[51,156541,988],{"class":278},[51,156543,101931],{"class":69},[51,156545,2473],{"class":278},[51,156547,282],{"class":65},[51,156549,156550,156552,156554,156556,156559,156561],{"class":53,"line":209},[51,156551,30794],{"class":278},[51,156553,546],{"class":65},[51,156555,988],{"class":278},[51,156557,156558],{"class":69}," !=",[51,156560,2473],{"class":278},[51,156562,282],{"class":65},[10,156564,156565,156566,156568,156569,28767],{},"注意：判断相等用 ",[48,156567,375],{},"，赋值用 ",[48,156570,70],{},[41,156572,156574],{"className":170,"code":156573,"language":172,"meta":46,"style":46},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[48,156575,156576,156588],{"__ignoreMap":46},[51,156577,156578,156580,156582,156585],{"class":53,"line":54},[51,156579,146845],{"class":65},[51,156581,70],{"class":69},[51,156583,156584],{"class":278}," 18",[51,156586,156587],{"class":601},"       # 赋值\n",[51,156589,156590,156592,156594,156596],{"class":53,"line":185},[51,156591,146845],{"class":65},[51,156593,375],{"class":69},[51,156595,156584],{"class":278},[51,156597,156598],{"class":601},"      # 判断是否相等\n",[513,156600,156602],{"id":156601},"_274-逻辑运算符","2.7.4 逻辑运算符",[679,156604,156605,156613],{},[682,156606,156607],{},[685,156608,156609,156611],{},[688,156610,156223],{},[688,156612,26251],{},[726,156614,156615,156624,156633],{},[685,156616,156617,156621],{},[731,156618,156619],{},[48,156620,30841],{},[731,156622,156623],{},"并且",[685,156625,156626,156630],{},[731,156627,156628],{},[48,156629,115461],{},[731,156631,156632],{},"或者",[685,156634,156635,156640],{},[731,156636,156637],{},[48,156638,156639],{},"not",[731,156641,156642],{},"取反",[41,156644,156646],{"className":170,"code":156645,"language":172,"meta":46,"style":46},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[48,156647,156648,156656,156665,156669,156684,156698],{"__ignoreMap":46},[51,156649,156650,156652,156654],{"class":53,"line":54},[51,156651,146845],{"class":65},[51,156653,70],{"class":69},[51,156655,88437],{"class":278},[51,156657,156658,156661,156663],{"class":53,"line":185},[51,156659,156660],{"class":65},"has_ticket ",[51,156662,70],{"class":69},[51,156664,153898],{"class":278},[51,156666,156667],{"class":53,"line":202},[51,156668,206],{"emptyLinePlaceholder":205},[51,156670,156671,156673,156675,156677,156679,156681],{"class":53,"line":209},[51,156672,30794],{"class":278},[51,156674,156067],{"class":65},[51,156676,2108],{"class":69},[51,156678,156584],{"class":278},[51,156680,120800],{"class":69},[51,156682,156683],{"class":65}," has_ticket)\n",[51,156685,156686,156688,156690,156692,156694,156696],{"class":53,"line":223},[51,156687,30794],{"class":278},[51,156689,156067],{"class":65},[51,156691,1452],{"class":69},[51,156693,156584],{"class":278},[51,156695,114572],{"class":69},[51,156697,156683],{"class":65},[51,156699,156700,156702,156704,156706],{"class":53,"line":237},[51,156701,30794],{"class":278},[51,156703,546],{"class":65},[51,156705,156639],{"class":69},[51,156707,156683],{"class":65},[486,156709,156711],{"id":156710},"_28-字符串定义","2.8 字符串定义",[10,156713,156714],{},"三种常见写法：",[41,156716,156718],{"className":170,"code":156717,"language":172,"meta":46,"style":46},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[48,156719,156720,156730,156739,156749],{"__ignoreMap":46},[51,156721,156722,156725,156727],{"class":53,"line":54},[51,156723,156724],{"class":65},"name1 ",[51,156726,70],{"class":69},[51,156728,156729],{"class":61}," '小明'\n",[51,156731,156732,156735,156737],{"class":53,"line":185},[51,156733,156734],{"class":65},"name2 ",[51,156736,70],{"class":69},[51,156738,149652],{"class":61},[51,156740,156741,156744,156746],{"class":53,"line":202},[51,156742,156743],{"class":65},"text ",[51,156745,70],{"class":69},[51,156747,156748],{"class":61}," \"\"\"这是多行字符串\n",[51,156750,156751],{"class":53,"line":209},[51,156752,156753],{"class":61},"可以换行\"\"\"\n",[10,156755,156756],{},"字符串中包含引号：",[41,156758,156760],{"className":170,"code":156759,"language":172,"meta":46,"style":46},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[48,156761,156762,156772,156782],{"__ignoreMap":46},[51,156763,156764,156767,156769],{"class":53,"line":54},[51,156765,156766],{"class":65},"msg ",[51,156768,70],{"class":69},[51,156770,156771],{"class":61}," \"他说:'你好'\"\n",[51,156773,156774,156777,156779],{"class":53,"line":185},[51,156775,156776],{"class":65},"msg2 ",[51,156778,70],{"class":69},[51,156780,156781],{"class":61}," '他说:\"你好\"'\n",[51,156783,156784,156787,156789,156792,156795,156798,156800],{"class":53,"line":202},[51,156785,156786],{"class":65},"msg3 ",[51,156788,70],{"class":69},[51,156790,156791],{"class":61}," \"他说:",[51,156793,156794],{"class":278},"\\\"",[51,156796,156797],{"class":61},"你好",[51,156799,156794],{"class":278},[51,156801,25515],{"class":61},[10,156803,156804],{},"常见转义字符：",[679,156806,156807,156816],{},[682,156808,156809],{},[685,156810,156811,156814],{},[688,156812,156813],{},"写法",[688,156815,101072],{},[726,156817,156818,156828,156837,156847,156856],{},[685,156819,156820,156825],{},[731,156821,156822],{},[48,156823,156824],{},"\\n",[731,156826,156827],{},"换行",[685,156829,156830,156834],{},[731,156831,156832],{},[48,156833,1643],{},[731,156835,156836],{},"制表符",[685,156838,156839,156844],{},[731,156840,156841],{},[48,156842,156843],{},"\\\\",[731,156845,156846],{},"反斜杠",[685,156848,156849,156853],{},[731,156850,156851],{},[48,156852,156794],{},[731,156854,156855],{},"双引号",[685,156857,156858,156863],{},[731,156859,156860],{},[48,156861,156862],{},"\\'",[731,156864,156865],{},"单引号",[486,156867,156869],{"id":156868},"_29-字符串拼接","2.9 字符串拼接",[41,156871,156873],{"className":170,"code":156872,"language":172,"meta":46,"style":46},"name = \"小明\"\nprint(\"你好，\" + name)\n",[48,156874,156875,156883],{"__ignoreMap":46},[51,156876,156877,156879,156881],{"class":53,"line":54},[51,156878,146835],{"class":65},[51,156880,70],{"class":69},[51,156882,149652],{"class":61},[51,156884,156885,156887,156889,156892,156894],{"class":53,"line":185},[51,156886,30794],{"class":278},[51,156888,546],{"class":65},[51,156890,156891],{"class":61},"\"你好，\"",[51,156893,45938],{"class":69},[51,156895,156896],{"class":65}," name)\n",[10,156898,156899],{},"字符串只能和字符串拼接：",[41,156901,156903],{"className":170,"code":156902,"language":172,"meta":46,"style":46},"age = 18\nprint(\"年龄:\" + str(age))\n",[48,156904,156905,156913],{"__ignoreMap":46},[51,156906,156907,156909,156911],{"class":53,"line":54},[51,156908,146845],{"class":65},[51,156910,70],{"class":69},[51,156912,146850],{"class":278},[51,156914,156915,156917,156919,156921,156923,156925],{"class":53,"line":185},[51,156916,30794],{"class":278},[51,156918,546],{"class":65},[51,156920,146816],{"class":61},[51,156922,45938],{"class":69},[51,156924,74291],{"class":278},[51,156926,156927],{"class":65},"(age))\n",[10,156929,156930],{},"更推荐使用格式化字符串。",[486,156932,156934],{"id":156933},"_210-字符串格式化","2.10 字符串格式化",[513,156936,156938],{"id":156937},"_2101-百分号格式化","2.10.1 百分号格式化",[41,156940,156942],{"className":170,"code":156941,"language":172,"meta":46,"style":46},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[48,156943,156944,156952,156960,156969,156973],{"__ignoreMap":46},[51,156945,156946,156948,156950],{"class":53,"line":54},[51,156947,146835],{"class":65},[51,156949,70],{"class":69},[51,156951,149652],{"class":61},[51,156953,156954,156956,156958],{"class":53,"line":185},[51,156955,146845],{"class":65},[51,156957,70],{"class":69},[51,156959,146850],{"class":278},[51,156961,156962,156964,156966],{"class":53,"line":202},[51,156963,155657],{"class":65},[51,156965,70],{"class":69},[51,156967,156968],{"class":278}," 95.5\n",[51,156970,156971],{"class":53,"line":209},[51,156972,206],{"emptyLinePlaceholder":205},[51,156974,156975,156977,156979,156982,156985,156988,156991,156994,156997,156999,157001],{"class":53,"line":223},[51,156976,30794],{"class":278},[51,156978,546],{"class":65},[51,156980,156981],{"class":61},"\"姓名:",[51,156983,156984],{"class":278},"%s",[51,156986,156987],{"class":61}," 年龄:",[51,156989,156990],{"class":278},"%d",[51,156992,156993],{"class":61}," 分数:",[51,156995,156996],{"class":278},"%.1f",[51,156998,793],{"class":61},[51,157000,156380],{"class":69},[51,157002,157003],{"class":65}," (name, age, score))\n",[10,157005,157006],{},"常用占位符：",[679,157008,157009,157018],{},[682,157010,157011],{},[685,157012,157013,157016],{},[688,157014,157015],{},"占位符",[688,157017,26251],{},[726,157019,157020,157028,157036],{},[685,157021,157022,157026],{},[731,157023,157024],{},[48,157025,156984],{},[731,157027,155523],{},[685,157029,157030,157034],{},[731,157031,157032],{},[48,157033,156990],{},[731,157035,155501],{},[685,157037,157038,157043],{},[731,157039,157040],{},[48,157041,157042],{},"%f",[731,157044,155512],{},[10,157046,157047],{},"精度控制：",[41,157049,157051],{"className":170,"code":157050,"language":172,"meta":46,"style":46},"price = 12.3456\nprint(\"%.2f\" % price)\n",[48,157052,157053,157062],{"__ignoreMap":46},[51,157054,157055,157057,157059],{"class":53,"line":54},[51,157056,146980],{"class":65},[51,157058,70],{"class":69},[51,157060,157061],{"class":278}," 12.3456\n",[51,157063,157064,157066,157068,157070,157073,157075,157077],{"class":53,"line":185},[51,157065,30794],{"class":278},[51,157067,546],{"class":65},[51,157069,793],{"class":61},[51,157071,157072],{"class":278},"%.2f",[51,157074,793],{"class":61},[51,157076,156380],{"class":69},[51,157078,157079],{"class":65}," price)\n",[513,157081,157083],{"id":157082},"_2102-format方法","2.10.2 format方法",[41,157085,157087],{"className":170,"code":157086,"language":172,"meta":46,"style":46},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[48,157088,157089,157097,157105,157109,157128,157148],{"__ignoreMap":46},[51,157090,157091,157093,157095],{"class":53,"line":54},[51,157092,146835],{"class":65},[51,157094,70],{"class":69},[51,157096,149652],{"class":61},[51,157098,157099,157101,157103],{"class":53,"line":185},[51,157100,146845],{"class":65},[51,157102,70],{"class":69},[51,157104,146850],{"class":278},[51,157106,157107],{"class":53,"line":202},[51,157108,206],{"emptyLinePlaceholder":205},[51,157110,157111,157113,157115,157117,157119,157121,157123,157125],{"class":53,"line":209},[51,157112,30794],{"class":278},[51,157114,546],{"class":65},[51,157116,156981],{"class":61},[51,157118,32834],{"class":278},[51,157120,156987],{"class":61},[51,157122,32834],{"class":278},[51,157124,793],{"class":61},[51,157126,157127],{"class":65},".format(name, age))\n",[51,157129,157130,157132,157134,157136,157139,157141,157144,157146],{"class":53,"line":223},[51,157131,30794],{"class":278},[51,157133,546],{"class":65},[51,157135,156981],{"class":61},[51,157137,157138],{"class":278},"{0}",[51,157140,156987],{"class":61},[51,157142,157143],{"class":278},"{1}",[51,157145,793],{"class":61},[51,157147,157127],{"class":65},[51,157149,157150,157152,157154,157156,157159,157161,157164,157166,157169,157171,157173,157176,157178,157180],{"class":53,"line":237},[51,157151,30794],{"class":278},[51,157153,546],{"class":65},[51,157155,156981],{"class":61},[51,157157,157158],{"class":278},"{name}",[51,157160,156987],{"class":61},[51,157162,157163],{"class":278},"{age}",[51,157165,793],{"class":61},[51,157167,157168],{"class":65},".format(",[51,157170,80182],{"class":248},[51,157172,70],{"class":69},[51,157174,157175],{"class":65},"name, ",[51,157177,70593],{"class":248},[51,157179,70],{"class":69},[51,157181,157182],{"class":65},"age))\n",[513,157184,157186],{"id":157185},"_2103-f-string","2.10.3 f-string",[10,157188,157189],{},"推荐写法：",[41,157191,157193],{"className":170,"code":157192,"language":172,"meta":46,"style":46},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[48,157194,157195,157203,157211,157219,157223],{"__ignoreMap":46},[51,157196,157197,157199,157201],{"class":53,"line":54},[51,157198,146835],{"class":65},[51,157200,70],{"class":69},[51,157202,149652],{"class":61},[51,157204,157205,157207,157209],{"class":53,"line":185},[51,157206,146845],{"class":65},[51,157208,70],{"class":69},[51,157210,146850],{"class":278},[51,157212,157213,157215,157217],{"class":53,"line":202},[51,157214,155657],{"class":65},[51,157216,70],{"class":69},[51,157218,156968],{"class":278},[51,157220,157221],{"class":53,"line":209},[51,157222,206],{"emptyLinePlaceholder":205},[51,157224,157225,157227,157229,157231,157233,157235,157237,157239,157241,157243,157245,157247,157249,157251,157254,157257,157259,157261],{"class":53,"line":223},[51,157226,30794],{"class":278},[51,157228,546],{"class":65},[51,157230,595],{"class":69},[51,157232,156981],{"class":61},[51,157234,1438],{"class":278},[51,157236,80182],{"class":65},[51,157238,1488],{"class":278},[51,157240,156987],{"class":61},[51,157242,1438],{"class":278},[51,157244,70593],{"class":65},[51,157246,1488],{"class":278},[51,157248,156993],{"class":61},[51,157250,1438],{"class":278},[51,157252,157253],{"class":65},"score",[51,157255,157256],{"class":69},":.1f",[51,157258,1488],{"class":278},[51,157260,793],{"class":61},[51,157262,282],{"class":65},[10,157264,157265],{},"表达式也可以放进去：",[41,157267,157269],{"className":170,"code":157268,"language":172,"meta":46,"style":46},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[48,157270,157271,157279,157287],{"__ignoreMap":46},[51,157272,157273,157275,157277],{"class":53,"line":54},[51,157274,146980],{"class":65},[51,157276,70],{"class":69},[51,157278,146985],{"class":278},[51,157280,157281,157283,157285],{"class":53,"line":185},[51,157282,146990],{"class":65},[51,157284,70],{"class":69},[51,157286,54799],{"class":278},[51,157288,157289,157291,157293,157295,157298,157300,157302,157304,157307,157309,157312],{"class":53,"line":202},[51,157290,30794],{"class":278},[51,157292,546],{"class":65},[51,157294,595],{"class":69},[51,157296,157297],{"class":61},"\"总价:",[51,157299,1438],{"class":278},[51,157301,146980],{"class":65},[51,157303,997],{"class":69},[51,157305,157306],{"class":65}," count",[51,157308,1488],{"class":278},[51,157310,157311],{"class":61},"元\"",[51,157313,282],{"class":65},[486,157315,157317],{"id":157316},"_211-input输入","2.11 input输入",[10,157319,157320,157323],{},[48,157321,157322],{},"input()"," 会暂停程序，等待用户输入。",[41,157325,157327],{"className":170,"code":157326,"language":172,"meta":46,"style":46},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[48,157328,157329,157343],{"__ignoreMap":46},[51,157330,157331,157333,157335,157337,157339,157341],{"class":53,"line":54},[51,157332,146835],{"class":65},[51,157334,70],{"class":69},[51,157336,60977],{"class":278},[51,157338,546],{"class":65},[51,157340,152678],{"class":61},[51,157342,282],{"class":65},[51,157344,157345,157347,157349,157351,157354,157356,157358,157360,157362],{"class":53,"line":185},[51,157346,30794],{"class":278},[51,157348,546],{"class":65},[51,157350,595],{"class":69},[51,157352,157353],{"class":61},"\"你好，",[51,157355,1438],{"class":278},[51,157357,80182],{"class":65},[51,157359,1488],{"class":278},[51,157361,793],{"class":61},[51,157363,282],{"class":65},[10,157365,157366],{},"输入整数：",[41,157368,157370],{"className":170,"code":157369,"language":172,"meta":46,"style":46},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[48,157371,157372,157390],{"__ignoreMap":46},[51,157373,157374,157376,157378,157380,157382,157384,157386,157388],{"class":53,"line":54},[51,157375,146845],{"class":65},[51,157377,70],{"class":69},[51,157379,2772],{"class":278},[51,157381,546],{"class":65},[51,157383,54193],{"class":278},[51,157385,546],{"class":65},[51,157387,152693],{"class":61},[51,157389,30876],{"class":65},[51,157391,157392,157394,157396,157398,157401,157403,157405,157407,157410,157412],{"class":53,"line":185},[51,157393,30794],{"class":278},[51,157395,546],{"class":65},[51,157397,595],{"class":69},[51,157399,157400],{"class":61},"\"明年你",[51,157402,1438],{"class":278},[51,157404,146845],{"class":65},[51,157406,1023],{"class":69},[51,157408,157409],{"class":278}," 1}",[51,157411,149703],{"class":61},[51,157413,282],{"class":65},[10,157415,157416],{},"输入小数：",[41,157418,157420],{"className":170,"code":157419,"language":172,"meta":46,"style":46},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[48,157421,157422,157441],{"__ignoreMap":46},[51,157423,157424,157426,157428,157430,157432,157434,157436,157439],{"class":53,"line":54},[51,157425,155630],{"class":65},[51,157427,70],{"class":69},[51,157429,110168],{"class":278},[51,157431,546],{"class":65},[51,157433,54193],{"class":278},[51,157435,546],{"class":65},[51,157437,157438],{"class":61},"\"请输入身高:\"",[51,157440,30876],{"class":65},[51,157442,157443,157445,157447,157449,157452,157454,157456,157459,157461,157464],{"class":53,"line":185},[51,157444,30794],{"class":278},[51,157446,546],{"class":65},[51,157448,595],{"class":69},[51,157450,157451],{"class":61},"\"身高:",[51,157453,1438],{"class":278},[51,157455,25363],{"class":65},[51,157457,157458],{"class":69},":.2f",[51,157460,1488],{"class":278},[51,157462,157463],{"class":61},"米\"",[51,157465,282],{"class":65},[486,157467,157469],{"id":157468},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[10,157471,123663],{},[19,157473,157474,157477,157480,157483],{},[22,157475,157476],{},"输入商品单价。",[22,157478,157479],{},"输入购买数量。",[22,157481,157482],{},"输入折扣，例如 0.8 表示八折。",[22,157484,157485],{},"输出最终金额，保留两位小数。",[10,157487,10419],{},[41,157489,157491],{"className":170,"code":157490,"language":172,"meta":46,"style":46},"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",[48,157492,157493,157512,157531,157551,157555,157575,157579,157602,157623,157645],{"__ignoreMap":46},[51,157494,157495,157497,157499,157501,157503,157505,157507,157510],{"class":53,"line":54},[51,157496,146980],{"class":65},[51,157498,70],{"class":69},[51,157500,110168],{"class":278},[51,157502,546],{"class":65},[51,157504,54193],{"class":278},[51,157506,546],{"class":65},[51,157508,157509],{"class":61},"\"请输入商品单价:\"",[51,157511,30876],{"class":65},[51,157513,157514,157516,157518,157520,157522,157524,157526,157529],{"class":53,"line":185},[51,157515,146990],{"class":65},[51,157517,70],{"class":69},[51,157519,2772],{"class":278},[51,157521,546],{"class":65},[51,157523,54193],{"class":278},[51,157525,546],{"class":65},[51,157527,157528],{"class":61},"\"请输入购买数量:\"",[51,157530,30876],{"class":65},[51,157532,157533,157536,157538,157540,157542,157544,157546,157549],{"class":53,"line":202},[51,157534,157535],{"class":65},"discount ",[51,157537,70],{"class":69},[51,157539,110168],{"class":278},[51,157541,546],{"class":65},[51,157543,54193],{"class":278},[51,157545,546],{"class":65},[51,157547,157548],{"class":61},"\"请输入折扣:\"",[51,157550,30876],{"class":65},[51,157552,157553],{"class":53,"line":209},[51,157554,206],{"emptyLinePlaceholder":205},[51,157556,157557,157560,157562,157565,157567,157570,157572],{"class":53,"line":223},[51,157558,157559],{"class":65},"total ",[51,157561,70],{"class":69},[51,157563,157564],{"class":65}," price ",[51,157566,997],{"class":69},[51,157568,157569],{"class":65}," count ",[51,157571,997],{"class":69},[51,157573,157574],{"class":65}," discount\n",[51,157576,157577],{"class":53,"line":237},[51,157578,206],{"emptyLinePlaceholder":205},[51,157580,157581,157583,157585,157587,157590,157592,157594,157596,157598,157600],{"class":53,"line":242},[51,157582,30794],{"class":278},[51,157584,546],{"class":65},[51,157586,595],{"class":69},[51,157588,157589],{"class":61},"\"商品单价:",[51,157591,1438],{"class":278},[51,157593,80187],{"class":65},[51,157595,157458],{"class":69},[51,157597,1488],{"class":278},[51,157599,793],{"class":61},[51,157601,282],{"class":65},[51,157603,157604,157606,157608,157610,157613,157615,157617,157619,157621],{"class":53,"line":257},[51,157605,30794],{"class":278},[51,157607,546],{"class":65},[51,157609,595],{"class":69},[51,157611,157612],{"class":61},"\"购买数量:",[51,157614,1438],{"class":278},[51,157616,84806],{"class":65},[51,157618,1488],{"class":278},[51,157620,793],{"class":61},[51,157622,282],{"class":65},[51,157624,157625,157627,157629,157631,157634,157636,157639,157641,157643],{"class":53,"line":262},[51,157626,30794],{"class":278},[51,157628,546],{"class":65},[51,157630,595],{"class":69},[51,157632,157633],{"class":61},"\"折扣:",[51,157635,1438],{"class":278},[51,157637,157638],{"class":65},"discount",[51,157640,1488],{"class":278},[51,157642,793],{"class":61},[51,157644,282],{"class":65},[51,157646,157647,157649,157651,157653,157656,157658,157661,157663,157665,157667],{"class":53,"line":285},[51,157648,30794],{"class":278},[51,157650,546],{"class":65},[51,157652,595],{"class":69},[51,157654,157655],{"class":61},"\"应付金额:",[51,157657,1438],{"class":278},[51,157659,157660],{"class":65},"total",[51,157662,157458],{"class":69},[51,157664,1488],{"class":278},[51,157666,157311],{"class":61},[51,157668,282],{"class":65},[486,157670,157672],{"id":157671},"_213-易错点","2.13 易错点",[19,157674,157675,157680,157686,157694,157697],{},[22,157676,157677,157679],{},[48,157678,157322],{}," 的结果是字符串，做运算前要转换。",[22,157681,157682,157683,28767],{},"字符串拼接时，数字要先 ",[48,157684,157685],{},"str()",[22,157687,157688,157690,157691,157693],{},[48,157689,70],{}," 是赋值，",[48,157692,375],{}," 是比较。",[22,157695,157696],{},"Python 没有自增自减运算符。",[22,157698,157699],{},"浮点数计算可能有精度误差：",[41,157701,157703],{"className":170,"code":157702,"language":172,"meta":46,"style":46},"print(0.1 + 0.2)\n",[48,157704,157705],{"__ignoreMap":46},[51,157706,157707,157709,157711,157713,157715,157718],{"class":53,"line":54},[51,157708,30794],{"class":278},[51,157710,546],{"class":65},[51,157712,86582],{"class":278},[51,157714,45938],{"class":69},[51,157716,157717],{"class":278}," 0.2",[51,157719,282],{"class":65},[10,157721,157722,157723,157726],{},"金额计算如果要求严格，可以后续学习 ",[48,157724,157725],{},"decimal"," 模块。",[486,157728,157730],{"id":157729},"_214-本章练习","2.14 本章练习",[19,157732,157733,157736,157739,157742,157745],{},[22,157734,157735],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[22,157737,157738],{},"输入圆的半径，计算面积，保留两位小数。",[22,157740,157741],{},"输入工资和奖金，计算总收入。",[22,157743,157744],{},"输入摄氏温度，转换为华氏温度。",[22,157746,157747],{},"写一个 BMI 计算程序：",[41,157749,157752],{"className":157750,"code":157751,"language":5572,"meta":46},[5570],"BMI = 体重kg \u002F 身高m ** 2\n",[48,157753,157751],{"__ignoreMap":46},[464,157755,157756],{},"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":46,"searchDepth":185,"depth":185,"links":157758},[157759,157760,157761,157762,157763,157764,157765,157771,157772,157773,157778,157779,157780,157781],{"id":155320,"depth":185,"text":155321},{"id":155429,"depth":185,"text":155430},{"id":155600,"depth":185,"text":155601},{"id":155677,"depth":185,"text":155678},{"id":51103,"depth":185,"text":51104},{"id":155983,"depth":185,"text":155984},{"id":156209,"depth":185,"text":156210,"children":157766},[157767,157768,157769,157770],{"id":156213,"depth":202,"text":156214},{"id":156407,"depth":202,"text":156408},{"id":156495,"depth":202,"text":156496},{"id":156601,"depth":202,"text":156602},{"id":156710,"depth":185,"text":156711},{"id":156868,"depth":185,"text":156869},{"id":156933,"depth":185,"text":156934,"children":157774},[157775,157776,157777],{"id":156937,"depth":202,"text":156938},{"id":157082,"depth":202,"text":157083},{"id":157185,"depth":202,"text":157186},{"id":157316,"depth":185,"text":157317},{"id":157468,"depth":185,"text":157469},{"id":157671,"depth":185,"text":157672},{"id":157729,"depth":185,"text":157730},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155312,"description":23760},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157788,"title":157789,"body":157790,"description":23760,"extension":469,"meta":159426,"navigation":205,"path":159427,"seo":159428,"stem":159429,"__hash__":159430},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157791,"toc":159407},[157792,157795,157799,157802,157817,157820,157848,157852,157902,157904,157920,157923,157949,157952,157956,158023,158026,158042,158046,158049,158167,158170,158177,158226,158232,158236,158239,158352,158355,158359,158363,158366,158416,158420,158423,158473,158477,158480,158518,158522,158525,158571,158574,158609,158613,158618,158621,158667,158669,158736,158740,158746,158857,158866,158870,158872,158883,158885,159051,159055,159057,159071,159073,159287,159291,159310,159327,159330,159376,159380,159404],[14,157793,157789],{"id":157794},"_3-判断语句",[486,157796,157798],{"id":157797},"_31-布尔值","3.1 布尔值",[10,157800,157801],{},"判断语句依赖布尔值：",[41,157803,157805],{"className":170,"code":157804,"language":172,"meta":46,"style":46},"True\nFalse\n",[48,157806,157807,157812],{"__ignoreMap":46},[51,157808,157809],{"class":53,"line":54},[51,157810,157811],{"class":278},"True\n",[51,157813,157814],{"class":53,"line":185},[51,157815,157816],{"class":278},"False\n",[10,157818,157819],{},"比较表达式会产生布尔值：",[41,157821,157823],{"className":170,"code":157822,"language":172,"meta":46,"style":46},"age = 18\nprint(age >= 18)  # True\n",[48,157824,157825,157833],{"__ignoreMap":46},[51,157826,157827,157829,157831],{"class":53,"line":54},[51,157828,146845],{"class":65},[51,157830,70],{"class":69},[51,157832,146850],{"class":278},[51,157834,157835,157837,157839,157841,157843,157845],{"class":53,"line":185},[51,157836,30794],{"class":278},[51,157838,156067],{"class":65},[51,157840,2108],{"class":69},[51,157842,156584],{"class":278},[51,157844,46180],{"class":65},[51,157846,157847],{"class":601},"# True\n",[486,157849,157851],{"id":157850},"_32-if基础语法","3.2 if基础语法",[41,157853,157855],{"className":170,"code":157854,"language":172,"meta":46,"style":46},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[48,157856,157857,157875,157879,157891],{"__ignoreMap":46},[51,157858,157859,157861,157863,157865,157867,157869,157871,157873],{"class":53,"line":54},[51,157860,146845],{"class":65},[51,157862,70],{"class":69},[51,157864,2772],{"class":278},[51,157866,546],{"class":65},[51,157868,54193],{"class":278},[51,157870,546],{"class":65},[51,157872,152693],{"class":61},[51,157874,30876],{"class":65},[51,157876,157877],{"class":53,"line":185},[51,157878,206],{"emptyLinePlaceholder":205},[51,157880,157881,157883,157885,157887,157889],{"class":53,"line":202},[51,157882,1940],{"class":69},[51,157884,16091],{"class":65},[51,157886,2108],{"class":69},[51,157888,156584],{"class":278},[51,157890,363],{"class":65},[51,157892,157893,157895,157897,157900],{"class":53,"line":209},[51,157894,31677],{"class":278},[51,157896,546],{"class":65},[51,157898,157899],{"class":61},"\"可以进入网吧\"",[51,157901,282],{"class":65},[10,157903,9409],{},[19,157905,157906,157911,157914,157917],{},[22,157907,157908,157910],{},[48,157909,1940],{}," 后面是条件表达式。",[22,157912,157913],{},"条件后面必须写冒号。",[22,157915,157916],{},"条件成立时执行缩进代码块。",[22,157918,157919],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[10,157921,157922],{},"错误示例：",[41,157924,157926],{"className":170,"code":157925,"language":172,"meta":46,"style":46},"if age >= 18\n    print(\"可以进入\")\n",[48,157927,157928,157938],{"__ignoreMap":46},[51,157929,157930,157932,157934,157936],{"class":53,"line":54},[51,157931,1940],{"class":69},[51,157933,16091],{"class":65},[51,157935,2108],{"class":69},[51,157937,146850],{"class":278},[51,157939,157940,157942,157944,157947],{"class":53,"line":185},[51,157941,31677],{"class":278},[51,157943,546],{"class":65},[51,157945,157946],{"class":61},"\"可以进入\"",[51,157948,282],{"class":65},[10,157950,157951],{},"缺少冒号。",[486,157953,157955],{"id":157954},"_33-if-else","3.3 if else",[41,157957,157959],{"className":170,"code":157958,"language":172,"meta":46,"style":46},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[48,157960,157961,157979,157983,157995,158006,158012],{"__ignoreMap":46},[51,157962,157963,157965,157967,157969,157971,157973,157975,157977],{"class":53,"line":54},[51,157964,146845],{"class":65},[51,157966,70],{"class":69},[51,157968,2772],{"class":278},[51,157970,546],{"class":65},[51,157972,54193],{"class":278},[51,157974,546],{"class":65},[51,157976,152693],{"class":61},[51,157978,30876],{"class":65},[51,157980,157981],{"class":53,"line":185},[51,157982,206],{"emptyLinePlaceholder":205},[51,157984,157985,157987,157989,157991,157993],{"class":53,"line":202},[51,157986,1940],{"class":69},[51,157988,16091],{"class":65},[51,157990,2108],{"class":69},[51,157992,156584],{"class":278},[51,157994,363],{"class":65},[51,157996,157997,157999,158001,158004],{"class":53,"line":209},[51,157998,31677],{"class":278},[51,158000,546],{"class":65},[51,158002,158003],{"class":61},"\"成年人\"",[51,158005,282],{"class":65},[51,158007,158008,158010],{"class":53,"line":223},[51,158009,2099],{"class":69},[51,158011,363],{"class":65},[51,158013,158014,158016,158018,158021],{"class":53,"line":237},[51,158015,31677],{"class":278},[51,158017,546],{"class":65},[51,158019,158020],{"class":61},"\"未成年人\"",[51,158022,282],{"class":65},[10,158024,158025],{},"执行逻辑：",[19,158027,158028,158034,158039],{},[22,158029,158030,158031,158033],{},"条件成立，执行 ",[48,158032,1940],{}," 代码块。",[22,158035,158036,158037,158033],{},"条件不成立，执行 ",[48,158038,2099],{},[22,158040,158041],{},"两个代码块只会执行其中一个。",[486,158043,158045],{"id":158044},"_34-if-elif-else","3.4 if elif else",[10,158047,158048],{},"多条件判断：",[41,158050,158052],{"className":170,"code":158051,"language":172,"meta":46,"style":46},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[48,158053,158054,158072,158076,158090,158101,158115,158126,158139,158150,158156],{"__ignoreMap":46},[51,158055,158056,158058,158060,158062,158064,158066,158068,158070],{"class":53,"line":54},[51,158057,155657],{"class":65},[51,158059,70],{"class":69},[51,158061,2772],{"class":278},[51,158063,546],{"class":65},[51,158065,54193],{"class":278},[51,158067,546],{"class":65},[51,158069,152708],{"class":61},[51,158071,30876],{"class":65},[51,158073,158074],{"class":53,"line":185},[51,158075,206],{"emptyLinePlaceholder":205},[51,158077,158078,158080,158083,158085,158088],{"class":53,"line":202},[51,158079,1940],{"class":69},[51,158081,158082],{"class":65}," score ",[51,158084,2108],{"class":69},[51,158086,158087],{"class":278}," 90",[51,158089,363],{"class":65},[51,158091,158092,158094,158096,158099],{"class":53,"line":209},[51,158093,31677],{"class":278},[51,158095,546],{"class":65},[51,158097,158098],{"class":61},"\"优秀\"",[51,158100,282],{"class":65},[51,158102,158103,158106,158108,158110,158113],{"class":53,"line":223},[51,158104,158105],{"class":69},"elif",[51,158107,158082],{"class":65},[51,158109,2108],{"class":69},[51,158111,158112],{"class":278}," 80",[51,158114,363],{"class":65},[51,158116,158117,158119,158121,158124],{"class":53,"line":237},[51,158118,31677],{"class":278},[51,158120,546],{"class":65},[51,158122,158123],{"class":61},"\"良好\"",[51,158125,282],{"class":65},[51,158127,158128,158130,158132,158134,158137],{"class":53,"line":242},[51,158129,158105],{"class":69},[51,158131,158082],{"class":65},[51,158133,2108],{"class":69},[51,158135,158136],{"class":278}," 60",[51,158138,363],{"class":65},[51,158140,158141,158143,158145,158148],{"class":53,"line":257},[51,158142,31677],{"class":278},[51,158144,546],{"class":65},[51,158146,158147],{"class":61},"\"及格\"",[51,158149,282],{"class":65},[51,158151,158152,158154],{"class":53,"line":262},[51,158153,2099],{"class":69},[51,158155,363],{"class":65},[51,158157,158158,158160,158162,158165],{"class":53,"line":285},[51,158159,31677],{"class":278},[51,158161,546],{"class":65},[51,158163,158164],{"class":61},"\"不及格\"",[51,158166,282],{"class":65},[10,158168,158169],{},"注意判断顺序很重要。",[10,158171,158172,158173,158176],{},"如果把 ",[48,158174,158175],{},"score >= 60"," 放在最前面：",[41,158178,158180],{"className":170,"code":158179,"language":172,"meta":46,"style":46},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[48,158181,158182,158194,158204,158216],{"__ignoreMap":46},[51,158183,158184,158186,158188,158190,158192],{"class":53,"line":54},[51,158185,1940],{"class":69},[51,158187,158082],{"class":65},[51,158189,2108],{"class":69},[51,158191,158136],{"class":278},[51,158193,363],{"class":65},[51,158195,158196,158198,158200,158202],{"class":53,"line":185},[51,158197,31677],{"class":278},[51,158199,546],{"class":65},[51,158201,158147],{"class":61},[51,158203,282],{"class":65},[51,158205,158206,158208,158210,158212,158214],{"class":53,"line":202},[51,158207,158105],{"class":69},[51,158209,158082],{"class":65},[51,158211,2108],{"class":69},[51,158213,158087],{"class":278},[51,158215,363],{"class":65},[51,158217,158218,158220,158222,158224],{"class":53,"line":209},[51,158219,31677],{"class":278},[51,158221,546],{"class":65},[51,158223,158098],{"class":61},[51,158225,282],{"class":65},[10,158227,158228,158229,158231],{},"成绩 95 会先满足 ",[48,158230,158175],{},"，后面的优秀分支就不会执行。",[486,158233,158235],{"id":158234},"_35-判断语句嵌套","3.5 判断语句嵌套",[10,158237,158238],{},"嵌套判断就是在一个判断内部再写判断。",[41,158240,158242],{"className":170,"code":158241,"language":172,"meta":46,"style":46},"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",[48,158243,158244,158262,158277,158281,158293,158307,158317,158324,158335,158341],{"__ignoreMap":46},[51,158245,158246,158248,158250,158252,158254,158256,158258,158260],{"class":53,"line":54},[51,158247,146845],{"class":65},[51,158249,70],{"class":69},[51,158251,2772],{"class":278},[51,158253,546],{"class":65},[51,158255,54193],{"class":278},[51,158257,546],{"class":65},[51,158259,152693],{"class":61},[51,158261,30876],{"class":65},[51,158263,158264,158266,158268,158270,158272,158275],{"class":53,"line":185},[51,158265,156660],{"class":65},[51,158267,70],{"class":69},[51,158269,60977],{"class":278},[51,158271,546],{"class":65},[51,158273,158274],{"class":61},"\"是否有票(y\u002Fn):\"",[51,158276,282],{"class":65},[51,158278,158279],{"class":53,"line":202},[51,158280,206],{"emptyLinePlaceholder":205},[51,158282,158283,158285,158287,158289,158291],{"class":53,"line":209},[51,158284,1940],{"class":69},[51,158286,16091],{"class":65},[51,158288,2108],{"class":69},[51,158290,156584],{"class":278},[51,158292,363],{"class":65},[51,158294,158295,158297,158300,158302,158305],{"class":53,"line":223},[51,158296,3488],{"class":69},[51,158298,158299],{"class":65}," has_ticket ",[51,158301,375],{"class":69},[51,158303,158304],{"class":61}," \"y\"",[51,158306,363],{"class":65},[51,158308,158309,158311,158313,158315],{"class":53,"line":237},[51,158310,32826],{"class":278},[51,158312,546],{"class":65},[51,158314,157946],{"class":61},[51,158316,282],{"class":65},[51,158318,158319,158322],{"class":53,"line":242},[51,158320,158321],{"class":69},"    else",[51,158323,363],{"class":65},[51,158325,158326,158328,158330,158333],{"class":53,"line":257},[51,158327,32826],{"class":278},[51,158329,546],{"class":65},[51,158331,158332],{"class":61},"\"请先买票\"",[51,158334,282],{"class":65},[51,158336,158337,158339],{"class":53,"line":262},[51,158338,2099],{"class":69},[51,158340,363],{"class":65},[51,158342,158343,158345,158347,158350],{"class":53,"line":285},[51,158344,31677],{"class":278},[51,158346,546],{"class":65},[51,158348,158349],{"class":61},"\"未成年人禁止进入\"",[51,158351,282],{"class":65},[10,158353,158354],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[486,158356,158358],{"id":158357},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[513,158360,158362],{"id":158361},"_361-and","3.6.1 and",[10,158364,158365],{},"两个条件都成立才成立。",[41,158367,158369],{"className":170,"code":158368,"language":172,"meta":46,"style":46},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[48,158370,158371,158379,158387,158391,158406],{"__ignoreMap":46},[51,158372,158373,158375,158377],{"class":53,"line":54},[51,158374,146845],{"class":65},[51,158376,70],{"class":69},[51,158378,88437],{"class":278},[51,158380,158381,158383,158385],{"class":53,"line":185},[51,158382,156660],{"class":65},[51,158384,70],{"class":69},[51,158386,153898],{"class":278},[51,158388,158389],{"class":53,"line":202},[51,158390,206],{"emptyLinePlaceholder":205},[51,158392,158393,158395,158397,158399,158401,158403],{"class":53,"line":209},[51,158394,1940],{"class":69},[51,158396,16091],{"class":65},[51,158398,2108],{"class":69},[51,158400,156584],{"class":278},[51,158402,120800],{"class":69},[51,158404,158405],{"class":65}," has_ticket:\n",[51,158407,158408,158410,158412,158414],{"class":53,"line":223},[51,158409,31677],{"class":278},[51,158411,546],{"class":65},[51,158413,157946],{"class":61},[51,158415,282],{"class":65},[513,158417,158419],{"id":158418},"_362-or","3.6.2 or",[10,158421,158422],{},"只要一个条件成立就成立。",[41,158424,158426],{"className":170,"code":158425,"language":172,"meta":46,"style":46},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[48,158427,158428,158437,158446,158450,158462],{"__ignoreMap":46},[51,158429,158430,158433,158435],{"class":53,"line":54},[51,158431,158432],{"class":65},"is_vip ",[51,158434,70],{"class":69},[51,158436,389],{"class":278},[51,158438,158439,158442,158444],{"class":53,"line":185},[51,158440,158441],{"class":65},"coupon ",[51,158443,70],{"class":69},[51,158445,153898],{"class":278},[51,158447,158448],{"class":53,"line":202},[51,158449,206],{"emptyLinePlaceholder":205},[51,158451,158452,158454,158457,158459],{"class":53,"line":209},[51,158453,1940],{"class":69},[51,158455,158456],{"class":65}," is_vip ",[51,158458,115461],{"class":69},[51,158460,158461],{"class":65}," coupon:\n",[51,158463,158464,158466,158468,158471],{"class":53,"line":223},[51,158465,31677],{"class":278},[51,158467,546],{"class":65},[51,158469,158470],{"class":61},"\"可以享受优惠\"",[51,158472,282],{"class":65},[513,158474,158476],{"id":158475},"_363-not","3.6.3 not",[10,158478,158479],{},"取反。",[41,158481,158483],{"className":170,"code":158482,"language":172,"meta":46,"style":46},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[48,158484,158485,158494,158498,158507],{"__ignoreMap":46},[51,158486,158487,158490,158492],{"class":53,"line":54},[51,158488,158489],{"class":65},"is_closed ",[51,158491,70],{"class":69},[51,158493,389],{"class":278},[51,158495,158496],{"class":53,"line":185},[51,158497,206],{"emptyLinePlaceholder":205},[51,158499,158500,158502,158504],{"class":53,"line":202},[51,158501,1940],{"class":69},[51,158503,39304],{"class":69},[51,158505,158506],{"class":65}," is_closed:\n",[51,158508,158509,158511,158513,158516],{"class":53,"line":209},[51,158510,31677],{"class":278},[51,158512,546],{"class":65},[51,158514,158515],{"class":61},"\"店铺营业中\"",[51,158517,282],{"class":65},[486,158519,158521],{"id":158520},"_37-链式比较","3.7 链式比较",[10,158523,158524],{},"Python 支持链式比较：",[41,158526,158528],{"className":170,"code":158527,"language":172,"meta":46,"style":46},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[48,158529,158530,158539,158543,158560],{"__ignoreMap":46},[51,158531,158532,158534,158536],{"class":53,"line":54},[51,158533,155657],{"class":65},[51,158535,70],{"class":69},[51,158537,158538],{"class":278}," 85\n",[51,158540,158541],{"class":53,"line":185},[51,158542,206],{"emptyLinePlaceholder":205},[51,158544,158545,158547,158549,158552,158554,158556,158558],{"class":53,"line":202},[51,158546,1940],{"class":69},[51,158548,4479],{"class":278},[51,158550,158551],{"class":69}," \u003C=",[51,158553,158082],{"class":65},[51,158555,1997],{"class":69},[51,158557,6138],{"class":278},[51,158559,363],{"class":65},[51,158561,158562,158564,158566,158569],{"class":53,"line":209},[51,158563,31677],{"class":278},[51,158565,546],{"class":65},[51,158567,158568],{"class":61},"\"成绩合法\"",[51,158570,282],{"class":65},[10,158572,158573],{},"等价于：",[41,158575,158577],{"className":170,"code":158576,"language":172,"meta":46,"style":46},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[48,158578,158579,158599],{"__ignoreMap":46},[51,158580,158581,158583,158585,158587,158589,158591,158593,158595,158597],{"class":53,"line":54},[51,158582,1940],{"class":69},[51,158584,158082],{"class":65},[51,158586,2108],{"class":69},[51,158588,4479],{"class":278},[51,158590,120800],{"class":69},[51,158592,158082],{"class":65},[51,158594,1997],{"class":69},[51,158596,6138],{"class":278},[51,158598,363],{"class":65},[51,158600,158601,158603,158605,158607],{"class":53,"line":185},[51,158602,31677],{"class":278},[51,158604,546],{"class":65},[51,158606,158568],{"class":61},[51,158608,282],{"class":65},[486,158610,158612],{"id":158611},"_38-真值和假值","3.8 真值和假值",[10,158614,116838,158615,158617],{},[48,158616,1940],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[10,158619,158620],{},"假值：",[41,158622,158624],{"className":170,"code":158623,"language":172,"meta":46,"style":46},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[48,158625,158626,158630,158635,158639,158643,158648,158652,158656,158661],{"__ignoreMap":46},[51,158627,158628],{"class":53,"line":54},[51,158629,157816],{"class":278},[51,158631,158632],{"class":53,"line":185},[51,158633,158634],{"class":278},"None\n",[51,158636,158637],{"class":53,"line":202},[51,158638,3472],{"class":278},[51,158640,158641],{"class":53,"line":209},[51,158642,32717],{"class":278},[51,158644,158645],{"class":53,"line":223},[51,158646,158647],{"class":61},"\"\"\n",[51,158649,158650],{"class":53,"line":237},[51,158651,32732],{"class":65},[51,158653,158654],{"class":53,"line":242},[51,158655,2366],{"class":65},[51,158657,158658],{"class":53,"line":257},[51,158659,158660],{"class":65},"{}\n",[51,158662,158663,158665],{"class":53,"line":262},[51,158664,155589],{"class":278},[51,158666,2366],{"class":65},[10,158668,15519],{},[41,158670,158672],{"className":170,"code":158671,"language":172,"meta":46,"style":46},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[48,158673,158674,158688,158692,158699,158719,158725],{"__ignoreMap":46},[51,158675,158676,158678,158680,158682,158684,158686],{"class":53,"line":54},[51,158677,146835],{"class":65},[51,158679,70],{"class":69},[51,158681,60977],{"class":278},[51,158683,546],{"class":65},[51,158685,152678],{"class":61},[51,158687,282],{"class":65},[51,158689,158690],{"class":53,"line":185},[51,158691,206],{"emptyLinePlaceholder":205},[51,158693,158694,158696],{"class":53,"line":202},[51,158695,1940],{"class":69},[51,158697,158698],{"class":65}," name:\n",[51,158700,158701,158703,158705,158707,158709,158711,158713,158715,158717],{"class":53,"line":209},[51,158702,31677],{"class":278},[51,158704,546],{"class":65},[51,158706,595],{"class":69},[51,158708,157353],{"class":61},[51,158710,1438],{"class":278},[51,158712,80182],{"class":65},[51,158714,1488],{"class":278},[51,158716,793],{"class":61},[51,158718,282],{"class":65},[51,158720,158721,158723],{"class":53,"line":223},[51,158722,2099],{"class":69},[51,158724,363],{"class":65},[51,158726,158727,158729,158731,158734],{"class":53,"line":237},[51,158728,31677],{"class":278},[51,158730,546],{"class":65},[51,158732,158733],{"class":61},"\"姓名不能为空\"",[51,158735,282],{"class":65},[486,158737,158739],{"id":158738},"_39-match语句","3.9 match语句",[10,158741,158742,158743,158745],{},"Python 3.10 开始支持 ",[48,158744,71637],{},"。它适合处理固定选项。",[41,158747,158749],{"className":170,"code":158748,"language":172,"meta":46,"style":46},"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",[48,158750,158751,158767,158771,158778,158788,158799,158808,158819,158828,158839,158846],{"__ignoreMap":46},[51,158752,158753,158756,158758,158760,158762,158765],{"class":53,"line":54},[51,158754,158755],{"class":65},"command ",[51,158757,70],{"class":69},[51,158759,60977],{"class":278},[51,158761,546],{"class":65},[51,158763,158764],{"class":61},"\"请输入命令:\"",[51,158766,282],{"class":65},[51,158768,158769],{"class":53,"line":185},[51,158770,206],{"emptyLinePlaceholder":205},[51,158772,158773,158775],{"class":53,"line":202},[51,158774,71637],{"class":69},[51,158776,158777],{"class":65}," command:\n",[51,158779,158780,158783,158786],{"class":53,"line":209},[51,158781,158782],{"class":69},"    case",[51,158784,158785],{"class":61}," \"start\"",[51,158787,363],{"class":65},[51,158789,158790,158792,158794,158797],{"class":53,"line":223},[51,158791,32826],{"class":278},[51,158793,546],{"class":65},[51,158795,158796],{"class":61},"\"启动\"",[51,158798,282],{"class":65},[51,158800,158801,158803,158806],{"class":53,"line":237},[51,158802,158782],{"class":69},[51,158804,158805],{"class":61}," \"stop\"",[51,158807,363],{"class":65},[51,158809,158810,158812,158814,158817],{"class":53,"line":242},[51,158811,32826],{"class":278},[51,158813,546],{"class":65},[51,158815,158816],{"class":61},"\"停止\"",[51,158818,282],{"class":65},[51,158820,158821,158823,158826],{"class":53,"line":257},[51,158822,158782],{"class":69},[51,158824,158825],{"class":61}," \"restart\"",[51,158827,363],{"class":65},[51,158829,158830,158832,158834,158837],{"class":53,"line":262},[51,158831,32826],{"class":278},[51,158833,546],{"class":65},[51,158835,158836],{"class":61},"\"重启\"",[51,158838,282],{"class":65},[51,158840,158841,158843],{"class":53,"line":285},[51,158842,158782],{"class":69},[51,158844,158845],{"class":65}," _:\n",[51,158847,158848,158850,158852,158855],{"class":53,"line":296},[51,158849,32826],{"class":278},[51,158851,546],{"class":65},[51,158853,158854],{"class":61},"\"未知命令\"",[51,158856,282],{"class":65},[10,158858,158859,158860,158862,158863,158865],{},"入门阶段掌握 ",[48,158861,154957],{}," 更重要，",[48,158864,71637],{}," 可以作为补充。",[486,158867,158869],{"id":158868},"_310-小案例成绩等级","3.10 小案例：成绩等级",[10,158871,123663],{},[19,158873,158874,158877,158880],{},[22,158875,158876],{},"输入成绩。",[22,158878,158879],{},"判断成绩是否合法。",[22,158881,158882],{},"输出等级。",[10,158884,10419],{},[41,158886,158888],{"className":170,"code":158887,"language":172,"meta":46,"style":46},"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",[48,158889,158890,158908,158912,158930,158941,158953,158964,158976,158987,159000,159011,159023,159034,159040],{"__ignoreMap":46},[51,158891,158892,158894,158896,158898,158900,158902,158904,158906],{"class":53,"line":54},[51,158893,155657],{"class":65},[51,158895,70],{"class":69},[51,158897,110168],{"class":278},[51,158899,546],{"class":65},[51,158901,54193],{"class":278},[51,158903,546],{"class":65},[51,158905,152708],{"class":61},[51,158907,30876],{"class":65},[51,158909,158910],{"class":53,"line":185},[51,158911,206],{"emptyLinePlaceholder":205},[51,158913,158914,158916,158918,158920,158922,158924,158926,158928],{"class":53,"line":202},[51,158915,1940],{"class":69},[51,158917,39304],{"class":69},[51,158919,4479],{"class":278},[51,158921,158551],{"class":69},[51,158923,158082],{"class":65},[51,158925,1997],{"class":69},[51,158927,6138],{"class":278},[51,158929,363],{"class":65},[51,158931,158932,158934,158936,158939],{"class":53,"line":209},[51,158933,31677],{"class":278},[51,158935,546],{"class":65},[51,158937,158938],{"class":61},"\"成绩不合法\"",[51,158940,282],{"class":65},[51,158942,158943,158945,158947,158949,158951],{"class":53,"line":223},[51,158944,158105],{"class":69},[51,158946,158082],{"class":65},[51,158948,2108],{"class":69},[51,158950,158087],{"class":278},[51,158952,363],{"class":65},[51,158954,158955,158957,158959,158962],{"class":53,"line":237},[51,158956,31677],{"class":278},[51,158958,546],{"class":65},[51,158960,158961],{"class":61},"\"等级:A\"",[51,158963,282],{"class":65},[51,158965,158966,158968,158970,158972,158974],{"class":53,"line":242},[51,158967,158105],{"class":69},[51,158969,158082],{"class":65},[51,158971,2108],{"class":69},[51,158973,158112],{"class":278},[51,158975,363],{"class":65},[51,158977,158978,158980,158982,158985],{"class":53,"line":257},[51,158979,31677],{"class":278},[51,158981,546],{"class":65},[51,158983,158984],{"class":61},"\"等级:B\"",[51,158986,282],{"class":65},[51,158988,158989,158991,158993,158995,158998],{"class":53,"line":262},[51,158990,158105],{"class":69},[51,158992,158082],{"class":65},[51,158994,2108],{"class":69},[51,158996,158997],{"class":278}," 70",[51,158999,363],{"class":65},[51,159001,159002,159004,159006,159009],{"class":53,"line":285},[51,159003,31677],{"class":278},[51,159005,546],{"class":65},[51,159007,159008],{"class":61},"\"等级:C\"",[51,159010,282],{"class":65},[51,159012,159013,159015,159017,159019,159021],{"class":53,"line":296},[51,159014,158105],{"class":69},[51,159016,158082],{"class":65},[51,159018,2108],{"class":69},[51,159020,158136],{"class":278},[51,159022,363],{"class":65},[51,159024,159025,159027,159029,159032],{"class":53,"line":307},[51,159026,31677],{"class":278},[51,159028,546],{"class":65},[51,159030,159031],{"class":61},"\"等级:D\"",[51,159033,282],{"class":65},[51,159035,159036,159038],{"class":53,"line":324},[51,159037,2099],{"class":69},[51,159039,363],{"class":65},[51,159041,159042,159044,159046,159049],{"class":53,"line":329},[51,159043,31677],{"class":278},[51,159045,546],{"class":65},[51,159047,159048],{"class":61},"\"等级:E\"",[51,159050,282],{"class":65},[486,159052,159054],{"id":159053},"_311-小案例会员折扣","3.11 小案例：会员折扣",[10,159056,123663],{},[19,159058,159059,159062,159065,159068],{},[22,159060,159061],{},"输入消费金额。",[22,159063,159064],{},"输入会员等级，普通、银卡、金卡。",[22,159066,159067],{},"普通不打折，银卡 9 折，金卡 8 折。",[22,159069,159070],{},"满 500 再减 50。",[10,159072,10419],{},[41,159074,159076],{"className":170,"code":159075,"language":172,"meta":46,"style":46},"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",[48,159077,159078,159098,159114,159118,159126,159130,159144,159154,159167,159176,159189,159197,159203,159214,159218,159232,159236,159250,159260,159264],{"__ignoreMap":46},[51,159079,159080,159083,159085,159087,159089,159091,159093,159096],{"class":53,"line":54},[51,159081,159082],{"class":65},"amount ",[51,159084,70],{"class":69},[51,159086,110168],{"class":278},[51,159088,546],{"class":65},[51,159090,54193],{"class":278},[51,159092,546],{"class":65},[51,159094,159095],{"class":61},"\"请输入消费金额:\"",[51,159097,30876],{"class":65},[51,159099,159100,159103,159105,159107,159109,159112],{"class":53,"line":185},[51,159101,159102],{"class":65},"level ",[51,159104,70],{"class":69},[51,159106,60977],{"class":278},[51,159108,546],{"class":65},[51,159110,159111],{"class":61},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[51,159113,282],{"class":65},[51,159115,159116],{"class":53,"line":202},[51,159117,206],{"emptyLinePlaceholder":205},[51,159119,159120,159122,159124],{"class":53,"line":209},[51,159121,157535],{"class":65},[51,159123,70],{"class":69},[51,159125,56071],{"class":278},[51,159127,159128],{"class":53,"line":223},[51,159129,206],{"emptyLinePlaceholder":205},[51,159131,159132,159134,159137,159139,159142],{"class":53,"line":237},[51,159133,1940],{"class":69},[51,159135,159136],{"class":65}," level ",[51,159138,375],{"class":69},[51,159140,159141],{"class":61}," \"银卡\"",[51,159143,363],{"class":65},[51,159145,159146,159149,159151],{"class":53,"line":242},[51,159147,159148],{"class":65},"    discount ",[51,159150,70],{"class":69},[51,159152,159153],{"class":278}," 0.9\n",[51,159155,159156,159158,159160,159162,159165],{"class":53,"line":257},[51,159157,158105],{"class":69},[51,159159,159136],{"class":65},[51,159161,375],{"class":69},[51,159163,159164],{"class":61}," \"金卡\"",[51,159166,363],{"class":65},[51,159168,159169,159171,159173],{"class":53,"line":262},[51,159170,159148],{"class":65},[51,159172,70],{"class":69},[51,159174,159175],{"class":278}," 0.8\n",[51,159177,159178,159180,159182,159184,159187],{"class":53,"line":285},[51,159179,158105],{"class":69},[51,159181,159136],{"class":65},[51,159183,375],{"class":69},[51,159185,159186],{"class":61}," \"普通\"",[51,159188,363],{"class":65},[51,159190,159191,159193,159195],{"class":53,"line":296},[51,159192,159148],{"class":65},[51,159194,70],{"class":69},[51,159196,56071],{"class":278},[51,159198,159199,159201],{"class":53,"line":307},[51,159200,2099],{"class":69},[51,159202,363],{"class":65},[51,159204,159205,159207,159209,159212],{"class":53,"line":324},[51,159206,31677],{"class":278},[51,159208,546],{"class":65},[51,159210,159211],{"class":61},"\"会员等级输入错误，按普通会员计算\"",[51,159213,282],{"class":65},[51,159215,159216],{"class":53,"line":329},[51,159217,206],{"emptyLinePlaceholder":205},[51,159219,159220,159223,159225,159228,159230],{"class":53,"line":334},[51,159221,159222],{"class":65},"pay ",[51,159224,70],{"class":69},[51,159226,159227],{"class":65}," amount ",[51,159229,997],{"class":69},[51,159231,157574],{"class":65},[51,159233,159234],{"class":53,"line":340},[51,159235,206],{"emptyLinePlaceholder":205},[51,159237,159238,159240,159243,159245,159248],{"class":53,"line":345},[51,159239,1940],{"class":69},[51,159241,159242],{"class":65}," pay ",[51,159244,2108],{"class":69},[51,159246,159247],{"class":278}," 500",[51,159249,363],{"class":65},[51,159251,159252,159255,159257],{"class":53,"line":357},[51,159253,159254],{"class":65},"    pay ",[51,159256,150551],{"class":69},[51,159258,159259],{"class":278}," 50\n",[51,159261,159262],{"class":53,"line":366},[51,159263,206],{"emptyLinePlaceholder":205},[51,159265,159266,159268,159270,159272,159274,159276,159279,159281,159283,159285],{"class":53,"line":383},[51,159267,30794],{"class":278},[51,159269,546],{"class":65},[51,159271,595],{"class":69},[51,159273,157655],{"class":61},[51,159275,1438],{"class":278},[51,159277,159278],{"class":65},"pay",[51,159280,157458],{"class":69},[51,159282,1488],{"class":278},[51,159284,157311],{"class":61},[51,159286,282],{"class":65},[486,159288,159290],{"id":159289},"_312-易错点","3.12 易错点",[19,159292,159293,159296,159299,159302,159307],{},[22,159294,159295],{},"冒号不能漏。",[22,159297,159298],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[22,159300,159301],{},"多分支判断要注意顺序。",[22,159303,159304,159305,28767],{},"判断相等用 ",[48,159306,375],{},[22,159308,159309],{},"字符串比较区分大小写：",[41,159311,159313],{"className":170,"code":159312,"language":172,"meta":46,"style":46},"\"Y\" == \"y\"  # False\n",[48,159314,159315],{"__ignoreMap":46},[51,159316,159317,159320,159322,159324],{"class":53,"line":54},[51,159318,159319],{"class":61},"\"Y\"",[51,159321,101931],{"class":69},[51,159323,158304],{"class":61},[51,159325,159326],{"class":601},"  # False\n",[10,159328,159329],{},"可转换后再判断：",[41,159331,159333],{"className":170,"code":159332,"language":172,"meta":46,"style":46},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[48,159334,159335,159352,159365],{"__ignoreMap":46},[51,159336,159337,159340,159342,159344,159346,159349],{"class":53,"line":54},[51,159338,159339],{"class":65},"answer ",[51,159341,70],{"class":69},[51,159343,60977],{"class":278},[51,159345,546],{"class":65},[51,159347,159348],{"class":61},"\"是否继续(y\u002Fn):\"",[51,159350,159351],{"class":65},").lower()\n",[51,159353,159354,159356,159359,159361,159363],{"class":53,"line":185},[51,159355,1940],{"class":69},[51,159357,159358],{"class":65}," answer ",[51,159360,375],{"class":69},[51,159362,158304],{"class":61},[51,159364,363],{"class":65},[51,159366,159367,159369,159371,159374],{"class":53,"line":202},[51,159368,31677],{"class":278},[51,159370,546],{"class":65},[51,159372,159373],{"class":61},"\"继续\"",[51,159375,282],{"class":65},[486,159377,159379],{"id":159378},"_313-本章练习","3.13 本章练习",[19,159381,159382,159385,159388,159391,159401],{},[22,159383,159384],{},"输入年龄，判断是否成年。",[22,159386,159387],{},"输入年份，判断是否为闰年。",[22,159389,159390],{},"输入三个数字，输出最大值。",[22,159392,159393,159394,159397,159398,159400],{},"写登录判断：用户名是 ",[48,159395,159396],{},"admin"," 且密码是 ",[48,159399,15468],{}," 才登录成功。",[22,159402,159403],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[464,159405,159406],{},"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":46,"searchDepth":185,"depth":185,"links":159408},[159409,159410,159411,159412,159413,159414,159419,159420,159421,159422,159423,159424,159425],{"id":157797,"depth":185,"text":157798},{"id":157850,"depth":185,"text":157851},{"id":157954,"depth":185,"text":157955},{"id":158044,"depth":185,"text":158045},{"id":158234,"depth":185,"text":158235},{"id":158357,"depth":185,"text":158358,"children":159415},[159416,159417,159418],{"id":158361,"depth":202,"text":158362},{"id":158418,"depth":202,"text":158419},{"id":158475,"depth":202,"text":158476},{"id":158520,"depth":185,"text":158521},{"id":158611,"depth":185,"text":158612},{"id":158738,"depth":185,"text":158739},{"id":158868,"depth":185,"text":158869},{"id":159053,"depth":185,"text":159054},{"id":159289,"depth":185,"text":159290},{"id":159378,"depth":185,"text":159379},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157789,"description":23760},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159432,"title":159433,"body":159434,"description":23760,"extension":469,"meta":161203,"navigation":205,"path":161204,"seo":161205,"stem":161206,"__hash__":161207},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159435,"toc":161183},[159436,159439,159443,159449,159452,159469,159473,159475,159492,159494,159539,159541,159558,159562,159565,159631,159634,159652,159656,159817,159826,159830,159834,159839,159886,159888,159894,159898,159903,159950,159952,159958,159962,159967,160003,160006,160053,160057,160063,160121,160126,160157,160162,160166,160221,160224,160296,160299,160358,160362,160365,160440,160443,160447,160553,160556,160582,160586,160598,160667,160670,160762,160766,160768,160779,160781,160911,160915,161117,161125,161129,161159,161163,161180],[14,159437,159433],{"id":159438},"_4-循环语句",[486,159440,159442],{"id":159441},"_41-为什么需要循环","4.1 为什么需要循环",[10,159444,159445,159446,159448],{},"如果要输出 1 到 100，不应该写 100 行 ",[48,159447,146771],{},"，而应该用循环。",[10,159450,159451],{},"循环适合处理重复任务：",[19,159453,159454,159457,159460,159463,159466],{},[22,159455,159456],{},"重复输出。",[22,159458,159459],{},"重复输入。",[22,159461,159462],{},"遍历数据。",[22,159464,159465],{},"持续执行菜单。",[22,159467,159468],{},"批量处理文件或数据。",[486,159470,159472],{"id":159471},"_42-while循环","4.2 while循环",[10,159474,5566],{},[41,159476,159478],{"className":170,"code":159477,"language":172,"meta":46,"style":46},"while 条件:\n    循环体\n",[48,159479,159480,159487],{"__ignoreMap":46},[51,159481,159482,159484],{"class":53,"line":54},[51,159483,447],{"class":69},[51,159485,159486],{"class":65}," 条件:\n",[51,159488,159489],{"class":53,"line":185},[51,159490,159491],{"class":65},"    循环体\n",[10,159493,15519],{},[41,159495,159497],{"className":170,"code":159496,"language":172,"meta":46,"style":46},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[48,159498,159499,159507,159511,159523,159530],{"__ignoreMap":46},[51,159500,159501,159503,159505],{"class":53,"line":54},[51,159502,100520],{"class":65},[51,159504,70],{"class":69},[51,159506,56071],{"class":278},[51,159508,159509],{"class":53,"line":185},[51,159510,206],{"emptyLinePlaceholder":205},[51,159512,159513,159515,159517,159519,159521],{"class":53,"line":202},[51,159514,447],{"class":69},[51,159516,9822],{"class":65},[51,159518,1997],{"class":69},[51,159520,2538],{"class":278},[51,159522,363],{"class":65},[51,159524,159525,159527],{"class":53,"line":209},[51,159526,31677],{"class":278},[51,159528,159529],{"class":65},"(i)\n",[51,159531,159532,159535,159537],{"class":53,"line":223},[51,159533,159534],{"class":65},"    i ",[51,159536,9861],{"class":69},[51,159538,56071],{"class":278},[10,159540,81301],{},[19,159542,159543,159549,159552,159555],{},[22,159544,159545,159546,28767],{},"判断条件 ",[48,159547,159548],{},"i \u003C= 5",[22,159550,159551],{},"条件成立，执行循环体。",[22,159553,159554],{},"执行完后回到条件判断。",[22,159556,159557],{},"条件不成立，退出循环。",[486,159559,159561],{"id":159560},"_43-while累加","4.3 while累加",[10,159563,159564],{},"计算 1 到 100 的和：",[41,159566,159568],{"className":170,"code":159567,"language":172,"meta":46,"style":46},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[48,159569,159570,159578,159586,159590,159602,159612,159620,159624],{"__ignoreMap":46},[51,159571,159572,159574,159576],{"class":53,"line":54},[51,159573,100520],{"class":65},[51,159575,70],{"class":69},[51,159577,56071],{"class":278},[51,159579,159580,159582,159584],{"class":53,"line":185},[51,159581,157559],{"class":65},[51,159583,70],{"class":69},[51,159585,47705],{"class":278},[51,159587,159588],{"class":53,"line":202},[51,159589,206],{"emptyLinePlaceholder":205},[51,159591,159592,159594,159596,159598,159600],{"class":53,"line":209},[51,159593,447],{"class":69},[51,159595,9822],{"class":65},[51,159597,1997],{"class":69},[51,159599,6138],{"class":278},[51,159601,363],{"class":65},[51,159603,159604,159607,159609],{"class":53,"line":223},[51,159605,159606],{"class":65},"    total ",[51,159608,9861],{"class":69},[51,159610,159611],{"class":65}," i\n",[51,159613,159614,159616,159618],{"class":53,"line":237},[51,159615,159534],{"class":65},[51,159617,9861],{"class":69},[51,159619,56071],{"class":278},[51,159621,159622],{"class":53,"line":242},[51,159623,206],{"emptyLinePlaceholder":205},[51,159625,159626,159628],{"class":53,"line":257},[51,159627,30794],{"class":278},[51,159629,159630],{"class":65},"(total)\n",[10,159632,159633],{},"核心思想：",[19,159635,159636,159641,159646],{},[22,159637,159638,159640],{},[48,159639,983],{}," 控制循环次数。",[22,159642,159643,159645],{},[48,159644,157660],{}," 保存累加结果。",[22,159647,159648,159649,159651],{},"每轮循环都要更新 ",[48,159650,983],{},"，否则可能死循环。",[486,159653,159655],{"id":159654},"_44-while猜数字","4.4 while猜数字",[41,159657,159659],{"className":170,"code":159658,"language":172,"meta":46,"style":46},"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",[48,159660,159661,159667,159671,159688,159696,159700,159708,159728,159737,159741,159753,159764,159774,159785,159791,159813],{"__ignoreMap":46},[51,159662,159663,159665],{"class":53,"line":54},[51,159664,179],{"class":69},[51,159666,45701],{"class":65},[51,159668,159669],{"class":53,"line":185},[51,159670,206],{"emptyLinePlaceholder":205},[51,159672,159673,159675,159677,159680,159682,159684,159686],{"class":53,"line":202},[51,159674,159339],{"class":65},[51,159676,70],{"class":69},[51,159678,159679],{"class":65}," random.randint(",[51,159681,759],{"class":278},[51,159683,12819],{"class":65},[51,159685,853],{"class":278},[51,159687,282],{"class":65},[51,159689,159690,159692,159694],{"class":53,"line":209},[51,159691,146990],{"class":65},[51,159693,70],{"class":69},[51,159695,47705],{"class":278},[51,159697,159698],{"class":53,"line":223},[51,159699,206],{"emptyLinePlaceholder":205},[51,159701,159702,159704,159706],{"class":53,"line":237},[51,159703,447],{"class":69},[51,159705,95664],{"class":278},[51,159707,363],{"class":65},[51,159709,159710,159713,159715,159717,159719,159721,159723,159726],{"class":53,"line":242},[51,159711,159712],{"class":65},"    guess ",[51,159714,70],{"class":69},[51,159716,2772],{"class":278},[51,159718,546],{"class":65},[51,159720,54193],{"class":278},[51,159722,546],{"class":65},[51,159724,159725],{"class":61},"\"请输入1到100之间的数字:\"",[51,159727,30876],{"class":65},[51,159729,159730,159733,159735],{"class":53,"line":257},[51,159731,159732],{"class":65},"    count ",[51,159734,9861],{"class":69},[51,159736,56071],{"class":278},[51,159738,159739],{"class":53,"line":262},[51,159740,206],{"emptyLinePlaceholder":205},[51,159742,159743,159745,159748,159750],{"class":53,"line":285},[51,159744,3488],{"class":69},[51,159746,159747],{"class":65}," guess ",[51,159749,1502],{"class":69},[51,159751,159752],{"class":65}," answer:\n",[51,159754,159755,159757,159759,159762],{"class":53,"line":296},[51,159756,32826],{"class":278},[51,159758,546],{"class":65},[51,159760,159761],{"class":61},"\"猜大了\"",[51,159763,282],{"class":65},[51,159765,159766,159768,159770,159772],{"class":53,"line":307},[51,159767,39667],{"class":69},[51,159769,159747],{"class":65},[51,159771,1452],{"class":69},[51,159773,159752],{"class":65},[51,159775,159776,159778,159780,159783],{"class":53,"line":324},[51,159777,32826],{"class":278},[51,159779,546],{"class":65},[51,159781,159782],{"class":61},"\"猜小了\"",[51,159784,282],{"class":65},[51,159786,159787,159789],{"class":53,"line":329},[51,159788,158321],{"class":69},[51,159790,363],{"class":65},[51,159792,159793,159795,159797,159799,159802,159804,159806,159808,159811],{"class":53,"line":334},[51,159794,32826],{"class":278},[51,159796,546],{"class":65},[51,159798,595],{"class":69},[51,159800,159801],{"class":61},"\"猜对了，一共猜了",[51,159803,1438],{"class":278},[51,159805,84806],{"class":65},[51,159807,1488],{"class":278},[51,159809,159810],{"class":61},"次\"",[51,159812,282],{"class":65},[51,159814,159815],{"class":53,"line":340},[51,159816,32003],{"class":69},[10,159818,159819,159822,159823,159825],{},[48,159820,159821],{},"while True"," 表示无限循环，通常配合 ",[48,159824,2443],{}," 使用。",[486,159827,159829],{"id":159828},"_45-break和continue","4.5 break和continue",[513,159831,159833],{"id":159832},"_451-break","4.5.1 break",[10,159835,159836,159838],{},[48,159837,2443],{}," 直接结束整个循环。",[41,159840,159842],{"className":170,"code":159841,"language":172,"meta":46,"style":46},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[48,159843,159844,159864,159876,159880],{"__ignoreMap":46},[51,159845,159846,159848,159850,159852,159854,159856,159858,159860,159862],{"class":53,"line":54},[51,159847,3412],{"class":69},[51,159849,9822],{"class":65},[51,159851,26425],{"class":69},[51,159853,32818],{"class":278},[51,159855,546],{"class":65},[51,159857,759],{"class":278},[51,159859,12819],{"class":65},[51,159861,886],{"class":278},[51,159863,31164],{"class":65},[51,159865,159866,159868,159870,159872,159874],{"class":53,"line":185},[51,159867,3488],{"class":69},[51,159869,9822],{"class":65},[51,159871,375],{"class":69},[51,159873,78442],{"class":278},[51,159875,363],{"class":65},[51,159877,159878],{"class":53,"line":202},[51,159879,32003],{"class":69},[51,159881,159882,159884],{"class":53,"line":209},[51,159883,31677],{"class":278},[51,159885,159529],{"class":65},[10,159887,146756],{},[41,159889,159892],{"className":159890,"code":159891,"language":5572,"meta":46},[5570],"1\n2\n",[48,159893,159891],{"__ignoreMap":46},[513,159895,159897],{"id":159896},"_452-continue","4.5.2 continue",[10,159899,159900,159902],{},[48,159901,154971],{}," 跳过本轮剩余代码，进入下一轮循环。",[41,159904,159906],{"className":170,"code":159905,"language":172,"meta":46,"style":46},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[48,159907,159908,159928,159940,159944],{"__ignoreMap":46},[51,159909,159910,159912,159914,159916,159918,159920,159922,159924,159926],{"class":53,"line":54},[51,159911,3412],{"class":69},[51,159913,9822],{"class":65},[51,159915,26425],{"class":69},[51,159917,32818],{"class":278},[51,159919,546],{"class":65},[51,159921,759],{"class":278},[51,159923,12819],{"class":65},[51,159925,886],{"class":278},[51,159927,31164],{"class":65},[51,159929,159930,159932,159934,159936,159938],{"class":53,"line":185},[51,159931,3488],{"class":69},[51,159933,9822],{"class":65},[51,159935,375],{"class":69},[51,159937,78442],{"class":278},[51,159939,363],{"class":65},[51,159941,159942],{"class":53,"line":202},[51,159943,148811],{"class":69},[51,159945,159946,159948],{"class":53,"line":209},[51,159947,31677],{"class":278},[51,159949,159529],{"class":65},[10,159951,146756],{},[41,159953,159956],{"className":159954,"code":159955,"language":5572,"meta":46},[5570],"1\n2\n4\n5\n",[48,159957,159955],{"__ignoreMap":46},[486,159959,159961],{"id":159960},"_46-for循环","4.6 for循环",[10,159963,159964,159966],{},[48,159965,3412],{}," 常用于遍历序列。",[41,159968,159970],{"className":170,"code":159969,"language":172,"meta":46,"style":46},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[48,159971,159972,159981,159985,159996],{"__ignoreMap":46},[51,159973,159974,159976,159978],{"class":53,"line":54},[51,159975,146835],{"class":65},[51,159977,70],{"class":69},[51,159979,159980],{"class":61}," \"python\"\n",[51,159982,159983],{"class":53,"line":185},[51,159984,206],{"emptyLinePlaceholder":205},[51,159986,159987,159989,159992,159994],{"class":53,"line":202},[51,159988,3412],{"class":69},[51,159990,159991],{"class":65}," ch ",[51,159993,26425],{"class":69},[51,159995,158698],{"class":65},[51,159997,159998,160000],{"class":53,"line":209},[51,159999,31677],{"class":278},[51,160001,160002],{"class":65},"(ch)\n",[10,160004,160005],{},"遍历列表：",[41,160007,160009],{"className":170,"code":160008,"language":172,"meta":46,"style":46},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[48,160010,160011,160033,160037,160047],{"__ignoreMap":46},[51,160012,160013,160016,160018,160020,160022,160024,160026,160028,160031],{"class":53,"line":54},[51,160014,160015],{"class":65},"students ",[51,160017,70],{"class":69},[51,160019,52598],{"class":65},[51,160021,150187],{"class":61},[51,160023,12819],{"class":65},[51,160025,151235],{"class":61},[51,160027,12819],{"class":65},[51,160029,160030],{"class":61},"\"小刚\"",[51,160032,33621],{"class":65},[51,160034,160035],{"class":53,"line":185},[51,160036,206],{"emptyLinePlaceholder":205},[51,160038,160039,160041,160043,160045],{"class":53,"line":202},[51,160040,3412],{"class":69},[51,160042,152436],{"class":65},[51,160044,26425],{"class":69},[51,160046,152441],{"class":65},[51,160048,160049,160051],{"class":53,"line":209},[51,160050,31677],{"class":278},[51,160052,150341],{"class":65},[486,160054,160056],{"id":160055},"_47-range函数","4.7 range函数",[10,160058,160059,160062],{},[48,160060,160061],{},"range()"," 用于生成整数序列。",[41,160064,160066],{"className":170,"code":160065,"language":172,"meta":46,"style":46},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[48,160067,160068,160082,160100],{"__ignoreMap":46},[51,160069,160070,160072,160074,160076,160079],{"class":53,"line":54},[51,160071,33791],{"class":278},[51,160073,546],{"class":65},[51,160075,861],{"class":278},[51,160077,160078],{"class":65},")          ",[51,160080,160081],{"class":601},"# 0,1,2,3,4\n",[51,160083,160084,160086,160088,160090,160092,160094,160097],{"class":53,"line":185},[51,160085,33791],{"class":278},[51,160087,546],{"class":65},[51,160089,759],{"class":278},[51,160091,12819],{"class":65},[51,160093,861],{"class":278},[51,160095,160096],{"class":65},")       ",[51,160098,160099],{"class":601},"# 1,2,3,4\n",[51,160101,160102,160104,160106,160108,160110,160112,160114,160116,160118],{"class":53,"line":202},[51,160103,33791],{"class":278},[51,160105,546],{"class":65},[51,160107,759],{"class":278},[51,160109,12819],{"class":65},[51,160111,988],{"class":278},[51,160113,12819],{"class":65},[51,160115,620],{"class":278},[51,160117,155960],{"class":65},[51,160119,160120],{"class":601},"# 1,3,5,7,9\n",[10,160122,160123,160124,25000],{},"配合 ",[48,160125,3412],{},[41,160127,160129],{"className":170,"code":160128,"language":172,"meta":46,"style":46},"for i in range(1, 6):\n    print(i)\n",[48,160130,160131,160151],{"__ignoreMap":46},[51,160132,160133,160135,160137,160139,160141,160143,160145,160147,160149],{"class":53,"line":54},[51,160134,3412],{"class":69},[51,160136,9822],{"class":65},[51,160138,26425],{"class":69},[51,160140,32818],{"class":278},[51,160142,546],{"class":65},[51,160144,759],{"class":278},[51,160146,12819],{"class":65},[51,160148,886],{"class":278},[51,160150,31164],{"class":65},[51,160152,160153,160155],{"class":53,"line":185},[51,160154,31677],{"class":278},[51,160156,159529],{"class":65},[10,160158,9409,160159,160161],{},[48,160160,33791],{}," 的结束值不包含在内。",[486,160163,160165],{"id":160164},"_48-for循环求和","4.8 for循环求和",[41,160167,160169],{"className":170,"code":160168,"language":172,"meta":46,"style":46},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[48,160170,160171,160179,160183,160203,160211,160215],{"__ignoreMap":46},[51,160172,160173,160175,160177],{"class":53,"line":54},[51,160174,157559],{"class":65},[51,160176,70],{"class":69},[51,160178,47705],{"class":278},[51,160180,160181],{"class":53,"line":185},[51,160182,206],{"emptyLinePlaceholder":205},[51,160184,160185,160187,160189,160191,160193,160195,160197,160199,160201],{"class":53,"line":202},[51,160186,3412],{"class":69},[51,160188,9822],{"class":65},[51,160190,26425],{"class":69},[51,160192,32818],{"class":278},[51,160194,546],{"class":65},[51,160196,759],{"class":278},[51,160198,12819],{"class":65},[51,160200,879],{"class":278},[51,160202,31164],{"class":65},[51,160204,160205,160207,160209],{"class":53,"line":209},[51,160206,159606],{"class":65},[51,160208,9861],{"class":69},[51,160210,159611],{"class":65},[51,160212,160213],{"class":53,"line":223},[51,160214,206],{"emptyLinePlaceholder":205},[51,160216,160217,160219],{"class":53,"line":237},[51,160218,30794],{"class":278},[51,160220,159630],{"class":65},[10,160222,160223],{},"求偶数和：",[41,160225,160227],{"className":170,"code":160226,"language":172,"meta":46,"style":46},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[48,160228,160229,160237,160241,160261,160277,160286,160290],{"__ignoreMap":46},[51,160230,160231,160233,160235],{"class":53,"line":54},[51,160232,157559],{"class":65},[51,160234,70],{"class":69},[51,160236,47705],{"class":278},[51,160238,160239],{"class":53,"line":185},[51,160240,206],{"emptyLinePlaceholder":205},[51,160242,160243,160245,160247,160249,160251,160253,160255,160257,160259],{"class":53,"line":202},[51,160244,3412],{"class":69},[51,160246,9822],{"class":65},[51,160248,26425],{"class":69},[51,160250,32818],{"class":278},[51,160252,546],{"class":65},[51,160254,759],{"class":278},[51,160256,12819],{"class":65},[51,160258,879],{"class":278},[51,160260,31164],{"class":65},[51,160262,160263,160265,160267,160269,160271,160273,160275],{"class":53,"line":209},[51,160264,3488],{"class":69},[51,160266,9822],{"class":65},[51,160268,870],{"class":69},[51,160270,15139],{"class":278},[51,160272,101931],{"class":69},[51,160274,4479],{"class":278},[51,160276,363],{"class":65},[51,160278,160279,160282,160284],{"class":53,"line":223},[51,160280,160281],{"class":65},"        total ",[51,160283,9861],{"class":69},[51,160285,159611],{"class":65},[51,160287,160288],{"class":53,"line":237},[51,160289,206],{"emptyLinePlaceholder":205},[51,160291,160292,160294],{"class":53,"line":242},[51,160293,30794],{"class":278},[51,160295,159630],{"class":65},[10,160297,160298],{},"也可以：",[41,160300,160302],{"className":170,"code":160301,"language":172,"meta":46,"style":46},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[48,160303,160304,160312,160316,160340,160348,160352],{"__ignoreMap":46},[51,160305,160306,160308,160310],{"class":53,"line":54},[51,160307,157559],{"class":65},[51,160309,70],{"class":69},[51,160311,47705],{"class":278},[51,160313,160314],{"class":53,"line":185},[51,160315,206],{"emptyLinePlaceholder":205},[51,160317,160318,160320,160322,160324,160326,160328,160330,160332,160334,160336,160338],{"class":53,"line":202},[51,160319,3412],{"class":69},[51,160321,9822],{"class":65},[51,160323,26425],{"class":69},[51,160325,32818],{"class":278},[51,160327,546],{"class":65},[51,160329,620],{"class":278},[51,160331,12819],{"class":65},[51,160333,879],{"class":278},[51,160335,12819],{"class":65},[51,160337,620],{"class":278},[51,160339,31164],{"class":65},[51,160341,160342,160344,160346],{"class":53,"line":209},[51,160343,159606],{"class":65},[51,160345,9861],{"class":69},[51,160347,159611],{"class":65},[51,160349,160350],{"class":53,"line":223},[51,160351,206],{"emptyLinePlaceholder":205},[51,160353,160354,160356],{"class":53,"line":237},[51,160355,30794],{"class":278},[51,160357,159630],{"class":65},[486,160359,160361],{"id":160360},"_49-循环嵌套","4.9 循环嵌套",[10,160363,160364],{},"嵌套循环就是循环里面再写循环。",[41,160366,160368],{"className":170,"code":160367,"language":172,"meta":46,"style":46},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[48,160369,160370,160390,160410],{"__ignoreMap":46},[51,160371,160372,160374,160376,160378,160380,160382,160384,160386,160388],{"class":53,"line":54},[51,160373,3412],{"class":69},[51,160375,9822],{"class":65},[51,160377,26425],{"class":69},[51,160379,32818],{"class":278},[51,160381,546],{"class":65},[51,160383,759],{"class":278},[51,160385,12819],{"class":65},[51,160387,835],{"class":278},[51,160389,31164],{"class":65},[51,160391,160392,160394,160396,160398,160400,160402,160404,160406,160408],{"class":53,"line":185},[51,160393,3588],{"class":69},[51,160395,9884],{"class":65},[51,160397,26425],{"class":69},[51,160399,32818],{"class":278},[51,160401,546],{"class":65},[51,160403,759],{"class":278},[51,160405,12819],{"class":65},[51,160407,835],{"class":278},[51,160409,31164],{"class":65},[51,160411,160412,160414,160416,160418,160421,160423,160425,160427,160430,160432,160434,160436,160438],{"class":53,"line":202},[51,160413,32826],{"class":278},[51,160415,546],{"class":65},[51,160417,595],{"class":69},[51,160419,160420],{"class":61},"\"i=",[51,160422,1438],{"class":278},[51,160424,983],{"class":65},[51,160426,1488],{"class":278},[51,160428,160429],{"class":61},", j=",[51,160431,1438],{"class":278},[51,160433,1009],{"class":65},[51,160435,1488],{"class":278},[51,160437,793],{"class":61},[51,160439,282],{"class":65},[10,160441,160442],{},"外层循环执行一次，内层循环执行完整一轮。",[486,160444,160446],{"id":160445},"_410-九九乘法表","4.10 九九乘法表",[41,160448,160450],{"className":170,"code":160449,"language":172,"meta":46,"style":46},"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",[48,160451,160452,160472,160495,160547],{"__ignoreMap":46},[51,160453,160454,160456,160458,160460,160462,160464,160466,160468,160470],{"class":53,"line":54},[51,160455,3412],{"class":69},[51,160457,9822],{"class":65},[51,160459,26425],{"class":69},[51,160461,32818],{"class":278},[51,160463,546],{"class":65},[51,160465,759],{"class":278},[51,160467,12819],{"class":65},[51,160469,988],{"class":278},[51,160471,31164],{"class":65},[51,160473,160474,160476,160478,160480,160482,160484,160486,160489,160491,160493],{"class":53,"line":185},[51,160475,3588],{"class":69},[51,160477,9884],{"class":65},[51,160479,26425],{"class":69},[51,160481,32818],{"class":278},[51,160483,546],{"class":65},[51,160485,759],{"class":278},[51,160487,160488],{"class":65},", i ",[51,160490,1023],{"class":69},[51,160492,25500],{"class":278},[51,160494,31164],{"class":65},[51,160496,160497,160499,160501,160503,160505,160507,160509,160511,160513,160515,160517,160519,160521,160523,160525,160527,160529,160531,160533,160535,160537,160539,160541,160543,160545],{"class":53,"line":202},[51,160498,32826],{"class":278},[51,160500,546],{"class":65},[51,160502,595],{"class":69},[51,160504,793],{"class":61},[51,160506,1438],{"class":278},[51,160508,1009],{"class":65},[51,160510,1488],{"class":278},[51,160512,997],{"class":61},[51,160514,1438],{"class":278},[51,160516,983],{"class":65},[51,160518,1488],{"class":278},[51,160520,70],{"class":61},[51,160522,1438],{"class":278},[51,160524,100520],{"class":65},[51,160526,997],{"class":69},[51,160528,3797],{"class":65},[51,160530,1488],{"class":278},[51,160532,793],{"class":61},[51,160534,12819],{"class":65},[51,160536,46173],{"class":248},[51,160538,70],{"class":69},[51,160540,793],{"class":61},[51,160542,1643],{"class":278},[51,160544,793],{"class":61},[51,160546,282],{"class":65},[51,160548,160549,160551],{"class":53,"line":209},[51,160550,31677],{"class":278},[51,160552,2366],{"class":65},[10,160554,160555],{},"关键点：",[19,160557,160558,160564,160570,160576],{},[22,160559,160560,160561,160563],{},"外层 ",[48,160562,983],{}," 控制行。",[22,160565,160566,160567,160569],{},"内层 ",[48,160568,1009],{}," 控制列。",[22,160571,160572,160573,160575],{},"每行结束后用 ",[48,160574,146771],{}," 换行。",[22,160577,160578,160581],{},[48,160579,160580],{},"end=\"\\t\""," 让同一行的内容横向排列。",[486,160583,160585],{"id":160584},"_411-循环else","4.11 循环else",[10,160587,160588,160589,160591,160592,160594,160595,160597],{},"Python 的循环可以带 ",[48,160590,2099],{},"。当循环正常结束时执行 ",[48,160593,2099],{},"，如果被 ",[48,160596,2443],{}," 打断，则不执行。",[41,160599,160601],{"className":170,"code":160600,"language":172,"meta":46,"style":46},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[48,160602,160603,160623,160635,160646,160650,160656],{"__ignoreMap":46},[51,160604,160605,160607,160609,160611,160613,160615,160617,160619,160621],{"class":53,"line":54},[51,160606,3412],{"class":69},[51,160608,9822],{"class":65},[51,160610,26425],{"class":69},[51,160612,32818],{"class":278},[51,160614,546],{"class":65},[51,160616,759],{"class":278},[51,160618,12819],{"class":65},[51,160620,886],{"class":278},[51,160622,31164],{"class":65},[51,160624,160625,160627,160629,160631,160633],{"class":53,"line":185},[51,160626,3488],{"class":69},[51,160628,9822],{"class":65},[51,160630,375],{"class":69},[51,160632,2428],{"class":278},[51,160634,363],{"class":65},[51,160636,160637,160639,160641,160644],{"class":53,"line":202},[51,160638,32826],{"class":278},[51,160640,546],{"class":65},[51,160642,160643],{"class":61},"\"找到了\"",[51,160645,282],{"class":65},[51,160647,160648],{"class":53,"line":209},[51,160649,32003],{"class":69},[51,160651,160652,160654],{"class":53,"line":223},[51,160653,2099],{"class":69},[51,160655,363],{"class":65},[51,160657,160658,160660,160662,160665],{"class":53,"line":237},[51,160659,31677],{"class":278},[51,160661,546],{"class":65},[51,160663,160664],{"class":61},"\"没找到\"",[51,160666,282],{"class":65},[10,160668,160669],{},"常用于搜索。",[41,160671,160673],{"className":170,"code":160672,"language":172,"meta":46,"style":46},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[48,160674,160675,160696,160705,160709,160721,160732,160742,160746,160752],{"__ignoreMap":46},[51,160676,160677,160680,160682,160684,160686,160688,160690,160692,160694],{"class":53,"line":54},[51,160678,160679],{"class":65},"names ",[51,160681,70],{"class":69},[51,160683,52598],{"class":65},[51,160685,150187],{"class":61},[51,160687,12819],{"class":65},[51,160689,151235],{"class":61},[51,160691,12819],{"class":65},[51,160693,160030],{"class":61},[51,160695,33621],{"class":65},[51,160697,160698,160700,160702],{"class":53,"line":185},[51,160699,111949],{"class":65},[51,160701,70],{"class":69},[51,160703,160704],{"class":61}," \"小李\"\n",[51,160706,160707],{"class":53,"line":202},[51,160708,206],{"emptyLinePlaceholder":205},[51,160710,160711,160713,160716,160718],{"class":53,"line":209},[51,160712,3412],{"class":69},[51,160714,160715],{"class":65}," name ",[51,160717,26425],{"class":69},[51,160719,160720],{"class":65}," names:\n",[51,160722,160723,160725,160727,160729],{"class":53,"line":223},[51,160724,3488],{"class":69},[51,160726,160715],{"class":65},[51,160728,375],{"class":69},[51,160730,160731],{"class":65}," target:\n",[51,160733,160734,160736,160738,160740],{"class":53,"line":237},[51,160735,32826],{"class":278},[51,160737,546],{"class":65},[51,160739,160643],{"class":61},[51,160741,282],{"class":65},[51,160743,160744],{"class":53,"line":242},[51,160745,32003],{"class":69},[51,160747,160748,160750],{"class":53,"line":257},[51,160749,2099],{"class":69},[51,160751,363],{"class":65},[51,160753,160754,160756,160758,160760],{"class":53,"line":262},[51,160755,31677],{"class":278},[51,160757,546],{"class":65},[51,160759,160664],{"class":61},[51,160761,282],{"class":65},[486,160763,160765],{"id":160764},"_412-小案例登录重试","4.12 小案例：登录重试",[10,160767,123663],{},[19,160769,160770,160773,160776],{},[22,160771,160772],{},"用户最多输入 3 次密码。",[22,160774,160775],{},"密码正确则登录成功。",[22,160777,160778],{},"3 次都错误则锁定账号。",[10,160780,10419],{},[41,160782,160784],{"className":170,"code":160783,"language":172,"meta":46,"style":46},"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",[48,160785,160786,160796,160800,160816,160832,160836,160848,160859,160863,160869,160894,160900],{"__ignoreMap":46},[51,160787,160788,160791,160793],{"class":53,"line":54},[51,160789,160790],{"class":65},"password ",[51,160792,70],{"class":69},[51,160794,160795],{"class":61}," \"123456\"\n",[51,160797,160798],{"class":53,"line":185},[51,160799,206],{"emptyLinePlaceholder":205},[51,160801,160802,160804,160806,160808,160810,160812,160814],{"class":53,"line":202},[51,160803,3412],{"class":69},[51,160805,9822],{"class":65},[51,160807,26425],{"class":69},[51,160809,32818],{"class":278},[51,160811,546],{"class":65},[51,160813,614],{"class":278},[51,160815,31164],{"class":65},[51,160817,160818,160821,160823,160825,160827,160830],{"class":53,"line":209},[51,160819,160820],{"class":65},"    user_password ",[51,160822,70],{"class":69},[51,160824,60977],{"class":278},[51,160826,546],{"class":65},[51,160828,160829],{"class":61},"\"请输入密码:\"",[51,160831,282],{"class":65},[51,160833,160834],{"class":53,"line":223},[51,160835,206],{"emptyLinePlaceholder":205},[51,160837,160838,160840,160843,160845],{"class":53,"line":237},[51,160839,3488],{"class":69},[51,160841,160842],{"class":65}," user_password ",[51,160844,375],{"class":69},[51,160846,160847],{"class":65}," password:\n",[51,160849,160850,160852,160854,160857],{"class":53,"line":242},[51,160851,32826],{"class":278},[51,160853,546],{"class":65},[51,160855,160856],{"class":61},"\"登录成功\"",[51,160858,282],{"class":65},[51,160860,160861],{"class":53,"line":257},[51,160862,32003],{"class":69},[51,160864,160865,160867],{"class":53,"line":262},[51,160866,158321],{"class":69},[51,160868,363],{"class":65},[51,160870,160871,160873,160875,160877,160880,160883,160885,160887,160889,160892],{"class":53,"line":285},[51,160872,32826],{"class":278},[51,160874,546],{"class":65},[51,160876,595],{"class":69},[51,160878,160879],{"class":61},"\"密码错误，还剩",[51,160881,160882],{"class":278},"{2",[51,160884,52643],{"class":69},[51,160886,3419],{"class":65},[51,160888,1488],{"class":278},[51,160890,160891],{"class":61},"次机会\"",[51,160893,282],{"class":65},[51,160895,160896,160898],{"class":53,"line":296},[51,160897,2099],{"class":69},[51,160899,363],{"class":65},[51,160901,160902,160904,160906,160909],{"class":53,"line":307},[51,160903,31677],{"class":278},[51,160905,546],{"class":65},[51,160907,160908],{"class":61},"\"账号已锁定\"",[51,160910,282],{"class":65},[486,160912,160914],{"id":160913},"_413-小案例菜单程序","4.13 小案例：菜单程序",[41,160916,160918],{"className":170,"code":160917,"language":172,"meta":46,"style":46},"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",[48,160919,160920,160928,160939,160950,160961,160972,160983,160987,161002,161006,161018,161029,161041,161052,161064,161075,161087,161097,161101,161107],{"__ignoreMap":46},[51,160921,160922,160924,160926],{"class":53,"line":54},[51,160923,447],{"class":69},[51,160925,95664],{"class":278},[51,160927,363],{"class":65},[51,160929,160930,160932,160934,160937],{"class":53,"line":185},[51,160931,31677],{"class":278},[51,160933,546],{"class":65},[51,160935,160936],{"class":61},"\"====== 菜单 ======\"",[51,160938,282],{"class":65},[51,160940,160941,160943,160945,160948],{"class":53,"line":202},[51,160942,31677],{"class":278},[51,160944,546],{"class":65},[51,160946,160947],{"class":61},"\"1. 查询余额\"",[51,160949,282],{"class":65},[51,160951,160952,160954,160956,160959],{"class":53,"line":209},[51,160953,31677],{"class":278},[51,160955,546],{"class":65},[51,160957,160958],{"class":61},"\"2. 存款\"",[51,160960,282],{"class":65},[51,160962,160963,160965,160967,160970],{"class":53,"line":223},[51,160964,31677],{"class":278},[51,160966,546],{"class":65},[51,160968,160969],{"class":61},"\"3. 取款\"",[51,160971,282],{"class":65},[51,160973,160974,160976,160978,160981],{"class":53,"line":237},[51,160975,31677],{"class":278},[51,160977,546],{"class":65},[51,160979,160980],{"class":61},"\"0. 退出\"",[51,160982,282],{"class":65},[51,160984,160985],{"class":53,"line":242},[51,160986,206],{"emptyLinePlaceholder":205},[51,160988,160989,160992,160994,160996,160998,161000],{"class":53,"line":257},[51,160990,160991],{"class":65},"    choice ",[51,160993,70],{"class":69},[51,160995,60977],{"class":278},[51,160997,546],{"class":65},[51,160999,153372],{"class":61},[51,161001,282],{"class":65},[51,161003,161004],{"class":53,"line":262},[51,161005,206],{"emptyLinePlaceholder":205},[51,161007,161008,161010,161012,161014,161016],{"class":53,"line":285},[51,161009,3488],{"class":69},[51,161011,153385],{"class":65},[51,161013,375],{"class":69},[51,161015,153390],{"class":61},[51,161017,363],{"class":65},[51,161019,161020,161022,161024,161027],{"class":53,"line":296},[51,161021,32826],{"class":278},[51,161023,546],{"class":65},[51,161025,161026],{"class":61},"\"余额为1000元\"",[51,161028,282],{"class":65},[51,161030,161031,161033,161035,161037,161039],{"class":53,"line":307},[51,161032,39667],{"class":69},[51,161034,153385],{"class":65},[51,161036,375],{"class":69},[51,161038,153409],{"class":61},[51,161040,363],{"class":65},[51,161042,161043,161045,161047,161050],{"class":53,"line":324},[51,161044,32826],{"class":278},[51,161046,546],{"class":65},[51,161048,161049],{"class":61},"\"存款功能\"",[51,161051,282],{"class":65},[51,161053,161054,161056,161058,161060,161062],{"class":53,"line":329},[51,161055,39667],{"class":69},[51,161057,153385],{"class":65},[51,161059,375],{"class":69},[51,161061,153427],{"class":61},[51,161063,363],{"class":65},[51,161065,161066,161068,161070,161073],{"class":53,"line":334},[51,161067,32826],{"class":278},[51,161069,546],{"class":65},[51,161071,161072],{"class":61},"\"取款功能\"",[51,161074,282],{"class":65},[51,161076,161077,161079,161081,161083,161085],{"class":53,"line":340},[51,161078,39667],{"class":69},[51,161080,153385],{"class":65},[51,161082,375],{"class":69},[51,161084,153481],{"class":61},[51,161086,363],{"class":65},[51,161088,161089,161091,161093,161095],{"class":53,"line":345},[51,161090,32826],{"class":278},[51,161092,546],{"class":65},[51,161094,153492],{"class":61},[51,161096,282],{"class":65},[51,161098,161099],{"class":53,"line":357},[51,161100,32003],{"class":69},[51,161102,161103,161105],{"class":53,"line":366},[51,161104,158321],{"class":69},[51,161106,363],{"class":65},[51,161108,161109,161111,161113,161115],{"class":53,"line":383},[51,161110,32826],{"class":278},[51,161112,546],{"class":65},[51,161114,153513],{"class":61},[51,161116,282],{"class":65},[10,161118,161119,161120,161122,161123,28767],{},"菜单类程序通常使用 ",[48,161121,159821],{},"，用户选择退出时 ",[48,161124,2443],{},[486,161126,161128],{"id":161127},"_414-易错点","4.14 易错点",[19,161130,161131,161136,161142,161150,161156],{},[22,161132,161133,161135],{},[48,161134,447],{}," 循环必须更新控制变量。",[22,161137,161138,161141],{},[48,161139,161140],{},"range(1, 10)"," 不包含 10。",[22,161143,161144,161146,161147,161149],{},[48,161145,2443],{}," 结束整个循环，",[48,161148,154971],{}," 只跳过本轮。",[22,161151,161152,161153,161155],{},"嵌套循环中，",[48,161154,2443],{}," 只跳出当前所在的一层循环。",[22,161157,161158],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[486,161160,161162],{"id":161161},"_415-本章练习","4.15 本章练习",[19,161164,161165,161168,161171,161174,161177],{},[22,161166,161167],{},"输出 1 到 100。",[22,161169,161170],{},"计算 1 到 100 的偶数和。",[22,161172,161173],{},"输出 100 以内能被 3 和 5 同时整除的数。",[22,161175,161176],{},"编写猜数字游戏，限制最多猜 7 次。",[22,161178,161179],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[464,161181,161182],{},"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":46,"searchDepth":185,"depth":185,"links":161184},[161185,161186,161187,161188,161189,161193,161194,161195,161196,161197,161198,161199,161200,161201,161202],{"id":159441,"depth":185,"text":159442},{"id":159471,"depth":185,"text":159472},{"id":159560,"depth":185,"text":159561},{"id":159654,"depth":185,"text":159655},{"id":159828,"depth":185,"text":159829,"children":161190},[161191,161192],{"id":159832,"depth":202,"text":159833},{"id":159896,"depth":202,"text":159897},{"id":159960,"depth":185,"text":159961},{"id":160055,"depth":185,"text":160056},{"id":160164,"depth":185,"text":160165},{"id":160360,"depth":185,"text":160361},{"id":160445,"depth":185,"text":160446},{"id":160584,"depth":185,"text":160585},{"id":160764,"depth":185,"text":160765},{"id":160913,"depth":185,"text":160914},{"id":161127,"depth":185,"text":161128},{"id":161161,"depth":185,"text":161162},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159433,"description":23760},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161209,"title":161210,"body":161211,"description":23760,"extension":469,"meta":163216,"navigation":205,"path":163217,"seo":163218,"stem":163219,"__hash__":163220},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161212,"toc":163196},[161213,161216,161220,161223,161226,161240,161243,161257,161261,161263,161282,161284,161331,161333,161347,161351,161425,161428,161432,161435,161494,161502,161505,161558,161561,161565,161570,161625,161633,161683,161687,161692,161700,161799,161805,161809,161814,161817,161828,161869,161882,161886,161889,161925,161928,161941,161944,162004,162008,162012,162015,162066,162070,162073,162120,162126,162192,162195,162199,162202,162318,162321,162325,162328,162434,162438,162441,162479,162482,162524,162527,162587,162590,162594,163058,163061,163065,163092,163098,163159,163163,163193],[14,161214,161210],{"id":161215},"_5-函数基础",[486,161217,161219],{"id":161218},"_51-为什么需要函数","5.1 为什么需要函数",[10,161221,161222],{},"函数用于封装一段可以重复使用的代码。",[10,161224,161225],{},"不使用函数的问题：",[19,161227,161228,161231,161234,161237],{},[22,161229,161230],{},"重复代码多。",[22,161232,161233],{},"修改逻辑时容易漏改。",[22,161235,161236],{},"主流程不清晰。",[22,161238,161239],{},"程序越写越长，难以维护。",[10,161241,161242],{},"使用函数后的好处：",[19,161244,161245,161248,161251,161254],{},[22,161246,161247],{},"提高复用性。",[22,161249,161250],{},"提高可读性。",[22,161252,161253],{},"便于调试。",[22,161255,161256],{},"便于分工。",[486,161258,161260],{"id":161259},"_52-函数定义","5.2 函数定义",[10,161262,5566],{},[41,161264,161266],{"className":170,"code":161265,"language":172,"meta":46,"style":46},"def 函数名():\n    函数体\n",[48,161267,161268,161277],{"__ignoreMap":46},[51,161269,161270,161272,161275],{"class":53,"line":54},[51,161271,348],{"class":69},[51,161273,161274],{"class":57}," 函数名",[51,161276,32328],{"class":65},[51,161278,161279],{"class":53,"line":185},[51,161280,161281],{"class":65},"    函数体\n",[10,161283,15519],{},[41,161285,161287],{"className":170,"code":161286,"language":172,"meta":46,"style":46},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[48,161288,161289,161298,161308,161318,161322,161326],{"__ignoreMap":46},[51,161290,161291,161293,161296],{"class":53,"line":54},[51,161292,348],{"class":69},[51,161294,161295],{"class":57}," say_hello",[51,161297,32328],{"class":65},[51,161299,161300,161302,161304,161306],{"class":53,"line":185},[51,161301,31677],{"class":278},[51,161303,546],{"class":65},[51,161305,6228],{"class":61},[51,161307,282],{"class":65},[51,161309,161310,161312,161314,161316],{"class":53,"line":202},[51,161311,31677],{"class":278},[51,161313,546],{"class":65},[51,161315,146938],{"class":61},[51,161317,282],{"class":65},[51,161319,161320],{"class":53,"line":209},[51,161321,206],{"emptyLinePlaceholder":205},[51,161323,161324],{"class":53,"line":223},[51,161325,206],{"emptyLinePlaceholder":205},[51,161327,161328],{"class":53,"line":237},[51,161329,161330],{"class":65},"say_hello()\n",[10,161332,9409],{},[19,161334,161335,161338,161341,161344],{},[22,161336,161337],{},"函数必须先定义，再调用。",[22,161339,161340],{},"函数名遵循变量命名规则。",[22,161342,161343],{},"函数体需要缩进。",[22,161345,161346],{},"函数不调用就不会执行。",[486,161348,161350],{"id":161349},"_53-函数调用","5.3 函数调用",[41,161352,161354],{"className":170,"code":161353,"language":172,"meta":46,"style":46},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[48,161355,161356,161365,161376,161387,161398,161408,161412,161416,161421],{"__ignoreMap":46},[51,161357,161358,161360,161363],{"class":53,"line":54},[51,161359,348],{"class":69},[51,161361,161362],{"class":57}," print_menu",[51,161364,32328],{"class":65},[51,161366,161367,161369,161371,161374],{"class":53,"line":185},[51,161368,31677],{"class":278},[51,161370,546],{"class":65},[51,161372,161373],{"class":61},"\"1. 查询\"",[51,161375,282],{"class":65},[51,161377,161378,161380,161382,161385],{"class":53,"line":202},[51,161379,31677],{"class":278},[51,161381,546],{"class":65},[51,161383,161384],{"class":61},"\"2. 添加\"",[51,161386,282],{"class":65},[51,161388,161389,161391,161393,161396],{"class":53,"line":209},[51,161390,31677],{"class":278},[51,161392,546],{"class":65},[51,161394,161395],{"class":61},"\"3. 删除\"",[51,161397,282],{"class":65},[51,161399,161400,161402,161404,161406],{"class":53,"line":223},[51,161401,31677],{"class":278},[51,161403,546],{"class":65},[51,161405,160980],{"class":61},[51,161407,282],{"class":65},[51,161409,161410],{"class":53,"line":237},[51,161411,206],{"emptyLinePlaceholder":205},[51,161413,161414],{"class":53,"line":242},[51,161415,206],{"emptyLinePlaceholder":205},[51,161417,161418],{"class":53,"line":257},[51,161419,161420],{"class":65},"print_menu()\n",[51,161422,161423],{"class":53,"line":262},[51,161424,161420],{"class":65},[10,161426,161427],{},"函数可以多次调用，每次调用都会执行函数体。",[486,161429,161431],{"id":161430},"_54-参数","5.4 参数",[10,161433,161434],{},"参数用于向函数传递数据。",[41,161436,161438],{"className":170,"code":161437,"language":172,"meta":46,"style":46},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[48,161439,161440,161449,161469,161473,161477,161486],{"__ignoreMap":46},[51,161441,161442,161444,161446],{"class":53,"line":54},[51,161443,348],{"class":69},[51,161445,161295],{"class":57},[51,161447,161448],{"class":65},"(name):\n",[51,161450,161451,161453,161455,161457,161459,161461,161463,161465,161467],{"class":53,"line":185},[51,161452,31677],{"class":278},[51,161454,546],{"class":65},[51,161456,595],{"class":69},[51,161458,157353],{"class":61},[51,161460,1438],{"class":278},[51,161462,80182],{"class":65},[51,161464,1488],{"class":278},[51,161466,793],{"class":61},[51,161468,282],{"class":65},[51,161470,161471],{"class":53,"line":202},[51,161472,206],{"emptyLinePlaceholder":205},[51,161474,161475],{"class":53,"line":209},[51,161476,206],{"emptyLinePlaceholder":205},[51,161478,161479,161482,161484],{"class":53,"line":223},[51,161480,161481],{"class":65},"say_hello(",[51,161483,150187],{"class":61},[51,161485,282],{"class":65},[51,161487,161488,161490,161492],{"class":53,"line":237},[51,161489,161481],{"class":65},[51,161491,151235],{"class":61},[51,161493,282],{"class":65},[10,161495,161496,161498,161499,161501],{},[48,161497,80182],{}," 是形参，",[48,161500,150187],{}," 是实参。",[10,161503,161504],{},"多个参数：",[41,161506,161508],{"className":170,"code":161507,"language":172,"meta":46,"style":46},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[48,161509,161510,161518,161531,161537,161541,161545],{"__ignoreMap":46},[51,161511,161512,161514,161516],{"class":53,"line":54},[51,161513,348],{"class":69},[51,161515,5594],{"class":57},[51,161517,151392],{"class":65},[51,161519,161520,161523,161525,161527,161529],{"class":53,"line":185},[51,161521,161522],{"class":65},"    result ",[51,161524,70],{"class":69},[51,161526,11253],{"class":65},[51,161528,1023],{"class":69},[51,161530,151403],{"class":65},[51,161532,161533,161535],{"class":53,"line":202},[51,161534,31677],{"class":278},[51,161536,76957],{"class":65},[51,161538,161539],{"class":53,"line":209},[51,161540,206],{"emptyLinePlaceholder":205},[51,161542,161543],{"class":53,"line":223},[51,161544,206],{"emptyLinePlaceholder":205},[51,161546,161547,161550,161552,161554,161556],{"class":53,"line":237},[51,161548,161549],{"class":65},"add(",[51,161551,988],{"class":278},[51,161553,12819],{"class":65},[51,161555,1242],{"class":278},[51,161557,282],{"class":65},[10,161559,161560],{},"调用时参数数量必须匹配。",[486,161562,161564],{"id":161563},"_55-返回值","5.5 返回值",[10,161566,161567,161569],{},[48,161568,17429],{}," 用于把函数内部的结果返回给调用者。",[41,161571,161573],{"className":170,"code":161572,"language":172,"meta":46,"style":46},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[48,161574,161575,161583,161593,161597,161601,161619],{"__ignoreMap":46},[51,161576,161577,161579,161581],{"class":53,"line":54},[51,161578,348],{"class":69},[51,161580,5594],{"class":57},[51,161582,151392],{"class":65},[51,161584,161585,161587,161589,161591],{"class":53,"line":185},[51,161586,4476],{"class":69},[51,161588,11253],{"class":65},[51,161590,1023],{"class":69},[51,161592,151403],{"class":65},[51,161594,161595],{"class":53,"line":202},[51,161596,206],{"emptyLinePlaceholder":205},[51,161598,161599],{"class":53,"line":209},[51,161600,206],{"emptyLinePlaceholder":205},[51,161602,161603,161606,161608,161611,161613,161615,161617],{"class":53,"line":223},[51,161604,161605],{"class":65},"result ",[51,161607,70],{"class":69},[51,161609,161610],{"class":65}," add(",[51,161612,988],{"class":278},[51,161614,12819],{"class":65},[51,161616,1242],{"class":278},[51,161618,282],{"class":65},[51,161620,161621,161623],{"class":53,"line":237},[51,161622,30794],{"class":278},[51,161624,76957],{"class":65},[10,161626,161627,161628,161630,161631,28767],{},"如果函数没有写 ",[48,161629,17429],{},"，默认返回 ",[48,161632,96058],{},[41,161634,161636],{"className":170,"code":161635,"language":172,"meta":46,"style":46},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[48,161637,161638,161646,161656,161660,161664,161673],{"__ignoreMap":46},[51,161639,161640,161642,161644],{"class":53,"line":54},[51,161641,348],{"class":69},[51,161643,161295],{"class":57},[51,161645,32328],{"class":65},[51,161647,161648,161650,161652,161654],{"class":53,"line":185},[51,161649,31677],{"class":278},[51,161651,546],{"class":65},[51,161653,6228],{"class":61},[51,161655,282],{"class":65},[51,161657,161658],{"class":53,"line":202},[51,161659,206],{"emptyLinePlaceholder":205},[51,161661,161662],{"class":53,"line":209},[51,161663,206],{"emptyLinePlaceholder":205},[51,161665,161666,161668,161670],{"class":53,"line":223},[51,161667,161605],{"class":65},[51,161669,70],{"class":69},[51,161671,161672],{"class":65}," say_hello()\n",[51,161674,161675,161677,161680],{"class":53,"line":237},[51,161676,30794],{"class":278},[51,161678,161679],{"class":65},"(result)  ",[51,161681,161682],{"class":601},"# None\n",[486,161684,161686],{"id":161685},"_56-return的作用","5.6 return的作用",[10,161688,161689,161691],{},[48,161690,17429],{}," 有两个作用：",[19,161693,161694,161697],{},[22,161695,161696],{},"返回结果。",[22,161698,161699],{},"结束函数。",[41,161701,161703],{"className":170,"code":161702,"language":172,"meta":46,"style":46},"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",[48,161704,161705,161715,161727,161734,161738,161750,161757,161761,161768,161772,161776,161787],{"__ignoreMap":46},[51,161706,161707,161709,161712],{"class":53,"line":54},[51,161708,348],{"class":69},[51,161710,161711],{"class":57}," check_age",[51,161713,161714],{"class":65},"(age):\n",[51,161716,161717,161719,161721,161723,161725],{"class":53,"line":185},[51,161718,3488],{"class":69},[51,161720,16091],{"class":65},[51,161722,1452],{"class":69},[51,161724,4479],{"class":278},[51,161726,363],{"class":65},[51,161728,161729,161731],{"class":53,"line":202},[51,161730,15136],{"class":69},[51,161732,161733],{"class":61}," \"年龄不合法\"\n",[51,161735,161736],{"class":53,"line":209},[51,161737,206],{"emptyLinePlaceholder":205},[51,161739,161740,161742,161744,161746,161748],{"class":53,"line":223},[51,161741,3488],{"class":69},[51,161743,16091],{"class":65},[51,161745,2108],{"class":69},[51,161747,156584],{"class":278},[51,161749,363],{"class":65},[51,161751,161752,161754],{"class":53,"line":237},[51,161753,15136],{"class":69},[51,161755,161756],{"class":61}," \"成年人\"\n",[51,161758,161759],{"class":53,"line":242},[51,161760,206],{"emptyLinePlaceholder":205},[51,161762,161763,161765],{"class":53,"line":257},[51,161764,4476],{"class":69},[51,161766,161767],{"class":61}," \"未成年人\"\n",[51,161769,161770],{"class":53,"line":262},[51,161771,206],{"emptyLinePlaceholder":205},[51,161773,161774],{"class":53,"line":285},[51,161775,206],{"emptyLinePlaceholder":205},[51,161777,161778,161780,161783,161785],{"class":53,"line":296},[51,161779,30794],{"class":278},[51,161781,161782],{"class":65},"(check_age(",[51,161784,1242],{"class":278},[51,161786,30876],{"class":65},[51,161788,161789,161791,161793,161795,161797],{"class":53,"line":307},[51,161790,30794],{"class":278},[51,161792,161782],{"class":65},[51,161794,1074],{"class":69},[51,161796,759],{"class":278},[51,161798,30876],{"class":65},[10,161800,161801,161802,161804],{},"函数执行到 ",[48,161803,17429],{}," 后，后面的代码不会继续执行。",[486,161806,161808],{"id":161807},"_57-none","5.7 None",[10,161810,161811,161813],{},[48,161812,96058],{}," 表示空值或没有结果。",[10,161815,161816],{},"常见使用场景：",[19,161818,161819,161822,161825],{},[22,161820,161821],{},"函数没有返回值。",[22,161823,161824],{},"变量暂时没有具体值。",[22,161826,161827],{},"表示查询不到结果。",[41,161829,161831],{"className":170,"code":161830,"language":172,"meta":46,"style":46},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[48,161832,161833,161841,161845,161858],{"__ignoreMap":46},[51,161834,161835,161837,161839],{"class":53,"line":54},[51,161836,161605],{"class":65},[51,161838,70],{"class":69},[51,161840,152471],{"class":278},[51,161842,161843],{"class":53,"line":185},[51,161844,206],{"emptyLinePlaceholder":205},[51,161846,161847,161849,161852,161854,161856],{"class":53,"line":202},[51,161848,1940],{"class":69},[51,161850,161851],{"class":65}," result ",[51,161853,39301],{"class":69},[51,161855,39307],{"class":278},[51,161857,363],{"class":65},[51,161859,161860,161862,161864,161867],{"class":53,"line":209},[51,161861,31677],{"class":278},[51,161863,546],{"class":65},[51,161865,161866],{"class":61},"\"没有数据\"",[51,161868,282],{"class":65},[10,161870,161871,161872,161874,161875,161878,161879,28767],{},"判断 ",[48,161873,96058],{}," 推荐使用 ",[48,161876,161877],{},"is None","，不要写成 ",[48,161880,161881],{},"== None",[486,161883,161885],{"id":161884},"_58-函数文档字符串","5.8 函数文档字符串",[10,161887,161888],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[41,161890,161892],{"className":170,"code":161891,"language":172,"meta":46,"style":46},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[48,161893,161894,161904,161909],{"__ignoreMap":46},[51,161895,161896,161898,161901],{"class":53,"line":54},[51,161897,348],{"class":69},[51,161899,161900],{"class":57}," calculate_bmi",[51,161902,161903],{"class":65},"(weight, height):\n",[51,161905,161906],{"class":53,"line":185},[51,161907,161908],{"class":61},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[51,161910,161911,161913,161916,161918,161921,161923],{"class":53,"line":202},[51,161912,4476],{"class":69},[51,161914,161915],{"class":65}," weight ",[51,161917,1126],{"class":69},[51,161919,161920],{"class":65}," height ",[51,161922,11045],{"class":69},[51,161924,48095],{"class":278},[10,161926,161927],{},"查看说明：",[41,161929,161931],{"className":170,"code":161930,"language":172,"meta":46,"style":46},"help(calculate_bmi)\n",[48,161932,161933],{"__ignoreMap":46},[51,161934,161935,161938],{"class":53,"line":54},[51,161936,161937],{"class":278},"help",[51,161939,161940],{"class":65},"(calculate_bmi)\n",[10,161942,161943],{},"较完整的写法：",[41,161945,161947],{"className":170,"code":161946,"language":172,"meta":46,"style":46},"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",[48,161948,161949,161957,161962,161967,161971,161976,161981,161986,161990],{"__ignoreMap":46},[51,161950,161951,161953,161955],{"class":53,"line":54},[51,161952,348],{"class":69},[51,161954,161900],{"class":57},[51,161956,161903],{"class":65},[51,161958,161959],{"class":53,"line":185},[51,161960,161961],{"class":61},"    \"\"\"\n",[51,161963,161964],{"class":53,"line":202},[51,161965,161966],{"class":61},"    计算BMI。\n",[51,161968,161969],{"class":53,"line":209},[51,161970,206],{"emptyLinePlaceholder":205},[51,161972,161973],{"class":53,"line":223},[51,161974,161975],{"class":61},"    :param weight: 体重，单位kg\n",[51,161977,161978],{"class":53,"line":237},[51,161979,161980],{"class":61},"    :param height: 身高，单位m\n",[51,161982,161983],{"class":53,"line":242},[51,161984,161985],{"class":61},"    :return: BMI数值\n",[51,161987,161988],{"class":53,"line":257},[51,161989,161961],{"class":61},[51,161991,161992,161994,161996,161998,162000,162002],{"class":53,"line":262},[51,161993,4476],{"class":69},[51,161995,161915],{"class":65},[51,161997,1126],{"class":69},[51,161999,161920],{"class":65},[51,162001,11045],{"class":69},[51,162003,48095],{"class":278},[486,162005,162007],{"id":162006},"_59-变量作用域","5.9 变量作用域",[513,162009,162011],{"id":162010},"_591-局部变量","5.9.1 局部变量",[10,162013,162014],{},"在函数内部定义的变量，只能在函数内部使用。",[41,162016,162018],{"className":170,"code":162017,"language":172,"meta":46,"style":46},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[48,162019,162020,162029,162037,162043,162047,162051,162056],{"__ignoreMap":46},[51,162021,162022,162024,162027],{"class":53,"line":54},[51,162023,348],{"class":69},[51,162025,162026],{"class":57}," test",[51,162028,32328],{"class":65},[51,162030,162031,162033,162035],{"class":53,"line":185},[51,162032,45965],{"class":65},[51,162034,70],{"class":69},[51,162036,58800],{"class":278},[51,162038,162039,162041],{"class":53,"line":202},[51,162040,31677],{"class":278},[51,162042,558],{"class":65},[51,162044,162045],{"class":53,"line":209},[51,162046,206],{"emptyLinePlaceholder":205},[51,162048,162049],{"class":53,"line":223},[51,162050,206],{"emptyLinePlaceholder":205},[51,162052,162053],{"class":53,"line":237},[51,162054,162055],{"class":65},"test()\n",[51,162057,162058,162060,162063],{"class":53,"line":242},[51,162059,30794],{"class":278},[51,162061,162062],{"class":65},"(num)  ",[51,162064,162065],{"class":601},"# 报错\n",[513,162067,162069],{"id":162068},"_592-全局变量","5.9.2 全局变量",[10,162071,162072],{},"在函数外部定义的变量，可以在函数内部读取。",[41,162074,162076],{"className":170,"code":162075,"language":172,"meta":46,"style":46},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[48,162077,162078,162086,162090,162094,162102,162108,162112,162116],{"__ignoreMap":46},[51,162079,162080,162082,162084],{"class":53,"line":54},[51,162081,146835],{"class":65},[51,162083,70],{"class":69},[51,162085,149652],{"class":61},[51,162087,162088],{"class":53,"line":185},[51,162089,206],{"emptyLinePlaceholder":205},[51,162091,162092],{"class":53,"line":202},[51,162093,206],{"emptyLinePlaceholder":205},[51,162095,162096,162098,162100],{"class":53,"line":209},[51,162097,348],{"class":69},[51,162099,161295],{"class":57},[51,162101,32328],{"class":65},[51,162103,162104,162106],{"class":53,"line":223},[51,162105,31677],{"class":278},[51,162107,150959],{"class":65},[51,162109,162110],{"class":53,"line":237},[51,162111,206],{"emptyLinePlaceholder":205},[51,162113,162114],{"class":53,"line":242},[51,162115,206],{"emptyLinePlaceholder":205},[51,162117,162118],{"class":53,"line":257},[51,162119,161330],{"class":65},[10,162121,162122,162123,28767],{},"如果要在函数内部修改全局变量，需要 ",[48,162124,162125],{},"global",[41,162127,162129],{"className":170,"code":162128,"language":172,"meta":46,"style":46},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[48,162130,162131,162139,162143,162147,162156,162164,162172,162176,162180,162185],{"__ignoreMap":46},[51,162132,162133,162135,162137],{"class":53,"line":54},[51,162134,146990],{"class":65},[51,162136,70],{"class":69},[51,162138,47705],{"class":278},[51,162140,162141],{"class":53,"line":185},[51,162142,206],{"emptyLinePlaceholder":205},[51,162144,162145],{"class":53,"line":202},[51,162146,206],{"emptyLinePlaceholder":205},[51,162148,162149,162151,162154],{"class":53,"line":209},[51,162150,348],{"class":69},[51,162152,162153],{"class":57}," add_count",[51,162155,32328],{"class":65},[51,162157,162158,162161],{"class":53,"line":223},[51,162159,162160],{"class":69},"    global",[51,162162,162163],{"class":65}," count\n",[51,162165,162166,162168,162170],{"class":53,"line":237},[51,162167,159732],{"class":65},[51,162169,9861],{"class":69},[51,162171,56071],{"class":278},[51,162173,162174],{"class":53,"line":242},[51,162175,206],{"emptyLinePlaceholder":205},[51,162177,162178],{"class":53,"line":257},[51,162179,206],{"emptyLinePlaceholder":205},[51,162181,162182],{"class":53,"line":262},[51,162183,162184],{"class":65},"add_count()\n",[51,162186,162187,162189],{"class":53,"line":285},[51,162188,30794],{"class":278},[51,162190,162191],{"class":65},"(count)\n",[10,162193,162194],{},"不建议大量使用全局变量，项目变大后很难维护。",[486,162196,162198],{"id":162197},"_510-函数嵌套调用","5.10 函数嵌套调用",[10,162200,162201],{},"一个函数中可以调用另一个函数。",[41,162203,162205],{"className":170,"code":162204,"language":172,"meta":46,"style":46},"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",[48,162206,162207,162216,162230,162234,162238,162247,162252,162272,162293,162297,162301,162305],{"__ignoreMap":46},[51,162208,162209,162211,162214],{"class":53,"line":54},[51,162210,348],{"class":69},[51,162212,162213],{"class":57}," print_line",[51,162215,32328],{"class":65},[51,162217,162218,162220,162222,162224,162226,162228],{"class":53,"line":185},[51,162219,31677],{"class":278},[51,162221,546],{"class":65},[51,162223,32858],{"class":61},[51,162225,6902],{"class":69},[51,162227,79037],{"class":278},[51,162229,282],{"class":65},[51,162231,162232],{"class":53,"line":202},[51,162233,206],{"emptyLinePlaceholder":205},[51,162235,162236],{"class":53,"line":209},[51,162237,206],{"emptyLinePlaceholder":205},[51,162239,162240,162242,162245],{"class":53,"line":223},[51,162241,348],{"class":69},[51,162243,162244],{"class":57}," print_info",[51,162246,149674],{"class":65},[51,162248,162249],{"class":53,"line":237},[51,162250,162251],{"class":65},"    print_line()\n",[51,162253,162254,162256,162258,162260,162262,162264,162266,162268,162270],{"class":53,"line":242},[51,162255,31677],{"class":278},[51,162257,546],{"class":65},[51,162259,595],{"class":69},[51,162261,156981],{"class":61},[51,162263,1438],{"class":278},[51,162265,80182],{"class":65},[51,162267,1488],{"class":278},[51,162269,793],{"class":61},[51,162271,282],{"class":65},[51,162273,162274,162276,162278,162280,162283,162285,162287,162289,162291],{"class":53,"line":257},[51,162275,31677],{"class":278},[51,162277,546],{"class":65},[51,162279,595],{"class":69},[51,162281,162282],{"class":61},"\"年龄:",[51,162284,1438],{"class":278},[51,162286,70593],{"class":65},[51,162288,1488],{"class":278},[51,162290,793],{"class":61},[51,162292,282],{"class":65},[51,162294,162295],{"class":53,"line":262},[51,162296,162251],{"class":65},[51,162298,162299],{"class":53,"line":285},[51,162300,206],{"emptyLinePlaceholder":205},[51,162302,162303],{"class":53,"line":296},[51,162304,206],{"emptyLinePlaceholder":205},[51,162306,162307,162310,162312,162314,162316],{"class":53,"line":307},[51,162308,162309],{"class":65},"print_info(",[51,162311,150187],{"class":61},[51,162313,12819],{"class":65},[51,162315,1192],{"class":278},[51,162317,282],{"class":65},[10,162319,162320],{},"这种方式可以把小功能组合成大功能。",[486,162322,162324],{"id":162323},"_511-参数检查","5.11 参数检查",[10,162326,162327],{},"函数内部可以检查参数是否合法。",[41,162329,162331],{"className":170,"code":162330,"language":172,"meta":46,"style":46},"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",[48,162332,162333,162342,162354,162360,162370,162374,162378,162395,162399,162411,162422,162428],{"__ignoreMap":46},[51,162334,162335,162337,162340],{"class":53,"line":54},[51,162336,348],{"class":69},[51,162338,162339],{"class":57}," divide",[51,162341,151392],{"class":65},[51,162343,162344,162346,162348,162350,162352],{"class":53,"line":185},[51,162345,3488],{"class":69},[51,162347,11266],{"class":65},[51,162349,375],{"class":69},[51,162351,4479],{"class":278},[51,162353,363],{"class":65},[51,162355,162356,162358],{"class":53,"line":202},[51,162357,15136],{"class":69},[51,162359,152471],{"class":278},[51,162361,162362,162364,162366,162368],{"class":53,"line":209},[51,162363,4476],{"class":69},[51,162365,11253],{"class":65},[51,162367,1126],{"class":69},[51,162369,151403],{"class":65},[51,162371,162372],{"class":53,"line":223},[51,162373,206],{"emptyLinePlaceholder":205},[51,162375,162376],{"class":53,"line":237},[51,162377,206],{"emptyLinePlaceholder":205},[51,162379,162380,162382,162384,162387,162389,162391,162393],{"class":53,"line":242},[51,162381,161605],{"class":65},[51,162383,70],{"class":69},[51,162385,162386],{"class":65}," divide(",[51,162388,988],{"class":278},[51,162390,12819],{"class":65},[51,162392,733],{"class":278},[51,162394,282],{"class":65},[51,162396,162397],{"class":53,"line":257},[51,162398,206],{"emptyLinePlaceholder":205},[51,162400,162401,162403,162405,162407,162409],{"class":53,"line":262},[51,162402,1940],{"class":69},[51,162404,161851],{"class":65},[51,162406,39301],{"class":69},[51,162408,39307],{"class":278},[51,162410,363],{"class":65},[51,162412,162413,162415,162417,162420],{"class":53,"line":285},[51,162414,31677],{"class":278},[51,162416,546],{"class":65},[51,162418,162419],{"class":61},"\"除数不能为0\"",[51,162421,282],{"class":65},[51,162423,162424,162426],{"class":53,"line":296},[51,162425,2099],{"class":69},[51,162427,363],{"class":65},[51,162429,162430,162432],{"class":53,"line":307},[51,162431,31677],{"class":278},[51,162433,76957],{"class":65},[486,162435,162437],{"id":162436},"_512-类型提示","5.12 类型提示",[10,162439,162440],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[41,162442,162444],{"className":170,"code":162443,"language":172,"meta":46,"style":46},"def add(a: int, b: int) -> int:\n    return a + b\n",[48,162445,162446,162469],{"__ignoreMap":46},[51,162447,162448,162450,162452,162455,162457,162460,162462,162465,162467],{"class":53,"line":54},[51,162449,348],{"class":69},[51,162451,5594],{"class":57},[51,162453,162454],{"class":65},"(a: ",[51,162456,549],{"class":278},[51,162458,162459],{"class":65},", b: ",[51,162461,549],{"class":278},[51,162463,162464],{"class":65},") -> ",[51,162466,549],{"class":278},[51,162468,363],{"class":65},[51,162470,162471,162473,162475,162477],{"class":53,"line":185},[51,162472,4476],{"class":69},[51,162474,11253],{"class":65},[51,162476,1023],{"class":69},[51,162478,151403],{"class":65},[10,162480,162481],{},"字符串参数：",[41,162483,162485],{"className":170,"code":162484,"language":172,"meta":46,"style":46},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[48,162486,162487,162504],{"__ignoreMap":46},[51,162488,162489,162491,162493,162496,162498,162500,162502],{"class":53,"line":54},[51,162490,348],{"class":69},[51,162492,161295],{"class":57},[51,162494,162495],{"class":65},"(name: ",[51,162497,1712],{"class":278},[51,162499,162464],{"class":65},[51,162501,96058],{"class":278},[51,162503,363],{"class":65},[51,162505,162506,162508,162510,162512,162514,162516,162518,162520,162522],{"class":53,"line":185},[51,162507,31677],{"class":278},[51,162509,546],{"class":65},[51,162511,595],{"class":69},[51,162513,157353],{"class":61},[51,162515,1438],{"class":278},[51,162517,80182],{"class":65},[51,162519,1488],{"class":278},[51,162521,793],{"class":61},[51,162523,282],{"class":65},[10,162525,162526],{},"列表参数：",[41,162528,162530],{"className":170,"code":162529,"language":172,"meta":46,"style":46},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[48,162531,162532,162551,162559,162571,162580],{"__ignoreMap":46},[51,162533,162534,162536,162539,162542,162544,162547,162549],{"class":53,"line":54},[51,162535,348],{"class":69},[51,162537,162538],{"class":57}," get_total",[51,162540,162541],{"class":65},"(numbers: list[",[51,162543,549],{"class":278},[51,162545,162546],{"class":65},"]) -> ",[51,162548,549],{"class":278},[51,162550,363],{"class":65},[51,162552,162553,162555,162557],{"class":53,"line":185},[51,162554,159606],{"class":65},[51,162556,70],{"class":69},[51,162558,47705],{"class":278},[51,162560,162561,162563,162566,162568],{"class":53,"line":202},[51,162562,3588],{"class":69},[51,162564,162565],{"class":65}," number ",[51,162567,26425],{"class":69},[51,162569,162570],{"class":65}," numbers:\n",[51,162572,162573,162575,162577],{"class":53,"line":209},[51,162574,160281],{"class":65},[51,162576,9861],{"class":69},[51,162578,162579],{"class":65}," number\n",[51,162581,162582,162584],{"class":53,"line":223},[51,162583,4476],{"class":69},[51,162585,162586],{"class":65}," total\n",[10,162588,162589],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[486,162591,162593],{"id":162592},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[41,162595,162597],{"className":170,"code":162596,"language":172,"meta":46,"style":46},"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",[48,162598,162599,162609,162613,162617,162625,162636,162646,162656,162666,162676,162680,162684,162693,162715,162719,162723,162732,162738,162758,162770,162781,162785,162794,162805,162810,162814,162818,162827,162833,162852,162864,162874,162878,162889,162899,162903,162911,162922,162926,162930,162934,162942,162947,162961,162965,162977,162982,162994,162999,163011,163016,163028,163038,163042,163048],{"__ignoreMap":46},[51,162600,162601,162604,162606],{"class":53,"line":54},[51,162602,162603],{"class":65},"balance ",[51,162605,70],{"class":69},[51,162607,162608],{"class":278}," 1000\n",[51,162610,162611],{"class":53,"line":185},[51,162612,206],{"emptyLinePlaceholder":205},[51,162614,162615],{"class":53,"line":202},[51,162616,206],{"emptyLinePlaceholder":205},[51,162618,162619,162621,162623],{"class":53,"line":209},[51,162620,348],{"class":69},[51,162622,152332],{"class":57},[51,162624,32328],{"class":65},[51,162626,162627,162629,162631,162634],{"class":53,"line":223},[51,162628,31677],{"class":278},[51,162630,546],{"class":65},[51,162632,162633],{"class":61},"\"====== ATM ======\"",[51,162635,282],{"class":65},[51,162637,162638,162640,162642,162644],{"class":53,"line":237},[51,162639,31677],{"class":278},[51,162641,546],{"class":65},[51,162643,160947],{"class":61},[51,162645,282],{"class":65},[51,162647,162648,162650,162652,162654],{"class":53,"line":242},[51,162649,31677],{"class":278},[51,162651,546],{"class":65},[51,162653,160958],{"class":61},[51,162655,282],{"class":65},[51,162657,162658,162660,162662,162664],{"class":53,"line":257},[51,162659,31677],{"class":278},[51,162661,546],{"class":65},[51,162663,160969],{"class":61},[51,162665,282],{"class":65},[51,162667,162668,162670,162672,162674],{"class":53,"line":262},[51,162669,31677],{"class":278},[51,162671,546],{"class":65},[51,162673,160980],{"class":61},[51,162675,282],{"class":65},[51,162677,162678],{"class":53,"line":285},[51,162679,206],{"emptyLinePlaceholder":205},[51,162681,162682],{"class":53,"line":296},[51,162683,206],{"emptyLinePlaceholder":205},[51,162685,162686,162688,162691],{"class":53,"line":307},[51,162687,348],{"class":69},[51,162689,162690],{"class":57}," show_balance",[51,162692,32328],{"class":65},[51,162694,162695,162697,162699,162701,162704,162706,162709,162711,162713],{"class":53,"line":324},[51,162696,31677],{"class":278},[51,162698,546],{"class":65},[51,162700,595],{"class":69},[51,162702,162703],{"class":61},"\"当前余额:",[51,162705,1438],{"class":278},[51,162707,162708],{"class":65},"balance",[51,162710,1488],{"class":278},[51,162712,157311],{"class":61},[51,162714,282],{"class":65},[51,162716,162717],{"class":53,"line":329},[51,162718,206],{"emptyLinePlaceholder":205},[51,162720,162721],{"class":53,"line":334},[51,162722,206],{"emptyLinePlaceholder":205},[51,162724,162725,162727,162730],{"class":53,"line":340},[51,162726,348],{"class":69},[51,162728,162729],{"class":57}," save_money",[51,162731,32328],{"class":65},[51,162733,162734,162736],{"class":53,"line":345},[51,162735,162160],{"class":69},[51,162737,150398],{"class":65},[51,162739,162740,162743,162745,162747,162749,162751,162753,162756],{"class":53,"line":357},[51,162741,162742],{"class":65},"    money ",[51,162744,70],{"class":69},[51,162746,110168],{"class":278},[51,162748,546],{"class":65},[51,162750,54193],{"class":278},[51,162752,546],{"class":65},[51,162754,162755],{"class":61},"\"请输入存款金额:\"",[51,162757,30876],{"class":65},[51,162759,162760,162762,162764,162766,162768],{"class":53,"line":366},[51,162761,3488],{"class":69},[51,162763,150441],{"class":65},[51,162765,1997],{"class":69},[51,162767,4479],{"class":278},[51,162769,363],{"class":65},[51,162771,162772,162774,162776,162779],{"class":53,"line":383},[51,162773,32826],{"class":278},[51,162775,546],{"class":65},[51,162777,162778],{"class":61},"\"金额必须大于0\"",[51,162780,282],{"class":65},[51,162782,162783],{"class":53,"line":392},[51,162784,152660],{"class":69},[51,162786,162787,162790,162792],{"class":53,"line":403},[51,162788,162789],{"class":65},"    balance ",[51,162791,9861],{"class":69},[51,162793,150474],{"class":65},[51,162795,162796,162798,162800,162803],{"class":53,"line":409},[51,162797,31677],{"class":278},[51,162799,546],{"class":65},[51,162801,162802],{"class":61},"\"存款成功\"",[51,162804,282],{"class":65},[51,162806,162807],{"class":53,"line":414},[51,162808,162809],{"class":65},"    show_balance()\n",[51,162811,162812],{"class":53,"line":433},[51,162813,206],{"emptyLinePlaceholder":205},[51,162815,162816],{"class":53,"line":439},[51,162817,206],{"emptyLinePlaceholder":205},[51,162819,162820,162822,162825],{"class":53,"line":444},[51,162821,348],{"class":69},[51,162823,162824],{"class":57}," withdraw_money",[51,162826,32328],{"class":65},[51,162828,162829,162831],{"class":53,"line":453},[51,162830,162160],{"class":69},[51,162832,150398],{"class":65},[51,162834,162835,162837,162839,162841,162843,162845,162847,162850],{"class":53,"line":2174},[51,162836,162742],{"class":65},[51,162838,70],{"class":69},[51,162840,110168],{"class":278},[51,162842,546],{"class":65},[51,162844,54193],{"class":278},[51,162846,546],{"class":65},[51,162848,162849],{"class":61},"\"请输入取款金额:\"",[51,162851,30876],{"class":65},[51,162853,162854,162856,162858,162860,162862],{"class":53,"line":2965},[51,162855,3488],{"class":69},[51,162857,150441],{"class":65},[51,162859,1997],{"class":69},[51,162861,4479],{"class":278},[51,162863,363],{"class":65},[51,162865,162866,162868,162870,162872],{"class":53,"line":2979},[51,162867,32826],{"class":278},[51,162869,546],{"class":65},[51,162871,162778],{"class":61},[51,162873,282],{"class":65},[51,162875,162876],{"class":53,"line":2987},[51,162877,152660],{"class":69},[51,162879,162880,162882,162884,162886],{"class":53,"line":2992},[51,162881,3488],{"class":69},[51,162883,150441],{"class":65},[51,162885,1502],{"class":69},[51,162887,162888],{"class":65}," balance:\n",[51,162890,162891,162893,162895,162897],{"class":53,"line":2998},[51,162892,32826],{"class":278},[51,162894,546],{"class":65},[51,162896,150536],{"class":61},[51,162898,282],{"class":65},[51,162900,162901],{"class":53,"line":3004},[51,162902,152660],{"class":69},[51,162904,162905,162907,162909],{"class":53,"line":3009},[51,162906,162789],{"class":65},[51,162908,150551],{"class":69},[51,162910,150474],{"class":65},[51,162912,162913,162915,162917,162920],{"class":53,"line":8332},[51,162914,31677],{"class":278},[51,162916,546],{"class":65},[51,162918,162919],{"class":61},"\"取款成功\"",[51,162921,282],{"class":65},[51,162923,162924],{"class":53,"line":8356},[51,162925,162809],{"class":65},[51,162927,162928],{"class":53,"line":8361},[51,162929,206],{"emptyLinePlaceholder":205},[51,162931,162932],{"class":53,"line":8367},[51,162933,206],{"emptyLinePlaceholder":205},[51,162935,162936,162938,162940],{"class":53,"line":8394},[51,162937,447],{"class":69},[51,162939,95664],{"class":278},[51,162941,363],{"class":65},[51,162943,162944],{"class":53,"line":8399},[51,162945,162946],{"class":65},"    show_menu()\n",[51,162948,162949,162951,162953,162955,162957,162959],{"class":53,"line":8405},[51,162950,160991],{"class":65},[51,162952,70],{"class":69},[51,162954,60977],{"class":278},[51,162956,546],{"class":65},[51,162958,153372],{"class":61},[51,162960,282],{"class":65},[51,162962,162963],{"class":53,"line":8417},[51,162964,206],{"emptyLinePlaceholder":205},[51,162966,162967,162969,162971,162973,162975],{"class":53,"line":8429},[51,162968,3488],{"class":69},[51,162970,153385],{"class":65},[51,162972,375],{"class":69},[51,162974,153390],{"class":61},[51,162976,363],{"class":65},[51,162978,162979],{"class":53,"line":8441},[51,162980,162981],{"class":65},"        show_balance()\n",[51,162983,162984,162986,162988,162990,162992],{"class":53,"line":10100},[51,162985,39667],{"class":69},[51,162987,153385],{"class":65},[51,162989,375],{"class":69},[51,162991,153409],{"class":61},[51,162993,363],{"class":65},[51,162995,162996],{"class":53,"line":10125},[51,162997,162998],{"class":65},"        save_money()\n",[51,163000,163001,163003,163005,163007,163009],{"class":53,"line":10148},[51,163002,39667],{"class":69},[51,163004,153385],{"class":65},[51,163006,375],{"class":69},[51,163008,153427],{"class":61},[51,163010,363],{"class":65},[51,163012,163013],{"class":53,"line":10172},[51,163014,163015],{"class":65},"        withdraw_money()\n",[51,163017,163018,163020,163022,163024,163026],{"class":53,"line":10177},[51,163019,39667],{"class":69},[51,163021,153385],{"class":65},[51,163023,375],{"class":69},[51,163025,153481],{"class":61},[51,163027,363],{"class":65},[51,163029,163030,163032,163034,163036],{"class":53,"line":10182},[51,163031,32826],{"class":278},[51,163033,546],{"class":65},[51,163035,153492],{"class":61},[51,163037,282],{"class":65},[51,163039,163040],{"class":53,"line":10187},[51,163041,32003],{"class":69},[51,163043,163044,163046],{"class":53,"line":10196},[51,163045,158321],{"class":69},[51,163047,363],{"class":65},[51,163049,163050,163052,163054,163056],{"class":53,"line":10201},[51,163051,32826],{"class":278},[51,163053,546],{"class":65},[51,163055,153513],{"class":61},[51,163057,282],{"class":65},[10,163059,163060],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[486,163062,163064],{"id":163063},"_514-易错点","5.14 易错点",[19,163066,163067,163070,163073,163078,163083,163086],{},[22,163068,163069],{},"函数定义后必须调用才会执行。",[22,163071,163072],{},"函数名后面有括号才是调用。",[22,163074,163075,163077],{},[48,163076,17429],{}," 后面的代码不会执行。",[22,163079,163080,163081,28767],{},"没有返回值的函数默认返回 ",[48,163082,96058],{},[22,163084,163085],{},"局部变量不能在函数外部访问。",[22,163087,163088,163089,163091],{},"不要滥用 ",[48,163090,162125],{},"，更好的方式是让函数返回新值。",[10,163093,163094,163095,163097],{},"例如不用 ",[48,163096,162125],{}," 改写存款：",[41,163099,163101],{"className":170,"code":163100,"language":172,"meta":46,"style":46},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[48,163102,163103,163112,163123,163127,163131,163139,163152],{"__ignoreMap":46},[51,163104,163105,163107,163109],{"class":53,"line":54},[51,163106,348],{"class":69},[51,163108,162729],{"class":57},[51,163110,163111],{"class":65},"(balance, money):\n",[51,163113,163114,163116,163119,163121],{"class":53,"line":185},[51,163115,4476],{"class":69},[51,163117,163118],{"class":65}," balance ",[51,163120,1023],{"class":69},[51,163122,150474],{"class":65},[51,163124,163125],{"class":53,"line":202},[51,163126,206],{"emptyLinePlaceholder":205},[51,163128,163129],{"class":53,"line":209},[51,163130,206],{"emptyLinePlaceholder":205},[51,163132,163133,163135,163137],{"class":53,"line":223},[51,163134,162603],{"class":65},[51,163136,70],{"class":69},[51,163138,162608],{"class":278},[51,163140,163141,163143,163145,163148,163150],{"class":53,"line":237},[51,163142,162603],{"class":65},[51,163144,70],{"class":69},[51,163146,163147],{"class":65}," save_money(balance, ",[51,163149,2120],{"class":278},[51,163151,282],{"class":65},[51,163153,163154,163156],{"class":53,"line":242},[51,163155,30794],{"class":278},[51,163157,163158],{"class":65},"(balance)\n",[486,163160,163162],{"id":163161},"_515-本章练习","5.15 本章练习",[19,163164,163165,163172,163178,163184,163190],{},[22,163166,163167,163168,163171],{},"定义函数 ",[48,163169,163170],{},"print_student(name, age)","，输出学生信息。",[22,163173,163167,163174,163177],{},[48,163175,163176],{},"get_max(a, b, c)","，返回三个数中的最大值。",[22,163179,163167,163180,163183],{},[48,163181,163182],{},"is_even(num)","，判断一个数是否为偶数。",[22,163185,163167,163186,163189],{},[48,163187,163188],{},"calculate_bmi(weight, height)","，返回 BMI。",[22,163191,163192],{},"把第 4 章的菜单程序拆分成多个函数。",[464,163194,163195],{},"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":46,"searchDepth":185,"depth":185,"links":163197},[163198,163199,163200,163201,163202,163203,163204,163205,163206,163210,163211,163212,163213,163214,163215],{"id":161218,"depth":185,"text":161219},{"id":161259,"depth":185,"text":161260},{"id":161349,"depth":185,"text":161350},{"id":161430,"depth":185,"text":161431},{"id":161563,"depth":185,"text":161564},{"id":161685,"depth":185,"text":161686},{"id":161807,"depth":185,"text":161808},{"id":161884,"depth":185,"text":161885},{"id":162006,"depth":185,"text":162007,"children":163207},[163208,163209],{"id":162010,"depth":202,"text":162011},{"id":162068,"depth":202,"text":162069},{"id":162197,"depth":185,"text":162198},{"id":162323,"depth":185,"text":162324},{"id":162436,"depth":185,"text":162437},{"id":162592,"depth":185,"text":162593},{"id":163063,"depth":185,"text":163064},{"id":163161,"depth":185,"text":163162},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161210,"description":23760},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163222,"title":163223,"body":163224,"description":23760,"extension":469,"meta":166268,"navigation":205,"path":166269,"seo":166270,"stem":166271,"__hash__":166272},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163225,"toc":166249},[163226,163229,163233,163236,163239,163343,163346,163350,163353,163433,163436,163440,163443,163503,163506,163542,163545,163560,163564,163637,163640,163695,163698,163768,163771,163855,163865,163923,163927,163972,163975,164001,164004,164110,164114,164117,164159,164162,164226,164229,164233,164236,164297,164300,164330,164333,164371,164375,164378,164387,164390,164514,164517,164558,164562,164565,164576,164616,164619,164634,164639,164642,164709,164712,164802,164806,164809,164857,164860,164887,164889,164919,164922,164942,164945,164976,164979,165012,165016,165019,165043,165046,165070,165073,165097,165101,165104,165234,165237,165317,165320,165395,165399,165402,165452,165455,165497,165500,165524,165526,165550,165553,165608,165611,165677,165681,165684,165687,165725,165728,165781,165784,165830,165833,165866,165869,165873,166192,166196,166225,166229,166246],[14,163227,163223],{"id":163228},"_6-数据容器",[486,163230,163232],{"id":163231},"_61-什么是数据容器","6.1 什么是数据容器",[10,163234,163235],{},"数据容器用于一次保存多个数据。",[10,163237,163238],{},"常见容器：",[679,163240,163241,163258],{},[682,163242,163243],{},[685,163244,163245,163247,163250,163253,163256],{},[688,163246,26153],{},[688,163248,163249],{},"是否有序",[688,163251,163252],{},"是否可变",[688,163254,163255],{},"是否允许重复",[688,163257,27874],{},[726,163259,163260,163278,163294,163309,163326],{},[685,163261,163262,163265,163268,163271,163274],{},[731,163263,163264],{},"list列表",[731,163266,163267],{},"有序",[731,163269,163270],{},"可变",[731,163272,163273],{},"允许",[731,163275,163276],{},[48,163277,155556],{},[685,163279,163280,163283,163285,163288,163290],{},[731,163281,163282],{},"tuple元组",[731,163284,163267],{},[731,163286,163287],{},"不可变",[731,163289,163273],{},[731,163291,163292],{},[48,163293,155569],{},[685,163295,163296,163299,163301,163303,163305],{},[731,163297,163298],{},"str字符串",[731,163300,163267],{},[731,163302,163287],{},[731,163304,163273],{},[731,163306,163307],{},[48,163308,156179],{},[685,163310,163311,163314,163317,163319,163322],{},[731,163312,163313],{},"set集合",[731,163315,163316],{},"无序",[731,163318,163270],{},[731,163320,163321],{},"不允许",[731,163323,163324],{},[48,163325,155594],{},[685,163327,163328,163331,163333,163335,163338],{},[731,163329,163330],{},"dict字典",[731,163332,163267],{},[731,163334,163270],{},[731,163336,163337],{},"key不允许重复",[731,163339,163340],{},[48,163341,163342],{},"{\"name\": \"小明\"}",[10,163344,163345],{},"Python 3.7 之后，字典保持插入顺序。",[486,163347,163349],{"id":163348},"_62-列表list","6.2 列表list",[10,163351,163352],{},"列表用于保存一组有顺序的数据。",[41,163354,163356],{"className":170,"code":163355,"language":172,"meta":46,"style":46},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[48,163357,163358,163378,163403,163424],{"__ignoreMap":46},[51,163359,163360,163362,163364,163366,163368,163370,163372,163374,163376],{"class":53,"line":54},[51,163361,160679],{"class":65},[51,163363,70],{"class":69},[51,163365,52598],{"class":65},[51,163367,150187],{"class":61},[51,163369,12819],{"class":65},[51,163371,151235],{"class":61},[51,163373,12819],{"class":65},[51,163375,160030],{"class":61},[51,163377,33621],{"class":65},[51,163379,163380,163383,163385,163387,163389,163391,163393,163395,163397,163399,163401],{"class":53,"line":185},[51,163381,163382],{"class":65},"numbers ",[51,163384,70],{"class":69},[51,163386,52598],{"class":65},[51,163388,759],{"class":278},[51,163390,12819],{"class":65},[51,163392,620],{"class":278},[51,163394,12819],{"class":65},[51,163396,614],{"class":278},[51,163398,12819],{"class":65},[51,163400,835],{"class":278},[51,163402,33621],{"class":65},[51,163404,163405,163408,163410,163412,163414,163416,163418,163420,163422],{"class":53,"line":202},[51,163406,163407],{"class":65},"mixed ",[51,163409,70],{"class":69},[51,163411,52598],{"class":65},[51,163413,150187],{"class":61},[51,163415,12819],{"class":65},[51,163417,1192],{"class":278},[51,163419,12819],{"class":65},[51,163421,279],{"class":278},[51,163423,33621],{"class":65},[51,163425,163426,163429,163431],{"class":53,"line":209},[51,163427,163428],{"class":65},"empty ",[51,163430,70],{"class":69},[51,163432,52210],{"class":65},[10,163434,163435],{},"推荐一个列表中保存同类数据，代码更清晰。",[486,163437,163439],{"id":163438},"_63-列表索引","6.3 列表索引",[10,163441,163442],{},"正向索引从 0 开始：",[41,163444,163446],{"className":170,"code":163445,"language":172,"meta":46,"style":46},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[48,163447,163448,163468,163472,163483,163493],{"__ignoreMap":46},[51,163449,163450,163452,163454,163456,163458,163460,163462,163464,163466],{"class":53,"line":54},[51,163451,160679],{"class":65},[51,163453,70],{"class":69},[51,163455,52598],{"class":65},[51,163457,150187],{"class":61},[51,163459,12819],{"class":65},[51,163461,151235],{"class":61},[51,163463,12819],{"class":65},[51,163465,160030],{"class":61},[51,163467,33621],{"class":65},[51,163469,163470],{"class":53,"line":185},[51,163471,206],{"emptyLinePlaceholder":205},[51,163473,163474,163476,163479,163481],{"class":53,"line":202},[51,163475,30794],{"class":278},[51,163477,163478],{"class":65},"(names[",[51,163480,733],{"class":278},[51,163482,5042],{"class":65},[51,163484,163485,163487,163489,163491],{"class":53,"line":209},[51,163486,30794],{"class":278},[51,163488,163478],{"class":65},[51,163490,759],{"class":278},[51,163492,5042],{"class":65},[51,163494,163495,163497,163499,163501],{"class":53,"line":223},[51,163496,30794],{"class":278},[51,163498,163478],{"class":65},[51,163500,620],{"class":278},[51,163502,5042],{"class":65},[10,163504,163505],{},"反向索引从 -1 开始：",[41,163507,163509],{"className":170,"code":163508,"language":172,"meta":46,"style":46},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[48,163510,163511,163527],{"__ignoreMap":46},[51,163512,163513,163515,163517,163519,163521,163524],{"class":53,"line":54},[51,163514,30794],{"class":278},[51,163516,163478],{"class":65},[51,163518,1074],{"class":69},[51,163520,759],{"class":278},[51,163522,163523],{"class":65},"])  ",[51,163525,163526],{"class":601},"# 小刚\n",[51,163528,163529,163531,163533,163535,163537,163539],{"class":53,"line":185},[51,163530,30794],{"class":278},[51,163532,163478],{"class":65},[51,163534,1074],{"class":69},[51,163536,620],{"class":278},[51,163538,163523],{"class":65},[51,163540,163541],{"class":601},"# 小红\n",[10,163543,163544],{},"索引越界会报错：",[41,163546,163548],{"className":170,"code":163547,"language":172,"meta":46,"style":46},"print(names[3])\n",[48,163549,163550],{"__ignoreMap":46},[51,163551,163552,163554,163556,163558],{"class":53,"line":54},[51,163553,30794],{"class":278},[51,163555,163478],{"class":65},[51,163557,614],{"class":278},[51,163559,5042],{"class":65},[486,163561,163563],{"id":163562},"_64-列表常用方法","6.4 列表常用方法",[41,163565,163567],{"className":170,"code":163566,"language":172,"meta":46,"style":46},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[48,163568,163569,163585,163589,163598,163612,163626,163630],{"__ignoreMap":46},[51,163570,163571,163573,163575,163577,163579,163581,163583],{"class":53,"line":54},[51,163572,160679],{"class":65},[51,163574,70],{"class":69},[51,163576,52598],{"class":65},[51,163578,150187],{"class":61},[51,163580,12819],{"class":65},[51,163582,151235],{"class":61},[51,163584,33621],{"class":65},[51,163586,163587],{"class":53,"line":185},[51,163588,206],{"emptyLinePlaceholder":205},[51,163590,163591,163594,163596],{"class":53,"line":202},[51,163592,163593],{"class":65},"names.append(",[51,163595,160030],{"class":61},[51,163597,282],{"class":65},[51,163599,163600,163603,163605,163607,163610],{"class":53,"line":209},[51,163601,163602],{"class":65},"names.insert(",[51,163604,759],{"class":278},[51,163606,12819],{"class":65},[51,163608,163609],{"class":61},"\"小李\"",[51,163611,282],{"class":65},[51,163613,163614,163617,163619,163621,163624],{"class":53,"line":223},[51,163615,163616],{"class":65},"names.extend([",[51,163618,9067],{"class":61},[51,163620,12819],{"class":65},[51,163622,163623],{"class":61},"\"小赵\"",[51,163625,5042],{"class":65},[51,163627,163628],{"class":53,"line":237},[51,163629,206],{"emptyLinePlaceholder":205},[51,163631,163632,163634],{"class":53,"line":242},[51,163633,30794],{"class":278},[51,163635,163636],{"class":65},"(names)\n",[10,163638,163639],{},"删除元素：",[41,163641,163643],{"className":170,"code":163642,"language":172,"meta":46,"style":46},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[48,163644,163645,163654,163664,163678,163690],{"__ignoreMap":46},[51,163646,163647,163650,163652],{"class":53,"line":54},[51,163648,163649],{"class":65},"names.remove(",[51,163651,151235],{"class":61},[51,163653,282],{"class":65},[51,163655,163656,163659,163661],{"class":53,"line":185},[51,163657,163658],{"class":65},"last ",[51,163660,70],{"class":69},[51,163662,163663],{"class":65}," names.pop()\n",[51,163665,163666,163669,163671,163674,163676],{"class":53,"line":202},[51,163667,163668],{"class":65},"first ",[51,163670,70],{"class":69},[51,163672,163673],{"class":65}," names.pop(",[51,163675,733],{"class":278},[51,163677,282],{"class":65},[51,163679,163680,163683,163686,163688],{"class":53,"line":209},[51,163681,163682],{"class":69},"del",[51,163684,163685],{"class":65}," names[",[51,163687,733],{"class":278},[51,163689,33621],{"class":65},[51,163691,163692],{"class":53,"line":223},[51,163693,163694],{"class":65},"names.clear()\n",[10,163696,163697],{},"查询和统计：",[41,163699,163701],{"className":170,"code":163700,"language":172,"meta":46,"style":46},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[48,163702,163703,163731,163735,163746,163757],{"__ignoreMap":46},[51,163704,163705,163707,163709,163711,163713,163715,163717,163719,163721,163723,163725,163727,163729],{"class":53,"line":54},[51,163706,163382],{"class":65},[51,163708,70],{"class":69},[51,163710,52598],{"class":65},[51,163712,759],{"class":278},[51,163714,12819],{"class":65},[51,163716,620],{"class":278},[51,163718,12819],{"class":65},[51,163720,614],{"class":278},[51,163722,12819],{"class":65},[51,163724,620],{"class":278},[51,163726,12819],{"class":65},[51,163728,835],{"class":278},[51,163730,33621],{"class":65},[51,163732,163733],{"class":53,"line":185},[51,163734,206],{"emptyLinePlaceholder":205},[51,163736,163737,163739,163742,163744],{"class":53,"line":202},[51,163738,30794],{"class":278},[51,163740,163741],{"class":65},"(numbers.index(",[51,163743,614],{"class":278},[51,163745,30876],{"class":65},[51,163747,163748,163750,163753,163755],{"class":53,"line":209},[51,163749,30794],{"class":278},[51,163751,163752],{"class":65},"(numbers.count(",[51,163754,620],{"class":278},[51,163756,30876],{"class":65},[51,163758,163759,163761,163763,163765],{"class":53,"line":223},[51,163760,30794],{"class":278},[51,163762,546],{"class":65},[51,163764,7742],{"class":278},[51,163766,163767],{"class":65},"(numbers))\n",[10,163769,163770],{},"排序：",[41,163772,163774],{"className":170,"code":163773,"language":172,"meta":46,"style":46},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[48,163775,163776,163800,163804,163809,163816,163820,163834,163840,163844,163849],{"__ignoreMap":46},[51,163777,163778,163780,163782,163784,163786,163788,163790,163792,163794,163796,163798],{"class":53,"line":54},[51,163779,163382],{"class":65},[51,163781,70],{"class":69},[51,163783,52598],{"class":65},[51,163785,614],{"class":278},[51,163787,12819],{"class":65},[51,163789,759],{"class":278},[51,163791,12819],{"class":65},[51,163793,861],{"class":278},[51,163795,12819],{"class":65},[51,163797,620],{"class":278},[51,163799,33621],{"class":65},[51,163801,163802],{"class":53,"line":185},[51,163803,206],{"emptyLinePlaceholder":205},[51,163805,163806],{"class":53,"line":202},[51,163807,163808],{"class":65},"numbers.sort()\n",[51,163810,163811,163813],{"class":53,"line":209},[51,163812,30794],{"class":278},[51,163814,163815],{"class":65},"(numbers)\n",[51,163817,163818],{"class":53,"line":223},[51,163819,206],{"emptyLinePlaceholder":205},[51,163821,163822,163825,163828,163830,163832],{"class":53,"line":237},[51,163823,163824],{"class":65},"numbers.sort(",[51,163826,163827],{"class":248},"reverse",[51,163829,70],{"class":69},[51,163831,279],{"class":278},[51,163833,282],{"class":65},[51,163835,163836,163838],{"class":53,"line":242},[51,163837,30794],{"class":278},[51,163839,163815],{"class":65},[51,163841,163842],{"class":53,"line":257},[51,163843,206],{"emptyLinePlaceholder":205},[51,163845,163846],{"class":53,"line":262},[51,163847,163848],{"class":65},"numbers.reverse()\n",[51,163850,163851,163853],{"class":53,"line":285},[51,163852,30794],{"class":278},[51,163854,163815],{"class":65},[10,163856,163857,163860,163861,163864],{},[48,163858,163859],{},"sort()"," 会修改原列表，",[48,163862,163863],{},"sorted()"," 返回新列表。",[41,163866,163868],{"className":170,"code":163867,"language":172,"meta":46,"style":46},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[48,163869,163870,163894,163906,163910,163916],{"__ignoreMap":46},[51,163871,163872,163874,163876,163878,163880,163882,163884,163886,163888,163890,163892],{"class":53,"line":54},[51,163873,163382],{"class":65},[51,163875,70],{"class":69},[51,163877,52598],{"class":65},[51,163879,614],{"class":278},[51,163881,12819],{"class":65},[51,163883,759],{"class":278},[51,163885,12819],{"class":65},[51,163887,861],{"class":278},[51,163889,12819],{"class":65},[51,163891,620],{"class":278},[51,163893,33621],{"class":65},[51,163895,163896,163899,163901,163904],{"class":53,"line":185},[51,163897,163898],{"class":65},"new_numbers ",[51,163900,70],{"class":69},[51,163902,163903],{"class":278}," sorted",[51,163905,163815],{"class":65},[51,163907,163908],{"class":53,"line":202},[51,163909,206],{"emptyLinePlaceholder":205},[51,163911,163912,163914],{"class":53,"line":209},[51,163913,30794],{"class":278},[51,163915,163815],{"class":65},[51,163917,163918,163920],{"class":53,"line":223},[51,163919,30794],{"class":278},[51,163921,163922],{"class":65},"(new_numbers)\n",[486,163924,163926],{"id":163925},"_65-列表遍历","6.5 列表遍历",[41,163928,163930],{"className":170,"code":163929,"language":172,"meta":46,"style":46},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[48,163931,163932,163952,163956,163966],{"__ignoreMap":46},[51,163933,163934,163936,163938,163940,163942,163944,163946,163948,163950],{"class":53,"line":54},[51,163935,160679],{"class":65},[51,163937,70],{"class":69},[51,163939,52598],{"class":65},[51,163941,150187],{"class":61},[51,163943,12819],{"class":65},[51,163945,151235],{"class":61},[51,163947,12819],{"class":65},[51,163949,160030],{"class":61},[51,163951,33621],{"class":65},[51,163953,163954],{"class":53,"line":185},[51,163955,206],{"emptyLinePlaceholder":205},[51,163957,163958,163960,163962,163964],{"class":53,"line":202},[51,163959,3412],{"class":69},[51,163961,160715],{"class":65},[51,163963,26425],{"class":69},[51,163965,160720],{"class":65},[51,163967,163968,163970],{"class":53,"line":209},[51,163969,31677],{"class":278},[51,163971,150959],{"class":65},[10,163973,163974],{},"需要索引时：",[41,163976,163978],{"className":170,"code":163977,"language":172,"meta":46,"style":46},"for index, name in enumerate(names):\n    print(index, name)\n",[48,163979,163980,163994],{"__ignoreMap":46},[51,163981,163982,163984,163987,163989,163991],{"class":53,"line":54},[51,163983,3412],{"class":69},[51,163985,163986],{"class":65}," index, name ",[51,163988,26425],{"class":69},[51,163990,31982],{"class":278},[51,163992,163993],{"class":65},"(names):\n",[51,163995,163996,163998],{"class":53,"line":185},[51,163997,31677],{"class":278},[51,163999,164000],{"class":65},"(index, name)\n",[10,164002,164003],{},"统计总分：",[41,164005,164007],{"className":170,"code":164006,"language":172,"meta":46,"style":46},"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",[48,164008,164009,164034,164042,164046,164057,164065,164069,164086],{"__ignoreMap":46},[51,164010,164011,164014,164016,164018,164020,164022,164024,164026,164028,164030,164032],{"class":53,"line":54},[51,164012,164013],{"class":65},"scores ",[51,164015,70],{"class":69},[51,164017,52598],{"class":65},[51,164019,1404],{"class":278},[51,164021,12819],{"class":65},[51,164023,1278],{"class":278},[51,164025,12819],{"class":65},[51,164027,796],{"class":278},[51,164029,12819],{"class":65},[51,164031,1103],{"class":278},[51,164033,33621],{"class":65},[51,164035,164036,164038,164040],{"class":53,"line":185},[51,164037,157559],{"class":65},[51,164039,70],{"class":69},[51,164041,47705],{"class":278},[51,164043,164044],{"class":53,"line":202},[51,164045,206],{"emptyLinePlaceholder":205},[51,164047,164048,164050,164052,164054],{"class":53,"line":209},[51,164049,3412],{"class":69},[51,164051,158082],{"class":65},[51,164053,26425],{"class":69},[51,164055,164056],{"class":65}," scores:\n",[51,164058,164059,164061,164063],{"class":53,"line":223},[51,164060,159606],{"class":65},[51,164062,9861],{"class":69},[51,164064,1988],{"class":65},[51,164066,164067],{"class":53,"line":237},[51,164068,206],{"emptyLinePlaceholder":205},[51,164070,164071,164074,164076,164079,164081,164083],{"class":53,"line":242},[51,164072,164073],{"class":65},"avg ",[51,164075,70],{"class":69},[51,164077,164078],{"class":65}," total ",[51,164080,1126],{"class":69},[51,164082,7715],{"class":278},[51,164084,164085],{"class":65},"(scores)\n",[51,164087,164088,164090,164092,164094,164097,164099,164102,164104,164106,164108],{"class":53,"line":257},[51,164089,30794],{"class":278},[51,164091,546],{"class":65},[51,164093,595],{"class":69},[51,164095,164096],{"class":61},"\"平均分:",[51,164098,1438],{"class":278},[51,164100,164101],{"class":65},"avg",[51,164103,157458],{"class":69},[51,164105,1488],{"class":278},[51,164107,793],{"class":61},[51,164109,282],{"class":65},[486,164111,164113],{"id":164112},"_66-元组tuple","6.6 元组tuple",[10,164115,164116],{},"元组和列表类似，但不可修改。",[41,164118,164120],{"className":170,"code":164119,"language":172,"meta":46,"style":46},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[48,164121,164122,164139],{"__ignoreMap":46},[51,164123,164124,164127,164129,164131,164133,164135,164137],{"class":53,"line":54},[51,164125,164126],{"class":65},"point ",[51,164128,70],{"class":69},[51,164130,2060],{"class":65},[51,164132,988],{"class":278},[51,164134,12819],{"class":65},[51,164136,1242],{"class":278},[51,164138,282],{"class":65},[51,164140,164141,164143,164145,164147,164149,164151,164153,164155,164157],{"class":53,"line":185},[51,164142,116685],{"class":65},[51,164144,70],{"class":69},[51,164146,2060],{"class":65},[51,164148,150187],{"class":61},[51,164150,12819],{"class":65},[51,164152,1192],{"class":278},[51,164154,12819],{"class":65},[51,164156,69641],{"class":61},[51,164158,282],{"class":65},[10,164160,164161],{},"单元素元组必须加逗号：",[41,164163,164165],{"className":170,"code":164164,"language":172,"meta":46,"style":46},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[48,164166,164167,164181,164194,164198,164212],{"__ignoreMap":46},[51,164168,164169,164172,164174,164176,164178],{"class":53,"line":54},[51,164170,164171],{"class":65},"t1 ",[51,164173,70],{"class":69},[51,164175,2060],{"class":65},[51,164177,988],{"class":278},[51,164179,164180],{"class":65},",)\n",[51,164182,164183,164186,164188,164190,164192],{"class":53,"line":185},[51,164184,164185],{"class":65},"t2 ",[51,164187,70],{"class":69},[51,164189,2060],{"class":65},[51,164191,988],{"class":278},[51,164193,282],{"class":65},[51,164195,164196],{"class":53,"line":202},[51,164197,206],{"emptyLinePlaceholder":205},[51,164199,164200,164202,164204,164206,164209],{"class":53,"line":209},[51,164201,30794],{"class":278},[51,164203,546],{"class":65},[51,164205,103479],{"class":278},[51,164207,164208],{"class":65},"(t1))  ",[51,164210,164211],{"class":601},"# tuple\n",[51,164213,164214,164216,164218,164220,164223],{"class":53,"line":223},[51,164215,30794],{"class":278},[51,164217,546],{"class":65},[51,164219,103479],{"class":278},[51,164221,164222],{"class":65},"(t2))  ",[51,164224,164225],{"class":601},"# int\n",[10,164227,164228],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[486,164230,164232],{"id":164231},"_67-字符串str","6.7 字符串str",[10,164234,164235],{},"字符串也是序列，可以索引、切片和遍历。",[41,164237,164239],{"className":170,"code":164238,"language":172,"meta":46,"style":46},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[48,164240,164241,164249,164253,164264,164276,164280,164291],{"__ignoreMap":46},[51,164242,164243,164245,164247],{"class":53,"line":54},[51,164244,156743],{"class":65},[51,164246,70],{"class":69},[51,164248,159980],{"class":61},[51,164250,164251],{"class":53,"line":185},[51,164252,206],{"emptyLinePlaceholder":205},[51,164254,164255,164257,164260,164262],{"class":53,"line":202},[51,164256,30794],{"class":278},[51,164258,164259],{"class":65},"(text[",[51,164261,733],{"class":278},[51,164263,5042],{"class":65},[51,164265,164266,164268,164270,164272,164274],{"class":53,"line":209},[51,164267,30794],{"class":278},[51,164269,164259],{"class":65},[51,164271,1074],{"class":69},[51,164273,759],{"class":278},[51,164275,5042],{"class":65},[51,164277,164278],{"class":53,"line":223},[51,164279,206],{"emptyLinePlaceholder":205},[51,164281,164282,164284,164286,164288],{"class":53,"line":237},[51,164283,3412],{"class":69},[51,164285,159991],{"class":65},[51,164287,26425],{"class":69},[51,164289,164290],{"class":65}," text:\n",[51,164292,164293,164295],{"class":53,"line":242},[51,164294,31677],{"class":278},[51,164296,160002],{"class":65},[10,164298,164299],{},"字符串不可变：",[41,164301,164303],{"className":170,"code":164302,"language":172,"meta":46,"style":46},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[48,164304,164305,164313],{"__ignoreMap":46},[51,164306,164307,164309,164311],{"class":53,"line":54},[51,164308,156743],{"class":65},[51,164310,70],{"class":69},[51,164312,159980],{"class":61},[51,164314,164315,164318,164320,164322,164324,164327],{"class":53,"line":185},[51,164316,164317],{"class":65},"text[",[51,164319,733],{"class":278},[51,164321,194],{"class":65},[51,164323,70],{"class":69},[51,164325,164326],{"class":61}," \"P\"",[51,164328,164329],{"class":601},"  # 报错\n",[10,164331,164332],{},"如果要得到新字符串：",[41,164334,164336],{"className":170,"code":164335,"language":172,"meta":46,"style":46},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[48,164337,164338,164346,164364],{"__ignoreMap":46},[51,164339,164340,164342,164344],{"class":53,"line":54},[51,164341,156743],{"class":65},[51,164343,70],{"class":69},[51,164345,159980],{"class":61},[51,164347,164348,164350,164352,164354,164356,164359,164361],{"class":53,"line":185},[51,164349,156743],{"class":65},[51,164351,70],{"class":69},[51,164353,164326],{"class":61},[51,164355,45938],{"class":69},[51,164357,164358],{"class":65}," text[",[51,164360,759],{"class":278},[51,164362,164363],{"class":65},":]\n",[51,164365,164366,164368],{"class":53,"line":202},[51,164367,30794],{"class":278},[51,164369,164370],{"class":65},"(text)\n",[486,164372,164374],{"id":164373},"_68-切片","6.8 切片",[10,164376,164377],{},"切片用于从序列中取一部分。",[41,164379,164381],{"className":170,"code":164380,"language":172,"meta":46,"style":46},"序列[开始:结束:步长]\n",[48,164382,164383],{"__ignoreMap":46},[51,164384,164385],{"class":53,"line":54},[51,164386,164380],{"class":65},[10,164388,164389],{},"结束位置不包含。",[41,164391,164393],{"className":170,"code":164392,"language":172,"meta":46,"style":46},"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",[48,164394,164395,164432,164436,164455,164470,164484,164498],{"__ignoreMap":46},[51,164396,164397,164400,164402,164404,164406,164408,164410,164412,164414,164416,164418,164420,164422,164424,164426,164428,164430],{"class":53,"line":54},[51,164398,164399],{"class":65},"nums ",[51,164401,70],{"class":69},[51,164403,52598],{"class":65},[51,164405,733],{"class":278},[51,164407,12819],{"class":65},[51,164409,759],{"class":278},[51,164411,12819],{"class":65},[51,164413,620],{"class":278},[51,164415,12819],{"class":65},[51,164417,614],{"class":278},[51,164419,12819],{"class":65},[51,164421,835],{"class":278},[51,164423,12819],{"class":65},[51,164425,861],{"class":278},[51,164427,12819],{"class":65},[51,164429,886],{"class":278},[51,164431,33621],{"class":65},[51,164433,164434],{"class":53,"line":185},[51,164435,206],{"emptyLinePlaceholder":205},[51,164437,164438,164440,164443,164445,164447,164449,164452],{"class":53,"line":202},[51,164439,30794],{"class":278},[51,164441,164442],{"class":65},"(nums[",[51,164444,759],{"class":278},[51,164446,1401],{"class":65},[51,164448,835],{"class":278},[51,164450,164451],{"class":65},"])    ",[51,164453,164454],{"class":601},"# [1, 2, 3]\n",[51,164456,164457,164459,164462,164464,164467],{"class":53,"line":209},[51,164458,30794],{"class":278},[51,164460,164461],{"class":65},"(nums[:",[51,164463,614],{"class":278},[51,164465,164466],{"class":65},"])     ",[51,164468,164469],{"class":601},"# [0, 1, 2]\n",[51,164471,164472,164474,164476,164478,164481],{"class":53,"line":223},[51,164473,30794],{"class":278},[51,164475,164442],{"class":65},[51,164477,614],{"class":278},[51,164479,164480],{"class":65},":])     ",[51,164482,164483],{"class":601},"# [3, 4, 5, 6]\n",[51,164485,164486,164488,164491,164493,164495],{"class":53,"line":237},[51,164487,30794],{"class":278},[51,164489,164490],{"class":65},"(nums[::",[51,164492,620],{"class":278},[51,164494,164451],{"class":65},[51,164496,164497],{"class":601},"# [0, 2, 4, 6]\n",[51,164499,164500,164502,164504,164506,164508,164511],{"class":53,"line":242},[51,164501,30794],{"class":278},[51,164503,164490],{"class":65},[51,164505,1074],{"class":69},[51,164507,759],{"class":278},[51,164509,164510],{"class":65},"])   ",[51,164512,164513],{"class":601},"# 反转\n",[10,164515,164516],{},"字符串切片：",[41,164518,164520],{"className":170,"code":164519,"language":172,"meta":46,"style":46},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[48,164521,164522,164531,164545],{"__ignoreMap":46},[51,164523,164524,164526,164528],{"class":53,"line":54},[51,164525,156743],{"class":65},[51,164527,70],{"class":69},[51,164529,164530],{"class":61}," \"abcdef\"\n",[51,164532,164533,164535,164537,164539,164541,164543],{"class":53,"line":185},[51,164534,30794],{"class":278},[51,164536,164259],{"class":65},[51,164538,759],{"class":278},[51,164540,1401],{"class":65},[51,164542,835],{"class":278},[51,164544,5042],{"class":65},[51,164546,164547,164549,164552,164554,164556],{"class":53,"line":202},[51,164548,30794],{"class":278},[51,164550,164551],{"class":65},"(text[::",[51,164553,1074],{"class":69},[51,164555,759],{"class":278},[51,164557,5042],{"class":65},[486,164559,164561],{"id":164560},"_69-集合set","6.9 集合set",[10,164563,164564],{},"集合特点：",[19,164566,164567,164570,164573],{},[22,164568,164569],{},"无序。",[22,164571,164572],{},"元素不重复。",[22,164574,164575],{},"可以做交集、并集、差集。",[41,164577,164579],{"className":170,"code":164578,"language":172,"meta":46,"style":46},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[48,164580,164581,164609],{"__ignoreMap":46},[51,164582,164583,164585,164587,164589,164591,164593,164595,164597,164599,164601,164603,164605,164607],{"class":53,"line":54},[51,164584,164399],{"class":65},[51,164586,70],{"class":69},[51,164588,4833],{"class":65},[51,164590,759],{"class":278},[51,164592,12819],{"class":65},[51,164594,620],{"class":278},[51,164596,12819],{"class":65},[51,164598,614],{"class":278},[51,164600,12819],{"class":65},[51,164602,614],{"class":278},[51,164604,12819],{"class":65},[51,164606,835],{"class":278},[51,164608,1974],{"class":65},[51,164610,164611,164613],{"class":53,"line":185},[51,164612,30794],{"class":278},[51,164614,164615],{"class":65},"(nums)\n",[10,164617,164618],{},"创建空集合：",[41,164620,164622],{"className":170,"code":164621,"language":172,"meta":46,"style":46},"s = set()\n",[48,164623,164624],{"__ignoreMap":46},[51,164625,164626,164628,164630,164632],{"class":53,"line":54},[51,164627,10963],{"class":65},[51,164629,70],{"class":69},[51,164631,120093],{"class":278},[51,164633,2366],{"class":65},[10,164635,9409,164636,164638],{},[48,164637,32834],{}," 是空字典，不是空集合。",[10,164640,164641],{},"集合常用操作：",[41,164643,164645],{"className":170,"code":164644,"language":172,"meta":46,"style":46},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[48,164646,164647,164667,164671,164680,164689,164698],{"__ignoreMap":46},[51,164648,164649,164651,164653,164655,164657,164659,164661,164663,164665],{"class":53,"line":54},[51,164650,10963],{"class":65},[51,164652,70],{"class":69},[51,164654,4833],{"class":65},[51,164656,759],{"class":278},[51,164658,12819],{"class":65},[51,164660,620],{"class":278},[51,164662,12819],{"class":65},[51,164664,614],{"class":278},[51,164666,1974],{"class":65},[51,164668,164669],{"class":53,"line":185},[51,164670,206],{"emptyLinePlaceholder":205},[51,164672,164673,164676,164678],{"class":53,"line":202},[51,164674,164675],{"class":65},"s.add(",[51,164677,835],{"class":278},[51,164679,282],{"class":65},[51,164681,164682,164685,164687],{"class":53,"line":209},[51,164683,164684],{"class":65},"s.remove(",[51,164686,620],{"class":278},[51,164688,282],{"class":65},[51,164690,164691,164694,164696],{"class":53,"line":223},[51,164692,164693],{"class":65},"s.discard(",[51,164695,988],{"class":278},[51,164697,282],{"class":65},[51,164699,164700,164702,164704,164706],{"class":53,"line":237},[51,164701,30794],{"class":278},[51,164703,546],{"class":65},[51,164705,7742],{"class":278},[51,164707,164708],{"class":65},"(s))\n",[10,164710,164711],{},"交并差：",[41,164713,164715],{"className":170,"code":164714,"language":172,"meta":46,"style":46},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[48,164716,164717,164737,164757,164761,164776,164789],{"__ignoreMap":46},[51,164718,164719,164721,164723,164725,164727,164729,164731,164733,164735],{"class":53,"line":54},[51,164720,11303],{"class":65},[51,164722,70],{"class":69},[51,164724,4833],{"class":65},[51,164726,759],{"class":278},[51,164728,12819],{"class":65},[51,164730,620],{"class":278},[51,164732,12819],{"class":65},[51,164734,614],{"class":278},[51,164736,1974],{"class":65},[51,164738,164739,164741,164743,164745,164747,164749,164751,164753,164755],{"class":53,"line":185},[51,164740,11329],{"class":65},[51,164742,70],{"class":69},[51,164744,4833],{"class":65},[51,164746,614],{"class":278},[51,164748,12819],{"class":65},[51,164750,835],{"class":278},[51,164752,12819],{"class":65},[51,164754,861],{"class":278},[51,164756,1974],{"class":65},[51,164758,164759],{"class":53,"line":202},[51,164760,206],{"emptyLinePlaceholder":205},[51,164762,164763,164765,164768,164770,164773],{"class":53,"line":209},[51,164764,30794],{"class":278},[51,164766,164767],{"class":65},"(a ",[51,164769,895],{"class":69},[51,164771,164772],{"class":65}," b)  ",[51,164774,164775],{"class":601},"# 交集\n",[51,164777,164778,164780,164782,164784,164786],{"class":53,"line":223},[51,164779,30794],{"class":278},[51,164781,164767],{"class":65},[51,164783,1463],{"class":69},[51,164785,164772],{"class":65},[51,164787,164788],{"class":601},"# 并集\n",[51,164790,164791,164793,164795,164797,164799],{"class":53,"line":237},[51,164792,30794],{"class":278},[51,164794,164767],{"class":65},[51,164796,1074],{"class":69},[51,164798,164772],{"class":65},[51,164800,164801],{"class":601},"# 差集\n",[486,164803,164805],{"id":164804},"_610-字典dict","6.10 字典dict",[10,164807,164808],{},"字典通过 key-value 保存数据。",[41,164810,164812],{"className":170,"code":164811,"language":172,"meta":46,"style":46},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[48,164813,164814,164822,164832,164843,164853],{"__ignoreMap":46},[51,164815,164816,164818,164820],{"class":53,"line":54},[51,164817,149780],{"class":65},[51,164819,70],{"class":69},[51,164821,15956],{"class":65},[51,164823,164824,164826,164828,164830],{"class":53,"line":185},[51,164825,147319],{"class":61},[51,164827,51809],{"class":65},[51,164829,150187],{"class":61},[51,164831,31843],{"class":65},[51,164833,164834,164837,164839,164841],{"class":53,"line":202},[51,164835,164836],{"class":61},"    \"age\"",[51,164838,51809],{"class":65},[51,164840,1192],{"class":278},[51,164842,31843],{"class":65},[51,164844,164845,164848,164850],{"class":53,"line":209},[51,164846,164847],{"class":61},"    \"score\"",[51,164849,51809],{"class":65},[51,164851,164852],{"class":278},"95\n",[51,164854,164855],{"class":53,"line":223},[51,164856,1974],{"class":65},[10,164858,164859],{},"获取值：",[41,164861,164863],{"className":170,"code":164862,"language":172,"meta":46,"style":46},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[48,164864,164865,164876],{"__ignoreMap":46},[51,164866,164867,164869,164872,164874],{"class":53,"line":54},[51,164868,30794],{"class":278},[51,164870,164871],{"class":65},"(student[",[51,164873,63051],{"class":61},[51,164875,5042],{"class":65},[51,164877,164878,164880,164883,164885],{"class":53,"line":185},[51,164879,30794],{"class":278},[51,164881,164882],{"class":65},"(student.get(",[51,164884,63051],{"class":61},[51,164886,30876],{"class":65},[10,164888,15772],{},[41,164890,164892],{"className":170,"code":164891,"language":172,"meta":46,"style":46},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[48,164893,164894,164907],{"__ignoreMap":46},[51,164895,164896,164898,164901,164904],{"class":53,"line":54},[51,164897,153158],{"class":65},[51,164899,164900],{"class":61},"\"address\"",[51,164902,164903],{"class":65},"]     ",[51,164905,164906],{"class":601},"# key不存在会报错\n",[51,164908,164909,164912,164914,164916],{"class":53,"line":185},[51,164910,164911],{"class":65},"student.get(",[51,164913,164900],{"class":61},[51,164915,14098],{"class":65},[51,164917,164918],{"class":601},"# key不存在返回None\n",[10,164920,164921],{},"设置默认值：",[41,164923,164925],{"className":170,"code":164924,"language":172,"meta":46,"style":46},"print(student.get(\"address\", \"未知\"))\n",[48,164926,164927],{"__ignoreMap":46},[51,164928,164929,164931,164933,164935,164937,164940],{"class":53,"line":54},[51,164930,30794],{"class":278},[51,164932,164882],{"class":65},[51,164934,164900],{"class":61},[51,164936,12819],{"class":65},[51,164938,164939],{"class":61},"\"未知\"",[51,164941,30876],{"class":65},[10,164943,164944],{},"新增和修改：",[41,164946,164948],{"className":170,"code":164947,"language":172,"meta":46,"style":46},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[48,164949,164950,164963],{"__ignoreMap":46},[51,164951,164952,164954,164956,164958,164960],{"class":53,"line":54},[51,164953,153158],{"class":65},[51,164955,69496],{"class":61},[51,164957,194],{"class":65},[51,164959,70],{"class":69},[51,164961,164962],{"class":278}," 19\n",[51,164964,164965,164967,164969,164971,164973],{"class":53,"line":185},[51,164966,153158],{"class":65},[51,164968,164900],{"class":61},[51,164970,194],{"class":65},[51,164972,70],{"class":69},[51,164974,164975],{"class":61}," \"北京\"\n",[10,164977,164978],{},"删除：",[41,164980,164982],{"className":170,"code":164981,"language":172,"meta":46,"style":46},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[48,164983,164984,164997,165007],{"__ignoreMap":46},[51,164985,164986,164988,164990,164993,164995],{"class":53,"line":54},[51,164987,155657],{"class":65},[51,164989,70],{"class":69},[51,164991,164992],{"class":65}," student.pop(",[51,164994,151771],{"class":61},[51,164996,282],{"class":65},[51,164998,164999,165001,165003,165005],{"class":53,"line":185},[51,165000,163682],{"class":69},[51,165002,152448],{"class":65},[51,165004,69496],{"class":61},[51,165006,33621],{"class":65},[51,165008,165009],{"class":53,"line":202},[51,165010,165011],{"class":65},"student.clear()\n",[486,165013,165015],{"id":165014},"_611-字典遍历","6.11 字典遍历",[10,165017,165018],{},"遍历 key：",[41,165020,165022],{"className":170,"code":165021,"language":172,"meta":46,"style":46},"for key in student:\n    print(key, student[key])\n",[48,165023,165024,165036],{"__ignoreMap":46},[51,165025,165026,165028,165031,165033],{"class":53,"line":54},[51,165027,3412],{"class":69},[51,165029,165030],{"class":65}," key ",[51,165032,26425],{"class":69},[51,165034,165035],{"class":65}," student:\n",[51,165037,165038,165040],{"class":53,"line":185},[51,165039,31677],{"class":278},[51,165041,165042],{"class":65},"(key, student[key])\n",[10,165044,165045],{},"遍历 value：",[41,165047,165049],{"className":170,"code":165048,"language":172,"meta":46,"style":46},"for value in student.values():\n    print(value)\n",[48,165050,165051,165063],{"__ignoreMap":46},[51,165052,165053,165055,165058,165060],{"class":53,"line":54},[51,165054,3412],{"class":69},[51,165056,165057],{"class":65}," value ",[51,165059,26425],{"class":69},[51,165061,165062],{"class":65}," student.values():\n",[51,165064,165065,165067],{"class":53,"line":185},[51,165066,31677],{"class":278},[51,165068,165069],{"class":65},"(value)\n",[10,165071,165072],{},"遍历 key 和 value：",[41,165074,165076],{"className":170,"code":165075,"language":172,"meta":46,"style":46},"for key, value in student.items():\n    print(key, value)\n",[48,165077,165078,165090],{"__ignoreMap":46},[51,165079,165080,165082,165085,165087],{"class":53,"line":54},[51,165081,3412],{"class":69},[51,165083,165084],{"class":65}," key, value ",[51,165086,26425],{"class":69},[51,165088,165089],{"class":65}," student.items():\n",[51,165091,165092,165094],{"class":53,"line":185},[51,165093,31677],{"class":278},[51,165095,165096],{"class":65},"(key, value)\n",[486,165098,165100],{"id":165099},"_612-嵌套容器","6.12 嵌套容器",[10,165102,165103],{},"列表中保存字典，是项目中最常见的结构之一。",[41,165105,165107],{"className":170,"code":165106,"language":172,"meta":46,"style":46},"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",[48,165108,165109,165117,165145,165173,165201,165205,165209,165219],{"__ignoreMap":46},[51,165110,165111,165113,165115],{"class":53,"line":54},[51,165112,160015],{"class":65},[51,165114,70],{"class":69},[51,165116,55819],{"class":65},[51,165118,165119,165121,165123,165125,165127,165129,165131,165133,165135,165137,165139,165141,165143],{"class":53,"line":185},[51,165120,148684],{"class":65},[51,165122,63051],{"class":61},[51,165124,51809],{"class":65},[51,165126,150187],{"class":61},[51,165128,12819],{"class":65},[51,165130,69496],{"class":61},[51,165132,51809],{"class":65},[51,165134,1192],{"class":278},[51,165136,12819],{"class":65},[51,165138,151771],{"class":61},[51,165140,51809],{"class":65},[51,165142,1531],{"class":278},[51,165144,5315],{"class":65},[51,165146,165147,165149,165151,165153,165155,165157,165159,165161,165163,165165,165167,165169,165171],{"class":53,"line":202},[51,165148,148684],{"class":65},[51,165150,63051],{"class":61},[51,165152,51809],{"class":65},[51,165154,151235],{"class":61},[51,165156,12819],{"class":65},[51,165158,69496],{"class":61},[51,165160,51809],{"class":65},[51,165162,1167],{"class":278},[51,165164,12819],{"class":65},[51,165166,151771],{"class":61},[51,165168,51809],{"class":65},[51,165170,1353],{"class":278},[51,165172,5315],{"class":65},[51,165174,165175,165177,165179,165181,165183,165185,165187,165189,165191,165193,165195,165197,165199],{"class":53,"line":209},[51,165176,148684],{"class":65},[51,165178,63051],{"class":61},[51,165180,51809],{"class":65},[51,165182,160030],{"class":61},[51,165184,12819],{"class":65},[51,165186,69496],{"class":61},[51,165188,51809],{"class":65},[51,165190,1217],{"class":278},[51,165192,12819],{"class":65},[51,165194,151771],{"class":61},[51,165196,51809],{"class":65},[51,165198,948],{"class":278},[51,165200,5315],{"class":65},[51,165202,165203],{"class":53,"line":223},[51,165204,33621],{"class":65},[51,165206,165207],{"class":53,"line":237},[51,165208,206],{"emptyLinePlaceholder":205},[51,165210,165211,165213,165215,165217],{"class":53,"line":242},[51,165212,3412],{"class":69},[51,165214,152436],{"class":65},[51,165216,26425],{"class":69},[51,165218,152441],{"class":65},[51,165220,165221,165223,165225,165227,165230,165232],{"class":53,"line":257},[51,165222,31677],{"class":278},[51,165224,164871],{"class":65},[51,165226,63051],{"class":61},[51,165228,165229],{"class":65},"], student[",[51,165231,151771],{"class":61},[51,165233,5042],{"class":65},[10,165235,165236],{},"统计平均分：",[41,165238,165240],{"className":170,"code":165239,"language":172,"meta":46,"style":46},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[48,165241,165242,165250,165254,165264,165276,165280,165295],{"__ignoreMap":46},[51,165243,165244,165246,165248],{"class":53,"line":54},[51,165245,157559],{"class":65},[51,165247,70],{"class":69},[51,165249,47705],{"class":278},[51,165251,165252],{"class":53,"line":185},[51,165253,206],{"emptyLinePlaceholder":205},[51,165255,165256,165258,165260,165262],{"class":53,"line":202},[51,165257,3412],{"class":69},[51,165259,152436],{"class":65},[51,165261,26425],{"class":69},[51,165263,152441],{"class":65},[51,165265,165266,165268,165270,165272,165274],{"class":53,"line":209},[51,165267,159606],{"class":65},[51,165269,9861],{"class":69},[51,165271,152448],{"class":65},[51,165273,151771],{"class":61},[51,165275,33621],{"class":65},[51,165277,165278],{"class":53,"line":223},[51,165279,206],{"emptyLinePlaceholder":205},[51,165281,165282,165284,165286,165288,165290,165292],{"class":53,"line":237},[51,165283,164073],{"class":65},[51,165285,70],{"class":69},[51,165287,164078],{"class":65},[51,165289,1126],{"class":69},[51,165291,7715],{"class":278},[51,165293,165294],{"class":65},"(students)\n",[51,165296,165297,165299,165301,165303,165305,165307,165309,165311,165313,165315],{"class":53,"line":242},[51,165298,30794],{"class":278},[51,165300,546],{"class":65},[51,165302,595],{"class":69},[51,165304,164096],{"class":61},[51,165306,1438],{"class":278},[51,165308,164101],{"class":65},[51,165310,157458],{"class":69},[51,165312,1488],{"class":278},[51,165314,793],{"class":61},[51,165316,282],{"class":65},[10,165318,165319],{},"查找学生：",[41,165321,165323],{"className":170,"code":165322,"language":172,"meta":46,"style":46},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[48,165324,165325,165340,165344,165354,165368,165374,165378,165384],{"__ignoreMap":46},[51,165326,165327,165329,165331,165333,165335,165338],{"class":53,"line":54},[51,165328,111949],{"class":65},[51,165330,70],{"class":69},[51,165332,60977],{"class":278},[51,165334,546],{"class":65},[51,165336,165337],{"class":61},"\"请输入学生姓名:\"",[51,165339,282],{"class":65},[51,165341,165342],{"class":53,"line":185},[51,165343,206],{"emptyLinePlaceholder":205},[51,165345,165346,165348,165350,165352],{"class":53,"line":202},[51,165347,3412],{"class":69},[51,165349,152436],{"class":65},[51,165351,26425],{"class":69},[51,165353,152441],{"class":65},[51,165355,165356,165358,165360,165362,165364,165366],{"class":53,"line":209},[51,165357,3488],{"class":69},[51,165359,152448],{"class":65},[51,165361,63051],{"class":61},[51,165363,194],{"class":65},[51,165365,375],{"class":69},[51,165367,160731],{"class":65},[51,165369,165370,165372],{"class":53,"line":223},[51,165371,32826],{"class":278},[51,165373,150341],{"class":65},[51,165375,165376],{"class":53,"line":237},[51,165377,32003],{"class":69},[51,165379,165380,165382],{"class":53,"line":242},[51,165381,2099],{"class":69},[51,165383,363],{"class":65},[51,165385,165386,165388,165390,165393],{"class":53,"line":257},[51,165387,31677],{"class":278},[51,165389,546],{"class":65},[51,165391,165392],{"class":61},"\"没有找到\"",[51,165394,282],{"class":65},[486,165396,165398],{"id":165397},"_613-容器通用操作","6.13 容器通用操作",[10,165400,165401],{},"长度：",[41,165403,165405],{"className":170,"code":165404,"language":172,"meta":46,"style":46},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[48,165406,165407,165426,165436],{"__ignoreMap":46},[51,165408,165409,165411,165414,165416,165418,165420,165422,165424],{"class":53,"line":54},[51,165410,7742],{"class":278},[51,165412,165413],{"class":65},"([",[51,165415,759],{"class":278},[51,165417,12819],{"class":65},[51,165419,620],{"class":278},[51,165421,12819],{"class":65},[51,165423,614],{"class":278},[51,165425,5042],{"class":65},[51,165427,165428,165430,165432,165434],{"class":53,"line":185},[51,165429,7742],{"class":278},[51,165431,546],{"class":65},[51,165433,156179],{"class":61},[51,165435,282],{"class":65},[51,165437,165438,165440,165443,165445,165447,165449],{"class":53,"line":202},[51,165439,7742],{"class":278},[51,165441,165442],{"class":65},"({",[51,165444,63051],{"class":61},[51,165446,51809],{"class":65},[51,165448,150187],{"class":61},[51,165450,165451],{"class":65},"})\n",[10,165453,165454],{},"最大最小：",[41,165456,165458],{"className":170,"code":165457,"language":172,"meta":46,"style":46},"max([1, 2, 3])\nmin([1, 2, 3])\n",[48,165459,165460,165478],{"__ignoreMap":46},[51,165461,165462,165464,165466,165468,165470,165472,165474,165476],{"class":53,"line":54},[51,165463,6399],{"class":278},[51,165465,165413],{"class":65},[51,165467,759],{"class":278},[51,165469,12819],{"class":65},[51,165471,620],{"class":278},[51,165473,12819],{"class":65},[51,165475,614],{"class":278},[51,165477,5042],{"class":65},[51,165479,165480,165483,165485,165487,165489,165491,165493,165495],{"class":53,"line":185},[51,165481,165482],{"class":278},"min",[51,165484,165413],{"class":65},[51,165486,759],{"class":278},[51,165488,12819],{"class":65},[51,165490,620],{"class":278},[51,165492,12819],{"class":65},[51,165494,614],{"class":278},[51,165496,5042],{"class":65},[10,165498,165499],{},"求和：",[41,165501,165503],{"className":170,"code":165502,"language":172,"meta":46,"style":46},"sum([1, 2, 3])\n",[48,165504,165505],{"__ignoreMap":46},[51,165506,165507,165510,165512,165514,165516,165518,165520,165522],{"class":53,"line":54},[51,165508,165509],{"class":278},"sum",[51,165511,165413],{"class":65},[51,165513,759],{"class":278},[51,165515,12819],{"class":65},[51,165517,620],{"class":278},[51,165519,12819],{"class":65},[51,165521,614],{"class":278},[51,165523,5042],{"class":65},[10,165525,163770],{},[41,165527,165529],{"className":170,"code":165528,"language":172,"meta":46,"style":46},"sorted([3, 1, 2])\n",[48,165530,165531],{"__ignoreMap":46},[51,165532,165533,165536,165538,165540,165542,165544,165546,165548],{"class":53,"line":54},[51,165534,165535],{"class":278},"sorted",[51,165537,165413],{"class":65},[51,165539,614],{"class":278},[51,165541,12819],{"class":65},[51,165543,759],{"class":278},[51,165545,12819],{"class":65},[51,165547,620],{"class":278},[51,165549,5042],{"class":65},[10,165551,165552],{},"类型转换：",[41,165554,165556],{"className":170,"code":165555,"language":172,"meta":46,"style":46},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[48,165557,165558,165568,165586],{"__ignoreMap":46},[51,165559,165560,165562,165564,165566],{"class":53,"line":54},[51,165561,154369],{"class":278},[51,165563,546],{"class":65},[51,165565,156179],{"class":61},[51,165567,282],{"class":65},[51,165569,165570,165572,165574,165576,165578,165580,165582,165584],{"class":53,"line":185},[51,165571,155564],{"class":278},[51,165573,165413],{"class":65},[51,165575,759],{"class":278},[51,165577,12819],{"class":65},[51,165579,620],{"class":278},[51,165581,12819],{"class":65},[51,165583,614],{"class":278},[51,165585,5042],{"class":65},[51,165587,165588,165590,165592,165594,165596,165598,165600,165602,165604,165606],{"class":53,"line":202},[51,165589,155589],{"class":278},[51,165591,165413],{"class":65},[51,165593,759],{"class":278},[51,165595,12819],{"class":65},[51,165597,759],{"class":278},[51,165599,12819],{"class":65},[51,165601,620],{"class":278},[51,165603,12819],{"class":65},[51,165605,614],{"class":278},[51,165607,5042],{"class":65},[10,165609,165610],{},"成员判断：",[41,165612,165614],{"className":170,"code":165613,"language":172,"meta":46,"style":46},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[48,165615,165616,165633,165657],{"__ignoreMap":46},[51,165617,165618,165620,165622,165625,165628,165631],{"class":53,"line":54},[51,165619,30794],{"class":278},[51,165621,546],{"class":65},[51,165623,165624],{"class":61},"\"a\"",[51,165626,165627],{"class":69}," in",[51,165629,165630],{"class":61}," \"abc\"",[51,165632,282],{"class":65},[51,165634,165635,165637,165639,165641,165643,165645,165647,165649,165651,165653,165655],{"class":53,"line":185},[51,165636,30794],{"class":278},[51,165638,546],{"class":65},[51,165640,759],{"class":278},[51,165642,165627],{"class":69},[51,165644,52598],{"class":65},[51,165646,759],{"class":278},[51,165648,12819],{"class":65},[51,165650,620],{"class":278},[51,165652,12819],{"class":65},[51,165654,614],{"class":278},[51,165656,5042],{"class":65},[51,165658,165659,165661,165663,165665,165667,165669,165671,165673,165675],{"class":53,"line":202},[51,165660,30794],{"class":278},[51,165662,546],{"class":65},[51,165664,63051],{"class":61},[51,165666,165627],{"class":69},[51,165668,4833],{"class":65},[51,165670,63051],{"class":61},[51,165672,51809],{"class":65},[51,165674,150187],{"class":61},[51,165676,165451],{"class":65},[486,165678,165680],{"id":165679},"_614-推导式","6.14 推导式",[10,165682,165683],{},"推导式用于快速生成容器。",[10,165685,165686],{},"列表推导式：",[41,165688,165690],{"className":170,"code":165689,"language":172,"meta":46,"style":46},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[48,165691,165692,165719],{"__ignoreMap":46},[51,165693,165694,165696,165698,165701,165703,165705,165707,165709,165711,165713,165715,165717],{"class":53,"line":54},[51,165695,164399],{"class":65},[51,165697,70],{"class":69},[51,165699,165700],{"class":65}," [i ",[51,165702,3412],{"class":69},[51,165704,9822],{"class":65},[51,165706,26425],{"class":69},[51,165708,32818],{"class":278},[51,165710,546],{"class":65},[51,165712,759],{"class":278},[51,165714,12819],{"class":65},[51,165716,886],{"class":278},[51,165718,97672],{"class":65},[51,165720,165721,165723],{"class":53,"line":185},[51,165722,30794],{"class":278},[51,165724,164615],{"class":65},[10,165726,165727],{},"带条件：",[41,165729,165731],{"className":170,"code":165730,"language":172,"meta":46,"style":46},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[48,165732,165733,165774],{"__ignoreMap":46},[51,165734,165735,165738,165740,165742,165744,165746,165748,165750,165752,165754,165756,165758,165760,165762,165764,165766,165768,165770,165772],{"class":53,"line":54},[51,165736,165737],{"class":65},"even_nums ",[51,165739,70],{"class":69},[51,165741,165700],{"class":65},[51,165743,3412],{"class":69},[51,165745,9822],{"class":65},[51,165747,26425],{"class":69},[51,165749,32818],{"class":278},[51,165751,546],{"class":65},[51,165753,759],{"class":278},[51,165755,12819],{"class":65},[51,165757,879],{"class":278},[51,165759,14098],{"class":65},[51,165761,1940],{"class":69},[51,165763,9822],{"class":65},[51,165765,870],{"class":69},[51,165767,15139],{"class":278},[51,165769,101931],{"class":69},[51,165771,4479],{"class":278},[51,165773,33621],{"class":65},[51,165775,165776,165778],{"class":53,"line":185},[51,165777,30794],{"class":278},[51,165779,165780],{"class":65},"(even_nums)\n",[10,165782,165783],{},"字典推导式：",[41,165785,165787],{"className":170,"code":165786,"language":172,"meta":46,"style":46},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[48,165788,165789,165823],{"__ignoreMap":46},[51,165790,165791,165794,165796,165799,165801,165803,165806,165808,165810,165812,165814,165816,165818,165820],{"class":53,"line":54},[51,165792,165793],{"class":65},"squares ",[51,165795,70],{"class":69},[51,165797,165798],{"class":65}," {i: i ",[51,165800,11045],{"class":69},[51,165802,15139],{"class":278},[51,165804,165805],{"class":69}," for",[51,165807,9822],{"class":65},[51,165809,26425],{"class":69},[51,165811,32818],{"class":278},[51,165813,546],{"class":65},[51,165815,759],{"class":278},[51,165817,12819],{"class":65},[51,165819,886],{"class":278},[51,165821,165822],{"class":65},")}\n",[51,165824,165825,165827],{"class":53,"line":185},[51,165826,30794],{"class":278},[51,165828,165829],{"class":65},"(squares)\n",[10,165831,165832],{},"集合推导式：",[41,165834,165836],{"className":170,"code":165835,"language":172,"meta":46,"style":46},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[48,165837,165838,165859],{"__ignoreMap":46},[51,165839,165840,165843,165845,165848,165850,165852,165854,165857],{"class":53,"line":54},[51,165841,165842],{"class":65},"chars ",[51,165844,70],{"class":69},[51,165846,165847],{"class":65}," {ch ",[51,165849,3412],{"class":69},[51,165851,159991],{"class":65},[51,165853,26425],{"class":69},[51,165855,165856],{"class":61}," \"hello\"",[51,165858,1974],{"class":65},[51,165860,165861,165863],{"class":53,"line":185},[51,165862,30794],{"class":278},[51,165864,165865],{"class":65},"(chars)\n",[10,165867,165868],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[486,165870,165872],{"id":165871},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[41,165874,165876],{"className":170,"code":165875,"language":172,"meta":46,"style":46},"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",[48,165877,165878,165886,165906,165926,165946,165966,165970,165974,165982,165996,166005,166009,166019,166031,166035,166055,166064,166068,166084,166089,166093,166107,166111,166133,166169],{"__ignoreMap":46},[51,165879,165880,165882,165884],{"class":53,"line":54},[51,165881,160015],{"class":65},[51,165883,70],{"class":69},[51,165885,55819],{"class":65},[51,165887,165888,165890,165892,165894,165896,165898,165900,165902,165904],{"class":53,"line":185},[51,165889,148684],{"class":65},[51,165891,63051],{"class":61},[51,165893,51809],{"class":65},[51,165895,150187],{"class":61},[51,165897,12819],{"class":65},[51,165899,151771],{"class":61},[51,165901,51809],{"class":65},[51,165903,1531],{"class":278},[51,165905,5315],{"class":65},[51,165907,165908,165910,165912,165914,165916,165918,165920,165922,165924],{"class":53,"line":202},[51,165909,148684],{"class":65},[51,165911,63051],{"class":61},[51,165913,51809],{"class":65},[51,165915,151235],{"class":61},[51,165917,12819],{"class":65},[51,165919,151771],{"class":61},[51,165921,51809],{"class":65},[51,165923,1353],{"class":278},[51,165925,5315],{"class":65},[51,165927,165928,165930,165932,165934,165936,165938,165940,165942,165944],{"class":53,"line":209},[51,165929,148684],{"class":65},[51,165931,63051],{"class":61},[51,165933,51809],{"class":65},[51,165935,160030],{"class":61},[51,165937,12819],{"class":65},[51,165939,151771],{"class":61},[51,165941,51809],{"class":65},[51,165943,948],{"class":278},[51,165945,5315],{"class":65},[51,165947,165948,165950,165952,165954,165956,165958,165960,165962,165964],{"class":53,"line":223},[51,165949,148684],{"class":65},[51,165951,63051],{"class":61},[51,165953,51809],{"class":65},[51,165955,163609],{"class":61},[51,165957,12819],{"class":65},[51,165959,151771],{"class":61},[51,165961,51809],{"class":65},[51,165963,1424],{"class":278},[51,165965,5315],{"class":65},[51,165967,165968],{"class":53,"line":237},[51,165969,33621],{"class":65},[51,165971,165972],{"class":53,"line":242},[51,165973,206],{"emptyLinePlaceholder":205},[51,165975,165976,165978,165980],{"class":53,"line":257},[51,165977,157559],{"class":65},[51,165979,70],{"class":69},[51,165981,47705],{"class":278},[51,165983,165984,165987,165989,165992,165994],{"class":53,"line":262},[51,165985,165986],{"class":65},"max_student ",[51,165988,70],{"class":69},[51,165990,165991],{"class":65}," students[",[51,165993,733],{"class":278},[51,165995,33621],{"class":65},[51,165997,165998,166001,166003],{"class":53,"line":285},[51,165999,166000],{"class":65},"passed ",[51,166002,70],{"class":69},[51,166004,52210],{"class":65},[51,166006,166007],{"class":53,"line":296},[51,166008,206],{"emptyLinePlaceholder":205},[51,166010,166011,166013,166015,166017],{"class":53,"line":307},[51,166012,3412],{"class":69},[51,166014,152436],{"class":65},[51,166016,26425],{"class":69},[51,166018,152441],{"class":65},[51,166020,166021,166023,166025,166027,166029],{"class":53,"line":324},[51,166022,159606],{"class":65},[51,166024,9861],{"class":69},[51,166026,152448],{"class":65},[51,166028,151771],{"class":61},[51,166030,33621],{"class":65},[51,166032,166033],{"class":53,"line":329},[51,166034,206],{"emptyLinePlaceholder":205},[51,166036,166037,166039,166041,166043,166045,166047,166050,166052],{"class":53,"line":334},[51,166038,3488],{"class":69},[51,166040,152448],{"class":65},[51,166042,151771],{"class":61},[51,166044,194],{"class":65},[51,166046,1502],{"class":69},[51,166048,166049],{"class":65}," max_student[",[51,166051,151771],{"class":61},[51,166053,166054],{"class":65},"]:\n",[51,166056,166057,166060,166062],{"class":53,"line":340},[51,166058,166059],{"class":65},"        max_student ",[51,166061,70],{"class":69},[51,166063,152464],{"class":65},[51,166065,166066],{"class":53,"line":345},[51,166067,206],{"emptyLinePlaceholder":205},[51,166069,166070,166072,166074,166076,166078,166080,166082],{"class":53,"line":357},[51,166071,3488],{"class":69},[51,166073,152448],{"class":65},[51,166075,151771],{"class":61},[51,166077,194],{"class":65},[51,166079,2108],{"class":69},[51,166081,158136],{"class":278},[51,166083,363],{"class":65},[51,166085,166086],{"class":53,"line":366},[51,166087,166088],{"class":65},"        passed.append(student)\n",[51,166090,166091],{"class":53,"line":383},[51,166092,206],{"emptyLinePlaceholder":205},[51,166094,166095,166097,166099,166101,166103,166105],{"class":53,"line":392},[51,166096,164073],{"class":65},[51,166098,70],{"class":69},[51,166100,164078],{"class":65},[51,166102,1126],{"class":69},[51,166104,7715],{"class":278},[51,166106,165294],{"class":65},[51,166108,166109],{"class":53,"line":403},[51,166110,206],{"emptyLinePlaceholder":205},[51,166112,166113,166115,166117,166119,166121,166123,166125,166127,166129,166131],{"class":53,"line":409},[51,166114,30794],{"class":278},[51,166116,546],{"class":65},[51,166118,595],{"class":69},[51,166120,164096],{"class":61},[51,166122,1438],{"class":278},[51,166124,164101],{"class":65},[51,166126,157458],{"class":69},[51,166128,1488],{"class":278},[51,166130,793],{"class":61},[51,166132,282],{"class":65},[51,166134,166135,166137,166139,166141,166144,166146,166149,166151,166153,166155,166157,166159,166161,166163,166165,166167],{"class":53,"line":414},[51,166136,30794],{"class":278},[51,166138,546],{"class":65},[51,166140,595],{"class":69},[51,166142,166143],{"class":61},"\"最高分学生:",[51,166145,1438],{"class":278},[51,166147,166148],{"class":65},"max_student[",[51,166150,153181],{"class":61},[51,166152,1482],{"class":65},[51,166154,1488],{"class":278},[51,166156,4833],{"class":278},[51,166158,166148],{"class":65},[51,166160,153219],{"class":61},[51,166162,1482],{"class":65},[51,166164,1488],{"class":278},[51,166166,793],{"class":61},[51,166168,282],{"class":65},[51,166170,166171,166173,166175,166177,166180,166183,166186,166188,166190],{"class":53,"line":433},[51,166172,30794],{"class":278},[51,166174,546],{"class":65},[51,166176,595],{"class":69},[51,166178,166179],{"class":61},"\"及格人数:",[51,166181,166182],{"class":278},"{len",[51,166184,166185],{"class":65},"(passed)",[51,166187,1488],{"class":278},[51,166189,793],{"class":61},[51,166191,282],{"class":65},[486,166193,166195],{"id":166194},"_616-易错点","6.16 易错点",[19,166197,166198,166201,166204,166207,166213,166222],{},[22,166199,166200],{},"列表可变，元组和字符串不可变。",[22,166202,166203],{},"切片结束位置不包含。",[22,166205,166206],{},"字典通过 key 取值，不是通过索引。",[22,166208,166209,166210,28767],{},"空集合要用 ",[48,166211,166212],{},"set()",[22,166214,104738,166215,166218,166219,28767],{},[48,166216,166217],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[48,166220,166221],{},"get()",[22,166223,166224],{},"嵌套容器要先看清楚每一层是什么类型。",[486,166226,166228],{"id":166227},"_617-本章练习","6.17 本章练习",[19,166230,166231,166234,166237,166240,166243],{},[22,166232,166233],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[22,166235,166236],{},"输入一句话，统计每个字符出现次数。",[22,166238,166239],{},"使用集合去除列表中的重复元素。",[22,166241,166242],{},"使用字典保存一个学生的信息，并实现修改成绩。",[22,166244,166245],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[464,166247,166248],{},"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":46,"searchDepth":185,"depth":185,"links":166250},[166251,166252,166253,166254,166255,166256,166257,166258,166259,166260,166261,166262,166263,166264,166265,166266,166267],{"id":163231,"depth":185,"text":163232},{"id":163348,"depth":185,"text":163349},{"id":163438,"depth":185,"text":163439},{"id":163562,"depth":185,"text":163563},{"id":163925,"depth":185,"text":163926},{"id":164112,"depth":185,"text":164113},{"id":164231,"depth":185,"text":164232},{"id":164373,"depth":185,"text":164374},{"id":164560,"depth":185,"text":164561},{"id":164804,"depth":185,"text":164805},{"id":165014,"depth":185,"text":165015},{"id":165099,"depth":185,"text":165100},{"id":165397,"depth":185,"text":165398},{"id":165679,"depth":185,"text":165680},{"id":165871,"depth":185,"text":165872},{"id":166194,"depth":185,"text":166195},{"id":166227,"depth":185,"text":166228},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163223,"description":23760},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166274,"title":166275,"body":166276,"description":23760,"extension":469,"meta":168448,"navigation":205,"path":168449,"seo":168450,"stem":168451,"__hash__":168452},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166277,"toc":168423},[166278,166281,166285,166288,166368,166371,166392,166395,166399,166402,166464,166467,166484,166488,166491,166536,166538,166546,166550,166553,166635,166638,166641,166666,166669,166692,166696,166699,166701,166763,166766,166768,166819,166823,166827,166833,166938,166942,166948,167019,167023,167026,167094,167097,167177,167181,167187,167223,167226,167229,167339,167345,167349,167352,167424,167427,167431,167435,167440,167502,167506,167511,167579,167583,167588,167704,167708,167711,167791,167794,167798,167801,167905,167907,167922,167925,167929,168067,168075,168079,168081,168092,168094,168352,168356,168388,168392,168420],[14,166279,166275],{"id":166280},"_7-函数进阶",[486,166282,166284],{"id":166283},"_71-多返回值","7.1 多返回值",[10,166286,166287],{},"Python 函数可以返回多个值，本质上返回的是元组。",[41,166289,166291],{"className":170,"code":166290,"language":172,"meta":46,"style":46},"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",[48,166292,166293,166302,166310,166318,166327,166334,166338,166342,166351,166357],{"__ignoreMap":46},[51,166294,166295,166297,166300],{"class":53,"line":54},[51,166296,348],{"class":69},[51,166298,166299],{"class":57}," get_info",[51,166301,32328],{"class":65},[51,166303,166304,166306,166308],{"class":53,"line":185},[51,166305,152669],{"class":65},[51,166307,70],{"class":69},[51,166309,149652],{"class":61},[51,166311,166312,166314,166316],{"class":53,"line":202},[51,166313,152685],{"class":65},[51,166315,70],{"class":69},[51,166317,146850],{"class":278},[51,166319,166320,166322,166324],{"class":53,"line":209},[51,166321,152700],{"class":65},[51,166323,70],{"class":69},[51,166325,166326],{"class":278}," 95\n",[51,166328,166329,166331],{"class":53,"line":223},[51,166330,4476],{"class":69},[51,166332,166333],{"class":65}," name, age, score\n",[51,166335,166336],{"class":53,"line":237},[51,166337,206],{"emptyLinePlaceholder":205},[51,166339,166340],{"class":53,"line":242},[51,166341,206],{"emptyLinePlaceholder":205},[51,166343,166344,166346,166348],{"class":53,"line":257},[51,166345,161605],{"class":65},[51,166347,70],{"class":69},[51,166349,166350],{"class":65}," get_info()\n",[51,166352,166353,166355],{"class":53,"line":262},[51,166354,30794],{"class":278},[51,166356,76957],{"class":65},[51,166358,166359,166361,166363,166365],{"class":53,"line":285},[51,166360,30794],{"class":278},[51,166362,546],{"class":65},[51,166364,103479],{"class":278},[51,166366,166367],{"class":65},"(result))\n",[10,166369,166370],{},"可以直接解包：",[41,166372,166374],{"className":170,"code":166373,"language":172,"meta":46,"style":46},"name, age, score = get_info()\nprint(name, age, score)\n",[48,166375,166376,166385],{"__ignoreMap":46},[51,166377,166378,166381,166383],{"class":53,"line":54},[51,166379,166380],{"class":65},"name, age, score ",[51,166382,70],{"class":69},[51,166384,166350],{"class":65},[51,166386,166387,166389],{"class":53,"line":185},[51,166388,30794],{"class":278},[51,166390,166391],{"class":65},"(name, age, score)\n",[10,166393,166394],{},"返回多个值适合函数需要同时给出多个结果时使用。",[486,166396,166398],{"id":166397},"_72-位置参数","7.2 位置参数",[10,166400,166401],{},"位置参数按顺序传递。",[41,166403,166405],{"className":170,"code":166404,"language":172,"meta":46,"style":46},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[48,166406,166407,166415,166443,166447,166451],{"__ignoreMap":46},[51,166408,166409,166411,166413],{"class":53,"line":54},[51,166410,348],{"class":69},[51,166412,149671],{"class":57},[51,166414,149674],{"class":65},[51,166416,166417,166419,166421,166423,166425,166427,166429,166431,166433,166435,166437,166439,166441],{"class":53,"line":185},[51,166418,31677],{"class":278},[51,166420,546],{"class":65},[51,166422,595],{"class":69},[51,166424,149685],{"class":61},[51,166426,1438],{"class":278},[51,166428,80182],{"class":65},[51,166430,1488],{"class":278},[51,166432,149694],{"class":61},[51,166434,1438],{"class":278},[51,166436,70593],{"class":65},[51,166438,1488],{"class":278},[51,166440,149703],{"class":61},[51,166442,282],{"class":65},[51,166444,166445],{"class":53,"line":202},[51,166446,206],{"emptyLinePlaceholder":205},[51,166448,166449],{"class":53,"line":209},[51,166450,206],{"emptyLinePlaceholder":205},[51,166452,166453,166456,166458,166460,166462],{"class":53,"line":223},[51,166454,166455],{"class":65},"introduce(",[51,166457,150187],{"class":61},[51,166459,12819],{"class":65},[51,166461,1192],{"class":278},[51,166463,282],{"class":65},[10,166465,166466],{},"顺序错了就会得到错误含义：",[41,166468,166470],{"className":170,"code":166469,"language":172,"meta":46,"style":46},"introduce(18, \"小明\")\n",[48,166471,166472],{"__ignoreMap":46},[51,166473,166474,166476,166478,166480,166482],{"class":53,"line":54},[51,166475,166455],{"class":65},[51,166477,1192],{"class":278},[51,166479,12819],{"class":65},[51,166481,150187],{"class":61},[51,166483,282],{"class":65},[486,166485,166487],{"id":166486},"_73-关键字参数","7.3 关键字参数",[10,166489,166490],{},"关键字参数按参数名传递。",[41,166492,166494],{"className":170,"code":166493,"language":172,"meta":46,"style":46},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[48,166495,166496,166516],{"__ignoreMap":46},[51,166497,166498,166500,166502,166504,166506,166508,166510,166512,166514],{"class":53,"line":54},[51,166499,166455],{"class":65},[51,166501,80182],{"class":248},[51,166503,70],{"class":69},[51,166505,150187],{"class":61},[51,166507,12819],{"class":65},[51,166509,70593],{"class":248},[51,166511,70],{"class":69},[51,166513,1192],{"class":278},[51,166515,282],{"class":65},[51,166517,166518,166520,166522,166524,166526,166528,166530,166532,166534],{"class":53,"line":185},[51,166519,166455],{"class":65},[51,166521,70593],{"class":248},[51,166523,70],{"class":69},[51,166525,1192],{"class":278},[51,166527,12819],{"class":65},[51,166529,80182],{"class":248},[51,166531,70],{"class":69},[51,166533,150187],{"class":61},[51,166535,282],{"class":65},[10,166537,118305],{},[19,166539,166540,166543],{},[22,166541,166542],{},"顺序不容易错。",[22,166544,166545],{},"调用时可读性更强。",[486,166547,166549],{"id":166548},"_74-默认参数","7.4 默认参数",[10,166551,166552],{},"默认参数给参数设置默认值。",[41,166554,166556],{"className":170,"code":166555,"language":172,"meta":46,"style":46},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[48,166557,166558,166574,166604,166608,166612,166622],{"__ignoreMap":46},[51,166559,166560,166562,166564,166567,166569,166572],{"class":53,"line":54},[51,166561,348],{"class":69},[51,166563,122464],{"class":57},[51,166565,166566],{"class":65},"(host, port",[51,166568,70],{"class":69},[51,166570,166571],{"class":278},"3306",[51,166573,31164],{"class":65},[51,166575,166576,166578,166580,166582,166585,166587,166589,166591,166593,166595,166598,166600,166602],{"class":53,"line":185},[51,166577,31677],{"class":278},[51,166579,546],{"class":65},[51,166581,595],{"class":69},[51,166583,166584],{"class":61},"\"连接",[51,166586,1438],{"class":278},[51,166588,27777],{"class":65},[51,166590,1488],{"class":278},[51,166592,1401],{"class":61},[51,166594,1438],{"class":278},[51,166596,166597],{"class":65},"port",[51,166599,1488],{"class":278},[51,166601,793],{"class":61},[51,166603,282],{"class":65},[51,166605,166606],{"class":53,"line":202},[51,166607,206],{"emptyLinePlaceholder":205},[51,166609,166610],{"class":53,"line":209},[51,166611,206],{"emptyLinePlaceholder":205},[51,166613,166614,166617,166620],{"class":53,"line":223},[51,166615,166616],{"class":65},"connect(",[51,166618,166619],{"class":61},"\"localhost\"",[51,166621,282],{"class":65},[51,166623,166624,166626,166628,166630,166633],{"class":53,"line":237},[51,166625,166616],{"class":65},[51,166627,166619],{"class":61},[51,166629,12819],{"class":65},[51,166631,166632],{"class":278},"6379",[51,166634,282],{"class":65},[10,166636,166637],{},"注意：默认参数必须放在非默认参数后面。",[10,166639,166640],{},"错误：",[41,166642,166644],{"className":170,"code":166643,"language":172,"meta":46,"style":46},"def connect(port=3306, host):\n    pass\n",[48,166645,166646,166662],{"__ignoreMap":46},[51,166647,166648,166650,166652,166655,166657,166659],{"class":53,"line":54},[51,166649,348],{"class":69},[51,166651,122464],{"class":57},[51,166653,166654],{"class":65},"(port",[51,166656,70],{"class":69},[51,166658,166571],{"class":278},[51,166660,166661],{"class":65},", host):\n",[51,166663,166664],{"class":53,"line":185},[51,166665,149836],{"class":69},[10,166667,166668],{},"正确：",[41,166670,166672],{"className":170,"code":166671,"language":172,"meta":46,"style":46},"def connect(host, port=3306):\n    pass\n",[48,166673,166674,166688],{"__ignoreMap":46},[51,166675,166676,166678,166680,166682,166684,166686],{"class":53,"line":54},[51,166677,348],{"class":69},[51,166679,122464],{"class":57},[51,166681,166566],{"class":65},[51,166683,70],{"class":69},[51,166685,166571],{"class":278},[51,166687,31164],{"class":65},[51,166689,166690],{"class":53,"line":185},[51,166691,149836],{"class":69},[486,166693,166695],{"id":166694},"_75-默认参数的坑","7.5 默认参数的坑",[10,166697,166698],{},"不要使用可变对象作为默认参数。",[10,166700,157922],{},[41,166702,166704],{"className":170,"code":166703,"language":172,"meta":46,"style":46},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[48,166705,166706,166721,166726,166733,166737,166741,166752],{"__ignoreMap":46},[51,166707,166708,166710,166713,166716,166718],{"class":53,"line":54},[51,166709,348],{"class":69},[51,166711,166712],{"class":57}," add_item",[51,166714,166715],{"class":65},"(item, items",[51,166717,70],{"class":69},[51,166719,166720],{"class":65},"[]):\n",[51,166722,166723],{"class":53,"line":185},[51,166724,166725],{"class":65},"    items.append(item)\n",[51,166727,166728,166730],{"class":53,"line":202},[51,166729,4476],{"class":69},[51,166731,166732],{"class":65}," items\n",[51,166734,166735],{"class":53,"line":209},[51,166736,206],{"emptyLinePlaceholder":205},[51,166738,166739],{"class":53,"line":223},[51,166740,206],{"emptyLinePlaceholder":205},[51,166742,166743,166745,166748,166750],{"class":53,"line":237},[51,166744,30794],{"class":278},[51,166746,166747],{"class":65},"(add_item(",[51,166749,165624],{"class":61},[51,166751,30876],{"class":65},[51,166753,166754,166756,166758,166761],{"class":53,"line":242},[51,166755,30794],{"class":278},[51,166757,166747],{"class":65},[51,166759,166760],{"class":61},"\"b\"",[51,166762,30876],{"class":65},[10,166764,166765],{},"第二次调用会复用第一次的列表。",[10,166767,156187],{},[41,166769,166771],{"className":170,"code":166770,"language":172,"meta":46,"style":46},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[48,166772,166773,166787,166800,166809,166813],{"__ignoreMap":46},[51,166774,166775,166777,166779,166781,166783,166785],{"class":53,"line":54},[51,166776,348],{"class":69},[51,166778,166712],{"class":57},[51,166780,166715],{"class":65},[51,166782,70],{"class":69},[51,166784,96058],{"class":278},[51,166786,31164],{"class":65},[51,166788,166789,166791,166794,166796,166798],{"class":53,"line":185},[51,166790,3488],{"class":69},[51,166792,166793],{"class":65}," items ",[51,166795,39301],{"class":69},[51,166797,39307],{"class":278},[51,166799,363],{"class":65},[51,166801,166802,166805,166807],{"class":53,"line":202},[51,166803,166804],{"class":65},"        items ",[51,166806,70],{"class":69},[51,166808,52210],{"class":65},[51,166810,166811],{"class":53,"line":209},[51,166812,166725],{"class":65},[51,166814,166815,166817],{"class":53,"line":223},[51,166816,4476],{"class":69},[51,166818,166732],{"class":65},[486,166820,166822],{"id":166821},"_76-不定长参数","7.6 不定长参数",[513,166824,166826],{"id":166825},"_761-args","7.6.1 *args",[10,166828,166829,166832],{},[48,166830,166831],{},"*args"," 接收任意数量的位置参数，得到元组。",[41,166834,166836],{"className":170,"code":166835,"language":172,"meta":46,"style":46},"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",[48,166837,166838,166851,166859,166870,166879,166885,166889,166893,166912],{"__ignoreMap":46},[51,166839,166840,166842,166844,166846,166848],{"class":53,"line":54},[51,166841,348],{"class":69},[51,166843,5594],{"class":57},[51,166845,546],{"class":65},[51,166847,997],{"class":69},[51,166849,166850],{"class":65},"args):\n",[51,166852,166853,166855,166857],{"class":53,"line":185},[51,166854,159606],{"class":65},[51,166856,70],{"class":69},[51,166858,47705],{"class":278},[51,166860,166861,166863,166865,166867],{"class":53,"line":202},[51,166862,3588],{"class":69},[51,166864,156479],{"class":65},[51,166866,26425],{"class":69},[51,166868,166869],{"class":65}," args:\n",[51,166871,166872,166874,166876],{"class":53,"line":209},[51,166873,160281],{"class":65},[51,166875,9861],{"class":69},[51,166877,166878],{"class":65}," num\n",[51,166880,166881,166883],{"class":53,"line":223},[51,166882,4476],{"class":69},[51,166884,162586],{"class":65},[51,166886,166887],{"class":53,"line":237},[51,166888,206],{"emptyLinePlaceholder":205},[51,166890,166891],{"class":53,"line":242},[51,166892,206],{"emptyLinePlaceholder":205},[51,166894,166895,166897,166900,166902,166904,166906,166908,166910],{"class":53,"line":257},[51,166896,30794],{"class":278},[51,166898,166899],{"class":65},"(add(",[51,166901,759],{"class":278},[51,166903,12819],{"class":65},[51,166905,620],{"class":278},[51,166907,12819],{"class":65},[51,166909,614],{"class":278},[51,166911,30876],{"class":65},[51,166913,166914,166916,166918,166920,166922,166924,166926,166928,166930,166932,166934,166936],{"class":53,"line":262},[51,166915,30794],{"class":278},[51,166917,166899],{"class":65},[51,166919,759],{"class":278},[51,166921,12819],{"class":65},[51,166923,620],{"class":278},[51,166925,12819],{"class":65},[51,166927,614],{"class":278},[51,166929,12819],{"class":65},[51,166931,835],{"class":278},[51,166933,12819],{"class":65},[51,166935,861],{"class":278},[51,166937,30876],{"class":65},[513,166939,166941],{"id":166940},"_762-kwargs","7.6.2 **kwargs",[10,166943,166944,166947],{},[48,166945,166946],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[41,166949,166951],{"className":170,"code":166950,"language":172,"meta":46,"style":46},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[48,166952,166953,166966,166977,166983,166987,166991],{"__ignoreMap":46},[51,166954,166955,166957,166959,166961,166963],{"class":53,"line":54},[51,166956,348],{"class":69},[51,166958,162244],{"class":57},[51,166960,546],{"class":65},[51,166962,11045],{"class":69},[51,166964,166965],{"class":65},"kwargs):\n",[51,166967,166968,166970,166972,166974],{"class":53,"line":185},[51,166969,3588],{"class":69},[51,166971,165084],{"class":65},[51,166973,26425],{"class":69},[51,166975,166976],{"class":65}," kwargs.items():\n",[51,166978,166979,166981],{"class":53,"line":202},[51,166980,32826],{"class":278},[51,166982,165096],{"class":65},[51,166984,166985],{"class":53,"line":209},[51,166986,206],{"emptyLinePlaceholder":205},[51,166988,166989],{"class":53,"line":223},[51,166990,206],{"emptyLinePlaceholder":205},[51,166992,166993,166995,166997,166999,167001,167003,167005,167007,167009,167011,167013,167015,167017],{"class":53,"line":237},[51,166994,162309],{"class":65},[51,166996,80182],{"class":248},[51,166998,70],{"class":69},[51,167000,150187],{"class":61},[51,167002,12819],{"class":65},[51,167004,70593],{"class":248},[51,167006,70],{"class":69},[51,167008,1192],{"class":278},[51,167010,12819],{"class":65},[51,167012,70644],{"class":248},[51,167014,70],{"class":69},[51,167016,69641],{"class":61},[51,167018,282],{"class":65},[486,167020,167022],{"id":167021},"_77-参数解包","7.7 参数解包",[10,167024,167025],{},"列表或元组解包为位置参数：",[41,167027,167029],{"className":170,"code":167028,"language":172,"meta":46,"style":46},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[48,167030,167031,167040,167055,167059,167063,167083],{"__ignoreMap":46},[51,167032,167033,167035,167037],{"class":53,"line":54},[51,167034,348],{"class":69},[51,167036,5594],{"class":57},[51,167038,167039],{"class":65},"(a, b, c):\n",[51,167041,167042,167044,167046,167048,167050,167052],{"class":53,"line":185},[51,167043,4476],{"class":69},[51,167045,11253],{"class":65},[51,167047,1023],{"class":69},[51,167049,11266],{"class":65},[51,167051,1023],{"class":69},[51,167053,167054],{"class":65}," c\n",[51,167056,167057],{"class":53,"line":202},[51,167058,206],{"emptyLinePlaceholder":205},[51,167060,167061],{"class":53,"line":209},[51,167062,206],{"emptyLinePlaceholder":205},[51,167064,167065,167067,167069,167071,167073,167075,167077,167079,167081],{"class":53,"line":223},[51,167066,164399],{"class":65},[51,167068,70],{"class":69},[51,167070,52598],{"class":65},[51,167072,759],{"class":278},[51,167074,12819],{"class":65},[51,167076,620],{"class":278},[51,167078,12819],{"class":65},[51,167080,614],{"class":278},[51,167082,33621],{"class":65},[51,167084,167085,167087,167089,167091],{"class":53,"line":237},[51,167086,30794],{"class":278},[51,167088,166899],{"class":65},[51,167090,997],{"class":69},[51,167092,167093],{"class":65},"nums))\n",[10,167095,167096],{},"字典解包为关键字参数：",[41,167098,167100],{"className":170,"code":167099,"language":172,"meta":46,"style":46},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[48,167101,167102,167110,167136,167140,167144,167168],{"__ignoreMap":46},[51,167103,167104,167106,167108],{"class":53,"line":54},[51,167105,348],{"class":69},[51,167107,149671],{"class":57},[51,167109,149674],{"class":65},[51,167111,167112,167114,167116,167118,167120,167122,167124,167126,167128,167130,167132,167134],{"class":53,"line":185},[51,167113,31677],{"class":278},[51,167115,546],{"class":65},[51,167117,595],{"class":69},[51,167119,793],{"class":61},[51,167121,1438],{"class":278},[51,167123,80182],{"class":65},[51,167125,1488],{"class":278},[51,167127,4833],{"class":278},[51,167129,70593],{"class":65},[51,167131,1488],{"class":278},[51,167133,793],{"class":61},[51,167135,282],{"class":65},[51,167137,167138],{"class":53,"line":202},[51,167139,206],{"emptyLinePlaceholder":205},[51,167141,167142],{"class":53,"line":209},[51,167143,206],{"emptyLinePlaceholder":205},[51,167145,167146,167148,167150,167152,167154,167156,167158,167160,167162,167164,167166],{"class":53,"line":223},[51,167147,116685],{"class":65},[51,167149,70],{"class":69},[51,167151,4833],{"class":65},[51,167153,63051],{"class":61},[51,167155,51809],{"class":65},[51,167157,150187],{"class":61},[51,167159,12819],{"class":65},[51,167161,69496],{"class":61},[51,167163,51809],{"class":65},[51,167165,1192],{"class":278},[51,167167,1974],{"class":65},[51,167169,167170,167172,167174],{"class":53,"line":237},[51,167171,166455],{"class":65},[51,167173,11045],{"class":69},[51,167175,167176],{"class":65},"info)\n",[486,167178,167180],{"id":167179},"_78-匿名函数lambda","7.8 匿名函数lambda",[10,167182,167183,167186],{},[48,167184,167185],{},"lambda"," 用于定义简单匿名函数。",[41,167188,167190],{"className":170,"code":167189,"language":172,"meta":46,"style":46},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[48,167191,167192,167209],{"__ignoreMap":46},[51,167193,167194,167197,167199,167202,167205,167207],{"class":53,"line":54},[51,167195,167196],{"class":65},"add ",[51,167198,70],{"class":69},[51,167200,167201],{"class":69}," lambda",[51,167203,167204],{"class":65}," a, b: a ",[51,167206,1023],{"class":69},[51,167208,151403],{"class":65},[51,167210,167211,167213,167215,167217,167219,167221],{"class":53,"line":185},[51,167212,30794],{"class":278},[51,167214,166899],{"class":65},[51,167216,759],{"class":278},[51,167218,12819],{"class":65},[51,167220,620],{"class":278},[51,167222,30876],{"class":65},[10,167224,167225],{},"常和排序、过滤等函数一起使用。",[10,167227,167228],{},"按分数排序：",[41,167230,167232],{"className":170,"code":167231,"language":172,"meta":46,"style":46},"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",[48,167233,167234,167242,167262,167282,167302,167306,167310,167333],{"__ignoreMap":46},[51,167235,167236,167238,167240],{"class":53,"line":54},[51,167237,160015],{"class":65},[51,167239,70],{"class":69},[51,167241,55819],{"class":65},[51,167243,167244,167246,167248,167250,167252,167254,167256,167258,167260],{"class":53,"line":185},[51,167245,148684],{"class":65},[51,167247,63051],{"class":61},[51,167249,51809],{"class":65},[51,167251,150187],{"class":61},[51,167253,12819],{"class":65},[51,167255,151771],{"class":61},[51,167257,51809],{"class":65},[51,167259,1531],{"class":278},[51,167261,5315],{"class":65},[51,167263,167264,167266,167268,167270,167272,167274,167276,167278,167280],{"class":53,"line":202},[51,167265,148684],{"class":65},[51,167267,63051],{"class":61},[51,167269,51809],{"class":65},[51,167271,151235],{"class":61},[51,167273,12819],{"class":65},[51,167275,151771],{"class":61},[51,167277,51809],{"class":65},[51,167279,1353],{"class":278},[51,167281,5315],{"class":65},[51,167283,167284,167286,167288,167290,167292,167294,167296,167298,167300],{"class":53,"line":209},[51,167285,148684],{"class":65},[51,167287,63051],{"class":61},[51,167289,51809],{"class":65},[51,167291,160030],{"class":61},[51,167293,12819],{"class":65},[51,167295,151771],{"class":61},[51,167297,51809],{"class":65},[51,167299,948],{"class":278},[51,167301,5315],{"class":65},[51,167303,167304],{"class":53,"line":223},[51,167305,33621],{"class":65},[51,167307,167308],{"class":53,"line":237},[51,167309,206],{"emptyLinePlaceholder":205},[51,167311,167312,167315,167317,167319,167321,167323,167325,167327,167329,167331],{"class":53,"line":242},[51,167313,167314],{"class":65},"students.sort(",[51,167316,154245],{"class":248},[51,167318,154248],{"class":69},[51,167320,154251],{"class":65},[51,167322,151771],{"class":61},[51,167324,112573],{"class":65},[51,167326,163827],{"class":248},[51,167328,70],{"class":69},[51,167330,279],{"class":278},[51,167332,282],{"class":65},[51,167334,167335,167337],{"class":53,"line":257},[51,167336,30794],{"class":278},[51,167338,165294],{"class":65},[10,167340,167341,167342,167344],{},"如果逻辑复杂，不要硬写 ",[48,167343,167185],{},"，定义普通函数更清晰。",[486,167346,167348],{"id":167347},"_79-函数作为参数","7.9 函数作为参数",[10,167350,167351],{},"函数可以作为参数传给另一个函数。",[41,167353,167355],{"className":170,"code":167354,"language":172,"meta":46,"style":46},"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",[48,167356,167357,167365,167375,167379,167383,167393,167400,167404,167408],{"__ignoreMap":46},[51,167358,167359,167361,167363],{"class":53,"line":54},[51,167360,348],{"class":69},[51,167362,5594],{"class":57},[51,167364,151392],{"class":65},[51,167366,167367,167369,167371,167373],{"class":53,"line":185},[51,167368,4476],{"class":69},[51,167370,11253],{"class":65},[51,167372,1023],{"class":69},[51,167374,151403],{"class":65},[51,167376,167377],{"class":53,"line":202},[51,167378,206],{"emptyLinePlaceholder":205},[51,167380,167381],{"class":53,"line":209},[51,167382,206],{"emptyLinePlaceholder":205},[51,167384,167385,167387,167390],{"class":53,"line":223},[51,167386,348],{"class":69},[51,167388,167389],{"class":57}," calculate",[51,167391,167392],{"class":65},"(a, b, func):\n",[51,167394,167395,167397],{"class":53,"line":237},[51,167396,4476],{"class":69},[51,167398,167399],{"class":65}," func(a, b)\n",[51,167401,167402],{"class":53,"line":242},[51,167403,206],{"emptyLinePlaceholder":205},[51,167405,167406],{"class":53,"line":257},[51,167407,206],{"emptyLinePlaceholder":205},[51,167409,167410,167412,167415,167417,167419,167421],{"class":53,"line":262},[51,167411,30794],{"class":278},[51,167413,167414],{"class":65},"(calculate(",[51,167416,988],{"class":278},[51,167418,12819],{"class":65},[51,167420,1242],{"class":278},[51,167422,167423],{"class":65},", add))\n",[10,167425,167426],{},"这种思想在排序、回调、框架中经常出现。",[486,167428,167430],{"id":167429},"_710-mapfiltersorted","7.10 map、filter、sorted",[513,167432,167434],{"id":167433},"_7101-map","7.10.1 map",[10,167436,167437,167439],{},[48,167438,74416],{}," 对每个元素执行函数。",[41,167441,167443],{"className":170,"code":167442,"language":172,"meta":46,"style":46},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[48,167444,167445,167469,167492],{"__ignoreMap":46},[51,167446,167447,167449,167451,167453,167455,167457,167459,167461,167463,167465,167467],{"class":53,"line":54},[51,167448,164399],{"class":65},[51,167450,70],{"class":69},[51,167452,52598],{"class":65},[51,167454,759],{"class":278},[51,167456,12819],{"class":65},[51,167458,620],{"class":278},[51,167460,12819],{"class":65},[51,167462,614],{"class":278},[51,167464,12819],{"class":65},[51,167466,835],{"class":278},[51,167468,33621],{"class":65},[51,167470,167471,167473,167475,167478,167480,167482,167485,167487,167489],{"class":53,"line":185},[51,167472,161605],{"class":65},[51,167474,70],{"class":69},[51,167476,167477],{"class":278}," map",[51,167479,546],{"class":65},[51,167481,167185],{"class":69},[51,167483,167484],{"class":65}," x: x ",[51,167486,997],{"class":69},[51,167488,15139],{"class":278},[51,167490,167491],{"class":65},", nums)\n",[51,167493,167494,167496,167498,167500],{"class":53,"line":202},[51,167495,30794],{"class":278},[51,167497,546],{"class":65},[51,167499,154369],{"class":278},[51,167501,166367],{"class":65},[513,167503,167505],{"id":167504},"_7102-filter","7.10.2 filter",[10,167507,167508,167510],{},[48,167509,80423],{}," 保留满足条件的元素。",[41,167512,167514],{"className":170,"code":167513,"language":172,"meta":46,"style":46},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[48,167515,167516,167544,167569],{"__ignoreMap":46},[51,167517,167518,167520,167522,167524,167526,167528,167530,167532,167534,167536,167538,167540,167542],{"class":53,"line":54},[51,167519,164399],{"class":65},[51,167521,70],{"class":69},[51,167523,52598],{"class":65},[51,167525,759],{"class":278},[51,167527,12819],{"class":65},[51,167529,620],{"class":278},[51,167531,12819],{"class":65},[51,167533,614],{"class":278},[51,167535,12819],{"class":65},[51,167537,835],{"class":278},[51,167539,12819],{"class":65},[51,167541,861],{"class":278},[51,167543,33621],{"class":65},[51,167545,167546,167548,167550,167553,167555,167557,167559,167561,167563,167565,167567],{"class":53,"line":185},[51,167547,161605],{"class":65},[51,167549,70],{"class":69},[51,167551,167552],{"class":278}," filter",[51,167554,546],{"class":65},[51,167556,167185],{"class":69},[51,167558,167484],{"class":65},[51,167560,870],{"class":69},[51,167562,15139],{"class":278},[51,167564,101931],{"class":69},[51,167566,4479],{"class":278},[51,167568,167491],{"class":65},[51,167570,167571,167573,167575,167577],{"class":53,"line":202},[51,167572,30794],{"class":278},[51,167574,546],{"class":65},[51,167576,154369],{"class":278},[51,167578,166367],{"class":65},[513,167580,167582],{"id":167581},"_7103-sorted","7.10.3 sorted",[10,167584,167585,167587],{},[48,167586,165535],{}," 返回排序后的新列表。",[41,167589,167591],{"className":170,"code":167590,"language":172,"meta":46,"style":46},"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",[48,167592,167593,167601,167621,167641,167661,167665,167669,167698],{"__ignoreMap":46},[51,167594,167595,167597,167599],{"class":53,"line":54},[51,167596,160015],{"class":65},[51,167598,70],{"class":69},[51,167600,55819],{"class":65},[51,167602,167603,167605,167607,167609,167611,167613,167615,167617,167619],{"class":53,"line":185},[51,167604,148684],{"class":65},[51,167606,63051],{"class":61},[51,167608,51809],{"class":65},[51,167610,150187],{"class":61},[51,167612,12819],{"class":65},[51,167614,151771],{"class":61},[51,167616,51809],{"class":65},[51,167618,1531],{"class":278},[51,167620,5315],{"class":65},[51,167622,167623,167625,167627,167629,167631,167633,167635,167637,167639],{"class":53,"line":202},[51,167624,148684],{"class":65},[51,167626,63051],{"class":61},[51,167628,51809],{"class":65},[51,167630,151235],{"class":61},[51,167632,12819],{"class":65},[51,167634,151771],{"class":61},[51,167636,51809],{"class":65},[51,167638,1353],{"class":278},[51,167640,5315],{"class":65},[51,167642,167643,167645,167647,167649,167651,167653,167655,167657,167659],{"class":53,"line":209},[51,167644,148684],{"class":65},[51,167646,63051],{"class":61},[51,167648,51809],{"class":65},[51,167650,160030],{"class":61},[51,167652,12819],{"class":65},[51,167654,151771],{"class":61},[51,167656,51809],{"class":65},[51,167658,948],{"class":278},[51,167660,5315],{"class":65},[51,167662,167663],{"class":53,"line":223},[51,167664,33621],{"class":65},[51,167666,167667],{"class":53,"line":237},[51,167668,206],{"emptyLinePlaceholder":205},[51,167670,167671,167673,167675,167677,167680,167682,167684,167686,167688,167690,167692,167694,167696],{"class":53,"line":242},[51,167672,161605],{"class":65},[51,167674,70],{"class":69},[51,167676,163903],{"class":278},[51,167678,167679],{"class":65},"(students, ",[51,167681,154245],{"class":248},[51,167683,154248],{"class":69},[51,167685,154251],{"class":65},[51,167687,151771],{"class":61},[51,167689,112573],{"class":65},[51,167691,163827],{"class":248},[51,167693,70],{"class":69},[51,167695,279],{"class":278},[51,167697,282],{"class":65},[51,167699,167700,167702],{"class":53,"line":257},[51,167701,30794],{"class":278},[51,167703,76957],{"class":65},[486,167705,167707],{"id":167706},"_711-闭包入门","7.11 闭包入门",[10,167709,167710],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[41,167712,167714],{"className":170,"code":167713,"language":172,"meta":46,"style":46},"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",[48,167715,167716,167726,167736,167747,167751,167758,167762,167766,167780],{"__ignoreMap":46},[51,167717,167718,167720,167723],{"class":53,"line":54},[51,167719,348],{"class":69},[51,167721,167722],{"class":57}," outer",[51,167724,167725],{"class":65},"(base):\n",[51,167727,167728,167730,167733],{"class":53,"line":185},[51,167729,31179],{"class":69},[51,167731,167732],{"class":57}," inner",[51,167734,167735],{"class":65},"(num):\n",[51,167737,167738,167740,167743,167745],{"class":53,"line":202},[51,167739,15136],{"class":69},[51,167741,167742],{"class":65}," base ",[51,167744,1023],{"class":69},[51,167746,166878],{"class":65},[51,167748,167749],{"class":53,"line":209},[51,167750,206],{"emptyLinePlaceholder":205},[51,167752,167753,167755],{"class":53,"line":223},[51,167754,4476],{"class":69},[51,167756,167757],{"class":65}," inner\n",[51,167759,167760],{"class":53,"line":237},[51,167761,206],{"emptyLinePlaceholder":205},[51,167763,167764],{"class":53,"line":242},[51,167765,206],{"emptyLinePlaceholder":205},[51,167767,167768,167771,167773,167776,167778],{"class":53,"line":257},[51,167769,167770],{"class":65},"add_10 ",[51,167772,70],{"class":69},[51,167774,167775],{"class":65}," outer(",[51,167777,988],{"class":278},[51,167779,282],{"class":65},[51,167781,167782,167784,167787,167789],{"class":53,"line":262},[51,167783,30794],{"class":278},[51,167785,167786],{"class":65},"(add_10(",[51,167788,861],{"class":278},[51,167790,30876],{"class":65},[10,167792,167793],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[486,167795,167797],{"id":167796},"_712-装饰器入门","7.12 装饰器入门",[10,167799,167800],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[41,167802,167804],{"className":170,"code":167803,"language":172,"meta":46,"style":46},"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",[48,167805,167806,167815,167824,167835,167840,167851,167855,167862,167866,167870,167875,167883,167893,167897,167901],{"__ignoreMap":46},[51,167807,167808,167810,167812],{"class":53,"line":54},[51,167809,348],{"class":69},[51,167811,87563],{"class":57},[51,167813,167814],{"class":65},"(func):\n",[51,167816,167817,167819,167822],{"class":53,"line":185},[51,167818,31179],{"class":69},[51,167820,167821],{"class":57}," wrapper",[51,167823,32328],{"class":65},[51,167825,167826,167828,167830,167833],{"class":53,"line":202},[51,167827,32826],{"class":278},[51,167829,546],{"class":65},[51,167831,167832],{"class":61},"\"函数开始执行\"",[51,167834,282],{"class":65},[51,167836,167837],{"class":53,"line":209},[51,167838,167839],{"class":65},"        func()\n",[51,167841,167842,167844,167846,167849],{"class":53,"line":223},[51,167843,32826],{"class":278},[51,167845,546],{"class":65},[51,167847,167848],{"class":61},"\"函数执行结束\"",[51,167850,282],{"class":65},[51,167852,167853],{"class":53,"line":237},[51,167854,206],{"emptyLinePlaceholder":205},[51,167856,167857,167859],{"class":53,"line":242},[51,167858,4476],{"class":69},[51,167860,167861],{"class":65}," wrapper\n",[51,167863,167864],{"class":53,"line":257},[51,167865,206],{"emptyLinePlaceholder":205},[51,167867,167868],{"class":53,"line":262},[51,167869,206],{"emptyLinePlaceholder":205},[51,167871,167872],{"class":53,"line":285},[51,167873,167874],{"class":57},"@log\n",[51,167876,167877,167879,167881],{"class":53,"line":296},[51,167878,348],{"class":69},[51,167880,161295],{"class":57},[51,167882,32328],{"class":65},[51,167884,167885,167887,167889,167891],{"class":53,"line":307},[51,167886,31677],{"class":278},[51,167888,546],{"class":65},[51,167890,6228],{"class":61},[51,167892,282],{"class":65},[51,167894,167895],{"class":53,"line":324},[51,167896,206],{"emptyLinePlaceholder":205},[51,167898,167899],{"class":53,"line":329},[51,167900,206],{"emptyLinePlaceholder":205},[51,167902,167903],{"class":53,"line":334},[51,167904,161330],{"class":65},[10,167906,158573],{},[41,167908,167910],{"className":170,"code":167909,"language":172,"meta":46,"style":46},"say_hello = log(say_hello)\n",[48,167911,167912],{"__ignoreMap":46},[51,167913,167914,167917,167919],{"class":53,"line":54},[51,167915,167916],{"class":65},"say_hello ",[51,167918,70],{"class":69},[51,167920,167921],{"class":65}," log(say_hello)\n",[10,167923,167924],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[486,167926,167928],{"id":167927},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[41,167930,167932],{"className":170,"code":167931,"language":172,"meta":46,"style":46},"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",[48,167933,167934,167942,167959,167969,167988,167998,168005,168009,168015,168019,168023,168027,168035,168045,168049,168053],{"__ignoreMap":46},[51,167935,167936,167938,167940],{"class":53,"line":54},[51,167937,348],{"class":69},[51,167939,87563],{"class":57},[51,167941,167814],{"class":65},[51,167943,167944,167946,167948,167950,167952,167955,167957],{"class":53,"line":185},[51,167945,31179],{"class":69},[51,167947,167821],{"class":57},[51,167949,546],{"class":65},[51,167951,997],{"class":69},[51,167953,167954],{"class":65},"args, ",[51,167956,11045],{"class":69},[51,167958,166965],{"class":65},[51,167960,167961,167963,167965,167967],{"class":53,"line":202},[51,167962,32826],{"class":278},[51,167964,546],{"class":65},[51,167966,167832],{"class":61},[51,167968,282],{"class":65},[51,167970,167971,167974,167976,167979,167981,167983,167985],{"class":53,"line":209},[51,167972,167973],{"class":65},"        result ",[51,167975,70],{"class":69},[51,167977,167978],{"class":65}," func(",[51,167980,997],{"class":69},[51,167982,167954],{"class":65},[51,167984,11045],{"class":69},[51,167986,167987],{"class":65},"kwargs)\n",[51,167989,167990,167992,167994,167996],{"class":53,"line":223},[51,167991,32826],{"class":278},[51,167993,546],{"class":65},[51,167995,167848],{"class":61},[51,167997,282],{"class":65},[51,167999,168000,168002],{"class":53,"line":237},[51,168001,15136],{"class":69},[51,168003,168004],{"class":65}," result\n",[51,168006,168007],{"class":53,"line":242},[51,168008,206],{"emptyLinePlaceholder":205},[51,168010,168011,168013],{"class":53,"line":257},[51,168012,4476],{"class":69},[51,168014,167861],{"class":65},[51,168016,168017],{"class":53,"line":262},[51,168018,206],{"emptyLinePlaceholder":205},[51,168020,168021],{"class":53,"line":285},[51,168022,206],{"emptyLinePlaceholder":205},[51,168024,168025],{"class":53,"line":296},[51,168026,167874],{"class":57},[51,168028,168029,168031,168033],{"class":53,"line":307},[51,168030,348],{"class":69},[51,168032,5594],{"class":57},[51,168034,151392],{"class":65},[51,168036,168037,168039,168041,168043],{"class":53,"line":324},[51,168038,4476],{"class":69},[51,168040,11253],{"class":65},[51,168042,1023],{"class":69},[51,168044,151403],{"class":65},[51,168046,168047],{"class":53,"line":329},[51,168048,206],{"emptyLinePlaceholder":205},[51,168050,168051],{"class":53,"line":334},[51,168052,206],{"emptyLinePlaceholder":205},[51,168054,168055,168057,168059,168061,168063,168065],{"class":53,"line":340},[51,168056,30794],{"class":278},[51,168058,166899],{"class":65},[51,168060,988],{"class":278},[51,168062,12819],{"class":65},[51,168064,1242],{"class":278},[51,168066,30876],{"class":65},[10,168068,168069,168070,101390,168072,168074],{},"这个写法使用 ",[48,168071,166831],{},[48,168073,166946],{}," 接收原函数的所有参数。",[486,168076,168078],{"id":168077},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[10,168080,123663],{},[19,168082,168083,168086,168089],{},[22,168084,168085],{},"给定一组学生数据。",[22,168087,168088],{},"封装函数，根据传入规则筛选学生。",[22,168090,168091],{},"筛选及格、优秀、未成年学生。",[10,168093,10419],{},[41,168095,168097],{"className":170,"code":168096,"language":172,"meta":46,"style":46},"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",[48,168098,168099,168107,168135,168163,168191,168195,168199,168203,168213,168221,168231,168238,168243,168249,168253,168257,168281,168304,168327,168331,168338,168345],{"__ignoreMap":46},[51,168100,168101,168103,168105],{"class":53,"line":54},[51,168102,160015],{"class":65},[51,168104,70],{"class":69},[51,168106,55819],{"class":65},[51,168108,168109,168111,168113,168115,168117,168119,168121,168123,168125,168127,168129,168131,168133],{"class":53,"line":185},[51,168110,148684],{"class":65},[51,168112,63051],{"class":61},[51,168114,51809],{"class":65},[51,168116,150187],{"class":61},[51,168118,12819],{"class":65},[51,168120,69496],{"class":61},[51,168122,51809],{"class":65},[51,168124,1192],{"class":278},[51,168126,12819],{"class":65},[51,168128,151771],{"class":61},[51,168130,51809],{"class":65},[51,168132,1531],{"class":278},[51,168134,5315],{"class":65},[51,168136,168137,168139,168141,168143,168145,168147,168149,168151,168153,168155,168157,168159,168161],{"class":53,"line":202},[51,168138,148684],{"class":65},[51,168140,63051],{"class":61},[51,168142,51809],{"class":65},[51,168144,151235],{"class":61},[51,168146,12819],{"class":65},[51,168148,69496],{"class":61},[51,168150,51809],{"class":65},[51,168152,1167],{"class":278},[51,168154,12819],{"class":65},[51,168156,151771],{"class":61},[51,168158,51809],{"class":65},[51,168160,1353],{"class":278},[51,168162,5315],{"class":65},[51,168164,168165,168167,168169,168171,168173,168175,168177,168179,168181,168183,168185,168187,168189],{"class":53,"line":209},[51,168166,148684],{"class":65},[51,168168,63051],{"class":61},[51,168170,51809],{"class":65},[51,168172,160030],{"class":61},[51,168174,12819],{"class":65},[51,168176,69496],{"class":61},[51,168178,51809],{"class":65},[51,168180,1217],{"class":278},[51,168182,12819],{"class":65},[51,168184,151771],{"class":61},[51,168186,51809],{"class":65},[51,168188,1424],{"class":278},[51,168190,5315],{"class":65},[51,168192,168193],{"class":53,"line":223},[51,168194,33621],{"class":65},[51,168196,168197],{"class":53,"line":237},[51,168198,206],{"emptyLinePlaceholder":205},[51,168200,168201],{"class":53,"line":242},[51,168202,206],{"emptyLinePlaceholder":205},[51,168204,168205,168207,168210],{"class":53,"line":257},[51,168206,348],{"class":69},[51,168208,168209],{"class":57}," filter_students",[51,168211,168212],{"class":65},"(students, condition):\n",[51,168214,168215,168217,168219],{"class":53,"line":262},[51,168216,161522],{"class":65},[51,168218,70],{"class":69},[51,168220,52210],{"class":65},[51,168222,168223,168225,168227,168229],{"class":53,"line":285},[51,168224,3588],{"class":69},[51,168226,152436],{"class":65},[51,168228,26425],{"class":69},[51,168230,152441],{"class":65},[51,168232,168233,168235],{"class":53,"line":296},[51,168234,369],{"class":69},[51,168236,168237],{"class":65}," condition(student):\n",[51,168239,168240],{"class":53,"line":307},[51,168241,168242],{"class":65},"            result.append(student)\n",[51,168244,168245,168247],{"class":53,"line":324},[51,168246,4476],{"class":69},[51,168248,168004],{"class":65},[51,168250,168251],{"class":53,"line":329},[51,168252,206],{"emptyLinePlaceholder":205},[51,168254,168255],{"class":53,"line":334},[51,168256,206],{"emptyLinePlaceholder":205},[51,168258,168259,168261,168263,168266,168268,168271,168273,168275,168277,168279],{"class":53,"line":340},[51,168260,166000],{"class":65},[51,168262,70],{"class":69},[51,168264,168265],{"class":65}," filter_students(students, ",[51,168267,167185],{"class":69},[51,168269,168270],{"class":65}," s: s[",[51,168272,151771],{"class":61},[51,168274,194],{"class":65},[51,168276,2108],{"class":69},[51,168278,158136],{"class":278},[51,168280,282],{"class":65},[51,168282,168283,168286,168288,168290,168292,168294,168296,168298,168300,168302],{"class":53,"line":345},[51,168284,168285],{"class":65},"excellent ",[51,168287,70],{"class":69},[51,168289,168265],{"class":65},[51,168291,167185],{"class":69},[51,168293,168270],{"class":65},[51,168295,151771],{"class":61},[51,168297,194],{"class":65},[51,168299,2108],{"class":69},[51,168301,158087],{"class":278},[51,168303,282],{"class":65},[51,168305,168306,168309,168311,168313,168315,168317,168319,168321,168323,168325],{"class":53,"line":357},[51,168307,168308],{"class":65},"under_age ",[51,168310,70],{"class":69},[51,168312,168265],{"class":65},[51,168314,167185],{"class":69},[51,168316,168270],{"class":65},[51,168318,69496],{"class":61},[51,168320,194],{"class":65},[51,168322,1452],{"class":69},[51,168324,156584],{"class":278},[51,168326,282],{"class":65},[51,168328,168329],{"class":53,"line":366},[51,168330,206],{"emptyLinePlaceholder":205},[51,168332,168333,168335],{"class":53,"line":383},[51,168334,30794],{"class":278},[51,168336,168337],{"class":65},"(passed)\n",[51,168339,168340,168342],{"class":53,"line":392},[51,168341,30794],{"class":278},[51,168343,168344],{"class":65},"(excellent)\n",[51,168346,168347,168349],{"class":53,"line":403},[51,168348,30794],{"class":278},[51,168350,168351],{"class":65},"(under_age)\n",[486,168353,168355],{"id":168354},"_715-易错点","7.15 易错点",[19,168357,168358,168361,168369,168374,168385],{},[22,168359,168360],{},"默认参数不要写可变对象。",[22,168362,168363,168365,168366,168368],{},[48,168364,166831],{}," 是元组，",[48,168367,166946],{}," 是字典。",[22,168370,168371,168373],{},[48,168372,167185],{}," 只适合简单表达式。",[22,168375,168376,101390,168378,168380,168381,168384],{},[48,168377,74416],{},[48,168379,80423],{}," 的结果是迭代器，常用 ",[48,168382,168383],{},"list()"," 转换查看。",[22,168386,168387],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[486,168389,168391],{"id":168390},"_716-本章练习","7.16 本章练习",[19,168393,168394,168401,168407,168412,168417],{},[22,168395,168396,168397,168400],{},"写函数 ",[48,168398,168399],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[22,168402,168396,168403,168406],{},[48,168404,168405],{},"print_user(**kwargs)","，输出用户所有字段。",[22,168408,104738,168409,168411],{},[48,168410,167185],{}," 对学生列表按年龄排序。",[22,168413,104738,168414,168416],{},[48,168415,80423],{}," 找出成绩不及格的学生。",[22,168418,168419],{},"写一个装饰器，统计函数执行前后的提示信息。",[464,168421,168422],{},"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":46,"searchDepth":185,"depth":185,"links":168424},[168425,168426,168427,168428,168429,168430,168434,168435,168436,168437,168442,168443,168444,168445,168446,168447],{"id":166283,"depth":185,"text":166284},{"id":166397,"depth":185,"text":166398},{"id":166486,"depth":185,"text":166487},{"id":166548,"depth":185,"text":166549},{"id":166694,"depth":185,"text":166695},{"id":166821,"depth":185,"text":166822,"children":168431},[168432,168433],{"id":166825,"depth":202,"text":166826},{"id":166940,"depth":202,"text":166941},{"id":167021,"depth":185,"text":167022},{"id":167179,"depth":185,"text":167180},{"id":167347,"depth":185,"text":167348},{"id":167429,"depth":185,"text":167430,"children":168438},[168439,168440,168441],{"id":167433,"depth":202,"text":167434},{"id":167504,"depth":202,"text":167505},{"id":167581,"depth":202,"text":167582},{"id":167706,"depth":185,"text":167707},{"id":167796,"depth":185,"text":167797},{"id":167927,"depth":185,"text":167928},{"id":168077,"depth":185,"text":168078},{"id":168354,"depth":185,"text":168355},{"id":168390,"depth":185,"text":168391},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166275,"description":23760},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168454,"title":168455,"body":168456,"description":23760,"extension":469,"meta":170975,"navigation":205,"path":170976,"seo":170977,"stem":170978,"__hash__":170979},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168457,"toc":170950},[168458,168461,168465,168468,168471,168502,168506,168510,168513,168540,168544,168547,168598,168601,168616,168619,168654,168658,168660,168684,168687,168747,168751,168755,168758,168815,168818,168838,168842,168845,168908,168912,168915,168971,168978,169002,169006,169009,169072,169076,169081,169132,169135,169139,169144,169211,169214,169296,169300,169305,169356,169359,169363,169366,169369,169377,169380,169426,169429,169475,169479,169485,169529,169532,169578,169581,169621,169624,169685,169689,169692,169782,169785,169927,169930,169997,170001,170004,170007,170148,170151,170229,170232,170408,170412,170414,170425,170427,170626,170630,170874,170878,170912,170916,170947],[14,168459,168455],{"id":168460},"_8-文件操作",[486,168462,168464],{"id":168463},"_81-文件操作的意义","8.1 文件操作的意义",[10,168466,168467],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[10,168469,168470],{},"常见文件类型：",[19,168472,168473,168479,168485,168491,168497],{},[22,168474,168475,168478],{},[48,168476,168477],{},".txt","：普通文本。",[22,168480,168481,168484],{},[48,168482,168483],{},".csv","：表格文本。",[22,168486,168487,168490],{},[48,168488,168489],{},".json","：结构化数据。",[22,168492,168493,168496],{},[48,168494,168495],{},".log","：日志文件。",[22,168498,168499,168501],{},[48,168500,146651],{},"：Python 源代码。",[486,168503,168505],{"id":168504},"_82-路径","8.2 路径",[513,168507,168509],{"id":168508},"_821-相对路径","8.2.1 相对路径",[10,168511,168512],{},"相对当前运行目录：",[41,168514,168516],{"className":170,"code":168515,"language":172,"meta":46,"style":46},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[48,168517,168518],{"__ignoreMap":46},[51,168519,168520,168522,168524,168526,168528,168530,168532,168534,168536,168538],{"class":53,"line":54},[51,168521,87287],{"class":278},[51,168523,546],{"class":65},[51,168525,147095],{"class":61},[51,168527,12819],{"class":65},[51,168529,147100],{"class":61},[51,168531,12819],{"class":65},[51,168533,147105],{"class":248},[51,168535,70],{"class":69},[51,168537,147110],{"class":61},[51,168539,282],{"class":65},[513,168541,168543],{"id":168542},"_822-绝对路径","8.2.2 绝对路径",[10,168545,168546],{},"从根目录或盘符开始：",[41,168548,168550],{"className":170,"code":168549,"language":172,"meta":46,"style":46},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[48,168551,168552,168575],{"__ignoreMap":46},[51,168553,168554,168556,168558,168561,168563,168565,168567,168569,168571,168573],{"class":53,"line":54},[51,168555,87287],{"class":278},[51,168557,546],{"class":65},[51,168559,168560],{"class":61},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[51,168562,12819],{"class":65},[51,168564,147100],{"class":61},[51,168566,12819],{"class":65},[51,168568,147105],{"class":248},[51,168570,70],{"class":69},[51,168572,147110],{"class":61},[51,168574,282],{"class":65},[51,168576,168577,168579,168581,168584,168586,168588,168590,168592,168594,168596],{"class":53,"line":185},[51,168578,87287],{"class":278},[51,168580,546],{"class":65},[51,168582,168583],{"class":61},"\"D:\u002Fdata\u002Fdata.txt\"",[51,168585,12819],{"class":65},[51,168587,147100],{"class":61},[51,168589,12819],{"class":65},[51,168591,147105],{"class":248},[51,168593,70],{"class":69},[51,168595,147110],{"class":61},[51,168597,282],{"class":65},[10,168599,168600],{},"Windows 路径建议写成：",[41,168602,168604],{"className":170,"code":168603,"language":172,"meta":46,"style":46},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[48,168605,168606],{"__ignoreMap":46},[51,168607,168608,168611,168613],{"class":53,"line":54},[51,168609,168610],{"class":65},"path ",[51,168612,70],{"class":69},[51,168614,168615],{"class":61}," \"D:\u002Fdata\u002Fdata.txt\"\n",[10,168617,168618],{},"或原始字符串：",[41,168620,168622],{"className":170,"code":168621,"language":172,"meta":46,"style":46},"path = r\"D:\\data\\data.txt\"\n",[48,168623,168624],{"__ignoreMap":46},[51,168625,168626,168628,168630,168632,168634,168637,168640,168643,168645,168647,168649,168652],{"class":53,"line":54},[51,168627,168610],{"class":65},[51,168629,70],{"class":69},[51,168631,17504],{"class":69},[51,168633,793],{"class":61},[51,168635,168636],{"class":48349},"D:",[51,168638,168639],{"class":278},"\\d",[51,168641,168642],{"class":48349},"ata",[51,168644,168639],{"class":278},[51,168646,168642],{"class":48349},[51,168648,1100],{"class":278},[51,168650,168651],{"class":48349},"txt",[51,168653,25515],{"class":61},[486,168655,168657],{"id":168656},"_83-open函数","8.3 open函数",[10,168659,5566],{},[41,168661,168663],{"className":170,"code":168662,"language":172,"meta":46,"style":46},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[48,168664,168665],{"__ignoreMap":46},[51,168666,168667,168669,168671,168673,168676,168678,168680,168682],{"class":53,"line":54},[51,168668,313],{"class":248},[51,168670,13948],{"class":69},[51,168672,147090],{"class":278},[51,168674,168675],{"class":65},"(文件路径, 打开模式, ",[51,168677,147105],{"class":248},[51,168679,70],{"class":69},[51,168681,147110],{"class":61},[51,168683,282],{"class":65},[10,168685,168686],{},"常见模式：",[679,168688,168689,168698],{},[682,168690,168691],{},[685,168692,168693,168696],{},[688,168694,168695],{},"模式",[688,168697,26251],{},[726,168699,168700,168709,168718,168727,168737],{},[685,168701,168702,168706],{},[731,168703,168704],{},[48,168705,1212],{},[731,168707,168708],{},"只读，文件不存在会报错",[685,168710,168711,168715],{},[731,168712,168713],{},[48,168714,1337],{},[731,168716,168717],{},"只写，文件不存在会创建，存在会清空",[685,168719,168720,168724],{},[731,168721,168722],{},[48,168723,780],{},[731,168725,168726],{},"追加，文件不存在会创建",[685,168728,168729,168734],{},[731,168730,168731],{},[48,168732,168733],{},"rb",[731,168735,168736],{},"二进制只读",[685,168738,168739,168744],{},[731,168740,168741],{},[48,168742,168743],{},"wb",[731,168745,168746],{},"二进制只写",[486,168748,168750],{"id":168749},"_84-读取文件","8.4 读取文件",[513,168752,168754],{"id":168753},"_841-read","8.4.1 read",[10,168756,168757],{},"一次读取全部内容：",[41,168759,168761],{"className":170,"code":168760,"language":172,"meta":46,"style":46},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[48,168762,168763,168789,168801,168808],{"__ignoreMap":46},[51,168764,168765,168767,168769,168771,168773,168775,168777,168779,168781,168783,168785,168787],{"class":53,"line":54},[51,168766,313],{"class":248},[51,168768,13948],{"class":69},[51,168770,147090],{"class":278},[51,168772,546],{"class":65},[51,168774,147095],{"class":61},[51,168776,12819],{"class":65},[51,168778,147100],{"class":61},[51,168780,12819],{"class":65},[51,168782,147105],{"class":248},[51,168784,70],{"class":69},[51,168786,147110],{"class":61},[51,168788,282],{"class":65},[51,168790,168791,168794,168796,168798],{"class":53,"line":185},[51,168792,168793],{"class":65},"content ",[51,168795,70],{"class":69},[51,168797,148452],{"class":248},[51,168799,168800],{"class":65},".read()\n",[51,168802,168803,168805],{"class":53,"line":202},[51,168804,30794],{"class":278},[51,168806,168807],{"class":65},"(content)\n",[51,168809,168810,168812],{"class":53,"line":209},[51,168811,313],{"class":248},[51,168813,168814],{"class":65},".close()\n",[10,168816,168817],{},"可以指定读取字符数：",[41,168819,168821],{"className":170,"code":168820,"language":172,"meta":46,"style":46},"content = file.read(10)\n",[48,168822,168823],{"__ignoreMap":46},[51,168824,168825,168827,168829,168831,168834,168836],{"class":53,"line":54},[51,168826,168793],{"class":65},[51,168828,70],{"class":69},[51,168830,148452],{"class":248},[51,168832,168833],{"class":65},".read(",[51,168835,988],{"class":278},[51,168837,282],{"class":65},[513,168839,168841],{"id":168840},"_842-readline","8.4.2 readline",[10,168843,168844],{},"一次读取一行：",[41,168846,168848],{"className":170,"code":168847,"language":172,"meta":46,"style":46},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[48,168849,168850,168876,168880,168891,168898,168902],{"__ignoreMap":46},[51,168851,168852,168854,168856,168858,168860,168862,168864,168866,168868,168870,168872,168874],{"class":53,"line":54},[51,168853,313],{"class":248},[51,168855,13948],{"class":69},[51,168857,147090],{"class":278},[51,168859,546],{"class":65},[51,168861,147095],{"class":61},[51,168863,12819],{"class":65},[51,168865,147100],{"class":61},[51,168867,12819],{"class":65},[51,168869,147105],{"class":248},[51,168871,70],{"class":69},[51,168873,147110],{"class":61},[51,168875,282],{"class":65},[51,168877,168878],{"class":53,"line":185},[51,168879,206],{"emptyLinePlaceholder":205},[51,168881,168882,168884,168886,168888],{"class":53,"line":202},[51,168883,147551],{"class":65},[51,168885,70],{"class":69},[51,168887,148452],{"class":248},[51,168889,168890],{"class":65},".readline()\n",[51,168892,168893,168895],{"class":53,"line":209},[51,168894,30794],{"class":278},[51,168896,168897],{"class":65},"(line)\n",[51,168899,168900],{"class":53,"line":223},[51,168901,206],{"emptyLinePlaceholder":205},[51,168903,168904,168906],{"class":53,"line":237},[51,168905,313],{"class":248},[51,168907,168814],{"class":65},[513,168909,168911],{"id":168910},"_843-readlines","8.4.3 readlines",[10,168913,168914],{},"读取所有行，返回列表：",[41,168916,168918],{"className":170,"code":168917,"language":172,"meta":46,"style":46},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[48,168919,168920,168946,168958,168965],{"__ignoreMap":46},[51,168921,168922,168924,168926,168928,168930,168932,168934,168936,168938,168940,168942,168944],{"class":53,"line":54},[51,168923,313],{"class":248},[51,168925,13948],{"class":69},[51,168927,147090],{"class":278},[51,168929,546],{"class":65},[51,168931,147095],{"class":61},[51,168933,12819],{"class":65},[51,168935,147100],{"class":61},[51,168937,12819],{"class":65},[51,168939,147105],{"class":248},[51,168941,70],{"class":69},[51,168943,147110],{"class":61},[51,168945,282],{"class":65},[51,168947,168948,168951,168953,168955],{"class":53,"line":185},[51,168949,168950],{"class":65},"lines ",[51,168952,70],{"class":69},[51,168954,148452],{"class":248},[51,168956,168957],{"class":65},".readlines()\n",[51,168959,168960,168962],{"class":53,"line":202},[51,168961,30794],{"class":278},[51,168963,168964],{"class":65},"(lines)\n",[51,168966,168967,168969],{"class":53,"line":209},[51,168968,313],{"class":248},[51,168970,168814],{"class":65},[10,168972,168973,168974,168977],{},"每一行通常带有换行符，可以用 ",[48,168975,168976],{},"strip()"," 去掉：",[41,168979,168981],{"className":170,"code":168980,"language":172,"meta":46,"style":46},"for line in lines:\n    print(line.strip())\n",[48,168982,168983,168995],{"__ignoreMap":46},[51,168984,168985,168987,168990,168992],{"class":53,"line":54},[51,168986,3412],{"class":69},[51,168988,168989],{"class":65}," line ",[51,168991,26425],{"class":69},[51,168993,168994],{"class":65}," lines:\n",[51,168996,168997,168999],{"class":53,"line":185},[51,168998,31677],{"class":278},[51,169000,169001],{"class":65},"(line.strip())\n",[513,169003,169005],{"id":169004},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[10,169007,169008],{},"推荐读取大文件时使用：",[41,169010,169012],{"className":170,"code":169011,"language":172,"meta":46,"style":46},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[48,169013,169014,169040,169044,169056,169062,169066],{"__ignoreMap":46},[51,169015,169016,169018,169020,169022,169024,169026,169028,169030,169032,169034,169036,169038],{"class":53,"line":54},[51,169017,313],{"class":248},[51,169019,13948],{"class":69},[51,169021,147090],{"class":278},[51,169023,546],{"class":65},[51,169025,147095],{"class":61},[51,169027,12819],{"class":65},[51,169029,147100],{"class":61},[51,169031,12819],{"class":65},[51,169033,147105],{"class":248},[51,169035,70],{"class":69},[51,169037,147110],{"class":61},[51,169039,282],{"class":65},[51,169041,169042],{"class":53,"line":185},[51,169043,206],{"emptyLinePlaceholder":205},[51,169045,169046,169048,169050,169052,169054],{"class":53,"line":202},[51,169047,3412],{"class":69},[51,169049,168989],{"class":65},[51,169051,26425],{"class":69},[51,169053,148452],{"class":248},[51,169055,363],{"class":65},[51,169057,169058,169060],{"class":53,"line":209},[51,169059,31677],{"class":278},[51,169061,169001],{"class":65},[51,169063,169064],{"class":53,"line":223},[51,169065,206],{"emptyLinePlaceholder":205},[51,169067,169068,169070],{"class":53,"line":237},[51,169069,313],{"class":248},[51,169071,168814],{"class":65},[486,169073,169075],{"id":169074},"_85-with语句","8.5 with语句",[10,169077,169078,169080],{},[48,169079,108205],{}," 会自动关闭文件，推荐使用。",[41,169082,169084],{"className":170,"code":169083,"language":172,"meta":46,"style":46},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[48,169085,169086,169116,169126],{"__ignoreMap":46},[51,169087,169088,169090,169092,169094,169096,169098,169100,169102,169104,169106,169108,169110,169112,169114],{"class":53,"line":54},[51,169089,108205],{"class":69},[51,169091,147090],{"class":278},[51,169093,546],{"class":65},[51,169095,147095],{"class":61},[51,169097,12819],{"class":65},[51,169099,147100],{"class":61},[51,169101,12819],{"class":65},[51,169103,147105],{"class":248},[51,169105,70],{"class":69},[51,169107,147110],{"class":61},[51,169109,14098],{"class":65},[51,169111,217],{"class":69},[51,169113,148452],{"class":248},[51,169115,363],{"class":65},[51,169117,169118,169120,169122,169124],{"class":53,"line":185},[51,169119,147122],{"class":65},[51,169121,70],{"class":69},[51,169123,148452],{"class":248},[51,169125,168800],{"class":65},[51,169127,169128,169130],{"class":53,"line":202},[51,169129,31677],{"class":278},[51,169131,168807],{"class":65},[10,169133,169134],{},"等价于打开文件、读取、最后关闭，但更安全。",[486,169136,169138],{"id":169137},"_86-写入文件","8.6 写入文件",[10,169140,169141,169143],{},[48,169142,1337],{}," 模式会清空原文件。",[41,169145,169147],{"className":170,"code":169146,"language":172,"meta":46,"style":46},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[48,169148,169149,169179,169196],{"__ignoreMap":46},[51,169150,169151,169153,169155,169157,169159,169161,169163,169165,169167,169169,169171,169173,169175,169177],{"class":53,"line":54},[51,169152,108205],{"class":69},[51,169154,147090],{"class":278},[51,169156,546],{"class":65},[51,169158,147095],{"class":61},[51,169160,12819],{"class":65},[51,169162,152275],{"class":61},[51,169164,12819],{"class":65},[51,169166,147105],{"class":248},[51,169168,70],{"class":69},[51,169170,147110],{"class":61},[51,169172,14098],{"class":65},[51,169174,217],{"class":69},[51,169176,148452],{"class":248},[51,169178,363],{"class":65},[51,169180,169181,169184,169187,169190,169192,169194],{"class":53,"line":185},[51,169182,169183],{"class":248},"    file",[51,169185,169186],{"class":65},".write(",[51,169188,169189],{"class":61},"\"hello",[51,169191,156824],{"class":278},[51,169193,793],{"class":61},[51,169195,282],{"class":65},[51,169197,169198,169200,169202,169205,169207,169209],{"class":53,"line":202},[51,169199,169183],{"class":248},[51,169201,169186],{"class":65},[51,169203,169204],{"class":61},"\"python",[51,169206,156824],{"class":278},[51,169208,793],{"class":61},[51,169210,282],{"class":65},[10,169212,169213],{},"写入多行：",[41,169215,169217],{"className":170,"code":169216,"language":172,"meta":46,"style":46},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[48,169218,169219,169254,169258,169289],{"__ignoreMap":46},[51,169220,169221,169223,169225,169227,169230,169232,169234,169236,169239,169241,169243,169245,169248,169250,169252],{"class":53,"line":54},[51,169222,168950],{"class":65},[51,169224,70],{"class":69},[51,169226,52598],{"class":65},[51,169228,169229],{"class":61},"\"小明,18",[51,169231,156824],{"class":278},[51,169233,793],{"class":61},[51,169235,12819],{"class":65},[51,169237,169238],{"class":61},"\"小红,17",[51,169240,156824],{"class":278},[51,169242,793],{"class":61},[51,169244,12819],{"class":65},[51,169246,169247],{"class":61},"\"小刚,19",[51,169249,156824],{"class":278},[51,169251,793],{"class":61},[51,169253,33621],{"class":65},[51,169255,169256],{"class":53,"line":185},[51,169257,206],{"emptyLinePlaceholder":205},[51,169259,169260,169262,169264,169266,169269,169271,169273,169275,169277,169279,169281,169283,169285,169287],{"class":53,"line":202},[51,169261,108205],{"class":69},[51,169263,147090],{"class":278},[51,169265,546],{"class":65},[51,169267,169268],{"class":61},"\"students.txt\"",[51,169270,12819],{"class":65},[51,169272,152275],{"class":61},[51,169274,12819],{"class":65},[51,169276,147105],{"class":248},[51,169278,70],{"class":69},[51,169280,147110],{"class":61},[51,169282,14098],{"class":65},[51,169284,217],{"class":69},[51,169286,148452],{"class":248},[51,169288,363],{"class":65},[51,169290,169291,169293],{"class":53,"line":209},[51,169292,169183],{"class":248},[51,169294,169295],{"class":65},".writelines(lines)\n",[486,169297,169299],{"id":169298},"_87-追加文件","8.7 追加文件",[10,169301,169302,169304],{},[48,169303,780],{}," 模式不会清空原内容，而是在末尾追加。",[41,169306,169308],{"className":170,"code":169307,"language":172,"meta":46,"style":46},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[48,169309,169310,169341],{"__ignoreMap":46},[51,169311,169312,169314,169316,169318,169321,169323,169325,169327,169329,169331,169333,169335,169337,169339],{"class":53,"line":54},[51,169313,108205],{"class":69},[51,169315,147090],{"class":278},[51,169317,546],{"class":65},[51,169319,169320],{"class":61},"\"log.txt\"",[51,169322,12819],{"class":65},[51,169324,165624],{"class":61},[51,169326,12819],{"class":65},[51,169328,147105],{"class":248},[51,169330,70],{"class":69},[51,169332,147110],{"class":61},[51,169334,14098],{"class":65},[51,169336,217],{"class":69},[51,169338,148452],{"class":248},[51,169340,363],{"class":65},[51,169342,169343,169345,169347,169350,169352,169354],{"class":53,"line":185},[51,169344,169183],{"class":248},[51,169346,169186],{"class":65},[51,169348,169349],{"class":61},"\"程序启动",[51,169351,156824],{"class":278},[51,169353,793],{"class":61},[51,169355,282],{"class":65},[10,169357,169358],{},"日志类文件常用追加模式。",[486,169360,169362],{"id":169361},"_88-文件编码","8.8 文件编码",[10,169364,169365],{},"编码决定文字如何保存为字节。",[10,169367,169368],{},"常见编码：",[19,169370,169371,169374],{},[22,169372,169373],{},"UTF-8：推荐。",[22,169375,169376],{},"GBK：部分 Windows 中文文件常见。",[10,169378,169379],{},"读取文件乱码时，可以尝试：",[41,169381,169383],{"className":170,"code":169382,"language":172,"meta":46,"style":46},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[48,169384,169385,169416],{"__ignoreMap":46},[51,169386,169387,169389,169391,169393,169395,169397,169399,169401,169403,169405,169408,169410,169412,169414],{"class":53,"line":54},[51,169388,108205],{"class":69},[51,169390,147090],{"class":278},[51,169392,546],{"class":65},[51,169394,147095],{"class":61},[51,169396,12819],{"class":65},[51,169398,147100],{"class":61},[51,169400,12819],{"class":65},[51,169402,147105],{"class":248},[51,169404,70],{"class":69},[51,169406,169407],{"class":61},"\"gbk\"",[51,169409,14098],{"class":65},[51,169411,217],{"class":69},[51,169413,148452],{"class":248},[51,169415,363],{"class":65},[51,169417,169418,169420,169422,169424],{"class":53,"line":185},[51,169419,147122],{"class":65},[51,169421,70],{"class":69},[51,169423,148452],{"class":248},[51,169425,168800],{"class":65},[10,169427,169428],{},"写文件时建议统一 UTF-8：",[41,169430,169432],{"className":170,"code":169431,"language":172,"meta":46,"style":46},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[48,169433,169434,169464],{"__ignoreMap":46},[51,169435,169436,169438,169440,169442,169444,169446,169448,169450,169452,169454,169456,169458,169460,169462],{"class":53,"line":54},[51,169437,108205],{"class":69},[51,169439,147090],{"class":278},[51,169441,546],{"class":65},[51,169443,147095],{"class":61},[51,169445,12819],{"class":65},[51,169447,152275],{"class":61},[51,169449,12819],{"class":65},[51,169451,147105],{"class":248},[51,169453,70],{"class":69},[51,169455,147110],{"class":61},[51,169457,14098],{"class":65},[51,169459,217],{"class":69},[51,169461,148452],{"class":248},[51,169463,363],{"class":65},[51,169465,169466,169468,169470,169473],{"class":53,"line":185},[51,169467,169183],{"class":248},[51,169469,169186],{"class":65},[51,169471,169472],{"class":61},"\"中文内容\"",[51,169474,282],{"class":65},[486,169476,169478],{"id":169477},"_89-pathlib","8.9 pathlib",[10,169480,169481,169484],{},[48,169482,169483],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[41,169486,169488],{"className":170,"code":169487,"language":172,"meta":46,"style":46},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[48,169489,169490,169500,169504,169522],{"__ignoreMap":46},[51,169491,169492,169494,169496,169498],{"class":53,"line":54},[51,169493,226],{"class":69},[51,169495,108683],{"class":65},[51,169497,179],{"class":69},[51,169499,108688],{"class":65},[51,169501,169502],{"class":53,"line":185},[51,169503,206],{"emptyLinePlaceholder":205},[51,169505,169506,169508,169510,169512,169515,169517,169519],{"class":53,"line":202},[51,169507,168610],{"class":65},[51,169509,70],{"class":69},[51,169511,108917],{"class":65},[51,169513,169514],{"class":61},"\"data\"",[51,169516,14098],{"class":65},[51,169518,1126],{"class":69},[51,169520,169521],{"class":61}," \"students.txt\"\n",[51,169523,169524,169526],{"class":53,"line":209},[51,169525,30794],{"class":278},[51,169527,169528],{"class":65},"(path)\n",[10,169530,169531],{},"创建目录：",[41,169533,169535],{"className":170,"code":169534,"language":172,"meta":46,"style":46},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[48,169536,169537,169547,169551,169564],{"__ignoreMap":46},[51,169538,169539,169541,169543,169545],{"class":53,"line":54},[51,169540,226],{"class":69},[51,169542,108683],{"class":65},[51,169544,179],{"class":69},[51,169546,108688],{"class":65},[51,169548,169549],{"class":53,"line":185},[51,169550,206],{"emptyLinePlaceholder":205},[51,169552,169553,169556,169558,169560,169562],{"class":53,"line":202},[51,169554,169555],{"class":65},"data_dir ",[51,169557,70],{"class":69},[51,169559,108917],{"class":65},[51,169561,169514],{"class":61},[51,169563,282],{"class":65},[51,169565,169566,169569,169572,169574,169576],{"class":53,"line":209},[51,169567,169568],{"class":65},"data_dir.mkdir(",[51,169570,169571],{"class":248},"exist_ok",[51,169573,70],{"class":69},[51,169575,279],{"class":278},[51,169577,282],{"class":65},[10,169579,169580],{},"判断文件是否存在：",[41,169582,169584],{"className":170,"code":169583,"language":172,"meta":46,"style":46},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[48,169585,169586,169599,169603,169610],{"__ignoreMap":46},[51,169587,169588,169590,169592,169594,169597],{"class":53,"line":54},[51,169589,168610],{"class":65},[51,169591,70],{"class":69},[51,169593,108917],{"class":65},[51,169595,169596],{"class":61},"\"data\u002Fstudents.txt\"",[51,169598,282],{"class":65},[51,169600,169601],{"class":53,"line":185},[51,169602,206],{"emptyLinePlaceholder":205},[51,169604,169605,169607],{"class":53,"line":202},[51,169606,1940],{"class":69},[51,169608,169609],{"class":65}," path.exists():\n",[51,169611,169612,169614,169616,169619],{"class":53,"line":209},[51,169613,31677],{"class":278},[51,169615,546],{"class":65},[51,169617,169618],{"class":61},"\"文件存在\"",[51,169620,282],{"class":65},[10,169622,169623],{},"读写文本：",[41,169625,169627],{"className":170,"code":169626,"language":172,"meta":46,"style":46},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[48,169628,169629,169641,169645,169662,169679],{"__ignoreMap":46},[51,169630,169631,169633,169635,169637,169639],{"class":53,"line":54},[51,169632,168610],{"class":65},[51,169634,70],{"class":69},[51,169636,108917],{"class":65},[51,169638,147095],{"class":61},[51,169640,282],{"class":65},[51,169642,169643],{"class":53,"line":185},[51,169644,206],{"emptyLinePlaceholder":205},[51,169646,169647,169650,169652,169654,169656,169658,169660],{"class":53,"line":202},[51,169648,169649],{"class":65},"path.write_text(",[51,169651,146175],{"class":61},[51,169653,12819],{"class":65},[51,169655,147105],{"class":248},[51,169657,70],{"class":69},[51,169659,147110],{"class":61},[51,169661,282],{"class":65},[51,169663,169664,169666,169668,169671,169673,169675,169677],{"class":53,"line":209},[51,169665,168793],{"class":65},[51,169667,70],{"class":69},[51,169669,169670],{"class":65}," path.read_text(",[51,169672,147105],{"class":248},[51,169674,70],{"class":69},[51,169676,147110],{"class":61},[51,169678,282],{"class":65},[51,169680,169681,169683],{"class":53,"line":223},[51,169682,30794],{"class":278},[51,169684,168807],{"class":65},[486,169686,169688],{"id":169687},"_810-json文件","8.10 JSON文件",[10,169690,169691],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[41,169693,169695],{"className":170,"code":169694,"language":172,"meta":46,"style":46},"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",[48,169696,169697,169703,169707,169715,169725,169735,169743,169747,169751,169776],{"__ignoreMap":46},[51,169698,169699,169701],{"class":53,"line":54},[51,169700,179],{"class":69},[51,169702,147390],{"class":65},[51,169704,169705],{"class":53,"line":185},[51,169706,206],{"emptyLinePlaceholder":205},[51,169708,169709,169711,169713],{"class":53,"line":202},[51,169710,149780],{"class":65},[51,169712,70],{"class":69},[51,169714,15956],{"class":65},[51,169716,169717,169719,169721,169723],{"class":53,"line":209},[51,169718,147319],{"class":61},[51,169720,51809],{"class":65},[51,169722,150187],{"class":61},[51,169724,31843],{"class":65},[51,169726,169727,169729,169731,169733],{"class":53,"line":223},[51,169728,164836],{"class":61},[51,169730,51809],{"class":65},[51,169732,1192],{"class":278},[51,169734,31843],{"class":65},[51,169736,169737,169739,169741],{"class":53,"line":237},[51,169738,164847],{"class":61},[51,169740,51809],{"class":65},[51,169742,164852],{"class":278},[51,169744,169745],{"class":53,"line":242},[51,169746,1974],{"class":65},[51,169748,169749],{"class":53,"line":257},[51,169750,206],{"emptyLinePlaceholder":205},[51,169752,169753,169755,169757,169760,169762,169764,169766,169768,169770,169772,169774],{"class":53,"line":262},[51,169754,156743],{"class":65},[51,169756,70],{"class":69},[51,169758,169759],{"class":65}," json.dumps(student, ",[51,169761,147436],{"class":248},[51,169763,70],{"class":69},[51,169765,34362],{"class":278},[51,169767,12819],{"class":65},[51,169769,152311],{"class":248},[51,169771,70],{"class":69},[51,169773,620],{"class":278},[51,169775,282],{"class":65},[51,169777,169778,169780],{"class":53,"line":285},[51,169779,30794],{"class":278},[51,169781,164370],{"class":65},[10,169783,169784],{},"写入 JSON 文件：",[41,169786,169788],{"className":170,"code":169787,"language":172,"meta":46,"style":46},"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",[48,169789,169790,169796,169800,169808,169836,169864,169868,169872,169902],{"__ignoreMap":46},[51,169791,169792,169794],{"class":53,"line":54},[51,169793,179],{"class":69},[51,169795,147390],{"class":65},[51,169797,169798],{"class":53,"line":185},[51,169799,206],{"emptyLinePlaceholder":205},[51,169801,169802,169804,169806],{"class":53,"line":202},[51,169803,160015],{"class":65},[51,169805,70],{"class":69},[51,169807,55819],{"class":65},[51,169809,169810,169812,169814,169816,169818,169820,169822,169824,169826,169828,169830,169832,169834],{"class":53,"line":209},[51,169811,148684],{"class":65},[51,169813,63051],{"class":61},[51,169815,51809],{"class":65},[51,169817,150187],{"class":61},[51,169819,12819],{"class":65},[51,169821,69496],{"class":61},[51,169823,51809],{"class":65},[51,169825,1192],{"class":278},[51,169827,12819],{"class":65},[51,169829,151771],{"class":61},[51,169831,51809],{"class":65},[51,169833,1531],{"class":278},[51,169835,5315],{"class":65},[51,169837,169838,169840,169842,169844,169846,169848,169850,169852,169854,169856,169858,169860,169862],{"class":53,"line":223},[51,169839,148684],{"class":65},[51,169841,63051],{"class":61},[51,169843,51809],{"class":65},[51,169845,151235],{"class":61},[51,169847,12819],{"class":65},[51,169849,69496],{"class":61},[51,169851,51809],{"class":65},[51,169853,1167],{"class":278},[51,169855,12819],{"class":65},[51,169857,151771],{"class":61},[51,169859,51809],{"class":65},[51,169861,1353],{"class":278},[51,169863,5315],{"class":65},[51,169865,169866],{"class":53,"line":237},[51,169867,33621],{"class":65},[51,169869,169870],{"class":53,"line":242},[51,169871,206],{"emptyLinePlaceholder":205},[51,169873,169874,169876,169878,169880,169882,169884,169886,169888,169890,169892,169894,169896,169898,169900],{"class":53,"line":257},[51,169875,108205],{"class":69},[51,169877,147090],{"class":278},[51,169879,546],{"class":65},[51,169881,152130],{"class":61},[51,169883,12819],{"class":65},[51,169885,152275],{"class":61},[51,169887,12819],{"class":65},[51,169889,147105],{"class":248},[51,169891,70],{"class":69},[51,169893,147110],{"class":61},[51,169895,14098],{"class":65},[51,169897,217],{"class":69},[51,169899,148452],{"class":248},[51,169901,363],{"class":65},[51,169903,169904,169907,169909,169911,169913,169915,169917,169919,169921,169923,169925],{"class":53,"line":262},[51,169905,169906],{"class":65},"    json.dump(students, ",[51,169908,313],{"class":248},[51,169910,12819],{"class":65},[51,169912,147436],{"class":248},[51,169914,70],{"class":69},[51,169916,34362],{"class":278},[51,169918,12819],{"class":65},[51,169920,152311],{"class":248},[51,169922,70],{"class":69},[51,169924,620],{"class":278},[51,169926,282],{"class":65},[10,169928,169929],{},"读取 JSON 文件：",[41,169931,169933],{"className":170,"code":169932,"language":172,"meta":46,"style":46},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[48,169934,169935,169941,169945,169975,169987,169991],{"__ignoreMap":46},[51,169936,169937,169939],{"class":53,"line":54},[51,169938,179],{"class":69},[51,169940,147390],{"class":65},[51,169942,169943],{"class":53,"line":185},[51,169944,206],{"emptyLinePlaceholder":205},[51,169946,169947,169949,169951,169953,169955,169957,169959,169961,169963,169965,169967,169969,169971,169973],{"class":53,"line":202},[51,169948,108205],{"class":69},[51,169950,147090],{"class":278},[51,169952,546],{"class":65},[51,169954,152130],{"class":61},[51,169956,12819],{"class":65},[51,169958,147100],{"class":61},[51,169960,12819],{"class":65},[51,169962,147105],{"class":248},[51,169964,70],{"class":69},[51,169966,147110],{"class":61},[51,169968,14098],{"class":65},[51,169970,217],{"class":69},[51,169972,148452],{"class":248},[51,169974,363],{"class":65},[51,169976,169977,169979,169981,169983,169985],{"class":53,"line":209},[51,169978,153336],{"class":65},[51,169980,70],{"class":69},[51,169982,148463],{"class":65},[51,169984,313],{"class":248},[51,169986,282],{"class":65},[51,169988,169989],{"class":53,"line":223},[51,169990,206],{"emptyLinePlaceholder":205},[51,169992,169993,169995],{"class":53,"line":237},[51,169994,30794],{"class":278},[51,169996,165294],{"class":65},[486,169998,170000],{"id":169999},"_811-csv文件","8.11 CSV文件",[10,170002,170003],{},"CSV 是逗号分隔值，常用于表格数据。",[10,170005,170006],{},"写入 CSV：",[41,170008,170010],{"className":170,"code":170009,"language":172,"meta":46,"style":46},"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",[48,170011,170012,170019,170023,170031,170049,170065,170081,170085,170089,170129,170143],{"__ignoreMap":46},[51,170013,170014,170016],{"class":53,"line":54},[51,170015,179],{"class":69},[51,170017,170018],{"class":65}," csv\n",[51,170020,170021],{"class":53,"line":185},[51,170022,206],{"emptyLinePlaceholder":205},[51,170024,170025,170027,170029],{"class":53,"line":202},[51,170026,160015],{"class":65},[51,170028,70],{"class":69},[51,170030,55819],{"class":65},[51,170032,170033,170036,170038,170040,170042,170044,170047],{"class":53,"line":209},[51,170034,170035],{"class":65},"    [",[51,170037,73471],{"class":61},[51,170039,12819],{"class":65},[51,170041,73504],{"class":61},[51,170043,12819],{"class":65},[51,170045,170046],{"class":61},"\"成绩\"",[51,170048,88208],{"class":65},[51,170050,170051,170053,170055,170057,170059,170061,170063],{"class":53,"line":223},[51,170052,170035],{"class":65},[51,170054,150187],{"class":61},[51,170056,12819],{"class":65},[51,170058,1192],{"class":278},[51,170060,12819],{"class":65},[51,170062,1531],{"class":278},[51,170064,88208],{"class":65},[51,170066,170067,170069,170071,170073,170075,170077,170079],{"class":53,"line":237},[51,170068,170035],{"class":65},[51,170070,151235],{"class":61},[51,170072,12819],{"class":65},[51,170074,1167],{"class":278},[51,170076,12819],{"class":65},[51,170078,1353],{"class":278},[51,170080,88208],{"class":65},[51,170082,170083],{"class":53,"line":242},[51,170084,33621],{"class":65},[51,170086,170087],{"class":53,"line":257},[51,170088,206],{"emptyLinePlaceholder":205},[51,170090,170091,170093,170095,170097,170100,170102,170104,170106,170108,170110,170112,170114,170117,170119,170121,170123,170125,170127],{"class":53,"line":262},[51,170092,108205],{"class":69},[51,170094,147090],{"class":278},[51,170096,546],{"class":65},[51,170098,170099],{"class":61},"\"students.csv\"",[51,170101,12819],{"class":65},[51,170103,152275],{"class":61},[51,170105,12819],{"class":65},[51,170107,147105],{"class":248},[51,170109,70],{"class":69},[51,170111,147110],{"class":61},[51,170113,12819],{"class":65},[51,170115,170116],{"class":248},"newline",[51,170118,70],{"class":69},[51,170120,8036],{"class":61},[51,170122,14098],{"class":65},[51,170124,217],{"class":69},[51,170126,148452],{"class":248},[51,170128,363],{"class":65},[51,170130,170131,170134,170136,170139,170141],{"class":53,"line":285},[51,170132,170133],{"class":65},"    writer ",[51,170135,70],{"class":69},[51,170137,170138],{"class":65}," csv.writer(",[51,170140,313],{"class":248},[51,170142,282],{"class":65},[51,170144,170145],{"class":53,"line":296},[51,170146,170147],{"class":65},"    writer.writerows(students)\n",[10,170149,170150],{},"读取 CSV：",[41,170152,170154],{"className":170,"code":170153,"language":172,"meta":46,"style":46},"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",[48,170155,170156,170162,170166,170196,170210,170222],{"__ignoreMap":46},[51,170157,170158,170160],{"class":53,"line":54},[51,170159,179],{"class":69},[51,170161,170018],{"class":65},[51,170163,170164],{"class":53,"line":185},[51,170165,206],{"emptyLinePlaceholder":205},[51,170167,170168,170170,170172,170174,170176,170178,170180,170182,170184,170186,170188,170190,170192,170194],{"class":53,"line":202},[51,170169,108205],{"class":69},[51,170171,147090],{"class":278},[51,170173,546],{"class":65},[51,170175,170099],{"class":61},[51,170177,12819],{"class":65},[51,170179,147100],{"class":61},[51,170181,12819],{"class":65},[51,170183,147105],{"class":248},[51,170185,70],{"class":69},[51,170187,147110],{"class":61},[51,170189,14098],{"class":65},[51,170191,217],{"class":69},[51,170193,148452],{"class":248},[51,170195,363],{"class":65},[51,170197,170198,170201,170203,170206,170208],{"class":53,"line":209},[51,170199,170200],{"class":65},"    reader ",[51,170202,70],{"class":69},[51,170204,170205],{"class":65}," csv.reader(",[51,170207,313],{"class":248},[51,170209,282],{"class":65},[51,170211,170212,170214,170217,170219],{"class":53,"line":223},[51,170213,3588],{"class":69},[51,170215,170216],{"class":65}," row ",[51,170218,26425],{"class":69},[51,170220,170221],{"class":65}," reader:\n",[51,170223,170224,170226],{"class":53,"line":237},[51,170225,32826],{"class":278},[51,170227,170228],{"class":65},"(row)\n",[10,170230,170231],{},"使用字典写入：",[41,170233,170235],{"className":170,"code":170234,"language":172,"meta":46,"style":46},"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",[48,170236,170237,170243,170247,170255,170283,170311,170315,170319,170357,170378,170399,170404],{"__ignoreMap":46},[51,170238,170239,170241],{"class":53,"line":54},[51,170240,179],{"class":69},[51,170242,170018],{"class":65},[51,170244,170245],{"class":53,"line":185},[51,170246,206],{"emptyLinePlaceholder":205},[51,170248,170249,170251,170253],{"class":53,"line":202},[51,170250,160015],{"class":65},[51,170252,70],{"class":69},[51,170254,55819],{"class":65},[51,170256,170257,170259,170261,170263,170265,170267,170269,170271,170273,170275,170277,170279,170281],{"class":53,"line":209},[51,170258,148684],{"class":65},[51,170260,63051],{"class":61},[51,170262,51809],{"class":65},[51,170264,150187],{"class":61},[51,170266,12819],{"class":65},[51,170268,69496],{"class":61},[51,170270,51809],{"class":65},[51,170272,1192],{"class":278},[51,170274,12819],{"class":65},[51,170276,151771],{"class":61},[51,170278,51809],{"class":65},[51,170280,1531],{"class":278},[51,170282,5315],{"class":65},[51,170284,170285,170287,170289,170291,170293,170295,170297,170299,170301,170303,170305,170307,170309],{"class":53,"line":223},[51,170286,148684],{"class":65},[51,170288,63051],{"class":61},[51,170290,51809],{"class":65},[51,170292,151235],{"class":61},[51,170294,12819],{"class":65},[51,170296,69496],{"class":61},[51,170298,51809],{"class":65},[51,170300,1167],{"class":278},[51,170302,12819],{"class":65},[51,170304,151771],{"class":61},[51,170306,51809],{"class":65},[51,170308,1353],{"class":278},[51,170310,5315],{"class":65},[51,170312,170313],{"class":53,"line":237},[51,170314,33621],{"class":65},[51,170316,170317],{"class":53,"line":242},[51,170318,206],{"emptyLinePlaceholder":205},[51,170320,170321,170323,170325,170327,170329,170331,170333,170335,170337,170339,170341,170343,170345,170347,170349,170351,170353,170355],{"class":53,"line":257},[51,170322,108205],{"class":69},[51,170324,147090],{"class":278},[51,170326,546],{"class":65},[51,170328,170099],{"class":61},[51,170330,12819],{"class":65},[51,170332,152275],{"class":61},[51,170334,12819],{"class":65},[51,170336,147105],{"class":248},[51,170338,70],{"class":69},[51,170340,147110],{"class":61},[51,170342,12819],{"class":65},[51,170344,170116],{"class":248},[51,170346,70],{"class":69},[51,170348,8036],{"class":61},[51,170350,14098],{"class":65},[51,170352,217],{"class":69},[51,170354,148452],{"class":248},[51,170356,363],{"class":65},[51,170358,170359,170362,170364,170366,170368,170370,170372,170374,170376],{"class":53,"line":262},[51,170360,170361],{"class":65},"    fieldnames ",[51,170363,70],{"class":69},[51,170365,52598],{"class":65},[51,170367,63051],{"class":61},[51,170369,12819],{"class":65},[51,170371,69496],{"class":61},[51,170373,12819],{"class":65},[51,170375,151771],{"class":61},[51,170377,33621],{"class":65},[51,170379,170380,170382,170384,170387,170389,170391,170394,170396],{"class":53,"line":285},[51,170381,170133],{"class":65},[51,170383,70],{"class":69},[51,170385,170386],{"class":65}," csv.DictWriter(",[51,170388,313],{"class":248},[51,170390,12819],{"class":65},[51,170392,170393],{"class":248},"fieldnames",[51,170395,70],{"class":69},[51,170397,170398],{"class":65},"fieldnames)\n",[51,170400,170401],{"class":53,"line":296},[51,170402,170403],{"class":65},"    writer.writeheader()\n",[51,170405,170406],{"class":53,"line":307},[51,170407,170147],{"class":65},[486,170409,170411],{"id":170410},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[10,170413,123663],{},[19,170415,170416,170419,170422],{},[22,170417,170418],{},"读取文本文件。",[22,170420,170421],{},"统计每个单词出现次数。",[22,170423,170424],{},"输出出现次数最多的前 10 个单词。",[10,170426,10419],{},[41,170428,170430],{"className":170,"code":170429,"language":172,"meta":46,"style":46},"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",[48,170431,170432,170442,170446,170459,170475,170479,170489,170498,170502,170514,170534,170543,170547,170565,170569,170599,170603,170619],{"__ignoreMap":46},[51,170433,170434,170436,170438,170440],{"class":53,"line":54},[51,170435,226],{"class":69},[51,170437,108683],{"class":65},[51,170439,179],{"class":69},[51,170441,108688],{"class":65},[51,170443,170444],{"class":53,"line":185},[51,170445,206],{"emptyLinePlaceholder":205},[51,170447,170448,170450,170452,170454,170457],{"class":53,"line":202},[51,170449,168610],{"class":65},[51,170451,70],{"class":69},[51,170453,108917],{"class":65},[51,170455,170456],{"class":61},"\"article.txt\"",[51,170458,282],{"class":65},[51,170460,170461,170463,170465,170467,170469,170471,170473],{"class":53,"line":209},[51,170462,168793],{"class":65},[51,170464,70],{"class":69},[51,170466,169670],{"class":65},[51,170468,147105],{"class":248},[51,170470,70],{"class":69},[51,170472,147110],{"class":61},[51,170474,282],{"class":65},[51,170476,170477],{"class":53,"line":223},[51,170478,206],{"emptyLinePlaceholder":205},[51,170480,170481,170484,170486],{"class":53,"line":237},[51,170482,170483],{"class":65},"words ",[51,170485,70],{"class":69},[51,170487,170488],{"class":65}," content.lower().split()\n",[51,170490,170491,170494,170496],{"class":53,"line":242},[51,170492,170493],{"class":65},"counter ",[51,170495,70],{"class":69},[51,170497,88240],{"class":65},[51,170499,170500],{"class":53,"line":257},[51,170501,206],{"emptyLinePlaceholder":205},[51,170503,170504,170506,170509,170511],{"class":53,"line":262},[51,170505,3412],{"class":69},[51,170507,170508],{"class":65}," word ",[51,170510,26425],{"class":69},[51,170512,170513],{"class":65}," words:\n",[51,170515,170516,170519,170521,170524,170527,170529,170532],{"class":53,"line":285},[51,170517,170518],{"class":65},"    word ",[51,170520,70],{"class":69},[51,170522,170523],{"class":65}," word.strip(",[51,170525,170526],{"class":61},"\".,!?;:",[51,170528,156794],{"class":278},[51,170530,170531],{"class":61},"'()[]\"",[51,170533,282],{"class":65},[51,170535,170536,170538,170540],{"class":53,"line":296},[51,170537,3488],{"class":69},[51,170539,39304],{"class":69},[51,170541,170542],{"class":65}," word:\n",[51,170544,170545],{"class":53,"line":307},[51,170546,148811],{"class":69},[51,170548,170549,170552,170554,170557,170559,170561,170563],{"class":53,"line":324},[51,170550,170551],{"class":65},"    counter[word] ",[51,170553,70],{"class":69},[51,170555,170556],{"class":65}," counter.get(word, ",[51,170558,733],{"class":278},[51,170560,14098],{"class":65},[51,170562,1023],{"class":69},[51,170564,56071],{"class":278},[51,170566,170567],{"class":53,"line":329},[51,170568,206],{"emptyLinePlaceholder":205},[51,170570,170571,170574,170576,170578,170581,170583,170585,170587,170589,170591,170593,170595,170597],{"class":53,"line":334},[51,170572,170573],{"class":65},"items ",[51,170575,70],{"class":69},[51,170577,163903],{"class":278},[51,170579,170580],{"class":65},"(counter.items(), ",[51,170582,154245],{"class":248},[51,170584,154248],{"class":69},[51,170586,154251],{"class":65},[51,170588,759],{"class":278},[51,170590,112573],{"class":65},[51,170592,163827],{"class":248},[51,170594,70],{"class":69},[51,170596,279],{"class":278},[51,170598,282],{"class":65},[51,170600,170601],{"class":53,"line":340},[51,170602,206],{"emptyLinePlaceholder":205},[51,170604,170605,170607,170610,170612,170615,170617],{"class":53,"line":345},[51,170606,3412],{"class":69},[51,170608,170609],{"class":65}," word, count ",[51,170611,26425],{"class":69},[51,170613,170614],{"class":65}," items[:",[51,170616,988],{"class":278},[51,170618,166054],{"class":65},[51,170620,170621,170623],{"class":53,"line":357},[51,170622,31677],{"class":278},[51,170624,170625],{"class":65},"(word, count)\n",[486,170627,170629],{"id":170628},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[41,170631,170633],{"className":170,"code":170632,"language":172,"meta":46,"style":46},"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",[48,170634,170635,170641,170651,170655,170667,170671,170675,170683,170693,170699,170703,170733,170743,170747,170751,170759,170789,170813,170817,170821,170829,170858,170863],{"__ignoreMap":46},[51,170636,170637,170639],{"class":53,"line":54},[51,170638,179],{"class":69},[51,170640,147390],{"class":65},[51,170642,170643,170645,170647,170649],{"class":53,"line":185},[51,170644,226],{"class":69},[51,170646,108683],{"class":65},[51,170648,179],{"class":69},[51,170650,108688],{"class":65},[51,170652,170653],{"class":53,"line":202},[51,170654,206],{"emptyLinePlaceholder":205},[51,170656,170657,170659,170661,170663,170665],{"class":53,"line":209},[51,170658,152123],{"class":278},[51,170660,13948],{"class":69},[51,170662,108917],{"class":65},[51,170664,152130],{"class":61},[51,170666,282],{"class":65},[51,170668,170669],{"class":53,"line":223},[51,170670,206],{"emptyLinePlaceholder":205},[51,170672,170673],{"class":53,"line":237},[51,170674,206],{"emptyLinePlaceholder":205},[51,170676,170677,170679,170681],{"class":53,"line":242},[51,170678,348],{"class":69},[51,170680,152147],{"class":57},[51,170682,32328],{"class":65},[51,170684,170685,170687,170689,170691],{"class":53,"line":257},[51,170686,3488],{"class":69},[51,170688,39304],{"class":69},[51,170690,152158],{"class":278},[51,170692,152161],{"class":65},[51,170694,170695,170697],{"class":53,"line":262},[51,170696,15136],{"class":69},[51,170698,52210],{"class":65},[51,170700,170701],{"class":53,"line":285},[51,170702,206],{"emptyLinePlaceholder":205},[51,170704,170705,170707,170709,170711,170713,170715,170717,170719,170721,170723,170725,170727,170729,170731],{"class":53,"line":296},[51,170706,34553],{"class":69},[51,170708,147090],{"class":278},[51,170710,546],{"class":65},[51,170712,152123],{"class":278},[51,170714,12819],{"class":65},[51,170716,147100],{"class":61},[51,170718,12819],{"class":65},[51,170720,147105],{"class":248},[51,170722,70],{"class":69},[51,170724,147110],{"class":61},[51,170726,14098],{"class":65},[51,170728,217],{"class":69},[51,170730,148452],{"class":248},[51,170732,363],{"class":65},[51,170734,170735,170737,170739,170741],{"class":53,"line":307},[51,170736,15136],{"class":69},[51,170738,148463],{"class":65},[51,170740,313],{"class":248},[51,170742,282],{"class":65},[51,170744,170745],{"class":53,"line":324},[51,170746,206],{"emptyLinePlaceholder":205},[51,170748,170749],{"class":53,"line":329},[51,170750,206],{"emptyLinePlaceholder":205},[51,170752,170753,170755,170757],{"class":53,"line":334},[51,170754,348],{"class":69},[51,170756,152257],{"class":57},[51,170758,152260],{"class":65},[51,170760,170761,170763,170765,170767,170769,170771,170773,170775,170777,170779,170781,170783,170785,170787],{"class":53,"line":340},[51,170762,34553],{"class":69},[51,170764,147090],{"class":278},[51,170766,546],{"class":65},[51,170768,152123],{"class":278},[51,170770,12819],{"class":65},[51,170772,152275],{"class":61},[51,170774,12819],{"class":65},[51,170776,147105],{"class":248},[51,170778,70],{"class":69},[51,170780,147110],{"class":61},[51,170782,14098],{"class":65},[51,170784,217],{"class":69},[51,170786,148452],{"class":248},[51,170788,363],{"class":65},[51,170790,170791,170793,170795,170797,170799,170801,170803,170805,170807,170809,170811],{"class":53,"line":345},[51,170792,152296],{"class":65},[51,170794,313],{"class":248},[51,170796,12819],{"class":65},[51,170798,147436],{"class":248},[51,170800,70],{"class":69},[51,170802,34362],{"class":278},[51,170804,12819],{"class":65},[51,170806,152311],{"class":248},[51,170808,70],{"class":69},[51,170810,620],{"class":278},[51,170812,282],{"class":65},[51,170814,170815],{"class":53,"line":357},[51,170816,206],{"emptyLinePlaceholder":205},[51,170818,170819],{"class":53,"line":366},[51,170820,206],{"emptyLinePlaceholder":205},[51,170822,170823,170825,170827],{"class":53,"line":383},[51,170824,160015],{"class":65},[51,170826,70],{"class":69},[51,170828,153341],{"class":65},[51,170830,170831,170834,170836,170838,170840,170842,170844,170846,170848,170850,170852,170854,170856],{"class":53,"line":392},[51,170832,170833],{"class":65},"students.append({",[51,170835,63051],{"class":61},[51,170837,51809],{"class":65},[51,170839,150187],{"class":61},[51,170841,12819],{"class":65},[51,170843,69496],{"class":61},[51,170845,51809],{"class":65},[51,170847,1192],{"class":278},[51,170849,12819],{"class":65},[51,170851,151771],{"class":61},[51,170853,51809],{"class":65},[51,170855,1531],{"class":278},[51,170857,165451],{"class":65},[51,170859,170860],{"class":53,"line":403},[51,170861,170862],{"class":65},"save_students(students)\n",[51,170864,170865,170867,170869,170872],{"class":53,"line":409},[51,170866,30794],{"class":278},[51,170868,546],{"class":65},[51,170870,170871],{"class":61},"\"保存成功\"",[51,170873,282],{"class":65},[486,170875,170877],{"id":170876},"_814-易错点","8.14 易错点",[19,170879,170880,170884,170890,170895,170902,170909],{},[22,170881,170882,169143],{},[48,170883,1337],{},[22,170885,170886,170887,28767],{},"读写中文要指定 ",[48,170888,170889],{},"encoding=\"utf-8\"",[22,170891,170892,170893,28767],{},"打开文件后要关闭，推荐使用 ",[48,170894,108205],{},[22,170896,170897,170898,170901],{},"读取大文件不要直接 ",[48,170899,170900],{},"read()"," 全部内容。",[22,170903,170904,170905,170908],{},"Windows 写 CSV 时建议加 ",[48,170906,170907],{},"newline=\"\"","，避免空行。",[22,170910,170911],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[486,170913,170915],{"id":170914},"_815-本章练习","8.15 本章练习",[19,170917,170918,170925,170930,170933,170936],{},[22,170919,170920,170921,170924],{},"写入一个 ",[48,170922,170923],{},"students.txt","，每行保存一个学生姓名。",[22,170926,104727,170927,170929],{},[48,170928,170923],{}," 并输出所有学生。",[22,170931,170932],{},"把学生列表保存为 JSON 文件。",[22,170934,170935],{},"从 JSON 文件读取学生数据，计算平均分。",[22,170937,170938,170939,170942,170943,170946],{},"写一个日志函数 ",[48,170940,170941],{},"write_log(message)","，每次调用向 ",[48,170944,170945],{},"app.log"," 追加一行。",[464,170948,170949],{},"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":46,"searchDepth":185,"depth":185,"links":170951},[170952,170953,170957,170958,170964,170965,170966,170967,170968,170969,170970,170971,170972,170973,170974],{"id":168463,"depth":185,"text":168464},{"id":168504,"depth":185,"text":168505,"children":170954},[170955,170956],{"id":168508,"depth":202,"text":168509},{"id":168542,"depth":202,"text":168543},{"id":168656,"depth":185,"text":168657},{"id":168749,"depth":185,"text":168750,"children":170959},[170960,170961,170962,170963],{"id":168753,"depth":202,"text":168754},{"id":168840,"depth":202,"text":168841},{"id":168910,"depth":202,"text":168911},{"id":169004,"depth":202,"text":169005},{"id":169074,"depth":185,"text":169075},{"id":169137,"depth":185,"text":169138},{"id":169298,"depth":185,"text":169299},{"id":169361,"depth":185,"text":169362},{"id":169477,"depth":185,"text":169478},{"id":169687,"depth":185,"text":169688},{"id":169999,"depth":185,"text":170000},{"id":170410,"depth":185,"text":170411},{"id":170628,"depth":185,"text":170629},{"id":170876,"depth":185,"text":170877},{"id":170914,"depth":185,"text":170915},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168455,"description":23760},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170981,"title":170982,"body":170983,"description":23760,"extension":469,"meta":173169,"navigation":205,"path":173170,"seo":173171,"stem":173172,"__hash__":173173},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170984,"toc":173136},[170985,170988,170992,170995,170998,171090,171092,171111,171116,171120,171123,171126,171155,171162,171165,171169,171172,171201,171203,171255,171261,171314,171318,171416,171419,171486,171490,171547,171549,171555,171559,171564,171570,171661,171666,171670,171673,171751,171754,171792,171796,171914,171917,171921,171924,171969,171972,171976,171981,171987,172037,172040,172071,172075,172079,172109,172113,172148,172152,172187,172227,172231,172247,172250,172254,172258,172337,172341,172382,172386,172441,172445,172479,172483,172513,172522,172529,172535,172592,172595,172603,172606,172610,172617,172620,172626,172629,172646,172651,172655,172661,172674,172677,172714,172717,172728,172731,172745,172748,172762,172766,172773,172806,172809,172811,172817,172820,172824,172826,172832,172837,173010,173014,173077,173081,173105,173109,173133],[14,170986,170982],{"id":170987},"_9-异常模块与包",[486,170989,170991],{"id":170990},"_91-什么是异常","9.1 什么是异常",[10,170993,170994],{},"异常是程序运行过程中出现的错误。",[10,170996,170997],{},"常见异常：",[679,170999,171000,171009],{},[682,171001,171002],{},[685,171003,171004,171007],{},[688,171005,171006],{},"异常",[688,171008,26251],{},[726,171010,171011,171021,171031,171040,171050,171060,171070,171080],{},[685,171012,171013,171018],{},[731,171014,171015],{},[48,171016,171017],{},"NameError",[731,171019,171020],{},"使用了未定义变量",[685,171022,171023,171028],{},[731,171024,171025],{},[48,171026,171027],{},"TypeError",[731,171029,171030],{},"类型不匹配",[685,171032,171033,171037],{},[731,171034,171035],{},[48,171036,155133],{},[731,171038,171039],{},"值不合法",[685,171041,171042,171047],{},[731,171043,171044],{},[48,171045,171046],{},"IndexError",[731,171048,171049],{},"列表索引越界",[685,171051,171052,171057],{},[731,171053,171054],{},[48,171055,171056],{},"KeyError",[731,171058,171059],{},"字典 key 不存在",[685,171061,171062,171067],{},[731,171063,171064],{},[48,171065,171066],{},"FileNotFoundError",[731,171068,171069],{},"文件不存在",[685,171071,171072,171077],{},[731,171073,171074],{},[48,171075,171076],{},"ZeroDivisionError",[731,171078,171079],{},"除数为 0",[685,171081,171082,171087],{},[731,171083,171084],{},[48,171085,171086],{},"ImportError",[731,171088,171089],{},"导入失败",[10,171091,15519],{},[41,171093,171095],{"className":170,"code":171094,"language":172,"meta":46,"style":46},"num = int(\"abc\")\n",[48,171096,171097],{"__ignoreMap":46},[51,171098,171099,171101,171103,171105,171107,171109],{"class":53,"line":54},[51,171100,156086],{"class":65},[51,171102,70],{"class":69},[51,171104,2772],{"class":278},[51,171106,546],{"class":65},[51,171108,156179],{"class":61},[51,171110,282],{"class":65},[10,171112,171113,171114,28767],{},"会触发 ",[48,171115,155133],{},[486,171117,171119],{"id":171118},"_92-为什么要处理异常","9.2 为什么要处理异常",[10,171121,171122],{},"如果不处理异常，程序会直接终止。",[10,171124,171125],{},"例如用户输入年龄：",[41,171127,171129],{"className":170,"code":171128,"language":172,"meta":46,"style":46},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[48,171130,171131,171149],{"__ignoreMap":46},[51,171132,171133,171135,171137,171139,171141,171143,171145,171147],{"class":53,"line":54},[51,171134,146845],{"class":65},[51,171136,70],{"class":69},[51,171138,2772],{"class":278},[51,171140,546],{"class":65},[51,171142,54193],{"class":278},[51,171144,546],{"class":65},[51,171146,152693],{"class":61},[51,171148,30876],{"class":65},[51,171150,171151,171153],{"class":53,"line":185},[51,171152,30794],{"class":278},[51,171154,156060],{"class":65},[10,171156,171157,171158,171161],{},"用户输入 ",[48,171159,171160],{},"abc","，程序就会报错退出。",[10,171163,171164],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[486,171166,171168],{"id":171167},"_93-try-except","9.3 try except",[10,171170,171171],{},"基础语法：",[41,171173,171175],{"className":170,"code":171174,"language":172,"meta":46,"style":46},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[48,171176,171177,171184,171189,171196],{"__ignoreMap":46},[51,171178,171179,171182],{"class":53,"line":54},[51,171180,171181],{"class":69},"try",[51,171183,363],{"class":65},[51,171185,171186],{"class":53,"line":185},[51,171187,171188],{"class":65},"    可能出错的代码\n",[51,171190,171191,171194],{"class":53,"line":202},[51,171192,171193],{"class":69},"except",[51,171195,363],{"class":65},[51,171197,171198],{"class":53,"line":209},[51,171199,171200],{"class":65},"    出错后的处理代码\n",[10,171202,15519],{},[41,171204,171206],{"className":170,"code":171205,"language":172,"meta":46,"style":46},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[48,171207,171208,171214,171232,171238,171244],{"__ignoreMap":46},[51,171209,171210,171212],{"class":53,"line":54},[51,171211,171181],{"class":69},[51,171213,363],{"class":65},[51,171215,171216,171218,171220,171222,171224,171226,171228,171230],{"class":53,"line":185},[51,171217,152685],{"class":65},[51,171219,70],{"class":69},[51,171221,2772],{"class":278},[51,171223,546],{"class":65},[51,171225,54193],{"class":278},[51,171227,546],{"class":65},[51,171229,152693],{"class":61},[51,171231,30876],{"class":65},[51,171233,171234,171236],{"class":53,"line":202},[51,171235,31677],{"class":278},[51,171237,156060],{"class":65},[51,171239,171240,171242],{"class":53,"line":209},[51,171241,171193],{"class":69},[51,171243,363],{"class":65},[51,171245,171246,171248,171250,171253],{"class":53,"line":223},[51,171247,31677],{"class":278},[51,171249,546],{"class":65},[51,171251,171252],{"class":61},"\"年龄必须是数字\"",[51,171254,282],{"class":65},[10,171256,171257,171258,171260],{},"不建议裸写 ",[48,171259,171193],{},"，最好指定异常类型。",[41,171262,171264],{"className":170,"code":171263,"language":172,"meta":46,"style":46},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[48,171265,171266,171272,171290,171296,171304],{"__ignoreMap":46},[51,171267,171268,171270],{"class":53,"line":54},[51,171269,171181],{"class":69},[51,171271,363],{"class":65},[51,171273,171274,171276,171278,171280,171282,171284,171286,171288],{"class":53,"line":185},[51,171275,152685],{"class":65},[51,171277,70],{"class":69},[51,171279,2772],{"class":278},[51,171281,546],{"class":65},[51,171283,54193],{"class":278},[51,171285,546],{"class":65},[51,171287,152693],{"class":61},[51,171289,30876],{"class":65},[51,171291,171292,171294],{"class":53,"line":202},[51,171293,31677],{"class":278},[51,171295,156060],{"class":65},[51,171297,171298,171300,171302],{"class":53,"line":209},[51,171299,171193],{"class":69},[51,171301,152525],{"class":278},[51,171303,363],{"class":65},[51,171305,171306,171308,171310,171312],{"class":53,"line":223},[51,171307,31677],{"class":278},[51,171309,546],{"class":65},[51,171311,171252],{"class":61},[51,171313,282],{"class":65},[486,171315,171317],{"id":171316},"_94-捕获多个异常","9.4 捕获多个异常",[41,171319,171321],{"className":170,"code":171320,"language":172,"meta":46,"style":46},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[48,171322,171323,171329,171350,171370,171377,171385,171396,171405],{"__ignoreMap":46},[51,171324,171325,171327],{"class":53,"line":54},[51,171326,171181],{"class":69},[51,171328,363],{"class":65},[51,171330,171331,171334,171336,171338,171340,171342,171344,171346,171348],{"class":53,"line":185},[51,171332,171333],{"class":65},"    nums ",[51,171335,70],{"class":69},[51,171337,52598],{"class":65},[51,171339,759],{"class":278},[51,171341,12819],{"class":65},[51,171343,620],{"class":278},[51,171345,12819],{"class":65},[51,171347,614],{"class":278},[51,171349,33621],{"class":65},[51,171351,171352,171355,171357,171359,171361,171363,171365,171368],{"class":53,"line":202},[51,171353,171354],{"class":65},"    index ",[51,171356,70],{"class":69},[51,171358,2772],{"class":278},[51,171360,546],{"class":65},[51,171362,54193],{"class":278},[51,171364,546],{"class":65},[51,171366,171367],{"class":61},"\"请输入索引:\"",[51,171369,30876],{"class":65},[51,171371,171372,171374],{"class":53,"line":209},[51,171373,31677],{"class":278},[51,171375,171376],{"class":65},"(nums[index])\n",[51,171378,171379,171381,171383],{"class":53,"line":223},[51,171380,171193],{"class":69},[51,171382,152525],{"class":278},[51,171384,363],{"class":65},[51,171386,171387,171389,171391,171394],{"class":53,"line":237},[51,171388,31677],{"class":278},[51,171390,546],{"class":65},[51,171392,171393],{"class":61},"\"索引必须是整数\"",[51,171395,282],{"class":65},[51,171397,171398,171400,171403],{"class":53,"line":242},[51,171399,171193],{"class":69},[51,171401,171402],{"class":278}," IndexError",[51,171404,363],{"class":65},[51,171406,171407,171409,171411,171414],{"class":53,"line":257},[51,171408,31677],{"class":278},[51,171410,546],{"class":65},[51,171412,171413],{"class":61},"\"索引越界\"",[51,171415,282],{"class":65},[10,171417,171418],{},"多个异常使用相同处理逻辑：",[41,171420,171422],{"className":170,"code":171421,"language":172,"meta":46,"style":46},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[48,171423,171424,171430,171448,171461,171475],{"__ignoreMap":46},[51,171425,171426,171428],{"class":53,"line":54},[51,171427,171181],{"class":69},[51,171429,363],{"class":65},[51,171431,171432,171434,171436,171438,171440,171442,171444,171446],{"class":53,"line":185},[51,171433,45965],{"class":65},[51,171435,70],{"class":69},[51,171437,2772],{"class":278},[51,171439,546],{"class":65},[51,171441,54193],{"class":278},[51,171443,546],{"class":65},[51,171445,156095],{"class":61},[51,171447,30876],{"class":65},[51,171449,171450,171452,171454,171456,171458],{"class":53,"line":202},[51,171451,31677],{"class":278},[51,171453,546],{"class":65},[51,171455,988],{"class":278},[51,171457,156345],{"class":69},[51,171459,171460],{"class":65}," num)\n",[51,171462,171463,171465,171467,171469,171471,171473],{"class":53,"line":209},[51,171464,171193],{"class":69},[51,171466,2060],{"class":65},[51,171468,155133],{"class":278},[51,171470,12819],{"class":65},[51,171472,171076],{"class":278},[51,171474,31164],{"class":65},[51,171476,171477,171479,171481,171484],{"class":53,"line":223},[51,171478,31677],{"class":278},[51,171480,546],{"class":65},[51,171482,171483],{"class":61},"\"输入不合法\"",[51,171485,282],{"class":65},[486,171487,171489],{"id":171488},"_95-获取异常信息","9.5 获取异常信息",[41,171491,171493],{"className":170,"code":171492,"language":172,"meta":46,"style":46},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[48,171494,171495,171501,171515,171526],{"__ignoreMap":46},[51,171496,171497,171499],{"class":53,"line":54},[51,171498,171181],{"class":69},[51,171500,363],{"class":65},[51,171502,171503,171505,171507,171509,171511,171513],{"class":53,"line":185},[51,171504,45965],{"class":65},[51,171506,70],{"class":69},[51,171508,2772],{"class":278},[51,171510,546],{"class":65},[51,171512,156179],{"class":61},[51,171514,282],{"class":65},[51,171516,171517,171519,171521,171523],{"class":53,"line":202},[51,171518,171193],{"class":69},[51,171520,152525],{"class":278},[51,171522,64976],{"class":69},[51,171524,171525],{"class":65}," e:\n",[51,171527,171528,171530,171532,171534,171537,171539,171541,171543,171545],{"class":53,"line":209},[51,171529,31677],{"class":278},[51,171531,546],{"class":65},[51,171533,595],{"class":69},[51,171535,171536],{"class":61},"\"出错了:",[51,171538,1438],{"class":278},[51,171540,617],{"class":65},[51,171542,1488],{"class":278},[51,171544,793],{"class":61},[51,171546,282],{"class":65},[10,171548,146756],{},[41,171550,171553],{"className":171551,"code":171552,"language":5572,"meta":46},[5570],"出错了:invalid literal for int() with base 10: 'abc'\n",[48,171554,171552],{"__ignoreMap":46},[486,171556,171558],{"id":171557},"_96-else和finally","9.6 else和finally",[10,171560,171561,171563],{},[48,171562,2099],{},"：没有异常时执行。",[10,171565,171566,171569],{},[48,171567,171568],{},"finally","：无论是否异常都会执行。",[41,171571,171573],{"className":170,"code":171572,"language":172,"meta":46,"style":46},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[48,171574,171575,171581,171599,171607,171617,171623,171644,171650],{"__ignoreMap":46},[51,171576,171577,171579],{"class":53,"line":54},[51,171578,171181],{"class":69},[51,171580,363],{"class":65},[51,171582,171583,171585,171587,171589,171591,171593,171595,171597],{"class":53,"line":185},[51,171584,45965],{"class":65},[51,171586,70],{"class":69},[51,171588,2772],{"class":278},[51,171590,546],{"class":65},[51,171592,54193],{"class":278},[51,171594,546],{"class":65},[51,171596,156095],{"class":61},[51,171598,30876],{"class":65},[51,171600,171601,171603,171605],{"class":53,"line":202},[51,171602,171193],{"class":69},[51,171604,152525],{"class":278},[51,171606,363],{"class":65},[51,171608,171609,171611,171613,171615],{"class":53,"line":209},[51,171610,31677],{"class":278},[51,171612,546],{"class":65},[51,171614,153513],{"class":61},[51,171616,282],{"class":65},[51,171618,171619,171621],{"class":53,"line":223},[51,171620,2099],{"class":69},[51,171622,363],{"class":65},[51,171624,171625,171627,171629,171631,171634,171636,171638,171640,171642],{"class":53,"line":237},[51,171626,31677],{"class":278},[51,171628,546],{"class":65},[51,171630,595],{"class":69},[51,171632,171633],{"class":61},"\"输入正确:",[51,171635,1438],{"class":278},[51,171637,2067],{"class":65},[51,171639,1488],{"class":278},[51,171641,793],{"class":61},[51,171643,282],{"class":65},[51,171645,171646,171648],{"class":53,"line":242},[51,171647,171568],{"class":69},[51,171649,363],{"class":65},[51,171651,171652,171654,171656,171659],{"class":53,"line":257},[51,171653,31677],{"class":278},[51,171655,546],{"class":65},[51,171657,171658],{"class":61},"\"程序结束\"",[51,171660,282],{"class":65},[10,171662,171663,171665],{},[48,171664,171568],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[486,171667,171669],{"id":171668},"_97-抛出异常","9.7 抛出异常",[10,171671,171672],{},"程序可以主动抛出异常。",[41,171674,171676],{"className":170,"code":171675,"language":172,"meta":46,"style":46},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[48,171677,171678,171687,171699,171712,171732,171736,171740],{"__ignoreMap":46},[51,171679,171680,171682,171685],{"class":53,"line":54},[51,171681,348],{"class":69},[51,171683,171684],{"class":57}," set_age",[51,171686,161714],{"class":65},[51,171688,171689,171691,171693,171695,171697],{"class":53,"line":185},[51,171690,3488],{"class":69},[51,171692,16091],{"class":65},[51,171694,1452],{"class":69},[51,171696,4479],{"class":278},[51,171698,363],{"class":65},[51,171700,171701,171703,171705,171707,171710],{"class":53,"line":202},[51,171702,103804],{"class":69},[51,171704,152525],{"class":278},[51,171706,546],{"class":65},[51,171708,171709],{"class":61},"\"年龄不能为负数\"",[51,171711,282],{"class":65},[51,171713,171714,171716,171718,171720,171722,171724,171726,171728,171730],{"class":53,"line":209},[51,171715,31677],{"class":278},[51,171717,546],{"class":65},[51,171719,595],{"class":69},[51,171721,162282],{"class":61},[51,171723,1438],{"class":278},[51,171725,70593],{"class":65},[51,171727,1488],{"class":278},[51,171729,793],{"class":61},[51,171731,282],{"class":65},[51,171733,171734],{"class":53,"line":223},[51,171735,206],{"emptyLinePlaceholder":205},[51,171737,171738],{"class":53,"line":237},[51,171739,206],{"emptyLinePlaceholder":205},[51,171741,171742,171745,171747,171749],{"class":53,"line":242},[51,171743,171744],{"class":65},"set_age(",[51,171746,1074],{"class":69},[51,171748,759],{"class":278},[51,171750,282],{"class":65},[10,171752,171753],{},"调用者可以捕获：",[41,171755,171757],{"className":170,"code":171756,"language":172,"meta":46,"style":46},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[48,171758,171759,171765,171776,171786],{"__ignoreMap":46},[51,171760,171761,171763],{"class":53,"line":54},[51,171762,171181],{"class":69},[51,171764,363],{"class":65},[51,171766,171767,171770,171772,171774],{"class":53,"line":185},[51,171768,171769],{"class":65},"    set_age(",[51,171771,1074],{"class":69},[51,171773,759],{"class":278},[51,171775,282],{"class":65},[51,171777,171778,171780,171782,171784],{"class":53,"line":202},[51,171779,171193],{"class":69},[51,171781,152525],{"class":278},[51,171783,64976],{"class":69},[51,171785,171525],{"class":65},[51,171787,171788,171790],{"class":53,"line":209},[51,171789,31677],{"class":278},[51,171791,67371],{"class":65},[486,171793,171795],{"id":171794},"_98-自定义异常","9.8 自定义异常",[41,171797,171799],{"className":170,"code":171798,"language":172,"meta":46,"style":46},"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",[48,171800,171801,171815,171819,171823,171827,171835,171845,171856,171866,171870,171874,171880,171897,171908],{"__ignoreMap":46},[51,171802,171803,171805,171808,171810,171813],{"class":53,"line":54},[51,171804,15078],{"class":69},[51,171806,171807],{"class":57}," BalanceNotEnoughError",[51,171809,546],{"class":65},[51,171811,171812],{"class":278},"Exception",[51,171814,31164],{"class":65},[51,171816,171817],{"class":53,"line":185},[51,171818,149836],{"class":69},[51,171820,171821],{"class":53,"line":202},[51,171822,206],{"emptyLinePlaceholder":205},[51,171824,171825],{"class":53,"line":209},[51,171826,206],{"emptyLinePlaceholder":205},[51,171828,171829,171831,171833],{"class":53,"line":223},[51,171830,348],{"class":69},[51,171832,150485],{"class":57},[51,171834,163111],{"class":65},[51,171836,171837,171839,171841,171843],{"class":53,"line":237},[51,171838,3488],{"class":69},[51,171840,150441],{"class":65},[51,171842,1502],{"class":69},[51,171844,162888],{"class":65},[51,171846,171847,171849,171852,171854],{"class":53,"line":242},[51,171848,103804],{"class":69},[51,171850,171851],{"class":65}," BalanceNotEnoughError(",[51,171853,150536],{"class":61},[51,171855,282],{"class":65},[51,171857,171858,171860,171862,171864],{"class":53,"line":257},[51,171859,4476],{"class":69},[51,171861,163118],{"class":65},[51,171863,1074],{"class":69},[51,171865,150474],{"class":65},[51,171867,171868],{"class":53,"line":262},[51,171869,206],{"emptyLinePlaceholder":205},[51,171871,171872],{"class":53,"line":285},[51,171873,206],{"emptyLinePlaceholder":205},[51,171875,171876,171878],{"class":53,"line":296},[51,171877,171181],{"class":69},[51,171879,363],{"class":65},[51,171881,171882,171884,171886,171889,171891,171893,171895],{"class":53,"line":307},[51,171883,162789],{"class":65},[51,171885,70],{"class":69},[51,171887,171888],{"class":65}," withdraw(",[51,171890,853],{"class":278},[51,171892,12819],{"class":65},[51,171894,2120],{"class":278},[51,171896,282],{"class":65},[51,171898,171899,171901,171904,171906],{"class":53,"line":324},[51,171900,171193],{"class":69},[51,171902,171903],{"class":65}," BalanceNotEnoughError ",[51,171905,217],{"class":69},[51,171907,171525],{"class":65},[51,171909,171910,171912],{"class":53,"line":329},[51,171911,31677],{"class":278},[51,171913,67371],{"class":65},[10,171915,171916],{},"入门阶段大多数情况使用内置异常即可。",[486,171918,171920],{"id":171919},"_99-traceback","9.9 traceback",[10,171922,171923],{},"调试时可以输出完整异常堆栈。",[41,171925,171927],{"className":170,"code":171926,"language":172,"meta":46,"style":46},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[48,171928,171929,171936,171940,171946,171956,171964],{"__ignoreMap":46},[51,171930,171931,171933],{"class":53,"line":54},[51,171932,179],{"class":69},[51,171934,171935],{"class":65}," traceback\n",[51,171937,171938],{"class":53,"line":185},[51,171939,206],{"emptyLinePlaceholder":205},[51,171941,171942,171944],{"class":53,"line":202},[51,171943,171181],{"class":69},[51,171945,363],{"class":65},[51,171947,171948,171950,171952,171954],{"class":53,"line":209},[51,171949,2375],{"class":278},[51,171951,546],{"class":65},[51,171953,156179],{"class":61},[51,171955,282],{"class":65},[51,171957,171958,171960,171962],{"class":53,"line":223},[51,171959,171193],{"class":69},[51,171961,152525],{"class":278},[51,171963,363],{"class":65},[51,171965,171966],{"class":53,"line":237},[51,171967,171968],{"class":65},"    traceback.print_exc()\n",[10,171970,171971],{},"日志系统中常把异常堆栈记录到文件。",[486,171973,171975],{"id":171974},"_910-什么是模块","9.10 什么是模块",[10,171977,171978,171979,126282],{},"模块就是一个 ",[48,171980,146651],{},[10,171982,171983,171984,25000],{},"例如创建 ",[48,171985,171986],{},"my_math.py",[41,171988,171990],{"className":170,"code":171989,"language":172,"meta":46,"style":46},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[48,171991,171992,172000,172010,172014,172018,172027],{"__ignoreMap":46},[51,171993,171994,171996,171998],{"class":53,"line":54},[51,171995,348],{"class":69},[51,171997,5594],{"class":57},[51,171999,151392],{"class":65},[51,172001,172002,172004,172006,172008],{"class":53,"line":185},[51,172003,4476],{"class":69},[51,172005,11253],{"class":65},[51,172007,1023],{"class":69},[51,172009,151403],{"class":65},[51,172011,172012],{"class":53,"line":202},[51,172013,206],{"emptyLinePlaceholder":205},[51,172015,172016],{"class":53,"line":209},[51,172017,206],{"emptyLinePlaceholder":205},[51,172019,172020,172022,172025],{"class":53,"line":223},[51,172021,348],{"class":69},[51,172023,172024],{"class":57}," sub",[51,172026,151392],{"class":65},[51,172028,172029,172031,172033,172035],{"class":53,"line":237},[51,172030,4476],{"class":69},[51,172032,11253],{"class":65},[51,172034,1074],{"class":69},[51,172036,151403],{"class":65},[10,172038,172039],{},"在另一个文件中导入：",[41,172041,172043],{"className":170,"code":172042,"language":172,"meta":46,"style":46},"import my_math\n\nprint(my_math.add(1, 2))\n",[48,172044,172045,172052,172056],{"__ignoreMap":46},[51,172046,172047,172049],{"class":53,"line":54},[51,172048,179],{"class":69},[51,172050,172051],{"class":65}," my_math\n",[51,172053,172054],{"class":53,"line":185},[51,172055,206],{"emptyLinePlaceholder":205},[51,172057,172058,172060,172063,172065,172067,172069],{"class":53,"line":202},[51,172059,30794],{"class":278},[51,172061,172062],{"class":65},"(my_math.add(",[51,172064,759],{"class":278},[51,172066,12819],{"class":65},[51,172068,620],{"class":278},[51,172070,30876],{"class":65},[486,172072,172074],{"id":172073},"_911-import导入","9.11 import导入",[513,172076,172078],{"id":172077},"_9111-导入模块","9.11.1 导入模块",[41,172080,172082],{"className":170,"code":172081,"language":172,"meta":46,"style":46},"import random\n\nprint(random.randint(1, 10))\n",[48,172083,172084,172090,172094],{"__ignoreMap":46},[51,172085,172086,172088],{"class":53,"line":54},[51,172087,179],{"class":69},[51,172089,45701],{"class":65},[51,172091,172092],{"class":53,"line":185},[51,172093,206],{"emptyLinePlaceholder":205},[51,172095,172096,172098,172101,172103,172105,172107],{"class":53,"line":202},[51,172097,30794],{"class":278},[51,172099,172100],{"class":65},"(random.randint(",[51,172102,759],{"class":278},[51,172104,12819],{"class":65},[51,172106,988],{"class":278},[51,172108,30876],{"class":65},[513,172110,172112],{"id":172111},"_9112-导入指定内容","9.11.2 导入指定内容",[41,172114,172116],{"className":170,"code":172115,"language":172,"meta":46,"style":46},"from random import randint\n\nprint(randint(1, 10))\n",[48,172117,172118,172129,172133],{"__ignoreMap":46},[51,172119,172120,172122,172124,172126],{"class":53,"line":54},[51,172121,226],{"class":69},[51,172123,58168],{"class":65},[51,172125,179],{"class":69},[51,172127,172128],{"class":65}," randint\n",[51,172130,172131],{"class":53,"line":185},[51,172132,206],{"emptyLinePlaceholder":205},[51,172134,172135,172137,172140,172142,172144,172146],{"class":53,"line":202},[51,172136,30794],{"class":278},[51,172138,172139],{"class":65},"(randint(",[51,172141,759],{"class":278},[51,172143,12819],{"class":65},[51,172145,988],{"class":278},[51,172147,30876],{"class":65},[513,172149,172151],{"id":172150},"_9113-起别名","9.11.3 起别名",[41,172153,172155],{"className":170,"code":172154,"language":172,"meta":46,"style":46},"import random as rd\n\nprint(rd.randint(1, 10))\n",[48,172156,172157,172168,172172],{"__ignoreMap":46},[51,172158,172159,172161,172163,172165],{"class":53,"line":54},[51,172160,179],{"class":69},[51,172162,58168],{"class":65},[51,172164,217],{"class":69},[51,172166,172167],{"class":65}," rd\n",[51,172169,172170],{"class":53,"line":185},[51,172171,206],{"emptyLinePlaceholder":205},[51,172173,172174,172176,172179,172181,172183,172185],{"class":53,"line":202},[51,172175,30794],{"class":278},[51,172177,172178],{"class":65},"(rd.randint(",[51,172180,759],{"class":278},[51,172182,12819],{"class":65},[51,172184,988],{"class":278},[51,172186,30876],{"class":65},[41,172188,172190],{"className":170,"code":172189,"language":172,"meta":46,"style":46},"from random import randint as rint\n\nprint(rint(1, 10))\n",[48,172191,172192,172208,172212],{"__ignoreMap":46},[51,172193,172194,172196,172198,172200,172203,172205],{"class":53,"line":54},[51,172195,226],{"class":69},[51,172197,58168],{"class":65},[51,172199,179],{"class":69},[51,172201,172202],{"class":65}," randint ",[51,172204,217],{"class":69},[51,172206,172207],{"class":65}," rint\n",[51,172209,172210],{"class":53,"line":185},[51,172211,206],{"emptyLinePlaceholder":205},[51,172213,172214,172216,172219,172221,172223,172225],{"class":53,"line":202},[51,172215,30794],{"class":278},[51,172217,172218],{"class":65},"(rint(",[51,172220,759],{"class":278},[51,172222,12819],{"class":65},[51,172224,988],{"class":278},[51,172226,30876],{"class":65},[513,172228,172230],{"id":172229},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[41,172232,172234],{"className":170,"code":172233,"language":172,"meta":46,"style":46},"from random import *\n",[48,172235,172236],{"__ignoreMap":46},[51,172237,172238,172240,172242,172244],{"class":53,"line":54},[51,172239,226],{"class":69},[51,172241,58168],{"class":65},[51,172243,179],{"class":69},[51,172245,172246],{"class":69}," *\n",[10,172248,172249],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[486,172251,172253],{"id":172252},"_912-常用内置模块","9.12 常用内置模块",[513,172255,172257],{"id":172256},"_9121-random","9.12.1 random",[41,172259,172261],{"className":170,"code":172260,"language":172,"meta":46,"style":46},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[48,172262,172263,172269,172273,172287,172306],{"__ignoreMap":46},[51,172264,172265,172267],{"class":53,"line":54},[51,172266,179],{"class":69},[51,172268,45701],{"class":65},[51,172270,172271],{"class":53,"line":185},[51,172272,206],{"emptyLinePlaceholder":205},[51,172274,172275,172277,172279,172281,172283,172285],{"class":53,"line":202},[51,172276,30794],{"class":278},[51,172278,172100],{"class":65},[51,172280,759],{"class":278},[51,172282,12819],{"class":65},[51,172284,988],{"class":278},[51,172286,30876],{"class":65},[51,172288,172289,172291,172294,172296,172298,172300,172302,172304],{"class":53,"line":209},[51,172290,30794],{"class":278},[51,172292,172293],{"class":65},"(random.choice([",[51,172295,150187],{"class":61},[51,172297,12819],{"class":65},[51,172299,151235],{"class":61},[51,172301,12819],{"class":65},[51,172303,160030],{"class":61},[51,172305,33518],{"class":65},[51,172307,172308,172310,172313,172315,172317,172319,172321,172323,172325,172327,172329,172331,172333,172335],{"class":53,"line":223},[51,172309,30794],{"class":278},[51,172311,172312],{"class":65},"(random.sample([",[51,172314,759],{"class":278},[51,172316,12819],{"class":65},[51,172318,620],{"class":278},[51,172320,12819],{"class":65},[51,172322,614],{"class":278},[51,172324,12819],{"class":65},[51,172326,835],{"class":278},[51,172328,12819],{"class":65},[51,172330,861],{"class":278},[51,172332,112573],{"class":65},[51,172334,620],{"class":278},[51,172336,30876],{"class":65},[513,172338,172340],{"id":172339},"_9122-time","9.12.2 time",[41,172342,172344],{"className":170,"code":172343,"language":172,"meta":46,"style":46},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[48,172345,172346,172352,172356,172363,172371],{"__ignoreMap":46},[51,172347,172348,172350],{"class":53,"line":54},[51,172349,179],{"class":69},[51,172351,32205],{"class":65},[51,172353,172354],{"class":53,"line":185},[51,172355,206],{"emptyLinePlaceholder":205},[51,172357,172358,172360],{"class":53,"line":202},[51,172359,30794],{"class":278},[51,172361,172362],{"class":65},"(time.time())\n",[51,172364,172365,172367,172369],{"class":53,"line":209},[51,172366,95443],{"class":65},[51,172368,759],{"class":278},[51,172370,282],{"class":65},[51,172372,172373,172375,172377,172380],{"class":53,"line":223},[51,172374,30794],{"class":278},[51,172376,546],{"class":65},[51,172378,172379],{"class":61},"\"1秒后执行\"",[51,172381,282],{"class":65},[513,172383,172385],{"id":172384},"_9123-datetime","9.12.3 datetime",[41,172387,172389],{"className":170,"code":172388,"language":172,"meta":46,"style":46},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[48,172390,172391,172403,172407,172417,172424],{"__ignoreMap":46},[51,172392,172393,172395,172398,172400],{"class":53,"line":54},[51,172394,226],{"class":69},[51,172396,172397],{"class":65}," datetime ",[51,172399,179],{"class":69},[51,172401,172402],{"class":65}," datetime\n",[51,172404,172405],{"class":53,"line":185},[51,172406,206],{"emptyLinePlaceholder":205},[51,172408,172409,172412,172414],{"class":53,"line":202},[51,172410,172411],{"class":65},"now ",[51,172413,70],{"class":69},[51,172415,172416],{"class":65}," datetime.now()\n",[51,172418,172419,172421],{"class":53,"line":209},[51,172420,30794],{"class":278},[51,172422,172423],{"class":65},"(now)\n",[51,172425,172426,172428,172431,172434,172436,172439],{"class":53,"line":223},[51,172427,30794],{"class":278},[51,172429,172430],{"class":65},"(now.strftime(",[51,172432,172433],{"class":61},"\"%Y-%m-",[51,172435,156990],{"class":278},[51,172437,172438],{"class":61}," %H:%M:%S\"",[51,172440,30876],{"class":65},[513,172442,172444],{"id":172443},"_9124-os","9.12.4 os",[41,172446,172448],{"className":170,"code":172447,"language":172,"meta":46,"style":46},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[48,172449,172450,172456,172460,172467],{"__ignoreMap":46},[51,172451,172452,172454],{"class":53,"line":54},[51,172453,179],{"class":69},[51,172455,182],{"class":65},[51,172457,172458],{"class":53,"line":185},[51,172459,206],{"emptyLinePlaceholder":205},[51,172461,172462,172464],{"class":53,"line":202},[51,172463,30794],{"class":278},[51,172465,172466],{"class":65},"(os.getcwd())\n",[51,172468,172469,172471,172474,172477],{"class":53,"line":209},[51,172470,30794],{"class":278},[51,172472,172473],{"class":65},"(os.listdir(",[51,172475,172476],{"class":61},"\".\"",[51,172478,30876],{"class":65},[513,172480,172482],{"id":172481},"_9125-sys","9.12.5 sys",[41,172484,172486],{"className":170,"code":172485,"language":172,"meta":46,"style":46},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[48,172487,172488,172495,172499,172506],{"__ignoreMap":46},[51,172489,172490,172492],{"class":53,"line":54},[51,172491,179],{"class":69},[51,172493,172494],{"class":65}," sys\n",[51,172496,172497],{"class":53,"line":185},[51,172498,206],{"emptyLinePlaceholder":205},[51,172500,172501,172503],{"class":53,"line":202},[51,172502,30794],{"class":278},[51,172504,172505],{"class":65},"(sys.version)\n",[51,172507,172508,172510],{"class":53,"line":209},[51,172509,30794],{"class":278},[51,172511,172512],{"class":65},"(sys.path)\n",[486,172514,172516,172517,172519,172520,793],{"id":172515},"_913-if-name-main","9.13 if ",[691,172518,80182],{}," == \"",[691,172521,102430],{},[10,172523,172524,172525,172528],{},"模块被直接运行和被导入时，",[48,172526,172527],{},"__name__"," 的值不同。",[10,172530,172531,172532,25000],{},"创建 ",[48,172533,172534],{},"my_module.py",[41,172536,172538],{"className":170,"code":172537,"language":172,"meta":46,"style":46},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[48,172539,172540,172548,172558,172562,172566,172578],{"__ignoreMap":46},[51,172541,172542,172544,172546],{"class":53,"line":54},[51,172543,348],{"class":69},[51,172545,5594],{"class":57},[51,172547,151392],{"class":65},[51,172549,172550,172552,172554,172556],{"class":53,"line":185},[51,172551,4476],{"class":69},[51,172553,11253],{"class":65},[51,172555,1023],{"class":69},[51,172557,151403],{"class":65},[51,172559,172560],{"class":53,"line":202},[51,172561,206],{"emptyLinePlaceholder":205},[51,172563,172564],{"class":53,"line":209},[51,172565,206],{"emptyLinePlaceholder":205},[51,172567,172568,172570,172572,172574,172576],{"class":53,"line":223},[51,172569,1940],{"class":69},[51,172571,31598],{"class":278},[51,172573,101931],{"class":69},[51,172575,101934],{"class":61},[51,172577,363],{"class":65},[51,172579,172580,172582,172584,172586,172588,172590],{"class":53,"line":237},[51,172581,31677],{"class":278},[51,172583,166899],{"class":65},[51,172585,759],{"class":278},[51,172587,12819],{"class":65},[51,172589,620],{"class":278},[51,172591,30876],{"class":65},[10,172593,172594],{},"作用：",[19,172596,172597,172600],{},[22,172598,172599],{},"直接运行该文件时，执行测试代码。",[22,172601,172602],{},"被其他文件导入时，不执行测试代码。",[10,172604,172605],{},"这是写模块时很常用的习惯。",[486,172607,172609],{"id":172608},"_914-包","9.14 包",[10,172611,172612,172613,172616],{},"包是包含 ",[48,172614,172615],{},"__init__.py"," 的目录，用于组织多个模块。",[10,172618,172619],{},"目录结构：",[41,172621,172624],{"className":172622,"code":172623,"language":5572,"meta":46},[5570],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[48,172625,172623],{"__ignoreMap":46},[10,172627,172628],{},"导入：",[41,172630,172632],{"className":170,"code":172631,"language":172,"meta":46,"style":46},"from utils.file_utils import read_file\n",[48,172633,172634],{"__ignoreMap":46},[51,172635,172636,172638,172641,172643],{"class":53,"line":54},[51,172637,226],{"class":69},[51,172639,172640],{"class":65}," utils.file_utils ",[51,172642,179],{"class":69},[51,172644,172645],{"class":65}," read_file\n",[10,172647,172648,172650],{},[48,172649,172615],{}," 可以为空，也可以写包初始化逻辑。",[486,172652,172654],{"id":172653},"_915-第三方包","9.15 第三方包",[10,172656,172657,172658,172660],{},"第三方包通过 ",[48,172659,24212],{}," 安装。",[41,172662,172664],{"className":43,"code":172663,"language":45,"meta":46,"style":46},"pip install requests\n",[48,172665,172666],{"__ignoreMap":46},[51,172667,172668,172670,172672],{"class":53,"line":54},[51,172669,24212],{"class":57},[51,172671,24215],{"class":61},[51,172673,146397],{"class":61},[10,172675,172676],{},"使用：",[41,172678,172680],{"className":170,"code":172679,"language":172,"meta":46,"style":46},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[48,172681,172682,172688,172692,172707],{"__ignoreMap":46},[51,172683,172684,172686],{"class":53,"line":54},[51,172685,179],{"class":69},[51,172687,146397],{"class":65},[51,172689,172690],{"class":53,"line":185},[51,172691,206],{"emptyLinePlaceholder":205},[51,172693,172694,172697,172699,172702,172705],{"class":53,"line":202},[51,172695,172696],{"class":65},"response ",[51,172698,70],{"class":69},[51,172700,172701],{"class":65}," requests.get(",[51,172703,172704],{"class":61},"\"https:\u002F\u002Fwww.example.com\"",[51,172706,282],{"class":65},[51,172708,172709,172711],{"class":53,"line":209},[51,172710,30794],{"class":278},[51,172712,172713],{"class":65},"(response.status_code)\n",[10,172715,172716],{},"查看已安装包：",[41,172718,172720],{"className":43,"code":172719,"language":45,"meta":46,"style":46},"pip list\n",[48,172721,172722],{"__ignoreMap":46},[51,172723,172724,172726],{"class":53,"line":54},[51,172725,24212],{"class":57},[51,172727,119326],{"class":61},[10,172729,172730],{},"导出项目依赖：",[41,172732,172733],{"className":43,"code":146592,"language":45,"meta":46,"style":46},[48,172734,172735],{"__ignoreMap":46},[51,172736,172737,172739,172741,172743],{"class":53,"line":54},[51,172738,24212],{"class":57},[51,172740,146601],{"class":61},[51,172742,26604],{"class":69},[51,172744,146606],{"class":61},[10,172746,172747],{},"安装项目依赖：",[41,172749,172750],{"className":43,"code":146612,"language":45,"meta":46,"style":46},[48,172751,172752],{"__ignoreMap":46},[51,172753,172754,172756,172758,172760],{"class":53,"line":54},[51,172755,24212],{"class":57},[51,172757,24215],{"class":61},[51,172759,120010],{"class":278},[51,172761,146606],{"class":61},[486,172763,172765],{"id":172764},"_916-模块搜索路径","9.16 模块搜索路径",[10,172767,172768,172769,172772],{},"Python 导入模块时会在 ",[48,172770,172771],{},"sys.path"," 中查找。",[41,172774,172776],{"className":170,"code":172775,"language":172,"meta":46,"style":46},"import sys\n\nfor path in sys.path:\n    print(path)\n",[48,172777,172778,172784,172788,172800],{"__ignoreMap":46},[51,172779,172780,172782],{"class":53,"line":54},[51,172781,179],{"class":69},[51,172783,172494],{"class":65},[51,172785,172786],{"class":53,"line":185},[51,172787,206],{"emptyLinePlaceholder":205},[51,172789,172790,172792,172795,172797],{"class":53,"line":202},[51,172791,3412],{"class":69},[51,172793,172794],{"class":65}," path ",[51,172796,26425],{"class":69},[51,172798,172799],{"class":65}," sys.path:\n",[51,172801,172802,172804],{"class":53,"line":209},[51,172803,31677],{"class":278},[51,172805,169528],{"class":65},[10,172807,172808],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[10,172810,157922],{},[41,172812,172815],{"className":172813,"code":172814,"language":5572,"meta":46},[5570],"random.py\njson.py\ntime.py\n",[48,172816,172814],{"__ignoreMap":46},[10,172818,172819],{},"这些文件名可能导致导入异常。",[486,172821,172823],{"id":172822},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[10,172825,172619],{},[41,172827,172830],{"className":172828,"code":172829,"language":5572,"meta":46},[5570],"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",[48,172831,172829],{"__ignoreMap":46},[10,172833,172834,25000],{},[48,172835,172836],{},"utils\u002Ffile_utils.py",[41,172838,172840],{"className":170,"code":172839,"language":172,"meta":46,"style":46},"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",[48,172841,172842,172848,172858,172862,172866,172876,172886,172894,172900,172904,172931,172941,172945,172949,172959,172985],{"__ignoreMap":46},[51,172843,172844,172846],{"class":53,"line":54},[51,172845,179],{"class":69},[51,172847,147390],{"class":65},[51,172849,172850,172852,172854,172856],{"class":53,"line":185},[51,172851,226],{"class":69},[51,172853,108683],{"class":65},[51,172855,179],{"class":69},[51,172857,108688],{"class":65},[51,172859,172860],{"class":53,"line":202},[51,172861,206],{"emptyLinePlaceholder":205},[51,172863,172864],{"class":53,"line":209},[51,172865,206],{"emptyLinePlaceholder":205},[51,172867,172868,172870,172873],{"class":53,"line":223},[51,172869,348],{"class":69},[51,172871,172872],{"class":57}," read_json",[51,172874,172875],{"class":65},"(path):\n",[51,172877,172878,172881,172883],{"class":53,"line":237},[51,172879,172880],{"class":65},"    path ",[51,172882,70],{"class":69},[51,172884,172885],{"class":65}," Path(path)\n",[51,172887,172888,172890,172892],{"class":53,"line":242},[51,172889,3488],{"class":69},[51,172891,39304],{"class":69},[51,172893,169609],{"class":65},[51,172895,172896,172898],{"class":53,"line":257},[51,172897,15136],{"class":69},[51,172899,52210],{"class":65},[51,172901,172902],{"class":53,"line":262},[51,172903,206],{"emptyLinePlaceholder":205},[51,172905,172906,172908,172910,172913,172915,172917,172919,172921,172923,172925,172927,172929],{"class":53,"line":285},[51,172907,34553],{"class":69},[51,172909,147090],{"class":278},[51,172911,172912],{"class":65},"(path, ",[51,172914,147100],{"class":61},[51,172916,12819],{"class":65},[51,172918,147105],{"class":248},[51,172920,70],{"class":69},[51,172922,147110],{"class":61},[51,172924,14098],{"class":65},[51,172926,217],{"class":69},[51,172928,148452],{"class":248},[51,172930,363],{"class":65},[51,172932,172933,172935,172937,172939],{"class":53,"line":296},[51,172934,15136],{"class":69},[51,172936,148463],{"class":65},[51,172938,313],{"class":248},[51,172940,282],{"class":65},[51,172942,172943],{"class":53,"line":307},[51,172944,206],{"emptyLinePlaceholder":205},[51,172946,172947],{"class":53,"line":324},[51,172948,206],{"emptyLinePlaceholder":205},[51,172950,172951,172953,172956],{"class":53,"line":329},[51,172952,348],{"class":69},[51,172954,172955],{"class":57}," write_json",[51,172957,172958],{"class":65},"(path, data):\n",[51,172960,172961,172963,172965,172967,172969,172971,172973,172975,172977,172979,172981,172983],{"class":53,"line":334},[51,172962,34553],{"class":69},[51,172964,147090],{"class":278},[51,172966,172912],{"class":65},[51,172968,152275],{"class":61},[51,172970,12819],{"class":65},[51,172972,147105],{"class":248},[51,172974,70],{"class":69},[51,172976,147110],{"class":61},[51,172978,14098],{"class":65},[51,172980,217],{"class":69},[51,172982,148452],{"class":248},[51,172984,363],{"class":65},[51,172986,172987,172990,172992,172994,172996,172998,173000,173002,173004,173006,173008],{"class":53,"line":340},[51,172988,172989],{"class":65},"        json.dump(data, ",[51,172991,313],{"class":248},[51,172993,12819],{"class":65},[51,172995,147436],{"class":248},[51,172997,70],{"class":69},[51,172999,34362],{"class":278},[51,173001,12819],{"class":65},[51,173003,152311],{"class":248},[51,173005,70],{"class":69},[51,173007,620],{"class":278},[51,173009,282],{"class":65},[10,173011,173012,25000],{},[48,173013,154906],{},[41,173015,173017],{"className":170,"code":173016,"language":172,"meta":46,"style":46},"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",[48,173018,173019,173030,173034,173047,173067],{"__ignoreMap":46},[51,173020,173021,173023,173025,173027],{"class":53,"line":54},[51,173022,226],{"class":69},[51,173024,172640],{"class":65},[51,173026,179],{"class":69},[51,173028,173029],{"class":65}," read_json, write_json\n",[51,173031,173032],{"class":53,"line":185},[51,173033,206],{"emptyLinePlaceholder":205},[51,173035,173036,173038,173040,173043,173045],{"class":53,"line":202},[51,173037,160015],{"class":65},[51,173039,70],{"class":69},[51,173041,173042],{"class":65}," read_json(",[51,173044,152130],{"class":61},[51,173046,282],{"class":65},[51,173048,173049,173051,173053,173055,173057,173059,173061,173063,173065],{"class":53,"line":209},[51,173050,170833],{"class":65},[51,173052,63051],{"class":61},[51,173054,51809],{"class":65},[51,173056,150187],{"class":61},[51,173058,12819],{"class":65},[51,173060,151771],{"class":61},[51,173062,51809],{"class":65},[51,173064,1531],{"class":278},[51,173066,165451],{"class":65},[51,173068,173069,173072,173074],{"class":53,"line":223},[51,173070,173071],{"class":65},"write_json(",[51,173073,152130],{"class":61},[51,173075,173076],{"class":65},", students)\n",[486,173078,173080],{"id":173079},"_918-易错点","9.18 易错点",[19,173082,173083,173086,173091,173096,173099,173102],{},[22,173084,173085],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[22,173087,173088,173089,28767],{},"能指定异常类型就不要裸写 ",[48,173090,171193],{},[22,173092,173093,173095],{},[48,173094,171568],{}," 无论是否出错都会执行。",[22,173097,173098],{},"模块文件名不要和标准库重名。",[22,173100,173101],{},"导入自己写的模块时，要注意运行目录。",[22,173103,173104],{},"第三方包要安装到当前解释器或虚拟环境中。",[486,173106,173108],{"id":173107},"_919-本章练习","9.19 本章练习",[19,173110,173111,173114,173117,173123,173130],{},[22,173112,173113],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[22,173115,173116],{},"写函数读取文件，如果文件不存在则返回空字符串。",[22,173118,172531,173119,173122],{},[48,173120,173121],{},"math_utils.py","，实现加减乘除函数并导入使用。",[22,173124,173125,173126,173129],{},"创建一个 ",[48,173127,173128],{},"utils"," 包，把 JSON 读写函数放进去。",[22,173131,173132],{},"写一个程序，捕获除零异常和输入格式异常。",[464,173134,173135],{},"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":46,"searchDepth":185,"depth":185,"links":173137},[173138,173139,173140,173141,173142,173143,173144,173145,173146,173147,173148,173154,173161,173163,173164,173165,173166,173167,173168],{"id":170990,"depth":185,"text":170991},{"id":171118,"depth":185,"text":171119},{"id":171167,"depth":185,"text":171168},{"id":171316,"depth":185,"text":171317},{"id":171488,"depth":185,"text":171489},{"id":171557,"depth":185,"text":171558},{"id":171668,"depth":185,"text":171669},{"id":171794,"depth":185,"text":171795},{"id":171919,"depth":185,"text":171920},{"id":171974,"depth":185,"text":171975},{"id":172073,"depth":185,"text":172074,"children":173149},[173150,173151,173152,173153],{"id":172077,"depth":202,"text":172078},{"id":172111,"depth":202,"text":172112},{"id":172150,"depth":202,"text":172151},{"id":172229,"depth":202,"text":172230},{"id":172252,"depth":185,"text":172253,"children":173155},[173156,173157,173158,173159,173160],{"id":172256,"depth":202,"text":172257},{"id":172339,"depth":202,"text":172340},{"id":172384,"depth":202,"text":172385},{"id":172443,"depth":202,"text":172444},{"id":172481,"depth":202,"text":172482},{"id":172515,"depth":185,"text":173162},"9.13 if name == \"main\"",{"id":172608,"depth":185,"text":172609},{"id":172653,"depth":185,"text":172654},{"id":172764,"depth":185,"text":172765},{"id":172822,"depth":185,"text":172823},{"id":173079,"depth":185,"text":173080},{"id":173107,"depth":185,"text":173108},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170982,"description":23760},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173175,"title":173176,"body":173177,"description":173340,"extension":469,"meta":173341,"navigation":205,"path":173342,"seo":173343,"stem":173344,"__hash__":173345},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173178,"toc":173335},[173179,173182,173185,173188,173199,173201,173275,173278,173281,173284,173287,173290,173293,173296,173299,173302,173305],[14,173180,173176],{"id":173181},"python教程",[10,173183,173184],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[10,173186,173187],{},"建议学习环境：",[19,173189,173190,173193,173196],{},[22,173191,173192],{},"Python 版本：Python 3.10 及以上。",[22,173194,173195],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[22,173197,173198],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[486,173200,117449],{"id":117449},[19,173202,173203,173209,173215,173221,173227,173233,173239,173245,173251,173257,173263,173269],{},[22,173204,173205],{},[780,173206,173208],{"href":173207},".\u002Fch1-Python","Python环境与第一个程序",[22,173210,173211],{},[780,173212,173214],{"href":173213},".\u002Fch2","基础语法、变量与字符串",[22,173216,173217],{},[780,173218,173220],{"href":173219},".\u002Fch3","判断语句",[22,173222,173223],{},[780,173224,173226],{"href":173225},".\u002Fch4","循环语句",[22,173228,173229],{},[780,173230,173232],{"href":173231},".\u002Fch5","函数基础",[22,173234,173235],{},[780,173236,173238],{"href":173237},".\u002Fch6","数据容器",[22,173240,173241],{},[780,173242,173244],{"href":173243},".\u002Fch7","函数进阶",[22,173246,173247],{},[780,173248,173250],{"href":173249},".\u002Fch8","文件操作",[22,173252,173253],{},[780,173254,173256],{"href":173255},".\u002Fch9","异常、模块与包",[22,173258,173259],{},[780,173260,173262],{"href":173261},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[22,173264,173265],{},[780,173266,173268],{"href":173267},".\u002Fch11","面向对象基础",[22,173270,173271],{},[780,173272,173274],{"href":173273},".\u002Fch12","综合案例与复习路线",[486,173276,173277],{"id":173277},"学习路线",[10,173279,173280],{},"第一阶段：能运行程序。",[10,173282,173283],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[10,173285,173286],{},"第二阶段：能组织数据。",[10,173288,173289],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[10,173291,173292],{},"第三阶段：能封装逻辑。",[10,173294,173295],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[10,173297,173298],{},"第四阶段：能做小项目。",[10,173300,173301],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[486,173303,173304],{"id":173304},"参考资料",[19,173306,173307,173314,173321,173328],{},[22,173308,173309,173310],{},"黑马程序员 Python 入门教程推荐：",[780,173311,173312],{"href":173312,"rel":173313},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24246],[22,173315,173316,173317],{},"Python 官方中文教程：",[780,173318,173319],{"href":173319,"rel":173320},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24246],[22,173322,173323,173324],{},"Python 标准库文档：",[780,173325,173326],{"href":173326,"rel":173327},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24246],[22,173329,173330,173331],{},"pyecharts 文档：",[780,173332,173333],{"href":173333,"rel":173334},"https:\u002F\u002Fpyecharts.org\u002F",[24246],{"title":46,"searchDepth":185,"depth":185,"links":173336},[173337,173338,173339],{"id":117449,"depth":185,"text":117449},{"id":173277,"depth":185,"text":173277},{"id":173304,"depth":185,"text":173304},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":471},"\u002Fwiki\u002F2024-10-10-python",{"title":173176,"description":173340},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331412916]